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.

231
insert.py
View File

@ -1,99 +1,154 @@
import mysql.connector
from mysql.connector import Error
import pandas as pd
import math
import datetime
today = datetime.date.today()
formatted_date = today.strftime("%Y-%m-%d")
from datetime import datetime, date
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:
print(frn)
print(tsa_codice)
cursor_select = connection.cursor()
result = []
cursor = connection.cursor()
if art == False:
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)"
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))
count = cursor.rowcount
result.append(count)
query_bar = "INSERT INTO bar (ART_CODICE,CODICE_BARRE) VALUES (%s,%s)"
cursor.execute(query_bar,(codice,codice_barre))
count = cursor.rowcount
result.append(count)
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,
CASE WHEN %s != '' THEN %s ELSE NULL END,
%s,
CASE WHEN %s != '' THEN %s ELSE NULL END,
%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,
CASE WHEN %s != '' THEN %s ELSE NULL END
)
"""
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',
'0', '0', '0', '0', frn_codice, frn_codice))
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,))
else :
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
if cursor_insert.rowcount > 0:
return True
else:
return False
except Error as e:
print(f"Errore durante l'inserimento: {e}")
print(bcolors.FAIL+f"Errore durante l'inserimento: {e}")
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()

242
main.py
View File

@ -1,20 +1,21 @@
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 close_connection
from search import search_article
from update import update_records
from insert import insert_records
from search import search_article, search_barcode, search_lsa, search_lsv, search_um
from update import update_article, update_lsa, update_lsv
from insert import insert_barcode, insert_article, insert_listino_acquisto, insert_listino_vendita
from write import write_excel
from write_excel_insert import write_excel_insert
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"
user = "root"
@ -23,118 +24,143 @@ database = "arc_rumo"
port = 3307
#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
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
for index, row in df.iterrows():
codice = row['CODICE']
descrizione = row['DESCRIZIONE']
um = row['UN']
costo = row['COSTO']
if math.isnan(row['SC1']):
sc1 = row['SC1']
else:
sc1 = int(row['SC1']) ## tsm_codice per la tabella lsa
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['SC2']):
sc2 = row['SC2']
else :
sc2 = int(row['SC2'])
ricarica = {"1" : "", "2" : "", "4" : ""}
if math.isnan(row['RICARICA1']):
ricarica1 = row['RICARICA1']
else:
ricarica1 = int(row['RICARICA1']) ## trl_codice per codice listino 1
if not pd.isna(row['RICARICA1']):
ricarica['1'] = row['RICARICA1']
if not pd.isna(row['RICARICA2']):
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['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
sc2 = '' if pd.isna(row['SC2']) else row['SC2']
prezzo_pubblico = '' if pd.isna(row['PREZZO PUBBLICO']) else float(row['PREZZO PUBBLICO'])
codice_barre = '' if pd.isna(row['CODICE_BARRE']) else row['CODICE_BARRE']
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['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
len_descrizione = len(descrizione)
if len_descrizione > 40 :
if len(descrizione) > 40 :
descrizione1 = descrizione [: 40]
print(descrizione1)
descrizione2 = descrizione [40 :]
print(descrizione2)
descrizione = descrizione1
if conn :
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
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 art == True : ## se l'atricolo esiste eseguo l'update dei valori
value_update = update_records(conn,codice,prezzo,sc1,sc2,listino,ricarica,codice_barre,codice_alternativo,tsa_codice,frn)
if value_update is not None:
write_excel(value_update)
else: ## se non esiste o non esiste con quel listino effettuo l'inserimento
##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)
write_excel_insert(value_insert)
if conn :
conn.close()
if connection :
if search_um(connection, um) or um == '':
updated_rows[i]['TUM_CODICE'] = [2, um]
if codice_articolo != '' and descrizione != '':
if search_article(connection, codice_articolo):
print(bcolors.OKGREEN+'Articolo trovato: '+codice_articolo, end =" -> ")
if update_article(connection, codice_articolo, descrizione, descrizione2, um, codice_alternativo, tsa_codice, frn_codice):
print(bcolors.OKGREEN + 'Aggiornato')
updated_rows[i]['ART_CODICE'] = [2, codice_articolo]
else:
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()

140
search.py
View File

@ -1,32 +1,116 @@
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 datetime import date
def search_article(connection,codice,listino):
cursor_1 = connection.cursor()
cursor_2 = connection.cursor()
query = "SELECT codice FROM art WHERE codice = %s"
cursor_1.execute(query,(codice,))
result_1 = cursor_1.fetchone()
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 search_article(connection, codice_articolo):
cursor_art = connection.cursor(buffered=True)
try:
query = "SELECT codice FROM art WHERE codice = %s"
cursor_art.execute(query, (codice_articolo,))
result = cursor_art.fetchone()
if result_1: ## se l'articolo esiste creco per codice listino
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
if result:
return True
else:
print('codice listino non trovato')
return 'not code art'
else:
print('codice non esiste')
return False ## l'articolo non esiste
return False
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:
return False
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()

214
update.py
View File

@ -1,128 +1,124 @@
import mysql.connector
from datetime import date
from mysql.connector import Error
import pandas as pd
import math
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:
result = []
cursor = connection.cursor()
cursor_select = connection.cursor()
query_art = """
UPDATE art
SET
CODICE_ALTERNATIVO = CASE WHEN %s != '' THEN %s ELSE CODICE_ALTERNATIVO END,
DESCRIZIONE1 = CASE WHEN %s != '' THEN %s ELSE DESCRIZIONE1 END,
DESCRIZIONE2 = CASE WHEN %s != '' THEN %s ELSE DESCRIZIONE2 END,
TUM_CODICE = CASE WHEN %s != '' THEN %s ELSE TUM_CODICE END,
TSA_CODICE = CASE WHEN %s != '' THEN %s ELSE TSA_CODICE END,
FRN_CODICE = CASE WHEN %s != '' THEN %s ELSE FRN_CODICE END
WHERE 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))
if sc1 is not None and not math.isnan(sc1):
query_lsa = "UPDATE lsa SET TSM_CODICE = %s WHERE ART_CODICE = %s AND TLA_CODICE = '1'"
cursor.execute(query_lsa, (sc1, codice))
count = cursor.rowcount
result.append(count)
if cursor_update.rowcount > 0:
return True
else:
return False
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.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)
except Error as e:
print(bcolors.FAIL+f"Errore durante l'aggiornamento: {e}")
finally:
cursor_update.close()
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))
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))
connection.commit()
if cursor_update.rowcount > 0:
return True
else:
return False
if all(value == 0 for value in result):
print(f"Record non aggiornati per ART_CODICE: {codice}")
if math.isnan(prezzo):
prezzo = 0
except Error as e:
print(bcolors.FAIL+f"Errore durante l'aggiornamento: {e}")
finally:
cursor_update.close()
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
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)
row = [codice,prezzo,listino,sc1,ricarica,codice_barre,codice_alternativo,sc2,tsa_codice,frn]
value_update.append(row)
return value_update
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:
print(f"Record aggiornati per ART_CODICE: {codice}")
return False
except Error as e:
print(f"Errore durante l'aggiornamento: {e}")
print(bcolors.FAIL+f"Errore durante l'aggiornamento: {e}")
finally:
cursor.close()
cursor_update.close()

