class NotizEditor( QWidget ): bezugAuswahlFirmaPressed = Signal() bezugAuswahlVwPressed = Signal() bezugAuswahlMieterPressed = Signal() def __init__( self, notiz:XNotiz=None, parent=None ): QWidget.__init__( self, parent ) self.setWindowTitle( "Bearbeiten einer Notiz" ) self._layout = QGridLayout( self ) self._bezug = BaseEdit() self._btnAuswahlBezug_Firma = QPushButton( text="F" ) self._btnAuswahlBezug_Firma.clicked.connect( self.bezugAuswahlFirmaPressed.emit ) self._btnAuswahlBezug_Vw = QPushButton( text="V" ) self._btnAuswahlBezug_Vw.clicked.connect( self.bezugAuswahlVwPressed.emit ) self._btnAuswahlBezug_Mieter = QPushButton( text="M" ) self._btnAuswahlBezug_Mieter.clicked.connect( self.bezugAuswahlMieterPressed.emit ) self._caption = BaseEdit() self._edi = MultiLineEdit() self._erledigt = CheckBox( "erledigt" ) self._notiz:XNotiz = None self._createGui() if notiz: self.setNotiz( notiz ) def _createGui( self ): l = self._layout r = c = 0 self._bezug.setPlaceholderText( "Bezug der Notiz" ) l.addWidget( self._bezug ) self._btnAuswahlBezug_Firma.setFixedWidth( 30 ) self._btnAuswahlBezug_Firma.setToolTip( "Auswahldialog Firma öffnen" ) self._btnAuswahlBezug_Vw.setFixedWidth( 30 ) self._btnAuswahlBezug_Vw.setToolTip( "Auswahldialog Verwalter öffnen" ) self._btnAuswahlBezug_Mieter.setFixedWidth( 30 ) self._btnAuswahlBezug_Mieter.setToolTip( "Auswahldialog Mieter öffnen" ) buttonsLayout = QHBoxLayout() buttonsLayout.addWidget( self._btnAuswahlBezug_Firma ) buttonsLayout.addWidget( self._btnAuswahlBezug_Vw ) buttonsLayout.addWidget( self._btnAuswahlBezug_Mieter ) c += 1 l.addLayout( buttonsLayout, r, c ) r += 1 c = 0 self._caption.setPlaceholderText( "Überschrift der Notiz" ) l.addWidget( self._caption, r, c, 1, 2 ) r += 1 l.addWidget( self._edi, r, c, 1, 2 ) r += 1 l.addWidget( self._erledigt, r, c ) self.setLayout( l ) def _dataToGui( self ) -> None: x = self._notiz self._bezug.setText( x.bezug ) self._caption.setText( x.ueberschrift ) self._edi.setText( x.text ) self._erledigt.setChecked( (x.erledigt == 1) ) def guiToData( self ) -> None: x = self._notiz x.bezug = self._bezug.text() x.ueberschrift = self._caption.text() x.text = self._edi.toPlainText() x.erledigt = 1 if self._erledigt.isChecked() else 0 def setNotiz( self, notiz:XNotiz ): self._notiz = notiz self._bezug.setText( notiz.bezug ) self._caption.setText( notiz.ueberschrift ) self._edi.setText( notiz.text ) self._erledigt.setChecked( True if notiz.erledigt == 1 else 0 ) def setBezug( self, bezug:str ): self._bezug.setText( bezug ) def getNotizCopyWithChanges( self ) -> XNotiz: """ liefert eine Kopie des in ARbeit befindlichen XNotiz-Objekts. Die in der GUI vorgenommenen Änderungen sind darin enthalten. Die Änderungen sind NICHT in der Original-Notiz enthalten! Das Einfügen der Änderungen in die Original-Notiz passiert durch Aufruf von guiToData(). :return: eine Kopie der Original-Notiz mit Änderungen """ xcopy = copy.copy( self._notiz ) xcopy.bezug = self._bezug.text() xcopy.ueberschrift = self._caption.text() xcopy.text = self._edi.toPlainText() xcopy.erledigt = 1 if self._erledigt.isChecked() else 0 return xcopy
class MietobjektView(QWidget, ModifyInfo): # IccView ): save = Signal( ) # speichere Änderungen am Hauswart, der Masterobjekt-Bemerkung, # des Mietobjekt-Containers und der Mietobjekt-Bemerkung edit_mieter = Signal() edit_miete = Signal() edit_verwaltung = Signal() edit_hausgeld = Signal() def __init__(self, x: XMietobjektExt): QWidget.__init__(self) ModifyInfo.__init__(self) Clearable.__init__(self) self._mietobjekt = x self._btnSave = QPushButton() self._layout = QGridLayout() self._anzCols = 12 self.setLayout(self._layout) # masterobjekt fields self._lblMasterId = FatLabel() self._bbeMasterName = LabelTimesBold12() self._bbeStrHnr = BaseBoldEdit() self._bbePlz = BaseBoldEdit() self._bbeOrt = BaseBoldEdit() self._bbeAnzWhg = BaseBoldEdit() self._bbeGesamtWfl = BaseBoldEdit() self._lblVerwalter = FatLabel() self._lblWEG = FatLabel() self._sdVeraeussertAm = SmartDateEdit() self._beHauswart = BaseBoldEdit() self._beHauswartTelefon = BaseBoldEdit() self._beHauswartMailto = BaseBoldEdit() self._meBemerkungMaster = MultiLineEdit() # mietobjekt fields self._lblMietobjekt = LabelTimesBold12() self._beWhgBez = LabelTimesBold12() self._bbeQm = BaseBoldEdit() self._beContainerNr = BaseBoldEdit() self._meBemerkungMobj = MultiLineEdit() self._lblMieter = FatLabel() self._lblTelefonMieter = FatLabel() self._lblMailtoMieter = FatLabel() self._lblNettoMiete = FatLabel() self._lblNkv = FatLabel() self._lblBruttoMiete = FatLabel() self._lblKaution = FatLabel() self._lblHgvNetto = FatLabel() self._lblRueZuFue = FatLabel() self._lblHgvBrutto = FatLabel() self._createGui(x) self.setData(x) self.connectWidgetsToChangeSlot(self.onChange, self.onResetChangeFlag) def _createGui(self, x: XMietobjektExt): self._layout.setVerticalSpacing(15) self._createToolBar(0) # self._createHLine( 1, self._anzCols ) # self._createDummyRow( 2, 10 ) row = self._createMasterDisplay(3) # self._createDummyRow( 4, 10 ) # self._createHLine( 5 ) self._createMietObjektDisplay(row) # cols = self._layout.columnCount() # self._layout.setColumnStretch( 7, 1 ) # rows = self._layout.rowCount() # self._layout.setRowStretch( rows, 1 ) def _createToolBar(self, r: int): self._btnSave.setFixedSize(QSize(30, 30)) self._btnSave.setIcon(QIcon(ICON_DIR + "save.png")) self._btnSave.setToolTip( "Änderungen des Hauswarts bzw. der Bemerkung des Master-Objekts speichern." ) self._btnSave.setEnabled(False) self._btnSave.clicked.connect(self.save.emit) tb = QHBoxLayout() tb.addWidget(self._btnSave) self._layout.addLayout(tb, r, 0, alignment=Qt.AlignLeft) def _createHLine(self, r: int, columns: int = -1): line = HLine() if columns < 0: columns = self._layout.columnCount() self._layout.addWidget(line, r, 0, 1, columns) def _createDummyRow(self, r: int, h: int): dummy = QWidget() dummy.setFixedHeight(h) self._layout.addWidget(dummy, r, 0) def _createMasterDisplay(self, row: int) -> int: #l = GridLayout() l = self._layout #self._layout.addLayout( l, row, 0, 1, self._anzCols ) # l.setVerticalSpacing( 15 ) r = row def _createMasterHeader(r: int) -> int: self._createHLine(r, self._anzCols) r += 1 wrapper = QWidget() wrapper.setStyleSheet("background: lightgray;") hbl = QHBoxLayout() wrapper.setLayout(hbl) self._layout.addWidget(wrapper, r, 0, 1, self._anzCols) #################### Master-ID lbl = LabelTimes12("Master-ID: ") hbl.addWidget(lbl, alignment=Qt.AlignRight) hbl.addWidget(self._lblMasterId, alignment=Qt.AlignLeft) #################### Master-Name lbl = LabelTimes12("Master-Name: ") hbl.addWidget(lbl, alignment=Qt.AlignRight) self._bbeMasterName.setText("Dummy-Master") #self._bbeMasterName.setStyleSheet( "background: white;" ) hbl.addWidget(self._bbeMasterName, alignment=Qt.AlignLeft) r += 1 self._createHLine(r) return r def _createMasterAddress(r: int) -> int: c = 0 lbl = BaseLabel("Adresse: ") l.addWidget(lbl, r, c) c = 1 self._bbePlz.setMaximumWidth(60) l.addWidget(self._bbePlz, r, c) c = 2 l.addWidget(self._bbeOrt, r, c, 1, 4) c = 6 l.addWidget(self._bbeStrHnr, r, c, 1, 7) return r def _createMasterMore(r: int) -> int: c = 0 lbl = BaseLabel("Anzahl Whg.: ") l.addWidget(lbl, r, c) c += 1 self._bbeAnzWhg.setEnabled(False) self._bbeAnzWhg.setMaximumWidth(40) l.addWidget(self._bbeAnzWhg, r, c) c = 4 lbl = BaseLabel("Gesamt-Wfl.(qm):") l.addWidget(lbl, r, c, 1, 1, alignment=Qt.AlignRight) c += 1 self._bbeGesamtWfl.setEnabled(False) self._bbeGesamtWfl.setMaximumWidth(40) l.addWidget(self._bbeGesamtWfl, r, c) return r def _createVerwalter(r: int) -> int: #################### Verwalter c = 0 lbl = BaseLabel("Verwalter: ") self._layout.addWidget(lbl, r, c) c = 1 self._layout.addWidget(self._lblVerwalter, r, c, 1, 3) # #################### WEG-Name c = 4 lbl = BaseLabel("WEG-Name: ") self._layout.addWidget(lbl, r, c, 1, 1, alignment=Qt.AlignRight) c = 5 self._layout.addWidget(self._lblWEG, r, c, 1, 4) # ######################## Button Edit Verwaltung c = 11 btn = EditButton() btn.clicked.connect(self.edit_verwaltung.emit) self._layout.addWidget(btn, r, c, 1, 1, alignment=Qt.AlignRight) return r + 1 def _createMasterHauswart(r: int) -> int: c = 0 lbl = BaseLabel("Hauswart: ") l.addWidget(lbl, r, c) c = 1 l.addWidget(self._beHauswart, r, c, 1, 3) c = 4 l.addWidget(BaseLabel("Telefon: "), r, c, 1, 1, alignment=Qt.AlignRight) c = 5 l.addWidget(self._beHauswartTelefon, r, c, 1, 2) c = 7 l.addWidget(BaseLabel("mailto:"), r, c, 1, 1, alignment=Qt.AlignRight) c = 8 l.addWidget(self._beHauswartMailto, r, c, 1, 4) return r def _createVeraeussertAm(r: int) -> int: c = 0 l.addWidget(BaseLabel("veräußert am:"), r, c) c = 1 self._sdVeraeussertAm.setMaximumWidth(90) l.addWidget(self._sdVeraeussertAm, r, c) return r r = _createMasterHeader(r) r = _createMasterAddress(r + 1) r = _createMasterMore(r + 1) r = _createVerwalter(r + 1) r = _createMasterHauswart(r + 1) r = _createVeraeussertAm(r + 1) r += 1 self._meBemerkungMaster.setMaximumHeight(50) l.addWidget(self._meBemerkungMaster, r, 0, 1, self._anzCols) l.setRowStretch(r, 1) return r + 1 def _createMietObjektDisplay(self, r: int): #, x: XMietobjektExt ): self._createHLine(r, self._anzCols) r += 1 wrapper = QWidget() wrapper.setStyleSheet("background: lightgray;") hbl = QHBoxLayout() wrapper.setLayout(hbl) self._layout.addWidget(wrapper, r, 0, 1, self._anzCols) #################### Mietobjekt lbl = LabelTimes12("Mietobjekt: ") hbl.addWidget(lbl, alignment=Qt.AlignRight) hbl.addWidget(self._lblMietobjekt, alignment=Qt.AlignLeft) #################### Wohnungsbezeichnung lbl = LabelTimes12("Bezeichnung: ") hbl.addWidget(lbl, alignment=Qt.AlignRight) #self._beWhgBez.setStyleSheet( "background: white;" ) hbl.addWidget(self._beWhgBez, alignment=Qt.AlignLeft) r += 1 self._createHLine(r) #################### Mieter r, c = r + 1, 0 lbl = BaseLabel("Mieter: ") self._layout.addWidget(lbl, r, c) c += 1 #self._lblMieter.setText() self._layout.addWidget(self._lblMieter, r, c, 1, 4) ############################# Telefon + mobil Mieter c += 5 lbl = BaseLabel("Tel.: ") self._layout.addWidget(lbl, r, c, alignment=Qt.AlignRight) c += 1 #self._lblTelefonMieter.setText( x.telefon_mieter ) self._layout.addWidget(self._lblTelefonMieter, r, c) ############################## Mailto Mieter c += 1 lbl = BaseLabel("mailto: ") self._layout.addWidget(lbl, r, c, 1, 1, alignment=Qt.AlignRight) c += 1 #self._lblMailtoMieter.setText( x.mailto_mieter ) self._layout.addWidget(self._lblMailtoMieter, r, c, 1, 2) ################################## Button Edit Mietverhältnis c = 11 btn = EditButton() btn.clicked.connect(self.edit_mieter.emit) self._layout.addWidget(btn, r, c, 1, 1, alignment=Qt.AlignRight) #################### Netto-Miete und NKV r, c = r + 1, 0 lbl = BaseLabel("Netto-Miete: ") self._layout.addWidget(lbl, r, c) c += 1 #self._lblNettoMiete.setText( str( x.nettomiete ) ) self._layout.addWidget(self._lblNettoMiete, r, c) c = 2 # NKV-Label soll linksbündig mit Tel.-Label des Master-Objekts sein lbl = BaseLabel("NKV: ") self._layout.addWidget(lbl, r, c, 1, 1, alignment=Qt.AlignRight) c = 3 #self._lblNkv.setText( str( x.nkv ) ) self._layout.addWidget(self._lblNkv, r, c) c = 4 lbl = BaseLabel("Miete brutto: ") self._layout.addWidget(lbl, r, c, alignment=Qt.AlignRight) c = 5 self._layout.addWidget(self._lblBruttoMiete, r, c) c = 8 lbl = BaseLabel("Kaution: ") self._layout.addWidget(lbl, r, c, alignment=Qt.AlignRight) c = 9 self._layout.addWidget(self._lblKaution, r, c) # ######################### Button Edit Miete c = 11 btn = EditButton() btn.clicked.connect(self.edit_miete.emit) self._layout.addWidget(btn, r, c, 1, 1, alignment=Qt.AlignRight) # #################### HGV und RüZuFü r, c = r + 1, 0 lbl = BaseLabel("HGV netto: ") self._layout.addWidget(lbl, r, c) c = 1 #self._lblHgvNetto.setText( str( x.hgv_netto ) ) self._layout.addWidget(self._lblHgvNetto, r, c) c = 2 lbl = BaseLabel("RüZuFü: ") self._layout.addWidget(lbl, r, c, 1, 1, alignment=Qt.AlignRight) c = 3 #self._lblRueZuFue.setText( str( x.ruezufue ) ) self._layout.addWidget(self._lblRueZuFue, r, c) c = 4 lbl = BaseLabel("HGV brutto: ") self._layout.addWidget(lbl, r, c, alignment=Qt.AlignRight) c = 5 #self._lblHgvBrutto.setText( str( x.hgv_brutto ) ) self._layout.addWidget(self._lblHgvBrutto, r, c) # ############################# Button Edit HGV c = 11 btn = EditButton() btn.clicked.connect(self.edit_hausgeld.emit) self._layout.addWidget(btn, r, c, 1, 1, alignment=Qt.AlignRight) # #################### qm r, c = r + 1, 0 lbl = LabelArial12("qm: ") self._layout.addWidget(lbl, r, c) c = 1 self._bbeQm.setMaximumWidth(40) #self._bbeQm.setText( str( x.qm ) ) self._bbeQm.setEnabled(False) self._layout.addWidget(self._bbeQm, r, c) #################### Container-Nr. c = 2 lbl = LabelArial12("Container-Nr.:") self._layout.addWidget(lbl, r, c, alignment=Qt.AlignRight) c = 3 self._layout.addWidget(self._beContainerNr, r, c, 1, 4) # ###################### Bemerkung zum Mietobjekt r, c = r + 1, 0 #self._meBemerkungMobj.setText( x.bemerkung_mietobjekt ) self._meBemerkungMobj.setPlaceholderText( "<Bemerkungen zur Wohnung (Mietobjekt)>") self._meBemerkungMobj.setMaximumHeight(46) self._layout.addWidget(self._meBemerkungMobj, r, c, 1, self._anzCols) self._layout.setRowStretch(r, 1) def setData(self, x: XMietobjektExt): self._dataToGui(x) def getMietobjektCopyWithChanges(self) -> XMietobjektExt: xcopy: XMietobjektExt = copy.copy(self._mietobjekt) self._guiToData(xcopy) return xcopy def _dataToGui(self, x: XMietobjektExt): # data für Masterobjekt self._lblMasterId.setText(str(x.master_id)) self._bbeMasterName.setText(x.master_name) self._bbeStrHnr.setText(x.strasse_hnr) self._bbeStrHnr.setCursorPosition(0) self._bbePlz.setText(x.plz) self._bbeOrt.setText(x.ort) self._bbeAnzWhg.setText(str(x.anz_whg)) self._bbeGesamtWfl.setText(str(x.gesamt_wfl)) self._lblVerwalter.setText(x.verwalter) self._lblWEG.setText(x.weg_name) self._beHauswart.setText(x.hauswart) self._beHauswart.setCursorPosition(0) self._beHauswartTelefon.setText(x.hauswart_telefon) self._beHauswartMailto.setText(x.hauswart_mailto) self._beHauswartMailto.setCursorPosition(0) if x.veraeussert_am: self._sdVeraeussertAm.setDateFromIsoString(x.veraeussert_am) self._meBemerkungMaster.setText(x.bemerkung_masterobjekt) # data für Mietobjekt self._lblMietobjekt.setText(x.mobj_id) self._beWhgBez.setText(x.whg_bez) self._lblMieter.setText(x.mieter) self._lblTelefonMieter.setText(x.telefon_mieter) self._lblMailtoMieter.setText(x.mailto_mieter) self._lblNettoMiete.setText(str(x.nettomiete)) self._lblNkv.setText(str(x.nkv)) self._lblBruttoMiete.setText(str(x.nettomiete + x.nkv)) self._lblKaution.setText(str(x.kaution)) self._lblHgvNetto.setText(str(x.hgv_netto)) self._lblRueZuFue.setText(str(x.ruezufue)) self._lblHgvBrutto.setText(str(x.hgv_brutto)) self._bbeQm.setText(str(x.qm)) self._beContainerNr.setText(x.container_nr) self._meBemerkungMobj.setText(x.bemerkung_mietobjekt) def _guiToData(self, x: XMietobjektExt): # Masterobjekt x.strasse_hnr = self._bbeStrHnr.text() x.plz = self._bbePlz.text() x.ort = self._bbeOrt.text() x.verwalter = self._lblVerwalter.text() x.weg_name = self._lblWEG.text() x.veraeussert_am = self._sdVeraeussertAm.getDate() x.hauswart = self._beHauswart.text() x.hauswart_telefon = self._beHauswartTelefon.text() x.hauswart_mailto = self._beHauswartMailto.text() x.bemerkung_masterobjekt = self._meBemerkungMaster.toPlainText() # Mietobjekt x.whg_bez = self._beWhgBez.text() x.container_nr = self._beContainerNr.text() x.bemerkung_mietobjekt = self._meBemerkungMobj.toPlainText() def applyChanges(self): self._guiToData(self._mietobjekt) def onChange(self): self._btnSave.setEnabled(True) def onResetChangeFlag(self): self._btnSave.setEnabled(False) def getModel(self): return self._mietobjekt
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()
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()