Exemple #1
0
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