diff --git a/Gui/AdminUserConfig.qml b/Gui/AdminUserConfig.qml index 2bcc4ba..5d9a3ca 100644 --- a/Gui/AdminUserConfig.qml +++ b/Gui/AdminUserConfig.qml @@ -10,7 +10,7 @@ GridLayout rowSpacing: 9 // anchors.fill: parent - property string name: "pyqcrm" + property string name: "user" Label { @@ -34,7 +34,7 @@ GridLayout placeholderText: qsTr("Hier Benutzername eingeben") Layout.fillWidth: true height: 3 - property string name: "PYQCRM_ADMIN" + property string name: "PYQCRM_USER" } Label @@ -49,7 +49,7 @@ GridLayout echoMode: TextInput.Password placeholderText: qsTr("Hier Passwort eingeben") Layout.fillWidth: true - property string name: "PYQCRM_ADMIN_PASS" + property string name: "PYQCRM_USER_PASS" } Label { @@ -62,7 +62,7 @@ GridLayout id: gecos placeholderText: qsTr("Zusätzliche Info") Layout.fillWidth: true - property string name: "PYQCRM_ADMIN_INFO" + property string name: "PYQCRM_USER_INFO" } Item diff --git a/Gui/DbConfiguration.qml b/Gui/DbConfiguration.qml index db7490f..a1c1a93 100644 --- a/Gui/DbConfiguration.qml +++ b/Gui/DbConfiguration.qml @@ -49,6 +49,7 @@ GridLayout id: dbPort placeholderText: qsTr("Hier DB-Port eingeben") Layout.fillWidth: true + validator: IntValidator{bottom: 1025; top: 65535;} property string name: "DB_PORT" } diff --git a/Gui/firststart.qml b/Gui/firststart.qml index b6d2e71..e6d81f9 100644 --- a/Gui/firststart.qml +++ b/Gui/firststart.qml @@ -1,6 +1,7 @@ import QtQuick import QtQuick.Layouts import QtQuick.Controls +import QtQuick.Dialogs import "../js/qmldict.js" as Qmldict @@ -22,6 +23,66 @@ import "../js/qmldict.js" as Qmldict Item { + Component.onCompleted: + { + config.dbConnectionError.connect(onDbConnectionError) + config.adminUserError.connect(onAdminUserError) + } + + function onDbConnectionError(msg, success) + { + if (!success) + conErrDialog.open() + } + + function onAdminUserError(msg, success) + { + if (success) + { + encryptPwDialog.open() + } + else + firstStart.push("AdminUserConfig.qml") + } + + + MessageDialog + { + id: conErrDialog + text: qsTr("Datenbankverbindung fehlgeschlagen") + + title: qsTr("Datenbank Verbindung") + + + } + Dialog + { + id: encryptPwDialog + modal: true + title: qsTr("Encryption Key") + anchors.centerIn: parent + standardButtons: Dialog.Ok | Dialog.Cancel + onAccepted: config.setEncyrptKey(encryptPassword.text) + ColumnLayout + { + RowLayout + { + Label + { + text: qsTr("Encryption Key eingeben:") + } + + TextField + { + id: encryptPassword + echoMode: TextInput.Password + implicitWidth: 300 + placeholderText: qsTr("Hier Encryption Key eingeben") + } + } + } + } + anchors.fill: parent StackView { @@ -66,14 +127,7 @@ Item if (pyqcrm_conf) { admin = config.setConfig(pyqcrm_conf) - if (admin) - { - firstStart.push("EncryptionKey.qml") - } - else - { - firstStart.push("AdminUserConfig.qml") - } + } } else diff --git a/Gui/main.qml b/Gui/main.qml index 428b352..42c14b8 100644 --- a/Gui/main.qml +++ b/Gui/main.qml @@ -106,11 +106,6 @@ ApplicationWindow implicitWidth: 300 } } - } - - - - } } diff --git a/doc/db_schemer_v1.1-pyqcrm-202411261349.sql b/doc/db_schemer_v1.1-pyqcrm-202411261349.sql new file mode 100644 index 0000000..dcfe7f6 --- /dev/null +++ b/doc/db_schemer_v1.1-pyqcrm-202411261349.sql @@ -0,0 +1,995 @@ +/*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 `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 `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 AUTO_INCREMENT=5 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 */; +INSERT INTO `entities` VALUES +(1,'business'), +(3,'contactperson'), +(2,'employee'), +(4,'object'); +/*!40000 ALTER TABLE `entities` 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 AUTO_INCREMENT=5 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 */; +INSERT INTO `permissions` VALUES +(4,'delete'), +(1,'read'), +(3,'update'), +(2,'write'); +/*!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 AUTO_INCREMENT=3 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 */; +INSERT INTO `role` VALUES +(1,'adminrole'), +(2,'userrole'); +/*!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 */; +INSERT INTO `roles` VALUES +(1,1,1), +(1,2,1), +(1,3,1), +(1,4,1), +(1,1,2), +(1,2,2), +(1,3,2), +(1,4,2), +(1,1,3), +(1,2,3), +(1,3,3), +(1,4,3), +(1,1,4), +(1,2,4), +(1,3,4), +(1,4,4), +(2,1,1), +(2,2,1), +(2,3,1), +(2,1,2), +(2,2,2), +(2,3,2), +(2,1,3), +(2,2,3), +(2,3,3), +(2,1,4), +(2,2,4), +(2,3,4); +/*!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-26 13:49:32 diff --git a/lib/ConfigLoader.py b/lib/ConfigLoader.py index d6c34ac..045851d 100644 --- a/lib/ConfigLoader.py +++ b/lib/ConfigLoader.py @@ -2,15 +2,26 @@ import toml from platformdirs import user_config_dir from pathlib import Path -from PySide6.QtCore import QObject, Slot +from PySide6.QtCore import QObject, Slot, Signal from .Vermasseln import Vermasseln import shutil from urllib.parse import urlparse from .DB.DbManager import DbManager import os +from Crypto.Random import get_random_bytes +from base64 import b64encode, b64decode +from .DB.UserManager import UserManager +from .PyqcrmFlags import PyqcrmFlags + + class ConfigLoader(QObject): __config = None + __version = "0.1-alpha" + + + dbConnectionError = Signal(str, bool) + adminUserError = Signal(str, bool) def __init__(self): super().__init__() @@ -33,56 +44,69 @@ class ConfigLoader(QObject): shutil.copyfile(confile, self.config_dir+ '/pyqcrm.toml') @Slot(dict, result= bool) - def addAdminUser(self, admin_config): - print(admin_config) + def addAdminUser(self, user_config): + admin = UserManager(user_config["user"], PyqcrmFlags.ADMIN).createUser() return True @Slot(dict, result= bool) def setConfig(self, app_config): - + base_conf = self.__initializeConfig() 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() + app_config = toml.dumps(app_config) - return conf + if conf: + app_config = base_conf + app_config + self.__config = toml.loads(app_config) + self.__saveConfig() + conf = self.__checkAdminUser() 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)) + print(f"Invalid Configuration: {__file__}") + except Exception as e: + print(str(e)) def getConfig(self): - return self.__config - def __createConfig(self): + def __initializeConfig(self): + encrypt_key = b64encode(get_random_bytes(32)).decode("utf-8") + conf = f"[pyqcrm]\nVERSION = \"{self.__version}\"\nENCRYPTION_KEY = \"{encrypt_key}\"\n\n" + return conf - 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: + self.dbConnectionError.emit("Connection OK", True) return True else: + self.dbConnectionError.emit("Connection fehlgeschlagen", False) return False def __checkAdminUser(self): - pass + + self.adminUserError.emit("Kein Admin vorhanden", False) + + @Slot(str) + def setEncyrptKey(self, key): + self.__config['pyqcrm']['ENCRYPTION_KEY'] = key + self.__saveConfig() + + def __saveConfig(self): + try: + with open (self.config_dir + '/pyqcrm.toml', 'w') as f: + config = Vermasseln().oscarVermasseln(toml.dumps(self.__config)) + f.write(config) + except FileNotFoundError: + print("Konnte die Konfiguration nicht speichern.") + + diff --git a/lib/DB/DbManager.py b/lib/DB/DbManager.py index 521e4f0..c0980e7 100644 --- a/lib/DB/DbManager.py +++ b/lib/DB/DbManager.py @@ -1,5 +1,5 @@ # This Python file uses the following encoding: utf-8 -import mysql.connector +import mariadb class DbManager(object): __connection = None @@ -14,6 +14,12 @@ class DbManager(object): return cls.__dbmanager def getConnection(cls): + if not cls.__connection: + try: + cls.__connection = mariadb.connect(**cls.__con_param) + + except mariadb.Error as e: + print("Connection parameters are wrong: {e}") return cls.__connection def __initializeConfig(cls, dbconf): @@ -21,6 +27,6 @@ class DbManager(object): 'port': int (dbconf['DB_PORT']), 'host': dbconf['DB_HOST'], 'database': dbconf['DB_NAME'] } - cls.__connection = mysql.connector.connect(**cls.__con_param) + diff --git a/lib/DB/UserManager.py b/lib/DB/UserManager.py new file mode 100644 index 0000000..865ccd2 --- /dev/null +++ b/lib/DB/UserManager.py @@ -0,0 +1,40 @@ +from .DbManager import DbManager +from ..PyqcrmFlags import PyqcrmFlags + + + +class UserManager(): + + def __init__(self, user_config, role): + self.__con = DbManager().getConnection() + self.__cur = self.__con.cursor() + self.__username = user_config["PYQCRM_USER"] + self.__password = user_config["PYQCRM_USER_PASS"] + self.__info = user_config["PYQCRM_USER_INFO"] + self.__role = role if role == PyqcrmFlags.ADMIN else 0 + + + def createUser(self): + self.__cur.callproc("createUser", (self.__username, self.__password, self.__info, self.__role)) + self.__con.commit() + self.__closeConnection() + + def getUser(self): + self.__closeConnection() + + def getUsers(self): + self.__closeConnection() + + def delUser(self): + self.__closeConnection() + + def updateUser(self): + self.__closeConnection() + + def disableUser(self): + self.__closeConnection() + + def __closeConnection(self): + self.__cur.close() + self.__con.close() + diff --git a/lib/PyqcrmFlags.py b/lib/PyqcrmFlags.py new file mode 100644 index 0000000..de8e99a --- /dev/null +++ b/lib/PyqcrmFlags.py @@ -0,0 +1,6 @@ +from enum import IntFlag + + +class PyqcrmFlags(IntFlag): + ADMIN = 1 + USER = 2 diff --git a/lib/Vermasseln.py b/lib/Vermasseln.py index 888bda4..cf0ae44 100644 --- a/lib/Vermasseln.py +++ b/lib/Vermasseln.py @@ -23,8 +23,8 @@ class Vermasseln: 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") + except (ValueError, IndexError) as e: + print(f"Configuration corrupted: {str(e)}") decrypted_data = None except Exception as e: diff --git a/pyqcrm.pyproject b/pyqcrm.pyproject index 419af33..9ecf4df 100644 --- a/pyqcrm.pyproject +++ b/pyqcrm.pyproject @@ -26,6 +26,8 @@ "images/menu.svg", "images/search.svg", "lib/DB/DbManager.py", - "Gui/DbConfiguration.qml" + "Gui/DbConfiguration.qml", + "lib/DB/UserManager.py", + "lib/PyqcrmFlags.py" ] } diff --git a/requirements.txt b/requirements.txt index bb7ac07..b95e0fa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ platformdirs pycryptodome psutil toml -mysql-connector-python +mariadb