Beispiel #1
0
class MieterwechselView(QWidget, ModifyInfo):  # IccView ):
    """
    Enthält ein paar Felder für das aktive ("alte") Mietverhältnis,
    sowie eine MietverhaeltnisView für das Folge-MV.
    Die Methode onChange() der MietverhaeltnisView wird umgebogen auf die onChange()-Methode dieser View.
    """
    mieterwechsel_save = Signal()

    def __init__(self):
        QWidget.__init__(self)
        ModifyInfo.__init__(self)
        self._layout = QGridLayout()
        self._btnSave = QPushButton()
        # altes Mietverhältnis
        self._edAlterMieter = BaseEdit()
        self._edAlteNettomiete = FloatEdit()
        self._edAlteNKV = FloatEdit()
        self._edAlteKaution = IntEdit()
        self._sdEndeMietverh = SmartDateEdit()
        self._sdEndeMietverh.textChanged.connect(self.onChange)
        # neues Mietverhältnis
        self._neuesMietvhView = MietverhaeltnisView(enableBrowsing=False)
        self._neuesMietvhView.dataChanged.connect(self.onChange)
        self._mieterwechsel: XMieterwechsel = None

        self._createGui()
        self.connectWidgetsToChangeSlot()

    def onChange(self):
        if not self._btnSave.isEnabled():
            self.setSaveButtonEnabled()

    def isChanged(self) -> bool:
        return super().isChanged() or self._neuesMietvhView.isChanged()

    def resetChangeFlag(self):
        super().resetChangeFlag()
        self._neuesMietvhView.resetChangeFlag()

    def setSaveButtonEnabled(self, enabled: bool = True):
        self._btnSave.setEnabled(enabled)

    def _createGui(self):
        self._createSaveButton()
        r = self._createGuiAlterMieter()
        r += 1
        self._layout.addWidget(QLabel(""), r, 0)
        r += 1
        self._createGuiNeuerMieter(r)
        self.setLayout(self._layout)

    def _createSaveButton(self):
        btn = self._btnSave
        btn.clicked.connect(self.mieterwechsel_save.emit)
        btn.setFlat(True)
        btn.setEnabled(False)
        btn.setToolTip("Änderungen dieser View speichern")
        icon = QIcon("./images/save_30.png")
        btn.setIcon(icon)
        size = QSize(32, 32)
        btn.setFixedSize(size)
        iconsize = QSize(30, 30)
        btn.setIconSize(iconsize)
        hbox = QHBoxLayout()
        hbox.addWidget(btn)
        self._layout.addLayout(hbox, 0, 0, alignment=Qt.AlignLeft)

    def _createGuiAlterMieter(self) -> int:
        l = self._layout
        r = 1
        c = 0
        lbl = BaseLabel("Aktuelles / letztes Mietverhältnis ")
        lbl.setFont(QFont("Arial", 12, QFont.Bold))
        l.addWidget(lbl, r, c, 1, 2)

        r += 1
        lbl = QLabel("Mieter: ")
        l.addWidget(lbl, r, c)
        self._edAlterMieter.setReadOnly(True)
        l.addWidget(self._edAlterMieter, r, c + 1)

        r += 1
        lbl = BaseLabel("Nettomiete / NKV : ")
        l.addWidget(lbl, r, c)

        c += 1
        hbox = QHBoxLayout()
        self._edAlteNettomiete.setReadOnly(True)
        self._edAlteNettomiete.setMaximumWidth(100)
        hbox.addWidget(self._edAlteNettomiete)

        self._edAlteNKV.setReadOnly(True)
        self._edAlteNKV.setMaximumWidth(100)
        hbox.addWidget(self._edAlteNKV)
        l.addLayout(hbox, r, c, Qt.AlignLeft)

        c = 0
        r += 1
        lbl = BaseLabel("Kaution: ")
        l.addWidget(lbl, r, c)

        c += 1
        self._edAlteKaution.setReadOnly(True)
        self._edAlteKaution.setMaximumWidth(100)
        l.addWidget(self._edAlteKaution, r, c)

        c = 0
        r += 1
        lbl = QLabel("Ende des Mietverhältnisses: ")
        l.addWidget(lbl, r, c)

        self._sdEndeMietverh.setMaximumWidth(100)
        l.addWidget(self._sdEndeMietverh, r, c + 1)
        return r

    def _createGuiNeuerMieter(self, r: int):
        c = 0
        l = self._layout
        lbl = BaseLabel("Neues Mietverhältnis")
        lbl.setFont(QFont("Arial", 12, QFont.Bold))
        l.addWidget(lbl, r, c)

        r += 1
        l.addWidget(self._neuesMietvhView, r, c, 1, 2)

    def setMieterwechselData(self, xmieterwechsel: XMieterwechsel):
        self._mieterwechsel = xmieterwechsel
        self._setAltesMietverhaeltnisFields(xmieterwechsel.mietverhaeltnis_alt)
        self._setNeuesMietverhaeltnisFields(
            xmieterwechsel.mietverhaeltnis_next)
        self.setSaveButtonEnabled(False)
        self.resetChangeFlag()

    def getMieterwechselData(self) -> XMieterwechsel:
        return self._mieterwechsel

    def _setAltesMietverhaeltnisFields(self, xmv: XMietverhaeltnis):
        self._edAlterMieter.setText(xmv.name + ", " + xmv.vorname)
        self._edAlteNettomiete.setFloatValue(xmv.nettomiete)
        self._edAlteNKV.setFloatValue(xmv.nkv)
        if xmv.kaution:
            self._edAlteKaution.setIntValue(xmv.kaution)
        self._sdEndeMietverh.setDateFromIsoString(xmv.bis)

    def _setNeuesMietverhaeltnisFields(self, xmv: XMietverhaeltnis):
        self._neuesMietvhView.setMietverhaeltnisData(xmv)
        self._neuesMietvhView.resetChangeFlag()

    def getMieterwechselDataCopyWithChanges(self) -> XMieterwechsel:
        xmwcopy = copy.copy(self._mieterwechsel)
        mvneu: XMietverhaeltnis = self._neuesMietvhView.getMietverhaeltnisCopyWithChanges(
        )
        xmwcopy.mietverhaeltnis_next = mvneu
        xmwcopy.mietverhaeltnis_alt.bis = self._sdEndeMietverh.getDate()
        return xmwcopy

    def applyChanges(self):
        if self.isChanged():
            self._neuesMietvhView.applyChanges()
            # nur das Ende-Datum ist bei den Daten des alten MV änderbar
            self._mieterwechsel.mietverhaeltnis_alt.bis = self._sdEndeMietverh.getDate(
            )

    def getModel(self):
        return None
