Compare commits

..

9 Commits

Author SHA1 Message Date
Ambulance Clerc
c198410cd3 Ajout dans les log après chaque popup d'adresse 2023-04-25 16:37:06 +02:00
Ambulance Clerc
48353c6f98 Débug comparaison date 2023-04-25 14:07:43 +02:00
Ambulance Clerc
a94b2cc0d6 Changement sur la comparaison d'adresse. 2023-04-25 13:55:42 +02:00
Ambulance Clerc
9ba8998c32 Debug load config with outfile 2023-04-21 07:57:00 +02:00
Ambulance Clerc
513556f0a3 Copie automatique et lecture du fichier adresses.dbf 2023-04-21 00:32:05 +02:00
Ambulance Clerc
81a9717716 Changement sur la comparaison d'adresse. 2023-04-20 22:23:26 +02:00
Ambulance Clerc
3ff3416b39 Changement sur la comparaison d'adresse. 2023-04-20 20:44:38 +02:00
Ambulance Clerc
e430117d40 Changement de la longueur de l'HUID de 15 à 10 en raison de bug Winbiz 2023-03-01 18:56:40 +01:00
Ambulance Clerc
5060490ac4 Ajout d'un script pour compter les caractères du projet 2023-03-01 18:55:34 +01:00
6 changed files with 83 additions and 36 deletions

16
counter.py Normal file
View File

@@ -0,0 +1,16 @@
import os
def count_chars_in_folder(folder_path):
total_chars = 0
for filename in os.listdir(folder_path):
filepath = os.path.join(folder_path, filename)
if os.path.isfile(filepath):
with open(filepath, 'r') as file:
content = file.read()
total_chars += len(content)
print(f"fichier {filepath} = { len(content)}")
return total_chars
folder_path = '.' # mettre le chemin absolu vers le dossier ici
total_chars = count_chars_in_folder(folder_path)
print(f"Le nombre total de caractères dans les fichiers du dossier {folder_path} est : {total_chars}")

View File

@@ -35,8 +35,8 @@ class Check_addresses_popup(Toplevel):
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Nom:", str1=item_1['lastname'], str2=item_2.lastName)
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Prénom:", str1=item_1['firstname'], str2=item_2.firstName)
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Date de naissance:", str1=datetime.strptime(item_1['birthdate'], "%Y-%m-%d").strftime("%d.%m.%Y"), str2=item_2.birth)
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Adresse:", str1=f"{item_1['street']} {item_1['street_number']}", str2=item_2.street)
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Complément:", str1=f"{item_1['complement']}", str2=item_2.street_cpl)
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Adresse:", str1=f"{item_1['street'].strip()} {item_1['street_number'].strip()}", str2=item_2.street.strip())
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="Complément:", str1=f"{item_1['complement'].strip()}", str2=item_2.street_cpl.strip())
self.add_compares_element(new_frame=lbf_new, old_frame=lbf_old, label="NPA/Localité:", str1=f"{item_1['postal_code']} {item_1['city']}", str2=f"{item_2.npa} {item_2.city}")
@@ -44,8 +44,8 @@ class Check_addresses_popup(Toplevel):
str_address_1 += item_1['lastname'].strip()
str_address_1 += item_1['firstname'].strip()
str_address_1 += datetime.strptime(item_1['birthdate'], "%Y-%m-%d").strftime("%d.%m.%Y")
str_address_1 += f"{item_1['street']} {item_1['street_number']}"
str_address_1 += f"{item_1['complement']}"
str_address_1 += f"{item_1['street'].strip()} {item_1['street_number'].strip()}"
str_address_1 += f"{item_1['complement'].strip()}"
str_address_1 += f"{item_1['postal_code']} {item_1['city']}"
@@ -100,10 +100,10 @@ class Check_addresses_popup(Toplevel):
value_color = "red"
con = "*"
Label(new_frame, text=label, font=label_font).grid(row=self.x_row, column=0, sticky="W")
Label(new_frame, text=con + str1 + con, fg=value_color).grid(row=self.x_row, column=1, sticky="W")
Label(old_frame, text=label, font=label_font).grid(row=self.x_row, column=0, sticky="W")
Label(old_frame, text=con + str2 + con, fg=value_color).grid(row=self.x_row, column=1, sticky="W")
Label(new_frame, text=str(label), font=label_font).grid(row=self.x_row, column=0, sticky="W")
Label(new_frame, text=con + str(str1) + con, fg=value_color).grid(row=self.x_row, column=1, sticky="W")
Label(old_frame, text=str(label), font=label_font).grid(row=self.x_row, column=0, sticky="W")
Label(old_frame, text=con + str(str2) + con, fg=value_color).grid(row=self.x_row, column=1, sticky="W")
self.x_row += 1

View File

