def createSollmiete(self, xsm: XSollMiete): msg = self._validate(xsm) if msg: raise Exception("Anlage Sollmiete fehlgeschlagen:\n%s" % msg) self._db.insertSollmiete(xsm) sm_id = self._db.getMaxId("sollmiete", "sm_id") xsm.sm_id = sm_id
def getCurrentSollmiete(self, mv_id: str) -> XSollMiete: """ Liefert die letzte (jüngste) Sollmiete für <mv_id>. Diese Sollmiete kann auch schon inaktiv sein (<bis> kleiner als current date). :param mv_id: :return: """ sql = "select sm_id, mv_id, von, von, coalesce(bis, '') as bis, netto, nkv, bemerkung " \ "from sollmiete " \ "where mv_id = '%s' " \ "order by von desc " % mv_id dictlist: List[Dict] = self.readAllGetDict(sql) d = dictlist[0] x = XSollMiete(d) return x
def getSollmieten3(self, mv_id: str, jahr: int) -> List[XSollMiete]: # liefert die Sollmieten für Mieter mv_id im Jahr jahr minbis = "%d-%02d-%02d" % (jahr, 1, 1) maxvon = "%d-%02d-%02d" % (jahr + 1, 1, 1) sql = "select sm.sm_id, sm.mv_id, sm.von, coalesce(sm.bis, '') as bis, sm.netto, sm.nkv, (sm.netto + sm.nkv) as brutto, " \ "coalesce(sm.bemerkung, '') as bemerkung, mv.mobj_id " \ "from sollmiete sm " \ "inner join mietverhaeltnis mv on mv.mv_id = sm.mv_id " \ "where sm.von < '%s' " \ "and (sm.bis is NULL or sm.bis = '' or sm.bis >= '%s') " \ "and sm.mv_id = '%s' " \ "order by sm.mv_id, sm.von desc" % ( maxvon, minbis, mv_id ) l: List[Dict] = self._doReadAllGetDict(sql) sollList: List[XSollMiete] = list() for d in l: x = XSollMiete(d) sollList.append(x) return sollList
def saveMietverhaeltnis( self ): """ Es kann sich um ein neues oder ein schon bestehendes MV handeln. Wenn neu: Fügt das übergebene Mietverhältnis und die Sollmiete in die Datenbank ein Wenn schon existent: Macht einen Update auf das schon bestehende Mietverhaeltnis und auf die Sollmiete. :param xmv: :return: """ xmv = self._xmv mvlogic = MietverhaeltnisLogic() mealogic = MtlEinAusLogic() smlogic = SollmieteLogic() BEGIN_TRANSACTION() if xmv.id == 0: try: mvlogic.createMietverhaeltnis( xmv ) xsm = XSollMiete() xsm.von = xmv.von xsm.bis = xmv.bis xsm.mv_id = xmv.mv_id xsm.netto = xmv.nettomiete xsm.nkv = xmv.nkv smlogic.createSollmiete( xsm ) jahr = int( xmv.von[0:4] ) mealogic.insertMtlEinAusFuerMieter( xmv.mv_id, jahr ) COMMIT_TRANSACTION() except Exception as ex: ROLLBACK_TRANSACTION() raise Exception( "MietverhaeltnisUcc.saveMietverhaeltnis():\n" "Beim Anlegen des Mietverhältnisses ist ein Fehler aufgetreten:\n" + str(ex) ) else: try: mvlogic.updateMietverhaeltnis( xmv ) smlogic.updateSollmiete( ?? ) COMMIT_TRANSACTION() except Exception as ex: ROLLBACK_TRANSACTION() raise Exception( "MietverhaeltnisUcc.saveMietverhaeltnis():\n" "Beim Ändern des Mietverhältnisses ist ein Fehler aufgetreten:\n" + str( ex ) )
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 test(): x = XSollMiete() x.mv_id = "test_duempfel" x.von = "2021-11-11" x.netto = 450 x.nkv = 100 x2 = XSollMiete() x2.mv_id = "anger_inge" x2.von = "2021-11-12" x2.netto = 300 x2.nkv = 80 data = SollmieteData() BEGIN_TRANSACTION() data.insertSollmiete(x) COMMIT_TRANSACTION() BEGIN_TRANSACTION() data.insertSollmiete(x2) ROLLBACK_TRANSACTION()