Compare commits

2 Commits

Author SHA256 Message Date
04ad1981e1 Adding documentation comments for doxygen (#1) 2025-03-21 16:27:51 +01:00
d300e9c92a TeroStyle - Theme initial try 2025-03-13 15:04:53 +01:00
172 changed files with 27372 additions and 11134 deletions

17
.idea/QtSettings.xml generated
View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="QtSettings">
<option name="mySettingsPerProfile">
<map>
<entry key="">
<value>
<PerProfileState>
<option name="myCustomQmlPath" value="/opt/homebrew/share/qt/qml" />
<option name="myCustomQtBinPath" value="/opt/homebrew/bin" />
</PerProfileState>
</value>
</entry>
</map>
</option>
</component>
</project>

View File

@@ -1,5 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

12
.idea/dataSources.xml generated
View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="pyqcrm@bearybot.selfhost.co" uuid="ed28331b-481b-40e7-9295-d9cdae9fd4f2">
<driver-ref>mariadb</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.mariadb.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mariadb://bearybot.selfhost.co:8080/pyqcrm</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component>
</project>

4
.idea/discord.xml generated
View File

@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="DiscordProjectSettings"> <component name="DiscordProjectSettings">
<option name="show" value="PROJECT_FILES" /> <option name="show" value="APPLICATION" />
<option name="nameOverrideEnabled" value="true" />
<option name="nameOverrideText" value="the qml thing (╯°□°)╯︵ ┻━┻" />
<option name="description" value="" /> <option name="description" value="" />
<option name="applicationTheme" value="default" /> <option name="applicationTheme" value="default" />
<option name="iconsTheme" value="default" /> <option name="iconsTheme" value="default" />

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>

View File

@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

22
.idea/qmlSettings.xml generated
View File

@@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="QmlSettings">
<option name="mySettingsPerProfile">
<map>
<entry key="">
<value>
<PerProfileState>
<option name="myExtraQmlPaths">
<list>
<option value="$PROJECT_DIR$/TeroStyle" />
</list>
</option>
<option name="myLSPEnabled" value="true" />
<option name="myQmlFormatEnabled" value="true" />
</PerProfileState>
</value>
</entry>
</map>
</option>
</component>
</project>

View File

@@ -1,17 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Compile pyqcrm.qrc" type="ShConfigurationType">
<option name="SCRIPT_TEXT" value=".venv/bin/pyside6-rcc -o rc_pyqcrm.py pyqcrm.qrc" />
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
<option name="SCRIPT_PATH" value=".venv/bin/pyside6-rcc" />
<option name="SCRIPT_OPTIONS" value="-o rc_qml.py qml.qrc" />
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
<option name="INTERPRETER_PATH" value="/bin/zsh" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="EXECUTE_IN_TERMINAL" value="false" />
<option name="EXECUTE_SCRIPT_FILE" value="false" />
<envs />
<method v="2" />
</configuration>
</component>

View File

@@ -1,17 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Compile qml.qrc" type="ShConfigurationType">
<option name="SCRIPT_TEXT" value=".venv/bin/pyside6-rcc -o rc_qml.py qml.qrc" />
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
<option name="SCRIPT_PATH" value=".venv/bin/pyside6-rcc" />
<option name="SCRIPT_OPTIONS" value="-o rc_qml.py qml.qrc" />
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
<option name="INTERPRETER_PATH" value="/bin/zsh" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="EXECUTE_IN_TERMINAL" value="false" />
<option name="EXECUTE_SCRIPT_FILE" value="false" />
<envs />
<method v="2" />
</configuration>
</component>

View File

@@ -1,31 +0,0 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="pyqcrm" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
<env name="QT_LOGGING_RULES" value="*.debug=true; qt.*.debug=false" />
<env name="QT_LOGGING_TO_CONSOLE" value="1" />
<env name="QT_QML_DEBUG" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.12 (pyqcrm)" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2">
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Compile qml.qrc" run_configuration_type="ShConfigurationType" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Compile pyqcrm.qrc" run_configuration_type="ShConfigurationType" />
</method>
</configuration>
</component>

6
.idea/sqldialects.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/doc/db_schemer_v1.1-pyqcrm-202503171158_clean.sql" dialect="MariaDB" />
</component>
</project>

45
.idea/watcherTasks.xml generated Normal file
View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions">
<TaskOptions isEnabled="true">
<option name="arguments" value="-o rc_qml.py qml.qrc" />
<option name="checkSyntaxErrors" value="true" />
<option name="description" />
<option name="exitCodeBehavior" value="ERROR" />
<option name="fileExtension" value="qml" />
<option name="immediateSync" value="true" />
<option name="name" value="qml.qrc" />
<option name="output" value="" />
<option name="outputFilters">
<array />
</option>
<option name="outputFromStdout" value="false" />
<option name="program" value="$PROJECT_DIR$/.venv/bin/pyside6-rcc" />
<option name="runOnExternalChanges" value="true" />
<option name="scopeName" value="Project Files" />
<option name="trackOnlyRoot" value="false" />
<option name="workingDir" value="$PROJECT_DIR$" />
<envs />
</TaskOptions>
<TaskOptions isEnabled="true">
<option name="arguments" value="-o rc_pyqcrm.py pyqcrm.qrc" />
<option name="checkSyntaxErrors" value="true" />
<option name="description" />
<option name="exitCodeBehavior" value="ERROR" />
<option name="fileExtension" value="qml" />
<option name="immediateSync" value="true" />
<option name="name" value="pyqcrm.qrc" />
<option name="output" value="" />
<option name="outputFilters">
<array />
</option>
<option name="outputFromStdout" value="false" />
<option name="program" value="$PROJECT_DIR$/.venv/bin/pyside6-rcc" />
<option name="runOnExternalChanges" value="true" />
<option name="scopeName" value="Project Files" />
<option name="trackOnlyRoot" value="false" />
<option name="workingDir" value="$PROJECT_DIR$" />
<envs />
</TaskOptions>
</component>
</project>

Binary file not shown.

180
Gui/AddApplicant.qml Normal file
View File

@@ -0,0 +1,180 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import "../js/qmldict.js" as JsLib
ColumnLayout
{
id: colPar
anchors.fill: parent
Layout.fillWidth: true
Layout.fillHeight: true
implicitWidth: parent.width
Label
{
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
id: headline
text: qsTr("Mitarbeiter / Bewerber hinzufügen")
font.pixelSize: 35
}
ButtonGroup
{
buttons: radio.children
onClicked:
{
checkFields()
personalData.requiredField()
}
}
Row
{
Layout.fillWidth: true
id: radio
//Layout.columnSpan: 2
RadioButton
{
checked: true
text: qsTr("Bewerber")
}
RadioButton
{
text: qsTr("Mitarbeiter")
}
}
// ScrollView
// {
// Layout.fillHeight: true
// Layout.fillWidth: true
// implicitWidth: parent.width
// ColumnLayout
// {
// anchors.fill: parent
// //implicitWidth: parent.width
// //width: parent.width
// //height: parent.height
RowLayout
{
Layout.fillWidth: true
//implicitWidth: parent.width
spacing: 50
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
//implicitWidth: parent.width
ApplicantPersonalData
{
id: personalData
width: parent.width
}
}
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
visible: radio.children[1].checked
ColumnLayout
{
Layout.alignment: Qt.AlignTop
implicitWidth: parent.width
ApplicantBankData
{
id: bankAccount
}
ApplicantNationalInsurance
{
id: nationalInsurance
}
ApplicantVarious
{
id: applicantVarious
}
}
}
}
Item
{
Layout.fillHeight: true
}
RowLayout
{
Layout.fillWidth: true
Layout.alignment: Qt.AlignRight
Button
{
text: qsTr("Abbrechen")
onClicked: appLoader.source = "EmployeeTable.qml"
}
Button
{
id: saveBtn
text: qsTr("Speichern")
enabled: false
onClicked:
{
var new_applicant
if (radio.children[0].checked)
{
// Ein Bewerber
new_applicant = JsLib.parseForm(personalData)
employee_model.addEmployee(new_applicant, true)
// appLoader.source = "EmployeeTable.qml"
// console.log(JSON.stringify (new_applicant))
}
else
{
// Ein Mitarbeiter
// console.log(personalData, bankAccount, nationalInsurance, applicantVarious)
new_applicant = JsLib.parseForm(personalData, bankAccount, nationalInsurance, applicantVarious)
employee_model.addEmployee(new_applicant, false)
// var new_contact = JsLib.addApplicant(addContactLayout)
// contact_model.addContact(new_contact)
// console.log(JSON.stringify (new_applicant))
}
}
}
}
Component.onCompleted:
{
employee_model.addedNewEmployee.connect(onAddNewEmployee)
}
// }
// } // ScrollView
function onAddNewEmployee(added)
{
if (added)
console.log('addedsuccesfully')
else
console.log('failedtoadd')
appLoader.source = 'EmployeeTable.qml'
}
function checkFields()
{
if(radio.children[1].checked)
{
if(!personalData.checkPersonalField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
else if (!personalData.checkPersonalField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
}

View File

@@ -1,6 +1,7 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Controls.Fusion
import QtQuick.Dialogs import QtQuick.Dialogs
import "../js/qmldict.js" as JsLib import "../js/qmldict.js" as JsLib
@@ -59,7 +60,7 @@ ColumnLayout
Button Button
{ {
text: qsTr("Abbrechen") text: qsTr("Abbrechen")
onClicked: contentStack.pop() onClicked: appLoader.source = "CustomerTable.qml"
} }
Button Button
{ {
@@ -72,7 +73,7 @@ ColumnLayout
{ {
new_business = JsLib.parseForm(customerView) new_business = JsLib.parseForm(customerView)
business_model.addBusiness(new_business, 0) business_model.addBusiness(new_business, 0)
contentStack.pop() appLoader.source = "CustomerTable.qml"
} }
else else
{ {
@@ -99,7 +100,7 @@ ColumnLayout
{ {
var con_id = arguments[0] var con_id = arguments[0]
business_model.addBusiness(new_business, con_id) business_model.addBusiness(new_business, con_id)
contentStack.pop() appLoader.source = "CustomerTable.qml"
} }
} }

View File

@@ -16,7 +16,7 @@ GridLayout
Label Label
{ {
text: qsTr("Straße*") text: qsTr("Straße")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -27,11 +27,13 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
text: qsTr("Nr.*") text: qsTr("Nr.")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -42,6 +44,8 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
// New grid row // New grid row
@@ -63,6 +67,7 @@ GridLayout
model: address_model model: address_model
textRole: "display" textRole: "display"
popup.height: 300 popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1 currentIndex: -1
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
@@ -90,6 +95,7 @@ GridLayout
model: address_model model: address_model
textRole: "city" textRole: "city"
popup.height: 300 popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1 currentIndex: -1
} }
@@ -193,7 +199,7 @@ GridLayout
Label Label
{ {
text: qsTr("Reinigungsmittel wo?*") text: qsTr("Reinigungsmittel wo?")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -202,6 +208,8 @@ GridLayout
property string name: "cleaningproducts" property string name: "cleaningproducts"
id: cleaningproducts id: cleaningproducts
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
onTextChanged: checkFields() onTextChanged: checkFields()
} }
Item Item

View File

@@ -1,213 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
id: newObject
columns: 4
Layout.fillWidth: true
Layout.fillHeight: true
rowSpacing: 9
//New Grid
Label
{
text: qsTr("Objekt:")
Layout.alignment: Qt.AlignRight
font: Typography.h2
}
Item
{
Layout.columnSpan: 3
}
//New grid row
Label
{
text: qsTr("Objekt-Nr.")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "objectno"
id: objectno
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
Button
{
text: qsTr("Objekt hinzufügen")
icon.source: "qrc:/images/PlusCircle.svg"
}
Item
{
}
//// New grid row
Label
{
text: qsTr("Straße")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "street"
id: street
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
// onTextChanged: checkFields()
}
Label
{
text: qsTr("Nr.*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "houseno"
id: houseno
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
// onTextChanged: checkFields()
}
// New grid row
Label
{
text: qsTr("PLZ")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
ComboBox
{
property string name: "postcode"
id: postcode
Layout.fillWidth: true
editable: true
// onCurrentTextChanged: checkFields()
// onEditTextChanged: checkFields()
onActivated: currentValue
model: address_model
textRole: "display"
popup.height: 300
currentIndex: -1
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
validator: RegularExpressionValidator
{
regularExpression: /([0-9]{1,5})/
}
}
Label
{
text: qsTr("Ort")
Layout.alignment: Qt.AlignRight
}
ComboBox
{
property string name: "city"
id: city
Layout.fillWidth: true
editable: true
// onEditTextChanged: checkFields()
// onCurrentTextChanged: checkFields()
model: address_model
textRole: "city"
popup.height: 300
currentIndex: -1
}
//New Grid
Label
{
text: qsTr("Kunde:")
Layout.alignment: Qt.AlignRight
font: Typography.h2
}
Item
{
Layout.columnSpan: 3
}
//New grid row
Label
{
text: qsTr("Kunden-Nr.")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "customerno"
id: customerno
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
Button
{
text: qsTr("Kunde hinzufügen")
icon.source: "qrc:/images/PlusCircle.svg"
}
Item
{
}
// New grid row
Label
{
text: qsTr("Kunden-Name")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
id: customerName
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
}
Item
{
Layout.fillHeight: true
}
// function checkObjectField()
// {
// return street.text.trim() && houseno.text.trim() &&
// (postcode.editText.trim() || postcode.currentText.trim()) &&
// (city.editText.trim() || city.currentText.trim()) &&
// cleaningproducts.text.trim()
// }
}

View File

@@ -1,6 +1,7 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Controls.Fusion
import QtQuick.Dialogs import QtQuick.Dialogs
import "../js/qmldict.js" as JsLib import "../js/qmldict.js" as JsLib
@@ -61,7 +62,7 @@ ColumnLayout
Button Button
{ {
text: qsTr("Abbrechen") text: qsTr("Abbrechen")
onClicked: contentStack.pop() onClicked: appLoader.source = "ObjectTable.qml"
} }
Button Button
{ {
@@ -105,7 +106,7 @@ ColumnLayout
object_model.viewCriterion("Alle") object_model.viewCriterion("Alle")
} }
contentStack.pop() appLoader.source = "ObjectTable.qml"
} }
} }

View File

@@ -1,112 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Dialogs
import "../js/qmldict.js" as JsLib
ColumnLayout
{
property var new_object: null
//property alias checkAddContact: checkAddContact
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 15
Label
{
text: qsTr("Angebot anlegen")
horizontalAlignment: Text.AlignHCenter
Layout.fillWidth: true
font.pixelSize: 35
}
RowLayout
{
id: addObject
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 45
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
AddNewOffer
{
id: newOffer
width: parent.width
}
}
}
RowLayout
{
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
Button
{
text: qsTr("Abbrechen")
onClicked: contentStack.pop()
}
Button
{
property var new_object: null
id: saveBtn
text: qsTr("Speichern")
enabled: false
onClicked:
{
// new_object = JsLib.parseForm(newObject)
// new_object['lift'] = new_object['lift'] === 'Ja' ? 1 : 0
// new_object['mezzanin'] = new_object['mezzanin'] === 'Ja' ? 1 : 0
// object_model.addObject(new_object)
}
}
}
Item
{
id: spacer3
Layout.fillHeight: true
}
Component.onCompleted:
{
//object_model.objectAdded.connect(onObjectAdded)
//contact_model.objectContactAdded.connect(onObjectContact)
}
// Connections
// {
// target: object_model
// function onObjectIdReady()
// {
// var obj_id = arguments[0]
// if (checkAddObjectContact.checked && obj_id)
// {
// var new_objecto = addObjectLayout.getForm()
// contact_model.addObjectContact(new_objecto, obj_id)
// object_model.viewCriterion("Alle")
// }
// appLoader.source = "ObjectTable.qml"
// }
// }
// function checkFields()
// {
// if(checkAddObjectContact.checked)
// {
// if(!newObject.checkObjectField() || !addObjectLayout.contactPerson.contacts || !addObjectLayout.contactPerson.contacts.length)
// saveBtn.enabled = false
// else
// saveBtn.enabled = true
// }
// else if (!newObject.checkObjectField())
// saveBtn.enabled = false
// else
// saveBtn.enabled = true
// }
}

View File

@@ -1,409 +1,454 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import TeroStyle
GridLayout { GridLayout
{
id: personalData id: personalData
function checkPersonalField() {
return (firstname.text.trim() && lastname.text.trim() && street.text.trim() && houseno.text.trim() && (postcode.editText.trim() || postcode.currentText.trim()) && (city.editText.trim() || city.currentText.trim()) && birthday.text.trim() && phonenumber.text.trim() && cellphone.text.trim() && email.text.trim() && jobdescription.text.trim() && contractstart.text.trim() && contractend.text.trim() && briefAnrede.text.trim());
}
function requiredField() {
const pf = "Pflichtfeld";
street.placeholderText = pf;
phonenumber.placeholderText = pf;
cellphone.placeholderText = pf;
email.placeholderText = pf;
jobdescription.placeholderText = pf;
contractstart.placeholderText = pf;
contractend.placeholderText = pf;
briefAnrede.placeholderText = pf;
houseno.placeholderText = pf;
}
columns: 4 columns: 4
Label
Label { {
Layout.alignment: Qt.AlignRight
text: qsTr("Anrede") text: qsTr("Anrede")
Layout.alignment: Qt.AlignRight
} }
ComboBox { ComboBox
id: title {
property string name: "title" property string name: "title"
id: title
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
editable: false editable: false
Layout.columnSpan: 3
model: [qsTr("Keine Angabe"), qsTr("Herr"), qsTr("Frau")] model: [qsTr("Keine Angabe"), qsTr("Herr"), qsTr("Frau")]
onCurrentTextChanged:
onCurrentTextChanged: { {
switch (title.currentIndex) { switch (title.currentIndex)
{
case 1: case 1:
briefAnrede.text = "Sehr geehrter Herr "; briefAnrede.text = "Sehr geehrter Herr "
break; break
case 2: case 2:
briefAnrede.text = "Sehr geehrte Frau "; briefAnrede.text = "Sehr geehrte Frau "
break; break
default: default:
briefAnrede.text = "Guten Tag "; briefAnrede.text = "Guten Tag "
} }
} }
}
Label {
Layout.alignment: Qt.AlignRight
text: qsTr("Vorname*")
}
TextField {
id: firstname
}
Label
{
text: qsTr("Vorname")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "firstname" property string name: "firstname"
id: firstname
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
onTextChanged: checkFields() onTextChanged: checkFields()
Layout.columnSpan: 3
} }
Label { Label
{
text: qsTr("Nachname")
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Nachname*")
} }
TextField { TextField
id: lastname {
property string name: "lastname" property string name: "lastname"
id: lastname
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
onTextChanged: checkFields()
Layout.columnSpan: 3 Layout.columnSpan: 3
Layout.fillWidth: true
onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Straße") text: qsTr("Straße")
}
TextField {
id: street
property string name: "street"
Layout.fillWidth: true
placeholderTextColor: "red"
onTextChanged: checkFields()
}
Label {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Nr.")
} }
TextField { TextField
id: houseno {
property string name: "street"
property string name: "houseno" id: street
Layout.fillWidth: true Layout.fillWidth: true
placeholderTextColor: "red" placeholderTextColor: "red"
onTextChanged: checkFields()
validator: RegularExpressionValidator { }
Label
{
text: qsTr("Nr.")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "houseno"
id: houseno
Layout.fillWidth: true
placeholderTextColor: "red"
onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /([0-9a-zA-Z\-]{1,6})/ regularExpression: /([0-9a-zA-Z\-]{1,6})/
} }
onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("PLZ") text: qsTr("PLZ")
Layout.alignment: Qt.AlignRight
} }
ComboBox {
id: postcode
ComboBox
{
property string name: "postcode" property string name: "postcode"
id: postcode
Layout.fillWidth: true Layout.fillWidth: true
currentIndex: -1
editable: true editable: true
model: address_model onEditTextChanged: checkFields()
popup.height: 300 onCurrentTextChanged: checkFields()
textRole: "display"
validator: PostcodeValidator {
}
onActivated: currentValue onActivated: currentValue
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
onCurrentTextChanged: checkFields()
onEditTextChanged: checkFields()
}
Label {
Layout.alignment: Qt.AlignRight
text: qsTr("Ort")
}
ComboBox {
id: city
property string name: "city"
Layout.fillWidth: true
currentIndex: -1
editable: true
model: address_model model: address_model
textRole: "display"
popup.height: 300 popup.height: 300
textRole: "city" popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
validator: RegularExpressionValidator
{
regularExpression: /([^$][0-9]{1,4})/
}
}
onCurrentTextChanged: checkFields()
Label
{
text: qsTr("Ort")
Layout.alignment: Qt.AlignRight
}
ComboBox
{
property string name: "city"
id: city
Layout.fillWidth: true
editable: true
onEditTextChanged: checkFields() onEditTextChanged: checkFields()
onCurrentTextChanged: checkFields()
model: address_model
textRole: "city"
popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Geburtsname") text: qsTr("Geburtsname")
}
TextField {
id: birthname
property string name: "birthname"
Layout.columnSpan: 3
Layout.fillWidth: true
onTextChanged: checkFields()
}
Label {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Geburtsdatum*") visible: radio.children[1].checked
} }
TextField { TextField
id: birthday {
property string name: "birthname"
property string name: "birthday" id: birthname
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
onTextChanged: checkFields()
validator: RegularExpressionValidator { Layout.columnSpan: 3
visible: radio.children[1].checked
}
Label
{
text: qsTr("Geburtsdatum")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
}
TextField
{
property string name: "birthday"
id: birthday
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
onTextChanged: checkFields()
Layout.columnSpan: 3
visible: radio.children[1].checked
validator: RegularExpressionValidator
{
regularExpression: /((^|)(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]))\.((^|)(0[1-9]{1}|1[0-2]{1}))\.((^|)(196[0-9]{1}|19[7-9]{1}[0-9]{1}|20[0-9]{2}))/ regularExpression: /((^|)(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]))\.((^|)(0[1-9]{1}|1[0-2]{1}))\.((^|)(196[0-9]{1}|19[7-9]{1}[0-9]{1}|20[0-9]{2}))/
} }
Keys.onPressed: (event)=>
{
if (event.key !== Qt.Key_Backspace)
{
var len = birthday.length
var bd = birthday.text
if (len === 2 || len === 5) birthday.text = bd + "."
}
}
}
Keys.onPressed: event => { Label
if (event.key !== Qt.Key_Backspace) { {
var len = birthday.length; text: qsTr("Geburtsort")
var bd = birthday.text;
if (len === 2 || len === 5)
birthday.text = bd + ".";
}
}
onTextChanged: checkFields()
}
Label {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Geburtsort*") visible: radio.children[1].checked
} }
TextField { TextField
id: placeofbirth {
property string name: "placeofbirth" property string name: "placeofbirth"
id: placeofbirth
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
onTextChanged: checkFields() onTextChanged: checkFields()
Layout.columnSpan: 3
visible: radio.children[1].checked
} }
Label {
Layout.alignment: Qt.AlignRight Label
{
text: qsTr("Telefonnummer") text: qsTr("Telefonnummer")
Layout.alignment: Qt.AlignRight
} }
TextField { TextField
id: phonenumber {
property string name: "phone" property string name: "phone"
id: phonenumber
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
validator: RegularExpressionValidator { onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /([+0-9]{1})([0-9]{1,17})/ regularExpression: /([+0-9]{1})([0-9]{1,17})/
} }
onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Mobil") text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight
} }
TextField { TextField
id: cellphone {
property string name: "mobile" property string name: "mobile"
id: cellphone
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
validator: RegularExpressionValidator { onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /([+0-9]{1})([0-9]{1,17})/ regularExpression: /([+0-9]{1})([0-9]{1,17})/
} }
onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("E-Mail") text: qsTr("E-Mail")
}
TextField {
id: email
property string name: "email"
Layout.columnSpan: 3
Layout.fillWidth: true
placeholderText: qsTr("beispiel@domain.de")
placeholderTextColor: "red"
validator: EmailAddressValidator {
}
onTextChanged: checkFields()
}
Label {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Familienstand")
} }
ComboBox { TextField
id: maritalstatus {
property string name: "email"
property string name: "maritalstatus" id: email
Layout.fillWidth: true
placeholderTextColor: "red"
Layout.columnSpan: 3 Layout.columnSpan: 3
onTextChanged: checkFields()
placeholderText: qsTr("beispiel@domain.de")
validator: RegularExpressionValidator
{
regularExpression: /([\+!#$%&\*\\/\=?\^_`\.{|}\~\-\_0-9A-Za-z]{1,185})@([0-9A-Za-z\.\-\_]{1,64})\.([a-zA-z]{2,5})/
}
}
Label
{
text: qsTr("Familienstand")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
}
ComboBox
{
property string name: "maritalstatus"
id: maritalstatus
Layout.fillWidth: true Layout.fillWidth: true
editable: false editable: false
model: [qsTr("ledig"), qsTr("verheiratet"), qsTr("verwitwet"), qsTr("geschieden")] model: [qsTr("ledig"), qsTr("verheiratet"), qsTr("verwitwet"), qsTr("geschieden")]
visible: radio.children[1].checked
Layout.columnSpan: 3
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Stundenlohn") text: qsTr("Stundenlohn")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField { TextField
id: salary {
property string name: "salary" property string name: "salary"
id: salary
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
onTextChanged: checkFields() onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Jobbeschreibung") text: qsTr("Jobbeschreibung")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField { TextField
id: jobdescription {
property string name: "jobdesc" property string name: "jobdesc"
id: jobdescription
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
onTextChanged: checkFields() onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Vertragsbeginn") text: qsTr("Vertragsbeginn")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField { TextField
id: contractstart {
property string name: "contractstart" property string name: "contractstart"
id: contractstart
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
validator: RegularExpressionValidator { onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /((^|)(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]))\.((^|)(0[1-9]{1}|1[0-2]{1}))\.((^|)(196[0-9]{1}|19[7-9]{1}[0-9]{1}|20[0-9]{2}))/ regularExpression: /((^|)(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]))\.((^|)(0[1-9]{1}|1[0-2]{1}))\.((^|)(196[0-9]{1}|19[7-9]{1}[0-9]{1}|20[0-9]{2}))/
} }
Keys.onPressed: (event)=>
Keys.onPressed: event => { {
if (event.key !== Qt.Key_Backspace) { if (event.key !== Qt.Key_Backspace)
var len = contractstart.length; {
var bd = contractstart.text; var len = contractstart.length
if (len === 2 || len === 5) var bd = contractstart.text
contractstart.text = bd + "."; if (len === 2 || len === 5) contractstart.text = bd + "."
} }
} }
onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Vertragsende") text: qsTr("Vertragsende")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField { TextField
id: contractend {
property string name: "contractend" property string name: "contractend"
id: contractend
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
validator: RegularExpressionValidator { onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /((^|)(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]))\.((^|)(0[1-9]{1}|1[0-2]{1}))\.((^|)(196[0-9]{1}|19[7-9]{1}[0-9]{1}|20[0-9]{2}))/ regularExpression: /((^|)(0[1-9]{1}|[1-2]{1}[0-9]{1}|3[0-1]))\.((^|)(0[1-9]{1}|1[0-2]{1}))\.((^|)(196[0-9]{1}|19[7-9]{1}[0-9]{1}|20[0-9]{2}))/
} }
Keys.onPressed: (event)=>
Keys.onPressed: event => { {
if (event.key !== Qt.Key_Backspace) { if (event.key !== Qt.Key_Backspace)
var len = contractend.length; {
var bd = contractend.text; var len = contractend.length
if (len === 2 || len === 5) var bd = contractend.text
contractend.text = bd + "."; if (len === 2 || len === 5) contractend.text = bd + "."
} }
} }
onTextChanged: checkFields()
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Arbeitszeiten Tage") text: qsTr("Arbeitszeiten Tage")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
ComboBox { ComboBox
id: workdays {
property string name: "workdays" property string name: "workdays"
id: workdays
Layout.fillWidth: true Layout.fillWidth: true
model: ["1", "2", "3", "4", "5", "6", "7"] visible: radio.children[1].checked
model: ["1","2","3","4","5","6","7"]
} }
Label { Label
Layout.alignment: Qt.AlignRight {
text: qsTr("Stunden") text: qsTr("Stunden")
}
ComboBox {
id: workhours
property string name: "workhours"
Layout.fillWidth: true
model: ["1", "2", "3", "4", "5", "6", "7", "8"]
}
Label {
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
text: qsTr("Briefanrede") visible: radio.children[1].checked
} }
TextField { ComboBox
id: briefAnrede {
property string name: "workhours"
id: workhours
Layout.fillWidth: true
visible: radio.children[1].checked
model: ["1","2","3","4","5","6","7","8"]
}
Label
{
text: qsTr("Briefanrede")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "formofaddress" property string name: "formofaddress"
id: briefAnrede
Layout.columnSpan: 3
Layout.fillWidth: true Layout.fillWidth: true
placeholderTextColor: "red" placeholderTextColor: "red"
Layout.columnSpan: 3
onTextChanged: checkFields() onTextChanged: checkFields()
} }
Item {
Layout.columnSpan: 4 Item
{
Layout.fillHeight: true Layout.fillHeight: true
Layout.columnSpan: 4
}
function checkPersonalField()
{
if (radio.children[0].checked)
{
return (firstname.text.trim() && lastname.text.trim())
}
else
{
return (firstname.text.trim() && lastname.text.trim() && street.text.trim() && houseno.text.trim()
&& (postcode.editText.trim() || postcode.currentText.trim())
&& (city.editText.trim() || city.currentText.trim())
&& birthday.text.trim() && phonenumber.text.trim()
&& cellphone.text.trim() && email.text.trim() && jobdescription.text.trim()
&& contractstart.text.trim() && contractend.text.trim() && briefAnrede.text.trim())
}
}
function requiredField()
{
var pf = (radio.children[1].checked)?"Pflichtfeld":""
street.placeholderText = pf
phonenumber.placeholderText = pf
cellphone.placeholderText = pf
email.placeholderText = pf
jobdescription.placeholderText = pf
contractstart.placeholderText = pf
contractend.placeholderText = pf
briefAnrede.placeholderText = pf
houseno.placeholderText = pf
} }
} }

View File

@@ -66,6 +66,8 @@ ColumnLayout
Label Label
{ {
text: qsTr("PLZ") text: qsTr("PLZ")
// font.pixelSize: 57
// font.bold: true
} }
ComboBox ComboBox
@@ -76,6 +78,8 @@ ColumnLayout
model: address_model model: address_model
textRole: "display" textRole: "display"
popup.height: 300 popup.height: 300
popup.y: zipcode.y + 5 - (zipcode.height * 2)
//currentIndex: -1
onCurrentIndexChanged: city.currentIndex = zipcode.currentIndex onCurrentIndexChanged: city.currentIndex = zipcode.currentIndex
validator: RegularExpressionValidator validator: RegularExpressionValidator
{ {
@@ -98,6 +102,7 @@ ColumnLayout
model: address_model model: address_model
textRole: "city" textRole: "city"
popup.height: 300 popup.height: 300
popup.y: zipcode.y + 5 - (zipcode.height * 2)
currentIndex: -1 currentIndex: -1
} }
} }