@@ -1 +1 @@
20230124-1611
20230425-1636

83
main.py
View File

@@ -10,6 +10,7 @@ import time
import uuid
import tkinter
from datetime import datetime
import pickle
import tkinter.filedialog
from tkinter import *
@@ -18,6 +19,7 @@ from tkinter import messagebox
from tkinter.ttk import Progressbar
from tkinter.scrolledtext import ScrolledText
from threading import *
from dbfread import DBF
from class_invoices import *
from class_addresses import *
@@ -88,17 +90,22 @@ class ClercAttrib2Biz():
self.prompt = None
self.b_prompt_open = False
self.config = {}
self.check_addresses = BooleanVar(self.fenetre)
self.delete_after_parse = BooleanVar(self.fenetre)
self.export_format_biz = BooleanVar(self.fenetre)
self.export_one_file = BooleanVar(self.fenetre)
self.run_excel_after_export = BooleanVar(self.fenetre)
self.winbiz_folder_path = StringVar(self.fenetre)
self.check_addresses.set(True)
self.export_one_file.set(True)
self.run_excel_after_export.set(False)
self.export_format_biz.set(True)
self.load_config()
self.draw_mainWindows()
self.refresh_ui()
self.read_addresses()
@@ -116,7 +123,17 @@ class ClercAttrib2Biz():
def save_config(self, event=None):
self.config["winbiz_folder_path"] = self.winbiz_folder_path.get()
with open(os.path.join(temp_dir,"config.dat"),"wb") as pickle_file:
pickle.dump(self.config,pickle_file, pickle.HIGHEST_PROTOCOL)
def load_config(self):
if not os.path.exists(os.path.join(temp_dir, "config.dat")):
self.save_config()
with open(os.path.join(temp_dir, "config.dat"), "rb") as pickle_file:
self.config = pickle.load(pickle_file)
self.winbiz_folder_path.set(self.config.get("winbiz_folder_path"))
def main_timer_fn(self):
#print("Pass tick timer main app")
@@ -210,6 +227,9 @@ class ClercAttrib2Biz():
Checkbutton(lbf_3, text="Export en 1 seul fichier", variable= self.export_one_file, onvalue=True, offvalue=False, command=self.refresh_ui).grid(row=3, sticky='W')
self.cb_run = Checkbutton(lbf_3, text="Lancer la conversion excel", variable=self.run_excel_after_export, onvalue=True, offvalue=False)
self.cb_run.grid(row=4, sticky='W')
textEntry = Entry(lbf_3, textvariable=self.winbiz_folder_path, validate="focusout", validatecommand=self.save_config)
textEntry.grid(row=5, sticky="WE", columnspan=3)
textEntry.bind("<KeyRelease>", self.save_config)
menu_bar = Menu(self.fenetre)
menu_param = Menu(menu_bar, tearoff=0)
@@ -255,27 +275,30 @@ class ClercAttrib2Biz():
def read_addresses(self):
file_addresses_path = os.path.join(dest_dir, f"adresses.txt")
if os.path.exists(os.path.join(self.winbiz_folder_path.get(),"adresses.dbf")):
shutil.copyfile(os.path.join(self.winbiz_folder_path.get(),"adresses.dbf"), os.path.join(temp_dir,"adresses.dbf"))
shutil.copyfile(os.path.join(self.winbiz_folder_path.get(), "adresses.FPT"),os.path.join(temp_dir, "adresses.FPT"))
else:
messagebox.showerror(title="Impossible d'ouvrir le fichier d'adresse existantes", message=f"Le fichier {self.winbiz_folder_path.get()} est introuvable. Aucune vérification des adresses possible")
file_addresses_path = os.path.join(temp_dir, f"adresses.dbf")
if os.path.exists(file_addresses_path):
file = open(file_addresses_path)
csvreader = csv.reader(file, delimiter=';')
rows = []
for row in csvreader:
rows.append(row)
for record in DBF(file_addresses_path):
o_addresse = cls_addresse()
o_addresse.AVS = row[5]
o_addresse.lastName = row[9]
o_addresse.firstName = row[10]
o_addresse.birth = row[38]
o_addresse.street = row[11]
o_addresse.street_cpl = row[12]
o_addresse.npa = row[13]
o_addresse.city = row[15]
o_addresse.AVS = str(record["AD_CODE"])
o_addresse.lastName =str( record["AD_NOM"])
o_addresse.firstName = str(record["AD_PRENOM"])
if record["AD_NAISSAN"] is not None:
o_addresse.birth = datetime.strptime(str(record["AD_NAISSAN"]), "%Y-%m-%d").strftime("%d.%m.%Y")
else:
o_addresse.birth = ""
o_addresse.street =str( record["AD_RUE_2"])
o_addresse.street_cpl =str( record["AD_RUE_1"])
o_addresse.npa =str( record["AD_NPA"])
o_addresse.city = str(record["AD_VILLE"])
self.addresses.add_addresse(o_addresse)
file.close()
logging.warning(f"Chargement du fichier adresses.dbf terminé ! {len(self.addresses.items)} adresses trouvées ")
else:
messagebox.showwarning(title="Impossible d'ouvrir le fichier d'adresse existantes", message=f"Le fichier {file_addresses_path} est introuvable. Aucune vérification des adresses possible")
@@ -390,7 +413,8 @@ class ClercAttrib2Biz():
return False
if datetime.strptime(new['birthdate'], "%Y-%m-%d").strftime("%d.%m.%Y") != old.birth:
return False
if f"{new['street']} {new['street_number']}" != old.street:
if f"{new['street'].strip()} {new['street_number'].strip()}" != f"{old.street.strip()}":
print(f"({new['street'].strip()} {new['street_number'].strip()}) != [" + old.street.strip()+"]")
return False
if f"{new['postal_code']} {new['city']}" != f"{old.npa} {old.city}":
return False
@@ -445,7 +469,7 @@ class ClercAttrib2Biz():
if data.Debtor["code"] != "1" and data.Debtor["code"] != None and int(data.Debtor["code"]) < 100:
if data.Patient["fip_number"] not in self.a_listings["to_check"]:
self.a_listings["to_check"].append(data.Patient["fip_number"])
self.logger.warning(f"Vérifier facture N°: {data.data['id']} / {data.Patient['fip_number']} {data.Debtor['code']} {data.Debtor['lastname']} {data.Debtor['firstname']}")
#self.logger.warning(f"Vérifier facture N°: {data.data['id']} / {data.Patient['fip_number']} {data.Debtor['code']} {data.Debtor['lastname']} {data.Debtor['firstname']}")
for elem in data.Debtor:
pass
@@ -514,12 +538,13 @@ class ClercAttrib2Biz():
if data.Patient["complement"] != None:
'''
Désactivé, plus utile
if data.Patient["complement"] != None :
self.a_listings["to_check"].append(data.Patient["fip_number"])
print(data.Patient["complement"])
self.logger.warning(f"Complément patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}")
'''
if data.Patient['insurance_policy_number'] == None:
data.Patient['insurance_policy_number'] = f"{uuid.uuid4()}"[:15]
@@ -527,8 +552,11 @@ class ClercAttrib2Biz():
if self.check_addresses.get():
addresses_exist = self.addresses.get_item_by_AVS(data.Patient['insurance_policy_number'].replace(".", ""))
if addresses_exist is not None and not self.compare_old_and_new_adresses(new=data.Patient, old=addresses_exist):
popup = Check_addresses_popup(self.fenetre, item_1=data.Patient, item_2=addresses_exist, debitor=data.Debtor, factureID=data.data['id'])
b_address_update = popup.show()
self.logger.warning(
f"Adresse connue donnée attrib conservé: [{b_address_update}]: {data.data['id']} / {data.Patient['fip_number']} {data.Debtor['code']} {data.Debtor['lastname']} {data.Debtor['firstname']}")
print(f"Result Popup: {b_address_update}")
else:
b_address_update = True
@@ -758,7 +786,10 @@ class ClercAttrib2Biz():
csv_col.data[116] = self.ifNotNull(data.Patient["category"]) + " - " + self.ifNotNull(data.Intervention["type"])
csv_col.data[118] = data.Intervention["kilometers"]
csv_col.data[135] = data.Intervention["base_name"]
csv_col.data[136] = 3 if data.Debtor["code"] != "101" else "EBILL" #code présentation de facture
if data.Debtor["code"] == "100" or data.Debtor["code"] == "101":
csv_col.data[136] = "EBILL" #code présentation de facture
else:
csv_col.data[136] = 3 #code présentation de facture
csv_col.data[146] = 3 #Code méthode de payement définit à 3
csv_col.data[168] = 1 if data.Intervention["team_name"] == "Planification" else 2
csv_col.data[169] = data.Patient['insurance_policy_number']
@@ -841,8 +872,8 @@ class ClercAttrib2Biz():
self.logger.warning(f"Complément 22 patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}")
if data.Patient['insurance_policy_number'] == None:
data.Patient['insurance_policy_number'] = f"{uuid.uuid4()}"[:15]
if data.Patient['insurance_policy_number'] == None:#Génération d'un code UUID pour remplacer le numéro AVS pour les patients étranger ou AVS inconu
data.Patient['insurance_policy_number'] = f"{uuid.uuid4()}"[:10]

Binary file not shown.

View File

@@ -1 +1 @@
VERSION = "20230124-1611"
VERSION = "20230425-1636"