Beispiel #2
0
class OffenerPostenEditor( QWidget ):
    """
    Zum Editieren eines einzelnen Offenen Postens.
    """
    debiKrediAuswahlFirmaPressed = Signal()
    debiKrediAuswahlVwPressed = Signal()

    def __init__( self, x:XOffenerPosten, parent=None ):
        QWidget.__init__( self, parent )
        self._layout = QGridLayout()
        self.setLayout( self._layout )
        self._erfasstAm = SmartDateEdit()
        self._debiKredi = QLineEdit()
        self._btnAuswahlDebiKredi_Firma = QPushButton( text="..." )
        self._btnAuswahlDebiKredi_Firma.clicked.connect( self._onDebiKrediAuswahl_Firma )
        self._btnAuswahlDebiKredi_Vw = QPushButton( text="..." )
        self._btnAuswahlDebiKredi_Vw.clicked.connect( self._onDebiKrediAuswahl_Vw )
        self._betrag = FloatEdit()
        self._betragBeglichen = FloatEdit()
        self._letzteBuchungAm = SmartDateEdit()
        self._bemerkung = QPlainTextEdit()
        self._offenerPosten:XOffenerPosten = x
        self._createGui()
        self._dataToGui()

    def _createGui( self ):
        r = c = 0
        l = self._layout
        self._erfasstAm.setPlaceholderText( "erfasst am" )
        self._erfasstAm.setToolTip( "Erfassungsdatum des Offenen Postens" )
        self._erfasstAm.setMaximumWidth( 90 )
        l.addWidget( self._erfasstAm, r, c )
        c += 1
        self._debiKredi.setMinimumWidth( 250 )
        self._debiKredi.setPlaceholderText( "Debitor oder Kreditor" )
        self._debiKredi.setToolTip( "Debitor oder Kreditor eintragen" )
        l.addWidget( self._debiKredi, r, c )

        c += 1
        vbox = QVBoxLayout()
        vbox.addWidget( self._btnAuswahlDebiKredi_Firma )
        self._btnAuswahlDebiKredi_Firma.setFixedSize( QSize( 30, 30 ) )
        self._btnAuswahlDebiKredi_Firma.setToolTip( "Öffnet einen Dialog zur Auswahl einer Firma "
                                              "als Debitor oder Kreditor" )
        vbox.addWidget( self._btnAuswahlDebiKredi_Vw )
        self._btnAuswahlDebiKredi_Vw.setFixedSize( QSize( 30, 30 ) )
        self._btnAuswahlDebiKredi_Vw.setToolTip( "Öffnet einen Dialog zur Auswahl eines Verwalters "
                                                 "als Debitor oder Kreditor" )
        l.addLayout( vbox, r, c )
        #l.addWidget( self._btnAuswahlDebiKredi, r, c )

        c += 1
        self._betrag.setPlaceholderText( "Betrag" )
        self._betrag.setToolTip( "Ursprünglicher offener Betrag. '-' = Debit, '+' = Kredit" )
        self._betrag.setFixedWidth( 80 )
        l.addWidget( self._betrag, r, c )
        c += 1
        self._betragBeglichen.setPlaceholderText( "bezahlt" )
        self._betragBeglichen.setToolTip( "Bereits bezahlter Betrag" )
        self._betragBeglichen.setFixedWidth( 80 )
        l.addWidget( self._betragBeglichen, r, c )
        c += 1
        self._letzteBuchungAm.setPlaceholderText( "letzte Buchg" )
        self._letzteBuchungAm.setToolTip( "Datum der letzten (Teil-)Buchung" )
        self._letzteBuchungAm.setMaximumWidth( 90 )
        l.addWidget( self._letzteBuchungAm, r, c )
        c += 1
        self._bemerkung.setToolTip( "Bemerkung - z.B. Dokumentation von Teilzahlungen" )
        self._bemerkung.setPlaceholderText( "Bemerkung" )
        self._bemerkung.setMaximumHeight( 60 )
        l.addWidget( self._bemerkung, r, c )

    def _dataToGui( self ) -> None:
        x = self._offenerPosten
        self._erfasstAm.setDateFromIsoString( x.erfasst_am )
        self._debiKredi.setText( x.debi_kredi )
        self._betrag.setFloatValue( x.betrag )
        self._betragBeglichen.setFloatValue( x.betrag_beglichen )
        if x.letzte_buchung_am:
            self._letzteBuchungAm.setDateFromIsoString( x.letzte_buchung_am )
        self._bemerkung.setPlainText( x.bemerkung )

    def guiToData( self ) -> None:
        x = self._offenerPosten
        x.erfasst_am = self._erfasstAm.getDate()
        x.debi_kredi = self._debiKredi.text()
        x.betrag = self._betrag.getFloatValue()
        x.betrag_beglichen = self._betragBeglichen.getFloatValue()
        x.letzte_buchung_am = self._letzteBuchungAm.getDate()
        x.bemerkung = self._bemerkung.toPlainText()

    def getOposCopyWithChanges( self ) -> XOffenerPosten:
        """
        liefert eine Kopie des in ARbeit befindlichen XOffenerPosten-Objekts.
        Die in der GUI vorgenommenen Änderungen sind darin enthalten.
        Die Änderungen sind NICHT im Original-OPOS enthalten!
        Das Einfügen der Änderungen in das Original-OPOS passiert durch Aufruf von guiToData().
        :return: eine Kopie des Original-OPOS mit Änderungen
        """
        xcopy = copy.copy( self._offenerPosten )
        xcopy.erfasst_am = self._erfasstAm.getDate()
        xcopy.debi_kredi = self._debiKredi.text()
        xcopy.betrag = self._betrag.getFloatValue()
        xcopy.betrag_beglichen = self._betragBeglichen.getFloatValue()
        xcopy.letzte_buchung_am = self._letzteBuchungAm.getDate()
        xcopy.bemerkung = self._bemerkung.toPlainText()
        return xcopy

    def _onDebiKrediAuswahl_Firma( self ):
        self.debiKrediAuswahlFirmaPressed.emit()

    def _onDebiKrediAuswahl_Vw( self ):
        self.debiKrediAuswahlVwPressed.emit()

    def setOffenerPosten( self, x:XOffenerPosten ):
        self._offenerPosten = x
        if x.erfasst_am > "":
            self._erfasstAm.setDateFromIsoString( x.erfasst_am )
        self._debiKredi.setText( x.debi_kredi )
        self._betrag.setFloatValue( x.betrag )
        self._betragBeglichen.setFloatValue( x.betrag_beglichen )
        if x.letzte_buchung_am > "":
            self._letzteBuchungAm.setDateFromIsoString( x.letzte_buchung_am )
        self._bemerkung.setPlainText( x.bemerkung )

    def getOffenerPosten( self ) -> XOffenerPosten:
        x = self._offenerPosten
        if x is None: return XOffenerPosten()
        x.erfasst_am = self._erfasstAm.getDate()
        x.debi_kredi = self._debiKredi.text()
        x.betrag = self._betrag.getFloatValue()
        x.betrag_beglichen = self._betragBeglichen.getFloatValue()
        x.letzte_buchung_am = self._letzteBuchungAm.getDate()
        x.bemerkung = self._bemerkung.toPlainText()
        return x

    def setDebiKredi( self, debikredi:str ):
        self._debiKredi.setText( debikredi )
