def _onNewMieter(self, data: XMietverhaeltnis) -> None: self._view.clear() mv = XMietverhaeltnis() mv.whg_id = self._whg_id self._mietverhaeltnisse.append(mv) self._listIdx = self._mietverhaeltnisse.len() - 1 self._view.setData(self._mietverhaeltnisse.getList()[self._listIdx])
def updateMietverhaeltnis(self, data: XMietverhaeltnis) -> None: data.geboren_am = datehelper.convertEurToIso(data.geboren_am) data.vermietet_ab = datehelper.convertEurToIso(data.vermietet_ab) if data.vermietet_bis: data.vermietet_bis = datehelper.convertEurToIso(data.vermietet_bis) resp = self._session. \ post(Server.SERVER + 'business.php?q=update_mietverhaeltnis&user=' + self._user, data=data.getValuesAsDict()) self._getWriteRetValOrRaiseException(resp)
def insertMietverhaeltnis(self, data: XMietverhaeltnis) -> int: data.geboren_am = datehelper.convertEurToIso(data.geboren_am) data.vermietet_ab = datehelper.convertEurToIso(data.vermietet_ab) if data.vermietet_bis: data.vermietet_bis = datehelper.convertEurToIso(data.vermietet_bis) resp = self._session. \ post(Server.SERVER + 'business.php?q=insert_mietverhaeltnis&user=' + self._user, data=data.getValuesAsDict()) writeRetVal: WriteRetVal = self._getWriteRetValOrRaiseException(resp) return int(writeRetVal.object_id())
def getMieterwechseldaten(self, mobj_id: str) -> XMieterwechsel: """ Liefert die Daten, die für einen Mieterwechsel notwendig sind: Das aktuelle Mietverhältnis und ENTWEDER das schon für die Zukunft angelegte oder, wenn es kein solches gibt, ein leeres XMietverhaeltnis-Objekt. :param mobj_id: :return: """ mv_id = self._db.getAktuelleMV_IDzuMietobjekt(mobj_id) xmv_akt: XMietverhaeltnis = self.getAktuellesMietverhaeltnis(mv_id) xmv_next: XMietverhaeltnis = self._db.getFutureMietverhaeltnis(mobj_id) if not xmv_next: xmv_next = XMietverhaeltnis() xmv_next.mobj_id = mobj_id return XMieterwechsel(xmv_akt, xmv_next)
def getFutureMietverhaeltnis(self, mobj_id: str) -> XMietverhaeltnis or None: """ Liefert für ein Mietobjekt das nächste in der Zukunft liegende Mietverhältnis bzw. None, wenn kein solches existiert. Wenn mehrere existieren, wird eine Exception geworfen :param mobj_id: :return: """ sql = "select mv.id, mv.mv_id, mv.mobj_id, mv.von, coalesce(mv.bis, '') as bis, mv.name, mv.vorname, " \ "coalesce(mv.name2, '') as name2, coalesce(mv.vorname2, '') as vorname2, " \ "coalesce(mv.telefon, '') as telefon, coalesce(mv.mobil, '') as mobil, coalesce(mv.mailto, '') as mailto," \ "mv.anzahl_pers, mv.IBAN, " \ "mv.bemerkung1, mv.bemerkung2, mv.kaution, coalesce(mv.kaution_bezahlt_am, '') as kaution_bezahlt_am, " \ "sm.netto as nettomiete, sm.nkv " \ "from mietverhaeltnis mv " \ "inner join sollmiete sm on sm.mv_id = mv.mv_id " \ "where mv.mobj_id = '%s' " \ "and mv.von > CURRENT_DATE " \ "order by mv.von asc, sm.von desc " % mobj_id listofdicts = self.readAllGetDict(sql) if len(listofdicts) == 0: return None elif len(listofdicts) > 1: raise Exception( "MietverhaeltnisData.getFutureMietverhaeltnis():\n" "Zu '%s' mehrere zukünftige Mietverhältnisse gefunden." % mobj_id) else: x = XMietverhaeltnis(listofdicts[0]) return x
def getAktuellesMietverhaeltnis(self, mv_id: str) -> XMietverhaeltnis or None: """ Liefert das aktuelle Mietverhältnis zur gegebenen mv_id (aktiv oder gekündigt). Wird für mv_id kein Mietverhältnis gefunden, wird None zurückgegeben. NICHT abgedeckt ist der Fall, dass ein Mieter 2 Wohnungen bewohnt. Dann wird eine Exception geworfen. :param mv_id: Selektionsparameter :return: XMietverhaeltnis """ sql = "select mv.id, mv.mv_id, mv.mobj_id, mv.von, coalesce(mv.bis, '') as bis, mv.name, mv.vorname, " \ "coalesce(mv.name2, '') as name2, coalesce(mv.vorname2, '') as vorname2, " \ "coalesce(mv.telefon, '') as telefon, coalesce(mv.mobil, '') as mobil, coalesce(mv.mailto, '') as mailto," \ "mv.anzahl_pers, mv.IBAN, " \ "mv.bemerkung1, mv.bemerkung2, mv.kaution, coalesce(mv.kaution_bezahlt_am, '') as kaution_bezahlt_am, " \ "sm.netto as nettomiete, sm.nkv " \ "from mietverhaeltnis mv " \ "inner join sollmiete sm on sm.mv_id = mv.mv_id " \ "where mv.mv_id = '%s' " \ "and mv.von <= CURRENT_DATE " \ "and sm.von <= CURRENT_DATE " \ "order by mv.von desc, sm.von desc " % mv_id listofdicts = self.readAllGetDict(sql) if len(listofdicts) == 0: return None l = [d["mobj_id"] for d in listofdicts] l = list(set(l)) if len(l) > 1: raise Exception( "MietverhaeltnisData.getAktuellesMietverhaeltnis:\n" "Für '%s' existieren mehrere Mietverhältnisse!" % mv_id) x = XMietverhaeltnis(listofdicts[0]) return x
def getMietverhaeltnisById(self, id: int) -> XMietverhaeltnis: sql = "select mv.id, mv.mv_id, mv.mobj_id, mv.von, coalesce(mv.bis, '') as bis, mv.name, mv.vorname, " \ "coalesce(mv.name2, '') as name2, coalesce(mv.vorname2, '') as vorname2, " \ "coalesce(mv.telefon, '') as telefon, coalesce(mv.mobil, '') as mobil, coalesce(mv.mailto, '') as mailto," \ "mv.anzahl_pers, mv.IBAN, " \ "mv.bemerkung1, mv.bemerkung2, " \ "coalesce(mv.kaution, 0) as kaution, coalesce(mv.kaution_bezahlt_am, '') as kaution_bezahlt_am, " \ "sm.netto as nettomiete, sm.nkv " \ "from mietverhaeltnis mv " \ "inner join sollmiete sm on sm.mv_id = mv.mv_id " \ "where mv.id = %d " % id d = self.readOneGetDict(sql) x = XMietverhaeltnis(d) return x
def _onSave(self, data: XMietverhaeltnis) -> None: msg = self._validate(data) if msg: messagebox.showerror('Falsche Eingabe', msg) return try: if data.mv_id <= 0: data.mv_id = self._dataProvider.insertMietverhaeltnis(data) else: self._dataProvider.updateMietverhaeltnis(data) except WvException as ex: messagebox.showerror("Speichern fehlgeschlagen", ex.message()) except Exception as x: msg = type(x).__name__ + " in MietverhaeltnisController._onSave:\n" + \ x.args[0] messagebox.showerror("Speichern fehlgeschlagen", msg)
def test(): from interfaces import XMietverhaeltnis xmv = XMietverhaeltnis() xmv.mv_id = "dummy_puppy" xmv.id = 16 xmv.von = "2020-05-21" xmv.nettomiete = 234.55 json_ = objectToJson( xmv ) print( json_ ) x = jsonToObject( json_, XMietverhaeltnis ) print( x ) d = dict( name="Müller", vorname="Paul") json_ = objectToJson( d ) print( "json: ", json_ ) x = jsonToObject( json_, dict ) print( x )
def test2(): xmv_alt = XMietverhaeltnis() xmv_alt.id = 11 xmv_alt.mv_id = "amaral_cynthia" xmv_alt.von = "2019-01-01" xmv_alt.bis = "2021-12-31" # <--- sei durch den Dialog so eingestellt xmv_neu = XMietverhaeltnis() xmv_neu.id = 0 xmv_neu.mv_id = "angstrumpf_pippi" xmv_neu.mobj_id = "kleist_32" xmv_neu.von = "2022-01-01" xmv_neu.name = "Angstrumpf" xmv_neu.vorname = "Pippi" xmv_neu.nettomiete = 300.0 xmv_neu.nkv = 88.00 mwdata = XMieterwechsel(xmv_alt, xmv_neu) retVal: ReturnValue = MietverhaeltnisServices.processMieterwechsel(mwdata) print(retVal.exceptiontype, ": ", retVal.errormessage)
def test1(): xmv_alt = XMietverhaeltnis() xmv_alt.id = 11 xmv_alt.mv_id = "knacker_panzer" xmv_alt.von = "2021-11-01" xmv_alt.bis = "2021-11-02" xmv_neu = XMietverhaeltnis() xmv_neu.id = 0 xmv_neu.mv_id = "" xmv_neu.mobj_id = "bueb" xmv_neu.von = "2022-11-02" xmv_neu.name = "Schnörpfel" xmv_neu.vorname = "Schnurpf" xmv_neu.nettomiete = 500.00 xmv_neu.nkv = 100.00 mwdata = XMieterwechsel(xmv_alt, xmv_neu) retVal: ReturnValue = MietverhaeltnisServices.processMieterwechsel(mwdata) print(retVal.exceptiontype, ": ", retVal.errormessage)
def createMietverhaeltnis(self, xmv: XMietverhaeltnis): """ Prüft die für die Neuanlage notwendigen Daten für das Mietverhältnis. (Die für die Anlage des Sollmieten-Satzes notwendigen Daten werden in sollmietelogic geprüft.) Macht einen Insert in Tabelle mietverhaeltnis und ruft sollmietelogic.createSollmiete() auf. :param xmv: :return: """ msg = self.validateMietverhaeltnisDaten(xmv) if msg: raise Exception( "Daten des neuen Mietverhältnisses fehlerhaft:\n%s" % msg) xmv.mv_id = self._create_mv_id(xmv.name, xmv.vorname) #prüfen, ob schon ein Mietverhältnis mit dieser mv_id existiert: try: if self._db.existsAktivesOderZukuenftigesMietverhaeltnis( xmv.mv_id): raise Exception( "Anlage Mietverhältnis fehlgeschlagen:\nEs existiert ein aktives Mietverhälntis für " "mv_id '%s'." % xmv.mv_id) except Exception as ex: raise Exception( "Fehler bei der Dublettenprüfung bei Anlage Mietverhältnis für '%s':\n'%s'" % (xmv.mv_id, str(ex))) # MV-Satz anlegen: try: self._db.insertMietverhaeltnis(xmv) xmv.id = self._db.getMaxId("mietverhaeltnis", "id") except Exception as ex: raise Exception( "Bei der Anlage des Mietverhältnisses für '%s' ist der DB-Insert " "in die Tabelle 'mietverhaeltnis' fehlgeschlagen:\n'%s'" % (xmv.mv_id, str(ex))) # Sollmiete-Satz anlegen: xsm = XSollMiete() xsm.mv_id = xmv.mv_id xsm.von = xmv.von xsm.bis = xmv.bis xsm.netto = xmv.nettomiete xsm.nkv = xmv.nkv sml = SollmieteLogic() try: sml.createSollmiete(xsm) xsm.sm_id = self._db.getMaxId("sollmiete", "sm_id") except Exception as ex: raise Exception( "Bei der Anlage des Mietverhältnisses für '%s' ist der DB-Insert " "in die Tabelle 'sollmiete' fehlgeschlagen:\n'%s'" % (xsm.mv_id, str(ex))) # MtlEinAus-Satz anlegen: meinauslogic = MtlEinAusLogic() jahr = int(xmv.von[:4]) try: meinauslogic.insertMtlEinAusFuerMieter(xmv.mv_id, jahr) except Exception as ex: raise Exception( "Bei der Anlage des Mietverhältnisses für '%s' ist der DB-Insert " "in die Tabelle 'mtleinaus' fehlgeschlagen:\n'%s'" % (xmv.mv_id, str(ex)))
def _guiToData(self, x: XMietverhaeltnis): """ Überträgt die Änderungen, die der User im GUI gemacht hat, in das übergebene XMietverhaeltnis-Objekt :param x: XMietverhaeltnis-Objekt, in das die geänderten Daten übertragen werden :return: """ x.von = self._sdBeginnMietverh.getDate() x.bis = self._sdEndeMietverh.getDate() x.name = self._edMieterName_1.text() x.vorname = self._edMieterVorname_1.text() x.name2 = self._edMieterName_2.text() x.vorname2 = self._edMieterVorname_2.text() x.telefon = self._edMieterTelefon.text() x.mobil = self._edMieterMobil.text() x.mailto = self._edMieterMailto.text() x.anzahl_pers = self._edAnzPers.getIntValue() x.nettomiete = self._edNettomiete.getFloatValue() x.nkv = self._edNkv.getFloatValue() x.kaution = self._edKaution.getIntValue() x.kaution_bezahlt_am = self._sdKautionBezahltAm.getDate() x.bemerkung1 = self._txtBemerkung1.toPlainText() x.bemerkung2 = self._txtBemerkung2.toPlainText()