View File

@@ -12,7 +12,8 @@ ColumnLayout
Button Button
{ {
text: qsTr("Zurück") text: qsTr("Zurück")
onClicked: contentStack.pop() //Layout.columnSpan: 2
onClicked: customersStack.pop()
} }
SplitView SplitView

22
Gui/CustomerTable.qml Normal file
View File

@@ -0,0 +1,22 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
import QtQuick.Controls.Fusion
Item {
anchors.fill: parent
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"]
id: test
StackView
{
id: customersStack
anchors.fill: parent
initialItem: "CustomersTable.qml"
}
}

View File

@@ -16,10 +16,11 @@ GridLayout
Label Label
{ {
id: lblFirmenName id: lblFirmenName
text: qsTr("Firmenname*") text: qsTr("Firmenname")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
TextField TextField
{ {
property string name: "business" property string name: "business"
@@ -28,26 +29,34 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
Layout.columnSpan: 3 Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Straße*") text: qsTr("Straße")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
TextField TextField
{ {
property string name: "street" property string name: "street"
id: streetid id: streetid
Layout.fillWidth: true Layout.fillWidth: true
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
text: qsTr("Nr.*") text: qsTr("Nr.")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -57,6 +66,8 @@ GridLayout
id: housenoid id: housenoid
Layout.fillWidth: true Layout.fillWidth: true
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
validator: RegularExpressionValidator validator: RegularExpressionValidator
{ {
regularExpression: /([0-9a-zA-Z\-]{1,6})/ regularExpression: /([0-9a-zA-Z\-]{1,6})/
@@ -85,6 +96,7 @@ GridLayout
model: address_model model: address_model
textRole: "display" textRole: "display"
popup.height: 300 popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1 currentIndex: -1
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
Layout.columnSpan: 3 Layout.columnSpan: 3
@@ -111,8 +123,10 @@ GridLayout
model: address_model model: address_model
textRole: "city" textRole: "city"
popup.height: 300 popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1 currentIndex: -1
Layout.columnSpan: 3 Layout.columnSpan: 3
// onCurrentIndexChanged: postcode.currentIndex = city.currentIndex
} }
Label Label

View File

@@ -2,176 +2,176 @@ import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
import QtQuick.Controls.Fusion
ColumnLayout { Item
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"] {
SearchBar
function viewCriterion(criterion)
{ {
business_model.viewCriterion(criterion.text); id:searchBar
anchors.margins: 9
} }
Button
{
id: addBusinessBtn
icon.source: "qrc:/images/addbusiness.svg"
icon.color: "olive"
anchors.right: parent.right
flat: true
onClicked: appLoader.source = "AddCustomer.qml"
}
ColumnLayout
anchors.fill: parent {
spacing: Dimensions.l id: tableColumn
clip: true
Component.onCompleted: contentStack.pop() anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout RowLayout
{ {
Layout.fillWidth: true id: sortView
spacing: Dimensions.l RadioButton
SearchBar
{ {
} id: showAll
QuickFilter { checked: true
onSelectedChanged: (name) => {
business_model.viewCriterion(name)
}
model: ListModel {
ListElement {
name: "Alle"
text: qsTr("Alle") text: qsTr("Alle")
selected: true onClicked: viewCriterion(showAll)
} }
ListElement { RadioButton
name: "Interessent" {
id: showInterested
text: qsTr("Interessent") text: qsTr("Interessent")
selected: false onClicked: viewCriterion(showInterested)
} }
ListElement { RadioButton
name: "Kunde" {
text: qsTr("Kunde") id: showClientele
selected: false text: qsTr("Kunden")
onClicked: viewCriterion(showClientele)
} }
ListElement { RadioButton
name: "Lieferant" {
id: showProvider
text: qsTr("Lieferant") text: qsTr("Lieferant")
selected: false onClicked: viewCriterion(showProvider)
} }
ListElement { RadioButton
name: "Erledigt" {
id: showFinished
text: qsTr("Erledigt") text: qsTr("Erledigt")
selected: false onClicked: viewCriterion(showFinished)
} }
} }
}
Button
{
id: addCustomer
Layout.alignment: Qt.AlignRight
icon.source: "qrc:/images/PlusCircle.svg"
text: qsTr("Kunde Hinzufügen")
onClicked: contentStack.push("AddCustomer.qml")
}
}
ColumnLayout
{
Layout.fillWidth: true
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
clip: true
HorizontalHeaderView HorizontalHeaderView
{ {
id: horizontalHeader id: horizontalHeader
Layout.fillWidth: true Layout.fillWidth: true
implicitHeight: 40 implicitHeight: 40
movableColumns: true //@disable-check M16 movableColumns: true //@disable-check M16
syncView: customerTable syncView: customerTable
delegate: Rectangle delegate: Rectangle
{ {
Layout.fillWidth: true color: addBusinessBtn.palette.alternateBase
border.color: addCustomer.palette.base border.color: addBusinessBtn.palette.base
color: addCustomer.palette.alternateBase
implicitHeight: 40 implicitHeight: 40
Layout.fillWidth: true
implicitWidth: 1 implicitWidth: 1
Text Text
{ {
color: addCustomer.palette.text text: model.display
elide: Text.ElideRight elide: Text.ElideRight
width: parent.width
height: parent.height height: parent.height
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
text: model.display
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
width: parent.width color: addBusinessBtn.palette.text
} }
} }
} }
TableView {
id: customerTable
TableView
{
property real newWidth: 0 property real newWidth: 0
id: customerTable
Layout.fillHeight: true
Layout.fillWidth: true
alternatingRows: true
columnSpacing: 1
model: business_model
resizableColumns: true
rowSpacing: 2
selectionBehavior: TableView.SelectRows
z: 1 z: 1
Layout.fillHeight: true
ScrollBar.vertical: ScrollBar { //height: tableColumn.height - (sortView.height + horizontalHeader.height)
Layout.fillWidth: true
columnSpacing: 1
rowSpacing: 2
model: business_model
alternatingRows: true
resizableColumns: true
selectionBehavior: TableView.SelectRows
ScrollBar.vertical: ScrollBar
{
policy: customerTable.contentHeight > customerTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff policy: customerTable.contentHeight > customerTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
} }
delegate: Rectangle {
required property bool current
required property bool selected
color: selected ? addCustomer.palette.highlight //palette.highlight selectionModel: ItemSelectionModel
: (customerTable.alternatingRows && row % 2 !== 0 ? addCustomer.palette.base // palette.base {
: addCustomer.palette.alternateBase) //palette.alternateBase)
implicitHeight: 25
implicitWidth: customerTable.width / customerTable.columns
Text {
color: addCustomer.palette.text
elide: Text.ElideRight
height: parent.height
leftPadding: 9
text: model.display == null ? "" : model.display // @disable-check M126
verticalAlignment: Text.AlignVCenter
width: parent.width
}
MouseArea {
id: mouseArea
property bool hovered: false
anchors.fill: parent
hoverEnabled: true
onDoubleClicked: {
business_model.onRowClicked(row);
contentStack.push("CustomerDetails.qml", {
selectedClient: row
});
}
onEntered: {
customerTable.selectionModel.select(customerTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows);
}
}
}
selectionModel: ItemSelectionModel {
id: selModel id: selModel
model: customerTable.model model: customerTable.model
} }
delegate:Rectangle
{
required property bool selected
required property bool current
implicitWidth: customerTable.width / customerTable.columns
implicitHeight: 25
color: selected
? addBusinessBtn.palette.highlight //palette.highlight
: (customerTable.alternatingRows && row % 2 !== 0
? addBusinessBtn.palette.base // palette.base
: addBusinessBtn.palette.alternateBase) //palette.alternateBase)
Text
{
text: model.display == null? "": model.display // @disable-check M126
elide: Text.ElideRight
width: parent.width
height: parent.height
verticalAlignment: Text.AlignVCenter
leftPadding: 9
color: addBusinessBtn.palette.text
}
MouseArea
{
property bool hovered: false
id: mouseArea
anchors.fill: parent
hoverEnabled: true
onDoubleClicked:
{
business_model.onRowClicked(row)
customersStack.push("CustomerDetails.qml", {selectedClient: row});
} }
onEntered:
{
customerTable.selectionModel.select(customerTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
} }
Item {
Layout.fillHeight: true
} }
}
}
Item
{
Layout.fillWidth: true
}
}
function viewCriterion(criterion)
{
business_model.viewCriterion(criterion.text)
}
Component.onCompleted: customersStack.pop()
} }

View File

@@ -2,106 +2,127 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
ColumnLayout { ColumnLayout
anchors.top: Navigation.bottom {
anchors.top: TopBar.bottom
Rectangle { Rectangle
Layout.bottomMargin: 3 {
color: "dimgrey"
Layout.fillHeight: true Layout.fillHeight: true
Layout.fillWidth: true Layout.fillWidth: true
color: "dimgrey" Layout.bottomMargin: 3
radius: 45 radius: 45
RowLayout { RowLayout
{
anchors.fill: parent anchors.fill: parent
Rectangle { Rectangle
{
id: contractButton id: contractButton
width: 300
height: 145
color: "darkslategray"
radius: 45
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
border.color: "steelblue" border.color: "steelblue"
border.width: 1 border.width: 1
color: "darkslategray" Text
height: 145 {
radius: 45
width: 300
Text {
anchors.centerIn: parent
color: "lightgoldenrodyellow"
font.bold: true
font.pixelSize: 45
text: qsTr("Aufträge") text: qsTr("Aufträge")
anchors.centerIn: parent
font.pixelSize: 45
font.bold: true
color: "lightgoldenrodyellow"
} }
MouseArea {
MouseArea
{
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
hoverEnabled: true hoverEnabled: true
onPressed:
{
contractButton.color = "darkolivegreen"
contractButton.border.width = 3
contractButton.border.color = "skyblue"
console.log("Aufträge...")
}
onExited: { onReleased:
contractButton.color = "darkslategray"; {
contractButton.border.color = "steelblue"; contractButton.color = "darkslategray"
contractButton.border.width = 1; contractButton.border.width = 1
contractButton.border.color = "steelblue"
} }
onHoveredChanged: {
var w = contractButton.border.width === 3 ? 1 : 3; onHoveredChanged:
contractButton.border.width = w; {
var w = contractButton.border.width === 3? 1: 3
contractButton.border.width = w
} }
onPressed: {
contractButton.color = "darkolivegreen"; onExited:
contractButton.border.width = 3; {
contractButton.border.color = "skyblue";
console.log("Aufträge..."); contractButton.color = "darkslategray"
} contractButton.border.color = "steelblue"
onReleased: { contractButton.border.width = 1
contractButton.color = "darkslategray";
contractButton.border.width = 1;
contractButton.border.color = "steelblue";
} }
} }
} }
Rectangle {
Rectangle
{
id: offerButton id: offerButton
width: 300
height: 145
color: "darkslategray"
radius: 45
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
border.color: "steelblue" border.color: "steelblue"
border.width: 1 border.width: 1
color: "darkslategray" Text
height: 145 {
radius: 45
width: 300
Text {
anchors.centerIn: parent
color: "lightgoldenrodyellow"
font.bold: true
font.pixelSize: 45
text: qsTr("Angebote") text: qsTr("Angebote")
anchors.centerIn: parent
font.pixelSize: 45
font.bold: true
color: "lightgoldenrodyellow"
} }
MouseArea { MouseArea
{
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
hoverEnabled: true hoverEnabled: true
onExited: { onPressed:
offerButton.color = "darkslategray"; {
offerButton.border.color = "steelblue"; offerButton.color = "darkolivegreen"
offerButton.border.width = 1; offerButton.border.width = 3
offerButton.border.color = "skyblue"
console.log("Angebote...")
} }
onHoveredChanged: { onReleased:
var w = offerButton.border.width === 3 ? 1 : 3; {
offerButton.border.width = w; offerButton.color = "darkslategray"
offerButton.border.width = 1
offerButton.border.color = "steelblue"
} }
onPressed: {
offerButton.color = "darkolivegreen"; onHoveredChanged:
offerButton.border.width = 3; {
offerButton.border.color = "skyblue"; var w = offerButton.border.width === 3? 1: 3
console.log("Angebote..."); offerButton.border.width = w
} }
onReleased: {
offerButton.color = "darkslategray"; onExited:
offerButton.border.width = 1; {
offerButton.border.color = "steelblue";
offerButton.color = "darkslategray"
offerButton.border.color = "steelblue"
offerButton.border.width = 1
} }
} }
} }

27
Gui/EmployeeDetails.qml Normal file
View File

@@ -0,0 +1,27 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Item
{
property int selectedEmployee: -1
id: emDet
ColumnLayout
{
Label
{
text: qsTr("Ausgewählter Mitarbeiter " + selectedEmployee)
}
Button
{
text: qsTr("Mitarbeiter zeigen")
onClicked: employeesStack.pop()
}
}
Component.onCompleted:
{
employee_model.onRowClicked(selectedEmployee)
}
}

18
Gui/EmployeeTable.qml Normal file
View File

@@ -0,0 +1,18 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
Item
{
StackView
{
id: employeesStack
anchors.fill: parent
initialItem: "EmployeesTable.qml"
}
}

View File

@@ -1,37 +0,0 @@
import QtQuick
import QtQuick.Layouts
import TeroStyle
ColumnLayout {
anchors.fill: parent
spacing: Dimensions.l
ApplicantForm {
id: applicantForm
Layout.alignment: Qt.AlignTop
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
}
RowLayout {
Layout.alignment: Qt.AlignRight
spacing: Dimensions.l
Button {
icon.source: "qrc:/images/ArrowLeftCircle-Outline.svg"
text: qsTr("Verwerfen")
onClicked: contentStack.pop()
}
Button {
enabled: applicantForm.valid
icon.source: "qrc:/images/CheckCircle.svg"
text: qsTr("Speichern")
onClicked: {
applicantModel.createApplicant(applicantForm.value);
contentStack.pop();
}
}
}
}

View File

@@ -1,102 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import "../../js/qmldict.js" as JsLib
ColumnLayout {
id: colPar
function checkFields() {
if (!personalData.checkPersonalField())
saveBtn.enabled = false;
else
saveBtn.enabled = true;
}
function onAddNewEmployee(added) {
if (added) {
console.log('addedsuccesfully');
contentStack.pop();
} else {
console.log('failedtoadd');
}
}
Layout.fillHeight: true
Layout.fillWidth: true
anchors.fill: parent
implicitWidth: parent.width
Component.onCompleted: {
employee_model.addedNewEmployee.connect(onAddNewEmployee);
}
Label {
id: headline
Layout.alignment: Qt.AlignHCenter | Qt.AlignTop
font.pixelSize: 35
text: qsTr("Mitarbeiter / Bewerber hinzufügen")
}
RowLayout {
Layout.fillWidth: true
spacing: Dimensions.l
Frame {
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
Layout.horizontalStretchFactor: 1
EmployeePersonalData {
id: personalData
implicitWidth: parent.width
}
}
Frame {
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
Layout.horizontalStretchFactor: 1
ColumnLayout {
Layout.alignment: Qt.AlignTop
implicitWidth: parent.width
EmployeeBankData {
id: bankAccount
}
EmployeeNationalInsurance {
id: nationalInsurance
}
EmployeeVarious {
id: applicantVarious
}
}
}
}
Item {
Layout.fillHeight: true
}
RowLayout {
Layout.alignment: Qt.AlignRight
Layout.fillWidth: true
Button {
text: qsTr("Abbrechen")
onClicked: contentStack.pop()
}
Button {
id: saveBtn
enabled: false
text: qsTr("Speichern")
onClicked: {
const new_applicant = JsLib.parseForm(personalData, bankAccount, nationalInsurance, applicantVarious);
employee_model.addEmployee(new_applicant);
}
}
}
}

View File

@@ -1,218 +0,0 @@
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Layouts
import TeroStyle
ColumnLayout {
readonly property int fieldM: 235
readonly property int fieldS: 110
readonly property bool valid: emailAddress.acceptableInput && firstName.acceptableInput && houseNumber.acceptableInput && lastName.acceptableInput && mobileNumber.acceptableInput && phoneNumber.acceptableInput && salutation.acceptableInput&& street.acceptableInput && title.acceptableInput && zipCode.acceptableInput
readonly property var value: QtObject {
readonly property string emailAddress: emailAddress.text ?? ""
readonly property string firstName: firstName.text ?? ""
readonly property string houseNumber: houseNumber.text ?? ""
readonly property string lastName: lastName.text ?? ""
readonly property string mobileNumber: mobileNumber.text ?? ""
readonly property string phoneNumber: phoneNumber.text ?? ""
readonly property string salutation: salutation.text ?? ""
readonly property string street: street.text ?? ""
readonly property string title: title.currentText
readonly property int zipCode: zipCode.currentIndex
}
function setValue(value) {
title.currentIndex = value.title ?? 0;
firstName.text = value.firstName ?? "";
lastName.text = value.lastName ?? "";
street.text = value.street ?? "";
houseNumber.text = value.houseNumber ?? "";
zipCode.currentIndex = value.zipCode ?? -1;
phoneNumber.text = value.phoneNumber ?? "";
mobileNumber.text = value.mobileNumber ?? "";
emailAddress.text = value.emailAddress ?? "";
salutation.text = value.salutation ?? 0;
}
spacing: Dimensions.l
IconLabel {
color: Colors.foreground
font: Typography.h2
icon.color: Colors.foreground
icon.height: Typography.h2.pixelSize
icon.source: "qrc:/images/UserCircle"
icon.width: Typography.h2.pixelSize
spacing: Dimensions.m
text: qsTr("Stammdaten")
}
RowLayout {
spacing: Dimensions.m
Field {
label: qsTr("Anrede")
ComboBox {
id: title
implicitWidth: fieldM
model: [qsTr("Keine Angabe"), qsTr("Herr"), qsTr("Frau")]
onCurrentTextChanged: {
switch (title.currentIndex) {
case 1:
salutation.text = "Sehr geehrter Herr ";
break;
case 2:
salutation.text = "Sehr geehrte Frau ";
break;
default:
salutation.text = "Guten Tag ";
}
}
}
}
Field {
label: qsTr("Vorname")
mandatory: true
TextField {
id: firstName
implicitWidth: fieldM
placeholderText: qsTr("Max")
validator: NotEmptyValidator {
}
}
}
Field {
label: qsTr("Nachname")
mandatory: true
TextField {
id: lastName
implicitWidth: fieldM
placeholderText: qsTr("Mustermann")
validator: NotEmptyValidator {
}
}
}
}
RowLayout {
spacing: Dimensions.m
Field {
label: qsTr("Straße")
TextField {
id: street
implicitWidth: fieldM
placeholderText: qsTr("Musterstraße")
}
}
Field {
label: qsTr("Hausnummer")
TextField {
id: houseNumber
implicitWidth: fieldS
placeholderText: qsTr("1a")
}
}
Field {
label: qsTr("PLZ")
ComboBox {
id: zipCode
currentIndex: -1
editable: true
implicitWidth: fieldS
model: address_model
textRole: "display"
onActivated: currentValue
onCurrentIndexChanged: city.currentIndex = zipCode.currentIndex
}
}
Field {
label: qsTr("Ort")
ComboBox {
id: city
currentIndex: -1
editable: true
implicitWidth: fieldM
model: address_model
textRole: "city"
}
}
}
IconLabel {
color: Colors.foreground
font: Typography.h2
icon.color: Colors.foreground
icon.height: Typography.h2.pixelSize
icon.source: "qrc:/images/Phone"
icon.width: Typography.h2.pixelSize
spacing: Dimensions.m
text: qsTr("Kontakt")
}
RowLayout {
spacing: Dimensions.m
Field {
label: qsTr("Telefonnummer")
TextField {
id: phoneNumber
implicitWidth: fieldM
placeholderText: "+49 1234 567890"
validator: OptionalPhoneNumberValidator {
}
}
}
Field {
label: qsTr("Mobil")
TextField {
id: mobileNumber
implicitWidth: fieldM
placeholderText: "+49 123 4567891011"
validator: OptionalPhoneNumberValidator {
}
}
}
Field {
label: qsTr("E-Mail Adresse")
TextField {
id: emailAddress
implicitWidth: fieldM
placeholderText: "tero@example.org"
validator: OptionalEmailAddressValidator {
}
}
}
Field {
label: qsTr("Briefanrede")
TextField {
id: salutation
implicitWidth: fieldM
}
}
}
}

View File

@@ -1,34 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import TeroStyle
ColumnLayout {
property int row: -1
anchors.fill: parent
spacing: Dimensions.l
onRowChanged: {
if (row !== -1) {
applicantForm.setValue(applicantModel.applicant(row))
}
}
ApplicantForm {
id: applicantForm
Layout.alignment: Qt.AlignTop
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
}
RowLayout {
spacing: Dimensions.l
Button {
text: qsTr("Als Mitarbeiter:in Einstellen")
icon.source: "qrc:/images/InboxArrowDown.svg"
}
}
}

View File

@@ -1,143 +0,0 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
ColumnLayout {
anchors.fill: parent
spacing: Dimensions.l
RowLayout {
Layout.fillWidth: true
spacing: Dimensions.l
SearchBar {
onSubmitted: (query) => {
applicantModel.searchQuery = query
}
}
QuickFilter {
model: ListModel {
ListElement {
name: "Alle"
selected: true
text: qsTr("Alle")
}
ListElement {
name: "Bewerber"
selected: false
text: qsTr("Bewerber")
}
ListElement {
name: "Mitarbeiter"
selected: false
text: qsTr("Kunde")
}
ListElement {
name: "Erledigt"
selected: false
text: qsTr("Erledigt")
}
}
onSelectedChanged: name => {
employee_model.viewCriterion(name);
}
}
Button {
Layout.alignment: Qt.AlignRight
flat: true
icon.source: "qrc:/images/PlusCircle.svg"
text: qsTr("Bewerber Hinzufügen")
onClicked: contentStack.push("AddApplicant.qml")
}
Button {
Layout.alignment: Qt.AlignRight
flat: true
icon.source: "qrc:/images/PlusCircle.svg"
text: qsTr("Mitarbeiter Hinzufügen")
onClicked: contentStack.push("AddEmployee.qml")
}
}
ColumnLayout {
Layout.fillHeight: true
Layout.fillWidth: true
spacing: 2
HorizontalHeaderView {
movableColumns: true
syncView: employeesTable
delegate: Rectangle {
Layout.fillWidth: true
color: Colors.primary
implicitHeight: 33
implicitWidth: 1
Text {
color: Colors.primaryContrast
elide: Text.ElideRight
font: Typography.smallBold
height: parent.height
horizontalAlignment: Text.AlignLeft
padding: Dimensions.s
text: model.display
verticalAlignment: Text.AlignVCenter
width: parent.width
}
}
}
TableView {
id: employeesTable
Layout.fillHeight: true
Layout.fillWidth: true
columnSpacing: 2
model: applicantModel
resizableColumns: true
rowSpacing: 2
selectionBehavior: TableView.SelectRows
z: 1
ScrollBar.vertical: ScrollBar {
policy: ScrollBar.AsNeeded
}
delegate: Rectangle {
required property bool selected
color: selected ? Colors.primaryHighlight : Colors.transparent
implicitHeight: 33
implicitWidth: employeesTable.width / employeesTable.columns
Text {
color: Colors.foreground
elide: Text.ElideRight
font: Typography.small
height: parent.height
padding: Dimensions.s
text: (model.display === null || model.display === undefined) ? "" : model.display
verticalAlignment: Text.AlignVCenter
width: parent.width
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onClicked: {
contentStack.push("EmployeeDetails.qml", { row });
}
onEntered: {
employeesTable.selectionModel.select(employeesTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows);
}
}
}
selectionModel: ItemSelectionModel {
model: employeesTable.model
}
}
}
}

View File

@@ -1 +0,0 @@
module Employees

224
Gui/EmployeesTable.qml Normal file
View File

@@ -0,0 +1,224 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
Item
{
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort", "Status"]
SearchBar
{
id:searchBar
anchors.margins: 9
}
Button
{
id: addEmployeeBtn
icon.source: "qrc:/images/addbusiness.svg"
icon.color: "olive"
anchors.right: parent.right
flat: true
onClicked: appLoader.source = "AddApplicant.qml"
}
ButtonGroup
{
id: criterion
// buttons: criterion.children
onClicked:
{
viewEmployees(criterion.checkedButton.text)
}
}
ColumnLayout
{
id: tableParent
clip: true
anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout
{
id: viewCriterion
RadioButton
{
//id: showAll
checked: true
text: qsTr("Alle")
ButtonGroup.group: criterion
//onClicked: viewEmployees(showAll)
}
RadioButton
{
//id: showApplicant
text: qsTr("Bewerber")
ButtonGroup.group: criterion
//onClicked: viewEmployees(showApplicant)
}
RadioButton
{
//id: showEmployee
text: qsTr("Mitarbeiter")
ButtonGroup.group: criterion
//onClicked: viewEmployees(showEmployee)
}
CheckBox
{
id: showEveryone
text: qsTr("Alle Stati")
checked: true
onClicked: viewEmployees(criterion.checkedButton.text)
onCheckedChanged:
{
showFired.checked = false
showProcessed.checked = false
}
}
CheckBox
{
id: showProcessed
text: qsTr("Erledigt")
enabled: !showEveryone.checked
checked: false
onClicked:
{
showFired.checked = false
viewEmployees(criterion.checkedButton.text)
}
}
CheckBox
{
id: showFired
text: qsTr("Ausgeschieden")
enabled: !showEveryone.checked
checked: false
onClicked:
{
showProcessed.checked = false
viewEmployees(criterion.checkedButton.text)
}
}
}
HorizontalHeaderView
{
id: employeeTableHeader
Layout.fillWidth: true
syncView: appliEmpTable
implicitHeight: 40
movableColumns: true //@disable-check M16
delegate: Rectangle
{
color: addEmployeeBtn.palette.alternateBase
border.color: palette.base
implicitHeight: 40
Layout.fillWidth: true
implicitWidth: 1
Text
{
text: model.display
elide: Text.ElideRight
width: parent.width
height: parent.height
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
color: palette.text
}
}
}
TableView
{
id: appliEmpTable
//Layout.fillHeight: true
height: tableParent.height - (viewCriterion.height + employeeTableHeader.height)
Layout.fillWidth: true
columnSpacing: 1
rowSpacing: 2
alternatingRows: true
resizableColumns: true
model: employee_model
selectionBehavior: TableView.SelectRows
ScrollBar.vertical: ScrollBar
{
policy: appliEmpTable.contentHeight > appliEmpTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
}
selectionModel: ItemSelectionModel
{
id: selModel
model: appliEmpTable.model
}
delegate:Rectangle
{
required property bool selected
required property bool current
implicitWidth: appliEmpTable.width / appliEmpTable.columns
implicitHeight: 25
color: selected
? addEmployeeBtn.palette.highlight //palette.highlight
: (appliEmpTable.alternatingRows && row % 2 !== 0
? addEmployeeBtn.palette.base // palette.base
: addEmployeeBtn.palette.alternateBase) //palette.alternateBase)
Text
{
text: (model.display === null || model.display === undefined)? "": model.display
elide: Text.ElideRight
width: parent.width
height: parent.height
verticalAlignment: Text.AlignVCenter
leftPadding: 9 //@d isable-check M16
color: palette.text
}
MouseArea
{
id: mouseArea
property bool hovered:false
anchors.fill: parent
hoverEnabled: true
onDoubleClicked:
{
employeesStack.push("EmployeeDetails.qml", {selectedEmployee: row});
}
onEntered:
{
appliEmpTable.selectionModel.select(appliEmpTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
}
}
}
}
Item
{
Layout.fillWidth: true
}
}
function viewEmployees(criterion)
{
employee_model.viewCriterion(criterion, showProcessed.checked, showFired.checked, showEveryone.checked)
}
Component.onCompleted: employeesStack.pop()
}

View File

@@ -77,7 +77,7 @@ Item
title: qsTr("Wiederherstellen") title: qsTr("Wiederherstellen")
buttons: MessageDialog.Yes | MessageDialog.No buttons: MessageDialog.Yes | MessageDialog.No
onAccepted: recoveryPaswordDialog.open() onAccepted: recoveryPaswordDialog.open()
onRejected: contentStack.replace("LoginSreen.qml") onRejected: gotoLogin()
} }
MessageDialog MessageDialog
@@ -147,7 +147,7 @@ Item
if (!adminAvailable) config.saveRecoveryKey(saveRecoveryDialog.currentFile, recpass) if (!adminAvailable) config.saveRecoveryKey(saveRecoveryDialog.currentFile, recpass)
else config.getRecoveryKey(saveRecoveryDialog.currentFile, recpass) else config.getRecoveryKey(saveRecoveryDialog.currentFile, recpass)
contentStack.replace("LoginSreen.qml") gotoLogin()
} }
onRejected: onRejected:

View File

@@ -3,135 +3,226 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Dialogs import QtQuick.Dialogs
import QtQuick.Layouts import QtQuick.Layouts
import "qrc:/TeroStyle"
Item { Item
{
property string recpass: "" property string recpass: ""
anchors.fill: parent
function dbConnectionFailed(msg) { ColumnLayout
notifications.notificationDialog.informativeText = msg; {
notifications.notificationDialog.text = "Verbindung zum Datenbankserver verloren";
notifications.notificationDialog.open();
}
function getEncryptionKey() {
recoveryPaswordDialog.open();
}
function loggedin() {
contentStack.replace("Dashboard.qml");
}
anchors.fill: parent anchors.fill: parent
anchors.topMargin: Dimensions.l
Component.onCompleted: { FontLoader
loggedin_user.loginOkay.connect(loggedin); {
config.invalidEncryptionKey.connect(getEncryptionKey); id: helloStranger
config.checkEncryptionKey(); source: "qrc:/fonts/HelloStranger.otf"
loggedin_user.noDbConnection.connect(dbConnectionFailed);
benutzerName.forceActiveFocus();
} }
ColumnLayout { FontLoader
anchors.centerIn: parent {
spacing: Dimensions.m id: damarWulan
source: "qrc:/fonts/Damarwulan.ttf"
}
Label { FontLoader
{
id: hussarPrint
source: "qrc:/fonts/HussarPrintA.otf"
}
FontLoader
{
id: reginaldScript
source: "qrc:/fonts/ReginaldScript.ttf"
}
Item
{
height: 65
}
Label
{
text: qsTr ("Login*****")
font.family: helloStranger.font.family
font.weight: helloStranger.font.weight
font.styleName: helloStranger.font.styleName
font.pixelSize: 89
font.bold: true
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
Layout.bottomMargin: Dimensions.l color: "yellow"
font: Typography.h1
text: qsTr("Login")
} }
Field {
label: qsTr("Benutzername")
TextField { Item
{
height: 25
}
RowLayout
{
Layout.alignment: Qt.AlignHCenter
spacing: 15
Label
{
text: qsTr ("Benutzername")
minimumPixelSize: 20
Layout.preferredWidth: 150
horizontalAlignment: Text.AlignRight
font.family: damarWulan.font.family
font.weight: damarWulan.font.weight
font.styleName: damarWulan.font.styleName
font.pixelSize: 21
}
TextField
{
id: benutzerName id: benutzerName
placeholderText: qsTr ("Benutzernamen eingeben")
implicitWidth: 300
font: hussarPrint.font
focus: true focus: true
implicitWidth: 300 onAccepted:
placeholderText: qsTr("Benutzernamen eingeben") {
onAccepted: {
if (benutzerName.text.trim() && passwort.text.trim()) if (benutzerName.text.trim() && passwort.text.trim())
loggedin_user.login(benutzerName.text.trim(), passwort.text); loggedin_user.login(benutzerName.text.trim(), passwort.text)
else if (benutzerName.text.trim()) else if(benutzerName.text.trim()) passwort.forceActiveFocus()
passwort.forceActiveFocus();
} }
} }
} }
Field {
label: qsTr("Passwort")
TextField { RowLayout
{
Layout.alignment: Qt.AlignHCenter
spacing: 15
Label
{
minimumPixelSize: 20
Layout.preferredWidth: 150
text: qsTr ("Passwort")
font.family: damarWulan.font.family
font.weight: damarWulan.font.weight
font.styleName: damarWulan.font.styleName
font.pixelSize: 21
horizontalAlignment: Text.AlignRight
}
TextField
{
id: passwort id: passwort
placeholderText: qsTr ("Passwort eingeben")
echoMode: TextInput.Password
implicitWidth: 300 implicitWidth: 300
placeholderText: qsTr("Passwort eingeben") font: hussarPrint.font
echoMode: TextInput.Password
onAccepted: { onAccepted:
{
if (benutzerName.text.trim() && passwort.text.trim()) if (benutzerName.text.trim() && passwort.text.trim())
loggedin_user.login(benutzerName.text.trim(), passwort.text); loggedin_user.login(benutzerName.text.trim(), passwort.text)
else if (passwort.text.trim()) else if(passwort.text.trim()) benutzerName.forceActiveFocus()
benutzerName.forceActiveFocus();
} }
} }
} }
Button {
Layout.topMargin: Dimensions.m
icon.source: "qrc:/images/ArrowRightEndOnRectangle.svg"
implicitWidth: parent.width
text: qsTr("Login")
onClicked: { RowLayout
{
Layout.preferredWidth: 465
Layout.alignment: Qt.AlignHCenter
Button
{
text: qsTr ("Feierabend für heute!")
Layout.alignment: Qt.AlignRight
font: reginaldScript.font
onClicked:
{
if (benutzerName.text.trim() && passwort.text.trim()) if (benutzerName.text.trim() && passwort.text.trim())
loggedin_user.login(benutzerName.text.trim(), passwort.text); loggedin_user.login(benutzerName.text.trim(), passwort.text)
} }
} }
Item { }
Item
{
Layout.fillHeight: true Layout.fillHeight: true
} }
Dialog {
Dialog
{
id: recoveryPaswordDialog id: recoveryPaswordDialog
anchors.centerIn: parent
modal: true modal: true
standardButtons: Dialog.Ok | Dialog.Cancel
title: qsTr("Wiederherstellung") title: qsTr("Wiederherstellung")
anchors.centerIn: parent
onAccepted: { standardButtons: Dialog.Ok | Dialog.Cancel
recpass = recoveryPaswordInput.text; onAccepted:
getRecoveryDialog.open(); {
recpass = recoveryPaswordInput.text
getRecoveryDialog.open()
} }
ColumnLayout { ColumnLayout
RowLayout { {
Label { RowLayout
{
Label
{
text: qsTr("Wiederherstellungspasswort eingeben: ") text: qsTr("Wiederherstellungspasswort eingeben: ")
} }
TextField {
id: recoveryPaswordInput
TextField
{
id: recoveryPaswordInput
text: ""
echoMode: TextInput.Password echoMode: TextInput.Password
implicitWidth: 300 implicitWidth: 300
placeholderText: qsTr("Hier Wiederherstellungspasswort eingeben") placeholderText: qsTr("Hier Wiederherstellungspasswort eingeben")
text: ""
} }
} }
} }
} }
FileDialog {
id: getRecoveryDialog
currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0] FileDialog
{
id: getRecoveryDialog
title: qsTr("Wiederherstellungsdatei")
fileMode: FileDialog.OpenFile fileMode: FileDialog.OpenFile
nameFilters: ["PYQCRM Recovery files (*.pyqrec)"] nameFilters: ["PYQCRM Recovery files (*.pyqrec)"]
title: qsTr("Wiederherstellungsdatei") currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]
onAccepted: config.getRecoveryKey(getRecoveryDialog.currentFile, recpass) onAccepted: config.getRecoveryKey(getRecoveryDialog.currentFile, recpass)
onRejected: quit() onRejected: quit()
} }
Notifications { Notifications
id: notifications {
id: oschkar
} }
} }
Component.onCompleted:
{
loggedin_user.loginOkay.connect(loggedin)
config.invalidEncryptionKey.connect(getEncryptionKey)
config.checkEncryptionKey()
loggedin_user.noDbConnection.connect(dbConnectionFailed)
benutzerName.forceActiveFocus()
}
function loggedin()
{
appLoader.source = "Dashboard.qml"
}
function getEncryptionKey()
{
recoveryPaswordDialog.open()
}
function dbConnectionFailed(msg)
{
oschkar.notificationBox.informativeText = msg
oschkar.notificationBox.text = "Verbindung zum Datenbankserver verloren"
oschkar.notificationBox.open()
}
} }

View File

@@ -1,120 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
ColumnLayout {
property bool onSubPage: false
height: parent.height
spacing: 0
z: 3
Component.onCompleted: {
onSubPage = Qt.binding(() => contentStack.depth > 1);
}
anchors {
left: parent.left
top: parent.top
}
ButtonGroup {
id: mainNav
}
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/Square3Stack3D-Outline.svg"
target: "/Gui/Dashboard.qml"
text: qsTr("Dashboard")
visible: !onSubPage
}
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/UserGroup-Outline.svg"
target: "/Gui/CustomersTable.qml"
text: qsTr("Kunden")
visible: !onSubPage
}
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/BuildingOffice2-Outline.svg"
target: "/Gui/ObjectsTable.qml"
text: qsTr("Objekt")
visible: !onSubPage
}
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/Identification-Outline.svg"
target: "/Gui/Employees/EmployeesTable.qml"
text: qsTr("Mitarbeiter")
visible: !onSubPage
}
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/RectangleStack-Outline.svg"
target: "/Gui/OffersTable.qml"
text: qsTr("Angebote")
visible: !onSubPage
}
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/Wallet-Outline.svg"
text: qsTr("Abrechnung")
visible: !onSubPage
}
BarButton {
icon.source: "qrc:/images/ArrowLeftCircle-Outline.svg"
text: qsTr("Zurück")
visible: onSubPage
checkable: false
onClicked: contentStack.pop();
}
Item {
Layout.fillHeight: true
}
BarButton {
checkable: false
icon.source: "qrc:/images/Bars3.svg"
onClicked: mainMenu.open()
Menu {
id: mainMenu
MenuItem {
text: qsTr("Einstellungen")
onTriggered: {
// TODO: Check if logged-in user is admin first!!
contentStack.push("PyqcrmConf.qml");
}
}
MenuSeparator {
}
MenuItem {
text: qsTr("Als PDF exportieren")
}
MenuSeparator {
}
MenuItem {
text: qsTr("Drucken")
}
MenuItem {
text: qsTr("Erweiterter Druck")
onTriggered: printerDialog.show()
}
MenuSeparator {
}
MenuItem {
text: qsTr("Über PYQCRM")
onTriggered: readMeWin.show()
}
}
}
}