Beispiel #3
0
class GeschaeftsreiseEditView(QWidget):
    def __init__(self,
                 mobjIdList: List[str] = None,
                 x: XGeschaeftsreise = None,
                 parent=None):
        QWidget.__init__(self, parent)
        self._xgeschaeftsreise = x
        self._layout = QFormLayout()
        self.setLayout(self._layout)
        self._cboMobjId = QComboBox()
        self._sdVon = SmartDateEdit()
        self._sdBis = SmartDateEdit()
        self._beZiel = BaseEdit()
        self._meZweck = MultiLineEdit()
        self._ieKm = IntEdit()
        self._iePersonen = IntEdit()
        self._beUebernachtung = BaseEdit()
        self._feUebernachtKosten = FloatEdit()
        # self._btnSave = QPushButton( "Speichern" )
        # self._btnSaveClose = QPushButton( "Speichern und Schließen" )
        # self._btnCancel = QPushButton( "Abbrechen" )
        self._createGui()
        if mobjIdList:
            self.setMietobjekte(mobjIdList)
        if x:
            self.setData(x)

    def _createGui(self):
        """
        :return:
        """
        l = self._layout
        self._cboMobjId.setMaximumWidth(100)
        l.addRow("Mietobjekt: ", self._cboMobjId)
        self._sdVon.setMaximumWidth(100)
        l.addRow("Beginn: ", self._sdVon)
        self._sdBis.setMaximumWidth(100)
        l.addRow("Ende: ", self._sdBis)
        l.addRow("Ziel: ", self._beZiel)
        self._meZweck.setMaximumHeight(80)
        l.addRow("Zweck: ", self._meZweck)
        l.addRow("Übernachtung: ", self._beUebernachtung)
        self._feUebernachtKosten.setMaximumWidth(55)
        l.addRow("Übernacht.-Kosten: ", self._feUebernachtKosten)
        self._ieKm.setMaximumWidth(55)
        l.addRow("Gefahrene Kilometer: ", self._ieKm)
        self._iePersonen.setMaximumWidth(55)
        l.addRow("Anz.Personen: ", self._iePersonen)
        dummy = QWidget()
        dummy.setFixedHeight(20)
        l.addRow("", dummy)
        # boxl = QHBoxLayout()
        # boxl.addWidget( self._btnSave )
        # boxl.addWidget( self._btnSaveClose )
        # boxl.addWidget( self._btnCancel )
        # l.addRow( boxl )

    def _setFieldsFromData(self):
        """
        :return:
        """
        x = self._xgeschaeftsreise
        self._cboMobjId.setCurrentText(x.mobj_id)
        self._sdVon.setDateFromIsoString(x.von)
        self._sdBis.setDateFromIsoString(x.bis)
        self._beZiel.setText(x.ziel)
        self._meZweck.setText(x.zweck)
        self._ieKm.setIntValue(x.km)
        self._iePersonen.setIntValue(x.personen)
        self._beUebernachtung.setText(x.uebernachtung)
        self._feUebernachtKosten.setFloatValue(x.uebernacht_kosten)

    def _setDataFromFields(self, x: XGeschaeftsreise):
        x.mobj_id = self._cboMobjId.currentText()
        x.von = self._sdVon.getDate()
        x.bis = self._sdBis.getDate()
        x.ziel = self._beZiel.text()
        x.zweck = self._meZweck.toPlainText()
        x.km = self._ieKm.getIntValue()
        x.personen = self._iePersonen.getIntValue()
        x.uebernachtung = self._beUebernachtung.text()
        x.uebernacht_kosten = self._feUebernachtKosten.getFloatValue()

    def setMietobjekte(self, mobj_idList: List[str]):
        """
        Versorgt die ComboBox mit den möglichen Werten (Mietobjekten)
        Diese Methode muss VOR setData() aufgerufen werden.
        :param mobj_idList:
        :return:
        """
        self._cboMobjId.addItems(mobj_idList)

    def getDataCopyWithChanges(self) -> XGeschaeftsreise:
        x = copy.copy(self._xgeschaeftsreise)
        self._setDataFromFields(x)
        return x

    def applyChanges(self) -> XGeschaeftsreise:
        self._setDataFromFields(self._xgeschaeftsreise)
        return self._xgeschaeftsreise

    def setData(self, x: XGeschaeftsreise) -> None:
        self._xgeschaeftsreise = x
        self._setFieldsFromData()
