diff --git a/Gui/AddObject.qml b/Gui/AddObject.qml
new file mode 100644
index 0000000..8986f8a
--- /dev/null
+++ b/Gui/AddObject.qml
@@ -0,0 +1,116 @@
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Fusion
+import QtQuick.Dialogs
+import "../js/qmldict.js" as JsLib
+
+ColumnLayout
+{
+ property var new_object: null
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ spacing: 15
+ Label
+ {
+ text: qsTr("Objekt anlegen")
+ horizontalAlignment: Text.AlignHCenter
+ Layout.fillWidth: true
+ font.pixelSize: 35
+ }
+ CheckBox
+ {
+ id: checkAddObject
+ text: qsTr("Mitarbeiter/Ansprechpartner hinzufügen")
+ Layout.alignment: Qt.AlignRight
+ checked: false
+ onCheckStateChanged:
+ {
+ addObjectLayout.visible = checked
+ //checkFields()
+ }
+ }
+
+ RowLayout
+ {
+ id: addobject
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ spacing: 45
+
+ ObjectView
+ {
+ id: objectView
+ }
+
+ ObjectAddOns
+ {
+ id: addObjectLayout
+ }
+ }
+ RowLayout
+ {
+ Layout.fillHeight: true
+ Layout.alignment: Qt.AlignRight
+ Button
+ {
+ text: qsTr("Abbrechen")
+ onClicked: appLoader.source = "ObjectTable.qml"
+ }
+ Button
+ {
+ id: saveBtn
+ text: qsTr("Speichern")
+ enabled: false
+ onClicked:
+ {
+ if (!checkAddObject.checked)
+ {
+ new_object = JsLib.addObject(objectView)
+ object_model.addObject(new_object, 0)
+ appLoader.source = "ObjectTable.qml"
+ }
+ else
+ {
+ new_object = JsLib.addObject(objectView)
+ var new_objecto = JsLib.addObject(addObjectLayout)
+ objecto_model.addObject(new_objecto)
+ }
+ }
+ }
+ }
+ Item
+ {
+ id: spacer3
+ Layout.fillHeight: true
+ }
+
+
+
+ // Connections
+ // {
+ // target: spacer3
+
+ // function onObjectIdReady()
+ // {
+ // var obj_id = arguments[0]
+ // object_model.addObject(new_object, obj_id)
+ // appLoader.source = "ObjectTable.qml"
+ // }
+ // }
+
+ // function checkFields()
+ // {
+ // if(checkAddObject.checked)
+ // {
+ // if(!objectView.checkObjectField() || !addObjectLayout.checkObjectField())
+ // saveBtn.enabled = false
+ // else
+ // saveBtn.enabled = true
+ // }
+ // else if (!objectView.checkObjectField())
+ // saveBtn.enabled = false
+ // else
+ // saveBtn.enabled = true
+ // }
+}
diff --git a/Gui/AddObjectEmployee.qml b/Gui/AddObjectEmployee.qml
new file mode 100644
index 0000000..47431ce
--- /dev/null
+++ b/Gui/AddObjectEmployee.qml
@@ -0,0 +1,98 @@
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+Window
+{
+ id: addmitarbeiter
+
+ ColumnLayout
+ {
+ anchors.fill: parent
+ anchors.margins: 10
+ Label
+ {
+ text: qsTr("Neuer Mitarbeiter")
+ Layout.alignment: Qt.AlignHCenter
+ }
+
+ GridLayout
+ {
+ Layout.fillWidth: true
+ columns: 2
+ rowSpacing: 4
+ columnSpacing: 6
+
+ Label
+ {
+ text: qsTr("Eingesetzter Mitarbeiter")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ Layout.fillWidth: true
+ }
+ Label
+ {
+ text: qsTr("Lohn Mitarbeiter pro Stunde")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ Layout.fillWidth: true
+ }
+ Label
+ {
+ text: qsTr("Einsatzdauer")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ Layout.fillWidth: true
+ }
+ Label
+ {
+ text: qsTr("Reinigungstage")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ Layout.fillWidth: true
+ }
+ Label
+ {
+ text: qsTr("Tätigkeiten")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ Layout.fillWidth: true
+ }
+ Label
+ {
+ text: qsTr("Ertrag")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ Layout.fillWidth: true
+ }
+ }
+ RowLayout
+ {
+ Layout.fillWidth: true
+ spacing: 5
+ Item
+ {
+ Layout.fillWidth: true
+ }
+ Button
+ {
+ text: qsTr("Abbrechen")
+ }
+ Button
+ {
+ text: qsTr("Hinzufügen")
+ }
+ }
+ }
+}
diff --git a/Gui/ObjectAddOnContactPerson.qml b/Gui/ObjectAddOnContactPerson.qml
new file mode 100644
index 0000000..4f4ab07
--- /dev/null
+++ b/Gui/ObjectAddOnContactPerson.qml
@@ -0,0 +1,89 @@
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+GridLayout
+{
+ columns: 2
+
+ CheckBox
+ {
+ id: contactperson
+ text: qsTr("Ansprechpartner")
+ Layout.columnSpan: 2
+ onCheckStateChanged:
+ {
+ title.enabled = contactperson.checked
+ firstname.enabled = contactperson.checked
+ lastname.enabled = contactperson.checked
+ phonenumber.enabled = contactperson.checked
+ posizion.enabled = contactperson.checked
+ }
+ }
+ Label
+ {
+ text: qsTr("Anrede")
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox
+ {
+ id: title
+ model: [qsTr("Herr"),qsTr("Frau")]
+ Layout.fillWidth: true
+ enabled: false
+ }
+ Label
+ {
+ text: qsTr("Vorname")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ id: firstname
+ Layout.fillWidth: true
+ placeholderText: "Pflichtfeld"
+ placeholderTextColor: "red"
+ enabled: false
+ }
+ Label
+ {
+ text: qsTr("Nachname")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ id: lastname
+ Layout.fillWidth: true
+ placeholderText: "Pflichtfeld"
+ placeholderTextColor: "red"
+ enabled: false
+ }
+ Label
+ {
+ text: qsTr("Telefonnummer")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ id: phonenumber
+ Layout.fillWidth: true
+ placeholderText: "Pflichtfeld"
+ placeholderTextColor: "red"
+ enabled: false
+ }
+ Label
+ {
+ text: qsTr("Position")
+ Layout.alignment: Qt.AlignRight
+ }
+ TextField
+ {
+ id: posizion
+ Layout.fillWidth: true
+ placeholderText: "Pflichtfeld"
+ placeholderTextColor: "red"
+ enabled: false
+ }
+
+}
+
diff --git a/Gui/ObjectAddOnEmployee.qml b/Gui/ObjectAddOnEmployee.qml
new file mode 100644
index 0000000..28660d4
--- /dev/null
+++ b/Gui/ObjectAddOnEmployee.qml
@@ -0,0 +1,55 @@
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+GridLayout
+{
+ id: oaoemployee
+ columns: 2
+ rows: 4
+ Label
+ {
+ text: qsTr("Mitarbeiter")
+ }
+ ScrollView
+ {
+ Layout.rowSpan: 3
+ Layout.fillWidth: true
+
+ TextArea
+ {
+ id: mitarbeitertext
+ implicitWidth: parent.width
+ implicitHeight: 100
+ wrapMode: TextEdit.Wrap
+ background: Rectangle
+ {
+ color: mitarbeiterhin.palette.base
+ border.color: mitarbeiterhin.activeFocus? mitarbeiterhin.palette.highlight: mitarbeiterhin.palette.base
+ }
+ }
+ }
+ Button
+ {
+ id: mitarbeiterhin
+ property var neuermitarbeiter: undefined
+ text: qsTr("Mitarbeiter hinzufügen")
+ Layout.columnSpan: 2
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignRight
+ Layout.maximumWidth: mitarbeitertext.width
+ onClicked:
+ {
+ var nm = Qt.createComponent("AddObjectEmployee.qml")
+ if (nm.status === Component.Ready)
+ {
+ neuermitarbeiter = nm.createObject (appWindow, {width: 600, height: 400})
+ neuermitarbeiter.show()
+ }
+ }
+ }
+}
+
+
+
+
diff --git a/Gui/ObjectAddOns.qml b/Gui/ObjectAddOns.qml
new file mode 100644
index 0000000..ce3d4ea
--- /dev/null
+++ b/Gui/ObjectAddOns.qml
@@ -0,0 +1,21 @@
+import QtQuick
+import QtQuick.Layouts
+
+ColumnLayout
+{
+ id: addObjectLayout
+ visible: false
+
+ ObjectAddOnEmployee
+ {
+ id: oaoemployee
+ }
+ ObjectAddOnContactPerson
+ {
+ id: oaocontactperson
+ }
+ Item
+ {
+ Layout.fillHeight: true
+ }
+}
diff --git a/Gui/ObjectTable.qml b/Gui/ObjectTable.qml
new file mode 100644
index 0000000..4e1dd17
--- /dev/null
+++ b/Gui/ObjectTable.qml
@@ -0,0 +1,164 @@
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import Qt.labs.qmlmodels
+import QtQuick.Controls.Fusion
+
+Item {
+ property var availableFilters: [""]
+ SearchBar
+ {
+ id:searchBar
+ anchors.margins: 9
+ }
+
+ Button
+ {
+ id: addObjectBtn
+ icon.source: "qrc:/images/addbusiness.svg"
+ icon.color: "olive"
+ anchors.right: parent.right
+ flat: true
+ onClicked: appLoader.source = "AddObject.qml"
+ }
+
+
+ ColumnLayout
+ {
+ id: tableColumn
+ anchors
+ {
+ top: searchBar.bottom
+ bottom: parent.bottom
+ left: parent.left
+ right: parent.right
+ }
+
+ HorizontalHeaderView
+ {
+ id: horizontalHeaderview
+ Layout.fillWidth: true
+ implicitHeight: 40
+ visible: false
+ movableColumns: true //@disable-check M16
+ syncView: objectTable
+
+ delegate: Rectangle {
+ color: addObjectBtn.palette.alternateBase
+ border.color: addObjectBtn.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: addObjectBtn.palette.text
+ }
+ }
+ }
+
+ TableView
+ {
+ property real newWidth: 0
+ id: objectTable
+ Layout.fillHeight: true
+ Layout.fillWidth: true
+ ScrollBar.vertical: ScrollBar
+ {
+ policy: objectTable.contentHeight > objectTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
+ }
+ columnSpacing: 1
+ rowSpacing: 2
+ //model: object_model
+ alternatingRows: true
+ resizableColumns: true // @disable-check M16
+ selectionBehavior: TableView.SelectRows
+ selectionModel: ItemSelectionModel
+ {
+ id: obmodel
+ model: objectTable.model
+ }
+
+ // Timer
+ // {
+ // id: redrawTable
+ // running: true
+ // interval: 1
+ // repeat: false
+ // onTriggered:
+ // {
+ // objectTable.forceLayout();
+ // }
+ // }
+
+
+
+ delegate:Rectangle
+ {
+ required property bool selected
+ required property bool current
+ implicitWidth: objectTable.width / objectTable.columns
+ implicitHeight: 25
+ color: selected
+ ? addObjectBtn.palette.highlight //palette.highlight
+ : (objectTable.alternatingRows && row % 2 !== 0
+ ? addObjectBtn.palette.base // palette.base
+ : addObjectBtn.palette.alternateBase) //palette.alternateBase)
+
+ Text
+ {
+ text: model.display == null? "": model.display
+ elide: Text.ElideRight
+ width: parent.width
+ height: parent.height
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: 9 //@d isable-check M16
+ color: addObjectBtn.palette.text
+ }
+
+ MouseArea
+ {
+ property bool hovered: false
+ id: mouseArea
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked:
+ {
+ object_model.onRowClicked(row)
+ }
+ onEntered:
+ {
+ objectTable.selectionModel.select(objectTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
+ }
+ }
+ }
+
+ // onContentWidthChanged:
+ // {
+
+ // redrawTable.start()
+ // }
+ }
+
+ Item
+ {
+
+ Layout.fillWidth: true
+ }
+ }
+ // function viewCriterion(criterion)
+ // {
+ // object_model.viewCriterion(criterion.text)
+ // }
+}
+
+
+
+
+
+
diff --git a/Gui/ObjectView.qml b/Gui/ObjectView.qml
new file mode 100644
index 0000000..1bb9a92
--- /dev/null
+++ b/Gui/ObjectView.qml
@@ -0,0 +1,202 @@
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+GridLayout
+{
+ id: objectView
+
+ columns: 2
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ rowSpacing: 9
+
+
+ Label
+ {
+ text: qsTr("Objektstraße")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+
+ }
+
+ TextField
+ {
+ id: objectName
+ Layout.fillWidth: true
+ Layout.alignment: Qt.AlignVCenter
+ onTextChanged: checkFields()
+ placeholderText: "Pflichtfeld"
+ placeholderTextColor: "red"
+ //Layout.maximumWidth: parent.width / 2
+
+ }
+
+ Label
+ {
+ text: qsTr("Leistungsort")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: leistungsortid
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ onTextChanged: checkFields()
+ placeholderText: "Pflichtfeld"
+ placeholderTextColor: "red"
+ }
+
+ Label
+ {
+ text: qsTr("Lohnanteil inkl. Fahrtkosten")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: lohnanteil
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("Materialanteil")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: materialanteil
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("Zusatz 1")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: zusatz1
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("Zusatz 2")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: zusatz2
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("Gesamt Netto")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: gesamtnetto
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("MwSt")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: mwst
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("Gesamt(Netto+MwSt)")
+ Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
+ }
+
+ TextField
+ {
+ id: gesamt
+ Layout.fillWidth: true
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+ Label
+ {
+ text: qsTr("Zahlungsziel")
+ Layout.alignment: Qt.AlignRight
+ }
+ ComboBox
+ {
+ property string name: "zahlungsziel"
+ id: zahlungsziel
+ Layout.fillWidth: true
+ editable: false
+ //model: business_type
+ textRole: "display"
+ //Layout.maximumWidth: parent.width / 2
+ }
+
+
+ Label
+ {
+ text: qsTr("Info")
+ Layout.alignment: Qt.AlignRight | Qt.AlignTop
+ }
+ ScrollView
+ {
+ id: infoview
+ Layout.fillWidth: true
+ Layout.preferredHeight: 200
+ //Layout.columnSpan: 3
+ ScrollBar.horizontal: ScrollBar
+
+ {
+ policy: ScrollBar.AlwaysOn
+ }
+
+ TextArea
+ {
+ id: objectInfo
+ property string name: "objectinfo"
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+
+ wrapMode: TextEdit.Wrap
+ background: Rectangle
+ {
+ color: objectInfo.palette.base
+ border.color: objectInfo.activeFocus? objectInfo.palette.highlight: objectInfo.palette.base
+ }
+ }
+ }
+ Item
+ {
+ Layout.fillHeight: true
+ }
+}
+
+
+
+
+
+
+
+
diff --git a/Gui/TopBar.qml b/Gui/TopBar.qml
index 6b51f3c..45875e3 100644
--- a/Gui/TopBar.qml
+++ b/Gui/TopBar.qml
@@ -48,6 +48,10 @@ RowLayout
flat: true
text: qsTr("Objekt")
implicitWidth: objekt.implicitContentWidth + 10
+ onClicked:
+ {
+ appLoader.source = "ObjectTable.qml"
+ }
}
diff --git a/js/qmldict.js b/js/qmldict.js
index 5f2cb85..7a5c8a7 100644
--- a/js/qmldict.js
+++ b/js/qmldict.js
@@ -49,5 +49,33 @@ function addBusiness(form)
return business_form
}
+function addObject(form)
+{
+ let object_form = {};
+ for (var i = 0; i < form.children.length; i++)
+ {
+ if (form.children[i].toString().startsWith("Combo"))
+ {
+ if(form.children[i].editText)
+ {
+ object_form[form.children[i].name] = form.children[i].editText
+ }
+ else
+ {
+ object_form[form.children[i].name] = form.children[i].currentText
+ }
+ }
+ else if (form.children[i].toString().startsWith("TextField"))
+ {
+ object_form[form.children[i].name] = form.children[i].text.trim()
+ }
+ else if (form.children[i].toString().startsWith("Scroll"))
+ {
+ object_form[form.children[i].contentChildren[0].name] = form.children[i].contentChildren[0].text.trim()
+ }
+ }
+ return object_form
+}
+
diff --git a/pyqcrm.pyproject.user.wKqibG b/pyqcrm.pyproject.user.wKqibG
new file mode 100644
index 0000000..a16445c
--- /dev/null
+++ b/pyqcrm.pyproject.user.wKqibG
@@ -0,0 +1,325 @@
+
+
+
+
+
+ EnvironmentId
+ {39e37ca7-c3e2-4c38-a716-3e864b0bb4d2}
+
+
+ ProjectExplorer.Project.ActiveTarget
+ 0
+
+
+ ProjectExplorer.Project.EditorSettings
+
+ true
+ false
+ true
+
+ Cpp
+
+ CppGlobal
+
+
+
+ QmlJS
+
+ QmlJSGlobal
+
+
+ 2
+ UTF-8
+ false
+ 4
+ false
+ 80
+ true
+ true
+ 1
+ 0
+ false
+ true
+ false
+ 2
+ true
+ true
+ 0
+ 8
+ true
+ false
+ 1
+ true
+ true
+ true
+ *.md, *.MD, Makefile
+ false
+ true
+ true
+
+
+
+ ProjectExplorer.Project.PluginSettings
+
+
+ true
+ false
+ true
+ true
+ true
+ true
+
+ false
+
+
+ 0
+ true
+
+ true
+ true
+ Builtin.DefaultTidyAndClazy
+ 6
+ true
+
+
+
+ true
+
+
+ true
+
+
+
+
+ ProjectExplorer.Project.Target.0
+
+ Desktop
+ Python 3.13.0
+ Python 3.13.0
+ {78860287-dff8-46dd-a381-8b430dbab0da}
+ 0
+ 0
+ 0
+
+ C:\Users\gatze\Desktop\pyqcrm
+
+
+ true
+ Python.PysideBuildStep
+ C:\Users\gatze\AppData\Roaming\Python\Python313\Scripts\pyside6-project.exe
+ C:\Users\gatze\AppData\Roaming\Python\Python313\Scripts\pyside6-uic.exe
+
+ 1
+ Erstellen
+ Erstellen
+ ProjectExplorer.BuildSteps.Build
+
+
+ 0
+ Bereinigen
+ Bereinigen
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Python 3.13.0
+ Python.PySideBuildConfiguration
+ C:/Users/gatze/AppData/Local/Programs/Python/Python313/python.exe
+
+
+ C:\Users\gatze\Desktop\pyqcrm\.qtcreator\Python_3_13_0venv
+
+
+ true
+ Python.PysideBuildStep
+
+ 1
+ Erstellen
+ Erstellen
+ ProjectExplorer.BuildSteps.Build
+
+
+ 0
+ Bereinigen
+ Bereinigen
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Python 3.13.0 virtuelle Umgebung
+ Python.PySideBuildConfiguration
+ C:/Users/gatze/Desktop/pyqcrm/.qtcreator/Python_3_13_0venv/Scripts/python.exe
+ C:/Users/gatze/Desktop/pyqcrm/.qtcreator/Python_3_13_0venv
+
+ 2
+
+
+ 0
+ Deployment
+ Deployment
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+ -e cpu-cycles --call-graph "dwarf,4096" -F 250
+ main.py
+ PythonEditor.RunConfiguration.C:/Users/gatze/Desktop/pyqcrm/main.py
+ C:/Users/gatze/Desktop/pyqcrm/main.py
+ true
+ C:\Users\gatze\Desktop\pyqcrm\main.py
+ true
+ true
+ C:/Users/gatze/Desktop/pyqcrm
+
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+ -e cpu-cycles --call-graph "dwarf,4096" -F 250
+ lib\DB\DbManager.py
+ PythonEditor.RunConfiguration.C:/Users/gatze/Desktop/pyqcrm/lib/DB/DbManager.py
+ C:/Users/gatze/Desktop/pyqcrm/lib/DB/DbManager.py
+ true
+ C:\Users\gatze\Desktop\pyqcrm\lib\DB\DbManager.py
+ true
+ true
+ C:/Users/gatze/Desktop/pyqcrm/lib/DB
+
+ 2
+
+
+
+ ProjectExplorer.Project.Target.1
+
+ Desktop
+ Python 3.12.6
+ Python 3.12.6
+ {2db3a2fc-21bd-4c08-acba-70fdc903d42a}
+ 0
+ 0
+ 0
+
+ C:\Users\gatze\Desktop\pyqcrm\.qtcreator\Python_3_12_6venv
+
+
+ true
+ Python.PysideBuildStep
+ C:\Users\gatze\Desktop\pyqcrm\.qtcreator\Python_3_12_6venv\Scripts\pyside6-project.exe
+ C:\Users\gatze\Desktop\pyqcrm\.qtcreator\Python_3_12_6venv\Scripts\pyside6-uic.exe
+
+ 1
+ Erstellen
+ Erstellen
+ ProjectExplorer.BuildSteps.Build
+
+
+ 0
+ Bereinigen
+ Bereinigen
+ ProjectExplorer.BuildSteps.Clean
+
+ 2
+ false
+
+ false
+
+ Python 3.12.6 virtuelle Umgebung
+ Python.PySideBuildConfiguration
+ C:/Users/gatze/Desktop/pyqcrm/.qtcreator/Python_3_12_6venv/Scripts/python.exe
+ C:/Users/gatze/Desktop/pyqcrm/.qtcreator/Python_3_12_6venv
+
+ 1
+
+
+ 0
+ Deployment
+ Deployment
+ ProjectExplorer.BuildSteps.Deploy
+
+ 1
+
+ false
+ ProjectExplorer.DefaultDeployConfiguration
+
+ 1
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+ -e cpu-cycles --call-graph "dwarf,4096" -F 250
+ main.py
+ PythonEditor.RunConfiguration.C:/Users/gatze/Desktop/pyqcrm/main.py
+ C:/Users/gatze/Desktop/pyqcrm/main.py
+ true
+ C:\Users\gatze\Desktop\pyqcrm\main.py
+ 0
+ false
+ 0
+ 0
+ false
+ C:/Users/gatze/Desktop/pyqcrm
+
+
+ true
+ true
+ 0
+ true
+
+ 2
+
+ false
+ -e cpu-cycles --call-graph "dwarf,4096" -F 250
+ lib\Vermasseln.py
+ PythonEditor.RunConfiguration.C:/Users/gatze/Desktop/pyqcrm/lib/Vermasseln.py
+ C:/Users/gatze/Desktop/pyqcrm/lib/Vermasseln.py
+ true
+ C:\Users\gatze\Desktop\pyqcrm\lib\Vermasseln.py
+ true
+ true
+ C:/Users/gatze/Desktop/pyqcrm/lib
+
+ 2
+
+
+
+ ProjectExplorer.Project.TargetCount
+ 2
+
+
+ ProjectExplorer.Project.Updater.FileVersion
+ 22
+
+
+ Version
+ 22
+
+
diff --git a/qml.qrc b/qml.qrc
index a56e8e2..6825588 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -17,5 +17,12 @@
Gui/CustomerView.qml
Gui/NoDbConnection.qml
Gui/Notifications.qml
+ Gui/ObjectTable.qml
+ Gui/AddObject.qml
+ Gui/ObjectView.qml
+ Gui/ObjectAddOns.qml
+ Gui/ObjectAddOnContactPerson.qml
+ Gui/ObjectAddOnEmployee.qml
+ Gui/AddObjectEmployee.qml