Compare commits

...

10 Commits

18 changed files with 535 additions and 356 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
myenv
dist
build
main.spec
.idea

View File

@ -1 +0,0 @@
,pc-sviluppo1,pcsviluppo1,12.12.2024 11:32,file:///home/pc-sviluppo1/.config/libreoffice/4;

BIN
TEST.xlsx

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

229
insert.py
View File

@ -1,99 +1,154 @@
import mysql.connector
from mysql.connector import Error from mysql.connector import Error
import pandas as pd from datetime import datetime, date
import math
import datetime
today = datetime.date.today()
formatted_date = today.strftime("%Y-%m-%d")
data_str = "2999-12-31" data_str = "2999-12-31"
data_fine = datetime.datetime.strptime(data_str, "%Y-%m-%d").date() data_fine = datetime.strptime(data_str, "%Y-%m-%d").date()
tla = 1 class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
value_insert = []
def insert_records(connection,codice,descrizione,descrizione2,um,prezzo,sc1,sc2,ricarica,listino,codice_alternativo,codice_barre,art,tsa_codice,frn): def insert_article(connection, codice_articolo, descrizione, descrizione2, um, codice_alternativo, tsa_codice, frn_codice):
cursor_insert = connection.cursor()
try: try:
print(frn) query_art = """
print(tsa_codice) INSERT INTO art (codice, DESCRIZIONE1,DESCRIZIONE2, TUM_CODICE, codice_alternativo, TSA_CODICE, TUB_CODICE, TCM_CODICE, TGM_CODICE, TIV_CODICE_VENDITE, TIV_CODICE_ACQUISTI, TCA_CODICE, TAQ_CODICE, TS3_CODICE, TP2_CODICE, TIN_CODICE, TAA_CODICE, TNI_CODICE,FRN_CODICE)
cursor_select = connection.cursor() VALUES (%s, %s, %s,
result = [] CASE WHEN %s != '' THEN %s ELSE NULL END,
cursor = connection.cursor() %s,
if art == False: CASE WHEN %s != '' THEN %s ELSE NULL END,
query_art = "INSERT INTO art (codice, DESCRIZIONE1,DESCRIZIONE2, TUM_CODICE, codice_alternativo, TSA_CODICE, TUB_CODICE, TCM_CODICE, TGM_CODICE, TIV_CODICE_VENDITE, TIV_CODICE_ACQUISTI, TCA_CODICE, TAQ_CODICE, TS3_CODICE, TP2_CODICE, TIN_CODICE, TAA_CODICE, TNI_CODICE,FRN_CODICE) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,
cursor.execute(query_art,(codice, descrizione,descrizione2,um, codice_alternativo, tsa_codice,'0','0','0','22','22','0','0','0','0','0','0','0',frn)) CASE WHEN %s != '' THEN %s ELSE NULL END
)
count = cursor.rowcount """
result.append(count) cursor_insert.execute(query_art, (
codice_articolo, descrizione, descrizione2, um, um, codice_alternativo, tsa_codice, tsa_codice, '0', '0', '0', '22',
'22', '0', '0', '0',
query_bar = "INSERT INTO bar (ART_CODICE,CODICE_BARRE) VALUES (%s,%s)" '0', '0', '0', '0', frn_codice, frn_codice))
cursor.execute(query_bar,(codice,codice_barre))
count = cursor.rowcount
result.append(count)
if listino == 1:
query_lsv = "INSERT INTO lsv (ART_CODICE,DATA_FINE,DATA_INIZIO,TSM_CODICE,TRL_CODICE,TLV_CODICE) VALUES (%s,%s,%s,%s,%s,%s)"
cursor.execute(query_lsv,(codice,data_fine,formatted_date,sc2,ricarica,listino))
count = cursor.rowcount
result.append(count)
query_lsa = "INSERT INTO lsa (ART_CODICE,TLA_CODICE,DATA_INIZIO,DATA_FINE,PREZZO,TSM_CODICE) VALUES (%s,%s,%s,%s,%s,%s)"
cursor.execute(query_lsa,(codice,tla,formatted_date,data_fine,prezzo,sc1))
count = cursor.rowcount
result.append(count)
##sggiungere aggiunta prezzo lsv sia per listino 1 che per listino diverso
select_percentuale_totale = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select.execute(select_percentuale_totale,(sc1, ))
percentuale_totale = cursor_select.fetchone()
percentuale_totale = percentuale_totale[0]
percentuale_totale = float(percentuale_totale)
prezzo_netto = (prezzo * percentuale_totale)/100
ris = prezzo_netto + (prezzo_netto*ricarica)/100
prezzo_lsv = ris + (ris*22)/100
query_price = "INSERT INTO lsv (PREZZO) VALUES (%s)"
cursor.execute(query_price, (prezzo_lsv,))
if cursor_insert.rowcount > 0:
return True
else: else:
return False
select_percentuale_totale = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select.execute(select_percentuale_totale,(sc1, ))
percentuale_totale = cursor_select.fetchone()
percentuale_totale = percentuale_totale[0]
percentuale_totale = float(percentuale_totale)
prezzo_netto = (prezzo * percentuale_totale)/100
ris = prezzo_netto + (prezzo_netto*ricarica)/100
prezzo_lsv = ris
if listino == 4:
prezzo_lsv = ris + (ris*22)/100
query_lsv = "INSERT INTO lsv (ART_CODICE,DATA_FINE,DATA_INIZIO,TSM_CODICE,TRL_CODICE,TLV_CODICE,PREZZO) VALUES (%s,%s,%s,%s,%s,%s,%s)"
cursor.execute(query_lsv,(codice,data_fine,formatted_date,sc2,ricarica,listino,prezzo_lsv))
count = cursor.rowcount
result.append(count)
connection.commit()
if any(val != 0 for val in result):
row = [codice,descrizione,um,prezzo,sc1,sc2,ricarica,codice_alternativo,codice_barre,tsa_codice,frn]
value_insert.append(row)
return value_insert
except Error as e: except Error as e:
print(f"Errore durante l'inserimento: {e}") print(bcolors.FAIL+f"Errore durante l'inserimento: {e}")
finally: finally:
cursor.close() cursor_insert.close()
def insert_barcode(connection,codice,codice_barre):
cursor_insert = connection.cursor()
try:
query_bar = "INSERT INTO bar (ART_CODICE, CODICE_BARRE) VALUES (%s,%s)"
cursor_insert.execute(query_bar, (codice, codice_barre))
if cursor_insert.rowcount > 0:
return True
else:
return False
except Error as e:
print(bcolors.FAIL+f"Errore durante l'inserimento: {e}")
finally:
cursor_insert.close()
def insert_listino_acquisto(connection,codice,prezzo,sc1):
cursor_insert = connection.cursor()
try:
query_lsa = """
INSERT INTO lsa (ART_CODICE, TLA_CODICE, DATA_INIZIO, DATA_FINE, PREZZO, TSM_CODICE)
VALUES (%s,%s,%s,%s,%s,
CASE WHEN %s != '' THEN %s ELSE NULL END
)
"""
cursor_insert.execute(query_lsa, (codice, '1', date.today().strftime("%Y-%m-%d"), data_fine, prezzo, sc1, sc1))
if cursor_insert.rowcount > 0:
return cursor_insert.lastrowid
else:
return False
except Error as e:
print(bcolors.FAIL+f"Errore durante l'inserimento: {e}")
finally:
cursor_insert.close()
def insert_listino_vendita(connection,codice,prezzo,prezzo_pubblico,listino,sc1,sc2,ricarica):
cursor_insert = connection.cursor()
cursor_select_sc1 = connection.cursor(buffered=True)
cursor_select_sc2 = connection.cursor(buffered=True)
cursor_select_ricarica = connection.cursor(buffered=True)
try:
percentuale_totale_sc1 = percentuale_totale_sc2 = percentuale_ricarica = 0
if sc1:
select_sc1 = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select_sc1.execute(select_sc1, (sc1,))
result_sc1 = cursor_select_sc1.fetchone()
percentuale_totale_sc1 = float(result_sc1[0]) if result_sc1 else 0
if sc2:
select_sc2 = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select_sc2.execute(select_sc2, (sc2,))
result_sc2 = cursor_select_sc2.fetchone()
percentuale_totale_sc2 = float(result_sc2[0]) if result_sc2 else 0
if ricarica:
select_ricarica = "SELECT RICARICO FROM trl WHERE CODICE = %s"
cursor_select_ricarica.execute(select_ricarica, (ricarica,))
result_ricarica = cursor_select_ricarica.fetchone()
percentuale_ricarica = float(result_ricarica[0]) if result_ricarica else 0
if ricarica != '0':
if percentuale_totale_sc1 != 0:
prezzo = prezzo * (percentuale_totale_sc1 / 100)
if percentuale_ricarica != 0:
prezzo += prezzo * (percentuale_ricarica /100)
if percentuale_totale_sc2 != 0:
prezzo = prezzo * (percentuale_totale_sc2 /100)
if listino == '1' or listino == '4':
prezzo += prezzo * (22 / 100)
if prezzo_pubblico != '' and listino == '1':
prezzo = prezzo_pubblico
query_lsv = """
INSERT INTO lsv (ART_CODICE,TLV_CODICE,DATA_INIZIO,DATA_FINE,PREZZO,TSM_CODICE,TRL_CODICE)
VALUES (%s,%s,%s,%s,%s,
CASE WHEN %s != '' THEN %s ELSE NULL END,
CASE WHEN %s != '' THEN %s ELSE NULL END
)
"""
cursor_insert.execute(query_lsv, (codice, listino, date.today().strftime("%Y-%m-%d"), data_fine, prezzo, sc2, sc2, ricarica, ricarica))
if cursor_insert.rowcount > 0:
return cursor_insert.lastrowid
else:
return False
else:
return False
except Error as e:
print(bcolors.FAIL+f"Errore durante l'inserimento: {e}")
return None
finally:
cursor_insert.close()
cursor_select_sc1.close()
cursor_select_sc2.close()
cursor_select_ricarica.close()

