def save_choice( a, conn, combo, selected_option ): # αποθήκευση επιλογής πίνακα και παραπομπή στην σωστή συνάρτηση combo.destroy() dict = { 'Άλμπουμ': 'album', 'Ανήκει': 'anhkei', 'Μουσικό Είδος': 'eidos', 'Επικ. Γραφίστα': 'epik_graf', 'Επικ. Μάνατζερ': 'epik_manager', 'Επικ. Οργανοπαίκτη': 'epik_organop', 'Επικ. Πελάτη': 'epik_pelath', 'Επικ. Στούντιο': 'epik_studio', 'Επικ. Συμβεβλημένου': 'epik_symbebl', 'Ερμηνείες': 'ermhneyei', 'Φυσική Διανομή': 'fys_dianomh', 'Γράφει': 'grafei', 'Ψηφιακή Διανομή': 'psif_dianomh', 'Γραφίστες': 'grafistas', 'Μάνατζερ': 'manager', 'Μουσικοί': 'mousikos', 'Οργανοπαίκτες': 'organopaikths', 'Πελάτες': 'pelaths', 'Περσόνες/γκρουπ': 'persona_group', 'Πωλήσεις': 'pwleitai', 'Στιχουργοί': 'stixourgos', 'Στούντιο': 'studio', 'Συμβεβλημένοι': 'symbeblhmenos', 'Συμβόλαια': 'symbolaio', 'Συμμετέχει': 'symmetexei', 'Συνθέτει': 'synthetei', 'Συνθέτες': 'syntheths', 'Τραγούδια': 'tragoudi', 'Υπάγεται': 'ypagetai' } if (a == 1): basic_functions.new_data(1, conn, dict[selected_option], [], []) elif (a == 2): basic_functions.select_row_window(2, conn, dict[selected_option]) elif (a == 3): basic_functions.select_row_window(3, conn, dict[selected_option]) elif (a == 4): basic_functions.show_table(dict[selected_option], conn) elif (a == 5): basic_functions.select_row_window(5, conn, dict[selected_option]) elif (a == 6): album_info.songInfo_perAlbum(conn, selected_option) else: musicians.choose_song(conn, selected_option) 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 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 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 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 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 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