FirstStart angepasst

This commit is contained in:
2024-11-25 15:17:20 +01:00
parent 304f9cabc5
commit 93efaabe6d
18 changed files with 1619 additions and 325 deletions

72
Gui/AdminUserConfig.qml Normal file
View File

@@ -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
}
}

View File

@@ -182,7 +182,7 @@ Item {
MouseArea
{
id: mouseArea
property bool hovered:false
property bool hovered: false
anchors.fill: parent
hoverEnabled: true

104
Gui/DbConfiguration.qml Normal file
View File

@@ -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
}
}

45
Gui/EncryptionKey.qml Normal file
View File

@@ -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
}
}

View File

@@ -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"
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -1,6 +1,6 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17">
<diagram name="Seite-1" id="krh1Wum05D0y0HCIq7V8">
<mxGraphModel dx="1979" dy="664" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<mxGraphModel dx="1815" dy="569" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -1234,7 +1234,7 @@
</mxGeometry>
</mxCell>
<mxCell id="DMnziE9b4w_ej3E0RpvA-43" value="KreuzRolle" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="-560" y="180" width="180" height="120" as="geometry" />
<mxGeometry x="-560" y="155" width="180" height="145" as="geometry" />
</mxCell>
<mxCell id="DMnziE9b4w_ej3E0RpvA-44" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="DMnziE9b4w_ej3E0RpvA-43" vertex="1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
@@ -1341,7 +1341,7 @@
<mxPoint x="-30" y="160" as="sourcePoint" />
<mxPoint x="20" y="110" as="targetPoint" />
<Array as="points">
<mxPoint x="-600" y="255" />
<mxPoint x="-600" y="230" />
<mxPoint x="-600" y="380" />
</Array>
</mxGeometry>
@@ -1351,7 +1351,7 @@
<mxPoint x="-30" y="160" as="sourcePoint" />
<mxPoint x="20" y="110" as="targetPoint" />
<Array as="points">
<mxPoint x="-310" y="285" />
<mxPoint x="-310" y="260" />
<mxPoint x="-310" y="85" />
</Array>
</mxGeometry>
@@ -2211,93 +2211,145 @@
<mxPoint x="1330" y="740" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-5" value="Users" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-5" value="Users" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" parent="1" vertex="1">
<mxGeometry x="-800" y="15" width="180" height="215" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-6" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-5">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-6" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" parent="erIxmIpkXy-mj_C2YGJ2-5" vertex="1">
<mxGeometry y="30" width="180" height="35" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-7" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-6">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-7" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-6" vertex="1">
<mxGeometry width="30" height="35" as="geometry">
<mxRectangle width="30" height="35" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-8" value="UsersID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-6">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-8" value="UsersID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-6" vertex="1">
<mxGeometry x="30" width="150" height="35" as="geometry">
<mxRectangle width="150" height="35" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-9" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-5">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-9" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="erIxmIpkXy-mj_C2YGJ2-5" vertex="1">
<mxGeometry y="65" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-10" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-9">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-10" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-9" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-11" value="username" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-9">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-11" value="username" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-9" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-12" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-5">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-12" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="erIxmIpkXy-mj_C2YGJ2-5" vertex="1">
<mxGeometry y="95" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-13" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-12">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-13" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-12" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-14" value="password" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-12">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-14" value="password" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-12" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-15" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-5">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-15" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="erIxmIpkXy-mj_C2YGJ2-5" vertex="1">
<mxGeometry y="125" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-16" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-15">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-16" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-15" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-17" value="roleID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-15">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-17" value="roleID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-15" vertex="1">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-19" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="DMnziE9b4w_ej3E0RpvA-30" target="erIxmIpkXy-mj_C2YGJ2-5">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-19" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="DMnziE9b4w_ej3E0RpvA-30" target="erIxmIpkXy-mj_C2YGJ2-5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-680" y="250" as="sourcePoint" />
<mxPoint x="-630" y="200" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-29" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="1">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-29" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="1" vertex="1">
<mxGeometry x="-800" y="150" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-30" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-29">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-30" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-29" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-32" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="1">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-32" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" parent="1" vertex="1">
<mxGeometry x="-800" y="180" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-33" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="erIxmIpkXy-mj_C2YGJ2-32">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-33" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" parent="erIxmIpkXy-mj_C2YGJ2-32" vertex="1">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-34" value="gecos" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=1;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-34" value="gecos" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=1;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-770" y="200" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="erIxmIpkXy-mj_C2YGJ2-31" value="enabled" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=1;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="erIxmIpkXy-mj_C2YGJ2-31" value="enabled" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=1;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-770" y="170" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-1" value="Entities" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
<mxGeometry x="-260" y="40" width="180" height="90" as="geometry" />
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-2" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-1">
<mxGeometry y="30" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-3" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-2">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-4" value="entitiesID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-2">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-5" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-1">
<mxGeometry y="60" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-6" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-5">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-7" value="entity" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-5">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-17" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="1">
<mxGeometry x="-560" y="270" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-18" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-17">
<mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-19" value="entitiesID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=1;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="Ik7nW2LkiDOI4_vW6V7N-17">
<mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry>
</mxCell>
<mxCell id="Ik7nW2LkiDOI4_vW6V7N-20" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Ik7nW2LkiDOI4_vW6V7N-17" target="Ik7nW2LkiDOI4_vW6V7N-2">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-260" y="290" as="sourcePoint" />
<mxPoint x="-210" y="240" as="targetPoint" />
<Array as="points">
<mxPoint x="-290" y="285" />
<mxPoint x="-290" y="85" />
</Array>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>

Binary file not shown.

View File

@@ -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

View File

@@ -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
}

View File

@@ -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

13
lib/Test.py Normal file
View File

@@ -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.

View File

@@ -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

View File

@@ -25,6 +25,7 @@
"images/filter.svg",
"images/menu.svg",
"images/search.svg",
"lib/DB/DbManager.py"
"lib/DB/DbManager.py",
"Gui/DbConfiguration.qml"
]
}

View File

@@ -2,5 +2,8 @@
<qresource prefix="/">
<file>Gui/TopBar.qml</file>
<file>Gui/qmldir</file>
<file>Gui/AdminUserConfig.qml</file>
<file>Gui/EncryptionKey.qml</file>
<file>Gui/DbConfiguration.qml</file>
</qresource>
</RCC>

View File

@@ -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():

267
rc_qml.py
View File

@@ -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():