234
main.py
View File

@ -1,20 +1,21 @@
import pandas as pd import pandas as pd
import mysql.connector
import math
import xlsxwriter
import tkinter as tk
from tkinter import filedialog,messagebox
from datetime import datetime
from mysql.connector import Error
from connection import create_connection from connection import create_connection
from connection import close_connection from search import search_article, search_barcode, search_lsa, search_lsv, search_um
from search import search_article from update import update_article, update_lsa, update_lsv
from update import update_records from insert import insert_barcode, insert_article, insert_listino_acquisto, insert_listino_vendita
from insert import insert_records
from write import write_excel from write import write_excel
from write_excel_insert import write_excel_insert
from upload import upload_excel from upload import upload_excel
class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
host = "62.86.98.170" host = "62.86.98.170"
user = "root" user = "root"
@ -23,118 +24,143 @@ database = "arc_rumo"
port = 3307 port = 3307
#creo la connessione al database #creo la connessione al database
conn = create_connection(host, user, password, database, port) connection = create_connection(host, user, password, database, port)
#leggo il file excel #leggo il file excel
file_input = upload_excel() file_input = upload_excel()
df = pd.read_excel(file_input, usecols='A:O') df = pd.read_excel(file_input, usecols='A:O', dtype={'CODICE': str, 'DESCRIZIONE': str, 'UN':str, 'SC1': str, 'RICARICA1': str, 'RICARICA2': str, 'RICARICA3': str, 'RICARICA4': str, 'SC2': str, 'CODICE_BARRE': str, 'CODICE ALTERNATIVO': str, 'GRUPPO STATISTICO': str, 'FORNITORE': str,})
updated_rows = []
i=0
#leggo le colonne del file excel #leggo le colonne del file excel
for index, row in df.iterrows(): for index, row in df.iterrows():
codice = row['CODICE']
descrizione = row['DESCRIZIONE']
um = row['UN']
costo = row['COSTO']
codice_articolo = '' if pd.isna(row['CODICE']) else row['CODICE']
descrizione = '' if pd.isna(row['DESCRIZIONE']) else row['DESCRIZIONE']
um = '' if pd.isna(row['UN']) else row['UN']
costo = '' if pd.isna(row['COSTO']) else float(row['COSTO'])
sc1 = '' if pd.isna(row['SC1']) else row['SC1']
if math.isnan(row['SC1']): ricarica = {"1" : "", "2" : "", "4" : ""}
sc1 = row['SC1']
else:
sc1 = int(row['SC1']) ## tsm_codice per la tabella lsa
if math.isnan(row['SC2']): if not pd.isna(row['RICARICA1']):
sc2 = row['SC2'] ricarica['1'] = row['RICARICA1']
else : if not pd.isna(row['RICARICA2']):
sc2 = int(row['SC2']) ricarica['2'] = row['RICARICA2']
#if not pd.isna(row['RICARICA3']):
# ricarica['3'] = row['RICARICA3']
if not pd.isna(row['RICARICA4']):
ricarica['4'] = row['RICARICA4']
if math.isnan(row['RICARICA1']): sc2 = '' if pd.isna(row['SC2']) else row['SC2']
ricarica1 = row['RICARICA1'] prezzo_pubblico = '' if pd.isna(row['PREZZO PUBBLICO']) else float(row['PREZZO PUBBLICO'])
else: codice_barre = '' if pd.isna(row['CODICE_BARRE']) else row['CODICE_BARRE']
ricarica1 = int(row['RICARICA1']) ## trl_codice per codice listino 1 codice_alternativo = '' if pd.isna(row['CODICE ALTERNATIVO']) else row['CODICE ALTERNATIVO']
tsa_codice = '' if pd.isna(row['GRUPPO STATISTICO']) else row['GRUPPO STATISTICO']
frn_codice = '' if pd.isna(row['FORNITORE']) else row['FORNITORE']
if math.isnan(row['RICARICA2']):
ricarica2 = row['RICARICA2']
else:
ricarica2 = int(row['RICARICA2']) ## trl_codice per codice listino 2
if math.isnan(row['RICARICA3']):
ricarica3 = row['RICARICA3']
else:
ricarica3 = int(row['RICARICA3']) ## trl_codice per codice listino 3
if math.isnan(row['RICARICA4']):
ricarica4 = row['RICARICA4']
else:
ricarica4 = int(row['RICARICA4']) ## trl_codice per codice listino 4
codice_barre = str(row['CODICE_BARRE'])
codice_alternativo = str(row['CODICE ALTERNATIVO'])
prezzo = float(row['COSTO'])
if math.isnan(row['GRUPPO STATISTICO']):
tsa_codice = row['GRUPPO STATISTICO']
else:
tsa_codice = int(row['GRUPPO STATISTICO'])
frn = str(row['FORNITORE'])
descrizione2 = '' descrizione2 = ''
## se decrizione supera 40 ## se decrizione supera 40
len_descrizione = len(descrizione) if len(descrizione) > 40 :
if len_descrizione > 40 :
descrizione1 = descrizione [: 40] descrizione1 = descrizione [: 40]
print(descrizione1)
descrizione2 = descrizione [40 :] descrizione2 = descrizione [40 :]
print(descrizione2)
descrizione = descrizione1 descrizione = descrizione1
if conn : updated_rows.append({'ART_CODICE': [0, codice_articolo], 'TUM_CODICE': [0, um], 'CODICE_BARRE': [0, codice_barre], 'LSA_ID': [0, ''], 'LSV_ID': {'1': [0, ''], '2': [0, ''], '4': [0, '']}})
if ricarica1 is not None and not math.isnan(ricarica1):
listino = 1
ricarica = ricarica1
elif ricarica2 is not None and not math.isnan(ricarica2):
listino = 2
ricarica = ricarica2
elif ricarica3 is not None and not math.isnan(ricarica3):
listino = 3
ricarica = ricarica3
elif ricarica4 is not None and not math.isnan(ricarica4):
listino = 4
ricarica = ricarica4
art = search_article(conn,codice,listino) #cerco codice articolo if connection :
if art == True : ## se l'atricolo esiste eseguo l'update dei valori if search_um(connection, um) or um == '':
value_update = update_records(conn,codice,prezzo,sc1,sc2,listino,ricarica,codice_barre,codice_alternativo,tsa_codice,frn) updated_rows[i]['TUM_CODICE'] = [2, um]
if value_update is not None: if codice_articolo != '' and descrizione != '':
write_excel(value_update) if search_article(connection, codice_articolo):
else: ## se non esiste o non esiste con quel listino effettuo l'inserimento print(bcolors.OKGREEN+'Articolo trovato: '+codice_articolo, end =" -> ")
##costo = 0.00
if descrizione is None :
descrizione = ' '
if um is None:
um = ' '
if math.isnan(sc1):
sc1 = ' '
if math.isnan(sc2):
sc2 = ' '
if math.isnan(ricarica):
ricarica = ' '
if not pd.isna(codice_alternativo):
codice_alternativo = ' '
if not pd.isna(codice_barre):
codice_barre = '0000000000000'
if math.isnan(tsa_codice):
tsa_codice = '0'
if not pd.isna(frn):
frn = ' '
value_insert = insert_records(conn,codice,descrizione,descrizione2,um,prezzo,sc1,sc2,ricarica,listino,codice_alternativo,codice_barre,art,tsa_codice,frn) if update_article(connection, codice_articolo, descrizione, descrizione2, um, codice_alternativo, tsa_codice, frn_codice):
write_excel_insert(value_insert) print(bcolors.OKGREEN + 'Aggiornato')
updated_rows[i]['ART_CODICE'] = [2, codice_articolo]
if conn : else:
conn.close() print(bcolors.FAIL + "Aggiornamento non riuscito")
updated_rows[i]['ART_CODICE'] = [0, codice_articolo]
else:
print(bcolors.WARNING+'Articolo non trovato: '+codice_articolo, end =" -> ")
if insert_article(connection, codice_articolo, descrizione, descrizione2, um, codice_alternativo, tsa_codice, frn_codice):
print(bcolors.OKGREEN + 'Inserito')
updated_rows[i]['ART_CODICE'] = [1, codice_articolo]
else:
print(bcolors.FAIL + "Inserimento non riuscito")
updated_rows[i]['ART_CODICE'] = [0, codice_articolo]
continue
else:
continue
else:
print(bcolors.FAIL + 'Unità di misura non presente nel gestionale: ' + um)
updated_rows[i]['ART_CODICE'] = [0, codice_articolo]
updated_rows[i]['TUM_CODICE'] = [0, um]
continue
if codice_barre != '':
if not search_barcode(connection, codice_articolo, codice_barre):
print(bcolors.WARNING + 'Barcode non trovato: ' + codice_barre, end=" -> ")
if insert_barcode(connection, codice_articolo, codice_barre):
print(bcolors.OKGREEN + 'Inserito')
updated_rows[i]['CODICE_BARRE'] = [1, codice_barre]
else:
print(bcolors.FAIL + "Inserimento non riuscito")
updated_rows[i]['CODICE_BARRE'] = [0, codice_barre]
else:
print(bcolors.OKGREEN + 'Barcode già inserito: ' + codice_barre)
updated_rows[i]['CODICE_BARRE'] = [2, codice_barre]
if costo != '':
id_lsa = search_lsa(connection, codice_articolo)
if id_lsa:
print(bcolors.OKGREEN + 'Listino di acquisto trovato', end=" -> ")
if update_lsa(connection, id_lsa[0], costo, sc1):
print(bcolors.OKGREEN + 'Aggiornato')
updated_rows[i]['LSA_ID'] = [2, id_lsa[0]]
else:
print(bcolors.FAIL + "Aggiornamento non riuscito")
updated_rows[i]['LSA_ID'] = [0, id_lsa[0]]
else:
print(bcolors.WARNING + 'Listino di acquisto non trovato', end=" -> ")
id_lsa = insert_listino_acquisto(connection, codice_articolo, costo, sc1)
if id_lsa:
print(bcolors.OKGREEN + 'Inserito')
updated_rows[i]['LSA_ID'] = [1, id_lsa]
else:
print(bcolors.FAIL + "Inserimento non riuscito")
for key, value in ricarica.items():
id_lsv = search_lsv(connection, codice_articolo, value, key)
if id_lsv:
print(bcolors.OKGREEN + 'Listino di vendita trovato', end=" -> ")
if update_lsv(connection, id_lsv[0], costo, prezzo_pubblico, key, sc1, sc2, value):
print(bcolors.OKGREEN + 'Aggiornato')
updated_rows[i]['LSV_ID'][key] = [2, id_lsv[0]]
else:
print(bcolors.FAIL + "Aggiornamento non riuscito")
updated_rows[i]['LSV_ID'][key] = [0, id_lsv[0]]
else:
if value != '':
print(bcolors.WARNING + 'Listino di vendita non trovato', end=" -> ")
id_lsv = insert_listino_vendita(connection, codice_articolo, costo, prezzo_pubblico, key, sc1, sc2, value)
if id_lsv:
print(bcolors.OKGREEN + 'Inserito')
updated_rows[i]['LSV_ID'][key] = [1, id_lsv]
else:
print(bcolors.FAIL + "Inserimento non riuscito")
connection.commit()
i += 1
write_excel(updated_rows)
if connection :
connection.close()

