예제 #1
0
 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])
예제 #2
0
    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)
예제 #3
0
    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())
예제 #4
0
 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)
예제 #5
0
 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
예제 #6
0
 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
예제 #7
0
 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
예제 #8
0
    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)
예제 #9
0
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 )
예제 #10
0
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)
예제 #11
0
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)
예제 #12
0
    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)))
예제 #13
0
 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()