View File

@ -1,11 +1,6 @@
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 tkinter import filedialog
def upload_excel():
# Crea una finestra di dialogo per selezionare il file

View File

@ -1,4 +1,4 @@
import pandas as pd
import xlsxwriter
import tkinter as tk
from datetime import datetime
@ -10,24 +10,43 @@ def write_excel(value_update):
filename = f'Articoli_Modificati{today}.xlsx'
workbook = xlsxwriter.Workbook(filename)
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.write('B1', 'COSTO (PREZZO)')
worksheet.write('C1', 'CODICE LISTINO (TLV/TLA_CODICE)')
worksheet.write('D1', 'SC1 (TSM_CODICE)')
worksheet.write('E1', 'RICARICA1 (TRL_CODICE)')
worksheet.write('F1', 'CODICE BARRE')
worksheet.write('G1', 'CODICE ALTERNATIVO')
worksheet.write('H1', 'TSM_CODICE_LSV')
worksheet.write('I1', 'TSA_CODICE')
worksheet.write('J1', 'FORNITORE')
worksheet.set_column(0, 0, 30)
worksheet.set_column(2, 6, 30)
worksheet.write('A1', 'ARTICOLO')
worksheet.write('B1', 'UM')
worksheet.write('C1', 'CODICE A BARRE')
worksheet.write('D1', 'LISTINO DI ACQUISTO (ID LSA)')
worksheet.write('E1', 'LISTINO DI VENDITA 1 (ID LSV)')
worksheet.write('F1', 'LISTINO DI VENDITA 2 (ID LSV)')
worksheet.write('G1', 'LISTINO DI VENDITA 4 (ID LSV)')
for row_index, row_data in enumerate(value_update):
for col_index, value in enumerate(row_data):
worksheet.write(row_index + 1, col_index, value)
for col_index, value in enumerate(row_data):
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()
loading_label = tk.Label(root, text="")
loading_label.pack(pady=20)

View File

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