Compare commits

..

2 Commits

Author SHA256 Message Date
12eb6cf2f4 Einfach so 2024-11-25 15:19:46 +01:00
93efaabe6d FirstStart angepasst 2024-11-25 15:17:20 +01:00
17 changed files with 1606 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 MouseArea
{ {
id: mouseArea id: mouseArea
property bool hovered:false property bool hovered: false
anchors.fill: parent anchors.fill: parent
hoverEnabled: true 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 Item
{ {
ColumnLayout anchors.fill: parent
StackView
{ {
id: firstStart
anchors.fill: parent anchors.fill: parent
TabBar initialItem: "DbConfiguration.qml"
}
RowLayout
{
anchors.bottom: parent.bottom
anchors.margins: 9
width: parent.width
Item
{ {
id: bar
Layout.fillWidth: true Layout.fillWidth: true
}
TabButton Button
{
id: cancelBtn
text: qsTr("Abbrechen")
onClicked:
{ {
text: qsTr("Benutzer erstellen") Qt.quit()
}
TabButton
{
id: dbTab
text: qsTr("Datenbank einrichten")
}
onCurrentIndexChanged:
{
submitBtn.text = currentIndex === 0? "Weiter" : "Speichern"
} }
} }
StackLayout Button
{ {
Layout.fillWidth: true id: submitBtn
Layout.fillHeight: true text: qsTr("Speichern")
currentIndex: bar.currentIndex property var grids: firstStart.currentItem
Layout.margins: 9 property var pyqcrm_conf: ({})
id: stackl property var admin: Boolean
onClicked:
Item
{ {
id: createUser if (firstStart.currentItem.name === "database")
Layout.fillWidth: parent.width
GridLayout
{ {
id: createUserGrid pyqcrm_conf = Qmldict.func(submitBtn.grids)
columns: 2 if (pyqcrm_conf)
columnSpacing: 5
rowSpacing: 9
anchors.fill: parent
Layout.margins: 9
property string name: "pyqcrm"
Label
{ {
text: qsTr("Benutzername:") admin = config.setConfig(pyqcrm_conf)
Layout.alignment: Qt.AlignRight if (admin)
}
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)
{ {
config.setConfig(pyqcrm_conf) firstStart.push("EncryptionKey.qml")
appLoader.source = "Dashboard.qml" }
else
topBar.visible = true {
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"> <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"> <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> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="0" /> <mxCell id="1" parent="0" />
@@ -1234,7 +1234,7 @@
</mxGeometry> </mxGeometry>
</mxCell> </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"> <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>
<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"> <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" /> <mxGeometry y="30" width="180" height="30" as="geometry" />
@@ -1341,7 +1341,7 @@
<mxPoint x="-30" y="160" as="sourcePoint" /> <mxPoint x="-30" y="160" as="sourcePoint" />
<mxPoint x="20" y="110" as="targetPoint" /> <mxPoint x="20" y="110" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="-600" y="255" /> <mxPoint x="-600" y="230" />
<mxPoint x="-600" y="380" /> <mxPoint x="-600" y="380" />
</Array> </Array>
</mxGeometry> </mxGeometry>
@@ -1351,7 +1351,7 @@
<mxPoint x="-30" y="160" as="sourcePoint" /> <mxPoint x="-30" y="160" as="sourcePoint" />
<mxPoint x="20" y="110" as="targetPoint" /> <mxPoint x="20" y="110" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="-310" y="285" /> <mxPoint x="-310" y="260" />
<mxPoint x="-310" y="85" /> <mxPoint x="-310" y="85" />
</Array> </Array>
</mxGeometry> </mxGeometry>
@@ -2211,93 +2211,145 @@
<mxPoint x="1330" y="740" as="targetPoint" /> <mxPoint x="1330" y="740" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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" /> <mxGeometry x="-800" y="15" width="180" height="215" as="geometry" />
</mxCell> </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" /> <mxGeometry y="30" width="180" height="35" as="geometry" />
</mxCell> </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"> <mxGeometry width="30" height="35" as="geometry">
<mxRectangle width="30" height="35" as="alternateBounds" /> <mxRectangle width="30" height="35" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry x="30" width="150" height="35" as="geometry">
<mxRectangle width="150" height="35" as="alternateBounds" /> <mxRectangle width="150" height="35" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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" /> <mxGeometry y="65" width="180" height="30" as="geometry" />
</mxCell> </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"> <mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" /> <mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" /> <mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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" /> <mxGeometry y="95" width="180" height="30" as="geometry" />
</mxCell> </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"> <mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" /> <mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" /> <mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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" /> <mxGeometry y="125" width="180" height="30" as="geometry" />
</mxCell> </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"> <mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" /> <mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry x="30" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" /> <mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-680" y="250" as="sourcePoint" /> <mxPoint x="-680" y="250" as="sourcePoint" />
<mxPoint x="-630" y="200" as="targetPoint" /> <mxPoint x="-630" y="200" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </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" /> <mxGeometry x="-800" y="150" width="180" height="30" as="geometry" />
</mxCell> </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"> <mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" /> <mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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" /> <mxGeometry x="-800" y="180" width="180" height="30" as="geometry" />
</mxCell> </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"> <mxGeometry width="30" height="30" as="geometry">
<mxRectangle width="30" height="30" as="alternateBounds" /> <mxRectangle width="30" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry x="-770" y="200" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" /> <mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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"> <mxGeometry x="-770" y="170" width="150" height="30" as="geometry">
<mxRectangle width="150" height="30" as="alternateBounds" /> <mxRectangle width="150" height="30" as="alternateBounds" />
</mxGeometry> </mxGeometry>
</mxCell> </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> </root>
</mxGraphModel> </mxGraphModel>
</diagram> </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) function func(tabs)
{ {
let pyqcrm_conf = {}; 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] = {} if (tabs.children[i].name)
for (var i = 0; i < tabs[j].children.length; i++)
{ {
if (tabs[j].children[i].name) if (!tabs.children[i].text.trim())
{ return false
if (!tabs[j].children[i].text.trim()) pyqcrm_conf[tabs.name] [tabs.children[i].name] = tabs.children[i].text
return false
pyqcrm_conf[tabs[j].name] [tabs[j].children[i].name] = tabs[j].children[i].text
}
} }
} }
return pyqcrm_conf return pyqcrm_conf
} }

View File

@@ -6,6 +6,7 @@ from PySide6.QtCore import QObject, Slot
from .Vermasseln import Vermasseln from .Vermasseln import Vermasseln
import shutil import shutil
from urllib.parse import urlparse from urllib.parse import urlparse
from .DB.DbManager import DbManager
import os import os
class ConfigLoader(QObject): class ConfigLoader(QObject):
@@ -31,31 +32,57 @@ class ConfigLoader(QObject):
confile = confile[1:] confile = confile[1:]
shutil.copyfile(confile, self.config_dir+ '/pyqcrm.toml') 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): def setConfig(self, app_config):
try:
with open (self.config_dir + '/pyqcrm.toml', 'w') as f: conf = self.__checkDbConnection(app_config)
config = Vermasseln().oscarVermasseln(toml.dumps(app_config)) if conf:
f.write(config) try:
except FileNotFoundError: with open (self.config_dir + '/pyqcrm.toml', 'w') as f:
print("Konnte die Konfiguration nicht speichern.") 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): def __configLoad(self):
try: try:
with open (self.config_dir + '/pyqcrm.toml', 'r') as f: with open (self.config_dir + '/pyqcrm.toml', 'r') as f:
config = f.read() config = f.read()
self.__config = toml.loads(Vermasseln().entschluesseln(config)) self.__config = toml.loads(Vermasseln().entschluesseln(config))
except FileNotFoundError: except FileNotFoundError:
print("Konnte die Konfiguration nicht laden.") print("Konnte die Konfiguration nicht laden.")
except TypeError:
print("Invalid Configuration")
# except Exception as e:
# print(str(e))
def getConfig(self): def getConfig(self):
return self.__config return self.__config
def createConfig(self): def __createConfig(self):
with open(self.config_dir + '/pyqcrm.toml', "w") as datei: with open(self.config_dir + '/pyqcrm.toml', "w") as datei:
datei.write("[pyqcrm]") 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

View File

@@ -17,11 +17,19 @@ class Vermasseln:
return storable_data return storable_data
def entschluesseln(self, data): def entschluesseln(self, data):
data_list = data.split(".") try:
encoded_data = [b64decode(x) for x in data_list] data_list = data.split(".")
cipher = self.__vermasslungsKobold() encoded_data = [b64decode(x) for x in data_list]
decrypted_data = cipher.decrypt_and_verify(encoded_data[0], encoded_data[1]) cipher = self.__vermasslungsKobold()
decrypted_data = decrypted_data.decode("utf-8") 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 return decrypted_data

View File

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

View File

@@ -2,5 +2,8 @@
<qresource prefix="/"> <qresource prefix="/">
<file>Gui/TopBar.qml</file> <file>Gui/TopBar.qml</file>
<file>Gui/qmldir</file> <file>Gui/qmldir</file>
<file>Gui/AdminUserConfig.qml</file>
<file>Gui/EncryptionKey.qml</file>
<file>Gui/DbConfiguration.qml</file>
</qresource> </qresource>
</RCC> </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\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\x00\x00\x00\x00\x00\x00\x00\x00\x01\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\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\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\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\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\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\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(): def qInitResources():

267
rc_qml.py
View File

@@ -7,40 +7,212 @@ from PySide6 import QtCore
qt_resource_data = b"\ qt_resource_data = b"\
\x00\x00\x01\xba\ \x00\x00\x01\xba\
\x00\ (\
\x00\x068x\xda\xb5TMo\xd40\x10\xbd\xaf\xb4\xff\ \xb5/\xfd`\xdd\x04\x85\x0d\x00\xb6\x13=\x1f0s\x1e\
\xc1\xca\x09\x84\x94\x16!\x0eD\xea\x81]8 Z\xa1\ \xb3\xfb\x92H\xd4\xdc\x08\xd0\xcdc\xdb\xa9\xa2\xa0\xc4\xa4\
\xa2J\x9c\x1dg6q\xd7\xf1d\xc7cJ\x85\xfa\xdf\ \xbco\x17:w\xe6&\x14T4\x0c\x034\x003\x00\
q\xe2m\x1c\xba(\x04\xa1\xfa\x10\xe5\xcd\xc7\xf3{c\ 4\x00{5\x07\x9f\x8a\x9d\x83\xa1\xb9\x87UdHh\
it\xdb!\xb1\xb8\xe6k\xaf\xd5~\xbd\xd2\xbf\xe1|\ \xae\x9a\xf1\xedE}\x17W\x7fsTl\x0c\xc4:]\
\x8b\x96\x09\x8d;I\x5c\xca{\xf4\x1c\xe2\xeb\xd5W\xbc\ a\x8c~\xed\xcfF\xa8l\xff\xd9\x0c\x89i^\xac\x94\
\x8bh\xbd\xfa\xb9^\x89ptU\x08\xc6n#)b\ \xa7\xb4\xf7\xbe\xac\x18M(4A\x9b,]>\xbe(\
\xd7I\xa5m]\x88\xf3\x88\x1b\xd0u\xc3\x85x\xf36\ /+\x10M\x90n#\x02\xb8\x85n\x9a{\x0fs\xf5\
\xe2;]qS\x88N\x12X\xce\x07\x14\x13\xd2\xaa\x06\ o\xeeWb(\xdf^@\xba\xd4\xec\xff\xba\x081\xf6\
\xc9Ep$\xefO \x1f\xcb\xc3\x7fJ\x18\xd8\xf1\x98\ \x18\x96\xd4\x1b\xbe\xb9\xd2O\xf6\x8f}Z\xfe\xb4C\xe2\
\xe9A/0\xa6\x1f\x1e\x7f6\x9e\x19\xed\x09g/\xba\ \xfc\x91'\xdf\x8f\xd6\xe45\x9c\x99\x9a\xb2\x9c\xd6\xe2l\
\x92\xae\xd9\xa0\xa4*\x85wF\x06F&\x0f\x93\xeb\xe1\ \xf5\xd3\xca\x80L\xa6f\xd5\x84\x22im\xa4\x96h\xfc\
G\x88\x1d\xdc\x0d\xbd\xc8>\x84\x96\xb2o\xc9^N\xb8\ \xbc6\x95\x9c\xa9\xed\xc8u9\x8a5\x8c\x19\x8c\x85\x10\
\xda\xceh\xa5\xf9[46\xd2\xe6\x8f\x89~\xaeA\xe2\ \xcd\xcdX\xf9J\x1eV\xd1#\x8a\xdd[\xf6\x8b*\x0e\
\x90\x17\xaf\xc4\xeb\xf3\xd4\x8bv\x1bJ\xf6P\x15)6\ \x95\xeadk@\xb9Z+\x0e\xdc\xf3M\xd4\xdc\xecG\
\x919\x8c\xa5\xeb.QV@\xb9CO\x0a\xc4\x85H\ ;\xb3/e\xc4Ho/\x0a-\xfe\x87\xa2\x9au\xc2\
:\xf2Ck\xb2T\xff\xf0/\xfe\xf7\xdeV`\x97\x9b\ N\xa0\x91\x1dB\x8a!\x91))LZ\x03@\x84\x18\
\xff<\xd4\xcf8\x8f\x84\xcfh{\xeb\x1dc\x0bt#\ \xc6\xec\x1c\x03\x00\xb53i!-\xd8t\x01r\x1e\xc8\
K\x03\xee\xd4\xfbR\xe7X\xde\xc2\x9e\x97;\xff2\xd4\ R\xc2\x99\x15\xe6\xba7\xf5\xb1\x85]\xd9d4\xe6\x0c\
\xcf8\x8f\x84s\xce\x97\x8bk5K*A3\xd0r\ \x07\x95\x88^\xe0\xf7\x96\x0d\xeb\xc7\xa2\xaeQ\xbf\x96\xfd\
\x85W\xa9iF\xe6\x84\xfa\x19_\xe9c`\xc6{\xf8\ \x93\x9c\xd3\x1cX\x94L7\x1bB\xb5\xb0\xc2tNJ\
\xdfG\x92%\x81j\xac\xb7\xf5\xf21\xbc\x1f{f\xa6\ \x5c\xf0x\x18\x1d\xd3vQ\x82w\xa5\xf6\x18\xb9\xbb\xaa\
\x90\x88\xff6\x84Q\xe6'\x86\xf6\x8f\x22\x9b~\xdbM\ \x8d)z\x08\x8f\xf5\xb8\x80\xe7*\xab\xbd\x0f\xd2\x92;\
\x1f*.\xc7|\xa7\x8d9^\x97\xd4.r\xcd\xf2\x16\ \xc4\xaa@\x8bdyf\xa1\x0d\xc2[\xc6\xa0QD\x18\
\xdd$\xa6\xd0\x1eg[\x88\xec@\xaa8\xd3\xad\xac\xc1\ \x97p\xb1\x85\xf3m3\x04\x05\x95=^\xd8SU\xe5\
\x9d\xb5`}\xee\xbe\xd7\xd9\x93b\x85\x06)\xd4\x12T\ 6\x9e\x93%!~\x0d`\x01_\xdb(\x5c\xa0\xa7\x82\
\xd9\xfc\xe4\x8eZ\xa9\xdf\xcfW\x92jm\x0b\xf1\xee\xc9\ \x03\xf0\xd6\xb8\x0d\x97\xd8n\x056\x87\xb4\xaf%\xb4\x0d\
\x0e\x1d>\xbf\x00<\x0b\xa5\xbd\ \x83\xfb\x1b\xe6\x8aD\x22w*\
\x00\x00\x00#\ \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\ m\
odule gui\x0d\x0aTopBa\ odule gui\x0aTopBar\
r 1.0 TopBar.qml\ 1.0 TopBar.qml\x0a\
\x0d\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"\ qt_resource_name = b"\
@@ -52,21 +224,42 @@ qt_resource_name = b"\
\x08\x8e<\xbc\ \x08\x8e<\xbc\
\x00T\ \x00T\
\x00o\x00p\x00B\x00a\x00r\x00.\x00q\x00m\x00l\ \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\ \x00\x06\
\x07\x84+\x02\ \x07\x84+\x02\
\x00q\ \x00q\
\x00m\x00l\x00d\x00i\x00r\ \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"\ qt_resource_struct = b"\
\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \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\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\
\x00\x00\x00&\x00\x00\x00\x00\x00\x01\x00\x00\x01\xbe\ \x00\x00\x00&\x00\x00\x00\x00\x00\x01\x00\x00\x01\xbe\
\x00\x00\x01\x93>1\xe8\xfe\ \x00\x00\x01\x93c~Y\x0a\
\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\ \x00\x00\x00\x8c\x00\x00\x00\x00\x00\x01\x00\x00\x06\xe9\
\x00\x00\x01\x93>1\xe8\xfc\ \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(): def qInitResources():