def physical_sales(conn, window, eid): #"Φυσικές πωλήσεις" #καταστροφή του παραθύρου επιλογής και δημιουργία καινούργιου window.destroy() size = "620x600" fr, root = scrollbar.scroll_window(size) root.title('Φυσικές πωλήσεις') root.config(bg='white') #εκτέλεση ερωτήματος sql,ανάλογα με την επιλογή του χρήστη που είναι αποθηκευμένη στο "eid" cur = conn.cursor() cur.execute(f''' SELECT * FROM( (select album.album_id, titlos, sum(posothta) as 'sales' from album join pwleitai on album.album_id=pwleitai.album_id where eidos="{eid}" group by album.album_id) UNION (select album.album_id, titlos,0 from (album left outer join pwleitai on album.album_id=pwleitai.album_id) where album.album_id NOT IN(SELECT album.album_id FROM album join pwleitai on album.album_id=pwleitai.album_id WHERE eidos="{eid}") group by album.album_id )) as A ORDER BY sales DESC ''') ans = cur.fetchone() #εκτύπωση των ονομάτων των στηλών l = Label( fr, font=('Lucida Console', '11'), bg='white', text=f'{"Κωδικός":<8} {"Τίτλος Άλμπουμ":<40} {"Πωλήσεις {}":<15}'. format(eid), fg="red2") l.grid(sticky=W, column=0, row=0) i = 1 while ans is not None: #αλλαγή χρώματος background if i % 2: color = 'grey97' else: color = 'white' #εκτύπωση δεδομένων l = Label(fr, bg=color, text=f'NO.{ans[0]:<5} {ans[1]:<40} {ans[2]:<15}', font=('Lucida Console', '11')).grid(sticky=W, column=0, row=i) i = i + 1 ans = cur.fetchone() cur.close() root.mainloop() return
def album_per_studio(conn): #"Άλμπουμ ανά studio ηχογράφησης" #δημιουργία παραθύρου fr,root=scrollbar.scroll_window("1610x600") root.title('Άλμπουμ ανά studio ηχογράφησης') root.config(bg='white') #εκτέλεση sql cur=conn.cursor() cur.execute('''SELECT onoma,album_id, titlos, vinyl_stock, CD_stock, release_date, graf_afm,royalties_prof,rec_start,rec_end,hours,hourly_rate FROM album right outer join studio on studio_afm=studio.afm ORDER BY onoma,album_id''') ans=cur.fetchone() i=0 studio='' #εκτύπωση αποτελεσμάτων Label(fr,bg='white',font=('Lucida Console','10'), width=183, anchor=W, text=f'{"Κωδ. Άλμπ.":<11} {"Τίτλος":<50} {"Απόθεμα Βινυλ.":<14} {"Απόθεμα CD":<11} {"Ημερ.Κυκλοφ.":<12} {"ΑΦΜ γραφίστα":<12} {"Κέρδη πνευμ.δικ.":<16} {"Ημ.έναρξης ηχογραφήσης":<22} {"Ημ.ολοκλ.":<10} {"Ώρες ηχογραφήσης":<16}',fg="red2").grid(column=0,row=i,sticky=W) while(ans is not None): i=i+1 #εκτύπωση του ονόματος και της χρέωσης ανα ώρα του studio if(str(ans[0])!=studio): studio=str(ans[0]) Label(fr,bg='grey85',font=('Lucida Console','10'),text='{}, Χρέωση:{} ευρώ/ώρα'.format(studio,str(ans[11])),width=183,anchor=W).grid(column=0,row=i,sticky=W) i=i+1 if i%2: color='white' else: color='grey97' #μετατροπή δεδομένων date date=[] for c in [5,8,9]: if(ans[c]is None or ans[c]=='0000-00-00'): date.append('-') else: date.append(ans[c].strftime("%Y-%m-%d")) if(ans[1] is None): Label(fr,bg=color,font=('Lucida Console','10'),text=f"{'-':<11} {'-':<50} {'-':<14} {'-':<11} {date[0]:<12} {'-':<12} {'-':<16} {date[1]:<22} {date[2]:<10} {'-':^16}",width=183, anchor=W).grid(column=0,row=i,sticky=W) else: Label(fr,bg=color,font=('Lucida Console','10'),text=f'{str(ans[1]):<11} {str(ans[2]):<50} {str(ans[3]):<14} {str(ans[4]):<11} {date[0]:<12} {str(ans[6]):<12} {str(ans[7]):<16} {date[1]:<22} {date[2]:<10} {str(ans[10]):^16}',width=183, anchor=W).grid(column=0,row=i,sticky=W) ans=cur.fetchone() i=i+1 #κουμπι για μετάβαση στο "show_row" για την εύρεση των στοιχείων επικοινωνίας b1=Button(fr,bg='white', width=40, activebackground='light cyan', highlightcolor='light cyan', text="Στοιχεία επικοινωνίας studio",font=('times new roman','13'),command= lambda: basic_functions.select_row_window(5,conn,'epik_studio')) b1.grid(column=0,row=i,sticky=S) cur.close() root.mainloop() return
def instruments(conn,song,window): #"Οργανοπαίκτες που συμμετείχαν σε ένα τραγούδι" window.destroy() #Καταστροφή προηγούμενου παραθύρου cur=conn.cursor() #Εκτέλεση sql και διαχείριση λαθών try: cur.execute('''SELECT organopaikths.afm,organopaikths.fullname,organopaikths.specialty FROM organopaikths WHERE organopaikths.afm in (SELECT symmetexei.afm FROM symmetexei JOIN tragoudi ON symmetexei.song_id=tragoudi.song_id WHERE tragoudi.titlos=%s) ''',song) except pymysql.Error: print("hi") cur.close() return #Δημιουργία παραθύρου size="750x500" fr,root=scrollbar.scroll_window(size) root.title('Οργανοπαίκτες που συμμετείχαν σε ένα τραγούδι') root.config(bg='white') Label(fr,font=('Lucida Console','11'),bg='grey80', width=80, text=('{}'.format(song))).grid(column=0,row=0) Label(fr,font=('Lucida Console','11'),bg='white', text=(f'{"ΑΦΜ":<9} {"ΟΝΟΜΑ":<50} {"ΜΟΥΣΙΚΗ ΙΔΙΟΤΗΤΑ":<10}'),fg="red2").grid(sticky=W,column=0,row=1) ans=cur.fetchone() i=2 while(ans is not None): #Αλλαγή χρώματος background if i%2: color='grey97' else: color='white' #Εκτύπωση δεδομένων Label(fr,font=('Lucida Console','11'),bg=color, width=80, anchor=W, text=(f'{ans[0]:<9} {ans[1]:<50} {ans[2]:<10}')).grid(sticky=W,column=0,row=i) ans=cur.fetchone() i=i+1 #κουμπί για παραπομπή στην "show_row" για την προβολή των στοιχίων επικοινωνίας b1=Button(fr,bg='white', width=40, activebackground='light cyan', highlightcolor='light cyan', text="Στοιχεία επικοινωνίας οργανοπαίκτη",font=('helvetica','11'), command= lambda: basic_functions.select_row_window(5,conn,'epik_organop')) b1.grid(column=0,row=i,sticky=S) cur.close() root.mainloop() return None
def pelates(conn): #"Πελάτες και ποσότητες των προϊόντων που προμηθεύτηκαν" #δημιουργία παραθύρου fr,root=scrollbar.scroll_window("800x600") root.title('Πελάτες/Ποσότητα προμήθειας') root.config(bg='white') #εκτέλεση sql cur=conn.cursor() cur.execute(''' SELECT pelaths.afm, pelaths.name, pwleitai.eidos,SUM(pwleitai.posothta) FROM pelaths left outer join pwleitai on pelaths.afm=pwleitai.afm GROUP BY pelaths.afm, pwleitai.eidos ''') ans=cur.fetchone() #εκτύπωση των ονομάτων των στηλών p1='ΑΦΜ' p2='Όνομα' p3='Είδος' p4='Ποσότητα' i=0 Label(fr,bg='white',font=('Lucida Console','12'),text=(f'{p1:9} {p2:50} {p3:7} {p4:10}'),fg="red2").grid(column=0,row=i,sticky=W) i=1 while ans is not None: if(ans[2] is None): eid='-' pos='0' else: eid=ans[2] pos=ans[3] #αλλαγή του χρώματος background και εκτύπωση των δεδομένων if i%2: Label(fr,bg='grey96',font=('Lucida Console','12'), text=(f'{ans[0]:9} {ans[1]:50} {eid:7} {pos:<10}')).grid(column=0,row=i,sticky=W) else: Label(fr,bg='white',font=('Lucida Console','12'),text=(f'{ans[0]:9} {ans[1]:50} {eid:7} {pos:<10}')).grid(column=0,row=i,sticky=W) ans=cur.fetchone() i=i+1 #κουμπί παραπομπής στην συνάρτηση "show_row" για την προβολή των στοιχείων επικοινωνίας b1=Button(fr,bg='white', width=40, activebackground='light cyan', highlightcolor='light cyan', text="Στοιχεία επικοινωνίας πελάτη",font=('times new roman','13'),fg='forest green',command= lambda: basic_functions.select_row_window(5,conn,'epik_pelath')) b1.grid(column=0,row=i,sticky=S) cur.close() return
def contracts(conn,window,choice): #"Στοιχεία συμβολαίων ανά κατηγορία καλλιτεχνών" #λεξικό για μετάφραση της εισόδου του χρήστη d={} d['*** Όλες ***']=['stixourgos', 'syntheths', 'mousikos'] d['Στιχουργοί']=['stixourgos'] d['Συνθέτες']=['syntheths'] d['Μουσικοί']=['mousikos'] #καταστροφή παραθύρου επιλογής και δημιουργία νέου για τα αποτελέσματα window.destroy() ch=d[choice] cur=conn.cursor() size="1000x600" fr,root=scrollbar.scroll_window(size) root.title('Στοιχεία συμβολαίων ανά κατηγορία καλλιτεχνών') root.config(bg='white') i=0 #εκτέλεση επανάληψης για κάθε ιδιότητα. Αν επιλέχθηκε συγκεκριμένη από τον χρήστη, θα εκτελεστεί μόνο μια φορά for spec in ch: #εκτέλεση ερωτήματος sql cur.execute(''' SELECT {}.afm, firstname, lastname, id_contract, startdate, enddate, pososto FROM {} join symbeblhmenos on {}.afm=symbeblhmenos.afm, symbolaio WHERE symbeblhmenos.afm=symbolaio.afm ORDER BY {}.afm, enddate DESC '''.format(spec, spec, spec, spec)) ans=cur.fetchone() #εκτύπωση ιδιότητας if spec=='stixourgos': Label(fr,bg='grey80',font=('Lucida Console','13'), width=140, anchor=W, text='ΣΤΙΧΟΥΡΓΟΙ').grid(column=0,row=i) i=i+1 if spec=='syntheths': Label(fr,bg='grey80',font=('Lucida Console','13'), width=140, anchor=W, text='ΣΥΝΘΕΤΕΣ').grid(column=0,row=i) i=i+1 if spec=='mousikos': Label(fr,bg='grey80',font=('Lucida Console','13'), width=140, anchor=W, text='ΜΟΥΣΙΚΟΙ').grid(column=0,row=i) i=i+1 #εκτύπωση των ονομάτων των στηλών r='ΑΦΜ' r0='ΟΝΟΜΑ' r1='ΕΠΩΝΥΜΟ' r2='ΚΩΔ. ΣΥΜΒ' r3='ΗΜ.ΕΝΑΡΞΗΣ' r4='ΗΜ.ΛΗΞΗΣ' r5='ΠΟΣΟΣΤΟ' Label(fr,bg='white',font=('Lucida Console','11'), width=140, anchor=W, text=f'{r:9} {r0:20} {r1:20} {r2:10} {r3:8} {r4:8} {r5:3}',fg="red2").grid(column=0,row=i,sticky=W) i=i+1 blank='' afm='' while ans is not None: #αλλαγή χρώματος background if i%2: color='white' else: color='grey97' #διαχείρηση δεδομένων date if(ans[4] is None): data1='' else: data1=ans[4].strftime("%Y-%m-%d") if(ans[5] is None): data2='' else: data2=ans[5].strftime("%Y-%m-%d") #εκτύπωση των δεδομένων, αν είναι το πρώτο συμβόλαιο του συμβεβλημένου που εμφανίζεται if ans[0]!=afm: Label(fr,bg=color, font=('Lucida Console','11'), width=140, anchor=W, text=f'{ans[0]:9} {ans[1]:20} {ans[2]:20} {ans[3]:10} {data1:10} {data2:10} {ans[6]:3}').grid(column=0,row=i,sticky=W) i=i+1 afm=ans[0] #εκτύπωση των δεδομένων,αν δεν είναι το πρώτο συμβόλαιο του συμβεβλημένου που εμφανίζεται else: Label(fr,bg=color, font=('Lucida Console','11'), width=140, anchor=W, text=f'{blank:9} {blank:20} {blank:20} {ans[3]:10} {data1:10} {data2:10} {ans[6]:3}').grid(column=0,row=i,sticky=W) i=i+1 ans=cur.fetchone() cur.close() Label(fr, bg='white', text='').grid(column=0,row=i,sticky=S) i=i+1 #κουμπί παραπομπής στην συνάρτηση "show_row" για την προβολή των στοιχείων επικοινωνίας b1=Button(fr,bg='white', width=30, activebackground='light cyan', highlightcolor='light cyan', text="Στοιχεία επικοινωνίας συμβεβλημένου",font=('helvetica','11'), command= lambda: basic_functions.select_row_window(5,conn,'epik_symbebl')) b1.grid(column=0,row=i, sticky=W) root.mainloop() return
def band_singers(conn,window,choice): #"Συγκροτήματα/Τραγουδιστές" window.destroy() #καταστροφή προηγούμενου παραθύρου #δημιουργία λεξικού για μετατροπή της επιλογής του χρήστη d={'Συγκροτήματα':'1','Τραγουδιστές':'2'} ch=d[choice] cur=conn.cursor() #δημιουργία καινούργιου παραθύρου size="800x600" fr,root=scrollbar.scroll_window(size) root.title('Συγκροτήματα/Τραγουδιστές') root.config(bg='white') i=0 #ανάλογα με την επιλογή του χρήστη, θέτουμε το "char" και εμφανίζουμε το κατάλληλο μήνυμα if(ch=='1'): char='>' Label(fr,bg='grey80',font=('Lucida Console','12'),text='Ονόματα συγκροτημάτων και αντίστοιχα μέλη:',width=61, anchor=W).grid(column=0,row=i) else: char='=' Label(fr,bg='grey80',font=('Lucida Console','12'),text='Τραγουδιστές:',width=61, anchor=W).grid(column=0,row=i) #εκτέλεση sql #Το "char" που ορίστηκε παραπάνω, διαμορφώνει κατάλληλα το ερώτημα ανάλογα με την επιλογή του χρήστη cur.execute(''' SELECT mousikos.afm, firstname, lastname, specialty,(SELECT stage_name FROM persona_group WHERE persona_group.artist_id=mousikos.artist_id) FROM (mousikos JOIN symbeblhmenos ON mousikos.afm=symbeblhmenos.afm) WHERE artist_id in (SELECT artist_id FROM mousikos GROUP BY artist_id HAVING count(artist_id){}1) ORDER BY artist_id,mousikos.afm '''.format(char)) ans=cur.fetchone() artist_name='' i=i+1 #εκτύπωση των ονομάτων των στηλών Label(fr,bg='white',font=('Lucida Console','11'),text=f'\n{"ΑΦΜ":<9} {"ΟΝΟΜΑ":<20} {"ΕΠΩΝΥΜΟ":<20} {"ΜΟΥΣΙΚΗ ΙΔΙΟΤΗΤΑ":<16}',fg="red2",width=68, anchor=W).grid(column=0,row=i,sticky=W) i=i+1 #εκτύπωση αποτελεσμάτων while ans is not None: #Αν το καλλιτεχνικό όνομα δεν έχει ξαναεμφανιστεί, εκτυπώνεται if(artist_name!=ans[4]): Label(fr,bg='grey85',font=('Lucida Console','11'),text='{}'.format(ans[4]),width=68,anchor=W).grid(column=0,row=i,sticky=W) artist_name=ans[4] i=i+1 #αλλαγή χρώματος background if i%2: color='white' else: color='grey97' #εκτύπωση των δεδομένων Label(fr,bg=color,font=('Lucida Console','11'),text=f'{ans[0]:<9} {ans[1]:<20} {ans[2]:<20} {ans[3]:<16}',width=68, anchor=W).grid(column=0,row=i,sticky=W) i=i+1 ans=cur.fetchone() #κουμπί παραπομπής στη συνάρτηση "show_row" για την προβολή των στοιχείων επικοινωνίας b1=Button(fr,bg='white', width=40, activebackground='light cyan', highlightcolor='light cyan', text="Στοιχεία επικοινωνίας συμβεβλημένου",font=('helvetica','13'),command= lambda: basic_functions.select_row_window(5,conn,'epik_symbebl')) b1.grid(column=0,row=i,sticky=S) cur.close() root.mainloop() return
def printing(table,sql,conn,window):#εκτύπωση δεδομένων #παίρνουμε τα ονόματα των στηλών και το μέγιστο μέγεθος χαρακτήρων (αν υπάρχει) cur=conn.cursor() cur.execute('''SELECT COLUMN_NAME,CHARACTER_MAXIMUM_LENGTH FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='recordcompany2' AND `TABLE_NAME`=%s ''',table) info=cur.fetchall() info_arr=[] N=len(info) #δημιουργία του πίνακα info_arr που θα έχει το μέγιστο μέγεθος χαρακτήρων για κάθε στήλη for i in range(N): temp=0 if(info[i][1] is None): if(('order_date' not in info[i][0])): temp=13 else: temp=19 else: temp=int(info[i][1]) if(temp>len(greek(info[i][0]))): info_arr.append(temp) else: info_arr.append(len(greek(info[i][0]))) #εκτέλεση sql και διαχείριση των λαθών cur.execute(sql) row=cur.fetchone() if(row is None): error("Δεν βρέθηκε!") else: #καταστροφή του παλιού παραθύρου,αν υπήρχε if(window!=0):window.destroy() #δημιουργία νέου παραθύρου fr,root=scrollbar.scroll_window("1600x600") root.title('Εκτύπωη Δεδομένων') #εκτύπωση των ονομάτων των στηλών for i in range(N): Label(fr,bg='white',font=('Lucida Console','10'),text=f'{greek(info[i][0]):<{info_arr[i]}} ',width=info_arr[i]+1,fg="red2",anchor=W).grid(column=i,row=0,sticky=W) c=1 while row is not None: #εναλλαγή χρώματος if c%2: color='grey97' else: color='white' #μετατροπή δεδομένων σε μορφή str για εκτύπωση for i in range(N): if row[i] is None or row[i]=='0000-00-00' or row[i]=='0000-00-00 00:00:00': data='-' elif('date' not in info[i][0] and 'rec' not in info[i][0]): data=str(row[i]) else: if('order_date' in info[i][0]): data = row[i].strftime("%Y-%m-%d %H:%M:%S") elif('diarkeia' in info[i][0]): data = row[i].strftime("%H:%M:%S") else: data = row[i].strftime("%Y-%m-%d") #εκτύπωση στοιχείων γραμμής Label(fr,bg=color,font=('Lucida Console','10'),text=f'{data:<{info_arr[i]}} ',width=info_arr[i]+1,anchor=W).grid(column=i,row=c,sticky=W) c=c+1 row=cur.fetchone() cur.close() return
def grafistas(conn): #"Γραφίστες και τα άλμπουμ που έχουν επιμεληθεί" #δημιουργία παραθύρου fr,root=scrollbar.scroll_window("1550x600") root.title('Γραφίστες/άλμπουμ') root.config(bg='white') #εκτέλεση ερωτήματος sql cur=conn.cursor() cur.execute('''SELECT afm,fullname,amka,address,city,tk,album_id,titlos,release_date FROM grafistas left OUTER JOIN ALBUM on afm=graf_afm ORDER BY afm''') graf=cur.fetchone() afm='' i=0 a=0 #εκτύπωση δεδομένων while(graf is not None): #αν το ΑΦΜ του γραφίστα δεν έχει ξαναεμφανιστεί if(afm!=graf[0]): #αλλαγή χρώματος background if a%2: color='grey97' else: color='white' a=a+1 i=i+1 afm=graf[0] #εκτύπωση των ονομάτων των στηλών Label(fr,bg=color,font=('Lucida Console','11'),text=(f'\n{"ΑΦΜ":<9} {"ΟΝΟΜΑ":<50} {"ΑΜΚΑ":<16} {"ΔΙΕΥΘΥΝΣΗ":<30} {"ΠΟΛΗ":<30} {"ΤΚ":<5}\n'),anchor=W, fg='forest green',width=150).grid(column=0,row=i,sticky=W) i=i+1 #εκτύπωση στοιχείων γραφίστα Label(fr,bg=color,font=('Lucida Console','11'),text=(f'{graf[0]:<9} {graf[1]:<50} {graf[2]:<16} {graf[3]:<30} {graf[4]:<30} {graf[5]:<5}'),anchor=W, width=150).grid(column=0,row=i,sticky=W) i=i+1 #αν έχει επιμεληθεί άλμπουμ ο γραφίστας, εκτύπωση του κατάλληλου μηνύματος και των αντίστοιχων ονομάτων των στηλών if(graf[6] is not None): Label(fr,bg=color,font=('Lucida Console','11'),text=("\n\nΑΛΜΠΟΥΜ ΠΟΥ ΕΧΕΙ ΕΠΙΜΕΛΗΘΕΙ:\n"), width=150, anchor=W, fg='forest green').grid(column=0,row=i, sticky=W) i=i+1 Label(fr,bg=color,font=('Lucida Console','11'),text=(f'{"ΚΩΔΙΚΟΣ":<9} {"ΤΙΤΛΟΣ ΑΛΜΠΟΥΜ":<50} {"ΗΜ.ΚΥΚΛΟΦΟΡΙΑΣ":^14}\n'),anchor=W, fg='forest green',width=150).grid(column=0,row=i,sticky=W) i=i+1 #εκτύπωση μηνύματος αν δεν έχει επιμεληθεί άλμπουμ else: Label(fr,bg=color,font=('Lucida Console','11'),text=("\n\nΔεν έχει επιμεληθεί αλμπουμ\n"),fg='forest green', anchor=W, width=150).grid(column=0,row=i, sticky=W) i=i+1 #διαχείριση των δεδομένων τύπου date και εκτύπωση των δεδομένων των άλμπουμ που έχει επιμεληθεί if(graf[6] is not None): data=[] data.append(str(graf[6])) data.append(str(graf[7])) data.append(graf[8].strftime("%Y-%m-%d")) Label(fr,bg=color,font=('Lucida Console','11'),text=(f'{data[0]:<9} {data[1]:<50} {data[2]:<16}'), anchor=W, width=150).grid(column=0,row=i,sticky=W) i=i+1 graf=cur.fetchone() #κουμπί παραπομπής στην συνάρτηση "show_row" για την προβολή των στοιχείων επικοινωνίας b1=Button(fr,bg='white', width=40, activebackground='light cyan', highlightcolor='light cyan', text="Στοιχεία επικοινωνίας γραφίστα",font=('times new roman','13'),fg='dark green',command= lambda: basic_functions.select_row_window(5,conn,'epik_graf')) b1.grid(column=0,row=i,sticky=S) cur.close return
def profit_per_album(conn): #"Έσοδα ανά άλμπουμ" #δημιουργία παραθύρου size = "620x600" fr, root = scrollbar.scroll_window(size) root.title('Έσοδα ανά άλμπουμ') #εκτέλεση ερωτήματος sql για την εύρεση των συνολικών εσόδων απο τις πωλήσεις κάθε αλμπουμ cur = conn.cursor() cur.execute(''' select album.album_id, titlos, sum(posothta*item_profit) as 'synoliko kerdos' from album left outer join pwleitai on album.album_id=pwleitai.album_id group by album.album_id''') ans = cur.fetchone() #αποθήκευση απάντησης σε λίστα a = [] while ans is not None: a.append(list(ans)) ans = cur.fetchone() cur.close() #εκτέλεση ερωτήματος sql για την εύρεση του συνολικού ποσού που δαπανήθηκε για την καταχώρηση στα ψηφιακά καταστήματα cur2 = conn.cursor() cur2.execute(''' select album.album_id, titlos, sum(adm_fee) from (album join pwleitai on album.album_id=pwleitai.album_id) join psif_dianomh on pwleitai.afm=psif_dianomh.afm group by album.album_id order by album.album_id''') b = cur2.fetchone() i = 0 while b is not None: #αφαίρεση του κόστους καταχώρησης από τα συνολικά έσοδα από τις πωλήσεις του άλμπουμ if b[2] is not None: a[i][2] = int(a[i][2]) - int(b[2]) b = cur2.fetchone() i = i + 1 i = 1 #εκτύπωση των ονομάτων των στηλών Label( fr, bg='white', font=('Lucida Console', '11'), text=f'{"Κωδικός":<8} {"Τίτλος Άλμπουμ":<40} {"Συνολικά έσοδα":<14}', fg="red2").grid(sticky=W, column=0, row=0) for i in range(len(a)): #αλλαγή του χρώματος background if i % 2: color = 'grey97' else: color = 'white' #εκτύπωση αποτελεσμάτων if (a[i][2] is None): a[i][2] = 0 Label(fr, bg=color, font=('Lucida Console', '11'), width=70, anchor=W, text=f'{a[i][0]:<8} {a[i][1]:<40} {a[i][2]:<13}').grid( sticky=W, column=0, row=i + 2) cur2.close() root.mainloop() return
def songInfo_perAlbum(conn, choice): #"Στοιχεία τραγουδιών ανά άλμπουμ" if (choice == '**Όλα τα Άλμπουμ**'): choice = '' #Δημιουργία παραθύρου size = "1300x600" fr, root = scrollbar.scroll_window(size) root.title('Στοιχεία τραγουδιών ανά άλμπουμ') root.config(bg='white') cur = conn.cursor() if choice != '': try: #Εκτέλεση sql για συγκεκριμένο άλμπουμ που είναι αποθηκευμένο στο "choice" cur.execute( ''' SELECT album.titlos, anhkei.track_no, tragoudi.titlos, diarkeia, s_language FROM tragoudi, anhkei, album WHERE anhkei.song_id=tragoudi.song_id AND anhkei.album_id=album.album_id AND album.titlos=%s ORDER BY album.titlos, anhkei.track_no, tragoudi.titlos''', choice) except pymysql.Error: cur.close() return else: #Εκτέλεση sql για όλα τα άλμπουμ cur.execute(''' SELECT album.titlos, anhkei.track_no, tragoudi.titlos, diarkeia, s_language FROM tragoudi, anhkei, album WHERE anhkei.song_id=tragoudi.song_id AND anhkei.album_id=album.album_id ORDER BY album.titlos, anhkei.track_no, tragoudi.titlos''') ans = cur.fetchone() album = '' row_num = 0 color_num = 0 while ans is not None: if ans[0] != album: #Αν δεν έχει ξαναεμφανιστεί το συγκεκριμένο άλμπουμ Label(fr, font=('Lucida Console', '12'), bg='grey80', width=140, anchor=W, text=ans[0]).grid(sticky=W, column=0, row=row_num) row_num = row_num + 1 r = 'No.' r0 = 'Τίτλος Τραγουδιού' r1 = 'Ερμηνεία' r2 = 'Μουσική' r3 = 'Στίχοι' r4 = 'Διάρκεια' r5 = 'Γλώσσα' Label( fr, font=('Lucida Console', '10'), bg='white', width=180, anchor=W, text=(f'{r:3} {r0:40} {r1:50} {r2:20} {r3:20} {r4:8} {r5:6}'), fg="magenta").grid(sticky=W, column=0, row=row_num) album = ans[0] row_num = row_num + 1 #Εύρεση του καλλιτεχνικού ονόματος του ερμηνευτή cur1 = conn.cursor() art_num = cur1.execute( ''' SELECT stage_name FROM (tragoudi join ermhneyei on tragoudi.song_id=ermhneyei.song_id), persona_group WHERE ermhneyei.artist_id=persona_group.artist_id AND tragoudi.titlos=%s''', ans[2]) a = cur1.fetchone() artists = [] if (a is None): artists.append(' ') while a is not None: artists.append(a[0]) a = cur1.fetchone() #Εύρεση των συνθετών ενός τραγουδιού cur2 = conn.cursor() syn_num = cur2.execute( ''' SELECT lastname FROM (tragoudi join synthetei on tragoudi.song_id=synthetei.song_id), symbeblhmenos WHERE synthetei.afm=symbeblhmenos.afm AND tragoudi.titlos=%s''', ans[2]) s = cur2.fetchone() synth = [] if (s is None): synth.append(' ') while s is not None: synth.append(s[0]) s = cur2.fetchone() #Εύρεση των στιχουργών ενός τραγουδιού cur3 = conn.cursor() stix_num = cur3.execute( ''' SELECT lastname FROM (tragoudi join grafei on tragoudi.song_id=grafei.song_id), symbeblhmenos WHERE grafei.afm=symbeblhmenos.afm AND tragoudi.titlos=%s''', ans[2]) st = cur3.fetchone() stix = [] if (st is None): stix.append(' ') while st is not None: stix.append(st[0]) st = cur3.fetchone() diarkeia = str(ans[3]) #Αλλαγή χρώματος background if color_num % 2: color = 'white' else: color = 'grey97' #Εκτύπωση δεδομένων Label( fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text= f'{ans[1]:<3} {ans[2]:40} {artists[0]:50} {synth[0]:20} {stix[0]:20} {diarkeia:8} {ans[4]:^6}' ).grid(sticky=W, column=0, row=row_num) row_num = row_num + 1 i = 1 blank = '' num = [art_num, syn_num, stix_num] num.sort() while i < num[2]: if i < num[0]: Label( fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text=f'{blank:45} {artists[i]:50} {synth[i]:20} {stix[i]:20}' ).grid(sticky=W, column=0, row=row_num) elif i < num[1]: if art_num == num[0]: Label(fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text=f'{blank:95} {synth[i]:20} {stix[i]:20}').grid( sticky=W, column=0, row=row_num) elif syn_num == num[0]: Label(fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text= f'{blank:45} {artists[i]:50} {blank:20} {stix[i]:20}' ).grid(sticky=W, column=0, row=row_num) elif stix_num == num[0]: Label( fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text=f'{blank:45} {artists[i]:50} {synth[i]:20}').grid( sticky=W, column=0, row=row_num) else: if art_num == num[2]: Label(fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text=f'{blank:45} {artists[i]:50}').grid(sticky=W, column=0, row=row_num) elif syn_num == num[2]: Label(fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text=f'{blank:95} {synth[i]:20}').grid(sticky=W, column=0, row=row_num) elif stix_num == num[2]: Label(fr, font=('Lucida Console', '10'), bg=color, width=180, anchor=W, text=f'{blank:116} {stix[i]:20}').grid(sticky=W, column=0, row=row_num) row_num = row_num + 1 i = i + 1 color_num = color_num + 1 ans = cur.fetchone() return
def album_per_genre(conn): #"Άλμπουμ ανά μουσικό είδος" fr, root = scrollbar.scroll_window("1335x600") #Δημιουργία παραθύρου root.title('Άλμπουμ ανά μουσικό είδος') root.config(bg='white') cur = conn.cursor() #Εκτέλεση sql cur.execute( '''SELECT * FROM((SELECT A.genre,B.album_id, B.titlos, vinyl_stock, CD_stock, release_date, graf_afm,royalties_prof,total FROM (SELECT * FROM ypagetai) AS A, (SELECT album.album_id, album.titlos, vinyl_stock, CD_stock, release_date, graf_afm,royalties_prof,COUNT(anhkei.song_id) AS total FROM (album join anhkei on album.album_id=anhkei.album_id) GROUP BY anhkei.album_id) AS B WHERE A.album_id=B.album_id ORDER BY genre, album_id) UNION (SELECT genre,'-','-','-','-','-','-','-','-' FROM eidos WHERE genre NOT IN (SELECT genre FROM ypagetai)) ) as C ORDER BY genre, album_id DESC''') ans = cur.fetchone() i = 0 eidos = '' #Εκτύπωση των ονομάτων των στηλών Label( fr, bg='white', font=('Lucida Console', '11'), width=146, anchor=W, text= f'{"Κωδ. Άλμπ.":<11} {"Τίτλος":<50} {"Απόθεμα Βινυλ.":<14} {"Απόθεμα CD":<11} {"Ημερ.Κυκλοφ.":<12} {"ΑΦΜ γραφίστα":<12} {"Κέρδη πνευμ.δικ.":<16} {"Αρ.τραγουδιών":<13}', fg="red2").grid(column=0, row=i, sticky=W) while (ans is not None): i = i + 1 #εάν το είδος δεν έχει εμφανιστεί ξανά if (str(ans[0]) != eidos): eidos = str(ans[0]) cur2 = conn.cursor() #Εύρεση μέσων πωλήσεων ανά άλμπουμ cur2.execute(f'''SELECT round(AVG(Α.total_sales)) FROM (SELECT (SUM(posothta)) as total_sales FROM (ypagetai join pwleitai on ypagetai.album_id=pwleitai.album_id) where genre="{eidos}" GROUP BY pwleitai.album_id) AS Α''') Label(fr, bg='grey85', font=('Lucida Console', '11'), text='{}, Μέσες πωλήσεις:{}'.format(eidos, str(cur2.fetchone()[0])), width=146, anchor=W).grid(column=0, row=i, sticky=W) i = i + 1 cur2.close() #Αλλαγή χρώματος background if i % 2: color = 'white' else: color = 'grey97' #Διαχείριση δεδομένων date if (ans[5] is None or ans[5] == '0000-00-00' or ans[5] == '-'): date = '-' else: date = str(ans[5]) #εκτύπωση δεδομένων Label( fr, bg=color, font=('Lucida Console', '11'), text= f'{str(ans[1]):<11} {str(ans[2]):<50} {str(ans[3]):<14} {str(ans[4]):<11} {date:<12} {str(ans[6]):<12} {str(ans[7]):<16} {str(ans[8]):<13}', width=146, anchor=W).grid(column=0, row=i, sticky=W) ans = cur.fetchone() cur.close() root.mainloop() return