class MietverhaeltnisView(QWidget, ModifyInfo):
    save = Signal()
    dataChanged = Signal()
    nextMv = Signal()
    prevMv = Signal()

    def __init__(self,
                 mietverhaeltnis: XMietverhaeltnis = None,
                 withSaveButton: bool = False,
                 enableBrowsing=False,
                 parent=None):
        QWidget.__init__(self, parent)
        ModifyInfo.__init__(self)
        self._mietverhaeltnis: XMietverhaeltnis = None
        self._withSaveButton = withSaveButton
        self._enableBrowsing = enableBrowsing  # ob die Browse-Buttons angezeigt werden
        self._layout = QGridLayout()
        self._btnSave = QPushButton()
        self._btnVor = QPushButton()
        self._btnRueck = QPushButton()
        self._sdBeginnMietverh = SmartDateEdit()
        self._sdEndeMietverh = SmartDateEdit()
        self._edMieterName_1 = BaseEdit()
        self._edMieterVorname_1 = BaseEdit()
        self._edMieterName_2 = BaseEdit()
        self._edMieterVorname_2 = BaseEdit()
        self._edMieterTelefon = BaseEdit()
        self._edMieterMobil = BaseEdit()
        self._edMieterMailto = BaseEdit()
        self._edAnzPers = IntEdit()
        self._edNettomiete = FloatEdit()
        self._edNkv = FloatEdit()
        self._edKaution = IntEdit()
        self._sdKautionBezahltAm = SmartDateEdit()
        self._txtBemerkung1 = MultiLineEdit()
        self._txtBemerkung2 = MultiLineEdit()

        self._createGui()
        if mietverhaeltnis:
            self.setMietverhaeltnisData(mietverhaeltnis)
        #self.connectWidgetsToChangeSlot( self.onChange )
        self.connectWidgetsToChangeSlot(self.onChange, self.onResetChangeFlag)

    def onChange(self, newcontent: str = None):
        if not self._btnSave.isEnabled():
            self.setSaveButtonEnabled()
        self.dataChanged.emit()

    def onResetChangeFlag(self):
        self.setSaveButtonEnabled(False)

    def setSaveButtonEnabled(self, enabled: bool = True):
        self._btnSave.setEnabled(enabled)

    def _createGui(self):
        hbox = QHBoxLayout()
        if self._withSaveButton:
            self._createSaveButton(hbox)
        if self._enableBrowsing:
            self._createVorRueckButtons(hbox)
        self._layout.addLayout(hbox, 0, 0, alignment=Qt.AlignLeft)
        self._addHorizontalLine(1)
        self._createFelder(2)
        self.setLayout(self._layout)

    def _createSaveButton(self, hbox):
        btn = self._btnSave
        btn.clicked.connect(self.save.emit)
        btn.setFlat(True)
        btn.setEnabled(False)
        btn.setToolTip("Änderungen am Mietverhältnis speichern")
        icon = ImageFactory.inst().getSaveIcon()
        #icon = QIcon( "./images/save_30.png" )
        btn.setIcon(icon)
        size = QSize(32, 32)
        btn.setFixedSize(size)
        iconsize = QSize(30, 30)
        btn.setIconSize(iconsize)
        hbox.addWidget(btn)

    def _createVorRueckButtons(self, hbox):
        self._prepareButton(self._btnRueck,
                            ImageFactory.inst().getPrevIcon(),
                            "Zum vorigen Mietverhältnis blättern", self.prevMv)
        hbox.addWidget(self._btnRueck)
        self._prepareButton(self._btnVor,
                            ImageFactory.inst().getNextIcon(),
                            "Zum nächsten Mietverhältnis blättern",
                            self.nextMv)
        hbox.addWidget(self._btnVor)

    def _prepareButton(self, btn: QPushButton, icon: QIcon, tooltip: str,
                       signal: Signal):
        btn.setFlat(True)
        btn.setEnabled(True)
        btn.setToolTip(tooltip)
        btn.setIcon(icon)
        size = QSize(32, 32)
        btn.setFixedSize(size)
        iconsize = QSize(30, 30)
        btn.setIconSize(iconsize)
        btn.clicked.connect(signal.emit)

    def _addHorizontalLine(self, r: int):
        hline = HLine()
        self._layout.addWidget(hline, r, 0, 1, 2)
        return r + 1

    def _createFelder(self, r):
        c = 0
        l = self._layout

        lbl = QLabel("Beginn: ")
        l.addWidget(lbl, r, c)
        c += 1
        self._sdBeginnMietverh.setMaximumWidth(100)
        l.addWidget(self._sdBeginnMietverh, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Ende: "), r, c)
        c += 1
        self._sdEndeMietverh.setMaximumWidth(100)
        l.addWidget(self._sdEndeMietverh, r, c)

        c = 0
        r += 1
        lbl = BaseLabel("Name / Vorname 1. Mieter: ")
        l.addWidget(lbl, r, c)
        c += 1
        hbox = QHBoxLayout()
        hbox.addWidget(self._edMieterName_1)
        hbox.addWidget(self._edMieterVorname_1)
        l.addLayout(hbox, r, c)

        c = 0
        r += 1
        lbl = BaseLabel("Name / Vorname 2. Mieter: ")
        l.addWidget(lbl, r, c)
        c += 1
        hbox = QHBoxLayout()
        hbox.addWidget(self._edMieterName_2)
        hbox.addWidget(self._edMieterVorname_2)
        l.addLayout(hbox, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Telefon: "), r, c)
        c += 1
        l.addWidget(self._edMieterTelefon, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Mobil: "), r, c)
        c += 1
        l.addWidget(self._edMieterMobil, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Mailadresse: "), r, c)
        c += 1
        l.addWidget(self._edMieterMailto, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Anzahl Personen i.d. Whg: "), r, c)
        c += 1
        self._edAnzPers.setMaximumWidth(20)
        l.addWidget(self._edAnzPers, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Nettomiete / NKV: "), r, c)

        c += 1
        self._edNettomiete.setMaximumWidth(100)
        #self._edNettomiete.setEnabled( False )
        self._edNkv.setMaximumWidth(100)
        #self._edNkv.setEnabled( False )
        hbox = QHBoxLayout()
        hbox.addWidget(self._edNettomiete)
        hbox.addWidget(self._edNkv)
        hbox.addWidget(
            BaseLabel(
                "  Änderungen der Miete und NKV über Dialog 'Sollmiete'"))
        l.addLayout(hbox, r, c, alignment=Qt.AlignLeft)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Kaution: "), r, c)
        c += 1
        self._edKaution.setMaximumWidth(100)
        l.addWidget(self._edKaution, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel("Kaution bezahlt am: "), r, c)
        c += 1
        self._sdKautionBezahltAm.setMaximumWidth(100)
        l.addWidget(self._sdKautionBezahltAm, r, c)

        c = 0
        r += 1
        l.addWidget(BaseLabel(""), r, c)

        r += 1
        l.addWidget(BaseLabel("Bemerkungen: "), r, c)
        c += 1
        hbox = QHBoxLayout()
        hbox.addWidget(self._txtBemerkung1)
        hbox.addWidget(self._txtBemerkung2)
        l.addLayout(hbox, r, c)

        # cols = self._layout.columnCount()
        # print( cols, " columns" )

    def setNettoUndNkvEnabled(self, enabled: bool = True):
        self._edNettomiete.setEnabled(enabled)
        self._edNkv.setEnabled(enabled)

    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()

    def getMietverhaeltnisCopyWithChanges(self) -> XMietverhaeltnis:
        """
        gibt eine Kopie der Mietverhaeltnis-Schnittstellendaten mit Änderungen zurück.
        Diese Kopie kann für Validierungszwecke verwendet werden.
        :return: Kopie von XMietverhaeltnis
        """
        mvcopy = copy.copy(self._mietverhaeltnis)
        self._guiToData(mvcopy)
        return mvcopy

    def applyChanges(self):
        """
        überträgt die Änderungen, die der User im GUI gemacht hat, in das
        originale XMietverhaeltnis-Objekt.
        """
        if self.isChanged():
            self._guiToData(self._mietverhaeltnis)

    def setMietverhaeltnisData(self, mv: XMietverhaeltnis):
        """
        Daten, die im GUI angezeigt und geändert werden können.
        :param mv:
        :return:
        """
        self._mietverhaeltnis = mv
        if mv.von:
            self._sdBeginnMietverh.setDateFromIsoString(mv.von)
        if mv.bis:
            self._sdEndeMietverh.setDateFromIsoString(mv.bis)
        self._edMieterName_1.setText(mv.name)
        self._edMieterVorname_1.setText(mv.vorname)
        self._edMieterName_2.setText(mv.name2)
        self._edMieterVorname_2.setText(mv.vorname2)
        self._edMieterTelefon.setText(mv.telefon)
        self._edMieterMobil.setText(mv.mobil)
        self._edMieterMailto.setText(mv.mailto)
        self._edAnzPers.setIntValue(mv.anzahl_pers)
        self._edNettomiete.setFloatValue(mv.nettomiete)
        self._edNkv.setFloatValue(mv.nkv)
        if mv.kaution:
            self._edKaution.setIntValue(mv.kaution)
        if mv.kaution_bezahlt_am:
            self._sdKautionBezahltAm.setDateFromIsoString(
                mv.kaution_bezahlt_am)
        self._txtBemerkung1.setText(mv.bemerkung1)
        self._txtBemerkung2.setText(mv.bemerkung2)
        self.resetChangeFlag()

    def clear(self):
        self._sdBeginnMietverh.clear()
        self._sdEndeMietverh.clear()
        self._edMieterName_1.clear()
        self._edMieterVorname_1.clear()
        self._edMieterName_2.clear()
        self._edMieterVorname_2.clear()
        self._edMieterTelefon.clear()
        self._edMieterMobil.clear()
        self._edMieterMailto.clear()
        self._edAnzPers.clear()
        self._edNettomiete.clear()
        self._edNkv.clear()
        self._edKaution.clear()
        self._sdKautionBezahltAm.clear()
        self._txtBemerkung1.clear()
        self._txtBemerkung2.clear()
Beispiel #5
0
class GeplantEditView( QWidget ):
    """
    Eine View, die zur Anlage und ÄNderung einer Planung dient.
    Dazu muss sie in einen Dialog eingebettet werden (wg. der OK- und Cancel-Buttons).
    """
    masterobjektChanged = Signal( str )
    createHandwerker = Signal()
    def __init__( self, masterList:List[str]=None, firmenlist:List[str]=None, x:XGeplant=None, parent=None ):
        QWidget.__init__( self, parent )
        self._xgeplant = x
        self._layout = BaseGridLayout()
        self.setLayout( self._layout )
        self._cboMasterObjekt = QComboBox()
        self._cboMasterObjekt.currentIndexChanged.connect( lambda x: self.masterobjektChanged.emit( self._cboMasterObjekt.currentText() ) )
        self._cboMobjId = QComboBox()
        self._txtLeistung = MultiLineEdit()
        self._cboFirma = QComboBox()
        self._btnNewFirma = QPushButton()
        self._btnNewFirma.clicked.connect( self.createHandwerker.emit )
        self._feKosten = FloatEdit()
        self._cbKostenvoranschlag = QCheckBox()
        self._cboJahr = QComboBox()
        self._cboMonat = QComboBox()
        self._cboMonat.addItems( datehelper.monthList )
        self._cbBeauftragt = QCheckBox()
        self._sdErledigtAm = SmartDateEdit()
        self._txtBemerkung = MultiLineEdit()
        self._provideJahre()
        if masterList:
            self.setMasterobjekte( masterList )
        if firmenlist:
            self.setFirmen( firmenlist )
        if x:
            self.setData( x )
        self._createGui()

    def _createGui( self ):
        """
        :return:
        """
        l = self._layout
        r = c = 0
        self._cboMasterObjekt.setMaximumWidth( 170 )
        l.addPair( "Masterobjekt: ", self._cboMasterObjekt, r, c, 1, 5  )
        r, c = r+1, 0
        self._cboMobjId.setMaximumWidth( 170 )
        l.addPair( "Mietobjekt (optional): ", self._cboMobjId, r, c, 1, 5 )
        r += 1
        self._txtLeistung.setMaximumHeight( 50 )
        l.addPair( "Leistung: ", self._txtLeistung, r, c, 1, 5 )
        r += 1
        l.addPair( "Firma: ", self._cboFirma, r, c, 1, 4 )
        c = 5
        self._btnNewFirma.setMaximumSize( QSize( 30, 30 )  )
        self._btnNewFirma.setIcon( QIcon( ICON_DIR + "add_512x512.png" ) )
        self._btnNewFirma.setToolTip( "Neue Firma erfassen" )
        l.addWidget( self._btnNewFirma, r, c )
        r, c = r+1, 0
        self._feKosten.setMaximumWidth( 90 )
        l.addPair( "Kosten: ", self._feKosten, r, c )
        c += 2
        l.addPair("Kostenvoranschlag: ", self._cbKostenvoranschlag, r, c )
        r, c = r+1, 0
        self._cboJahr.setMaximumWidth( 90 )
        l.addPair("Geplant: ", self._cboJahr, r, c )
        c += 2
        l.addWidget( self._cboMonat, r, c )
        r, c = r+1, 0
        l.addPair( "Beauftragt: ", self._cbBeauftragt, r, c )
        r, c = r + 1, 0
        self._sdErledigtAm.setMaximumWidth( 90 )
        l.addPair( "Erledigt am: ", self._sdErledigtAm, r, c )
        r, c = r+1, 0
        self._txtBemerkung.setMaximumHeight( 50 )
        self._txtBemerkung.setPlaceholderText( "Bemerkung" )
        l.addWidget( self._txtBemerkung, r, c, 1, 6 )
        r, c = r+1, 0
        dummy = QWidget()
        l.addWidget( dummy, r, c )

    def _createGui_( self ):
        """
        :return:
        """
        l = self._layout
        r = c = 0
        self._cboMasterObjekt.setMaximumWidth( 170 )
        l.addPair( "Masterobjekt: ", self._cboMasterObjekt, r, c, 1, 5  )
        r, c = r+1, 0
        self._cboMobjId.setMaximumWidth( 170 )
        l.addPair( "Mietobjekt (optional): ", self._cboMobjId, r, c, 1, 5 )
        r += 1
        self._txtLeistung.setMaximumHeight( 50 )
        l.addPair( "Leistung: ", self._txtLeistung, r, c, 1, 4 )
        r += 1
        l.addPair( "Firma: ", self._cboFirma, r, c, 1, 4 )
        c += 1
        self._btnNewFirma.setMaximumSize( QSize( 30, 30 )  )
        self._btnNewFirma.setIcon( QIcon( ICON_DIR + "save.png" ) )
        self._btnNewFirma.setToolTip( "Neue Firma erfassen" )
        #l.addWidget( self._btnNewFirma, r, c )
        r, c = r+1, 0
        self._feKosten.setMaximumWidth( 90 )
        l.addPair( "Kosten: ", self._feKosten, r, c )
        c += 2
        l.addPair("Kostenvoranschlag: ", self._cbKostenvoranschlag, r, c )
        r, c = r+1, 0
        self._cboJahr.setMaximumWidth( 90 )
        l.addPair("Geplant: ", self._cboJahr, r, c )
        c += 2
        l.addWidget( self._cboMonat, r, c )
        r, c = r+1, 0
        l.addPair( "Beauftragt: ", self._cbBeauftragt, r, c )
        r, c = r + 1, 0
        self._sdErledigtAm.setMaximumWidth( 90 )
        l.addPair( "Erledigt am: ", self._sdErledigtAm, r, c )
        r, c = r+1, 0
        self._txtBemerkung.setMaximumHeight( 50 )
        self._txtBemerkung.setPlaceholderText( "Bemerkung" )
        l.addWidget( self._txtBemerkung, r, c, 1, 5 )
        r, c = r+1, 0
        dummy = QWidget()
        l.addWidget( dummy, r, c )

    def _provideJahre( self ):
        y = datehelper.getCurrentYear()
        yearlist = []
        for y_ in range( y-2, y+6 ):
            yearlist.append( str(y_) )
        self._cboJahr.addItems( yearlist )
        self._cboJahr.setCurrentText( str(y) )

    def _setFieldsFromData( self ):
        """
        :return:
        """
        x = self._xgeplant
        self._cboMobjId.setCurrentText( x.mobj_id )
        self._txtLeistung.setText( x.leistung )
        self._cboFirma.setCurrentText( x.firma )
        self._feKosten.setFloatValue( x.kosten )
        self._cbKostenvoranschlag.setChecked( True if x.kostenvoranschlag > 0 else False )
        self._cboJahr.setCurrentText( str( x.jahr ) )
        monat = datehelper.monthList[x.monat-1]
        self._cboMonat.setCurrentText( monat )
        self._sdErledigtAm.setDateFromIsoString( x.erledigtDatum )
        self._txtBemerkung.setText( x.bemerkung )

    def _setDataFromFields( self, x:XGeplant ):
        x.mobj_id = self._cboMobjId.currentText()
        x.leistung = self._txtLeistung.text()
        x.firma = self._cboFirma.currentText()
        x.kosten = self._feKosten.getFloatValue()
        x.kostenvoranschlag = 1 if self._cbKostenvoranschlag.isChecked() else 0
        x.jahr = int( self._cboJahr.currentText() )
        monat = self._cboMonat.getCurrentText()
        monIdx = datehelper.monthList.index( monat ) + 1
        x.monat = monIdx
        x.erledigtDatum = self._sdErledigtAm.getDate()
        x.bemerkung = self._txtBemerkung.toPlainText()

    def setMasterobjekte( self, masterlist:List[str] ):
        self._cboMasterObjekt.addItems( masterlist )

    def setMietobjekte( self, mobj_idList:List[str] ):
        """
        Versorgt die ComboBox mit den möglichen Werten (Mietobjekten)
        Diese Methode muss VOR setData() aufgerufen werden.
        :param mobj_idList:
        :return:
        """
        self._cboMobjId.addItems( mobj_idList )

    def clearMietobjekte( self ):
        self._cboMobjId.clear()

    def setFirmen( self, firmenlist:List[str] ):
        self._cboFirma.addItems( firmenlist )

    def getDataCopyWithChanges( self ) -> XGeplant:
        x = copy.copy( self._xgeschaeftsreise )
        self._setDataFromFields( x )
        return x

    def applyChanges( self ) -> XGeplant:
        self._setDataFromFields( self._xgeschaeftsreise )
        return self._xgeplant

    def setData( self, x:XGeplant ) -> None:
        self._xgeplant = x
        self._setFieldsFromData()