from tkinter import * from tkinter import font from datetime import datetime from tkinter import messagebox class Check_addresses_popup(Toplevel): x_row = 0 no_selection_possible = False def __init__(self, parent, item_1=None, item_2=None, debitor=None, factureID=""): super().__init__(parent) self.geometry(f"700x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }") self.resizable(True,True) 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.columnconfigure(0, weight=1) self.columnconfigure(1, weight=1) lbf_new = LabelFrame(self, text="Données Attrib") lbf_new.grid(row=0, column=0, sticky='WE', padx=5, pady=5) lbf_old = LabelFrame(self, text="Données Winbiz") lbf_old.grid(row=0, column=1, sticky='NSEW', padx=5, pady=5) str_address_1 = "" fonts = [] self.x_row = 0 self.add_compares_element(new_frame=lbf_new,old_frame=lbf_old,label="N° AVS de l'adresse:",str1=item_1['insurance_policy_number'].replace('.',''), str2=item_2.AVS) 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="NPA/Localité:", str1=f"{item_1['postal_code']} {item_1['city']}", str2=f"{item_2.npa} {item_2.city}") str_address_1 += item_1['insurance_policy_number'].replace('.', '') 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['postal_code']} {item_1['city']}" str_address_2 = "" str_address_2 += item_2.AVS str_address_2 += item_2.lastName str_address_2 += item_2.firstName str_address_2 += item_2.birth str_address_2 += f"{item_2.street.strip()}" str_address_2 += f"{item_2.npa} {item_2.city}" self.listbox = Listbox(self, height=3, width=35) self.listbox.grid(row=1,column=0, columnspan= 2, pady=15,padx=15, sticky='NSEW') self.btn = Button(self, text="Valider", command=self.select) self.btn.grid(row=2,columnspan=2 , pady=10,padx=10, sticky='NSEW') for (idd, info) in ((0, "Winbiz"), (1, "Attrib")) : self.listbox.insert(END, info) if int(debitor["code"]) >= 100: self.listbox.delete(0,END) self.listbox.delete(0, END) self.listbox.insert(END, f"Aucun changement possible, code débiteur {debitor['code']}") self.listbox.configure(state='disabled') self.no_selection_possible = True if int(debitor["code"]) == 1: if str_address_1 == str_address_2: self.listbox.selection_set(0) print("adresse identique") else: self.listbox.selection_set(1) print(f"adresse différente [{str_address_1}] ({str_address_2})") def add_compares_element(self,new_frame, old_frame,str1, str2, label): label_font = font.Font(weight='bold', size=9) value_color = "black" con = "" if str1 != str2: 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") self.x_row += 1 self.selection = None def destroy(self): if self.selection is None: self.selection = True super().destroy() def select(self): selection = self.listbox.curselection() if selection: self.selection = self.listbox.get(selection[0]) self.selection = True if self.selection == "Attrib" else False self.destroy() if self.no_selection_possible: self.destroy() def show(self): self.deiconify() self.wm_protocol("WM_DELETE_WINDOW", self.destroy) self.wait_window(self) return self.selection class Check_debitor_popup(Toplevel): x_row = 0 no_selection_possible = False def __init__(self, parent, debitor=None, lists_available_names=None, factureID=None,fip=None,object=None): super().__init__(parent) self.object = object self.debitor = debitor self.inp_code = StringVar() self.inp_code.set(debitor['code']) self.geometry(f"850x300+{parent.winfo_x() + 25 }+{parent.winfo_y() +25 }") self.resizable(True,True) self.iconbitmap("./logo_clerc_03X_icon.ico") self.title(f"Incohérence sur les débiteurs {fip} / {factureID}. Code débiteur: {debitor['code']}") self.columnconfigure(0, weight=1) self.columnconfigure(1, weight=1) lbf_new = LabelFrame(self, text="Données Attrib") 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="Code saisi", font=label_font).grid(row=0, column=0, sticky="W") Entry(lbf_new, textvariable=self.inp_code, width= 10).grid(row=0, column=1, sticky="W", pady= 10) Label(lbf_new, text="Débiteur sélectionné", font=label_font).grid(row=1, column=0, sticky="W") text_name = Text(lbf_new, fg="red", height=3,width= 30) text_name.grid(row=1, column=1, sticky="W") text_name.insert(END,debitor['name']) text_name.configure(state='disabled') lbf_old = LabelFrame(self, text="Nom possible") lbf_old.grid(row=0, column=1, sticky='NSEW', padx=5, pady=5) self.listbox = Text(lbf_old, height=5, width=50) self.listbox.grid(row=1,column=0, columnspan= 2, pady=15,padx=15, sticky='NSEW') for info in lists_available_names : self.listbox.insert(END, f"{info}\n") self.listbox.configure(state='disabled') self.no_selection_possible = True self.btn = Button(lbf_old, text="Ajouter", command=self.add) self.btn.grid(row=2, column=0, columnspan= 2, pady=10, padx=10, sticky='NSEW') self.btn = Button(self, text="Valider", command=self.destroy) self.btn.grid(row=2,column=0, columnspan= 2, 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): super().destroy() def show(self): self.deiconify() self.wm_protocol("WM_DELETE_WINDOW", self.destroy) self.wait_window(self) print("nouveau code = "+ 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()