def createView(self) -> AnlageVView:
     self._view.openAnlageV.connect(self.onOpenAnlageV)
     self._view.printAnlageV.connect(self.onPrintAnlageV)
     self._view.printAllAnlageV.connect(self.onPrintAllAnlageV)
     # Feststellen, für welches Veranlagungsjahr die Anlagen V erstellt werden sollen:
     jahre = AnlageV_Base_Logic.getJahre()
     dlg = JahrAuswahlDialog(jahre)
     dlg.move(self._view.cursor().pos())
     if dlg.exec_():
         self._jahr = dlg.jahr
         try:
             self._busi = AnlageV_Preview_Logic(self._jahr)
         except Exception as ex:
             box = ErrorBox(
                 "AnlageVController.createView()",
                 "Instantiation AnlageV_Preview_Logic failed.\n", str(ex))
             box.exec_()
             return None
     else:
         return None
     master_objekte = self._busi.getObjektNamen()
     accepted, objlist = self.showAnlageVAuswahlDialog(master_objekte)
     if accepted:
         self._master_objekte = objlist
         self._provideTabs(objlist)
         return self._view
     else:
         self._jahr = 0
         self._master_objekte.clear()
         return None
    def createView(self) -> QWidget:
        try:
            jahre = GeschaeftsreiseUcc.inst().getDistinctJahre()
            jahr = jahre[
                0]  # die Liste der Jahre muss mindestens ein Jahr (das laufende) enthalten
            tm: GeschaeftsreisenTableModel = self._ucc.getGeschaeftsreisenTableModel(
                jahr)
        except Exception as ex:
            box = ErrorBox("Fehler beim Erzeugen des GeschaeftsreiseView",
                           str(ex), "")
            box.exec_()
            return None

        self._view = GeschaeftsreisenView(tm)
        self._view.setJahre(jahre)
        self._view.setJahr(jahr)
        self._view.save.connect(self.onSave)
        self._view.yearChanged.connect(self.onYearChanged)
        self._view.createItem.connect(self.onCreate)
        self._view.editItem.connect(self.onEdit)
        self._view.deleteItem.connect(self.onDelete)

        w = self._view.getPreferredWidth()
        screenwidth = getScreenWidth()
        if w > screenwidth:
            w = screenwidth
        sz = self._view.size()
        self._view.resize(w, sz.height())
        return self._view
Exemple #3
0
 def _doCsvExport( self, dlg:IccDialog ):
     model: QAbstractItemModel = dlg.getView().getModel()
     try:
         BusinessLogic.inst().exportToCsv( model )
     except Exception as ex:
         box = ErrorBox( "Export als .csv-Datei", str( ex ), "in MainController.exportToCsv()" )
         box.exec_()
Exemple #4
0
 def kuendigeMietverhaeltnis(self, mv_id: str, kuendDatum: str) -> None:
     # Kündigung in der Datenbank durchführen
     try:
         BusinessLogic.inst().kuendigeMietverhaeltnis(mv_id, kuendDatum)
         self.mietverhaeltnisGekuendigt.emit(mv_id, kuendDatum)
     except Exception as ex:
         box = ErrorBox(
             "Kündigung hat nicht geklappt",
             "MiniKuendigungsController.kuendigeMietverhaeltnis()", str(ex))
         box.exec_()
Exemple #5
0
 def validate( self, x: XGeschaeftsreise ) -> bool:
     msg = ""
     if not x.mobj_id: msg = "Objekt muss angegeben sein."
     if not x.von: msg = "Beginn muss angegeben sein."
     if not x.bis: msg = "Ende muss angegeben sein."
     if x.von > x.bis: msg = "Beginn muss vor dem Ende sein."
     if not x.ziel: msg = "Ziel muss angegeben sein."
     if not x.zweck: msg = "Zweck muss angegeben sein."
     if x.km <= 0: msg = "Kilometerangabe fehlt. Muss angegeben werden."
     if msg:
         box = ErrorBox( "Angaben unvollständig", msg, "" )
         box.exec_()
         return False
     return True
