From edaad51ea7c98b6f7c22bad2eb3485eef13bb06703ec871757d599166d922314 Mon Sep 17 00:00:00 2001 From: Marco Gatzen Date: Mon, 13 Jan 2025 15:28:22 +0100 Subject: [PATCH] GUI Object --- Gui/AddObject.qml | 116 +++++++++++ Gui/AddObjectEmployee.qml | 98 ++++++++++ Gui/ObjectAddOnContactPerson.qml | 89 +++++++++ Gui/ObjectAddOnEmployee.qml | 55 ++++++ Gui/ObjectAddOns.qml | 21 ++ Gui/ObjectTable.qml | 164 ++++++++++++++++ Gui/ObjectView.qml | 202 +++++++++++++++++++ Gui/TopBar.qml | 4 + js/qmldict.js | 28 +++ pyqcrm.pyproject.user.wKqibG | 325 +++++++++++++++++++++++++++++++ qml.qrc | 7 + 11 files changed, 1109 insertions(+) create mode 100644 Gui/AddObject.qml create mode 100644 Gui/AddObjectEmployee.qml create mode 100644 Gui/ObjectAddOnContactPerson.qml create mode 100644 Gui/ObjectAddOnEmployee.qml create mode 100644 Gui/ObjectAddOns.qml create mode 100644 Gui/ObjectTable.qml create mode 100644 Gui/ObjectView.qml create mode 100644 pyqcrm.pyproject.user.wKqibG 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