138
search.py
View File

@ -1,32 +1,116 @@
import pandas as pd from datetime import date
import mysql.connector
import math
import xlsxwriter
import tkinter as tk
from tkinter import filedialog,messagebox
from datetime import datetime
from mysql.connector import Error
def search_article(connection,codice,listino): class bcolors:
cursor_1 = connection.cursor() HEADER = '\033[95m'
cursor_2 = connection.cursor() OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def search_article(connection, codice_articolo):
cursor_art = connection.cursor(buffered=True)
try:
query = "SELECT codice FROM art WHERE codice = %s" query = "SELECT codice FROM art WHERE codice = %s"
cursor_1.execute(query,(codice,)) cursor_art.execute(query, (codice_articolo,))
result_1 = cursor_1.fetchone() result = cursor_art.fetchone()
if result:
if result_1: ## se l'articolo esiste creco per codice listino return True
query_lsv = "SELECT TLV_CODICE FROM lsv WHERE ART_CODICE = %s AND TLV_CODICE = %s"
cursor_2.execute(query_lsv,(codice,listino))
result_2 = cursor_2.fetchone()
if result_2: ## se il codice listino è stato trovato
print('codice listino trovato')
return True ## esistono sia articolo che codice listino
else: else:
print('codice listino non trovato') return False
return 'not code art'
except Exception as e:
print(bcolors.FAIL+f"Errore durante la ricerca: {e}")
return None
finally:
if cursor_art:
cursor_art.close()
def search_barcode(connection, codice_articolo, codice_barre):
cursor_bar = connection.cursor(buffered=True)
try:
query = "SELECT ID FROM bar WHERE ART_CODICE = %s AND CODICE_BARRE= %s"
cursor_bar.execute(query, (codice_articolo, codice_barre))
result = cursor_bar.fetchone()
if result:
return True
else: else:
print('codice non esiste') return False
return False ## l'articolo non esiste
except Exception as e:
print(bcolors.FAIL+f"Errore durante la ricerca: {e}")
return None
finally:
if cursor_bar:
cursor_bar.close()
def search_um(connection, um):
cursor_um = connection.cursor(buffered=True)
try:
query = "SELECT codice FROM tum WHERE codice = %s"
cursor_um.execute(query, (um,))
result = cursor_um.fetchone()
if result:
return True
else:
return False
except Exception as e:
print(bcolors.FAIL+f"Errore durante la ricerca: {e}")
return None
finally:
if cursor_um:
cursor_um.close()
def search_lsv(connection, codice_articolo, ricarica, listino):
cursor_lsv = connection.cursor(buffered=True)
try:
query = "SELECT ID FROM lsv WHERE ART_CODICE = %s AND TLV_CODICE = %s AND DATA_FINE > %s ORDER BY DATA_INIZIO DESC"
cursor_lsv.execute(query, (codice_articolo, listino, date.today().strftime("%Y-%m-%d")))
result = cursor_lsv.fetchone()
if result: # se il listino esiste
return result
else:
return False
except Exception as e:
print(bcolors.FAIL+f"Errore durante la ricerca: {e}")
return None
finally:
if cursor_lsv:
cursor_lsv.close()
def search_lsa(connection, codice_articolo):
cursor_lsa = connection.cursor(buffered=True)
try:
query = "SELECT ID FROM lsa WHERE ART_CODICE = %s AND TLA_CODICE = '1' AND DATA_FINE > %s ORDER BY DATA_INIZIO DESC"
cursor_lsa.execute(query, (codice_articolo, date.today().strftime("%Y-%m-%d")))
result = cursor_lsa.fetchone()
if result: # se il listino esiste
return result
else:
return False
except Exception as e:
print(bcolors.FAIL+f"Errore durante la ricerca: {e}")
return None
finally:
if cursor_lsa:
cursor_lsa.close()

