Compare commits
10 Commits
20220820-1
...
20220907-1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f9d8c1da8 | ||
|
|
191821d81d | ||
|
|
99a89585b5 | ||
|
|
e60ed4b5fa | ||
|
|
4c75a6167b | ||
|
|
842ae5fb69 | ||
|
|
355d17810f | ||
|
|
510587d3eb | ||
|
|
ff22572e56 | ||
|
|
54873a2715 |
@@ -18,5 +18,6 @@ class cls_addresse:
|
|||||||
firstName = None
|
firstName = None
|
||||||
birth = None
|
birth = None
|
||||||
street = None
|
street = None
|
||||||
|
street_cpl = None
|
||||||
npa = None
|
npa = None
|
||||||
city = None
|
city = None
|
||||||
@@ -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:
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ class Check_addresses_popup(Toplevel):
|
|||||||
def __init__(self, parent, item_1=None, item_2=None, debitor=None, factureID=""):
|
def __init__(self, parent, item_1=None, item_2=None, debitor=None, factureID=""):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
|
|
||||||
|
if(item_1["complement"] is None):
|
||||||
|
item_1["complement"] = ""
|
||||||
|
|
||||||
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")
|
||||||
@@ -33,6 +36,7 @@ class Check_addresses_popup(Toplevel):
|
|||||||
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']} {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="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}")
|
||||||
|
|
||||||
|
|
||||||
@@ -41,6 +45,7 @@ class Check_addresses_popup(Toplevel):
|
|||||||
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']} {item_1['street_number']}"
|
||||||
|
str_address_1 += f"{item_1['complement']}"
|
||||||
str_address_1 += f"{item_1['postal_code']} {item_1['city']}"
|
str_address_1 += f"{item_1['postal_code']} {item_1['city']}"
|
||||||
|
|
||||||
|
|
||||||
@@ -54,6 +59,7 @@ class Check_addresses_popup(Toplevel):
|
|||||||
str_address_2 += item_2.firstName
|
str_address_2 += item_2.firstName
|
||||||
str_address_2 += item_2.birth
|
str_address_2 += item_2.birth
|
||||||
str_address_2 += f"{item_2.street.strip()}"
|
str_address_2 += f"{item_2.street.strip()}"
|
||||||
|
str_address_2 += f"{item_2.street_cpl.strip()}"
|
||||||
str_address_2 += f"{item_2.npa} {item_2.city}"
|
str_address_2 += f"{item_2.npa} {item_2.city}"
|
||||||
|
|
||||||
self.listbox = Listbox(self, height=3, width=35)
|
self.listbox = Listbox(self, height=3, width=35)
|
||||||
@@ -134,7 +140,7 @@ class Check_debitor_popup(Toplevel):
|
|||||||
self.inp_code = StringVar()
|
self.inp_code = StringVar()
|
||||||
self.inp_code.set(debitor['code'])
|
self.inp_code.set(debitor['code'])
|
||||||
|
|
||||||
self.geometry(f"850x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }")
|
self.geometry(f"900x275+{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']}")
|
||||||
@@ -142,8 +148,10 @@ class Check_debitor_popup(Toplevel):
|
|||||||
self.columnconfigure(0, weight=1)
|
self.columnconfigure(0, weight=1)
|
||||||
self.columnconfigure(1, weight=1)
|
self.columnconfigure(1, weight=1)
|
||||||
|
|
||||||
|
Label(self,text="Une incohérence a été trouvée entre le code débiteur saisi dans Attrib et le code débiteur saisi dans Attrib. \nIls ne correspondent pas.Le code débiteur présent dans le champs Code Saisi sera utiliser pour la facture winbiz \nMerci de vérifier et modifier le code débiteur puis cliquer sur Valider.", wraplength= 950, justify=LEFT).grid(row=0,column=0, columnspan=2, sticky="W")
|
||||||
|
|
||||||
lbf_new = LabelFrame(self, text="Données Attrib")
|
lbf_new = LabelFrame(self, text="Données Attrib")
|
||||||
lbf_new.grid(row=0, column=0, sticky='WE', padx=5, pady=5)
|
lbf_new.grid(row=1, column=0, sticky='WE', padx=5, pady=5)
|
||||||
|
|
||||||
label_font = font.Font(weight='bold', size=9)
|
label_font = font.Font(weight='bold', size=9)
|
||||||
Label(lbf_new, text="Code saisi", font=label_font).grid(row=0, column=0, sticky="W")
|
Label(lbf_new, text="Code saisi", font=label_font).grid(row=0, column=0, sticky="W")
|
||||||
@@ -151,15 +159,15 @@ class Check_debitor_popup(Toplevel):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Label(lbf_new, text="Débiteur sélectionné", font=label_font).grid(row=1, column=0, sticky="W")
|
Label(lbf_new, text="Débiteur sélectionné dans Attrib", font=label_font).grid(row=1, column=0, sticky="W")
|
||||||
text_name = Text(lbf_new, fg="red", height=3,width= 30)
|
text_name = Text(lbf_new, fg="red", height=3,width= 30)
|
||||||
text_name.grid(row=1, column=1, sticky="W")
|
text_name.grid(row=1, column=1, sticky="W")
|
||||||
text_name.insert(END,debitor['name'])
|
text_name.insert(END,debitor['name'])
|
||||||
text_name.configure(state='disabled')
|
text_name.configure(state='disabled')
|
||||||
|
|
||||||
|
|
||||||
lbf_old = LabelFrame(self, text="Nom possible")
|
lbf_old = LabelFrame(self, text="Noms possibles")
|
||||||
lbf_old.grid(row=0, column=1, sticky='NSEW', padx=5, pady=5)
|
lbf_old.grid(row=1, column=1, sticky='NSEW', padx=5, pady=5)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -172,8 +180,12 @@ class Check_debitor_popup(Toplevel):
|
|||||||
self.listbox.configure(state='disabled')
|
self.listbox.configure(state='disabled')
|
||||||
self.no_selection_possible = True
|
self.no_selection_possible = True
|
||||||
|
|
||||||
self.btn = Button(lbf_old, text="Ajouter", command=self.add)
|
menu_bar = Menu(self)
|
||||||
self.btn.grid(row=2, column=0, columnspan= 2, pady=10, padx=10, sticky='NSEW')
|
menu_param = Menu(menu_bar, tearoff=0)
|
||||||
|
menu_param.add_command(label="Ajouter à la liste", command=self.add)
|
||||||
|
menu_bar.add_cascade(label="Paramètre", menu=menu_param)
|
||||||
|
|
||||||
|
self.config(menu=menu_bar)
|
||||||
|
|
||||||
self.btn = Button(self, text="Valider", command=self.destroy)
|
self.btn = Button(self, text="Valider", command=self.destroy)
|
||||||
self.btn.grid(row=2,column=0, columnspan= 2, pady=10,padx=10, sticky='NSEW')
|
self.btn.grid(row=2,column=0, columnspan= 2, pady=10,padx=10, sticky='NSEW')
|
||||||
@@ -223,7 +235,10 @@ class Input_popup(Toplevel):
|
|||||||
|
|
||||||
label_font = font.Font(weight='bold', size=9)
|
label_font = font.Font(weight='bold', size=9)
|
||||||
Label(lbf_new, text="", font=label_font).grid(row=0, column=0, sticky="W")
|
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)
|
input_entry = Entry(lbf_new, textvariable=self.inp_value, width=100)
|
||||||
|
input_entry.grid(row=0, column=1, sticky="W", pady=10)
|
||||||
|
input_entry.focus()
|
||||||
|
self.after(0,input_entry.focus)
|
||||||
|
|
||||||
|
|
||||||
self.btn = Button(self, text="Valider", command=self.destroy)
|
self.btn = Button(self, text="Valider", command=self.destroy)
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
20220820-1135
|
20220907-1112
|
||||||
51
main.py
51
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)
|
||||||
@@ -117,7 +118,7 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
|
|
||||||
def main_timer_fn(self):
|
def main_timer_fn(self):
|
||||||
print("Pass tick timer main app")
|
#print("Pass tick timer main app")
|
||||||
self.timer = self.fenetre.after(5000, self.main_timer_fn)
|
self.timer = self.fenetre.after(5000, self.main_timer_fn)
|
||||||
|
|
||||||
self.nb_facture_var.set(self.count_facture)
|
self.nb_facture_var.set(self.count_facture)
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -233,7 +242,7 @@ class ClercAttrib2Biz():
|
|||||||
self.b_prompt_open = False
|
self.b_prompt_open = False
|
||||||
|
|
||||||
def refresh_ui(self):
|
def refresh_ui(self):
|
||||||
print("pass refresh UI")
|
#print("pass refresh UI")
|
||||||
if self.export_one_file.get() and not self.export_format_biz.get():
|
if self.export_one_file.get() and not self.export_format_biz.get():
|
||||||
self.cb_run['state'] = "active"
|
self.cb_run['state'] = "active"
|
||||||
else:
|
else:
|
||||||
@@ -257,7 +266,8 @@ class ClercAttrib2Biz():
|
|||||||
o_addresse.lastName = row[9]
|
o_addresse.lastName = row[9]
|
||||||
o_addresse.firstName = row[10]
|
o_addresse.firstName = row[10]
|
||||||
o_addresse.birth = row[38]
|
o_addresse.birth = row[38]
|
||||||
o_addresse.street = row[12]
|
o_addresse.street = row[11]
|
||||||
|
o_addresse.street_cpl = row[12]
|
||||||
o_addresse.npa = row[13]
|
o_addresse.npa = row[13]
|
||||||
o_addresse.city = row[15]
|
o_addresse.city = row[15]
|
||||||
self.addresses.add_addresse(o_addresse)
|
self.addresses.add_addresse(o_addresse)
|
||||||
@@ -275,7 +285,7 @@ class ClercAttrib2Biz():
|
|||||||
self.count_facture = 0
|
self.count_facture = 0
|
||||||
x = 0
|
x = 0
|
||||||
|
|
||||||
self.export_filename = f"bizexdoc_export_Attrib_v{datetime.now().year}{datetime.now().month}{datetime.now().month}{datetime.now().hour}{datetime.now().minute}.csv"
|
self.export_filename = f"bizexdoc_export_Attrib_v{datetime.now().year}{datetime.now().month}{datetime.now().day}{datetime.now().hour}{datetime.now().minute}.csv"
|
||||||
|
|
||||||
if self.export_format_biz:
|
if self.export_format_biz:
|
||||||
if self.export_one_file.get() and os.path.exists(os.path.join(dest_dir, self.export_filename)):
|
if self.export_one_file.get() and os.path.exists(os.path.join(dest_dir, self.export_filename)):
|
||||||
@@ -296,7 +306,7 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
print(f"remove src.csv => {os.path.join(dest_dir, 'src.csv')}")
|
print(f"remove src.csv => {os.path.join(dest_dir, 'src.csv')}")
|
||||||
|
|
||||||
|
self.progress_bar["value"] = 0
|
||||||
for filename in os.listdir(dir):
|
for filename in os.listdir(dir):
|
||||||
x += 1
|
x += 1
|
||||||
if ".json" in filename:
|
if ".json" in filename:
|
||||||
@@ -305,11 +315,17 @@ class ClercAttrib2Biz():
|
|||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
|
|
||||||
if self.export_format_biz.get():
|
if self.export_format_biz.get():
|
||||||
self.parseFile(data, filename)
|
bRet = self.parseFile(data, filename)
|
||||||
|
if bRet:
|
||||||
|
messagebox.showinfo(title="Fin de conversion",
|
||||||
|
message="La conversion s'est terminée avec succès")
|
||||||
|
return False
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.convertFile(data, filename)
|
self.convertFile(data, filename)
|
||||||
if self.delete_after_parse.get():
|
if self.delete_after_parse.get():
|
||||||
os.remove(dir + "/" + filename)
|
os.remove(dir + "/" + filename)
|
||||||
|
|
||||||
self.progress_bar["value"] = x / len(os.listdir(dir)) * 100
|
self.progress_bar["value"] = x / len(os.listdir(dir)) * 100
|
||||||
self.fenetre.update_idletasks()
|
self.fenetre.update_idletasks()
|
||||||
self.nb_facture_var.set(self.count_facture)
|
self.nb_facture_var.set(self.count_facture)
|
||||||
@@ -372,6 +388,7 @@ class ClercAttrib2Biz():
|
|||||||
|
|
||||||
|
|
||||||
def parseFile(self, data, filename):
|
def parseFile(self, data, filename):
|
||||||
|
self.progress_bar["value"] = 0
|
||||||
self.index_counter += 1
|
self.index_counter += 1
|
||||||
lines = []
|
lines = []
|
||||||
self.count_facture += len(data["invoices"])
|
self.count_facture += len(data["invoices"])
|
||||||
@@ -383,10 +400,12 @@ class ClercAttrib2Biz():
|
|||||||
csv_col.data[5] = f""
|
csv_col.data[5] = f""
|
||||||
lines.append(csv_col.data)
|
lines.append(csv_col.data)
|
||||||
|
|
||||||
|
cur_invoice_index = 0
|
||||||
|
|
||||||
x = 70
|
|
||||||
|
|
||||||
for ele in data["invoices"]:
|
for ele in data["invoices"]:
|
||||||
|
cur_invoice_index += 1
|
||||||
|
self.progress_bar["value"] = cur_invoice_index / self.count_facture * 100
|
||||||
b_address_update = True
|
b_address_update = True
|
||||||
data = cls_Invoice()
|
data = cls_Invoice()
|
||||||
data.parse_item(ele)
|
data.parse_item(ele)
|
||||||
@@ -399,9 +418,15 @@ class ClercAttrib2Biz():
|
|||||||
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 ")
|
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 ")
|
||||||
inp_popup = Input_popup(self.fenetre, default=data.Debtor["code"], factureID=data.data['id'], fip=data.Patient['fip_number'])
|
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())
|
data.Debtor["code"] = str(inp_popup.show())
|
||||||
|
if data.Debtor["code"] is None or '.' in data.Debtor["code"]:
|
||||||
|
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
|
||||||
|
|
||||||
if int(data.Debtor["code"]) == 1:
|
if int(data.Debtor["code"]) == 1:
|
||||||
if not self.check_code_validity(data.Debtor["code"],data):
|
if not self.check_code_validity(data.Debtor["code"],data):
|
||||||
|
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 False
|
||||||
|
|
||||||
|
|
||||||
@@ -440,6 +465,15 @@ class ClercAttrib2Biz():
|
|||||||
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"] = debitor_popup.show()
|
data.Debtor["code"] = debitor_popup.show()
|
||||||
|
|
||||||
|
if data.Debtor["code"] is None or '.' in data.Debtor["code"]:
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if data.Patient["complement"] != None:
|
if data.Patient["complement"] != None:
|
||||||
@@ -699,6 +733,7 @@ class ClercAttrib2Biz():
|
|||||||
wr.writerow(cdr)
|
wr.writerow(cdr)
|
||||||
else:
|
else:
|
||||||
self.save_file(lines,fileName=self.export_filename)
|
self.save_file(lines,fileName=self.export_filename)
|
||||||
|
|
||||||
def addToIndexs(self,obj,data,cat, key):
|
def addToIndexs(self,obj,data,cat, key):
|
||||||
#self.a_index[cat].append({"key":key,"index":len(obj.data)})
|
#self.a_index[cat].append({"key":key,"index":len(obj.data)})
|
||||||
if key not in self.a_index[cat]:
|
if key not in self.a_index[cat]:
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
VERSION = "20220820-1135"
|
VERSION = "20220907-1112"
|
||||||
Reference in New Issue
Block a user