Exemple #6
0
def main():
    app = QApplication()
    #iccstate = IccStateHandler( "ftp.ini")
    setScreenSize(app)
    env = "DEVELOP"
    if not runningInDev():
        # release version running
        terminate_if_running()  # one instance only
        # try:
        #     iccstate.startApplication() # download immo.db from server and set is-in-use flag
        # except Exception as ex:
        #     print( str(ex) )
        #     box = ErrorBox( "ImmoControlCenter", "Failed starting application", str( ex ) )
        #     box.exec_()
        #     return
        createControlFile()  # flag file showing application is running
        env = "RELEASE"
    win = IccMainWindow(env)
    # see: https://stackoverflow.com/questions/53097415/pyside2-connect-close-by-window-x-to-custom-exit-method
    shutDownFilter = ShutDownFilter(win, app)
    win.installEventFilter(shutDownFilter)
    win.show()
    try:
        pos_size = getGeometryOnLastShutdown()
        win.move(pos_size["x"], pos_size["y"])
        #win.resize( pos_size["w"], pos_size["h"] )
        win.setFixedWidth(1100)
        win.setFixedHeight(63)
    except:
        win.resize(1900, 1000)

    MainController(win)

    icon = QIcon("./images/houses.png")
    app.setWindowIcon(icon)

    app.exec_()

    if not runningInDev():
        try:
            # iccstate.stopApplication() # upload immo.db to server and set not-in-use flag
            pass
        except Exception as ex:
            print(str(ex))
            box = ErrorBox("ImmoControlCenter",
                           "Failed shutting down application", str(ex))
            box.exec_()
        finally:
            deleteControlFile()
Exemple #7
0
 def validate( self ) -> bool:
     x = self._view.getDataCopyWithChanges()
     msg = ""
     if not x.mobj_id: msg = "Objekt muss angegeben sein."
     elif not x.von: msg = "Beginn muss angegeben sein."
     elif not x.bis: msg = "Ende muss angegeben sein."
     elif x.von > x.bis: msg = "Beginn muss vor dem Ende sein."
     elif not x.ziel: msg = "Ziel muss angegeben sein."
     elif not x.zweck: msg = "Zweck muss angegeben sein."
     elif x.km <= 0: msg = "Kilometerangabe fehlt. Muss angegeben werden."
     if msg:
         box = ErrorBox( "Angaben unvollständig", msg, "" )
         box.exec_()
         return False
     return True
Exemple #8
0
def uploadDatabase() -> bool:
    """
    upload immo.db to server
    :return: True if upload was successful
    """
    ftpini = FtpIni("ftp.ini")
    ftp = Ftp(ftpini)
    try:
        ftp.connect()
        ftp.upload("immo.db", "immo.db")
        return True
    except Exception as ex:
        box = ErrorBox("File Transfer failed", "FTP failed.\n", str(ex))
        box.exec_()
        return False
Exemple #9
0
def saveDatabase() -> None:
    def try_copyfile():
        try:
            copyfile(src, dest)
        except Exception as ex:
            box = WarningBox("Datenbank auf lokalen Datenträger sichern",
                             "Sicherung nicht möglich",
                             "Ist der Datenträger eingehängt?",
                             "Nochmal versuchen", "Beenden")
            rc = box.exec_()
            if rc == QMessageBox.Yes:
                try_copyfile()

    from shutil import copyfile
    if runningInDev(): return
    scriptdir = os.path.dirname(os.path.realpath(__file__))
    src = "./immo.db"
    if "Vermietung" in scriptdir:
        print("Running in REL; try to copy immo.db")
        dest = "/media/martin/Elements1/Vermietung/ImmoControlCenter/immo.db"
        if os.path.isfile(src):
            box = QMessageBox()
            box.setIcon(QMessageBox.Question)
            box.setWindowTitle("Sicherung der Datenbank")
            box.setText("Datenbank\n\n   '%s'\n\nsichern in\n\n   '%s'?" %
                        (scriptdir + "/immo.db", dest))
            box.setStandardButtons(QMessageBox.Save | QMessageBox.Cancel)
            r = box.exec_()
            if r == QMessageBox.Save:
                try_copyfile()
        else:
            box = ErrorBox("Datenbank auf lokalen Datenträger sichern",
                           "Sicherung nicht möglich",
                           "Es gibt keine Datenbank namens immo.db")
            box.exec_()