View File

@@ -1,27 +1,74 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts
ColumnLayout { Rectangle
{
anchors.fill: parent
color: "slateblue"
Rectangle
{
id: info
anchors.horizontalCenter: parent.horizontalCenter
color: "slateblue"
implicitHeight: 55
implicitWidth: parent.width / 4
y: parent.height / 4
Text
{
anchors.centerIn: parent anchors.centerIn: parent
spacing: Dimensions.s
height: implicitHeight
H1 {
Layout.alignment: Qt.AlignCenter
text: qsTr("Keine Verbindung zur Datenbank!") text: qsTr("Keine Verbindung zur Datenbank!")
color: Colors.foreground color: "moccasin"
font.bold: true
font.pixelSize: 45
} }
H2 {
Layout.alignment: Qt.AlignCenter
text: qsTr("Programm kann nicht starten…")
color: Colors.foreground
} }
Button {
Layout.topMargin: Dimensions.l
Layout.alignment: Qt.AlignCenter
text: qsTr("Beenden")
Rectangle
{
id: nostart
anchors.top: info.bottom
color: "slateblue"
anchors.horizontalCenter: parent.horizontalCenter
implicitHeight: 55
implicitWidth: parent.width / 4
Text
{
text: qsTr("Programm kann nicht starten..")
color: "moccasin"
anchors.centerIn: parent
font.bold: true
font.pixelSize: 45
}
}
Rectangle
{
anchors.top: nostart.bottom
anchors.topMargin: 25
anchors.horizontalCenter: parent.horizontalCenter
color: "slateblue"
implicitHeight: 55
implicitWidth: parent.width / 4
Button
{
width: parent.width
height: 75
Text
{
text: qsTr("Beenden")
color: "moccasin"
anchors.centerIn: parent
font.bold: true
font.pixelSize: 45
}
anchors.centerIn: parent
background: Rectangle
{
color: "dodgerblue"
radius: 50
}
onClicked: Qt.quit() onClicked: Qt.quit()
} }
}
} }

