class AjanlatModositoUrlap(simpledialog.Dialog): def __init__(self, szulo, kon): self._kon = kon super().__init__(szulo, title="Ajánlat módosítása") def body(self, szulo): self._ajanlat_valaszto = Valaszto("ajánlat", self._ajanlatok(), self) self._ajanlat_valaszto.set_callback(self._reszletek) self._ajanlat_valaszto.pack(ipadx=2, ipady=2) self._ajanlat_urlap = AjanlatUrlap(self) self._ajanlat_urlap.pack(padx=2, pady=2, ipadx=2, ipady=2, fill=BOTH) self._reszletek(1) return self._ajanlat_valaszto.valaszto def validate(self): if not bool(self._ajanlat_urlap.export()): messagebox.showwarning("Hiányos adat!", "Add meg az ajánlati árat!", parent=self) return False if not self._ajanlat_urlap.datum_ervenyes(): messagebox.showwarning("Dátumhiba!", "Formátum vagy sorrend hibás!", parent=self) return False return True def apply(self): meglevo_ajanlat = self._ajanlat_valaszto.elem modositott_ajanlat = self._ajanlat_urlap.export() meglevo_ajanlat.adatok = modositott_ajanlat if meglevo_ajanlat.ment(self._kon.ajanlat): print("Bejegyzés módosítva.") else: print("Nem sikerült módosítani!") def _ajanlatok(self): ajanlatok = self._kon.ajanlat.select("ajanlat") return sorted(map(lambda ajanlat: Ajanlat(kon=self._kon, **ajanlat), ajanlatok), key=repr) def _reszletek(self, event): """Megjeleníti a kiválasztott ajánlat módosítható részleteit. event: tkinter esemény-paraméter (itt nincs rá szükség)""" meglevo_ajanlat = self._ajanlat_valaszto.elem if not meglevo_ajanlat.leadva: meglevo_ajanlat.leadva = date.isoformat(date.today()) if not meglevo_ajanlat.ervenyes: meglevo_ajanlat.ervenyes = date.isoformat(date.today() + timedelta(days=30)) self._ajanlat_urlap.beallit(meglevo_ajanlat)
class AjanlatkeresModositoUrlap(simpledialog.Dialog): """Csak olyan ajánlatkérést lehet módosítani, amire nem született még ajánlat.""" def __init__(self, szulo, kon): self._kon = kon super().__init__(szulo, title="Ajánlatkérés módosítása") def body(self, szulo): ajanlatkeres = Frame(self) self._ajanlatkeres_valaszto = Valaszto("ajánlatkérés", self._ajanlatkeresek(), ajanlatkeres) self._ajanlatkeres_valaszto.set_callback(self._megjelenit) self._ajanlatkeres_valaszto.pack(ipadx=2, ipady=2) self._ajanlatkeres_urlap = AjanlatkeresUrlap(ajanlatkeres, self._kon) self._ajanlatkeres_urlap.pack(padx=2, pady=2, ipadx=2, ipady=2, fill=BOTH, side=BOTTOM) ajanlatkeres.pack(ipadx=2, ipady=2, fill=BOTH, side=TOP) self._megjelenit(1) return self._ajanlatkeres_valaszto.valaszto def validate(self): if not self._ajanlatkeres_urlap.datum_ervenyes(): messagebox.showwarning("Dátumhiba!", "Formátum vagy sorrend hibás!", parent=self) return False return True def apply(self): ajanlatkeres = self._ajanlatkeres_valaszto.elem modositas = self._ajanlatkeres_urlap.export() ajanlatkeres.adatok = modositas if ajanlatkeres.ment(self._kon.ajanlat): print("Bejegyzés módosítva.") else: print("Nem sikerült módosítani!") def _megjelenit(self, event): self._ajanlatkeres_urlap.beallit(self._ajanlatkeres_valaszto.elem) def _ajanlatkeresek(self): # azok az ajánlatkérések kellenek, melyekre még nem született ajánlat ajanlatkeresek = self._kon.ajanlat.execute(""" SELECT * FROM ajanlatkeres WHERE azonosito NOT IN ( SELECT ajanlatkeres.azonosito FROM ajanlatkeres, ajanlat ON ajanlatkeres.azonosito = ajanlat.ajanlatkeres ); """) return sorted(map(lambda ajanlatkeres: Ajanlatkeres(kon = self._kon, **ajanlatkeres), ajanlatkeresek), key=repr)
class ProjektModositoUrlap(simpledialog.Dialog): def __init__(self, szulo, kon): self._kon = kon # super() előtt kell legyen super().__init__(szulo, title="Projekt módosítása") def body(self, szulo): self._projekt_valaszto = Valaszto("megnevezés", self._projektek(), self) self._projekt_valaszto.set_callback(self._projekt_megjelenit) self._projekt_valaszto.pack(ipadx=2, ipady=2) megnevezes = LabelFrame(self, text="projekt neve") self._projekt_urlap = ProjektUrlap(megnevezes) self._projekt_urlap.pack(ipadx=2, ipady=2) self._projekt_megjelenit(1) megnevezes.pack(fill=X, padx=2, pady=2) return self._projekt_valaszto.valaszto def validate(self): """Ezen a ponton a projektek a projektszám miatt mindenképpen különbözni fognak egymástól.""" return True def apply(self): projekt = self._modositott_projekt() if projekt.ment(self._kon.projekt): print("{}: Bejegyzés módosítva.".format(projekt)) else: print("Nem sikerült módosítani.") self._projekt_valaszto.beallit(self._projektek()) self._projekt_megjelenit(1) def _projektek(self): return sorted(map(lambda projekt: Projekt(**projekt), self._kon.projekt.select("projekt")), key=lambda elem: (elem.gyakorisag, repr(elem))) def _projekt_megjelenit(self, event): self._projekt_urlap.beallit(self._projekt_valaszto.elem or Projekt()) def _modositott_projekt(self): projekt = self._projekt_valaszto.elem projekt.adatok = self._projekt_urlap.export() return projekt
class UjAjanlatUrlap(simpledialog.Dialog): def __init__(self, szulo, kon): self._kon = kon super().__init__(szulo, title="Új ajánlat rögzítése") def body(self, szulo): self._ajanlatkeres_valaszto = Valaszto("ajánlatkérés", self._ajanlatkeresek(), self) self._ajanlatkeres_valaszto.set_callback(self._alapertelmezes) self._ajanlatkeres_valaszto.pack(ipadx=2, ipady=2, fill=BOTH) self._ajanlat_urlap = AjanlatUrlap(self) self._ajanlat_urlap.pack(padx=2, pady=2, ipadx=2, ipady=2, fill=BOTH) self._alapertelmezes(1) return self._ajanlatkeres_valaszto.valaszto def validate(self): if not bool(self._ajanlat_urlap.export()): messagebox.showwarning("Hiányos adat!", "Add meg az ajánlati árat!", parent=self) return False if not self._ajanlat_urlap.datum_ervenyes(): messagebox.showwarning("Dátumhiba!", "Formátum vagy sorrend hibás!", parent=self) return False return True def apply(self): ajanlatkeres = self._ajanlatkeres_valaszto.elem ajanlat = self._ajanlat_urlap.export() ajanlat.ajanlatkeres = ajanlatkeres.azonosito if ajanlat.ment(self._kon.ajanlat): print("Árajánlat mentve.") else: print("Az árajánlatot nem sikerült elmenteni!") def _ajanlatkeresek(self): # azok az ajánlatkérések kellenek, melyekre még nem született ajánlat ajanlatkeresek = self._kon.ajanlat.execute(""" SELECT * FROM ajanlatkeres WHERE azonosito NOT IN ( SELECT ajanlatkeres.azonosito FROM ajanlatkeres, ajanlat ON ajanlatkeres.azonosito = ajanlat.ajanlatkeres ); """) return sorted(map( lambda ajanlatkeres: Ajanlatkeres(kon=self._kon, **ajanlatkeres), ajanlatkeresek), key=repr) def _alapertelmezes(self, event): ma = date.isoformat(date.today()) egyhonapmulva = date.isoformat(date.today() + timedelta(days=30)) self._ajanlat_urlap.beallit( Ajanlat(ajanlatiar="", leadva=ma, ervenyes=egyhonapmulva, megjegyzes=""))
class MunkareszModositoUrlap(simpledialog.Dialog): def __init__(self, szulo, kon): self._kon = kon # super() előtt kell legyen super().__init__(szulo, title="Munkarész módosítása") def body(self, szulo): self._munkaresz_valaszto = Valaszto("munkarész", self._munkareszek(), self) self._munkaresz_valaszto.set_callback(self._munkaresz_megjelenit) self._munkaresz_valaszto.pack(ipadx=2, ipady=2) munkaresz = LabelFrame(self, text="munkarész") self._munkaresz_urlap = MunkareszUrlap(munkaresz) self._munkaresz_urlap.pack(ipadx=2, ipady=2) munkaresz.pack(fill=X, padx=2, pady=2) cim = LabelFrame(self, text="munkarész címe") self._cim_urlap = CimUrlap(cim) self._cim_urlap.pack(ipadx=2, ipady=2) cim.pack(padx=2, pady=2) jelleg = LabelFrame(self, text="munkarész jellege") self._jelleg_urlap = JellegUrlap(jelleg) self._jelleg_urlap.pack(ipadx=2, ipady=2) jelleg.pack(fill=X, padx=2, pady=2) self._munkaresz_megjelenit(1) return self._munkaresz_valaszto.valaszto def validate(self): munkaresz = self._munkaresz_urlap.export() cim = self._cim_urlap.export() jelleg = self._jelleg_urlap.export() if not munkaresz: messagebox.showwarning("Hiányos adat!", "Legalább a nevet add meg!", parent=self) return False if munkaresz.meglevo(self._kon.projekt) and cim.meglevo( self._kon.projekt) and jelleg.meglevo(self._kon.projekt): messagebox.showwarning("Létező munkarész!", "Pontosítsd!", parent=self) return False return True def apply(self): munkaresz, cim, jelleg = self._modositott_munkaresz() if munkaresz.ment(self._kon.projekt) and cim.ment( self._kon.projekt) and jelleg.ment(self._kon.projekt): print("Bejegyzés mentve.") else: print("Nem sikerült elmenteni!") def _munkareszek(self): return sorted(map(lambda jelleg: Jelleg(kon=self._kon, **jelleg), self._kon.projekt.select("jelleg")), key=repr) def _munkaresz_kivalaszt(self, event): self._munkaresz_valaszto.beallit(self._munkareszek()) self._munkaresz_megjelenit(1) def _munkaresz_megjelenit(self, event): munkaresz, cim, jelleg = self._meglevo_munkaresz() self._munkaresz_urlap.beallit(munkaresz) self._cim_urlap.beallit(cim) self._jelleg_urlap.beallit(jelleg) def _meglevo_munkaresz(self): jelleg = self._munkaresz_valaszto.elem munkaresz = self._kon.projekt.select( "munkaresz", azonosito=jelleg.munkaresz).fetchone() munkaresz = Munkaresz(**munkaresz) cim = self._kon.projekt.select( "cim", munkaresz=munkaresz.azonosito).fetchone() cim = Cim(**cim) return (munkaresz, cim, jelleg) def _modositott_munkaresz(self): munkaresz, cim, jelleg = self._meglevo_munkaresz() munkaresz.adatok = self._munkaresz_urlap.export() cim.adatok = self._cim_urlap.export() jelleg.adatok = self._jelleg_urlap.export() return (munkaresz, cim, jelleg)
class UjMunkareszUrlap(simpledialog.Dialog): def __init__(self, szulo, kon): self._kon = kon # super() előtt kell legyen super().__init__(szulo, title="Új munkarész felvitele") def body(self, szulo): self._projekt_valaszto = Valaszto("projekt", self._projektek(), self) self._projekt_valaszto.set_callback(self._cim_megjelenit) self._projekt_valaszto.pack(ipadx=2, ipady=2) munkaresz = LabelFrame(self, text="munkarész") self._munkaresz_urlap = MunkareszUrlap(munkaresz) self._munkaresz_urlap.pack(ipadx=2, ipady=2) munkaresz.pack(fill=X, padx=2, pady=2) cim = LabelFrame(self, text="munkarész címe") self._cim_urlap = CimUrlap(cim) self._cim_urlap.pack(ipadx=2, ipady=2) self._cim_megjelenit(1) cim.pack(padx=2, pady=2) jelleg = LabelFrame(self, text="munkarész jellege") self._jelleg_urlap = JellegUrlap(jelleg) self._jelleg_urlap.pack(ipadx=2, ipady=2) jelleg.pack(fill=X, padx=2, pady=2) return self._projekt_valaszto.valaszto def validate(self): munkaresz = self._munkaresz_urlap.export() cim = self._cim_urlap.export() jelleg = self._jelleg_urlap.export() if not munkaresz: messagebox.showwarning("Hiányos adat!", "Legalább a nevet add meg!", parent=self) return False if munkaresz.meglevo(self._kon.projekt) and cim.meglevo( self._kon.projekt) and jelleg.meglevo(self._kon.projekt): messagebox.showwarning("Létező munkarész!", "Pontosítsd!", parent=self) return False return True def apply(self): projekt = self._projekt_valaszto.elem munkaresz = self._munkaresz_urlap.export() munkaresz.projekt = projekt.azonosito munkaresz = self._munkaresz_urlap.export() munkaresz.projekt = projekt.azonosito if not (munkaresz_azonosito := munkaresz.ment(self._kon.projekt)): print("A munkarészt nem sikerült elmenteni!") return cim = self._cim_urlap.export() cim.munkaresz = munkaresz_azonosito jelleg = self._jelleg_urlap.export() jelleg.munkaresz = munkaresz_azonosito if not (cim.ment(self._kon.projekt) and jelleg.ment(self._kon.projekt)): print("A címet/jelleget nem sikerült elmenteni!") return print("Bejegyzés mentve.")
class KontaktModositoUrlap(simpledialog.Dialog): def __init__(self, szulo, kon=None): self._kon = kon super().__init__(szulo, title="Kontaktszemély módosítása") def body(self, szulo): self._szervezetvalaszto = Valaszto("szervezet", self._szervezetnevsor(), self) self._szervezetvalaszto.set_callback(self._megjelenit) self._szervezetvalaszto.pack(ipadx=2, ipady=2) self._szemelyvalaszto = Valaszto("személy", self._szemelynevsor(), self) self._szemelyvalaszto.set_callback(self._reszletek) self._szemelyvalaszto.pack(ipadx=2, ipady=2) self._modszemelyvalaszto = Valaszto("személy", self._modszemelynevsor(), self) self._modszemelyvalaszto.pack(ipadx=2, ipady=2) self._megjegyzes = StringVar() Label(self, text="megjegyzés").pack(ipadx=2, ipady=2) Entry(self, textvariable=self._megjegyzes, width=32).pack(ipadx=2, ipady=2) self._megjelenit(1) return self._szervezetvalaszto def validate(self): return True def apply(self): szervezet = self._szervezetvalaszto.elem.azonosito szemely = self._szemelyvalaszto.elem.azonosito modszemely = self._modszemelyvalaszto.elem.azonosito megjegyzes = self._megjegyzes.get() kontakt_id = self._kon.kontakt.select("kontakt", "azonosito", szemely=szemely, szervezet=szervezet, logic="AND") kontakt_id = kontakt_id.fetchone()["azonosito"] kontakt = Kontakt(azonosito=kontakt_id, szemely=modszemely, szervezet=szervezet, megjegyzes=megjegyzes) if kontakt.ment(self._kon.kontakt): print("Bejegyzés módosítva.") else: print("Nem sikerült módosítani.") def _szervezetnevsor(self): return sorted(map(lambda szervezet: Szervezet(**szervezet), self._kon.szervezet.select("szervezet")), key=repr) def _szemelynevsor(self): szervezetazonosito = self._szervezetvalaszto.elem.azonosito szervezethez_rendelt_szemelyek = self._kon.szervezet.execute( """ SELECT * FROM szemely WHERE azonosito IN ( SELECT szemely FROM kontakt WHERE szervezet = ? ); """, (szervezetazonosito, )) return sorted(map(lambda szemely: Szemely(**szemely), szervezethez_rendelt_szemelyek), key=repr) def _modszemelynevsor(self): szervezetazonosito = self._szervezetvalaszto.elem.azonosito szervezethez_nem_rendelt_szemelyek = self._kon.szervezet.execute( """ SELECT * FROM szemely WHERE azonosito NOT IN ( SELECT szemely FROM kontakt WHERE szervezet = ? ); """, (szervezetazonosito, )) return sorted(map(lambda szemely: Szemely(**szemely), szervezethez_nem_rendelt_szemelyek), key=repr) def _megjelenit(self, event): self._szemelyvalaszto.beallit(self._szemelynevsor()) self._modszemelyvalaszto.beallit(self._modszemelynevsor()) self._reszletek(1) def _reszletek(self, event): szemely = self._szemelyvalaszto.elem.azonosito szervezet = self._szervezetvalaszto.elem.azonosito megjegyzes = self._kon.kontakt.select("kontakt", "megjegyzes", szemely=szemely, szervezet=szervezet, logic="AND").fetchone() self._megjegyzes.set(megjegyzes["megjegyzes"])