232
update.py
View File

@ -1,128 +1,124 @@
import mysql.connector from datetime import date
from mysql.connector import Error from mysql.connector import Error
import pandas as pd
import math
value_update = [] value_update = []
def update_records(connection,codice,prezzo,sc1,sc2,listino,ricarica,codice_barre,codice_alternativo,tsa_codice,frn): class bcolors:
HEADER = '\033[95m'
OKBLUE = '\033[94m'
OKCYAN = '\033[96m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
BOLD = '\033[1m'
UNDERLINE = '\033[4m'
def update_article(connection, codice_art, descrizione1, descrizione2, um, codice_alt, tsa_codice, frn_codice):
cursor_update = connection.cursor()
try: try:
result = [] query_art = """
cursor = connection.cursor() UPDATE art
cursor_select = connection.cursor() SET
CODICE_ALTERNATIVO = CASE WHEN %s != '' THEN %s ELSE CODICE_ALTERNATIVO END,
if sc1 is not None and not math.isnan(sc1): DESCRIZIONE1 = CASE WHEN %s != '' THEN %s ELSE DESCRIZIONE1 END,
query_lsa = "UPDATE lsa SET TSM_CODICE = %s WHERE ART_CODICE = %s AND TLA_CODICE = '1'" DESCRIZIONE2 = CASE WHEN %s != '' THEN %s ELSE DESCRIZIONE2 END,
cursor.execute(query_lsa, (sc1, codice)) TUM_CODICE = CASE WHEN %s != '' THEN %s ELSE TUM_CODICE END,
count = cursor.rowcount TSA_CODICE = CASE WHEN %s != '' THEN %s ELSE TSA_CODICE END,
result.append(count) FRN_CODICE = CASE WHEN %s != '' THEN %s ELSE FRN_CODICE END
WHERE codice = %s
if sc2 is not None and not math.isnan(sc2): """
query_lsv_tsm = "UPDATE lsv SET TSM_CODICE = %s WHERE ART_CODICE = %s AND TLV_CODICE = %s" cursor_update.execute(query_art, (codice_alt, codice_alt, descrizione1, descrizione1, descrizione2, descrizione2, um, um, tsa_codice, tsa_codice, frn_codice, frn_codice, codice_art))
cursor.execute(query_lsv_tsm, (sc2, codice,listino))
count = cursor.rowcount
result.append(count)
if prezzo is not None and not math.isnan(prezzo):
query_lsa = "UPDATE lsa SET PREZZO = %s WHERE ART_CODICE = %s AND TLA_CODICE = '1'"
cursor.execute(query_lsa, (prezzo,codice))
count = cursor.rowcount
result.append(count)
if ricarica is not None and not math.isnan(ricarica):
query_lsv = "UPDATE lsv SET TRL_CODICE = %s WHERE ART_CODICE = %s AND TLV_CODICE = %s"
cursor.execute(query_lsv, (ricarica, codice,listino))
count = cursor.rowcount
result.append(count)
if codice_barre is not None:
query_bar = "UPDATE bar SET CODICE_BARRE = %s WHERE ART_CODICE = %s"
cursor.execute(query_bar, (codice_barre, codice))
count = cursor.rowcount
result.append(count)
if not pd.isna(codice_alternativo):
query_alt = "UPDATE art SET CODICE_ALTERNATIVO = %s WHERE codice = %s"
cursor.execute(query_alt, (codice_alternativo, codice))
count = cursor.rowcount
result.append(count)
if tsa_codice is not None and not math.isnan(tsa_codice):
query_tsa = "UPDATE art SET TSA_CODICE = %s WHERE codice = %s"
cursor.execute(query_tsa, (tsa_codice, codice))
count = cursor.rowcount
result.append(count)
if frn is not None:
query_art = "UPDATE art SET FRN_CODICE = %s WHERE codice = %s"
cursor.execute(query_art, (frn, codice))
count = cursor.rowcount
result.append(count)
#parte nuova prezzo di lsv
if sc1 is not None and not math.isnan(sc1) and prezzo is not None and not math.isnan(prezzo):
select_percentuale_totale = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select.execute(select_percentuale_totale,(sc1, ))
percentuale_totale = cursor_select.fetchone()
print('result select')
print(percentuale_totale)
percentuale_totale = percentuale_totale[0]
percentuale_totale = float(percentuale_totale)
print('percentiale totale numero')
print(percentuale_totale)
prezzo_netto = (prezzo * percentuale_totale)/100
print(prezzo_netto)
ris = prezzo_netto + (prezzo_netto*ricarica)/100
print(ris)
prezzo_lsv = ris
if listino == 1 or listino == 4:
prezzo_lsv = ris + (ris*22)/100
print(prezzo_lsv)
query_price = "UPDATE lsv SET PREZZO = %s WHERE ART_CODICE = %s AND TLV_CODICE = %s"
cursor.execute(query_price, (prezzo_lsv, codice,listino))
connection.commit()
if all(value == 0 for value in result):
print(f"Record non aggiornati per ART_CODICE: {codice}")
if math.isnan(prezzo):
prezzo = 0
if math.isnan(listino):
listino = 0
if math.isnan(sc1):
sc1 = 0
if math.isnan(sc2):
sc2 = 0
if math.isnan(ricarica):
ricarica = 0
if math.isnan(codice_barre):
codice_barre = 0
if pd.isna(codice_alternativo):
codice_alternativo = 0
if math.isnan(tsa_codice):
tsa_codice = 0
if math.isnan(frn):
frn = 0
row = [codice,prezzo,listino,sc1,ricarica,codice_barre,codice_alternativo,sc2,tsa_codice,frn]
value_update.append(row)
return value_update
if cursor_update.rowcount > 0:
return True
else: else:
print(f"Record aggiornati per ART_CODICE: {codice}") return False
except Error as e: except Error as e:
print(f"Errore durante l'aggiornamento: {e}") print(bcolors.FAIL+f"Errore durante l'aggiornamento: {e}")
finally: finally:
cursor.close() cursor_update.close()
def update_lsa(connection, id_lsa, prezzo, tsm_codice):
cursor_update = connection.cursor()
try:
if tsm_codice != '':
query_lsa = "UPDATE lsa SET PREZZO = %s, DATA_INIZIO = %s, TSM_CODICE = %s WHERE ID = %s"
cursor_update.execute(query_lsa, (prezzo, date.today().strftime("%Y-%m-%d"), tsm_codice, id_lsa))
else:
query_lsa = "UPDATE lsa SET PREZZO = %s, DATA_INIZIO = %s WHERE ID = %s"
cursor_update.execute(query_lsa, (prezzo, date.today().strftime("%Y-%m-%d"), id_lsa))
if cursor_update.rowcount > 0:
return True
else:
return False
except Error as e:
print(bcolors.FAIL+f"Errore durante l'aggiornamento: {e}")
finally:
cursor_update.close()
def update_lsv(connection, id_lsv, prezzo, prezzo_pubblico, listino, sc1, sc2, ricarica):
cursor_update = connection.cursor()
cursor_select_sc1 = connection.cursor(buffered=True)
cursor_select_sc2 = connection.cursor(buffered=True)
cursor_select_ricarica = connection.cursor(buffered=True)
try:
percentuale_totale_sc1 = percentuale_totale_sc2 = percentuale_ricarica = 0
if sc1:
select_sc1 = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select_sc1.execute(select_sc1, (sc1,))
result_sc1 = cursor_select_sc1.fetchone()
percentuale_totale_sc1 = float(result_sc1[0]) if result_sc1 else 0
if sc2:
select_sc2 = "SELECT PERCENTUALE_TOTALE FROM tsm WHERE CODICE = %s"
cursor_select_sc2.execute(select_sc2, (sc2,))
result_sc2 = cursor_select_sc2.fetchone()
percentuale_totale_sc2 = float(result_sc2[0]) if result_sc2 else 0
if ricarica:
select_ricarica = "SELECT RICARICO FROM trl WHERE CODICE = %s"
cursor_select_ricarica.execute(select_ricarica, (ricarica,))
result_ricarica = cursor_select_ricarica.fetchone()
percentuale_ricarica = float(result_ricarica[0]) if result_ricarica else 0
if ricarica != '0':
if percentuale_totale_sc1 != 0:
prezzo = prezzo * (percentuale_totale_sc1 / 100)
if percentuale_ricarica != 0:
prezzo += prezzo * (percentuale_ricarica / 100)
if percentuale_totale_sc2 != 0:
prezzo = prezzo * (percentuale_totale_sc2 / 100)
if listino == '1' or listino == '4':
prezzo += prezzo * (22 / 100)
if prezzo_pubblico != '':
prezzo = prezzo_pubblico
query_lsv = "UPDATE lsv SET PREZZO = %s, TRL_CODICE = %s, DATA_INIZIO = %s WHERE ID = %s"
cursor_update.execute(query_lsv, (prezzo, ricarica, date.today().strftime("%Y-%m-%d"), id_lsv))
if cursor_update.rowcount > 0:
return True
else:
return False
else:
return False
except Error as e:
print(bcolors.FAIL+f"Errore durante l'aggiornamento: {e}")
finally:
cursor_update.close()