View File

@@ -3,6 +3,8 @@ import QtQuick.Dialogs
Item Item
{ {
id: oschkar
property alias notificationBox: notificationDialog
MessageDialog MessageDialog
{ {
id: notificationDialog id: notificationDialog

View File

@@ -35,45 +35,71 @@ GridLayout
} }
Label Label
{ {
text: qsTr("Vorname*") text: qsTr("Vorname")
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
id: firstname id: firstname
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
// onTextChanged: checkContactFields() // onTextChanged: checkContactFields()
} }
Label Label
{ {
text: qsTr("Nachname*") text: qsTr("Nachname")
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
id: lastname id: lastname
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
text: mobile.text ? qsTr("Telefonnummer") : qsTr("Telefonnummer*") text: qsTr("Telefonnummer")
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
id: phonenumber id: phonenumber
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: mobile.text ? "" : "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
text: phonenumber.text ? qsTr("Mobil") : qsTr("Mobil*") text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
id: mobile id: mobile
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: phonenumber.text ? "" : "Pflichtfeld"
placeholderTextColor: "red"
} }
// Label
// {
// text: qsTr("Position")
// Layout.alignment: Qt.AlignRight
// }
// TextField
// {
// id: posizion
// Layout.fillWidth: true
// placeholderText: "Pflichtfeld"
// placeholderTextColor: "red"
// }
RowLayout RowLayout
{ {

View File

@@ -16,7 +16,7 @@ Item
Button Button
{ {
text: qsTr("Zurück zu den Objekten") text: qsTr("Zurück zu den Objekten")
onClicked: contentStack.pop() onClicked: objectsStack.pop()
} }
} }

23
Gui/ObjectTable.qml Normal file
View File

@@ -0,0 +1,23 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
import QtQuick.Controls.Fusion
Item {
property var availableFilters: [""]
StackView
{
id: objectsStack
anchors.fill: parent
initialItem: "ObjectsTable.qml"
anchors.margins: 9
}
}

View File

@@ -27,7 +27,7 @@ GridLayout
Label Label
{ {
text: qsTr("Straße*") text: qsTr("Straße")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -38,10 +38,12 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
text: qsTr("Nr.*") text: qsTr("Nr.")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -52,11 +54,13 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
text: qsTr("PLZ*") text: qsTr("PLZ")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
@@ -66,6 +70,8 @@ GridLayout
id: postcode id: postcode
Layout.fillWidth: true Layout.fillWidth: true
onTextChanged: checkFields() onTextChanged: checkFields()
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
@@ -84,6 +90,7 @@ GridLayout
model: address_model model: address_model
textRole: "city" textRole: "city"
popup.height: 300 popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1 currentIndex: -1
} }
@@ -146,7 +153,8 @@ GridLayout
} }
TextField TextField
{id: gesamtnetto {
id: gesamtnetto
Layout.fillWidth: true Layout.fillWidth: true
Layout.columnSpan: 3 Layout.columnSpan: 3
} }

View File

@@ -2,101 +2,45 @@ import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
import QtQuick.Controls.Fusion
ColumnLayout Item
{ {
property var availableFilters: [""]
anchors.fill: parent
spacing: Dimensions.l
function viewCriterion(criterion)
{
business_model.viewCriterion(criterion.text);
}
function onObjectContactAdded(added)
{
console.log(added)
if (added) object_model.viewCriterion("")
}
Component.onCompleted:
{
contact_model.objectContactAdded.connect(onObjectContactAdded)
contentStack.pop()
}
RowLayout
{
Layout.fillWidth: true
spacing: Dimensions.l
SearchBar SearchBar
{ {
} id:searchBar
QuickFilter { anchors.margins: 9
onSelectedChanged: (name) => {
business_model.viewCriterion(name)
} }
model: ListModel {
ListElement {
name: "Alle"
text: qsTr("Alle")
selected: true
}
ListElement {
name: "Interessent"
text: qsTr("Interessent")
selected: false
}
ListElement {
name: "Kunde"
text: qsTr("Kunde")
selected: false
}
ListElement {
name: "Lieferant"
text: qsTr("Lieferant")
selected: false
}
ListElement {
name: "Erledigt"
text: qsTr("Erledigt")
selected: false
}
}
}
Button Button
{ {
id: addObjectBtn id: addObjectBtn
icon.source: "qrc:/images/PlusCircle.svg" icon.source: "qrc:/images/addbusiness.svg"
text: qsTr("Objekt Hinzufügen") icon.color: "olive"
Layout.alignment: Qt.AlignRight anchors.right: parent.right
onClicked: contentStack.push("AddObject.qml") flat: true
} onClicked: appLoader.source = "AddObject.qml"
} }
ColumnLayout ColumnLayout
{ {
id: tableColumn id: tableColumn
Layout.fillWidth: true
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
clip: true clip: true
// anchors anchors
// { {
// top: searchBar.bottom top: searchBar.bottom
// bottom: parent.bottom bottom: parent.bottom
// left: parent.left left: parent.left
// right: parent.right right: parent.right
// topMargin: 15 topMargin: 15
// } }
HorizontalHeaderView HorizontalHeaderView
{ {
id: horizontalHeaderview id: horizontalHeaderview
Layout.fillWidth: true Layout.fillWidth: true
implicitHeight: 40 implicitHeight: 40
//visible: false
movableColumns: true //@disable-check M16 movableColumns: true //@disable-check M16
syncView: objectTable syncView: objectTable
@@ -123,9 +67,8 @@ ColumnLayout
{ {
property real newWidth: 0 property real newWidth: 0
id: objectTable id: objectTable
z: 1 z: 0
// height: tableColumn.height - horizontalHeaderview.height height: tableColumn.height - horizontalHeaderview.height
Layout.fillHeight: true
Layout.fillWidth: true Layout.fillWidth: true
columnSpacing: 1 columnSpacing: 1
rowSpacing: 2 rowSpacing: 2
@@ -174,7 +117,7 @@ ColumnLayout
hoverEnabled: true hoverEnabled: true
onDoubleClicked: onDoubleClicked:
{ {
contentStack.push("ObjectDetails.qml", {selectedObject: row}); objectsStack.push("ObjectDetails.qml", {selectedObject: row});
} }
onEntered: onEntered:
{ {
@@ -182,10 +125,34 @@ ColumnLayout
} }
} }
} }
// onContentWidthChanged:
// {
// redrawTable.start()
// }
} }
Item
{
Layout.fillWidth: true
} }
Item { }
Layout.fillHeight: true // function viewCriterion(criterion)
// {
// object_model.viewCriterion(criterion.text)
// }
Component.onCompleted:
{
contact_model.objectContactAdded.connect(onObjectContactAdded)
objectsStack.pop()
}
function onObjectContactAdded(added)
{
console.log(added)
if (added) object_model.viewCriterion("")
} }
} }

17
Gui/OfferTable.qml Normal file
View File

@@ -0,0 +1,17 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
Item
{
StackView
{
id: employeesStack
anchors.fill: parent
initialItem: "OffersTable.qml"
anchors.margins: 9
}
}

View File

@@ -3,64 +3,13 @@ import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
ColumnLayout { Item
function viewOffers(criterion) { {
//offer_model.viewCriterion(criterion) property var availableFilters: []
}
anchors.fill: parent SearchBar
spacing: Dimensions.l {
id:searchBar
RowLayout { anchors.margins: 9
Layout.fillWidth: true
spacing: Dimensions.l
SearchBar {
id: searchBar
}
QuickFilter {
model: ListModel {
ListElement {
name: "Alle"
selected: true
text: qsTr("Alle")
}
ListElement {
name: "Offen"
selected: false
text: qsTr("Offen")
}
ListElement {
name: "Abgeschlossen"
selected: false
text: qsTr("Abgeschlossen")
}
ListElement {
name: "Erledigt"
selected: false
text: qsTr("Erledigt")
}
}
onSelectedChanged: name => {
business_model.viewCriterion(name);
}
}
Button {
id: addOfferBtn
Layout.alignment: Qt.AlignRight
flat: true
icon.source: "qrc:/images/PlusCircle.svg"
text: qsTr("Angebote Hinzufügen")
onClicked: contentStack.push("AddOffer.qml")
}
}
Item {
id: spacer
Layout.fillHeight: true
} }
} }

View File

