Compare commits
20 Commits
20220614-1
...
20220822-1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
54873a2715 | ||
|
|
1ce77f4e08 | ||
|
|
7be1f15c63 | ||
|
|
cdc7205ab7 | ||
|
|
5b0f7a1119 | ||
|
|
5c7f9c1f4e | ||
|
|
975595b592 | ||
|
|
1907632dca | ||
|
|
6d9b991c04 | ||
|
|
e35a24030d | ||
|
|
1a7d649651 | ||
|
|
0d499cd0f6 | ||
|
|
94c8c64ced | ||
|
|
79f6c3df6d | ||
|
|
6a28aeaa16 | ||
|
|
42f32873ea | ||
|
|
e4137d4780 | ||
|
|
b10b14c420 | ||
|
|
0a1cbd31b8 | ||
|
|
dc7ace0446 |
@@ -17,7 +17,14 @@ class cls_debitors:
|
|||||||
shutil.copy("debitors_src.bin", os.path.join(self.file_path, f"debitors.bin"))
|
shutil.copy("debitors_src.bin", os.path.join(self.file_path, f"debitors.bin"))
|
||||||
self.load_debitors()
|
self.load_debitors()
|
||||||
|
|
||||||
|
def print_all_debs(self):
|
||||||
|
for elem in self.items:
|
||||||
|
print(f"Débiteur:{elem.code} {elem.names}")
|
||||||
|
def get_deb_by_code(self, code):
|
||||||
|
for deb in self.items:
|
||||||
|
if deb.code == int(code):
|
||||||
|
return deb
|
||||||
|
return None
|
||||||
|
|
||||||
def get_names_by_code(self, code):
|
def get_names_by_code(self, code):
|
||||||
for deb in self.items:
|
for deb in self.items:
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
from tkinter import *
|
from tkinter import *
|
||||||
from tkinter import font
|
from tkinter import font
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from tkinter import messagebox
|
||||||
|
|
||||||
class Check_addresses_popup(Toplevel):
|
class Check_addresses_popup(Toplevel):
|
||||||
x_row = 0
|
x_row = 0
|
||||||
@@ -11,7 +12,7 @@ class Check_addresses_popup(Toplevel):
|
|||||||
self.geometry(f"700x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
self.geometry(f"700x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
||||||
self.resizable(True,True)
|
self.resizable(True,True)
|
||||||
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
||||||
self.title(f"Choix de l'adresse à conserver {item_1['fip_number']}/{factureID}. Code débiteur: {debitor['code']}")
|
self.title(f"Choix de l'adresse à conserver {item_1['fip_number']} / {factureID}. Code débiteur: {debitor['code']}")
|
||||||
|
|
||||||
self.columnconfigure(0, weight=1)
|
self.columnconfigure(0, weight=1)
|
||||||
self.columnconfigure(1, weight=1)
|
self.columnconfigure(1, weight=1)
|
||||||
@@ -136,7 +137,7 @@ class Check_debitor_popup(Toplevel):
|
|||||||
self.geometry(f"850x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
self.geometry(f"850x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
||||||
self.resizable(True,True)
|
self.resizable(True,True)
|
||||||
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
||||||
self.title(f"Incohérence sur les débiteurs {fip}/{factureID}. Code débiteur: {debitor['code']}")
|
self.title(f"Incohérence sur les débiteurs {fip} / {factureID}. Code débiteur: {debitor['code']}")
|
||||||
|
|
||||||
self.columnconfigure(0, weight=1)
|
self.columnconfigure(0, weight=1)
|
||||||
self.columnconfigure(1, weight=1)
|
self.columnconfigure(1, weight=1)
|
||||||
@@ -193,3 +194,57 @@ class Check_debitor_popup(Toplevel):
|
|||||||
print("nouveau code = "+ self.inp_code.get())
|
print("nouveau code = "+ self.inp_code.get())
|
||||||
return self.inp_code.get()
|
return self.inp_code.get()
|
||||||
|
|
||||||
|
|
||||||
|
class Input_popup(Toplevel):
|
||||||
|
x_row = 0
|
||||||
|
no_selection_possible = False
|
||||||
|
|
||||||
|
def __init__(self, parent, text="Veuillez saisir la nouvelle valeur.", default="" ,factureID=None, fip=None, object=None):
|
||||||
|
super().__init__(parent)
|
||||||
|
|
||||||
|
self.object = object
|
||||||
|
|
||||||
|
|
||||||
|
self.inp_value = StringVar()
|
||||||
|
if default is not None:
|
||||||
|
self.inp_value.set(default)
|
||||||
|
|
||||||
|
|
||||||
|
self.geometry(f"650x120+{parent.winfo_x() + 25}+{parent.winfo_y() + 25}")
|
||||||
|
self.resizable(True, True)
|
||||||
|
self.iconbitmap("./logo_clerc_03X_icon.ico")
|
||||||
|
self.title(f"Saisir une valeur {fip} / {factureID}.")
|
||||||
|
|
||||||
|
self.columnconfigure(0, weight=1)
|
||||||
|
self.columnconfigure(1, weight=1)
|
||||||
|
|
||||||
|
lbf_new = LabelFrame(self, text=text)
|
||||||
|
lbf_new.grid(row=0, column=0, sticky='WE', padx=5, pady=5)
|
||||||
|
|
||||||
|
label_font = font.Font(weight='bold', size=9)
|
||||||
|
Label(lbf_new, text="", font=label_font).grid(row=0, column=0, sticky="W")
|
||||||
|
Entry(lbf_new, textvariable=self.inp_value, width=100).grid(row=0, column=1, sticky="W", pady=10)
|
||||||
|
|
||||||
|
|
||||||
|
self.btn = Button(self, text="Valider", command=self.destroy)
|
||||||
|
self.btn.grid(row=2, column=0, pady=10, padx=10, sticky='NSEW')
|
||||||
|
|
||||||
|
def add(self):
|
||||||
|
self.destroy()
|
||||||
|
if self.object is not None:
|
||||||
|
self.object.add_items(code=self.inp_code.get(), name=self.debitor["name"])
|
||||||
|
self.object.save_debitors()
|
||||||
|
|
||||||
|
def destroy(self):
|
||||||
|
if self.inp_value.get() is None or self.inp_value.get() == "":
|
||||||
|
messagebox.showerror(title="ERREUR", message="Veuillez saisir une valeur !")
|
||||||
|
self.focus()
|
||||||
|
else:
|
||||||
|
super().destroy()
|
||||||
|
|
||||||
|
def show(self):
|
||||||
|
self.deiconify()
|
||||||
|
self.wm_protocol("WM_DELETE_WINDOW", self.destroy)
|
||||||
|
self.wait_window(self)
|
||||||
|
print("nouvelle valeur = " + self.inp_value.get())
|
||||||
|
return self.inp_value.get()
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
20220614-1653
|
20220822-1142
|
||||||
130
main.py
130
main.py
@@ -74,6 +74,7 @@ class ClercAttrib2Biz():
|
|||||||
self.count_facture = 0
|
self.count_facture = 0
|
||||||
self.a_index = {"invoice": [], "intervention": [], "patient": [], "debtor": [], "articles": [], "global": []}
|
self.a_index = {"invoice": [], "intervention": [], "patient": [], "debtor": [], "articles": [], "global": []}
|
||||||
self.addresses = cls_Addresses()
|
self.addresses = cls_Addresses()
|
||||||
|
self.o_debs = cls_debitors(filepath=temp_dir)
|
||||||
|
|
||||||
self.index_counter = 0
|
self.index_counter = 0
|
||||||
self.bs_counter = 70
|
self.bs_counter = 70
|
||||||
@@ -101,7 +102,7 @@ class ClercAttrib2Biz():
|
|||||||
self.refresh_ui()
|
self.refresh_ui()
|
||||||
self.read_addresses()
|
self.read_addresses()
|
||||||
|
|
||||||
self.o_debs = cls_debitors(filepath=temp_dir)
|
|
||||||
|
|
||||||
|
|
||||||
self.timer = self.fenetre.after(1000, self.main_timer_fn)
|
self.timer = self.fenetre.after(1000, self.main_timer_fn)
|
||||||
@@ -209,6 +210,14 @@ class ClercAttrib2Biz():
|
|||||||
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')
|
||||||
|
|
||||||
|
menu_bar = Menu(self.fenetre)
|
||||||
|
menu_param = Menu(menu_bar, tearoff=0)
|
||||||
|
menu_param.add_command(label="Affichage des débiteurs", command=self.o_debs.print_all_debs)
|
||||||
|
menu_bar.add_cascade(label="Paramètre", menu=menu_param)
|
||||||
|
|
||||||
|
self.fenetre.config(menu=menu_bar)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -245,7 +254,7 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
|
|
||||||
def read_addresses(self):
|
def read_addresses(self):
|
||||||
file_addresses_path = os.path.join(dest_dir, f"adresses.csv")
|
file_addresses_path = os.path.join(dest_dir, f"adresses.txt")
|
||||||
if os.path.exists(file_addresses_path):
|
if os.path.exists(file_addresses_path):
|
||||||
file = open(file_addresses_path)
|
file = open(file_addresses_path)
|
||||||
csvreader = csv.reader(file, delimiter=';')
|
csvreader = csv.reader(file, delimiter=';')
|
||||||
@@ -262,7 +271,7 @@ class ClercAttrib2Biz():
|
|||||||
o_addresse.city = row[15]
|
o_addresse.city = row[15]
|
||||||
self.addresses.add_addresse(o_addresse)
|
self.addresses.add_addresse(o_addresse)
|
||||||
|
|
||||||
print(self.addresses.items)
|
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -322,6 +331,54 @@ class ClercAttrib2Biz():
|
|||||||
return ret
|
return ret
|
||||||
return value.strip()
|
return value.strip()
|
||||||
|
|
||||||
|
def trim_all_data(self, data):
|
||||||
|
if data.Patient["lastname"] is not None:
|
||||||
|
data.Patient["lastname"] = data.Patient["lastname"].strip()
|
||||||
|
if data.Patient["firstname"] is not None:
|
||||||
|
data.Patient["firstname"] = data.Patient["firstname"].strip()
|
||||||
|
if data.Patient["street"] is not None:
|
||||||
|
data.Patient["street"] = data.Patient["street"].strip()
|
||||||
|
if data.Debtor["lastname"] is not None:
|
||||||
|
data.Debtor["lastname"] = data.Debtor["lastname"].strip()
|
||||||
|
if data.Debtor["firstname"] is not None:
|
||||||
|
data.Debtor["firstname"] = data.Debtor["firstname"].strip()
|
||||||
|
if data.Debtor["street"] is not None:
|
||||||
|
data.Debtor["street"] = data.Debtor["street"].strip()
|
||||||
|
|
||||||
|
def check_code_validity(self, code,data):
|
||||||
|
ret = True
|
||||||
|
check_patients = ["firstname", "lastname", "street"]
|
||||||
|
check_Debtor = ["firstname", "lastname", "street"]
|
||||||
|
if code == 1:
|
||||||
|
for check in check_patients:
|
||||||
|
if data.Patient[check] is None:
|
||||||
|
ret = False
|
||||||
|
for check in check_Debtor:
|
||||||
|
if data.Debtor[check] is None:
|
||||||
|
ret = False
|
||||||
|
if not ret:
|
||||||
|
messagebox.showerror(title="Erreur Critique", message=f"Les informations de la factures [{data.data['id']}] comportes trop d'erreur arrêt du processus ")
|
||||||
|
return False
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def compare_old_and_new_adresses(self, new, old):
|
||||||
|
|
||||||
|
if new['insurance_policy_number'].replace('.','') != old.AVS:
|
||||||
|
return False
|
||||||
|
if new['lastname'].replace('.','') != old.lastName:
|
||||||
|
return False
|
||||||
|
if new['firstname'].replace('.','') != old.firstName:
|
||||||
|
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:
|
||||||
|
return False
|
||||||
|
if f"{new['postal_code']} {new['city']}" != f"{old.npa} {old.city}":
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def parseFile(self, data, filename):
|
def parseFile(self, data, filename):
|
||||||
self.index_counter += 1
|
self.index_counter += 1
|
||||||
@@ -343,17 +400,21 @@ class ClercAttrib2Biz():
|
|||||||
data = cls_Invoice()
|
data = cls_Invoice()
|
||||||
data.parse_item(ele)
|
data.parse_item(ele)
|
||||||
|
|
||||||
|
self.trim_all_data(data)
|
||||||
|
|
||||||
print(f"Code débiteur => {data.data['id']}: {data.Debtor['code']}")
|
print(f"Code débiteur => {data.data['id']}: {data.Debtor['code']}")
|
||||||
if data.Debtor["code"] is None or '.' in str(data.Debtor["code"]):
|
if data.Debtor["code"] is None or '.' in data.Debtor["code"]:
|
||||||
print("ERROR code débiteur")
|
print("ERROR code débiteur #1")
|
||||||
messagebox.showerror(title="Erreur code débiteur erroné", message=f"Le code débiteur de la facture {data.data['id']} est faux: [{data.Debtor['code']}], merci de le corriger ")
|
messagebox.showerror(title="Erreur code débiteur", message=f"Le code débiteur de la facture {data.data['id']} est faux: [{data.Debtor['code']}], merci de le corriger ")
|
||||||
if data.Debtor["code"] is None:
|
inp_popup = Input_popup(self.fenetre, default=data.Debtor["code"], factureID=data.data['id'], fip=data.Patient['fip_number'])
|
||||||
data.Debtor["code"] = 1
|
data.Debtor["code"] = str(inp_popup.show())
|
||||||
else:
|
|
||||||
data.Debtor["code"] = str(data.Debtor["code"]).replace('.', '')
|
|
||||||
|
|
||||||
if int(data.Debtor["code"]) != "1" and data.Debtor["code"] != None and int(data.Debtor["code"]) < 100:
|
if int(data.Debtor["code"]) == 1:
|
||||||
|
if not self.check_code_validity(data.Debtor["code"],data):
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
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']}")
|
||||||
@@ -386,7 +447,7 @@ class ClercAttrib2Biz():
|
|||||||
if not self.o_debs.is_in_debitor_name(code=data.Debtor["code"],search_name=data.Debtor["name"]):
|
if not self.o_debs.is_in_debitor_name(code=data.Debtor["code"],search_name=data.Debtor["name"]):
|
||||||
#messagebox.showerror(title="Erreur code débiteur erroné", message=f"Information débiteur incohérente: facture N°: {data.data['id']} / {data.Patient['fip_number']}.\nCode débiteur: {data.Debtor['code']}\nNom du débiteur: {data.Debtor['name']}. \nAurait dû être: {self.o_debs.get_names_by_code(data.Debtor['code'])}")
|
#messagebox.showerror(title="Erreur code débiteur erroné", message=f"Information débiteur incohérente: facture N°: {data.data['id']} / {data.Patient['fip_number']}.\nCode débiteur: {data.Debtor['code']}\nNom du débiteur: {data.Debtor['name']}. \nAurait dû être: {self.o_debs.get_names_by_code(data.Debtor['code'])}")
|
||||||
debitor_popup = Check_debitor_popup(self.fenetre,data.Debtor,self.o_debs.get_names_by_code(data.Debtor['code']),data.data['id'],data.Patient['fip_number'], object=self.o_debs)
|
debitor_popup = Check_debitor_popup(self.fenetre,data.Debtor,self.o_debs.get_names_by_code(data.Debtor['code']),data.data['id'],data.Patient['fip_number'], object=self.o_debs)
|
||||||
data.Debtor["code"] = int(debitor_popup.show())
|
data.Debtor["code"] = debitor_popup.show()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -401,7 +462,7 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
if self.check_addresses.get():
|
if self.check_addresses.get():
|
||||||
addresses_exist = self.addresses.get_item_by_AVS(data.Patient['insurance_policy_number'].replace(".", ""))
|
addresses_exist = self.addresses.get_item_by_AVS(data.Patient['insurance_policy_number'].replace(".", ""))
|
||||||
if addresses_exist is not None:
|
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'])
|
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()
|
b_address_update = popup.show()
|
||||||
print(f"Result Popup: {b_address_update}")
|
print(f"Result Popup: {b_address_update}")
|
||||||
@@ -429,12 +490,19 @@ class ClercAttrib2Biz():
|
|||||||
self.bs_counter += 1
|
self.bs_counter += 1
|
||||||
csv_col = cls_Col(True)
|
csv_col = cls_Col(True)
|
||||||
|
|
||||||
|
print(article)
|
||||||
|
if "code" in article.keys() and article["code"] == "HRF":
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
##Donnée globales
|
##Donnée globales
|
||||||
csv_col.data[0] = data.data["id"] # N° document
|
csv_col.data[0] = data.data["id"] # N° document
|
||||||
csv_col.data[1] = 20 # Type of document 20 = facture débiteur
|
csv_col.data[1] = 20 # Type of document 20 = facture débiteur
|
||||||
csv_col.data[2] = datetime.strptime(data.data["date"], "%Y-%m-%d").strftime("%d.%m.%Y") # Date du document
|
csv_col.data[2] = datetime.strptime(data.data["date"], "%Y-%m-%d").strftime("%d.%m.%Y") # Date du document
|
||||||
csv_col.data[4] = data.Patient["fip_number"] # Référence
|
csv_col.data[4] = data.Patient["fip_number"] # Référence
|
||||||
csv_col.data[10] = "<AUTO>" # Compte collectif du tiers = <AUTO>
|
csv_col.data[10] = "<AUTO>" # Compte collectif du tiers = <AUTO>
|
||||||
|
csv_col.data[139] = "COND-30" # Conditions de payement à 30, COND-30 selon config dans winbiz
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if "without_transportation" in data.Intervention.keys() and data.Intervention["without_transportation"] == True:
|
if "without_transportation" in data.Intervention.keys() and data.Intervention["without_transportation"] == True:
|
||||||
@@ -496,7 +564,7 @@ class ClercAttrib2Biz():
|
|||||||
concat_str += con + data.Debtor["name"]
|
concat_str += con + data.Debtor["name"]
|
||||||
con = "#chr(13)##chr(10)#"
|
con = "#chr(13)##chr(10)#"
|
||||||
else:
|
else:
|
||||||
messagebox.showerror(title="Erreur nom débiteur erroné", message=f"Le nom débiteur de la facture {data.data['id']} est faux: [{data.Debtor['name']}], merci de le corriger ")
|
messagebox.showerror(title="Erreur nom débiteur", message=f"Le nom débiteur de la facture {data.data['id']} est faux: [{data.Debtor['name']}], merci de le corriger ")
|
||||||
|
|
||||||
|
|
||||||
if data.Debtor["gender"] is not None:
|
if data.Debtor["gender"] is not None:
|
||||||
@@ -505,15 +573,19 @@ class ClercAttrib2Biz():
|
|||||||
if data.Debtor["lastname"] is not None:
|
if data.Debtor["lastname"] is not None:
|
||||||
concat_str += con + self.ifNotNull(data.Debtor["lastname"]) + " " + self.ifNotNull(data.Debtor["firstname"])
|
concat_str += con + self.ifNotNull(data.Debtor["lastname"]) + " " + self.ifNotNull(data.Debtor["firstname"])
|
||||||
con = "#chr(13)##chr(10)#"
|
con = "#chr(13)##chr(10)#"
|
||||||
if data.Debtor["street"] is not None:
|
|
||||||
concat_str += con + self.ifNotNull(data.Debtor["street"]) + " " + self.ifNotNull(data.Debtor["street_number"])
|
|
||||||
con = "#chr(13)##chr(10)#"
|
|
||||||
if data.Debtor["complement"] is not None:
|
if data.Debtor["complement"] is not None:
|
||||||
concat_str += con + data.Debtor["complement"]
|
concat_str += con + data.Debtor["complement"]
|
||||||
con = "#chr(13)##chr(10)#"
|
con = "#chr(13)##chr(10)#"
|
||||||
|
if data.Debtor["street"] is not None:
|
||||||
|
concat_str += con + self.ifNotNull(data.Debtor["street"]) + " " + self.ifNotNull(data.Debtor["street_number"])
|
||||||
|
con = "#chr(13)##chr(10)#"
|
||||||
if data.Debtor["city"] is not None:
|
if data.Debtor["city"] is not None:
|
||||||
concat_str += con + self.ifNotNull(data.Debtor["postal_code"]) + " " + self.ifNotNull(data.Debtor["city"])
|
concat_str += con + self.ifNotNull(data.Debtor["postal_code"]) + " " + self.ifNotNull(data.Debtor["city"])
|
||||||
con = "#chr(13)##chr(10)#"
|
con = "#chr(13)##chr(10)#"
|
||||||
|
if data.Debtor["country_name"] != "Suisse":
|
||||||
|
concat_str += con + data.Debtor["country_name"]
|
||||||
|
con = "#chr(13)##chr(10)#"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -591,15 +663,18 @@ class ClercAttrib2Biz():
|
|||||||
csv_col.data[72] = "BU - 73 - aff"
|
csv_col.data[72] = "BU - 73 - aff"
|
||||||
csv_col.data[73] = 0
|
csv_col.data[73] = 0
|
||||||
|
|
||||||
csv_col.data[115] = self.ifNotNull(data.Patient["lastname"]) + " " + self.ifNotNull(data.Patient["firstname"])
|
#Objet facture
|
||||||
csv_col.data[108] = data.Patient["complement"]
|
csv_col.data[108] = self.ifNotNull(data.Patient["lastname"]) + " " + self.ifNotNull(data.Patient["firstname"])
|
||||||
|
csv_col.data[115] = data.Patient["complement"]
|
||||||
csv_col.data[109] = datetime.strptime(data.Patient["birthdate"], "%Y-%m-%d").strftime("%d.%m.%Y") if data.Patient["birthdate"] is not None else ""
|
csv_col.data[109] = datetime.strptime(data.Patient["birthdate"], "%Y-%m-%d").strftime("%d.%m.%Y") if data.Patient["birthdate"] is not None else ""
|
||||||
if data.Patient["insurance_policy_number"] is not None and '-' not in data.Patient["insurance_policy_number"]:
|
if data.Patient["insurance_policy_number"] is not None and '-' not in data.Patient["insurance_policy_number"]:
|
||||||
csv_col.data[109] += ", " + data.Patient["insurance_policy_number"]
|
csv_col.data[109] += ", " + data.Patient["insurance_policy_number"]
|
||||||
|
|
||||||
csv_col.data[110] = data.Patient["insurance_name"]
|
csv_col.data[110] = data.Patient["insurance_name"]
|
||||||
csv_col.data[111] = datetime.strptime(data.Intervention["start_time"], "%Y-%m-%dT%H:%M:%S%z").strftime(
|
date_PEC = datetime.strptime(data.Intervention["start_time"], "%Y-%m-%dT%H:%M:%S%z").strftime(
|
||||||
"%d.%m.%Y") # Date PEC
|
"%d.%m.%Y")
|
||||||
|
csv_col.data[51] = date_PEC # Date de ligne articles
|
||||||
|
csv_col.data[111] =date_PEC # Date PEC
|
||||||
csv_col.data[111] += " - " + datetime.strptime(data.Intervention["start_time"], "%Y-%m-%dT%H:%M:%S%z").strftime(
|
csv_col.data[111] += " - " + datetime.strptime(data.Intervention["start_time"], "%Y-%m-%dT%H:%M:%S%z").strftime(
|
||||||
"%H:%M") # Heure START PEC
|
"%H:%M") # Heure START PEC
|
||||||
|
|
||||||
@@ -619,8 +694,8 @@ 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] = 2 if data.Intervention["base_name"] == "Uvrier" else 3
|
csv_col.data[136] = 3 if data.Debtor["code"] != "101" else "EBILL" #code présentation de facture
|
||||||
csv_col.data[146] = csv_col.data[136]
|
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']
|
||||||
|
|
||||||
@@ -640,7 +715,7 @@ class ClercAttrib2Biz():
|
|||||||
self.a_index["global"].append(key)
|
self.a_index["global"].append(key)
|
||||||
obj.data.append(data)
|
obj.data.append(data)
|
||||||
|
|
||||||
def convertFile(self, data, filename):
|
def convertFile(self, data, filename): #à utiliser pour un export avec fichier excel de Thomas
|
||||||
self.count_facture += len(data["invoices"])
|
self.count_facture += len(data["invoices"])
|
||||||
self.a_listings["to_check"] = []
|
self.a_listings["to_check"] = []
|
||||||
|
|
||||||
@@ -655,10 +730,11 @@ class ClercAttrib2Biz():
|
|||||||
b_update_debitor = True
|
b_update_debitor = True
|
||||||
|
|
||||||
print(f"Code débiteur => {data.data['id']}: {data.Debtor['code']}" )
|
print(f"Code débiteur => {data.data['id']}: {data.Debtor['code']}" )
|
||||||
if data.Debtor["code"] == "None" or '.' in str(data.Debtor["code"]):
|
if data.Debtor["code"] == "None" or '.' in data.Debtor["code"]:
|
||||||
print("ERROR code débiteur")
|
print("ERROR code débiteur")
|
||||||
messagebox.showerror(title="Erreur code débiteur erroné", message=f"Le code débiteur de la facture {data.data['id']} est faux: [{data.Debtor['code']}], merci de le corriger ")
|
messagebox.showerror(title="Erreur code débiteur", message=f"Le code débiteur de la facture {data.data['id']} est faux: [{data.Debtor['code']}], merci de le corriger ")
|
||||||
data.Debtor["code"] = str(data.Debtor["code"]).replace('.', '')
|
inp_popup = Input_popup(self.fenetre,default=data.Debtor["code"],factureID=data.data['id'], fip=data.Patient['fip_number'])
|
||||||
|
data.Debtor["code"] = str(inp_popup.show())
|
||||||
|
|
||||||
|
|
||||||
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:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
VERSION = "20220614-1653"
|
VERSION = "20220822-1142"
|
||||||
Reference in New Issue
Block a user