View File

@ -1,11 +1,6 @@
import pandas as pd
import mysql.connector
import math
import xlsxwriter import xlsxwriter
import tkinter as tk import tkinter as tk
from tkinter import filedialog,messagebox from tkinter import filedialog
from datetime import datetime
from mysql.connector import Error
def upload_excel(): def upload_excel():
# Crea una finestra di dialogo per selezionare il file # Crea una finestra di dialogo per selezionare il file

View File

@ -1,4 +1,4 @@
import pandas as pd
import xlsxwriter import xlsxwriter
import tkinter as tk import tkinter as tk
from datetime import datetime from datetime import datetime
@ -10,22 +10,41 @@ def write_excel(value_update):
filename = f'Articoli_Modificati{today}.xlsx' filename = f'Articoli_Modificati{today}.xlsx'
workbook = xlsxwriter.Workbook(filename) workbook = xlsxwriter.Workbook(filename)
worksheet = workbook.add_worksheet() worksheet = workbook.add_worksheet()
updated_format = workbook.add_format({'bg_color': '#D9EAD3'})
created_format = workbook.add_format({'bg_color': '#FFF2CC'})
error_format = workbook.add_format({'bg_color': '#F4CCCC'})
worksheet.write('A1', 'CODICE (ART_CODICE)') worksheet.set_column(0, 0, 30)
worksheet.write('B1', 'COSTO (PREZZO)') worksheet.set_column(2, 6, 30)
worksheet.write('C1', 'CODICE LISTINO (TLV/TLA_CODICE)')
worksheet.write('D1', 'SC1 (TSM_CODICE)') worksheet.write('A1', 'ARTICOLO')
worksheet.write('E1', 'RICARICA1 (TRL_CODICE)') worksheet.write('B1', 'UM')
worksheet.write('F1', 'CODICE BARRE') worksheet.write('C1', 'CODICE A BARRE')
worksheet.write('G1', 'CODICE ALTERNATIVO') worksheet.write('D1', 'LISTINO DI ACQUISTO (ID LSA)')
worksheet.write('H1', 'TSM_CODICE_LSV') worksheet.write('E1', 'LISTINO DI VENDITA 1 (ID LSV)')
worksheet.write('I1', 'TSA_CODICE') worksheet.write('F1', 'LISTINO DI VENDITA 2 (ID LSV)')
worksheet.write('J1', 'FORNITORE') worksheet.write('G1', 'LISTINO DI VENDITA 4 (ID LSV)')
for row_index, row_data in enumerate(value_update): for row_index, row_data in enumerate(value_update):
for col_index, value in enumerate(row_data): for col_index, value in enumerate(row_data):
worksheet.write(row_index + 1, col_index, value)
if col_index == 4:
for listino, lsv in row_data[value].items():
if lsv[0]==0:
worksheet.write(row_index + 1, col_index, str(lsv[1]), error_format)
elif lsv[0]==1:
worksheet.write(row_index + 1, col_index, str(lsv[1]), created_format)
elif lsv[0]==2:
worksheet.write(row_index + 1, col_index, str(lsv[1]), updated_format)
col_index+=1
else:
if row_data[value][0]==0:
worksheet.write(row_index + 1, col_index, str(row_data[value][1]), error_format)
elif row_data[value][0]==1:
worksheet.write(row_index + 1, col_index, str(row_data[value][1]), created_format)
elif row_data[value][0]==2:
worksheet.write(row_index + 1, col_index, str(row_data[value][1]), updated_format)
root = tk.Tk() root = tk.Tk()

View File

@ -1,4 +1,4 @@
import pandas as pd
import xlsxwriter import xlsxwriter
import tkinter as tk import tkinter as tk
from datetime import datetime from datetime import datetime