Exemple #10
0
 def _exportDatabaseToServer( self ):
     ftpini = FtpIni( "ftp.ini" )
     ftp = Ftp( ftpini )
     try:
         ftp.connect()
         ftp.upload( "immo.db", "immo.db" )
         box = InfoBox( "Immo-Datenbak exportieren", "Exportieren abgeschlossen.", "", "OK" )
         box.exec_()
     except Exception as ex:
         box = ErrorBox( "File Transfer failed", "Can't export immo.db to server:\n", str(ex) )
         box.exec_()
     finally:
         ftp.quit()
Exemple #11
0
 def writeChanges(self, changes: Any = None) -> bool:
     self._view.applyChanges(
     )  # Änderungen von der GUI in XMieterwechsel übernehmen
     retval: ReturnValue = MietverhaeltnisServices.processMieterwechsel(
         self._view.getMieterwechselData())
     if not retval.missionAccomplished():
         box = ErrorBox("Fehler beim Mieterwechsel", retval.exceptiontype,
                        retval.errormessage)
         box.exec_()
         return False
     box = InfoBox("Mieterwechsel", "Verarbeitung erfolgreich.", "", "OK")
     box.exec_()
     self._view.setSaveButtonEnabled(False)
     return True
 def onYearChanged(self, newyear: int):
     if self.isChanged():
         box = QuestionBox(
             "Änderungen speichern?",
             "Sollen die Änderungen an Geschäftsreisen gespeichert werden?",
             "Ja", "Nein", "Abbrechen")
         rc = box.exec_()
         if rc == QMessageBox.Yes:
             if not self.onSave():
                 #title: str, msg: str, more: str
                 box = ErrorBox("Fehler beim Speichern",
                                "Speichern hat nicht funktioniert", "")
                 box.exec_()
             else:
                 self._setNewModel(newyear)
         elif rc == QMessageBox.No:  # Anwender will die Änderungen nicht speichern
             self._setNewModel(newyear)
         else:
             pass  # Anwender hat Abbrechen gedrückt
     else:
         self._setNewModel(newyear)
Exemple #13
0
    def _importDatabaseFromServer( self ):
        ftpini = FtpIni( "ftp.ini" )
        dlg = QInputDialog()
        dlg.move( self._mainwin.cursor().pos() )
        name, ok = dlg.getText( self._mainwin, "Immo-Datenbank importieren",
                           "Datenbank wird ins Verzeichnis\n\n'%s'\n\n importiert.\n\n"
                           "<<<<Sie wird nicht für die laufende Anwendung verwendet!!>>>>\n\n"
                                "Lokalen Namen für die Datenbank angeben: " % ftpini.getLocalPath(),
                    QLineEdit.Normal, "immo.db.imported" )

        if not ( ok and name ): return
        ftp = Ftp( ftpini )
        try:
            ftp.connect()
            ftp.download( "immo.db", name )
            box = InfoBox( "Immo-Datenbak importieren", "Importieren abgeschlossen.", "", "OK" )
            box.move( self._mainwin.cursor().pos() )
            box.exec_()
        except Exception as ex:
            box = ErrorBox( "File Transfer failed", "Can't export immo.db to server:\n", str( ex ) )
            box.exec_()
        finally:
            ftp.quit()
Exemple #14
0
 def showException(self, title, msg, more=None):
     box = ErrorBox(title, msg, more)
     crsr = QCursor.pos()
     box.move(crsr.x(), crsr.y())
     box.exec_()
 def writeChanges(self, changes: Any = None) -> bool:
     changes: Dict[str, List[XGeschaeftsreise]] = self.getChanges()
     for x in changes["INSERT"]:
         try:
             self._ucc.insertGeschaeftsreise(x)
         except Exception as ex:
             box = ErrorBox("Fehler beim Einfügen der Geschäftsreise",
                            str(ex))
             box.exec_()
             return False
     for x in changes["UPDATE"]:
         try:
             self._ucc.updateGeschaeftsreise(x)
         except Exception as ex:
             box = ErrorBox("Fehler beim Ändern der Geschäftsreise",
                            str(ex))
             box.exec_()
             return False
     for x in changes["DELETE"]:
         try:
             self._ucc.deleteGeschaeftsreise(x.id)
         except Exception as ex:
             box = ErrorBox("Fehler beim Löschen der Geschäftsreise",
                            str(ex))
             box.exec_()
             return False
     return True