From 93efaabe6d37b9df5af35b4a82a085e305555ab38ad58730f2302ed37a0e128a Mon Sep 17 00:00:00 2001 From: Daniel Stoppek Date: Mon, 25 Nov 2024 15:17:20 +0100 Subject: [PATCH] FirstStart angepasst --- Gui/AdminUserConfig.qml | 72 ++ Gui/CustomerTables.qml | 2 +- Gui/DbConfiguration.qml | 104 +++ Gui/EncryptionKey.qml | 45 + Gui/firststart.qml | 286 ++----- doc/GUI-Mockups/GUI-FirstStart.pdf | Bin 11806 -> 14124 bytes doc/GUI-Mockups/GUI-FirstStart.rnote | Bin 2255 -> 2891 bytes doc/datenbank.drawio | 100 ++- doc/datenbank.pdf | Bin 70295 -> 71561 bytes doc/db_schemer_v1-pyqcrm-202411211531.sql | 953 ++++++++++++++++++++++ js/qmldict.js | 19 +- lib/ConfigLoader.py | 45 +- lib/Test.py | 13 + lib/Vermasseln.py | 18 +- pyqcrm.pyproject | 3 +- qml.qrc | 3 + rc_pyqcrm.py | 14 +- rc_qml.py | 267 +++++- 18 files changed, 1619 insertions(+), 325 deletions(-) create mode 100644 Gui/AdminUserConfig.qml create mode 100644 Gui/DbConfiguration.qml create mode 100644 Gui/EncryptionKey.qml create mode 100644 doc/db_schemer_v1-pyqcrm-202411211531.sql create mode 100644 lib/Test.py diff --git a/Gui/AdminUserConfig.qml b/Gui/AdminUserConfig.qml new file mode 100644 index 0000000..2bcc4ba --- /dev/null +++ b/Gui/AdminUserConfig.qml @@ -0,0 +1,72 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +GridLayout +{ + id: createUserGrid + columns: 2 + columnSpacing: 5 + rowSpacing: 9 + // anchors.fill: parent + + property string name: "pyqcrm" + + Label + { + text: qsTr("Admin User erstellen") + font.pixelSize: 40 + Layout.columnSpan: 2 + Layout.alignment: Qt.AlignHCenter + padding: 15 + } + + + Label + { + text: qsTr("Benutzername:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: benutzerName + placeholderText: qsTr("Hier Benutzername eingeben") + Layout.fillWidth: true + height: 3 + property string name: "PYQCRM_ADMIN" + } + + Label + { + text: qsTr("Passwort:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: password + echoMode: TextInput.Password + placeholderText: qsTr("Hier Passwort eingeben") + Layout.fillWidth: true + property string name: "PYQCRM_ADMIN_PASS" + } + Label + { + text: qsTr("Info:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: gecos + placeholderText: qsTr("Zusätzliche Info") + Layout.fillWidth: true + property string name: "PYQCRM_ADMIN_INFO" + } + + Item + { + Layout.fillHeight: true + } +} diff --git a/Gui/CustomerTables.qml b/Gui/CustomerTables.qml index 307912b..63e73cb 100644 --- a/Gui/CustomerTables.qml +++ b/Gui/CustomerTables.qml @@ -182,7 +182,7 @@ Item { MouseArea { id: mouseArea - property bool hovered:false + property bool hovered: false anchors.fill: parent hoverEnabled: true diff --git a/Gui/DbConfiguration.qml b/Gui/DbConfiguration.qml new file mode 100644 index 0000000..db7490f --- /dev/null +++ b/Gui/DbConfiguration.qml @@ -0,0 +1,104 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + + +GridLayout +{ + // property alias firstStart: firstStartGrid + id: dbGrid + columns: 2 + columnSpacing: 5 + rowSpacing: 9 + + property string name: "database" + + Label + { + text: qsTr("Datenbank Einstellungen") + font.pixelSize: 40 + Layout.columnSpan: 2 + Layout.alignment: Qt.AlignHCenter + padding: 15 + } + + + Label + { + text: qsTr("DB-Host:") + Layout.alignment: Qt.AlignRight + + } + + TextField + { + id: dbHost + placeholderText: qsTr("Hier Host eingeben") + Layout.fillWidth: true + property string name: "DB_HOST" + } + + Label + { + text: qsTr("DB-Port:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: dbPort + placeholderText: qsTr("Hier DB-Port eingeben") + Layout.fillWidth: true + property string name: "DB_PORT" + } + + Label + { + text: qsTr("DB-Name:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: dbName + placeholderText: qsTr("Hier DB-Name eingeben") + Layout.fillWidth: true + property string name: "DB_NAME" + } + + Label + { + text: qsTr("DB-Benutzername:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: dbUserName + placeholderText: qsTr("Hier DB-Benutzername eingeben") + Layout.fillWidth: true + property string name: "DB_USER" + + } + + Label + { + text: qsTr("DB-Passwort:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: dbPassword + echoMode: TextInput.Password + placeholderText: qsTr("Hier DB-Passwort eingeben") + Layout.fillWidth: true + property string name: "DB_PASS" + } + + + Item + { + Layout.fillHeight: true + } +} diff --git a/Gui/EncryptionKey.qml b/Gui/EncryptionKey.qml new file mode 100644 index 0000000..17006bb --- /dev/null +++ b/Gui/EncryptionKey.qml @@ -0,0 +1,45 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +GridLayout +{ + id: passEncryptKeyGrid + columns: 2 + columnSpacing: 5 + rowSpacing: 9 + // anchors.fill: parent + + property string name: "pyqcrm" + + Label + { + text: qsTr("Encryption Key eingeben") + font.pixelSize: 40 + Layout.columnSpan: 2 + Layout.alignment: Qt.AlignHCenter + padding: 15 + } + + + Label + { + text: qsTr("Encryption Key:") + Layout.alignment: Qt.AlignRight + } + + TextField + { + id: passEncryptKey + placeholderText: qsTr("Hier Encryption Key eingeben") + Layout.fillWidth: true + height: 3 + echoMode: TextInput.Password + property string name: "ENCRYPT_KEY" + } + + Item + { + Layout.fillHeight: true + } +} diff --git a/Gui/firststart.qml b/Gui/firststart.qml index 8cfc3fa..b6d2e71 100644 --- a/Gui/firststart.qml +++ b/Gui/firststart.qml @@ -22,255 +22,79 @@ import "../js/qmldict.js" as Qmldict Item { - ColumnLayout + anchors.fill: parent + StackView { + id: firstStart anchors.fill: parent - TabBar + initialItem: "DbConfiguration.qml" + } + RowLayout + { + anchors.bottom: parent.bottom + anchors.margins: 9 + width: parent.width + + + Item { - id: bar Layout.fillWidth: true + } - TabButton + Button + { + id: cancelBtn + text: qsTr("Abbrechen") + onClicked: { - text: qsTr("Benutzer erstellen") - } - - TabButton - - { - id: dbTab - text: qsTr("Datenbank einrichten") - - } - - onCurrentIndexChanged: - { - submitBtn.text = currentIndex === 0? "Weiter" : "Speichern" + Qt.quit() } } - StackLayout + Button { - Layout.fillWidth: true - Layout.fillHeight: true - currentIndex: bar.currentIndex - Layout.margins: 9 - id: stackl - - Item + id: submitBtn + text: qsTr("Speichern") + property var grids: firstStart.currentItem + property var pyqcrm_conf: ({}) + property var admin: Boolean + onClicked: { - id: createUser - Layout.fillWidth: parent.width - - GridLayout + if (firstStart.currentItem.name === "database") { - id: createUserGrid - columns: 2 - columnSpacing: 5 - rowSpacing: 9 - anchors.fill: parent - Layout.margins: 9 - property string name: "pyqcrm" - - Label + pyqcrm_conf = Qmldict.func(submitBtn.grids) + if (pyqcrm_conf) { - text: qsTr("Benutzername:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: benutzerName - placeholderText: qsTr("Hier Benutzername eingeben") - Layout.fillWidth: true - height: 3 - property string name: "PYQCRM_ADMIN" - } - - Label - { - text: qsTr("Passwort:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: password - echoMode: TextInput.Password - placeholderText: qsTr("Hier Passwort eingeben") - Layout.fillWidth: true - property string name: "PYQCRM_ADMIN_PASS" - } - Label - { - text: qsTr("Info:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: gecos - placeholderText: qsTr("Zusätzliche Info") - Layout.fillWidth: true - property string name: "PYQCRM_ADMIN_INFO" - } - - Item - { - Layout.fillHeight: true - } - } - } - - Item - { - id: settingsDB - Layout.fillWidth: parent.width - - GridLayout - { - id: dbGrid - columns: 2 - columnSpacing: 5 - rowSpacing: 9 - anchors.fill: parent - property string name: "database" - - - Label - { - text: qsTr("DB-Host:") - Layout.alignment: Qt.AlignRight - - } - - TextField - { - id: dbHost - placeholderText: qsTr("Hier Host eingeben") - Layout.fillWidth: true - property string name: "DB_HOST" - } - - Label - { - text: qsTr("DB-Port:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: dbPort - placeholderText: qsTr("Hier DB-Port eingeben") - Layout.fillWidth: true - property string name: "DB_PORT" - } - - Label - { - text: qsTr("DB-Name:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: dbName - placeholderText: qsTr("Hier DB-Name eingeben") - Layout.fillWidth: true - property string name: "DB_NAME" - } - - Label - { - text: qsTr("DB-Benutzername:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: dbUserName - placeholderText: qsTr("Hier DB-Benutzername eingeben") - Layout.fillWidth: true - property string name: "DB_USER" - - } - - Label - { - text: qsTr("DB-Passwort:") - Layout.alignment: Qt.AlignRight - } - - TextField - { - id: dbPassword - echoMode: TextInput.Password - placeholderText: qsTr("Hier DB-Passwort eingeben") - Layout.fillWidth: true - property string name: "DB_PASS" - } - - Item - { - Layout.fillHeight: true - } - } - } - } - - RowLayout - { - Layout.margins: 9 - - Item - { - Layout.fillWidth: true - } - - Button - { - id: cancelBtn - text: qsTr("Abbrechen") - onClicked: - { - Qt.quit() - } - } - - Button - { - id: submitBtn - text: qsTr("Weiter") - property var grids: [createUserGrid, dbGrid] - property var pyqcrm_conf: ({}) - onClicked: - { - if (bar.itemAt(bar.currentIndex) !== dbTab) - { - - bar.currentIndex = 1 - - } - - else - { - pyqcrm_conf = Qmldict.func(submitBtn.grids) - if (pyqcrm_conf) + admin = config.setConfig(pyqcrm_conf) + if (admin) { - config.setConfig(pyqcrm_conf) - appLoader.source = "Dashboard.qml" - - topBar.visible = true + firstStart.push("EncryptionKey.qml") + } + else + { + firstStart.push("AdminUserConfig.qml") } } } + else + { + pyqcrm_conf = Qmldict.func(submitBtn.grids) + if (pyqcrm_conf) + { + admin = config.addAdminUser(pyqcrm_conf) + if (admin) + { + appLoader.source = "Dashboard.qml" + topBar.visible = true + } + else + { + console.log("Konfiguration Admin fehlgeschlagen") + } + } + + } } } } - - Component.onCompleted: - { - appLoader.window.title = "PYQCRM - Einstellungen" - - } } diff --git a/doc/GUI-Mockups/GUI-FirstStart.pdf b/doc/GUI-Mockups/GUI-FirstStart.pdf index 9170d11d8a5cf11518d8c91e0888a2cb2f3fe5c6a1dd2b7d832b687cc2a2972b..4b8f8ad93c6eca46bf520bdee9542ec29feef2f644dbadaffe8b3c18b77f7f8b 100644 GIT binary patch delta 11265 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 delta 9758 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 Ss2m*JTpXx$bW$qPsQ&}+XJsY; diff --git a/doc/GUI-Mockups/GUI-FirstStart.rnote b/doc/GUI-Mockups/GUI-FirstStart.rnote index bb2a65b6ac5f52382a7772b6116d42487b21fc536b59f6b0a8335c597447b277..f0f9205e077b772619a56f777e5c5c62bef50b958e908f6fb17705f4e54a6a2e 100644 GIT binary patch literal 2891 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 literal 2255 zcmV;=2r%~_iwFP!00000|Lt8%Z{kWC{VP{qyG!+cWH+t5nAPY?qnS+$AqNaW4R&Ok zentHEd&-ccuhb#rivu*NMFKcJMb)WO$5r*&U+%ImWz#O|D!a-!6N2$9&!$CJWLI}t zS0(lJvCQ~KAg+ta=Xq1F zt7-h2pTAGU8qRmG*Spt;Z@MkIu54npr*+q64+qBW;zyZXeNqyq$6uqzKmD^ceAgDf zYsq8jD1KRduh(ELn=QVT(`}(>3c722TepkI7#cV$mThdrq*#?r->>y-)|SA1`p`4n z|3(dVl@dxA91VVZ^haH<9+>Nz`g4gYu5RlJor2Oo-DO{jDr!f4T#| z=&~*R;bY&(a?%T8vc9etJ-au>ayBl%b-Ut~3QW6@EAN<9YJ^&JO;NQ`OY!t#HiJfS zB4^I~JTmn7bALoy&$Jb}5}ZlxbF^l(+4K$izT8%5Ro79GclT|)S12>i{nYTo`UX;8 zESCqJ&bLBo%C=oM_=a`!rHnF1qlzZm^tF88R1CwZFoszHIyh5O(5#c6iF(Vfq7Kccy9h{gGWUP{4e>L}T;paDG?CxBD)V7M*0R=2k}E zTrTF-*7MP8Mbn{Jw0#c8>FW;PY8Kb)u8h(ey_nwrp^<;!{H|Os%Zf&;|P0$2ACUmqp?seA$w*xq%c95XO&l6wD)%QRjQ;tcj8I%Vb zj_PCk3)$Nn37Vh@dO6V1Cb?&F&jd}-I`^7sL3Na83fb2i z37Vh@`XJX%ACt$#cUULZE zCQb)60n3zyT;T=D0|xQ{ADHJpmmb_InMfVP18l(DRbjqhFmFgEur&dNxVI8e8go+Y z<@V``m~qSqnHz&+E}Z5*wck;#Pcw?{2)One6POU{q8R<zC%ZGLLyx3bI)U7mFOtX6tb^35;Q>*^i80n&HIj>3~|?) z(~1d)2%omhd!2$(ZT89#pNqNEg3paHOkP-6fAG7`tiu>r4uNKYnu>JW*>P_>3-Hz; zRDY9{O#%J^Mt?vYTZibU>V4dE`nucB0*|+w#@kNu$;))x*-`H5@iE72$c3^@%gfT} ziS9HP2;#wICNYrhGWk!b_e4B8_)6zFe)P16@6NmPpA=uEer+EnKSPK2~ zlb91ho5Gqt&~v`(6ee!(cscaC=_yYCBBw!d@mbMmup;J|QSWdg>M2hDLr&M@xPyCQ zhYGt(^1Rpf@wtJcB_&Uf(`Hq1oyl|r0|8CDfay)LfK2I;LaoR0ye>}cxmYLJ+u0p4`}9<$yHq0n2>y6 zNFTt)zsH0uE*!j1iXF%Y5Il80k4Yc3wu#lDd?2PplzE)$yf`0H@_}c_#Y~rr&}Z=y z)+TZXk*wezFPI8Q5rbDg(K@JR`^jprrz-%F$Hi zXsU7yRXK*L979!(p(@8vm1C&NF;wLks&WifIfkknOI41gD#uclW2wrqROMKzax7Ij zmZ}^}RgR@9$5EBzsLF9v - + @@ -1234,7 +1234,7 @@ - + @@ -1341,7 +1341,7 @@ - + @@ -1351,7 +1351,7 @@ - + @@ -2211,93 +2211,145 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/datenbank.pdf b/doc/datenbank.pdf index 133658cc7234e4fd4b0d18b1c616f2a12cb34d60ca87862ee56b9ad48e0f520a..2c35511f976d1ca80833d6974aa634aa996927b696da5984476f5584b234137c 100644 GIT binary patch delta 52549 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

)hqXZGP&_kR<=HTWji{cPWD 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

?g5$wBCa9awVOF=aS@a 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

YRPCO&Ck4{JA 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 z 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 baQNFF!=*d%9}+vRprEX9TvGC?slopTm}ho= diff --git a/doc/db_schemer_v1-pyqcrm-202411211531.sql b/doc/db_schemer_v1-pyqcrm-202411211531.sql new file mode 100644 index 0000000..33c343f --- /dev/null +++ b/doc/db_schemer_v1-pyqcrm-202411211531.sql @@ -0,0 +1,953 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19 Distrib 10.11.10-MariaDB, for Linux (x86_64) +-- +-- Host: bearybot.selfhost.co Database: pyqcrm +-- ------------------------------------------------------ +-- Server version 10.11.8-MariaDB-0ubuntu0.24.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `Entities` +-- + +DROP TABLE IF EXISTS `Entities`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `Entities` ( + `entityid` int(11) NOT NULL AUTO_INCREMENT, + `entity` varchar(35) NOT NULL, + PRIMARY KEY (`entityid`), + UNIQUE KEY `Entities_UNIQUE` (`entity`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `Entities` +-- + +LOCK TABLES `Entities` WRITE; +/*!40000 ALTER TABLE `Entities` DISABLE KEYS */; +/*!40000 ALTER TABLE `Entities` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `address` +-- + +DROP TABLE IF EXISTS `address`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `address` ( + `addressid` int(11) NOT NULL AUTO_INCREMENT, + `country` varchar(50) DEFAULT NULL, + `address` varchar(50) NOT NULL, + PRIMARY KEY (`addressid`), + UNIQUE KEY `address_unique` (`address`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `address` +-- + +LOCK TABLES `address` WRITE; +/*!40000 ALTER TABLE `address` DISABLE KEYS */; +/*!40000 ALTER TABLE `address` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `assignment` +-- + +DROP TABLE IF EXISTS `assignment`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `assignment` ( + `contractid` int(11) NOT NULL AUTO_INCREMENT, + `employeeid` int(11) NOT NULL, + UNIQUE KEY `assignment_unique` (`contractid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `assignment` +-- + +LOCK TABLES `assignment` WRITE; +/*!40000 ALTER TABLE `assignment` DISABLE KEYS */; +/*!40000 ALTER TABLE `assignment` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `business` +-- + +DROP TABLE IF EXISTS `business`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `business` ( + `businessid` int(11) NOT NULL AUTO_INCREMENT, + `company` varchar(100) NOT NULL, + `street` varchar(100) NOT NULL, + `postcodeid` int(11) DEFAULT NULL, + `phone` varchar(50) DEFAULT NULL, + `mobilephone` varchar(50) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `homepage` varchar(255) DEFAULT NULL, + `director` varchar(100) DEFAULT NULL, + `contactpersonid` int(11) DEFAULT NULL, + `info` varchar(500) DEFAULT NULL, + `btid` int(11) NOT NULL DEFAULT 1, + PRIMARY KEY (`businessid`), + UNIQUE KEY `customer_unique` (`email`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `business` +-- + +LOCK TABLES `business` WRITE; +/*!40000 ALTER TABLE `business` DISABLE KEYS */; +/*!40000 ALTER TABLE `business` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `businesstype` +-- + +DROP TABLE IF EXISTS `businesstype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `businesstype` ( + `btypeID` int(11) NOT NULL AUTO_INCREMENT, + `description` varchar(35) NOT NULL, + PRIMARY KEY (`btypeID`), + UNIQUE KEY `businesstype_unique` (`description`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `businesstype` +-- + +LOCK TABLES `businesstype` WRITE; +/*!40000 ALTER TABLE `businesstype` DISABLE KEYS */; +/*!40000 ALTER TABLE `businesstype` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `contact` +-- + +DROP TABLE IF EXISTS `contact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact` ( + `id` int(11) NOT NULL, + `contactpersonid` int(11) NOT NULL, + `businessid` tinyint(1) NOT NULL DEFAULT 1, + UNIQUE KEY `contact_unique` (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `contact` +-- + +LOCK TABLES `contact` WRITE; +/*!40000 ALTER TABLE `contact` DISABLE KEYS */; +/*!40000 ALTER TABLE `contact` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `contactperson` +-- + +DROP TABLE IF EXISTS `contactperson`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contactperson` ( + `contactpersonid` int(11) NOT NULL AUTO_INCREMENT, + `priorityid` int(11) DEFAULT NULL, + `lastname` varchar(35) NOT NULL, + `firstname` varchar(35) NOT NULL, + `phone` varchar(50) DEFAULT NULL, + `mobilephone` varchar(50) DEFAULT NULL, + `position` varchar(50) DEFAULT NULL, + `salutation` varchar(10) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `birthday` date DEFAULT NULL, + `active` tinyint(1) NOT NULL DEFAULT 1, + PRIMARY KEY (`contactpersonid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `contactperson` +-- + +LOCK TABLES `contactperson` WRITE; +/*!40000 ALTER TABLE `contactperson` DISABLE KEYS */; +/*!40000 ALTER TABLE `contactperson` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `contract` +-- + +DROP TABLE IF EXISTS `contract`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contract` ( + `contractid` int(11) NOT NULL AUTO_INCREMENT, + `jobdetailid` int(11) NOT NULL, + `tariffid` int(11) NOT NULL, + `officeid` int(11) NOT NULL COMMENT 'Kostenstelle', + `date` date NOT NULL, + PRIMARY KEY (`contractid`), + UNIQUE KEY `contract_unique` (`jobdetailid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `contract` +-- + +LOCK TABLES `contract` WRITE; +/*!40000 ALTER TABLE `contract` DISABLE KEYS */; +/*!40000 ALTER TABLE `contract` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `employee` +-- + +DROP TABLE IF EXISTS `employee`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `employee` ( + `employeeid` int(11) NOT NULL AUTO_INCREMENT, + `lastname` varchar(35) NOT NULL, + `firstname` varchar(35) NOT NULL, + `gender` varchar(30) DEFAULT NULL, + `maritalstatus` varchar(30) DEFAULT NULL, + `nationality` varchar(50) NOT NULL, + `birthday` date NOT NULL, + `street` varchar(100) NOT NULL, + `postcodeid` int(11) NOT NULL, + `phone` varchar(50) DEFAULT NULL, + `mobilephone` varchar(50) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `identificationid` int(11) NOT NULL, + `jobstatusid` int(11) NOT NULL, + PRIMARY KEY (`employeeid`), + UNIQUE KEY `employee_unique` (`identificationid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `employee` +-- + +LOCK TABLES `employee` WRITE; +/*!40000 ALTER TABLE `employee` DISABLE KEYS */; +/*!40000 ALTER TABLE `employee` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `identification` +-- + +DROP TABLE IF EXISTS `identification`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `identification` ( + `identificationid` int(11) NOT NULL AUTO_INCREMENT, + `number` varchar(50) NOT NULL, + `expiry` date NOT NULL, + `issued` date NOT NULL, + `authority` varchar(50) NOT NULL, + `typeid` int(11) NOT NULL, + PRIMARY KEY (`identificationid`), + UNIQUE KEY `identification_unique` (`number`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `identification` +-- + +LOCK TABLES `identification` WRITE; +/*!40000 ALTER TABLE `identification` DISABLE KEYS */; +/*!40000 ALTER TABLE `identification` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `identificationtype` +-- + +DROP TABLE IF EXISTS `identificationtype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `identificationtype` ( + `typeid` int(11) NOT NULL AUTO_INCREMENT, + `type` varchar(50) NOT NULL, + PRIMARY KEY (`typeid`), + UNIQUE KEY `identificationtype_unique` (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `identificationtype` +-- + +LOCK TABLES `identificationtype` WRITE; +/*!40000 ALTER TABLE `identificationtype` DISABLE KEYS */; +/*!40000 ALTER TABLE `identificationtype` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `invoice` +-- + +DROP TABLE IF EXISTS `invoice`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `invoice` ( + `invoiceid` int(11) NOT NULL AUTO_INCREMENT, + `issued` date NOT NULL COMMENT 'Rechnungsdatum', + `entry` date NOT NULL COMMENT 'Buchungsdatum', + `contractid` int(11) NOT NULL, + PRIMARY KEY (`invoiceid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `invoice` +-- + +LOCK TABLES `invoice` WRITE; +/*!40000 ALTER TABLE `invoice` DISABLE KEYS */; +/*!40000 ALTER TABLE `invoice` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `jobdetail` +-- + +DROP TABLE IF EXISTS `jobdetail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `jobdetail` ( + `jobdetailid` int(11) NOT NULL AUTO_INCREMENT, + `duration` decimal(10,0) NOT NULL, + `objectid` int(11) NOT NULL, + `period` varchar(15) NOT NULL, + `personnel` int(11) NOT NULL DEFAULT 1 COMMENT 'number of employees', + `price` decimal(10,0) NOT NULL, + PRIMARY KEY (`jobdetailid`), + UNIQUE KEY `jobdetail_unique` (`objectid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `jobdetail` +-- + +LOCK TABLES `jobdetail` WRITE; +/*!40000 ALTER TABLE `jobdetail` DISABLE KEYS */; +/*!40000 ALTER TABLE `jobdetail` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `jobstatus` +-- + +DROP TABLE IF EXISTS `jobstatus`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `jobstatus` ( + `jobstatusid` int(11) NOT NULL AUTO_INCREMENT, + `description` varchar(30) NOT NULL, + PRIMARY KEY (`jobstatusid`), + UNIQUE KEY `jobstatus_unique` (`description`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `jobstatus` +-- + +LOCK TABLES `jobstatus` WRITE; +/*!40000 ALTER TABLE `jobstatus` DISABLE KEYS */; +/*!40000 ALTER TABLE `jobstatus` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `logs` +-- + +DROP TABLE IF EXISTS `logs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `logs` ( + `logid` int(11) NOT NULL AUTO_INCREMENT, + `recordid` int(11) DEFAULT NULL, + `operationtype` varchar(100) NOT NULL, + `message` varchar(100) NOT NULL, + `logdate` datetime NOT NULL DEFAULT current_timestamp(), + PRIMARY KEY (`logid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `logs` +-- + +LOCK TABLES `logs` WRITE; +/*!40000 ALTER TABLE `logs` DISABLE KEYS */; +/*!40000 ALTER TABLE `logs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `medicalcare` +-- + +DROP TABLE IF EXISTS `medicalcare`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `medicalcare` ( + `medicalcareid` int(11) NOT NULL AUTO_INCREMENT, + `company` varchar(50) NOT NULL, + PRIMARY KEY (`medicalcareid`), + UNIQUE KEY `medicalcare_unique` (`company`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `medicalcare` +-- + +LOCK TABLES `medicalcare` WRITE; +/*!40000 ALTER TABLE `medicalcare` DISABLE KEYS */; +/*!40000 ALTER TABLE `medicalcare` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `object` +-- + +DROP TABLE IF EXISTS `object`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `object` ( + `objectid` int(11) NOT NULL AUTO_INCREMENT, + `street` varchar(100) NOT NULL, + `postcodeid` int(11) NOT NULL, + `contactpersonid` int(11) NOT NULL, + `businessid` int(11) NOT NULL, + PRIMARY KEY (`objectid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `object` +-- + +LOCK TABLES `object` WRITE; +/*!40000 ALTER TABLE `object` DISABLE KEYS */; +/*!40000 ALTER TABLE `object` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `offer` +-- + +DROP TABLE IF EXISTS `offer`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `offer` ( + `offerid` int(11) NOT NULL AUTO_INCREMENT, + `jobdetailid` int(11) NOT NULL, + `date` date NOT NULL, + PRIMARY KEY (`offerid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `offer` +-- + +LOCK TABLES `offer` WRITE; +/*!40000 ALTER TABLE `offer` DISABLE KEYS */; +/*!40000 ALTER TABLE `offer` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `offers` +-- + +DROP TABLE IF EXISTS `offers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `offers` ( + `offerid` int(11) NOT NULL, + `contractid` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Kreuztabelle Angebot - Auftrag'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `offers` +-- + +LOCK TABLES `offers` WRITE; +/*!40000 ALTER TABLE `offers` DISABLE KEYS */; +/*!40000 ALTER TABLE `offers` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `office` +-- + +DROP TABLE IF EXISTS `office`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `office` ( + `officeid` int(11) NOT NULL AUTO_INCREMENT, + `office` varchar(50) NOT NULL COMMENT 'Kostenstelle', + PRIMARY KEY (`officeid`), + UNIQUE KEY `office_unique` (`office`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Kostenstelle'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `office` +-- + +LOCK TABLES `office` WRITE; +/*!40000 ALTER TABLE `office` DISABLE KEYS */; +/*!40000 ALTER TABLE `office` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `permissions` +-- + +DROP TABLE IF EXISTS `permissions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `permissions` ( + `permissionid` int(11) NOT NULL AUTO_INCREMENT, + `permission` varchar(50) NOT NULL, + PRIMARY KEY (`permissionid`), + UNIQUE KEY `berechtigungen_unique` (`permission`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `permissions` +-- + +LOCK TABLES `permissions` WRITE; +/*!40000 ALTER TABLE `permissions` DISABLE KEYS */; +/*!40000 ALTER TABLE `permissions` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `personalrole` +-- + +DROP TABLE IF EXISTS `personalrole`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `personalrole` ( + `employeeid` int(11) NOT NULL, + `roleid` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Kreuztabelle'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `personalrole` +-- + +LOCK TABLES `personalrole` WRITE; +/*!40000 ALTER TABLE `personalrole` DISABLE KEYS */; +/*!40000 ALTER TABLE `personalrole` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `postcode` +-- + +DROP TABLE IF EXISTS `postcode`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `postcode` ( + `postcodeid` int(11) NOT NULL AUTO_INCREMENT, + `postcode` varchar(15) NOT NULL, + `addressid` int(11) NOT NULL, + PRIMARY KEY (`postcodeid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `postcode` +-- + +LOCK TABLES `postcode` WRITE; +/*!40000 ALTER TABLE `postcode` DISABLE KEYS */; +/*!40000 ALTER TABLE `postcode` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `role` ( + `roleid` int(11) NOT NULL AUTO_INCREMENT, + `description` varchar(50) NOT NULL, + PRIMARY KEY (`roleid`), + UNIQUE KEY `role_unique` (`description`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `role` +-- + +LOCK TABLES `role` WRITE; +/*!40000 ALTER TABLE `role` DISABLE KEYS */; +/*!40000 ALTER TABLE `role` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `roles` +-- + +DROP TABLE IF EXISTS `roles`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `roles` ( + `roleid` int(11) NOT NULL, + `permissionid` int(11) NOT NULL, + `entityid` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `roles` +-- + +LOCK TABLES `roles` WRITE; +/*!40000 ALTER TABLE `roles` DISABLE KEYS */; +/*!40000 ALTER TABLE `roles` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `salestax` +-- + +DROP TABLE IF EXISTS `salestax`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `salestax` ( + `salestaxid` varchar(20) NOT NULL, + `businessid` int(11) NOT NULL, + PRIMARY KEY (`salestaxid`), + UNIQUE KEY `salestax_unique` (`businessid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `salestax` +-- + +LOCK TABLES `salestax` WRITE; +/*!40000 ALTER TABLE `salestax` DISABLE KEYS */; +/*!40000 ALTER TABLE `salestax` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `service` +-- + +DROP TABLE IF EXISTS `service`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `service` ( + `servicetypeid` int(11) NOT NULL, + `servicedescid` int(11) NOT NULL, + `objectid` int(11) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `service` +-- + +LOCK TABLES `service` WRITE; +/*!40000 ALTER TABLE `service` DISABLE KEYS */; +/*!40000 ALTER TABLE `service` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `servicedesc` +-- + +DROP TABLE IF EXISTS `servicedesc`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `servicedesc` ( + `servicedescid` int(11) NOT NULL AUTO_INCREMENT, + `description` varchar(1000) NOT NULL, + PRIMARY KEY (`servicedescid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `servicedesc` +-- + +LOCK TABLES `servicedesc` WRITE; +/*!40000 ALTER TABLE `servicedesc` DISABLE KEYS */; +/*!40000 ALTER TABLE `servicedesc` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `servicetype` +-- + +DROP TABLE IF EXISTS `servicetype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `servicetype` ( + `servicetypeid` int(11) NOT NULL AUTO_INCREMENT, + `description` varchar(50) NOT NULL, + PRIMARY KEY (`servicetypeid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `servicetype` +-- + +LOCK TABLES `servicetype` WRITE; +/*!40000 ALTER TABLE `servicetype` DISABLE KEYS */; +/*!40000 ALTER TABLE `servicetype` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `socialsecurity` +-- + +DROP TABLE IF EXISTS `socialsecurity`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `socialsecurity` ( + `employeeid` int(11) NOT NULL, + `socialsecurityno` varchar(30) NOT NULL, + `medicalcareid` int(11) NOT NULL, + UNIQUE KEY `socialsecurity_unique` (`employeeid`), + UNIQUE KEY `socialsecurity_unique_1` (`socialsecurityno`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `socialsecurity` +-- + +LOCK TABLES `socialsecurity` WRITE; +/*!40000 ALTER TABLE `socialsecurity` DISABLE KEYS */; +/*!40000 ALTER TABLE `socialsecurity` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `tariff` +-- + +DROP TABLE IF EXISTS `tariff`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `tariff` ( + `tariffid` int(11) NOT NULL AUTO_INCREMENT, + `tariff` decimal(10,0) NOT NULL COMMENT 'Festgelegter Stundensatz', + PRIMARY KEY (`tariffid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Stundensatz Tabelle'; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `tariff` +-- + +LOCK TABLES `tariff` WRITE; +/*!40000 ALTER TABLE `tariff` DISABLE KEYS */; +/*!40000 ALTER TABLE `tariff` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `timetrack` +-- + +DROP TABLE IF EXISTS `timetrack`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `timetrack` ( + `employeeid` int(11) NOT NULL, + `start` datetime NOT NULL, + `stop` datetime NOT NULL, + `vacation` tinyint(1) NOT NULL DEFAULT 0 +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `timetrack` +-- + +LOCK TABLES `timetrack` WRITE; +/*!40000 ALTER TABLE `timetrack` DISABLE KEYS */; +/*!40000 ALTER TABLE `timetrack` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `users` +-- + +DROP TABLE IF EXISTS `users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `users` ( + `usersid` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL, + `password` varchar(150) NOT NULL, + `enabled` tinyint(1) NOT NULL DEFAULT 1, + `roleid` int(11) NOT NULL, + `gecos` varchar(75) DEFAULT NULL, + PRIMARY KEY (`usersid`), + UNIQUE KEY `users_unique` (`username`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `users` +-- + +LOCK TABLES `users` WRITE; +/*!40000 ALTER TABLE `users` DISABLE KEYS */; +/*!40000 ALTER TABLE `users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Dumping routines for database 'pyqcrm' +-- +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `addPermission` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `addPermission`(IN newpermission VARCHAR(50)) +BEGIN + IF NOT EXISTS (SELECT 1 FROM permissions WHERE permission = newpermission) THEN + INSERT INTO permissions(permission) VALUES(newpermission); + END IF; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `addRole` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `addRole`(IN newdescription VARCHAR(50)) +BEGIN + IF NOT EXISTS (SELECT 1 FROM `role` WHERE description = newdescription) THEN + INSERT INTO `role`(description) VALUES(newdescription); + END IF; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `createUser` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `createUser`(IN uname VARCHAR(35), IN password VARCHAR(150), IN gecos VARCHAR(75), IN admin BOOL) +BEGIN + DECLARE userrole INT; + SET userrole = 2; + IF admin = 1 THEN + SET userrole = 1; + END IF; + IF NOT EXISTS (SELECT 1 FROM users WHERE username = uname) THEN + INSERT INTO users(username, password, gecos, roleid) VALUES(uname, password, gecos, userrole); + END IF; + END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!50003 SET @saved_sql_mode = @@sql_mode */ ; +/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ; +/*!50003 DROP PROCEDURE IF EXISTS `getBusiness` */; +/*!50003 SET @saved_cs_client = @@character_set_client */ ; +/*!50003 SET @saved_cs_results = @@character_set_results */ ; +/*!50003 SET @saved_col_connection = @@collation_connection */ ; +/*!50003 SET character_set_client = utf8mb4 */ ; +/*!50003 SET character_set_results = utf8mb4 */ ; +/*!50003 SET collation_connection = utf8mb4_general_ci */ ; +DELIMITER ;; +CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `getBusiness`(IN businesstype VARCHAR(35)) +BEGIN + SELECT * FROM business; +END ;; +DELIMITER ; +/*!50003 SET sql_mode = @saved_sql_mode */ ; +/*!50003 SET character_set_client = @saved_cs_client */ ; +/*!50003 SET character_set_results = @saved_cs_results */ ; +/*!50003 SET collation_connection = @saved_col_connection */ ; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2024-11-21 15:31:16 diff --git a/js/qmldict.js b/js/qmldict.js index 1c95926..d1297a9 100644 --- a/js/qmldict.js +++ b/js/qmldict.js @@ -3,19 +3,18 @@ function func(tabs) { let pyqcrm_conf = {}; - for (var j = 0; j < tabs.length; j++) + + pyqcrm_conf[tabs.name] = {} + for (var i = 0; i < tabs.children.length; i++) { - pyqcrm_conf[tabs[j].name] = {} - for (var i = 0; i < tabs[j].children.length; i++) + if (tabs.children[i].name) { - if (tabs[j].children[i].name) - { - if (!tabs[j].children[i].text.trim()) - return false - pyqcrm_conf[tabs[j].name] [tabs[j].children[i].name] = tabs[j].children[i].text - } + if (!tabs.children[i].text.trim()) + return false + pyqcrm_conf[tabs.name] [tabs.children[i].name] = tabs.children[i].text } - } + } + return pyqcrm_conf } diff --git a/lib/ConfigLoader.py b/lib/ConfigLoader.py index c659117..d6c34ac 100644 --- a/lib/ConfigLoader.py +++ b/lib/ConfigLoader.py @@ -6,6 +6,7 @@ from PySide6.QtCore import QObject, Slot from .Vermasseln import Vermasseln import shutil from urllib.parse import urlparse +from .DB.DbManager import DbManager import os class ConfigLoader(QObject): @@ -31,31 +32,57 @@ class ConfigLoader(QObject): confile = confile[1:] shutil.copyfile(confile, self.config_dir+ '/pyqcrm.toml') - @Slot(dict) + @Slot(dict, result= bool) + def addAdminUser(self, admin_config): + print(admin_config) + return True + + @Slot(dict, result= bool) def setConfig(self, app_config): - try: - with open (self.config_dir + '/pyqcrm.toml', 'w') as f: - config = Vermasseln().oscarVermasseln(toml.dumps(app_config)) - f.write(config) - except FileNotFoundError: - print("Konnte die Konfiguration nicht speichern.") + + conf = self.__checkDbConnection(app_config) + if conf: + try: + with open (self.config_dir + '/pyqcrm.toml', 'w') as f: + config = Vermasseln().oscarVermasseln(toml.dumps(app_config)) + f.write(config) + except FileNotFoundError: + conf = False + print("Konnte die Konfiguration nicht speichern.") + conf = self.__checkAdminUser() + + return conf def __configLoad(self): try: with open (self.config_dir + '/pyqcrm.toml', 'r') as f: config = f.read() + self.__config = toml.loads(Vermasseln().entschluesseln(config)) except FileNotFoundError: print("Konnte die Konfiguration nicht laden.") - + except TypeError: + print("Invalid Configuration") + # except Exception as e: + # print(str(e)) def getConfig(self): return self.__config - def createConfig(self): + def __createConfig(self): with open(self.config_dir + '/pyqcrm.toml', "w") as datei: datei.write("[pyqcrm]") + + def __checkDbConnection(self, db_config): + con = DbManager(db_config['database']).getConnection() + if con: + return True + else: + return False + + def __checkAdminUser(self): + pass diff --git a/lib/Test.py b/lib/Test.py new file mode 100644 index 0000000..51017f9 --- /dev/null +++ b/lib/Test.py @@ -0,0 +1,13 @@ +import toml + + +class Singleton(object): + def __new__(cls): + if not hasattr(cls, "__instance"): + cls.__instance = super().__new__(cls) + return cls.__instance + + class DbManager(Singleton): + def __init__(self, dbconf): + toml. + diff --git a/lib/Vermasseln.py b/lib/Vermasseln.py index 8cf5648..888bda4 100644 --- a/lib/Vermasseln.py +++ b/lib/Vermasseln.py @@ -17,11 +17,19 @@ class Vermasseln: return storable_data def entschluesseln(self, data): - data_list = data.split(".") - encoded_data = [b64decode(x) for x in data_list] - cipher = self.__vermasslungsKobold() - decrypted_data = cipher.decrypt_and_verify(encoded_data[0], encoded_data[1]) - decrypted_data = decrypted_data.decode("utf-8") + try: + data_list = data.split(".") + encoded_data = [b64decode(x) for x in data_list] + cipher = self.__vermasslungsKobold() + decrypted_data = cipher.decrypt_and_verify(encoded_data[0], encoded_data[1]) + decrypted_data = decrypted_data.decode("utf-8") + except (ValueError, IndexError): + print("Configuration corrupted") + decrypted_data = None + + except Exception as e: + print(str(e)) + decrypted_data = None return decrypted_data diff --git a/pyqcrm.pyproject b/pyqcrm.pyproject index 0c05c02..419af33 100644 --- a/pyqcrm.pyproject +++ b/pyqcrm.pyproject @@ -25,6 +25,7 @@ "images/filter.svg", "images/menu.svg", "images/search.svg", - "lib/DB/DbManager.py" + "lib/DB/DbManager.py", + "Gui/DbConfiguration.qml" ] } diff --git a/qml.qrc b/qml.qrc index 118ad9f..92d05d0 100644 --- a/qml.qrc +++ b/qml.qrc @@ -2,5 +2,8 @@ Gui/TopBar.qml Gui/qmldir + Gui/AdminUserConfig.qml + Gui/EncryptionKey.qml + Gui/DbConfiguration.qml diff --git a/rc_pyqcrm.py b/rc_pyqcrm.py index 973ca3a..2f4738f 100644 --- a/rc_pyqcrm.py +++ b/rc_pyqcrm.py @@ -194,19 +194,19 @@ qt_resource_struct = b"\ \x00\x00\x000\x00\x02\x00\x00\x00\x06\x00\x00\x00\x03\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x93'.0\xcb\ +\x00\x00\x01\x93*\xc9x\xac\ \x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x00\x02\x9f\ -\x00\x00\x01\x93'\x05%\x0f\ +\x00\x00\x01\x93*\xd6\x0c\xbc\ \x00\x00\x00\x94\x00\x00\x00\x00\x00\x01\x00\x00\x03Y\ -\x00\x00\x01\x93'\x05%\x0f\ +\x00\x00\x01\x93*\xd6\x0c\xbd\ \x00\x00\x00\xc4\x00\x00\x00\x00\x00\x01\x00\x00\x05\x9a\ -\x00\x00\x01\x93'\x05%\x0f\ +\x00\x00\x01\x93*\xd6\x0c\xbc\ \x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\x01B\ -\x00\x00\x01\x93'\x05%\x0f\ +\x00\x00\x01\x93*\xd6\x0c\xbc\ \x00\x00\x00B\x00\x00\x00\x00\x00\x01\x00\x00\x00\x1c\ -\x00\x00\x01\x93'\x05%\x0f\ +\x00\x00\x01\x93*\xd6\x0c\xbd\ \x00\x00\x00\xae\x00\x00\x00\x00\x00\x01\x00\x00\x04\xd5\ -\x00\x00\x01\x93'\x05%\x0f\ +\x00\x00\x01\x93*\xd6\x0c\xbd\ " def qInitResources(): diff --git a/rc_qml.py b/rc_qml.py index ea8c560..8313f75 100644 --- a/rc_qml.py +++ b/rc_qml.py @@ -7,40 +7,212 @@ from PySide6 import QtCore qt_resource_data = b"\ \x00\x00\x01\xba\ -\x00\ -\x00\x068x\xda\xb5TMo\xd40\x10\xbd\xaf\xb4\xff\ -\xc1\xca\x09\x84\x94\x16!\x0eD\xea\x81]8 Z\xa1\ -\xa2J\x9c\x1dg6q\xd7\xf1d\xc7cJ\x85\xfa\xdf\ -q\xe2m\x1c\xba(\x04\xa1\xfa\x10\xe5\xcd\xc7\xf3{c\ -it\xdb!\xb1\xb8\xe6k\xaf\xd5~\xbd\xd2\xbf\xe1|\ -\x8b\x96\x09\x8d;I\x5c\xca{\xf4\x1c\xe2\xeb\xd5W\xbc\ -\x8bh\xbd\xfa\xb9^\x89ptU\x08\xc6n#)b\ -\xd7I\xa5m]\x88\xf3\x88\x1b\xd0u\xc3\x85x\xf36\ -\xe2;]qS\x88N\x12X\xce\x07\x14\x13\xd2\xaa\x06\ -\xc9Ep$\xefO \x1f\xcb\xc3\x7fJ\x18\xd8\xf1\x98\ -\xe9A/0\xa6\x1f\x1e\x7f6\x9e\x19\xed\x09g/\xba\ -\x92\xae\xd9\xa0\xa4*\x85wF\x06F&\x0f\x93\xeb\xe1\ -G\x88\x1d\xdc\x0d\xbd\xc8>\x84\x96\xb2o\xc9^N\xb8\ -\xda\xceh\xa5\xf9[46\xd2\xe6\x8f\x89~\xaeA\xe2\ -\x90\x17\xaf\xc4\xeb\xf3\xd4\x8bv\x1bJ\xf6P\x15)6\ -\x919\x8c\xa5\xeb.QV@\xb9CO\x0a\xc4\x85H\ -:\xf2Ck\xb2T\xff\xf0/\xfe\xf7\xdeV`\x97\x9b\ -\xff<\xd4\xcf8\x8f\x84\xcfh{\xeb\x1dc\x0bt#\ -K\x03\xee\xd4\xfbR\xe7X\xde\xc2\x9e\x97;\xff2\xd4\ -\xcf8\x8f\x84s\xce\x97\x8bk5K*A3\xd0r\ -\x85W\xa9iF\xe6\x84\xfa\x19_\xe9c`\xc6{\xf8\ -\xdfG\x92%\x81j\xac\xb7\xf5\xf21\xbc\x1f{f\xa6\ -\x90\x88\xff6\x84Q\xe6'\x86\xf6\x8f\x22\x9b~\xdbM\ -\x1f*.\xc7|\xa7\x8d9^\x97\xd4.r\xcd\xf2\x16\ -\xdd$\xa6\xd0\x1eg[\x88\xec@\xaa8\xd3\xad\xac\xc1\ -\x9d\xb5`}\xee\xbe\xd7\xd9\x93b\x85\x06)\xd4\x12T\ -\xd9\xfc\xe4\x8eZ\xa9\xdf\xcfW\x92jm\x0b\xf1\xee\xc9\ -\x0e\x1d>\xbf\x00<\x0b\xa5\xbd\ -\x00\x00\x00#\ +(\ +\xb5/\xfd`\xdd\x04\x85\x0d\x00\xb6\x13=\x1f0s\x1e\ +\xb3\xfb\x92H\xd4\xdc\x08\xd0\xcdc\xdb\xa9\xa2\xa0\xc4\xa4\ +\xbco\x17:w\xe6&\x14T4\x0c\x034\x003\x00\ +4\x00{5\x07\x9f\x8a\x9d\x83\xa1\xb9\x87UdHh\ +\xae\x9a\xf1\xedE}\x17W\x7fsTl\x0c\xc4:]\ +a\x8c~\xed\xcfF\xa8l\xff\xd9\x0c\x89i^\xac\x94\ +\xa7\xb4\xf7\xbe\xac\x18M(4A\x9b,]>\xbe(\ +/+\x10M\x90n#\x02\xb8\x85n\x9a{\x0fs\xf5\ +o\xeeWb(\xdf^@\xba\xd4\xec\xff\xba\x081\xf6\ +\x18\x96\xd4\x1b\xbe\xb9\xd2O\xf6\x8f}Z\xfe\xb4C\xe2\ +\xfc\x91'\xdf\x8f\xd6\xe45\x9c\x99\x9a\xb2\x9c\xd6\xe2l\ +\xf5\xd3\xca\x80L\xa6f\xd5\x84\x22im\xa4\x96h\xfc\ +\xbc6\x95\x9c\xa9\xed\xc8u9\x8a5\x8c\x19\x8c\x85\x10\ +\xcd\xcdX\xf9J\x1eV\xd1#\x8a\xdd[\xf6\x8b*\x0e\ +\x95\xeadk@\xb9Z+\x0e\xdc\xf3M\xd4\xdc\xecG\ +;\xb3/e\xc4Ho/\x0a-\xfe\x87\xa2\x9au\xc2\ +N\xa0\x91\x1dB\x8a!\x91))LZ\x03@\x84\x18\ +\xc6\xec\x1c\x03\x00\xb53i!-\xd8t\x01r\x1e\xc8\ +R\xc2\x99\x15\xe6\xba7\xf5\xb1\x85]\xd9d4\xe6\x0c\ +\x07\x95\x88^\xe0\xf7\x96\x0d\xeb\xc7\xa2\xaeQ\xbf\x96\xfd\ +\x93\x9c\xd3\x1cX\x94L7\x1bB\xb5\xb0\xc2tNJ\ +\x5c\xf0x\x18\x1d\xd3vQ\x82w\xa5\xf6\x18\xb9\xbb\xaa\ +\x8d)z\x08\x8f\xf5\xb8\x80\xe7*\xab\xbd\x0f\xd2\x92;\ +\xc4\xaa@\x8bdyf\xa1\x0d\xc2[\xc6\xa0QD\x18\ +\x97p\xb1\x85\xf3m3\x04\x05\x95=^\xd8SU\xe5\ +6\x9e\x93%!~\x0d`\x01_\xdb(\x5c\xa0\xa7\x82\ +\x03\xf0\xd6\xb8\x0d\x97\xd8n\x056\x87\xb4\xaf%\xb4\x0d\ +\x83\xfb\x1b\xe6\x8aD\x22w*\ +\x00\x00\x03,\ +i\ +mport QtQuick\x0aim\ +port QtQuick.Con\ +trols\x0aimport QtQ\ +uick.Layouts\x0a\x0aGr\ +idLayout\x0a{\x0a i\ +d: passEncryptKe\ +yGrid\x0a column\ +s: 2\x0a columnS\ +pacing: 5\x0a ro\ +wSpacing: 9\x0a \ +// anchors.fill:\ + parent\x0a\x0a pro\ +perty string nam\ +e: \x22pyqcrm\x22\x0a\x0a \ + Label\x0a {\x0a \ + text: qsTr(\ +\x22Encryption Key \ +eingeben\x22)\x0a \ + font.pixelSiz\ +e: 40\x0a La\ +yout.columnSpan:\ + 2\x0a Layou\ +t.alignment: Qt.\ +AlignHCenter\x0a \ + padding: 15\ +\x0a }\x0a\x0a\x0a Lab\ +el\x0a {\x0a \ + text: qsTr(\x22Enc\ +ryption Key:\x22)\x0a \ + Layout.al\ +ignment: Qt.Alig\ +nRight\x0a }\x0a\x0a \ + TextField\x0a \ +{\x0a id: pa\ +ssEncryptKey\x0a \ + placeholder\ +Text: qsTr(\x22Hier\ + Encryption Key \ +eingeben\x22)\x0a \ + Layout.fillWi\ +dth: true\x0a \ + height: 3\x0a \ + echoMode: Te\ +xtInput.Password\ +\x0a propert\ +y string name: \x22\ +ENCRYPT_KEY\x22\x0a \ + }\x0a\x0a Item\x0a \ + {\x0a Layou\ +t.fillHeight: tr\ +ue\x0a }\x0a}\x0a\ +\x00\x00\x00!\ m\ -odule gui\x0d\x0aTopBa\ -r 1.0 TopBar.qml\ -\x0d\x0a\ +odule gui\x0aTopBar\ + 1.0 TopBar.qml\x0a\ +\ +\x00\x00\x01\xd2\ +(\ +\xb5/\xfd`T\x06E\x0e\x006VE \x95\x1b\ +:\xbd\x94\x0a\x13I\xcc\x02\xb9\x88y\xd8\x9e\x053\x99\ +t\x01\xbd\x03\x9c\xf1\x18q\x02\xa4`\xa0 :\x00:\ +\x00;\x00\x0c\xafo\x1d\xad\x19&\x19\xca\x09\xdf\xc6\xb7\ +\xfe\xda\xc9\xe1\x1b'\x8d,z\xdb\x5c\xb5\x1c\x0f\x06\xcc\ +\xcc\x8f\xf4\xe4\xb4\x90\xf7\xde\xfd\xae\x8a\xa2\xe4\xd2j\xdf\ ++\x83z\x9elv\x97\xbf\xf0\xdb\xcam3\x16\xed\xd0\ +\xe4\xa8\xf7\xca\x09L\xde\x9aw\x94\xf6_\x9f\x0e\xf6x\ +\xc4\xbc?6&\x80\xbd\xee\x87\xe1\x87\xfaicQ2\ +\xf5\x8dX\xfc('\x86\xbdEg\xfb\xf7%@\xd5\x22\ +\x18j>\xb3\xc8Y\x86\x8d\xb5\xe6\xb3\x99m\xcf\xea\xb2\ +-i\xedt\x16\xa9\xa4=\x1f\x1f\xea\xeb}G\x9b\x98\ +\xc0\x04\xff\xd6J\xb0x\xa5\x82\x94\x91\xb3\xfd\xde\x8cJ\ +A\xfd\x85\xe1{o\xaeM\x1a\x0d\x0c\x9d\x22\x1c\x18\xf6\ +h\x06\xaf\xd4\xd5\xd6\x1f\xb1,\x05\xf5\x1d\xe7\x11\xd8\xb2\ +Nj'k\x09\xba7\xbe\x09\xe3\xb02\xb6o\xc6m\ +\x8f\xbe\xf3^8&\x0aJo\x91\x82\xa9Xl\xb5L\ +\x97U\xa96\x8bFw\xf6\x19v^N\x0d\xa5\x93\xe3\ +\x01J\xa0\x91\x11R\xce\x94\x88\x8d\x92(\x9b\x01p&\ +\x10\xab2\x0fZ\x99\xb8\xb1\x06\x06\x843+\xcd\x06\x5c\ +\xd3g\x83\xcec\x18b!$5\xb7q\xa5\x06\xd6A\ +\xa63M\x97\xcdDuH\x11\x0a\xb4\x94Q\xf3\xaa\xa2\ +\xc9bD\x0b\x11V?\x8e\x00\xc2\xe9l\xd46\x80\x22\ +\x8e\xd1\x9f\x9b\xe0A\x97\xcd\x17\xfa6\x16\x8a\x84;\xc4\ +\x84t\xc8#\x8b\x1d\x096\x95\xb2\xbb\xda\xa2*\xde,\ +\xbe\xc6\x8e\x1c\x08N2\xfcP(\x1c\x88.\x9a\xd8V\ +\x1d\xb5\x06\x82l\xcd\x85\x82\x86\xc6W~\xe3\xe5\x02X\ +\x9c[\xdcq\xca@{\xf0f\xady\xa9Z\x15\xbf\x87\ +\xe6\xe4\x05\xfd\xe5\xc2Z\x1e\xa6\x8a\x0f\xb8\x22!r\xf7\ +\x03\ +\x00\x00\x05C\ +i\ +mport QtQuick\x0aim\ +port QtQuick.Con\ +trols\x0aimport QtQ\ +uick.Layouts\x0a\x0aGr\ +idLayout\x0a{\x0a i\ +d: createUserGri\ +d\x0a columns: 2\ +\x0a columnSpaci\ +ng: 5\x0a rowSpa\ +cing: 9\x0a // a\ +nchors.fill: par\ +ent\x0a\x0a propert\ +y string name: \x22\ +pyqcrm\x22\x0a\x0a Lab\ +el\x0a {\x0a \ + text: qsTr(\x22Adm\ +in User erstelle\ +n\x22)\x0a font\ +.pixelSize: 40\x0a \ + Layout.co\ +lumnSpan: 2\x0a \ + Layout.align\ +ment: Qt.AlignHC\ +enter\x0a pa\ +dding: 15\x0a }\x0a\ +\x0a\x0a Label\x0a \ +{\x0a text: \ +qsTr(\x22Benutzerna\ +me:\x22)\x0a La\ +yout.alignment: \ +Qt.AlignRight\x0a \ + }\x0a\x0a TextFie\ +ld\x0a {\x0a \ + id: benutzerNam\ +e\x0a placeh\ +olderText: qsTr(\ +\x22Hier Benutzerna\ +me eingeben\x22)\x0a \ + Layout.fil\ +lWidth: true\x0a \ + height: 3\x0a \ + property \ +string name: \x22PY\ +QCRM_ADMIN\x22\x0a \ +}\x0a\x0a Label\x0a \ + {\x0a text:\ + qsTr(\x22Passwort:\ +\x22)\x0a Layou\ +t.alignment: Qt.\ +AlignRight\x0a }\ +\x0a\x0a TextField\x0a\ + {\x0a id\ +: password\x0a \ + echoMode: Tex\ +tInput.Password\x0a\ + placehol\ +derText: qsTr(\x22H\ +ier Passwort ein\ +geben\x22)\x0a \ +Layout.fillWidth\ +: true\x0a p\ +roperty string n\ +ame: \x22PYQCRM_ADM\ +IN_PASS\x22\x0a }\x0a \ + Label\x0a {\x0a \ + text: qsT\ +r(\x22Info:\x22)\x0a \ + Layout.alignm\ +ent: Qt.AlignRig\ +ht\x0a }\x0a\x0a Te\ +xtField\x0a {\x0a \ + id: gecos\x0a\ + placehol\ +derText: qsTr(\x22Z\ +us\xc3\xa4tzliche Info\ +\x22)\x0a Layou\ +t.fillWidth: tru\ +e\x0a proper\ +ty string name: \ +\x22PYQCRM_ADMIN_IN\ +FO\x22\x0a }\x0a\x0a I\ +tem\x0a {\x0a \ + Layout.fillHei\ +ght: true\x0a }\x0a\ +}\x0a\ " qt_resource_name = b"\ @@ -52,21 +224,42 @@ qt_resource_name = b"\ \x08\x8e<\xbc\ \x00T\ \x00o\x00p\x00B\x00a\x00r\x00.\x00q\x00m\x00l\ +\x00\x11\ +\x00\x11r\xdc\ +\x00E\ +\x00n\x00c\x00r\x00y\x00p\x00t\x00i\x00o\x00n\x00K\x00e\x00y\x00.\x00q\x00m\x00l\ +\ \x00\x06\ \x07\x84+\x02\ \x00q\ \x00m\x00l\x00d\x00i\x00r\ +\x00\x13\ +\x0aQ\xd8\x1c\ +\x00D\ +\x00b\x00C\x00o\x00n\x00f\x00i\x00g\x00u\x00r\x00a\x00t\x00i\x00o\x00n\x00.\x00q\ +\x00m\x00l\ +\x00\x13\ +\x01\xa7!\xbc\ +\x00A\ +\x00d\x00m\x00i\x00n\x00U\x00s\x00e\x00r\x00C\x00o\x00n\x00f\x00i\x00g\x00.\x00q\ +\x00m\x00l\ " qt_resource_struct = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x02\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00&\x00\x00\x00\x00\x00\x01\x00\x00\x01\xbe\ -\x00\x00\x01\x93>1\xe8\xfe\ -\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x93>1\xe8\xfc\ +\x00\x00\x01\x93c~Y\x0a\ +\x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x06\xe9\ +\x00\x00\x01\x93cIV\x9c\ +\x00\x00\x00N\x00\x00\x00\x00\x00\x01\x00\x00\x04\xee\ +\x00\x00\x01\x930& \x0f\ +\x00\x00\x00\x0c\x00\x04\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x93*\xc9x\xab\ +\x00\x00\x00`\x00\x04\x00\x00\x00\x01\x00\x00\x05\x13\ +\x00\x00\x01\x93cI\x95\xbf\ " def qInitResources():