@@ -1,6 +1,7 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import "qrc:/TeroStyle"
Window Window
{ {

View File

@@ -1,6 +1,7 @@
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
//import "qrc:/TeroStyle"
Item Item
{ {
@@ -101,7 +102,7 @@ Item
Button Button
{ {
text: qsTr("Ablehnen") text: qsTr("Ablehnen")
onClicked: contentStack.pop() onClicked: appLoader.source = "Dashboard.qml"
} }
Button Button

82
Gui/SearchBar.qml Normal file
View File

@@ -0,0 +1,82 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
RowLayout
{
id: searchBar
TextField
{
id: searchField
placeholderText: qsTr("Suche")
leftPadding: 3
rightPadding: 3
Layout.preferredWidth: 300
Button
{
icon.source: "qrc:/images/search.svg"
icon.color: "olive"
x: parent.x + parent.width - width
height: parent.height
flat: true
}
Button
{
id: filterBtn
icon.source: "qrc:/images/filter.svg"
icon.color: "olive"
x: parent.x + parent.width
height: searchField.height
flat: true
onClicked: filterPopup.open()
}
}
Popup
{
id: filterPopup
x: filterBtn.x + filterBtn.width
y: filterBtn.y
width: 100
height: 150
modal: true
focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent
contentItem: Item
{
ColumnLayout
{
anchors.fill: parent
//id: filterContent
Repeater
{
model: availableFilters
CheckBox
{
text: model.modelData
onClicked:
{
setFilter(text, checkState)
}
}
}
}
}
}
function setFilter(filter,activated)
{
console.log(filter)
console.log(activated)
}
}

241
Gui/TopBar.qml Normal file
View File

@@ -0,0 +1,241 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
RowLayout
{
id: topBar
spacing: 0
height: 35
width: parent.width
anchors
{
top: parent.top
left: parent.left
}
Button
{
id: dashBoard
flat: true
text: qsTr("Dashboard")
implicitWidth: abrechnung.implicitContentWidth + 10
Layout.margins: 3
background: Rectangle
{
id: dashiBackie
border.width: dashBoard.activeFocus ? 2 : 1
border.color: "#888"
radius: 4
gradient: Gradient
{
GradientStop { position: 0 ; color: dashBoard.pressed ? "#000" : "#001" }
GradientStop { position: 1 ; color: dashBoard.pressed ? "#100" : "#000" }
}
}
onClicked:
{
appLoader.source = "Dashboard.qml"
dashiBackie.border.width = 2
kundiBackie.border.width = 1
mitoBackie.border.width = 1
invoBackie.border.width = 1
objBackie.border.width = 1
}
}
Button
{
id: kunden
flat: true
text: qsTr("Kunden")
implicitWidth: abrechnung.implicitContentWidth + 10
Layout.margins: 3
background: Rectangle
{
id: kundiBackie
border.width: kunden.activeFocus ? 2 : 1
border.color: "#888"
radius: 4
gradient: Gradient
{
GradientStop { position: 0 ; color: kunden.pressed ? "#000" : "#001" }
GradientStop { position: 1 ; color: kunden.pressed ? "#100" : "#000" }
}
}
onClicked:
{
// TODO: here we should call the model
appLoader.source = "CustomerTable.qml"
kundiBackie.border.width = 2
dashiBackie.border.width = 1
mitoBackie.border.width = 1
invoBackie.border.width = 1
objBackie.border.width = 1
}
}
Button
{
id: objekt
flat: true
text: qsTr("Objekt")
implicitWidth: abrechnung.implicitContentWidth + 10
Layout.margins: 3
background: Rectangle
{
id: objBackie
border.width: objekt.activeFocus ? 2 : 1
border.color: "#888"
radius: 4
gradient: Gradient
{
GradientStop { position: 0 ; color: objekt.pressed ? "#000" : "#001" }
GradientStop { position: 1 ; color: objekt.pressed ? "#100" : "#000" }
}
}
onClicked:
{
appLoader.source = "ObjectTable.qml"
objBackie.border.width = 2
dashiBackie.border.width = 1
kundiBackie.border.width = 1
mitoBackie.border.width = 1
invoBackie.border.width = 1
}
}
Button
{
id: mitarbeiter
flat: true
text: qsTr("Mitarbeiter")
implicitWidth: abrechnung.implicitContentWidth + 10
Layout.margins: 3
background: Rectangle
{
id: mitoBackie
border.width: mitarbeiter.activeFocus ? 2 : 1
border.color: "#888"
radius: 4
gradient: Gradient
{
GradientStop { position: 0 ; color: mitarbeiter.pressed ? "#000" : "#001" }
GradientStop { position: 1 ; color: mitarbeiter.pressed ? "#100" : "#000" }
}
}
onClicked:
{
appLoader.source = "EmployeeTable.qml"
mitoBackie.border.width = 2
dashiBackie.border.width = 1
kundiBackie.border.width = 1
invoBackie.border.width = 1
objBackie.border.width = 1
}
}
Button
{
id: offers
flat: true
text: qsTr("Angebote")
implicitWidth: abrechnung.implicitContentWidth + 10
Layout.margins: 3
background: Rectangle
{
id: offersBackie
border.width: offers.activeFocus ? 2 : 1
border.color: "#888"
radius: 4
gradient: Gradient
{
GradientStop { position: 0 ; color: offers.pressed ? "#000" : "#001" }
GradientStop { position: 1 ; color: offers.pressed ? "#100" : "#000" }
}
}
onClicked:
{
appLoader.source = "OfferTable.qml"
mitoBackie.border.width = 2
dashiBackie.border.width = 1
kundiBackie.border.width = 1
invoBackie.border.width = 1
objBackie.border.width = 1
offersBackie.border.width = 1
}
}
Button
{
id: abrechnung
flat: true
text: qsTr("Abrechnung")
implicitWidth: abrechnung.implicitContentWidth + 10
Layout.margins: 3
background: Rectangle
{
id: invoBackie
border.width: abrechnung.activeFocus ? 2 : 1
border.color: "#888"
radius: 4
gradient: Gradient
{
GradientStop { position: 0 ; color: abrechnung.pressed ? "#000" : "#001" }
GradientStop { position: 1 ; color: abrechnung.pressed ? "#100" : "#000" }
}
}
}
Item
{
id: hspacer
Layout.fillWidth: true
}
Button
{
id: atajos
icon.source: "qrc:/images/menu.svg"
icon.color: "red"
flat: true
Layout.rightMargin: 9
onClicked: mainMenu.open()
Menu {
id: mainMenu
MenuItem
{
//text: qsTr("Benutzer-Verwaltung")
//onTriggered: appLoader.source = "UsersPage.qml"
text: qsTr("Einstellungen")
onTriggered:
{
// TODO: Check if logged-in user is admin first!!
appLoader.source = "PyqcrmConf.qml"
}
}
MenuSeparator {}
MenuItem { text: qsTr("Als PDF exportieren") }
MenuSeparator {}
MenuItem { text: qsTr("Drucken") }
MenuItem
{
text: qsTr("Erweiterter Druck")
onTriggered: printerDialog.show()
}
MenuSeparator {}
MenuItem
{
text: qsTr("Über PYQCRM")
onTriggered: readMeWin.show()
}
}
}
}

View File

@@ -97,7 +97,7 @@ Item
title: qsTr("Wiederherstellen") title: qsTr("Wiederherstellen")
buttons: MessageDialog.Yes | MessageDialog.No buttons: MessageDialog.Yes | MessageDialog.No
onAccepted: recoveryPasswordDialog.open() onAccepted: recoveryPasswordDialog.open()
onRejected: contentStack.replace("LoginSreen.qml") onRejected: gotoLogin()
} }
MessageDialog MessageDialog

View File

@@ -4,142 +4,173 @@ import QtQuick.Controls
import QtQuick.Dialogs import QtQuick.Dialogs
import QtCore import QtCore
ApplicationWindow { ApplicationWindow
{
//property alias appLoader: appLoader
id: appWindow id: appWindow
width: Screen.width * .75
height: Screen.height * .85
visible: true
title: "PYQCRM"
property string confile: "" property string confile: ""
property alias settingsFileDialog: settingsFiledialog property alias settingsFileDialog: settingsFiledialog
function showWindow(why) {
if (why === 3) { TopBar
systray.setVisible(false); {
appWindow.show();
} id:topBar
anchors
{
rightMargin: 9
leftMargin: 9
} }
font: Typography.body visible: bad_config || !db_con ? false: true
height: Screen.height * .85
palette.window: Colors.mantle
palette.placeholderText: Colors.interactive
palette.text: Colors.foreground
title: "TERO Personal"
visible: true
width: Screen.width * .75
Component.onCompleted: {
systray.activated.connect(showWindow);
if (bad_config) {
importDialog.open();
} else {
if (db_con)
contentStack.replace("LoginScreen.qml")
else
contentStack.replace("NoDbConnection.qml");
}
}
onClosing: close => {
if (false) {
console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!");
}
}
onVisibilityChanged: {
if (appWindow.visibility === Window.Minimized && config.systray()) {
systray.setVisible(true);
appWindow.hide();
}
}
onWindowStateChanged: windowState => {
if (windowState !== Qt.WindowMinimized) {
systray.setVisible(false);
appWindow.show();
}
} }
Navigation { PrinterDialog
id: navigation {
visible: !(bad_config || !db_con)
}
PrinterDialog {
id: printerDialog id: printerDialog
} }
ReadMe {
ReadMe
{
id: readMeWin id: readMeWin
} }
Item {
Item
{
id: mainView id: mainView
} }
Rectangle { Loader
id: contentBackground {
anchors { id: appLoader
bottom: parent.bottom
left: navigation.visible ? navigation.right : parent.left anchors
{
left: parent.left
right: parent.right right: parent.right
top: parent.top top: topBar.bottom
} bottom: parent.bottom
color: Colors.background topMargin: 0
bottomMargin: 5
rightMargin: 9
leftMargin: 9
} }
StackView { property alias window: appWindow
id: contentStack
anchors {
fill: contentBackground
margins: Dimensions.l
}
} }
Dialog {
Dialog
{
id: importDialog id: importDialog
anchors.centerIn: parent
modal: true modal: true
anchors.centerIn: parent
standardButtons: Dialog.Yes | Dialog.No standardButtons: Dialog.Yes | Dialog.No
title: qsTr("Einstellungen importieren")
onAccepted: settingsFiledialog.open() onAccepted: settingsFiledialog.open()
onRejected: contentStack.replace("Firststart.qml") onRejected: appLoader.source= "Firststart.qml"
title: qsTr("Einstellungen importieren")
} }
FileDialog {
id: settingsFiledialog
FileDialog
{
id: settingsFiledialog
title: qsTr("PYQCRM Einstellungen")
currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0] currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]
modality: "ApplicationModal" modality: "ApplicationModal"
nameFilters: [qsTr("PYQCRM Einstellungen (*.pyqrec)")] nameFilters: [qsTr("PYQCRM Einstellungen (*.pyqrec)")]
title: qsTr("PYQCRM Einstellungen") onAccepted:
{
exportFilePassword.open()
confile = selectedFile
}
}
onAccepted: { Dialog
exportFilePassword.open(); {
confile = selectedFile;
}
}
Dialog {
id: exportFilePassword id: exportFilePassword
anchors.centerIn: parent
modal: true modal: true
standardButtons: Dialog.Ok | Dialog.Cancel
title: qsTr("PYQCRM Einstellungen") title: qsTr("PYQCRM Einstellungen")
anchors.centerIn: parent
standardButtons: Dialog.Ok | Dialog.Cancel
onAccepted: config.importConfig(confile, exportPasswordInput.text) onAccepted: config.importConfig(confile, exportPasswordInput.text)
ColumnLayout
ColumnLayout { {
RowLayout { RowLayout
Label { {
Label
{
text: qsTr("Passwort eingeben:") text: qsTr("Passwort eingeben:")
} }
TextField {
id: exportPasswordInput
TextField
{
id: exportPasswordInput
echoMode: TextInput.Password echoMode: TextInput.Password
implicitWidth: 300 implicitWidth: 300
} }
} }
} }
} }
Component.onCompleted:
{
config.configurationReady.connect(goToLogin)
systray.activated.connect(showWindow)
if(bad_config)
{
importDialog.open()
}
else
{
if (db_con) appLoader.source= "LoginScreen.qml"
else appLoader.source= "NoDbConnection.qml"
}
}
function showWindow(why)
{
if (why === 3)
{
systray.setVisible(false)
appWindow.show()
}
}
onVisibilityChanged:
{
if (appWindow.visibility === Window.Minimized && config.systray())
{
systray.setVisible(true)
appWindow.hide()
}
}
onWindowStateChanged: (windowState) =>
{
if (windowState !== Qt.WindowMinimized)
{
systray.setVisible(false)
appWindow.show()
}
}
onClosing: (close) =>
{
if (false)
{
console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!")
}
}
function goToLogin()
{
appLoader.source= "LoginScreen.qml"
topBar.visible = true
}
} }

View File

@@ -1,2 +1,2 @@
module gui module gui
Navigation 1.0 Navigation.qml TopBar 1.0 TopBar.qml

View File

@@ -1,61 +0,0 @@
import QtQuick
import QtQuick.Controls.impl
import QtQuick.Controls
import QtQuick.Templates as T
T.ToolButton {
id: control
property string target
checkable: true
icon.color: Colors.foreground
icon.height: 36
icon.width: 36
implicitHeight: 90
implicitWidth: 100
topPadding: 20
contentItem: Column {
readonly property color color: control.checked ? Colors.primaryShade : control.hovered ? Colors.primary : Colors.foreground
IconLabel {
color: parent.color
icon.color: parent.color
icon.height: control.icon.height
icon.source: control.icon.source
icon.width: control.icon.width
x: parent.width * .5 - width * .5
}
Label {
color: parent.color
font: Typography.smaller
text: control.text
x: parent.width * .5 - width * .5
}
}
Rectangle {
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.top: parent.top
color: control.checked ? Colors.primaryShade : Colors.primary
implicitWidth: 6
visible: control.checked || control.hovered
}
MouseArea {
id: mouseArea
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onPressed: mouse => mouse.accepted = false
}
onClicked: {
if(!target) {
return
}
contentStack.replace(target)
}
}

84
TeroStyle/Button.qml Normal file → Executable file
View File

@@ -1,69 +1,37 @@
import QtQuick import QtQuick
import QtQuick.Layouts
import QtQuick.Controls.impl as I
import QtQuick.Templates as T import QtQuick.Templates as T
T.Button
{
id: tsBut
property int tsWidth: tsButtonText.width + 10
property int tsHeight: tsButtonText.height + 8
T.Button { height: tsHeight
id: control width: tsWidth
/** background: Rectangle
* Set true when the button is supposed to be displayed in e.g. a TextField. {
* You want to do this when this button is directly related to the TextField id: tsButton
* and the primary and only action for the TextField.
* Usually, you'd only want to display an icon in this button.
* If true, automatically sets height, width and position.
*
* ```qml
* TextField {
* placeholderText: "Search..."
* Button {
* icon.source: "qrc:/images/MagnifyingGlass.svg"
* isFieldButton: true
* }
* }
* ```
*/
property bool isFieldButton: false
height: isFieldButton ? parent.height : null
icon.color: Colors.primaryContrast
icon.height: 21
icon.width: 21
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitContentHeight + topPadding + bottomPadding)
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, implicitContentWidth + leftPadding + rightPadding)
/**
* Icon is slightly larger than Text, so we need to reduce the padding a
* tiny bit to make sure all Buttons are still the same height.
*/
padding: Dimensions.m - (icon.source.toString() === "" ? 0 : 1)
x: isFieldButton ? parent.x + parent.width - width : null
background: Rectangle {
anchors.fill: parent anchors.fill: parent
border.color: Colors.interactive radius: 50
border.width: isFieldButton ? 1 : 0 color: "red"
bottomLeftRadius: topLeftRadius
color: !control.enabled ? Colors.disabled : !control.hovered ? Colors.primary : Colors.primaryLighter
radius: Dimensions.radius
topLeftRadius: isFieldButton ? 0 : radius
}
contentItem: I.IconLabel {
color: !control.enabled ? Colors.disabledForeground : Colors.primaryContrast
display: control.display
font: control.font
icon: control.icon
mirrored: control.mirrored
spacing: Dimensions.s
text: control.text
}
MouseArea { MouseArea
{
id: mouseArea id: mouseArea
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor onClicked: tsBut.clicked()
}
onPressed: mouse => mouse.accepted = false Text
{
id: tsButtonText
anchors.centerIn: parent
color: "indigo"
//font.pixelSize: 13
font: tsBut.font
text: tsBut.text
}
} }
} }

View File

@@ -1,26 +0,0 @@
pragma Singleton
import QtQuick
QtObject {
readonly property int dark: 0
readonly property int light: 1
property int theme: Application.styleHints.colorScheme === Qt.ColorScheme.Light ? light : dark
readonly property color primary: "#b81a34"
readonly property color primaryContrast: "#fdfdfd"
readonly property color primaryLighter: Qt.lighter(primary, 1.5)
readonly property color primaryShade: theme === dark ? primaryLighter : Qt.darker(primary, 1.5)
readonly property color primaryHighlight: theme === dark ? Qt.darker(primary, 2- Colors.highlightOpacity) : Qt.lighter(primary, 2- Colors.highlightOpacity)
readonly property color foreground: theme === dark ? "#fdfdfd" : "#110b0c"
readonly property color background: theme === dark ? "#303136" : "#eff1f5"
readonly property color mantle: theme === dark ? "#1E1E23" : "#e7e9ef"
readonly property color interactive: theme === dark ? "#878b97" : "#d9d9da"
readonly property color error: theme === dark ? "#ff2264" : "#ff004b"
readonly property color disabled: theme === dark ? Qt.darker(interactive, 1.9) : Qt.darker(interactive, 1.3)
readonly property color disabledForeground: theme === dark ? Qt.darker(foreground, 1.4) : Qt.lighter(foreground, 1.9)
readonly property color transparent: "transparent"
readonly property double highlightOpacity: .3
}

View File

@@ -1,108 +0,0 @@
import QtQuick
import QtQuick.Templates as T
import QtQuick.Controls
import QtQuick.Controls.impl
T.ComboBox {
id: control
font: Typography.body
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + topPadding + bottomPadding,
implicitIndicatorHeight + topPadding + bottomPadding)
contentItem: T.TextField {
id: test
autoScroll: control.editable
color: Colors.foreground
enabled: control.editable
font: Typography.body
implicitHeight: Typography.body.pixelSize + topPadding + bottomPadding
inputMethodHints: control.inputMethodHints
padding: Dimensions.m
readOnly: control.down
selectByMouse: control.selectTextByMouse
text: control.editable ? control.editText : control.displayText
validator: control.validator
width: control.width - indicator.width
verticalAlignment: Text.AlignVCenter
}
background: Rectangle {
border.color: Colors.interactive
border.width: 1
color: Colors.mantle
radius: Dimensions.radius
width: parent.width
}
delegate: ItemDelegate {
required property var model
required property int index
width: ListView.view.width
text: model[control.textRole]
highlighted: control.highlightedIndex === index
hoverEnabled: control.hoverEnabled
}
indicator: Rectangle {
id: indicator
border.color: Colors.interactive
bottomRightRadius: Dimensions.radius
color: Colors.primary
height: control.height
topRightRadius: Dimensions.radius
width: 20 + Dimensions.s * 2
x: control.width - width
y: 0
z: 2
IconLabel {
anchors.fill: parent
bottomPadding: Dimensions.s
icon.color: Colors.foreground
icon.source: "qrc:/images/ChevronDown.svg"
leftPadding: Dimensions.s
rightPadding: Dimensions.s
topPadding: Dimensions.s
}
MouseArea {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onPressed: () => {
control.popup.visible = true;
control.popup.forceActiveFocus()
}
}
}
popup: T.Popup {
bottomMargin: 6
height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin)
padding: 1
topMargin: 6
width: control.width
y: control.height
background: Rectangle {
border.color: Colors.interactive
color: Colors.mantle
radius: Dimensions.radius
}
contentItem: ListView {
clip: true
currentIndex: control.highlightedIndex
implicitHeight: contentHeight
model: control.popup.visible ? control.delegateModel : null
T.ScrollBar.vertical: ScrollBar {
}
highlight: Rectangle {
color: Colors.primary
opacity: Colors.highlightOpacity
}
}
}
}

View File

@@ -1,26 +0,0 @@
pragma Singleton
import QtQuick
QtObject
{
/**
* Distance for objects that are tied to each other,
* e.g. a field and its label.
*/
readonly property int s: 9
/**
* Distance for objects that are grouped together, e.g. radio buttons of the
* same radio group.
*/
readonly property int m: 15
/**
* Distance for objects that are not related to each other, or to objects
* and their container.
*/
readonly property int l: 30
readonly property int radius: 4
}

View File

