Compare commits
5 Commits
20230124-1
...
20230421-0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
513556f0a3 | ||
|
|
81a9717716 | ||
|
|
3ff3416b39 | ||
|
|
e430117d40 | ||
|
|
5060490ac4 |
16
counter.py
Normal file
16
counter.py
Normal 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}")
|
||||||
@@ -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="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="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="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="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']}", str2=item_2.street_cpl)
|
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}")
|
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['lastname'].strip()
|
||||||
str_address_1 += item_1['firstname'].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 += 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['street'].strip()} {item_1['street_number'].strip()}"
|
||||||
str_address_1 += f"{item_1['complement']}"
|
str_address_1 += f"{item_1['complement'].strip()}"
|
||||||
str_address_1 += f"{item_1['postal_code']} {item_1['city']}"
|
str_address_1 += f"{item_1['postal_code']} {item_1['city']}"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
20230124-1611
|
20230421-0031
|
||||||
72
main.py
72
main.py
@@ -10,6 +10,7 @@ import time
|
|||||||
import uuid
|
import uuid
|
||||||
import tkinter
|
import tkinter
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import pickle
|
||||||
|
|
||||||
import tkinter.filedialog
|
import tkinter.filedialog
|
||||||
from tkinter import *
|
from tkinter import *
|
||||||
@@ -18,6 +19,7 @@ from tkinter import messagebox
|
|||||||
from tkinter.ttk import Progressbar
|
from tkinter.ttk import Progressbar
|
||||||
from tkinter.scrolledtext import ScrolledText
|
from tkinter.scrolledtext import ScrolledText
|
||||||
from threading import *
|
from threading import *
|
||||||
|
from dbfread import DBF
|
||||||
|
|
||||||
from class_invoices import *
|
from class_invoices import *
|
||||||
from class_addresses import *
|
from class_addresses import *
|
||||||
@@ -88,17 +90,22 @@ class ClercAttrib2Biz():
|
|||||||
self.prompt = None
|
self.prompt = None
|
||||||
self.b_prompt_open = False
|
self.b_prompt_open = False
|
||||||
|
|
||||||
|
self.config = {}
|
||||||
|
|
||||||
self.check_addresses = BooleanVar(self.fenetre)
|
self.check_addresses = BooleanVar(self.fenetre)
|
||||||
self.delete_after_parse = BooleanVar(self.fenetre)
|
self.delete_after_parse = BooleanVar(self.fenetre)
|
||||||
self.export_format_biz = BooleanVar(self.fenetre)
|
self.export_format_biz = BooleanVar(self.fenetre)
|
||||||
self.export_one_file = BooleanVar(self.fenetre)
|
self.export_one_file = BooleanVar(self.fenetre)
|
||||||
self.run_excel_after_export = BooleanVar(self.fenetre)
|
self.run_excel_after_export = BooleanVar(self.fenetre)
|
||||||
|
self.winbiz_folder_path = StringVar(self.fenetre)
|
||||||
|
|
||||||
self.check_addresses.set(True)
|
self.check_addresses.set(True)
|
||||||
self.export_one_file.set(True)
|
self.export_one_file.set(True)
|
||||||
self.run_excel_after_export.set(False)
|
self.run_excel_after_export.set(False)
|
||||||
self.export_format_biz.set(True)
|
self.export_format_biz.set(True)
|
||||||
|
|
||||||
|
self.load_config()
|
||||||
|
|
||||||
self.draw_mainWindows()
|
self.draw_mainWindows()
|
||||||
self.refresh_ui()
|
self.refresh_ui()
|
||||||
self.read_addresses()
|
self.read_addresses()
|
||||||
@@ -116,7 +123,15 @@ 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):
|
||||||
|
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):
|
def main_timer_fn(self):
|
||||||
#print("Pass tick timer main app")
|
#print("Pass tick timer main app")
|
||||||
@@ -210,6 +225,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')
|
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 = 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')
|
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_bar = Menu(self.fenetre)
|
||||||
menu_param = Menu(menu_bar, tearoff=0)
|
menu_param = Menu(menu_bar, tearoff=0)
|
||||||
@@ -255,27 +273,26 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
|
|
||||||
def read_addresses(self):
|
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):
|
if os.path.exists(file_addresses_path):
|
||||||
file = open(file_addresses_path)
|
for record in DBF(file_addresses_path):
|
||||||
csvreader = csv.reader(file, delimiter=';')
|
|
||||||
rows = []
|
|
||||||
for row in csvreader:
|
|
||||||
rows.append(row)
|
|
||||||
o_addresse = cls_addresse()
|
o_addresse = cls_addresse()
|
||||||
o_addresse.AVS = row[5]
|
o_addresse.AVS = record["AD_CODE"]
|
||||||
o_addresse.lastName = row[9]
|
o_addresse.lastName = record["AD_NOM"]
|
||||||
o_addresse.firstName = row[10]
|
o_addresse.firstName = record["AD_PRENOM"]
|
||||||
o_addresse.birth = row[38]
|
o_addresse.birth = record["AD_NAISSAN"]
|
||||||
o_addresse.street = row[11]
|
o_addresse.street = record["AD_RUE_2"]
|
||||||
o_addresse.street_cpl = row[12]
|
o_addresse.street_cpl = record["AD_RUE_1"]
|
||||||
o_addresse.npa = row[13]
|
o_addresse.npa = record["AD_NPA"]
|
||||||
o_addresse.city = row[15]
|
o_addresse.city = record["AD_VILLE"]
|
||||||
self.addresses.add_addresse(o_addresse)
|
self.addresses.add_addresse(o_addresse)
|
||||||
|
logging.warning(f"Chargement du fichier adresses.dbf terminé ! {len(self.addresses.items)} adresses trouvées ")
|
||||||
|
|
||||||
file.close()
|
|
||||||
|
|
||||||
else:
|
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")
|
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 +407,8 @@ class ClercAttrib2Biz():
|
|||||||
return False
|
return False
|
||||||
if datetime.strptime(new['birthdate'], "%Y-%m-%d").strftime("%d.%m.%Y") != old.birth:
|
if datetime.strptime(new['birthdate'], "%Y-%m-%d").strftime("%d.%m.%Y") != old.birth:
|
||||||
return False
|
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
|
return False
|
||||||
if f"{new['postal_code']} {new['city']}" != f"{old.npa} {old.city}":
|
if f"{new['postal_code']} {new['city']}" != f"{old.npa} {old.city}":
|
||||||
return False
|
return False
|
||||||
@@ -445,7 +463,7 @@ class ClercAttrib2Biz():
|
|||||||
if data.Debtor["code"] != "1" and data.Debtor["code"] != None and int(data.Debtor["code"]) < 100:
|
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"]:
|
if data.Patient["fip_number"] not in self.a_listings["to_check"]:
|
||||||
self.a_listings["to_check"].append(data.Patient["fip_number"])
|
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:
|
for elem in data.Debtor:
|
||||||
pass
|
pass
|
||||||
@@ -514,12 +532,13 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
'''
|
||||||
|
Désactivé, plus utile
|
||||||
if data.Patient["complement"] != None :
|
if data.Patient["complement"] != None :
|
||||||
self.a_listings["to_check"].append(data.Patient["fip_number"])
|
self.a_listings["to_check"].append(data.Patient["fip_number"])
|
||||||
print(data.Patient["complement"])
|
print(data.Patient["complement"])
|
||||||
self.logger.warning(f"Complément patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}")
|
self.logger.warning(f"Complément patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}")
|
||||||
|
'''
|
||||||
|
|
||||||
if data.Patient['insurance_policy_number'] == None:
|
if data.Patient['insurance_policy_number'] == None:
|
||||||
data.Patient['insurance_policy_number'] = f"{uuid.uuid4()}"[:15]
|
data.Patient['insurance_policy_number'] = f"{uuid.uuid4()}"[:15]
|
||||||
@@ -758,7 +777,10 @@ class ClercAttrib2Biz():
|
|||||||
csv_col.data[116] = self.ifNotNull(data.Patient["category"]) + " - " + self.ifNotNull(data.Intervention["type"])
|
csv_col.data[116] = self.ifNotNull(data.Patient["category"]) + " - " + self.ifNotNull(data.Intervention["type"])
|
||||||
csv_col.data[118] = data.Intervention["kilometers"]
|
csv_col.data[118] = data.Intervention["kilometers"]
|
||||||
csv_col.data[135] = data.Intervention["base_name"]
|
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[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[168] = 1 if data.Intervention["team_name"] == "Planification" else 2
|
||||||
csv_col.data[169] = data.Patient['insurance_policy_number']
|
csv_col.data[169] = data.Patient['insurance_policy_number']
|
||||||
@@ -841,8 +863,8 @@ class ClercAttrib2Biz():
|
|||||||
self.logger.warning(f"Complément 22 patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}")
|
self.logger.warning(f"Complément 22 patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}")
|
||||||
|
|
||||||
|
|
||||||
if data.Patient['insurance_policy_number'] == None:
|
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()}"[:15]
|
data.Patient['insurance_policy_number'] = f"{uuid.uuid4()}"[:10]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
@@ -1 +1 @@
|
|||||||
VERSION = "20230124-1611"
|
VERSION = "20230421-0031"
|
||||||
Reference in New Issue
Block a user