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 9170d11..4b8f8ad 100644 Binary files a/doc/GUI-Mockups/GUI-FirstStart.pdf and b/doc/GUI-Mockups/GUI-FirstStart.pdf differ diff --git a/doc/GUI-Mockups/GUI-FirstStart.rnote b/doc/GUI-Mockups/GUI-FirstStart.rnote index bb2a65b..f0f9205 100644 Binary files a/doc/GUI-Mockups/GUI-FirstStart.rnote and b/doc/GUI-Mockups/GUI-FirstStart.rnote differ diff --git a/doc/datenbank.drawio b/doc/datenbank.drawio index b855334..3b0a806 100644 --- a/doc/datenbank.drawio +++ b/doc/datenbank.drawio @@ -1,6 +1,6 @@ - + @@ -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 133658c..2c35511 100644 Binary files a/doc/datenbank.pdf and b/doc/datenbank.pdf differ 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():