def change_rev():
    cs = db.Conn().conn()
    cur = cs.cursor()
    serversocket.send(bytes("Który numer projektu ma mieć podniesioną rewizję?", "utf-8"))
    nr_ki = serversocket.recv(8)
    nr_ki = nr_ki.decode("utf-8")
    nr = nr_ki[:7]
    rev = nr_ki[-1]
    cur.execute("SELECT nr_ki, rev FROM all_ki WHERE nr_ki = %s AND rev_status = 'RELEASED' OR rev_status = 'APPROVED'"\
        % ("'"+nr+"'"))
    released = []
    for rel in cur:
        nr = rel[0]
        rev = rel[1]
        project = nr+rev
        released.append(project)
    if nr_ki in released:
            # podaje status WIP z BD
        cur.execute("SELECT stat_name FROM status WHERE stat_id = 1")
        for wip in cur:
            wip = wip[0]
        rev = ord(rev)
        if rev > 64 and rev < 91:
            rev += 1
            new_rev = chr(rev)
        else:
            print('Błąd. Za wysoka rewizja! Utwórz nowy projekt.')
            conn.close()
        # aktualna data
        dat = datetime.datetime.now().date()
        # aktualny czas
        tim = datetime.datetime.now().time()
        # wstawianie do bazy do tabeli historycznej
        cur.execute("INSERT INTO history (nr_ki, rev, stat, dat, tim) \
            VALUES (%s, %s, %s, %s, %s)", (nr, new_rev, wip, dat, tim))
        # pobiera dane z bazy - ścieżkę, klienta, nazwę
        cur.execute("SELECT ki_path, customer, project_name, project_owner FROM all_ki WHERE nr_ki = %s" % ("'" + nr + "'"))
        for kit in cur:
            path = kit[0]
            customer = kit[1]
            name_project = kit[2]
            project_owner = kit[3]
        # tworzenie nowego katalogu ścieżka do katalogu
        os.mkdir(path + '\\' + nr + ' rev ' + new_rev)
        # WSTAWIA PROJEKT z nowa rewizja DO TABELI all_ki z statusem wip
        cur.execute("INSERT INTO all_ki (nr_ki, rev, rev_status, ki_path, customer, project_name, project_owner) \
            VALUES (%s, %s, %s, %s, %s, %s, %s)", (nr, new_rev, wip, path, customer, name_project, project_owner))
        serversocket.send(bytes("Utworzono nową rewizję ("+new_rev+") dla projektu "+nr,"utf-8"))
    else: serversocket.send(bytes("Nieorawidłowy numer KI", "utf-8"))
    cs.commit()
    cs.close()
def history():
    cs = db.Conn().conn()
    cur = cs.cursor()

    serversocket.send(bytes("Numer projektu: ", "utf-8"))
    nr_ki = serversocket.recv(8)
    nr_ki = nr_ki.decode("utf-8")

    cur.execute("SELECT dat, tim, nr_ki, rev, stat FROM history WHERE nr_ki = %s" % ("'"+nr_ki+"'"))
    serversocket.send(bytes("Zmiany projektu "+nr_ki, "utf-8"))
    for i in cur:
        day = str(i[0].day)
        mon = str(i[0].month)
        yr = str(i[0].year)
        hr = str(i[1].hour)
        min = str(i[1].minute)
        sec = str(i[1].second)
        nr = i[2]
        rev = i[3]
        stat = i[4]
        history = nr+' - '+rev+' - '+stat+' - '+day+'-'+mon+'-'+yr+', '+hr+':'+min+':'+sec +"\n"
        serversocket.send(bytes(history, "utf-8"))