@@ -1,5 +0,0 @@
import QtQuick
RegularExpressionValidator {
regularExpression: /([\+!#$%&\*\\/\=?\^_`\.{|}\~\-\_0-9A-Za-z]{1,185})@([0-9A-Za-z\.\-\_]{1,64})\.([a-zA-z]{2,5})/
}

View File

@@ -1,20 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
ColumnLayout
{
required property string label
/**
* Adds an asterisk after the label, informing the user that this field
* is mandatory.
*/
property bool mandatory: false
spacing: Dimensions.s
Label
{
text: label + (mandatory ? "*" : "")
font: Typography.body
}
}

View File

@@ -1,5 +0,0 @@
import QtQuick
Text {
font: Typography.h1
}

View File

@@ -1,5 +0,0 @@
import QtQuick
Text {
font: Typography.h2
}

View File

@@ -1,5 +0,0 @@
import QtQuick.Controls
Label {
color: Colors.foreground
}

View File

@@ -1,5 +0,0 @@
import QtQuick
RegularExpressionValidator {
regularExpression: /^\S+.*\S+$/
}

View File

@@ -1,5 +0,0 @@
import QtQuick
RegularExpressionValidator {
regularExpression: /^$|([\+!#$%&\*\\/\=?\^_`\.{|}\~\-\_0-9A-Za-z]{1,185})@([0-9A-Za-z\.\-\_]{1,64})\.([a-zA-z]{2,5})/
}

View File

@@ -1,5 +0,0 @@
import QtQuick
RegularExpressionValidator {
regularExpression: /^$|([+0-9])([0-9\s]{1,17})/
}

View File

@@ -1,5 +0,0 @@
import QtQuick
RegularExpressionValidator {
regularExpression: /([+0-9])([0-9\s]{1,17})/
}

View File

@@ -1,5 +0,0 @@
import QtQuick
RegularExpressionValidator {
regularExpression: /([^$][0-9]{1,4})/
}

View File

@@ -1,64 +0,0 @@
import QtQuick
import QtCore
import QtQuick.Layouts
RowLayout {
id: root
required property ListModel model
signal selectedChanged(string name)
spacing: Dimensions.m
Repeater {
model: root.model
Item {
id: item
required property int index
required property var modelData
property bool hovered: false
property real padding: Dimensions.m
height: text.height + padding * 2
width: text.width + padding * 2
Rectangle {
anchors.fill: parent
border.color: modelData.selected ? Colors.transparent : Colors.foreground
border.width: 2
color: modelData.selected || mouseArea.containsMouse ? Colors.primary : Colors.transparent
radius: parent.height
}
Text {
id: text
color: Colors.foreground
font: Typography.body
text: modelData.text
x: parent.padding
y: parent.padding
}
MouseArea {
id: mouseArea
hoverEnabled: true
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
onPressed: {
if (item.modelData.selected)
return;
const model = root.model;
for (let i = 0; i < model.count; i++) {
model.setProperty(i, "selected", false);
}
model.setProperty(item.index, "selected", true);
selectedChanged(item.modelData.name)
}
}
}
}
}

View File

@@ -1,26 +0,0 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
TextField {
id: field
signal submitted(query: string)
Layout.preferredWidth: 300
placeholderText: qsTr("Suche")
Keys.onReturnPressed: {
field.submitted(field.text);
}
Button {
icon.source: "qrc:/images/MagnifyingGlass.svg"
isFieldButton: true
onClicked: {
field.submitted(field.text)
}
}
}

15
TeroStyle/TeroStyle.qml Normal file
View File

@@ -0,0 +1,15 @@
import QtQuick
import QtQuick.Controls
Item
{
id: teroStyle
anchors.fill: parent
Rectangle
{
anchors.fill: parent
color: "dodgerblue"
}
}

View File

@@ -1,47 +0,0 @@
import QtQuick
import QtQuick.Templates as T
T.TextField
{
id: control
background: Rectangle
{
id: background
color: Colors.mantle
radius: Dimensions.radius
border.width: !control.focus ? 1 : 2
border.color: Colors.interactive
height: control.implicitHeight
}
color: Colors.foreground
implicitHeight: Typography.body.pixelSize + topPadding + bottomPadding
placeholderTextColor: Colors.interactive
font: Typography.body
padding: Dimensions.m
verticalAlignment: Text.AlignVCenter
/**
* Placeholder
*/
Text {
x: control.leftPadding
y: control.topPadding
width: control.width - (control.leftPadding + control.rightPadding)
height: control.height - (control.topPadding + control.bottomPadding)
font: control.font
text: control.placeholderText
color: control.placeholderTextColor
verticalAlignment: control.verticalAlignment
visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
elide: Text.ElideRight
renderType: control.renderType
}
}

View File

@@ -1,56 +0,0 @@
pragma Singleton
import QtCore
import QtQuick
Item {
readonly property font body: ({
family: robotoCondensed.font,
pointSize: 16,
weight: Font.Medium,
letterSpacing: 0,
kerning: true
})
readonly property font small: ({
family: body.family,
pointSize: 14,
weight: Font.Medium,
letterSpacing: body.letterSpacing,
kerning: body.kerning
})
readonly property font smallBold: ({
family: small.family,
pointSize: small.pointSize,
weight: Font.Bold,
letterSpacing: small.letterSpacing,
kerning: small.kerning
})
readonly property font smaller: ({
family: body.family,
pointSize: 11,
weight: Font.DemiBold,
letterSpacing: body.letterSpacing,
kerning: body.kerning
})
readonly property font h1: ({
family: body.family,
pointSize: 38,
weight: body.weight,
letterSpacing: body.letterSpacing,
kerning: body.kerning
})
readonly property font h2: ({
family: body.family,
pointSize: 28,
weight: body.weight,
letterSpacing: body.letterSpacing,
kerning: body.kerning,
})
readonly property FontLoader robotoCondensed: FontLoader {
source: "qrc:/fonts/RobotoCondensed.otf"
}
}

21
TeroStyle/qmldir Normal file → Executable file
View File

@@ -1,20 +1,3 @@
module TeroStyle module TeroStyle
singleton Colors Colors.qml TeroStyle 1.0 TeroStyle.qml
singleton Dimensions Dimensions.qml Button 1.0 Button.qml
singleton Typography Typography.qml
BarButton BarButton.qml
Button Button.qml
ComboBox ComboBox.qml
EmailAddressValidator EmailAddressValidator.qml
Field Field.qml
H1 H1.qml
H2 H2.qml
Label Label.qml
NotEmptyValidator NotEmptyValidator.qml
OptionalEmailAddressValidator OptionalEmailAddressValidator.qml
PhoneNumberValidator PhoneNumberValidator.qml
OptionalPhoneNumberValidator OptionalPhoneNumberValidator.qml
PostcodeValidator PostcodeValidator.qml
QuickFilter QuickFilter.qml
SearchBar SearchBar.qml
TextField TextField.qml

View File

@@ -1,11 +1,11 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/25.0.2 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="25.0.2"> <mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) 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 id="C5RBs43oDa-KdzZeNtuy" name="Page-1"> <diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
<mxGraphModel dx="2963" dy="1707" 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="1434" dy="844" 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="WIyWlLk6GJQsqaUBKTNV-0" /> <mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" /> <mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
<mxCell id="_OjnZrDktrtFcgEA-KSX-13" value="Databasemanager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="_OjnZrDktrtFcgEA-KSX-13" value="Databasemanager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="20" y="340" width="170" height="90" as="geometry" /> <mxGeometry x="50" y="40" width="170" height="90" as="geometry" />
</mxCell> </mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-14" value="&lt;div&gt;- connection&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-13" vertex="1"> <mxCell id="_OjnZrDktrtFcgEA-KSX-14" value="&lt;div&gt;- connection&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-13" vertex="1">
<mxGeometry y="26" width="170" height="24" as="geometry" /> <mxGeometry y="26" width="170" height="24" as="geometry" />
@@ -16,17 +16,32 @@
<mxCell id="_OjnZrDktrtFcgEA-KSX-16" value="+ instance(): connection" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-13" vertex="1"> <mxCell id="_OjnZrDktrtFcgEA-KSX-16" value="+ instance(): connection" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-13" vertex="1">
<mxGeometry y="58" width="170" height="32" as="geometry" /> <mxGeometry y="58" width="170" height="32" as="geometry" />
</mxCell> </mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-38" value="BusinessDao" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="50" y="240" width="160" height="166" as="geometry" />
</mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-42" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="_OjnZrDktrtFcgEA-KSX-38" vertex="1">
<mxGeometry y="26" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-41" value="&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+ getBusiness()&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+ addBusiness()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;+ updateBusiness()&lt;/div&gt;&lt;div&gt;+ delBusiness()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-38" vertex="1">
<mxGeometry y="66" width="160" height="100" as="geometry" />
</mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-43" value="BusinessModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="_OjnZrDktrtFcgEA-KSX-43" value="BusinessModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="240" y="40" width="160" height="270" as="geometry" /> <mxGeometry x="280" y="150" width="160" height="170" as="geometry" />
</mxCell> </mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-45" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;connectable=1;allowArrows=1;recursiveResize=1;expand=0;" parent="_OjnZrDktrtFcgEA-KSX-43" vertex="1"> <mxCell id="_OjnZrDktrtFcgEA-KSX-45" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;connectable=1;allowArrows=1;recursiveResize=1;expand=0;" parent="_OjnZrDktrtFcgEA-KSX-43" vertex="1">
<mxGeometry y="26" width="160" height="54" as="geometry" /> <mxGeometry y="26" width="160" height="54" as="geometry" />
</mxCell> </mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-46" value="- getData()&lt;div&gt;- getBusinessInfo()&lt;br&gt;&lt;div&gt;+ rowCount()&lt;/div&gt;&lt;div&gt;+ columnCount()&lt;/div&gt;&lt;div&gt;+ Data()&lt;/div&gt;&lt;div&gt;+ headerData()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;+ onRowClicked()&lt;/div&gt;&lt;div&gt;+ viewCriterion()&lt;/div&gt;&lt;div&gt;+ addBusiness()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; refreshView()&lt;/div&gt;&lt;div&gt;+ setContact()&lt;/div&gt;&lt;div&gt;+ updateTable()&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-43" vertex="1"> <mxCell id="_OjnZrDktrtFcgEA-KSX-46" value="- getData()&lt;div&gt;+ rowCount()&lt;/div&gt;&lt;div&gt;+ columnCount()&lt;/div&gt;&lt;div&gt;+ Data()&lt;/div&gt;&lt;div&gt;+ headerData()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="_OjnZrDktrtFcgEA-KSX-43" vertex="1">
<mxGeometry y="80" width="160" height="190" as="geometry" /> <mxGeometry y="80" width="160" height="90" as="geometry" />
</mxCell>
<mxCell id="_OjnZrDktrtFcgEA-KSX-50" value="" style="endArrow=none;html=1;rounded=0;entryX=0.435;entryY=1.063;entryDx=0;entryDy=0;exitX=0.463;exitY=-0.027;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-38" target="_OjnZrDktrtFcgEA-KSX-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="390" y="460" as="sourcePoint" />
<mxPoint x="440" y="410" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="xjCWurhqpCHEkLAYqff9-0" value="PermissionDao" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="xjCWurhqpCHEkLAYqff9-0" value="PermissionDao" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="1200" y="540" width="180" height="220" as="geometry" /> <mxGeometry x="1330" y="50" width="180" height="220" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xjCWurhqpCHEkLAYqff9-1" value="&lt;div&gt;- id : int&lt;/div&gt;&lt;div&gt;- description : string&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xjCWurhqpCHEkLAYqff9-0" vertex="1"> <mxCell id="xjCWurhqpCHEkLAYqff9-1" value="&lt;div&gt;- id : int&lt;/div&gt;&lt;div&gt;- description : string&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xjCWurhqpCHEkLAYqff9-0" vertex="1">
<mxGeometry y="26" width="180" height="64" as="geometry" /> <mxGeometry y="26" width="180" height="64" as="geometry" />
@@ -37,450 +52,70 @@
<mxCell id="xjCWurhqpCHEkLAYqff9-3" value="&lt;div&gt;+ getPermissions(User)&lt;/div&gt;&lt;div&gt;+ getPermission()&lt;/div&gt;&lt;div&gt;+ grantPermission()&lt;/div&gt;&lt;div&gt;+ setPermission()&lt;/div&gt;&lt;div&gt;+ revokePermission()&lt;/div&gt;&lt;div&gt;+ savePermission()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xjCWurhqpCHEkLAYqff9-0" vertex="1"> <mxCell id="xjCWurhqpCHEkLAYqff9-3" value="&lt;div&gt;+ getPermissions(User)&lt;/div&gt;&lt;div&gt;+ getPermission()&lt;/div&gt;&lt;div&gt;+ grantPermission()&lt;/div&gt;&lt;div&gt;+ setPermission()&lt;/div&gt;&lt;div&gt;+ revokePermission()&lt;/div&gt;&lt;div&gt;+ savePermission()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="xjCWurhqpCHEkLAYqff9-0" vertex="1">
<mxGeometry y="98" width="180" height="122" as="geometry" /> <mxGeometry y="98" width="180" height="122" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-12" value="User" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-12" value="User" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="870" y="540" width="280" height="270" as="geometry" /> <mxGeometry x="827" y="50" width="280" height="270" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-13" value="- username : string&lt;div&gt;- password : string&lt;/div&gt;&lt;div&gt;- roleids : roleenum [ ]&lt;/div&gt;&lt;div&gt;- gecos : string&lt;/div&gt;&lt;div&gt;- enabled : bool&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-12" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-13" value="- username : string&lt;div&gt;- password : string&lt;/div&gt;&lt;div&gt;- roleids : roleenum [ ]&lt;/div&gt;&lt;div&gt;- gecos : string&lt;/div&gt;&lt;div&gt;- enabled : bool&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-12">
<mxGeometry y="26" width="280" height="84" as="geometry" /> <mxGeometry y="26" width="280" height="84" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-14" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-12" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-14" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-12">
<mxGeometry y="110" width="280" height="8" as="geometry" /> <mxGeometry y="110" width="280" height="8" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-15" value="+ getRole()&lt;div&gt;+ setRole()&lt;/div&gt;&lt;div&gt;+changePassword(oldpassword, newpassword)&lt;/div&gt;&lt;div&gt;+ getUsername()&lt;/div&gt;&lt;div&gt;+ getPassword()&lt;/div&gt;&lt;div&gt;+ getGecos()&lt;/div&gt;&lt;div&gt;(+ createRole(superuser, admin)????&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-12" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-15" value="+ getRole()&lt;div&gt;+ setRole()&lt;/div&gt;&lt;div&gt;+changePassword(oldpassword, newpassword)&lt;/div&gt;&lt;div&gt;+ getUsername()&lt;/div&gt;&lt;div&gt;+ getPassword()&lt;/div&gt;&lt;div&gt;+ getGecos()&lt;/div&gt;&lt;div&gt;(+ createRole(superuser, admin)????&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-12">
<mxGeometry y="118" width="280" height="152" as="geometry" /> <mxGeometry y="118" width="280" height="152" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-18" value="UserRoles" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-18" value="UserRoles" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="1420" y="830" width="160" height="220" as="geometry" /> <mxGeometry x="450" y="475" width="160" height="220" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-19" value="+ userrole : Role[ ]" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-18" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-19" value="+ userrole : Role[ ]" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-18">
<mxGeometry y="26" width="160" height="44" as="geometry" /> <mxGeometry y="26" width="160" height="44" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-20" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-18" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-20" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-18">
<mxGeometry y="70" width="160" height="8" as="geometry" /> <mxGeometry y="70" width="160" height="8" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-21" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-18" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-21" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-18">
<mxGeometry y="78" width="160" height="142" as="geometry" /> <mxGeometry y="78" width="160" height="142" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-22" value="Role" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-22" value="Role" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="870" y="920" width="230" height="220" as="geometry" /> <mxGeometry x="827" y="430" width="230" height="220" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-23" value="- roletype : string&lt;div&gt;- permissionids : permissionenmum [ ]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-22" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-23" value="- roletype : string&lt;div&gt;- permissionids : permissionenmum [ ]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-22">
<mxGeometry y="26" width="230" height="64" as="geometry" /> <mxGeometry y="26" width="230" height="64" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-24" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-22" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-24" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-22">
<mxGeometry y="90" width="230" height="8" as="geometry" /> <mxGeometry y="90" width="230" height="8" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-25" value="+ getPermission()&lt;div&gt;+ setPermission(superuser, admin)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;+ getRoletype()&lt;/div&gt;&lt;div&gt;+ setRoletype(superuser, admin)&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-22" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-25" value="+ getPermission()&lt;div&gt;+ setPermission(superuser, admin)&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;+ getRoletype()&lt;/div&gt;&lt;div&gt;+ setRoletype(superuser, admin)&lt;br&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-22">
<mxGeometry y="98" width="230" height="122" as="geometry" /> <mxGeometry y="98" width="230" height="122" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-27" value="Permission" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-27" value="Permission" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="1410" y="540" width="220" height="230" as="geometry" /> <mxGeometry x="1280" y="430" width="220" height="230" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-28" value="- permissions : permissionenmum [ ]" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-27" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-28" value="- permissions : permissionenmum [ ]" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-27">
<mxGeometry y="26" width="220" height="26" as="geometry" /> <mxGeometry y="26" width="220" height="26" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-29" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-27" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-29" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-27">
<mxGeometry y="52" width="220" height="8" as="geometry" /> <mxGeometry y="52" width="220" height="8" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-30" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="Yrs2Ar6oVTmmq3gZQ8Z4-27" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-30" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="Yrs2Ar6oVTmmq3gZQ8Z4-27">
<mxGeometry y="60" width="220" height="170" as="geometry" /> <mxGeometry y="60" width="220" height="170" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-44" value="" style="endArrow=diamondThin;endFill=0;endSize=24;html=1;rounded=0;exitX=0.535;exitY=-0.018;exitDx=0;exitDy=0;exitPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="Yrs2Ar6oVTmmq3gZQ8Z4-22" edge="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-31" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="210" y="270" as="sourcePoint" />
<mxPoint x="280" y="270" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-42" value="" style="endArrow=diamondThin;endFill=0;endSize=24;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1.013;entryY=0.385;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="Yrs2Ar6oVTmmq3gZQ8Z4-30" target="Yrs2Ar6oVTmmq3gZQ8Z4-25">
<mxGeometry width="160" relative="1" as="geometry"> <mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="940" y="860" as="sourcePoint" /> <mxPoint x="870" y="690" as="sourcePoint" />
<mxPoint x="993" y="811" as="targetPoint" /> <mxPoint x="1090" y="570" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-0" value="AddressDao" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1"> <mxCell id="Yrs2Ar6oVTmmq3gZQ8Z4-44" value="" style="endArrow=diamondThin;endFill=0;endSize=24;html=1;rounded=0;exitX=0.535;exitY=-0.018;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="Yrs2Ar6oVTmmq3gZQ8Z4-22">
<mxGeometry x="460" y="40" width="160" height="130" as="geometry" /> <mxGeometry width="160" relative="1" as="geometry">
</mxCell> <mxPoint x="897" y="370" as="sourcePoint" />
<mxCell id="v96xPLQoPeUk4bUV2WaN-1" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-0" vertex="1"> <mxPoint x="950" y="321" as="targetPoint" />
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-2" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-0" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-3" value="- importPlz()&lt;div&gt;- importCountry()&lt;/div&gt;&lt;div&gt;+ getAddressData()&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-0" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-4" value="AddressModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="650" y="40" width="160" height="150" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-5" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-4" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-6" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-4" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-7" value="&lt;div&gt;+ rowCount()&lt;/div&gt;&lt;div&gt;+ data()&lt;/div&gt;&lt;div&gt;+ roleNames()&lt;/div&gt;&lt;div&gt;+ setData()&lt;/div&gt;&lt;div&gt;+getAddresses()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-4" vertex="1">
<mxGeometry y="58" width="160" height="92" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-8" value="BTypeDAO" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="460" y="280" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-9" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-8" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-10" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-8" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-11" value="&lt;div&gt;+ getBType()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-8" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-12" value="BTypeModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="650" y="280" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-13" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-12" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-14" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-12" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-15" value="+ rowCount()&lt;div&gt;+ data()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-12" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-16" value="ContactDAO" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="460" y="430" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-17" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-16" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-18" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-16" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-19" value="&lt;div&gt;+ getContacts()&lt;/div&gt;&lt;div&gt;+ addContact()&lt;/div&gt;&lt;div&gt;+ addObjectContact()&lt;/div&gt;&lt;div&gt;+ getContact()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-16" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-20" value="ContactModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="650" y="430" width="160" height="180" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-21" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-20" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-22" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-20" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-23" value="+ getContacts()&lt;div&gt;- getData()&lt;/div&gt;&lt;div&gt;+ addContact()&lt;/div&gt;&lt;div&gt;+ addObjectContact()&lt;/div&gt;&lt;div&gt;- getContact()&lt;/div&gt;&lt;div&gt;+ getContactDetails()&lt;/div&gt;&lt;div&gt;- getContactInfo()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-20" vertex="1">
<mxGeometry y="58" width="160" height="122" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-24" value="EmployeeDAO" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="470" y="660" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-25" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-24" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-26" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-24" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-27" value="&lt;div&gt;+ getEmployees()&lt;/div&gt;&lt;div&gt;+ getEmployee()&lt;/div&gt;&lt;div&gt;+ addEmployee()&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-24" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-28" value="EmployeeModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="650" y="660" width="160" height="220" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-29" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-28" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-30" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-28" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-31" value="+ addEmployee()&lt;div&gt;+ viewCriterion()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; refreshView()&lt;/div&gt;&lt;div&gt;- getData()&lt;/div&gt;&lt;div&gt;+ rowCount()&lt;/div&gt;&lt;div&gt;+ columnCount()&lt;/div&gt;&lt;div&gt;+ data()&lt;/div&gt;&lt;div&gt;+ headerData()&lt;/div&gt;&lt;div&gt;+ onRowClicked()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-28" vertex="1">
<mxGeometry y="58" width="160" height="162" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-32" value="ObjectDAO" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="470" y="900" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-33" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-32" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-34" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-32" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-35" value="&lt;div&gt;+ addObject()&lt;/div&gt;&lt;div&gt;+ getObjects()&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-32" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-36" value="ObjectModel" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="650" y="900" width="160" height="220" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-37" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-36" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-38" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-36" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-39" value="+ addObject()&lt;div&gt;-&amp;nbsp; refreshView()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; getData()&lt;/div&gt;&lt;div&gt;+ rowCount()&lt;/div&gt;&lt;div&gt;+ columnCount()&lt;/div&gt;&lt;div&gt;+ viewCriterion()&lt;/div&gt;&lt;div&gt;+ data()&lt;/div&gt;&lt;div&gt;+ headerData()&lt;/div&gt;&lt;div&gt;+ onRowClicked()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-36" vertex="1">
<mxGeometry y="58" width="160" height="162" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-40" value="UserDAO" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="20" y="840" width="160" height="130" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-41" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-40" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-42" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-40" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-43" value="&lt;div&gt;+ createUser()&lt;/div&gt;&lt;div&gt;+ getUser()&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-40" vertex="1">
<mxGeometry y="58" width="160" height="72" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-48" value="UserManager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="220" y="840" width="160" height="240" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-49" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-48" vertex="1">
<mxGeometry y="26" width="160" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-50" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-48" vertex="1">
<mxGeometry y="50" width="160" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-51" value="&lt;div&gt;+ createUser()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; hashPassword()&lt;/div&gt;&lt;div&gt;+ checkAdmin()&lt;/div&gt;&lt;div&gt;+ getUser()&lt;/div&gt;&lt;div&gt;+ getUsers()&lt;/div&gt;&lt;div&gt;+ delUser()&lt;/div&gt;&lt;div&gt;+ updateUser()&lt;/div&gt;&lt;div&gt;+ disableUser()&lt;/div&gt;&lt;div&gt;+ login()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; checkPassword&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-48" vertex="1">
<mxGeometry y="58" width="160" height="182" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-57" value="" style="endArrow=none;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.402;entryY=1.001;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-13" target="v96xPLQoPeUk4bUV2WaN-62" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="50" y="240" as="sourcePoint" />
<mxPoint x="103.36000000000013" y="205.29999999999995" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-59" value="Classname" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="40" y="40" width="160" height="170" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-61" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-59" vertex="1">
<mxGeometry y="26" width="160" height="54" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-62" value="&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+ getBusiness()&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;+ addBusiness()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;+ getOneBusiness()&lt;/div&gt;&lt;div&gt;+ updateBusiness()&lt;/div&gt;&lt;div&gt;+ delBusiness()&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-59" vertex="1">
<mxGeometry y="80" width="160" height="90" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-63" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" target="v96xPLQoPeUk4bUV2WaN-59" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="240" y="83" as="sourcePoint" />
<mxPoint x="110" y="130" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-64" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1.001;exitY=0.088;exitDx=0;exitDy=0;exitPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-13" target="v96xPLQoPeUk4bUV2WaN-3" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="200" y="348" as="sourcePoint" />
<mxPoint x="110" y="250" as="targetPoint" />
<Array as="points">
<mxPoint x="410" y="348" />
<mxPoint x="410" y="134" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-65" 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;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-1" target="v96xPLQoPeUk4bUV2WaN-5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="280" as="sourcePoint" />
<mxPoint x="970" y="230" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-66" value="" style="endArrow=none;html=1;rounded=0;exitX=0.998;exitY=-0.03;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.375;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-14" target="v96xPLQoPeUk4bUV2WaN-11" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="250" y="360" as="sourcePoint" />
<mxPoint x="430" y="365" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-67" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-9" target="v96xPLQoPeUk4bUV2WaN-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="330" y="460" as="sourcePoint" />
<mxPoint x="380" y="410" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-68" value="" style="endArrow=none;html=1;rounded=0;exitX=1.003;exitY=0.724;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-14" target="v96xPLQoPeUk4bUV2WaN-17" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="250" y="530" as="sourcePoint" />
<mxPoint x="300" y="480" as="targetPoint" />
<Array as="points">
<mxPoint x="440" y="383" />
<mxPoint x="440" y="468" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-69" 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;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-17" target="v96xPLQoPeUk4bUV2WaN-21" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="280" y="300" as="sourcePoint" />
<mxPoint x="350" y="470" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-70" value="" style="endArrow=none;html=1;rounded=0;exitX=1.004;exitY=0.263;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-16" target="v96xPLQoPeUk4bUV2WaN-25" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="270" y="530" as="sourcePoint" />
<mxPoint x="320" y="480" as="targetPoint" />
<Array as="points">
<mxPoint x="430" y="406" />
<mxPoint x="430" y="698" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-71" 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;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-25" target="v96xPLQoPeUk4bUV2WaN-29" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="270" y="530" as="sourcePoint" />
<mxPoint x="320" y="480" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-72" value="" style="endArrow=none;html=1;rounded=0;exitX=1.008;exitY=0.788;exitDx=0;exitDy=0;exitPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="_OjnZrDktrtFcgEA-KSX-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="270" y="530" as="sourcePoint" />
<mxPoint x="470" y="940" as="targetPoint" />
<Array as="points">
<mxPoint x="410" y="423" />
<mxPoint x="410" y="600" />
<mxPoint x="410" y="940" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-74" 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;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-33" target="v96xPLQoPeUk4bUV2WaN-37" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="490" y="930" as="sourcePoint" />
<mxPoint x="540" y="880" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-75" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-40" target="_OjnZrDktrtFcgEA-KSX-16" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="430" y="660" as="sourcePoint" />
<mxPoint x="480" y="610" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-76" 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;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-41" target="v96xPLQoPeUk4bUV2WaN-49" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="360" y="620" as="sourcePoint" />
<mxPoint x="410" y="570" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-77" value="ConfigLoader" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="1100" y="40" width="170" height="470" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-78" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-77" vertex="1">
<mxGeometry y="26" width="170" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-79" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-77" vertex="1">
<mxGeometry y="50" width="170" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-80" value="+ setConfig()&lt;div&gt;-&amp;nbsp; initializeConfig()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; checkDbConnection()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; saveConfig()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; checkAdminUser()&lt;/div&gt;&lt;div&gt;+ addAdminUser()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; saveData()&lt;/div&gt;&lt;div&gt;+ getRecoveryKey()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; parseImport()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; invalidateEncryptionKey()&lt;/div&gt;&lt;div&gt;+ checkEncryptionKey()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; checkRecoveryPassword&lt;/div&gt;&lt;div&gt;+ importConfig()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; configLoad()&lt;/div&gt;&lt;div&gt;+ getConfig()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; setRecoveryPassword()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; setEncryptionKey()&lt;/div&gt;&lt;div&gt;+ backupConfig()&lt;/div&gt;&lt;div&gt;+ saveDbConf()&lt;/div&gt;&lt;div&gt;+ getDbConf()&lt;/div&gt;&lt;div&gt;+ saveCompanyInfo()&lt;/div&gt;&lt;div&gt;+ getCompanyInfo()&lt;/div&gt;&lt;div&gt;+ saveMiscConf()&lt;/div&gt;&lt;div&gt;+ systray()&lt;/div&gt;&lt;div&gt;+ backupEncryptkey()&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-77" vertex="1">
<mxGeometry y="58" width="170" height="412" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-89" value="PyqcrmFlags" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="40" y="610" width="170" height="150" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-90" value="&lt;div&gt;ADMIN: enum&lt;/div&gt;&lt;div&gt;USER: enum&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-89" vertex="1">
<mxGeometry y="26" width="170" height="44" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-91" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-89" vertex="1">
<mxGeometry y="70" width="170" height="80" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-93" value="PyqcrmAppliEmpyFlags" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="230" y="610" width="170" height="140" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-94" value="&lt;div&gt;ALL: enum&lt;/div&gt;&lt;div&gt;APPLICANT: enum&lt;/div&gt;&lt;div&gt;EMPLOYEE; enum&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-93" vertex="1">
<mxGeometry y="26" width="170" height="64" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-95" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-93" vertex="1">
<mxGeometry y="90" width="170" height="50" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-96" value="Databasemanager" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
<mxGeometry x="870" y="40" width="170" height="90" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-97" value="&lt;div&gt;- connection&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-96" vertex="1">
<mxGeometry y="26" width="170" height="24" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-98" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" parent="v96xPLQoPeUk4bUV2WaN-96" vertex="1">
<mxGeometry y="50" width="170" height="8" as="geometry" />
</mxCell>
<mxCell id="v96xPLQoPeUk4bUV2WaN-99" value="+ instance(): connection" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" parent="v96xPLQoPeUk4bUV2WaN-96" vertex="1">
<mxGeometry y="58" width="170" height="32" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-0" value="PyqcrmFlags" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="870" y="340" width="170" height="150" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-1" value="&lt;div&gt;ADMIN: enum&lt;/div&gt;&lt;div&gt;USER: enum&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-0">
<mxGeometry y="26" width="170" height="44" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-2" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-0">
<mxGeometry y="70" width="170" height="80" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-3" value="PyqcrmAppliEmpyFlags" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="870" y="170" width="170" height="140" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-4" value="&lt;div&gt;ALL: enum&lt;/div&gt;&lt;div&gt;APPLICANT: enum&lt;/div&gt;&lt;div&gt;EMPLOYEE; enum&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-3">
<mxGeometry y="26" width="170" height="64" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-5" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-3">
<mxGeometry y="90" width="170" height="50" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-6" value="" style="endArrow=none;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-89" target="v96xPLQoPeUk4bUV2WaN-40">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="420" y="900" as="sourcePoint" />
<mxPoint x="470" y="850" as="targetPoint" />
<Array as="points">
<mxPoint x="83" y="800" />
<mxPoint x="60" y="800" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-7" 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="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-48" target="v96xPLQoPeUk4bUV2WaN-93">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="420" y="900" as="sourcePoint" />
<mxPoint x="470" y="850" as="targetPoint" />
<Array as="points">
<mxPoint x="300" y="800" />
<mxPoint x="315" y="800" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-8" value="" style="endArrow=none;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-93" target="v96xPLQoPeUk4bUV2WaN-40">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="420" y="900" as="sourcePoint" />
<mxPoint x="470" y="850" as="targetPoint" />
<Array as="points">
<mxPoint x="273" y="780" />
<mxPoint x="140" y="780" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-9" value="" style="endArrow=none;html=1;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.25;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-48" target="v96xPLQoPeUk4bUV2WaN-89">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="420" y="900" as="sourcePoint" />
<mxPoint x="470" y="850" as="targetPoint" />
<Array as="points">
<mxPoint x="260" y="800" />
<mxPoint x="168" y="800" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-10" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-78" target="v96xPLQoPeUk4bUV2WaN-97">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="440" as="sourcePoint" />
<mxPoint x="650" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-11" value="" style="endArrow=none;html=1;rounded=0;exitX=1.001;exitY=0.102;exitDx=0;exitDy=0;exitPerimeter=0;entryX=-0.002;entryY=0.624;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="6xiAvg-kEoilwsfhhM0o-0" target="v96xPLQoPeUk4bUV2WaN-80">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="440" as="sourcePoint" />
<mxPoint x="650" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-12" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=-0.001;exitY=0.316;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-80" target="6xiAvg-kEoilwsfhhM0o-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="440" as="sourcePoint" />
<mxPoint x="650" y="390" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-13" value="Vermasseln" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
<mxGeometry x="1350" y="40" width="170" height="140" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-14" value="&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-13">
<mxGeometry y="26" width="170" height="24" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-15" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;strokeColor=inherit;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-13">
<mxGeometry y="50" width="170" height="8" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-16" value="+ oscarVermasseln()&lt;div&gt;+ entschluesseln()&lt;/div&gt;&lt;div&gt;-&amp;nbsp; vermasslungsKobold()&lt;/div&gt;&lt;div&gt;+ userPasswordHash&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;whiteSpace=wrap;html=1;" vertex="1" parent="6xiAvg-kEoilwsfhhM0o-13">
<mxGeometry y="58" width="170" height="82" as="geometry" />
</mxCell>
<mxCell id="6xiAvg-kEoilwsfhhM0o-17" value="" style="endArrow=none;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="v96xPLQoPeUk4bUV2WaN-78" target="6xiAvg-kEoilwsfhhM0o-14">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="800" y="530" as="sourcePoint" />
<mxPoint x="850" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
</root> </root>

4
doc/README.md Normal file
View File

@@ -0,0 +1,4 @@
# pyqcrm
CRM - Tero
Python + QML

File diff suppressed because it is too large Load Diff

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

@@ -0,0 +1,995 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.11.10-MariaDB, for Linux (x86_64)
--
-- Host: bearybot.selfhost.co Database: pyqcrm
-- ------------------------------------------------------
-- Server version 10.11.8-MariaDB-0ubuntu0.24.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `address`
--
DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
`addressid` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(50) DEFAULT NULL,
`address` varchar(50) NOT NULL,
PRIMARY KEY (`addressid`),
UNIQUE KEY `address_unique` (`address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `address`
--
LOCK TABLES `address` WRITE;
/*!40000 ALTER TABLE `address` DISABLE KEYS */;
/*!40000 ALTER TABLE `address` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `assignment`
--
DROP TABLE IF EXISTS `assignment`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `assignment` (
`contractid` int(11) NOT NULL AUTO_INCREMENT,
`employeeid` int(11) NOT NULL,
UNIQUE KEY `assignment_unique` (`contractid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `assignment`
--
LOCK TABLES `assignment` WRITE;
/*!40000 ALTER TABLE `assignment` DISABLE KEYS */;
/*!40000 ALTER TABLE `assignment` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `business`
--
DROP TABLE IF EXISTS `business`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `business` (
`businessid` int(11) NOT NULL AUTO_INCREMENT,
`company` varchar(100) NOT NULL,
`street` varchar(100) NOT NULL,
`postcodeid` int(11) DEFAULT NULL,
`phone` varchar(50) DEFAULT NULL,
`mobilephone` varchar(50) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`homepage` varchar(255) DEFAULT NULL,
`director` varchar(100) DEFAULT NULL,
`contactpersonid` int(11) DEFAULT NULL,
`info` varchar(500) DEFAULT NULL,
`btid` int(11) NOT NULL DEFAULT 1,
PRIMARY KEY (`businessid`),
UNIQUE KEY `customer_unique` (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `business`
--
LOCK TABLES `business` WRITE;
/*!40000 ALTER TABLE `business` DISABLE KEYS */;
/*!40000 ALTER TABLE `business` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `businesstype`
--
DROP TABLE IF EXISTS `businesstype`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `businesstype` (
`btypeID` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(35) NOT NULL,
PRIMARY KEY (`btypeID`),
UNIQUE KEY `businesstype_unique` (`description`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `businesstype`
--
LOCK TABLES `businesstype` WRITE;
/*!40000 ALTER TABLE `businesstype` DISABLE KEYS */;
/*!40000 ALTER TABLE `businesstype` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `contact`
--
DROP TABLE IF EXISTS `contact`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contact` (
`id` int(11) NOT NULL,
`contactpersonid` int(11) NOT NULL,
`businessid` tinyint(1) NOT NULL DEFAULT 1,
UNIQUE KEY `contact_unique` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `contact`
--
LOCK TABLES `contact` WRITE;
/*!40000 ALTER TABLE `contact` DISABLE KEYS */;
/*!40000 ALTER TABLE `contact` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `contactperson`
--
DROP TABLE IF EXISTS `contactperson`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contactperson` (
`contactpersonid` int(11) NOT NULL AUTO_INCREMENT,
`priorityid` int(11) DEFAULT NULL,
`lastname` varchar(35) NOT NULL,
`firstname` varchar(35) NOT NULL,
`phone` varchar(50) DEFAULT NULL,
`mobilephone` varchar(50) DEFAULT NULL,
`position` varchar(50) DEFAULT NULL,
`salutation` varchar(10) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`birthday` date DEFAULT NULL,
`active` tinyint(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`contactpersonid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `contactperson`
--
LOCK TABLES `contactperson` WRITE;
/*!40000 ALTER TABLE `contactperson` DISABLE KEYS */;
/*!40000 ALTER TABLE `contactperson` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `contract`
--
DROP TABLE IF EXISTS `contract`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `contract` (
`contractid` int(11) NOT NULL AUTO_INCREMENT,
`jobdetailid` int(11) NOT NULL,
`tariffid` int(11) NOT NULL,
`officeid` int(11) NOT NULL COMMENT 'Kostenstelle',
`date` date NOT NULL,
PRIMARY KEY (`contractid`),
UNIQUE KEY `contract_unique` (`jobdetailid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `contract`
--
LOCK TABLES `contract` WRITE;
/*!40000 ALTER TABLE `contract` DISABLE KEYS */;
/*!40000 ALTER TABLE `contract` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `employee`
--
DROP TABLE IF EXISTS `employee`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `employee` (
`employeeid` int(11) NOT NULL AUTO_INCREMENT,
`lastname` varchar(35) NOT NULL,
`firstname` varchar(35) NOT NULL,
`gender` varchar(30) DEFAULT NULL,
`maritalstatus` varchar(30) DEFAULT NULL,
`nationality` varchar(50) NOT NULL,
`birthday` date NOT NULL,
`street` varchar(100) NOT NULL,
`postcodeid` int(11) NOT NULL,
`phone` varchar(50) DEFAULT NULL,
`mobilephone` varchar(50) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`identificationid` int(11) NOT NULL,
`jobstatusid` int(11) NOT NULL,
PRIMARY KEY (`employeeid`),
UNIQUE KEY `employee_unique` (`identificationid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `employee`
--
LOCK TABLES `employee` WRITE;
/*!40000 ALTER TABLE `employee` DISABLE KEYS */;
/*!40000 ALTER TABLE `employee` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `entities`
--
DROP TABLE IF EXISTS `entities`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entities` (
`entityid` int(11) NOT NULL AUTO_INCREMENT,
`entity` varchar(35) NOT NULL,
PRIMARY KEY (`entityid`),
UNIQUE KEY `Entities_UNIQUE` (`entity`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `entities`
--
LOCK TABLES `entities` WRITE;
/*!40000 ALTER TABLE `entities` DISABLE KEYS */;
INSERT INTO `entities` VALUES
(1,'business'),
(3,'contactperson'),
(2,'employee'),
(4,'object');
/*!40000 ALTER TABLE `entities` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `identification`
--
DROP TABLE IF EXISTS `identification`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `identification` (
`identificationid` int(11) NOT NULL AUTO_INCREMENT,
`number` varchar(50) NOT NULL,
`expiry` date NOT NULL,
`issued` date NOT NULL,
`authority` varchar(50) NOT NULL,
`typeid` int(11) NOT NULL,
PRIMARY KEY (`identificationid`),
UNIQUE KEY `identification_unique` (`number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `identification`
--
LOCK TABLES `identification` WRITE;
/*!40000 ALTER TABLE `identification` DISABLE KEYS */;
/*!40000 ALTER TABLE `identification` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `identificationtype`
--
DROP TABLE IF EXISTS `identificationtype`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `identificationtype` (
`typeid` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(50) NOT NULL,
PRIMARY KEY (`typeid`),
UNIQUE KEY `identificationtype_unique` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `identificationtype`
--
LOCK TABLES `identificationtype` WRITE;
/*!40000 ALTER TABLE `identificationtype` DISABLE KEYS */;
/*!40000 ALTER TABLE `identificationtype` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `invoice`
--
DROP TABLE IF EXISTS `invoice`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `invoice` (
`invoiceid` int(11) NOT NULL AUTO_INCREMENT,
`issued` date NOT NULL COMMENT 'Rechnungsdatum',
`entry` date NOT NULL COMMENT 'Buchungsdatum',
`contractid` int(11) NOT NULL,
PRIMARY KEY (`invoiceid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `invoice`
--
LOCK TABLES `invoice` WRITE;
/*!40000 ALTER TABLE `invoice` DISABLE KEYS */;
/*!40000 ALTER TABLE `invoice` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `jobdetail`
--
DROP TABLE IF EXISTS `jobdetail`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `jobdetail` (
`jobdetailid` int(11) NOT NULL AUTO_INCREMENT,
`duration` decimal(10,0) NOT NULL,
`objectid` int(11) NOT NULL,
`period` varchar(15) NOT NULL,
`personnel` int(11) NOT NULL DEFAULT 1 COMMENT 'number of employees',
`price` decimal(10,0) NOT NULL,
PRIMARY KEY (`jobdetailid`),
UNIQUE KEY `jobdetail_unique` (`objectid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `jobdetail`
--
LOCK TABLES `jobdetail` WRITE;
/*!40000 ALTER TABLE `jobdetail` DISABLE KEYS */;
/*!40000 ALTER TABLE `jobdetail` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `jobstatus`
--
DROP TABLE IF EXISTS `jobstatus`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `jobstatus` (
`jobstatusid` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(30) NOT NULL,
PRIMARY KEY (`jobstatusid`),
UNIQUE KEY `jobstatus_unique` (`description`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `jobstatus`
--
LOCK TABLES `jobstatus` WRITE;
/*!40000 ALTER TABLE `jobstatus` DISABLE KEYS */;
/*!40000 ALTER TABLE `jobstatus` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `logs`
--
DROP TABLE IF EXISTS `logs`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `logs` (
`logid` int(11) NOT NULL AUTO_INCREMENT,
`recordid` int(11) DEFAULT NULL,
`operationtype` varchar(100) NOT NULL,
`message` varchar(100) NOT NULL,
`logdate` datetime NOT NULL DEFAULT current_timestamp(),
PRIMARY KEY (`logid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `logs`
--
LOCK TABLES `logs` WRITE;
/*!40000 ALTER TABLE `logs` DISABLE KEYS */;
/*!40000 ALTER TABLE `logs` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `medicalcare`
--
DROP TABLE IF EXISTS `medicalcare`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `medicalcare` (
`medicalcareid` int(11) NOT NULL AUTO_INCREMENT,
`company` varchar(50) NOT NULL,
PRIMARY KEY (`medicalcareid`),
UNIQUE KEY `medicalcare_unique` (`company`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `medicalcare`
--
LOCK TABLES `medicalcare` WRITE;
/*!40000 ALTER TABLE `medicalcare` DISABLE KEYS */;
/*!40000 ALTER TABLE `medicalcare` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `object`
--
DROP TABLE IF EXISTS `object`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `object` (
`objectid` int(11) NOT NULL AUTO_INCREMENT,
`street` varchar(100) NOT NULL,
`postcodeid` int(11) NOT NULL,
`contactpersonid` int(11) NOT NULL,
`businessid` int(11) NOT NULL,
PRIMARY KEY (`objectid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `object`
--
LOCK TABLES `object` WRITE;
/*!40000 ALTER TABLE `object` DISABLE KEYS */;
/*!40000 ALTER TABLE `object` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `offer`
--
DROP TABLE IF EXISTS `offer`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `offer` (
`offerid` int(11) NOT NULL AUTO_INCREMENT,
`jobdetailid` int(11) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`offerid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `offer`
--
LOCK TABLES `offer` WRITE;
/*!40000 ALTER TABLE `offer` DISABLE KEYS */;
/*!40000 ALTER TABLE `offer` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `offers`
--
DROP TABLE IF EXISTS `offers`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `offers` (
`offerid` int(11) NOT NULL,
`contractid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Kreuztabelle Angebot - Auftrag';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `offers`
--
LOCK TABLES `offers` WRITE;
/*!40000 ALTER TABLE `offers` DISABLE KEYS */;
/*!40000 ALTER TABLE `offers` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `office`
--
DROP TABLE IF EXISTS `office`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `office` (
`officeid` int(11) NOT NULL AUTO_INCREMENT,
`office` varchar(50) NOT NULL COMMENT 'Kostenstelle',
PRIMARY KEY (`officeid`),
UNIQUE KEY `office_unique` (`office`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Kostenstelle';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `office`
--
LOCK TABLES `office` WRITE;
/*!40000 ALTER TABLE `office` DISABLE KEYS */;
/*!40000 ALTER TABLE `office` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `permissions`
--
DROP TABLE IF EXISTS `permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `permissions` (
`permissionid` int(11) NOT NULL AUTO_INCREMENT,
`permission` varchar(50) NOT NULL,
PRIMARY KEY (`permissionid`),
UNIQUE KEY `berechtigungen_unique` (`permission`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `permissions`
--
LOCK TABLES `permissions` WRITE;
/*!40000 ALTER TABLE `permissions` DISABLE KEYS */;
INSERT INTO `permissions` VALUES
(4,'delete'),
(1,'read'),
(3,'update'),
(2,'write');
/*!40000 ALTER TABLE `permissions` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `personalrole`
--
DROP TABLE IF EXISTS `personalrole`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `personalrole` (
`employeeid` int(11) NOT NULL,
`roleid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Kreuztabelle';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `personalrole`
--
LOCK TABLES `personalrole` WRITE;
/*!40000 ALTER TABLE `personalrole` DISABLE KEYS */;
/*!40000 ALTER TABLE `personalrole` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `postcode`
--
DROP TABLE IF EXISTS `postcode`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `postcode` (
`postcodeid` int(11) NOT NULL AUTO_INCREMENT,
`postcode` varchar(15) NOT NULL,
`addressid` int(11) NOT NULL,
PRIMARY KEY (`postcodeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `postcode`
--
LOCK TABLES `postcode` WRITE;
/*!40000 ALTER TABLE `postcode` DISABLE KEYS */;
/*!40000 ALTER TABLE `postcode` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `role`
--
DROP TABLE IF EXISTS `role`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `role` (
`roleid` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(50) NOT NULL,
PRIMARY KEY (`roleid`),
UNIQUE KEY `role_unique` (`description`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `role`
--
LOCK TABLES `role` WRITE;
/*!40000 ALTER TABLE `role` DISABLE KEYS */;
INSERT INTO `role` VALUES
(1,'adminrole'),
(2,'userrole');
/*!40000 ALTER TABLE `role` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `roles`
--
DROP TABLE IF EXISTS `roles`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `roles` (
`roleid` int(11) NOT NULL,
`permissionid` int(11) NOT NULL,
`entityid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `roles`
--
LOCK TABLES `roles` WRITE;
/*!40000 ALTER TABLE `roles` DISABLE KEYS */;
INSERT INTO `roles` VALUES
(1,1,1),
(1,2,1),
(1,3,1),
(1,4,1),
(1,1,2),
(1,2,2),
(1,3,2),
(1,4,2),
(1,1,3),
(1,2,3),
(1,3,3),
(1,4,3),
(1,1,4),
(1,2,4),
(1,3,4),
(1,4,4),
(2,1,1),
(2,2,1),
(2,3,1),
(2,1,2),
(2,2,2),
(2,3,2),
(2,1,3),
(2,2,3),
(2,3,3),
(2,1,4),
(2,2,4),
(2,3,4);
/*!40000 ALTER TABLE `roles` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `salestax`
--
DROP TABLE IF EXISTS `salestax`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `salestax` (
`salestaxid` varchar(20) NOT NULL,
`businessid` int(11) NOT NULL,
PRIMARY KEY (`salestaxid`),
UNIQUE KEY `salestax_unique` (`businessid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `salestax`
--
LOCK TABLES `salestax` WRITE;
/*!40000 ALTER TABLE `salestax` DISABLE KEYS */;
/*!40000 ALTER TABLE `salestax` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `service`
--
DROP TABLE IF EXISTS `service`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `service` (
`servicetypeid` int(11) NOT NULL,
`servicedescid` int(11) NOT NULL,
`objectid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `service`
--
LOCK TABLES `service` WRITE;
/*!40000 ALTER TABLE `service` DISABLE KEYS */;
/*!40000 ALTER TABLE `service` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `servicedesc`
--
DROP TABLE IF EXISTS `servicedesc`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `servicedesc` (
`servicedescid` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(1000) NOT NULL,
PRIMARY KEY (`servicedescid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `servicedesc`
--
LOCK TABLES `servicedesc` WRITE;
/*!40000 ALTER TABLE `servicedesc` DISABLE KEYS */;
/*!40000 ALTER TABLE `servicedesc` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `servicetype`
--
DROP TABLE IF EXISTS `servicetype`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `servicetype` (
`servicetypeid` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(50) NOT NULL,
PRIMARY KEY (`servicetypeid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `servicetype`
--
LOCK TABLES `servicetype` WRITE;
/*!40000 ALTER TABLE `servicetype` DISABLE KEYS */;
/*!40000 ALTER TABLE `servicetype` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `socialsecurity`
--
DROP TABLE IF EXISTS `socialsecurity`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `socialsecurity` (
`employeeid` int(11) NOT NULL,
`socialsecurityno` varchar(30) NOT NULL,
`medicalcareid` int(11) NOT NULL,
UNIQUE KEY `socialsecurity_unique` (`employeeid`),
UNIQUE KEY `socialsecurity_unique_1` (`socialsecurityno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `socialsecurity`
--
LOCK TABLES `socialsecurity` WRITE;
/*!40000 ALTER TABLE `socialsecurity` DISABLE KEYS */;
/*!40000 ALTER TABLE `socialsecurity` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `tariff`
--
DROP TABLE IF EXISTS `tariff`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tariff` (
`tariffid` int(11) NOT NULL AUTO_INCREMENT,
`tariff` decimal(10,0) NOT NULL COMMENT 'Festgelegter Stundensatz',
PRIMARY KEY (`tariffid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Stundensatz Tabelle';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `tariff`
--
LOCK TABLES `tariff` WRITE;
/*!40000 ALTER TABLE `tariff` DISABLE KEYS */;
/*!40000 ALTER TABLE `tariff` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `timetrack`
--
DROP TABLE IF EXISTS `timetrack`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `timetrack` (
`employeeid` int(11) NOT NULL,
`start` datetime NOT NULL,
`stop` datetime NOT NULL,
`vacation` tinyint(1) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `timetrack`
--
LOCK TABLES `timetrack` WRITE;
/*!40000 ALTER TABLE `timetrack` DISABLE KEYS */;
/*!40000 ALTER TABLE `timetrack` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `users`
--
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
`usersid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(150) NOT NULL,
`enabled` tinyint(1) NOT NULL DEFAULT 1,
`roleid` int(11) NOT NULL,
`gecos` varchar(75) DEFAULT NULL,
PRIMARY KEY (`usersid`),
UNIQUE KEY `users_unique` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `users`
--
LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Dumping routines for database 'pyqcrm'
--
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `addPermission` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `addPermission`(IN newpermission VARCHAR(50))
BEGIN
IF NOT EXISTS (SELECT 1 FROM permissions WHERE permission = newpermission) THEN
INSERT INTO permissions(permission) VALUES(newpermission);
END IF;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `addRole` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `addRole`(IN newdescription VARCHAR(50))
BEGIN
IF NOT EXISTS (SELECT 1 FROM `role` WHERE description = newdescription) THEN
INSERT INTO `role`(description) VALUES(newdescription);
END IF;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `createUser` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `createUser`(IN uname VARCHAR(35), IN password VARCHAR(150), IN gecos VARCHAR(75), IN admin BOOL)
BEGIN
DECLARE userrole INT;
SET userrole = 2;
IF admin = 1 THEN
SET userrole = 1;
END IF;
IF NOT EXISTS (SELECT 1 FROM users WHERE username = uname) THEN
INSERT INTO users(username, password, gecos, roleid) VALUES(uname, password, gecos, userrole);
END IF;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!50003 SET @saved_sql_mode = @@sql_mode */ ;
/*!50003 SET sql_mode = 'IGNORE_SPACE,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
/*!50003 DROP PROCEDURE IF EXISTS `getBusiness` */;
/*!50003 SET @saved_cs_client = @@character_set_client */ ;
/*!50003 SET @saved_cs_results = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
DELIMITER ;;
CREATE DEFINER=`pyqcrm`@`%` PROCEDURE `getBusiness`(IN businesstype VARCHAR(35))
BEGIN
SELECT * FROM business;
END ;;
DELIMITER ;
/*!50003 SET sql_mode = @saved_sql_mode */ ;
/*!50003 SET character_set_client = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection = @saved_col_connection */ ;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2024-11-26 13:49:32

View File

@@ -0,0 +1,833 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.11.10-MariaDB, for Linux (x86_64)
--
-- Host: bearybot.selfhost.co Database: pyqcrm
-- ------------------------------------------------------
-- Server version 10.11.8-MariaDB-0ubuntu0.24.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `address`
--
DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
`addressid` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(50) DEFAULT NULL,
`city` varchar(500) NOT NULL,
PRIMARY KEY (`addressid`),
UNIQUE KEY `address_unique` (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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) DEFAULT 1,
`taxno` varchar(50) DEFAULT NULL,
PRIMARY KEY (`businessid`),
UNIQUE KEY `customer_unique` (`email`),
UNIQUE KEY `business_unique` (`taxno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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 AUTO_INCREMENT,
`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 */;
--
-- 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 */;
--
-- 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 */;
--
-- Temporary table structure for view `customerinfo`
--
DROP TABLE IF EXISTS `customerinfo`;
/*!50001 DROP VIEW IF EXISTS `customerinfo`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `customerinfo` AS SELECT
1 AS `BusinessId`,
1 AS `Kundenname`,
1 AS `Straße`,
1 AS `PLZ`,
1 AS `Ort`,
1 AS `Anrede`,
1 AS `Ansprechpartner` */;
SET character_set_client = @saved_cs_client;
--
-- 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 */;
--
-- Table structure for table `entities`
--
DROP TABLE IF EXISTS `entities`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entities` (
`entityid` int(11) NOT NULL AUTO_INCREMENT,
`entity` varchar(35) NOT NULL,
PRIMARY KEY (`entityid`),
UNIQUE KEY `Entities_UNIQUE` (`entity`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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(161) 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 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 `addBusiness` */;
/*!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 `addBusiness`(new_business JSON)
BEGIN
DECLARE v_company VARCHAR(100);
DECLARE v_street VARCHAR(100);
DECLARE v_postcode INT(11);
DECLARE v_phone VARCHAR(50);
DECLARE v_cell VARCHAR(50);
DECLARE v_email VARCHAR(255);
DECLARE v_homepage VARCHAR(255);
DECLARE v_director VARCHAR(100);
DECLARE v_contactperson VARCHAR(100);
DECLARE v_info VARCHAR(500);
DECLARE v_taxno VARCHAR(50);
DECLARE v_bt VARCHAR(50);
SET v_company = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.business'));
SET v_street = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.street'));
SET v_postcode = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.postcode'));
SET v_phone = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.telephone'));
SET v_cell = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.mobilephone'));
SET v_email = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.email'));
SET v_homepage = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.homepage'));
SET v_director = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.ceo'));
SET v_contactperson = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.'));
SET v_info = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.customerinfo'));
SET v_taxno = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.taxno'));
SET v_bt = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.typeid'));
-- INSERT INTO business(company, street, postcodeid, phone, mobilephone, email,
-- homepage, director, contactperson, info, taxno, btid)
-- VALUES (v_company, v_street, v_postcodeid, v_phone,v_cell,
-- v_email,v_homepage, v_director, v_contactpersonid, v_info, v_taxno, v_bt);
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 `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 `addZipCodes` */;
/*!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 `addZipCodes`(IN zipcode VARCHAR(15), IN town VARCHAR(500))
BEGIN
DECLARE zip_town INT;
IF NOT EXISTS (SELECT 1 FROM address WHERE city = town) THEN
INSERT INTO address(country, city) VALUES("Deutschland", town);
SET zip_town = LAST_INSERT_ID();
ELSE
SELECT addressid INTO zip_town FROM address WHERE city = town;
END IF;
IF NOT EXISTS (SELECT 1 FROM postcode WHERE postcode = zipcode) THEN
INSERT INTO postcode(postcode, addressid) VALUES(zipcode, zip_town);
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 `checkAdmin` */;
/*!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 `checkAdmin`()
BEGIN
SELECT 1 FROM users WHERE roleid = 1 AND enabled = TRUE LIMIT 1;
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(161), 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);
ELSE
SIGNAL SQLSTATE '45000' SET
MESSAGE_TEXT = 'Username already in use';
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 */ ;
/*!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 `getCustomerView` */;
/*!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 `getCustomerView`()
BEGIN
SELECT * FROM customerinfo ORDER BY Kundenname ASC;
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 `getUser` */;
/*!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 `getUser`( IN uname VARCHAR(50))
BEGIN
SELECT * FROM users WHERE username = uname AND enabled = 1;
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 */ ;
--
-- Final view structure for view `customerinfo`
--
/*!50001 DROP VIEW IF EXISTS `customerinfo`*/;
/*!50001 SET @saved_cs_client = @@character_set_client */;
/*!50001 SET @saved_cs_results = @@character_set_results */;
/*!50001 SET @saved_col_connection = @@collation_connection */;
/*!50001 SET character_set_client = utf8mb4 */;
/*!50001 SET character_set_results = utf8mb4 */;
/*!50001 SET collation_connection = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`pyqcrm`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `customerinfo` AS select `bt`.`businessid` AS `BusinessId`,coalesce(`bt`.`company`,'') AS `Kundenname`,coalesce(`bt`.`street`,'') AS `Straße`,coalesce(`pt`.`postcode`,'') AS `PLZ`,coalesce(`at`.`city`,'') AS `Ort`,coalesce(`ct`.`salutation`,'') AS `Anrede`,coalesce(concat(`ct`.`firstname`,' ',`ct`.`lastname`),'') AS `Ansprechpartner` from ((((`business` `bt` left join `postcode` `pt` on(`bt`.`postcodeid` = `pt`.`postcodeid`)) left join `address` `at` on(`pt`.`addressid` = `at`.`addressid`)) left join `contact` `cct` on(`cct`.`businessid` = `bt`.`businessid`)) left join `contactperson` `ct` on(`ct`.`contactpersonid` = `cct`.`contactpersonid`)) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 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-12-05 15:36:34

View File

@@ -0,0 +1,832 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.11.10-MariaDB, for Linux (x86_64)
--
-- Host: bearybot.selfhost.co Database: pyqcrm
-- ------------------------------------------------------
-- Server version 10.11.8-MariaDB-0ubuntu0.24.04.1
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `address`
--
DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
`addressid` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(50) DEFAULT NULL,
`city` varchar(50) NOT NULL,
PRIMARY KEY (`addressid`)
) ENGINE=InnoDB AUTO_INCREMENT=7042 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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) DEFAULT 1,
`taxno` varchar(50) DEFAULT NULL,
PRIMARY KEY (`businessid`),
UNIQUE KEY `customer_unique` (`email`),
UNIQUE KEY `business_unique` (`taxno`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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 AUTO_INCREMENT,
`contactpersonid` int(11) NOT NULL,
`businessid` tinyint(1) NOT NULL DEFAULT 1,
UNIQUE KEY `contact_unique` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- Temporary table structure for view `customerinfo`
--
DROP TABLE IF EXISTS `customerinfo`;
/*!50001 DROP VIEW IF EXISTS `customerinfo`*/;
SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE VIEW `customerinfo` AS SELECT
1 AS `BusinessId`,
1 AS `Kundenname`,
1 AS `Straße`,
1 AS `PLZ`,
1 AS `Ort`,
1 AS `Anrede`,
1 AS `Ansprechpartner` */;
SET character_set_client = @saved_cs_client;
--
-- 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 */;
--
-- Table structure for table `entities`
--
DROP TABLE IF EXISTS `entities`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `entities` (
`entityid` int(11) NOT NULL AUTO_INCREMENT,
`entity` varchar(35) NOT NULL,
PRIMARY KEY (`entityid`),
UNIQUE KEY `Entities_UNIQUE` (`entity`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- Table structure for table `permissions`
--
DROP TABLE IF EXISTS `permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `permissions` (
`permissionid` int(11) NOT NULL AUTO_INCREMENT,
`permission` varchar(50) NOT NULL,
PRIMARY KEY (`permissionid`),
UNIQUE KEY `berechtigungen_unique` (`permission`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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 AUTO_INCREMENT=8888 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `role`
--
DROP TABLE IF EXISTS `role`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `role` (
`roleid` int(11) NOT NULL AUTO_INCREMENT,
`description` varchar(50) NOT NULL,
PRIMARY KEY (`roleid`),
UNIQUE KEY `role_unique` (`description`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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 */;
--
-- 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(161) 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 AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- 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 `addBusiness` */;
/*!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 `addBusiness`(new_business JSON)
BEGIN
DECLARE v_company VARCHAR(100);
DECLARE v_street VARCHAR(100);
DECLARE v_postcode INT(11);
DECLARE v_phone VARCHAR(50);
DECLARE v_cell VARCHAR(50);
DECLARE v_email VARCHAR(255);
DECLARE v_homepage VARCHAR(255);
DECLARE v_director VARCHAR(100);
DECLARE v_contactperson VARCHAR(100);
DECLARE v_info VARCHAR(500);
DECLARE v_taxno VARCHAR(50);
DECLARE v_bt VARCHAR(50);
SET v_company = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.business'));
SET v_street = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.street'));
SET v_postcode = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.postcode'));
SET v_phone = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.telephone'));
SET v_cell = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.mobilephone'));
SET v_email = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.email'));
SET v_homepage = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.homepage'));
SET v_director = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.ceo'));
SET v_contactperson = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.'));
SET v_info = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.customerinfo'));
SET v_taxno = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.taxno'));
SET v_bt = JSON_UNQUOTE(JSON_EXTRACT(new_business, '$.typeid'));
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 `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 `addZipCodes` */;
/*!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 `addZipCodes`(IN zipcode VARCHAR(15), IN town VARCHAR(500))
BEGIN
DECLARE zip_town INT;
IF NOT EXISTS (SELECT 1 FROM address WHERE city = town) THEN
INSERT INTO address(country, city) VALUES("Deutschland", town);
SET zip_town = LAST_INSERT_ID();
ELSE
SELECT addressid INTO zip_town FROM address WHERE city = town;
END IF;
IF NOT EXISTS (SELECT 1 FROM postcode WHERE postcode = zipcode) THEN
INSERT INTO postcode(postcode, addressid) VALUES(zipcode, zip_town);
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 `checkAdmin` */;
/*!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 `checkAdmin`()
BEGIN
SELECT 1 FROM users WHERE roleid = 1 AND enabled = TRUE LIMIT 1;
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(161), 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);
ELSE
SIGNAL SQLSTATE '45000' SET
MESSAGE_TEXT = 'Username already in use';
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 */ ;
/*!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 `getCustomerView` */;
/*!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 `getCustomerView`()
BEGIN
SELECT * FROM customerinfo ORDER BY Kundenname ASC;
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 `getUser` */;
/*!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 `getUser`( IN uname VARCHAR(50))
BEGIN
SELECT * FROM users WHERE username = uname AND enabled = 1;
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 */ ;
--
-- Final view structure for view `customerinfo`
--
/*!50001 DROP VIEW IF EXISTS `customerinfo`*/;
/*!50001 SET @saved_cs_client = @@character_set_client */;
/*!50001 SET @saved_cs_results = @@character_set_results */;
/*!50001 SET @saved_col_connection = @@collation_connection */;
/*!50001 SET character_set_client = utf8mb4 */;
/*!50001 SET character_set_results = utf8mb4 */;
/*!50001 SET collation_connection = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`pyqcrm`@`%` SQL SECURITY DEFINER */
/*!50001 VIEW `customerinfo` AS select `bt`.`businessid` AS `BusinessId`,coalesce(`bt`.`company`,'') AS `Kundenname`,coalesce(`bt`.`street`,'') AS `Straße`,coalesce(`pt`.`postcode`,'') AS `PLZ`,coalesce(`at`.`city`,'') AS `Ort`,coalesce(`ct`.`salutation`,'') AS `Anrede`,coalesce(concat(`ct`.`firstname`,' ',`ct`.`lastname`),'') AS `Ansprechpartner` from ((((`business` `bt` left join `postcode` `pt` on(`bt`.`postcodeid` = `pt`.`postcodeid`)) left join `address` `at` on(`pt`.`addressid` = `at`.`addressid`)) left join `contact` `cct` on(`cct`.`businessid` = `bt`.`businessid`)) left join `contactperson` `ct` on(`ct`.`contactpersonid` = `cct`.`contactpersonid`)) */;
/*!50001 SET character_set_client = @saved_cs_client */;
/*!50001 SET character_set_results = @saved_cs_results */;
/*!50001 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-12-05 16:40:40

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

View File

@@ -0,0 +1,761 @@
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.11.9-MariaDB, for Linux (x86_64)
--
-- Host: localhost Database: pyqcrm
-- ------------------------------------------------------
-- Server version 10.11.9-MariaDB
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `address`
--
DROP TABLE IF EXISTS `address`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `address` (
`addressid` int(11) NOT NULL AUTO_INCREMENT,
`country` varchar(50) DEFAULT NULL,
`address` varchar(50) NOT NULL,
PRIMARY KEY (`addressid`),
UNIQUE KEY `address_unique` (`address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `address`
--
LOCK TABLES `address` WRITE;
/*!40000 ALTER TABLE `address` DISABLE KEYS */;
/*!40000 ALTER TABLE `address` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `assignment`
--
DROP TABLE IF EXISTS `assignment`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `assignment` (
`contractid` int(11) NOT NULL AUTO_INCREMENT,
`employeeid` int(11) NOT NULL,
UNIQUE KEY `assignment_unique` (`contractid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_estonian_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `assignment`
--
LOCK TABLES `assignment` WRITE;
/*!40000 ALTER TABLE `assignment` DISABLE KEYS */;
/*!40000 ALTER TABLE `assignment` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `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,
`customer` 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 `customer`
--
DROP TABLE IF EXISTS `customer`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `customer` (
`customerid` 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) NOT NULL,
`homepage` varchar(255) DEFAULT NULL,
`director` varchar(100) DEFAULT NULL,
`contactpersonid` int(11) NOT NULL,
PRIMARY KEY (`customerid`),
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 `customer`
--
LOCK TABLES `customer` WRITE;
/*!40000 ALTER TABLE `customer` DISABLE KEYS */;
/*!40000 ALTER TABLE `customer` 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 `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,
`customerid` 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
) 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,
`customerid` int(11) NOT NULL,
PRIMARY KEY (`salestaxid`),
UNIQUE KEY `salestax_unique` (`customerid`)
) 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;
--
-- Dumping routines for database 'pyqcrm'
--
/*!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-10-29 13:20:21

View File

@@ -1,14 +0,0 @@
services:
mariadb:
image: mariadb:latest
volumes:
- mariadb:/var/lib/mysql
ports:
- 127.0.0.1:8000:3306
environment:
MARIADB_ROOT_PASSWORD: pyqcrm
MARIADB_USER: pyqcrm
MARIADB_PASSWORD: pyqcrm
MARIADB_DATABASE: pyqcrm
volumes:
mariadb:

BIN
fonts/BeautifulPeople.ttf Normal file

Binary file not shown.

BIN
fonts/Damarwulan.ttf Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More