From f3d94d330cda65bbc99b036a66cdcd9ac7fc255e Mon Sep 17 00:00:00 2001 From: Ambulance Clerc Date: Wed, 26 Apr 2023 11:03:20 +0200 Subject: [PATCH] Supression des options depreciate avec adaptation du code Ajout de la persistance des otpions --- main.py | 293 ++++++++------------------------------------------------ 1 file changed, 40 insertions(+), 253 deletions(-) diff --git a/main.py b/main.py index f67aa2a..ca7aace 100644 --- a/main.py +++ b/main.py @@ -94,20 +94,19 @@ class ClercAttrib2Biz(): 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) + #Défault value for config 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.delete_after_parse.set(False) + self.winbiz_folder_path.set(temp_dir) + self.load_config() self.draw_mainWindows() - self.refresh_ui() self.read_addresses() @@ -124,7 +123,11 @@ class ClercAttrib2Biz(): def save_config(self, event=None): + self.config["cfg_check_adresses"] = self.check_addresses.get() + self.config["cfg_delete_after_parse"] = self.delete_after_parse.get() + self.config["cfg_export_one_file"] = self.export_one_file.get() 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): @@ -133,7 +136,18 @@ class ClercAttrib2Biz(): 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")) + self.check_addresses.set(self.read_config_element("cfg_check_adresses", True)) + self.delete_after_parse.set(self.read_config_element("cfg_delete_after_parse", False)) + self.export_one_file.set(self.read_config_element("cfg_export_one_file", True)) + self.winbiz_folder_path.set(self.read_config_element("winbiz_folder_path", temp_dir)) + + def read_config_element(self,name, default): + val = self.config.get(name) + if val is not None: + return val + else: + return default + def main_timer_fn(self): #print("Pass tick timer main app") @@ -221,12 +235,10 @@ class ClercAttrib2Biz(): lbf_3 = LabelFrame(self.fenetre, text="Options") lbf_3.grid(row=0, column=1, rowspan=2, sticky='NSEW', padx=5, pady=5) - Checkbutton(lbf_3, text="Vérifier les Adresses", variable=self.check_addresses, onvalue=True, offvalue=False).grid(row=0, sticky='W') - Checkbutton(lbf_3, text="Supprimer fichiers après conversion", variable= self.delete_after_parse, onvalue=True, offvalue=False).grid(row=1, sticky='W') - Checkbutton(lbf_3, text="Export au format .biz", variable= self.export_format_biz, onvalue=True, offvalue=False, command=self.refresh_ui).grid(row=2, 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.grid(row=4, sticky='W') + Checkbutton(lbf_3, text="Vérifier les Adresses", variable=self.check_addresses, onvalue=True, offvalue=False, command=self.save_config).grid(row=0, sticky='W') + Checkbutton(lbf_3, text="Supprimer fichiers après conversion", variable= self.delete_after_parse, onvalue=True, offvalue=False, command=self.save_config).grid(row=1, sticky='W') + Checkbutton(lbf_3, text="Export en 1 seul fichier", variable=self.export_one_file, onvalue=True, offvalue=False, + command=self.save_config).grid(row=3, 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("", self.save_config) @@ -262,17 +274,6 @@ class ClercAttrib2Biz(): self.prompt.destroy() self.b_prompt_open = False - def refresh_ui(self): - #print("pass refresh UI") - if self.export_one_file.get() and not self.export_format_biz.get(): - self.cb_run['state'] = "active" - else: - self.cb_run['state'] = "disabled" - self.run_excel_after_export.set(False) - if self.export_format_biz.get(): - self.cb_run['state'] = "disabled" - self.run_excel_after_export.set(False) - def read_addresses(self): if os.path.exists(os.path.join(self.winbiz_folder_path.get(),"adresses.dbf")): @@ -311,24 +312,15 @@ class ClercAttrib2Biz(): 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_one_file.get() and os.path.exists(os.path.join(dest_dir, self.export_filename)): - try: - os.remove(os.path.join(dest_dir, self.export_filename)) - except: - messagebox.showerror(title="Erreur fichier déjà ouvert", message=f"Le fichier {self.export_filename} est déjà ouvert. Veuillez le fermer et recommencer") - return + if self.export_one_file.get() and os.path.exists(os.path.join(dest_dir, self.export_filename)): + try: + os.remove(os.path.join(dest_dir, self.export_filename)) + except: + messagebox.showerror(title="Erreur fichier déjà ouvert", message=f"Le fichier {self.export_filename} est déjà ouvert. Veuillez le fermer et recommencer") + return - print(f"remove {self.export_filename} => {os.path.join(dest_dir, self.export_filename)}") - else: - if self.export_one_file.get() and os.path.exists(os.path.join(dest_dir, f"src.csv")): - try: - os.remove(os.path.join(dest_dir, f"src.csv")) - except: - messagebox.showerror(title="Erreur fichier déjà ouvert", message=f"Le fichier src.csv est déjà ouvert. Veuillez le fermer et recommencer") - return + print(f"remove {self.export_filename} => {os.path.join(dest_dir, self.export_filename)}") - print(f"remove src.csv => {os.path.join(dest_dir, 'src.csv')}") self.progress_bar["value"] = 0 for filename in os.listdir(dir): @@ -338,24 +330,20 @@ class ClercAttrib2Biz(): with open(dir + "/" + filename, encoding="utf-8") as f: data = json.load(f) - if self.export_format_biz.get(): - 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 + bRet = self.parseFile(data, filename) + if bRet: + messagebox.showinfo(title="Fin de conversion", + message="La conversion s'est terminée avec succès") + + + - else: - self.convertFile(data, filename) - if self.delete_after_parse.get(): - os.remove(dir + "/" + filename) self.progress_bar["value"] = x / len(os.listdir(dir)) * 100 self.fenetre.update_idletasks() self.nb_facture_var.set(self.count_facture) - - if self.run_excel_after_export.get(): - self.open_export_file() + if self.delete_after_parse.get(): + os.remove(dir + "/" + filename) def ifNotNull(self,value, ret=""): if value == None: @@ -813,207 +801,6 @@ class ClercAttrib2Biz(): self.a_index["global"].append(key) obj.data.append(data) - def convertFile(self, data, filename): #à utiliser pour un export avec fichier excel de Thomas - self.count_facture += len(data["invoices"]) - self.a_listings["to_check"] = [] - - - - - lines = [] - for ele in data["invoices"]: - data = cls_Invoice() - data.parse_item(ele) - - b_update_debitor = True - - print(f"Code débiteur => {data.data['id']}: {data.Debtor['code']}" ) - if data.Debtor["code"] == "None" or '.' in data.Debtor["code"]: - print("ERROR code débiteur") - 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']) - 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.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']}") - - for elem in data.Debtor: - pass - ''' TODO activer ce code quand les débiteur auront un bon numéro - try: - - if int(data.Debtor["code"]) > 100: - print("code débiteur > 100 => no update data") - b_update_debitor = False - except: - messagebox.showerror(title="Erreur de code débiteur", message=f"il y a une erreur dans le code débiteur, il faut le vérifier. \n(n'est pas un chiffre) {data.Patient['fip_number']}") - exit() - ''' - ''' - if data.Debtor["type"] == "Établissement": - self.a_listings["to_check"].append(data.Patient["fip_number"]) - print(data.Patient["complement"]) - self.logger.warn(f"Débiteur établissement facture N°: {data.data['id']} / {data.Patient['fip_number']} {data.Debtor['name']}") - ''' - - - if data.Debtor["code"] == 1 and data.Patient["lastname"] + data.Patient["firstname"] != data.Debtor["lastname"] + data.Debtor["firstname"]: - self.a_listings["to_check"].append(data.Patient["fip_number"]) - print(data.Patient["complement"]) - self.logger.warning(f"Débiteur différents: facture N°: {data.data['id']} / {data.Patient['fip_number']}") - - - 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 22 patient: facture N°: {data.data['id']} / {data.Patient['fip_number']}") - - - 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] - - - - b_HRF = False - sHRF = "" - for article in data.Articles: - if "code" in article.keys(): - if article["code"] == "HRF": - b_HRF = True - sHRF = article["line_1"].replace("h",":") - print(f"pass HRF => {data.Patient['fip_number']}") - - break - - - for article in data.Articles: - csv_col = cls_Col(False) - pass_article = False - - - ##Donnée globales - - self.addToIndexs(obj=csv_col,data=data.data["id"],cat="invoice",key="ID") - self.addToIndexs(obj=csv_col,data=data.data["date"],cat="invoice",key="date") # Date du document - self.addToIndexs(obj=csv_col, data=data.data["total_price"], cat="invoice", key="total_price") - self.addToIndexs(obj=csv_col, data=data.data["comments"], cat="invoice", key="comments") - - - whitout_transport = False - for elem in data.Intervention: - if elem == "without_transportation": - whitout_transport = True - print(f"without_transportation {data.Patient['fip_number']}") - break - - self.addToIndexs(obj=csv_col, data=data.Intervention[elem], cat="intervention", key=elem) - - if whitout_transport: - for x in range(8): - pass - #csv_col.data.append("") - self.addToIndexs(obj=csv_col, data="", cat="intervention", key=x) - - - self.addToIndexs(obj=csv_col, data=whitout_transport, cat="intervention", key="whitout_transport") - - if b_HRF: - print(f"pass Change end_time on b_HRF") - dt = datetime.fromisoformat(csv_col.data[self.a_index["global"].index("end_time")]) - month = "0" + str(dt.month) if dt.month < 10 else dt.month - csv_col.data[self.a_index["global"].index("end_time")] = f"{dt.year}-{month}-{dt.day}T"+sHRF+":00+01:00" - print( csv_col.data[self.a_index["global"].index("end_time")]) - - - - for elem in data.Patient: - if elem == "lastname": - if data.Patient[elem] == None: - data.Patient[elem] = "Patient inconnu" - - if elem == "street_number": - print(f"ADRESS: data.Patient[elem]") - if data.Patient[elem] != None and "-" in data.Patient[elem] and "\t" not in data.Patient[elem]: - data.Patient[elem] = f"\t{data.Patient[elem]}" - print(f"ERROR DEBUG ADRESS: { data.Patient[elem]}") - - - self.addToIndexs(obj=csv_col, data=data.Patient[elem], cat="patient", key=elem) - - for elem in data.Debtor: - if "name" in data.Debtor.keys(): - pass - - if elem == "street_number": - if data.Patient[elem] != None and "-" in data.Patient[elem] and "\t" not in data.Patient[elem]: - data.Patient[elem] = f"\t{data.Patient[elem]}" - - - if elem != "name": - csv_col.data.append(data.Debtor[elem]) - - if "name" in data.Debtor.keys(): - csv_col.data.append(data.Debtor["name"]) - else: - csv_col.data.append("") - - # csv_col.data[126] = ' '.join(filter(None,temp_data)) # Débiteur nom - - ## Données prestations - - if "code" in article.keys(): - if article["code"] == "HRF": - csv_col = None - break - else: - csv_col.data.append(article["code"]) - - - - - else: - csv_col.data.append("") - - - csv_col.data.append(article["line_1"]) - csv_col.data.append(article["line_2"]) - - if "quantity" in article.keys(): - csv_col.data.append(article["quantity"]) - else: - csv_col.data.append("") - - if "unit_price" in article.keys(): - csv_col.data.append(article["unit_price"]) - else: - csv_col.data.append("") - - if "unit" in article.keys(): - csv_col.data.append(article["unit"]) - else: - csv_col.data.append("") - - if "price" in article.keys(): - csv_col.data.append(article["price"]) - else: - csv_col.data.append("") - - - lines.append(csv_col.data) - csv_col = None - - - if not self.export_one_file.get(): - with open(os.path.join(dest_dir, f"bizexdoc_" + filename.replace(".json", "") + ".csv"), "w+", errors='replace', newline='') as csv_file: - wr = csv.writer(csv_file, delimiter=';') - for cdr in lines: - wr.writerow(cdr) - else: - self.save_file(lines) - def save_file(self,lines, fileName = "src.csv"): with open(os.path.join(dest_dir, fileName), "a+", errors='replace',newline='') as csv_file: wr = csv.writer(csv_file, delimiter=';')