def archive():
    cs = db.Conn().conn()
    cur = cs.cursor()
    serversocket.send(bytes("Który numer projektu wychodzi z produkcji?:", "utf-8"))
    nr_ki = serversocket.recv(8)
    nr_ki = nr_ki.decode("utf-8")
    nr = nr_ki[:7]
    rev = nr_ki[-1]
    cur.execute("SELECT nr_ki, rev FROM all_ki WHERE nr_ki = %s AND rev_status = 'RELEASED'"\
    % ("'"+nr+"'"))
    released = []
    for rel in cur:
        nr = rel[0]
        rev = rel[1]
        project = nr+rev
        released.append(project)
    if nr_ki in released:
        # pobiera status ARCHIVED z bazy
        cur.execute("SELECT stat_name FROM status WHERE stat_id = 4")
        for arch in cur:
            arch = arch[0]

        # aktualna data
        dat = datetime.datetime.now().date()
        # aktualny czas
        tim = datetime.datetime.now().time()

        # wstawianie do bazy do tabeli historycznej
        cur.execute("INSERT INTO history (nr_ki, rev, stat, dat, tim) \
            VALUES (%s, %s, %s, %s, %s)", (nr, rev, arch, dat, tim))

        # aktualizuje status do ARCHIVED w podanym numerze KI
        cur.execute("UPDATE all_ki SET rev_status = %s WHERE nr_ki = %s AND rev = %s" , (arch, nr, rev))

        serversocket.send(bytes("Projekt zarchiwizowany", "utf-8"))

    else: serversocket.send(bytes("Nieorawidłowy numer KI", "utf-8"))
    cs.commit()
    cs.close()
import db_connect as db
import datetime as dt

cs = db.Conn().conn()
cur = cs.cursor()

nr_ki = input("Numer projektu: ")

cur.execute("SELECT * FROM history WHERE nr_ki = %s" % ("'" + nr_ki + "'"))
print("Zmiany projektu " + nr_ki)
for i in cur:
    day = str(i[4].day)
    mon = str(i[4].month)
    yr = str(i[4].year)
    hr = str(i[5].hour)
    min = str(i[5].minute)
    sec = str(i[5].second)
    nr = i[1]
    rev = i[2]
    stat = i[3]
    print(nr + ' - ' + rev + ' - ' + stat + ' - ' + day + '-' + mon + '-' +
          yr + ', ' + hr + ':' + min + ':' + sec)
def update_approve():

    cs = db.Conn().conn()
    cur = cs.cursor()

    #Pobranie z BD numerów projektów z statusem WIP
    cur.execute("SELECT nr_ki, rev FROM all_ki WHERE rev_status = 'WIP'")

    proj = []
    for wip in cur:
        project = wip[0] + wip[1]
        proj.append(project)

    serversocket.send(bytes("Projekty oczekujące na akceptację:", "UTF-8"))

    for p in proj: 
        serversocket.send(bytes(p+"\n", "UTF-8"))

    serversocket.send(bytes('Który numer KI akceptujesz?:', "utf-8"))
    nr_ki = serversocket.recv(8)
    nr_ki = nr_ki.decode("utf-8")
    if nr_ki in proj:
        serversocket.send(bytes('Czy projekt jest ok? [T/N]:',"utf-8"))
        accept = serversocket.recv(1)
        accept = accept.decode("utf-8")
        if accept.lower() == 't':
            nr = nr_ki[:7]
            rev = nr_ki[-1]
            # podaje status z BD
            cur.execute("SELECT stat_name FROM status WHERE stat_id = 2")
            for app in cur:
                approve = app[0]
            # aktualna data
            dat = datetime.datetime.now().date()
            # aktualny czas
            tim = datetime.datetime.now().time()
            # OPIS GABARYTÓW PROJEKTU
            serversocket.send(bytes('Podaj gabaryty zewnętrzne produktu:', "utf-8"))
            serversocket.send(bytes('L: ', "utf-8"))
            l = serversocket.recv(16)
            l = l.decode("utf-8")
            serversocket.send(bytes('W: ', "utf-8"))
            w = serversocket.recv(16)
            w = w.decode("utf-8")
            serversocket.send(bytes('H: ', "utf-8"))
            h = serversocket.recv(16)
            h = h.decode("utf-8")
            # wstawianie do bazy do tabeli historycznej
            cur.execute("INSERT INTO history (nr_ki, rev, stat, dat, tim) \
                VALUES (%s, %s, %s, %s, %s)", (nr, rev, approve, dat, tim))        
            #wstawia do bazy gabaryty projektu
            cur.execute("UPDATE all_ki SET rev_status = %s, lenght = %s, width = %s, height = %s \
                WHERE nr_ki = %s AND rev = %s" , (approve, l, w, h, nr, rev))

            cur.execute("SELECT ki_path FROM all_ki WHERE nr_ki = %s" % ("'" + nr + "'"))
            for path in cur: 
                path = path[0]

            doc = fpdf.FPDF()
            doc.add_page()
            doc.set_font('Arial', '', 12)
            doc.cell(25, 10, nr_ki)
            doc.    (path+"\\"+nr+" rev "+rev+"\\"+nr_ki+"_doc.pdf", "F")

                    # WYSŁANIE POTWIERDZENIA O AKCEPTAACJI
            serversocket.send(bytes("Projekt "+nr+rev+" został zaakceptowany.", "utf-8"))


        elif accept.lower() != 't':
            serversocket.send(bytes("Brak akceptacji", "utf-8"))
    else: serversocket.send(bytes("Nieprawidłowy numer KI", "utf-8"))
    cs.commit()
    cs.close()
def update_release():
    cs = db.Conn().conn()
    cur = cs.cursor()

    #Pobranie z BD numerów projektów z statusem APPROVED    
    serversocket.send(bytes("Projekty oczekujące na uwolnienie do produkcji:"+"\n", "UTF-8"))

    cur.execute("SELECT nr_ki, rev FROM all_ki WHERE rev_status = 'APPROVED'")
    proj = []
    for app in cur:
        approved = app[0]+app[1]
        proj.append(approved)
        serversocket.send(bytes(approved+'\n', "utf-8"))
        
    serversocket.send(bytes('Który numer KI jest zwolniony do produkcji?:', "UTF-8"))
    nr_ki = serversocket.recv(8)
    nr_ki = nr_ki.decode("utf-8")

    if nr_ki in proj:
        serversocket.send(bytes('Czy projekt jest ok? [T/N]:', "utf-8"))
        accept = serversocket.recv(1)
        accept = accept.decode("utf-8")
        if accept == 't' or accept == 'T':
            dat = datetime.datetime.now().date()
            tim = datetime.datetime.now().time()
            nr = nr_ki[:7]
            rev = nr_ki[-1]

            # jeżeli rewizja projektu jest wyższa niż A to poprzednia dostaje status ARCHIVED
            if ord(rev) > 65 and ord(rev) < 91:
                prev_rev = chr(ord(rev)-1) # poprzednia litera od podanej

                # pobiera z BD status ARCHIVED
                cur.execute("SELECT stat_name FROM status WHERE stat_id = 4")
                for arch in cur:
                    arch = arch[0]
                # update numeru projektu do ARCHIVEED
                cur.execute("UPDATE all_ki SET rev_status = %s WHERE nr_ki = %s AND rev = %s",\
                    (arch, nr, prev_rev))
                cs.commit()
                cur.execute("INSERT INTO history (nr_ki, rev, stat, dat, tim) \
                    VALUES (%s, %s, %s, %s, %s)", (nr, prev_rev, arch, dat, tim))
                cur.execute("DELETE FROM all_ki WHERE nr_ki = %s AND rev = %s AND rev_status = %s",\
                    (nr, prev_rev, arch))

            cur.execute("SELECT stat_name FROM status WHERE stat_id = 3")
            for rel in cur:
                rel = rel[0]
            cur.execute("UPDATE all_ki SET rev_status = %s WHERE nr_ki = %s AND rev = %s",\
                (rel, nr, rev))
            cur.execute("INSERT INTO history (nr_ki, rev, stat, dat, tim) \
                VALUES (%s, %s, %s, %s, %s)", (nr, rev, rel, dat, tim))

            # wybiera ścieżke katalogu projektu
            cur.execute("SELECT ki_path FROM all_ki WHERE nr_ki = %s and rev = %s"\
                % ("'" + nr + "'", "'" + rev + "'"))
            for path in cur: path
            #podaje ścieżkę ostatniej rewizji produktu
            all_rev = os.listdir(path[0])
            for i in all_rev:
                if i[-1] == rev:
                    rev_path = path[0] + '\\' + i
            # tworzenie nowego pliku BOM dla reewizji
            bom_file = rev_path + '\\' + 'BOM.txt'
            file = open(bom_file, 'w')
            files = os.listdir(rev_path)
            for f in files:
                if f != 'BOM.txt' and f[0] != 'F' and f[-4:] == '.pdf' and f[-7:] != 'doc.pdf':
                    file.write(f[:-4] + '\n')
            file.close()

            serversocket.send(bytes("""
            Dokument PDF utworzony.
            Projekt zwolniony do produkcji.
            ""","utf-8"))

        elif accept.lower() != 't':
            serversocket.send(bytes("Brak akceptacji", "utf-8"))
    else: serversocket.send(bytes("Nieprawidłowy numer KI", "utf-8"))
    cs.commit()
    cs.close()