Fixing ObjectAddOnContactPerson.qml conflict
This commit is contained in:
@@ -145,8 +145,21 @@ ColumnLayout
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
employee_model.addedNewEmployee.connect(onAddNewEmployee)
|
||||||
|
}
|
||||||
|
|
||||||
// }
|
// }
|
||||||
// } // ScrollView
|
// } // ScrollView
|
||||||
|
function onAddNewEmployee(added)
|
||||||
|
{
|
||||||
|
if (added)
|
||||||
|
console.log('addedsuccesfully')
|
||||||
|
else
|
||||||
|
console.log('failedtoadd')
|
||||||
|
appLoader.source = 'EmployeeTable.qml'
|
||||||
|
}
|
||||||
|
|
||||||
function checkFields()
|
function checkFields()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -11,20 +11,6 @@ GridLayout
|
|||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
rowSpacing: 9
|
rowSpacing: 9
|
||||||
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: qsTr("Firma")
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
}
|
|
||||||
ComboBox
|
|
||||||
{
|
|
||||||
property string name: "business"
|
|
||||||
id: business
|
|
||||||
editable: true
|
|
||||||
Layout.fillWidth: true
|
|
||||||
Layout.columnSpan: 3
|
|
||||||
}
|
|
||||||
|
|
||||||
//// New grid row
|
//// New grid row
|
||||||
|
|
||||||
Label
|
Label
|
||||||
@@ -73,6 +59,21 @@ GridLayout
|
|||||||
property string name: "postcode"
|
property string name: "postcode"
|
||||||
id: postcode
|
id: postcode
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
editable: true
|
||||||
|
onCurrentTextChanged: checkFields()
|
||||||
|
onEditTextChanged: checkFields()
|
||||||
|
onActivated: currentValue
|
||||||
|
model: address_model
|
||||||
|
textRole: "display"
|
||||||
|
popup.height: 300
|
||||||
|
popup.y: postcode.y + 5 - (postcode.height * 2)
|
||||||
|
currentIndex: -1
|
||||||
|
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
|
||||||
|
|
||||||
|
validator: RegularExpressionValidator
|
||||||
|
{
|
||||||
|
regularExpression: /([0-9]{1,5})/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
@@ -106,7 +107,8 @@ GridLayout
|
|||||||
|
|
||||||
SpinBox
|
SpinBox
|
||||||
{
|
{
|
||||||
id: parteien
|
property string name: "units"
|
||||||
|
id: partitions
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
from: 1
|
from: 1
|
||||||
to: 100
|
to: 100
|
||||||
@@ -121,6 +123,7 @@ GridLayout
|
|||||||
|
|
||||||
SpinBox
|
SpinBox
|
||||||
{
|
{
|
||||||
|
property string name: "floors"
|
||||||
id: floors
|
id: floors
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
from: 1
|
from: 1
|
||||||
@@ -141,7 +144,7 @@ GridLayout
|
|||||||
id: mezzanin
|
id: mezzanin
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
editable: false
|
editable: false
|
||||||
model: [qsTr("Jööö"), qsTr("Nöööööööööööööööööööööööööö")]
|
model: [qsTr("Ja"), qsTr("Nein")]
|
||||||
}
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
@@ -156,66 +159,25 @@ GridLayout
|
|||||||
id: lift
|
id: lift
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
editable: false
|
editable: false
|
||||||
model: [qsTr("Jööö"), qsTr("Nöööööööööööööööööööööööööö")]
|
model: [qsTr("Ja"), qsTr("Nein")]
|
||||||
}
|
}
|
||||||
|
|
||||||
//New grid row
|
//New grid row
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Fenster")
|
text: qsTr("Objekt-Nr.")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox
|
|
||||||
{
|
|
||||||
property string name: "windows"
|
|
||||||
id: windows
|
|
||||||
Layout.fillWidth: true
|
|
||||||
editable: false
|
|
||||||
model: [qsTr("Jööö"), qsTr("Nöööööööööööööööööööööööööö")]
|
|
||||||
onCurrentIndexChanged: nrWindows.enabled = (windows.currentIndex === 0)? true: false
|
|
||||||
}
|
|
||||||
|
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: qsTr("Anzahl")
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
|
||||||
}
|
|
||||||
|
|
||||||
SpinBox
|
|
||||||
{
|
|
||||||
id: nrWindows
|
|
||||||
Layout.fillWidth: true
|
|
||||||
from: 0
|
|
||||||
to: 100
|
|
||||||
value: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
// New grid row
|
|
||||||
CheckBox
|
|
||||||
{
|
|
||||||
id: ladder
|
|
||||||
text: qsTr("Leiter")
|
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
checked: false
|
|
||||||
onCheckStateChanged:
|
|
||||||
{
|
|
||||||
//checkFields()
|
|
||||||
}
|
}
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
property string name: "objectno"
|
||||||
|
id: objectno
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
placeholderText: qsTr("0 oder leer um eine Nummer automatisch zu generieren")
|
||||||
|
placeholderTextColor: "pink"
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckBox
|
|
||||||
{
|
|
||||||
id: accessible
|
|
||||||
text: qsTr("Erreichbar")
|
|
||||||
Layout.alignment: Qt.AlignRight
|
|
||||||
checked: false
|
|
||||||
onCheckStateChanged:
|
|
||||||
{
|
|
||||||
//checkFields()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
@@ -232,39 +194,35 @@ GridLayout
|
|||||||
}
|
}
|
||||||
|
|
||||||
//// New grid row
|
//// New grid row
|
||||||
Label
|
|
||||||
{
|
|
||||||
text: qsTr("kontaktdaten")
|
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignTop
|
|
||||||
}
|
|
||||||
|
|
||||||
ComboBox
|
|
||||||
{
|
|
||||||
property string name: "contact"
|
|
||||||
id: contact
|
|
||||||
Layout.fillWidth: true
|
|
||||||
editable: false
|
|
||||||
model: [qsTr("Beirat"), qsTr("Hausmeister")]
|
|
||||||
}
|
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Reingunsmittel wo?")
|
text: qsTr("Reinigungsmittel wo?")
|
||||||
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
TextField
|
TextField
|
||||||
{
|
{
|
||||||
property string name: "cleansing"
|
property string name: "cleaningproducts"
|
||||||
id: cleamsing
|
id: cleaningproducts
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
placeholderText: "Pflichtfeld"
|
||||||
placeholderTextColor: "red"
|
placeholderTextColor: "red"
|
||||||
|
onTextChanged: checkFields()
|
||||||
}
|
}
|
||||||
Item
|
Item
|
||||||
{
|
{
|
||||||
Layout.fillHeight: true
|
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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,19 +20,19 @@ ColumnLayout
|
|||||||
}
|
}
|
||||||
CheckBox
|
CheckBox
|
||||||
{
|
{
|
||||||
id: checkAddObject
|
id: checkAddContact
|
||||||
text: qsTr("Ansprechpartner hinzufügen")
|
text: qsTr("Ansprechpartner hinzufügen")
|
||||||
Layout.alignment: Qt.AlignRight
|
Layout.alignment: Qt.AlignRight
|
||||||
checked: false
|
checked: false
|
||||||
onCheckStateChanged:
|
onCheckStateChanged:
|
||||||
{
|
{
|
||||||
//checkFields()
|
checkFields()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RowLayout
|
RowLayout
|
||||||
{
|
{
|
||||||
id: addobject
|
id: addObject
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
spacing: 45
|
spacing: 45
|
||||||
@@ -51,7 +51,7 @@ ColumnLayout
|
|||||||
ObjectAddOns
|
ObjectAddOns
|
||||||
{
|
{
|
||||||
id: addObjectLayout
|
id: addObjectLayout
|
||||||
visible: checkAddObject.checked
|
visible: checkAddContact.checked
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RowLayout
|
RowLayout
|
||||||
@@ -65,24 +65,26 @@ ColumnLayout
|
|||||||
}
|
}
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
|
property var new_object: null
|
||||||
id: saveBtn
|
id: saveBtn
|
||||||
text: qsTr("Speichern")
|
text: qsTr("Speichern")
|
||||||
enabled: false
|
enabled: false
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
if (!checkAddObject.checked)
|
new_object = JsLib.parseForm(newObject)
|
||||||
|
new_object['lift'] = new_object['lift'] === 'Ja' ? 1 : 0
|
||||||
|
new_object['mezzanin'] = new_object['mezzanin'] === 'Ja' ? 1 : 0
|
||||||
|
if (!checkAddContact.checked)
|
||||||
{
|
{
|
||||||
new_object = JsLib.parseForm(objectView)
|
var list = []
|
||||||
// object_model.addObject(new_object, 0)
|
object_model.addObject(new_object, list, false)
|
||||||
// appLoader.source = "ObjectTable.qml"
|
|
||||||
console.log(new_object)
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
new_object = JsLib.parseForm(objectView)
|
var new_objecto = addObjectLayout.getForm()
|
||||||
var new_objecto = JsLib.parseForm(addObjectLayout)
|
object_model.addObject(new_object, new_objecto, true)
|
||||||
console.log(new_objecto)
|
|
||||||
//objecto_model.addObject(new_objecto)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -93,7 +95,10 @@ ColumnLayout
|
|||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component.onCompleted:
|
||||||
|
{
|
||||||
|
object_model.objectAdded.connect(onObjectAdded)
|
||||||
|
}
|
||||||
|
|
||||||
// Connections
|
// Connections
|
||||||
// {
|
// {
|
||||||
@@ -107,18 +112,18 @@ ColumnLayout
|
|||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// function checkFields()
|
function checkFields()
|
||||||
// {
|
{
|
||||||
// if(checkAddObject.checked)
|
if(checkAddContact.checked)
|
||||||
// {
|
{
|
||||||
// if(!objectView.checkObjectField() || !addObjectLayout.checkObjectField())
|
if(!newObject.checkObjectField() || !addObjectLayout.contactPerson.contacts || !addObjectLayout.contactPerson.contacts.length)
|
||||||
// saveBtn.enabled = false
|
saveBtn.enabled = false
|
||||||
// else
|
else
|
||||||
// saveBtn.enabled = true
|
saveBtn.enabled = true
|
||||||
// }
|
}
|
||||||
// else if (!objectView.checkObjectField())
|
else if (!newObject.checkObjectField())
|
||||||
// saveBtn.enabled = false
|
saveBtn.enabled = false
|
||||||
// else
|
else
|
||||||
// saveBtn.enabled = true
|
saveBtn.enabled = true
|
||||||
// }
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,21 @@ GridLayout
|
|||||||
property var contacts: null
|
property var contacts: null
|
||||||
columns: 2
|
columns: 2
|
||||||
|
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Kontaktdaten")
|
||||||
|
Layout.alignment: Qt.AlignRight | Qt.AlignTop
|
||||||
|
}
|
||||||
|
|
||||||
|
ComboBox
|
||||||
|
{
|
||||||
|
property string name: "contacttype"
|
||||||
|
id: contacttype
|
||||||
|
Layout.fillWidth: true
|
||||||
|
editable: false
|
||||||
|
model: [qsTr("Beirat"), qsTr("Hausmeister")]
|
||||||
|
}
|
||||||
|
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
text: qsTr("Anrede")
|
text: qsTr("Anrede")
|
||||||
@@ -15,7 +30,7 @@ GridLayout
|
|||||||
ComboBox
|
ComboBox
|
||||||
{
|
{
|
||||||
id: title
|
id: title
|
||||||
model: [qsTr("Herr"),qsTr("Frau")]
|
model: [qsTr("Herr"), qsTr("Frau"), qsTr("keine Angabe")]
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
@@ -29,6 +44,7 @@ GridLayout
|
|||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
placeholderText: "Pflichtfeld"
|
||||||
placeholderTextColor: "red"
|
placeholderTextColor: "red"
|
||||||
|
// onTextChanged: checkContactFields()
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
@@ -51,9 +67,26 @@ GridLayout
|
|||||||
{
|
{
|
||||||
id: phonenumber
|
id: phonenumber
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
placeholderText: "Pflichtfeld"
|
placeholderText: mobile.text ? "" : "Pflichtfeld"
|
||||||
placeholderTextColor: "red"
|
placeholderTextColor: "red"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
Label
|
||||||
|
{
|
||||||
|
text: qsTr("Mobil")
|
||||||
|
Layout.alignment: Qt.AlignRight
|
||||||
|
}
|
||||||
|
TextField
|
||||||
|
{
|
||||||
|
id: mobile
|
||||||
|
Layout.fillWidth: true
|
||||||
|
placeholderText: phonenumber.text ? "" : "Pflichtfeld"
|
||||||
|
placeholderTextColor: "red"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Label
|
Label
|
||||||
{
|
{
|
||||||
@@ -82,32 +115,59 @@ GridLayout
|
|||||||
{
|
{
|
||||||
id: removeContact
|
id: removeContact
|
||||||
text: qsTr("Entfernen")
|
text: qsTr("Entfernen")
|
||||||
|
enabled: false
|
||||||
|
onClicked:
|
||||||
|
{
|
||||||
|
|
||||||
|
if (contactView.highlightFollowsCurrentItem)
|
||||||
|
{
|
||||||
|
delete contacts[contactView.currentIndex]
|
||||||
|
contacts = contacts.filter(elm => elm)
|
||||||
|
contactModel.remove(contactView.currentIndex)
|
||||||
|
contactView.highlightFollowsCurrentItem = false
|
||||||
|
contactView.currentIndex = -1
|
||||||
|
if (Object.keys(contacts).length === 0)
|
||||||
|
{
|
||||||
|
enabled = false
|
||||||
|
console.log(contacts)
|
||||||
|
}
|
||||||
|
checkFields()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
id: addContact
|
id: addContact
|
||||||
text: qsTr("Hinzufügen")
|
text: qsTr("Hinzufügen")
|
||||||
|
enabled: firstname.text.trim() && lastname.text.trim() && (phonenumber.text.trim() || mobile.text.trim()) && posizion.text.trim() && (contacts === null || Object.keys(contacts).length < 3)
|
||||||
onClicked:
|
onClicked:
|
||||||
{
|
{
|
||||||
var num_contacts = 0
|
var num_contacts = 0
|
||||||
if (contacts !== null && contacts !== undefined) num_contacts = Object.keys(contacts).length
|
if (contacts !== null && contacts !== undefined) num_contacts = Object.keys(contacts).length
|
||||||
else contacts = {}
|
else contacts = []
|
||||||
if (num_contacts < 3 && firstname.text.trim() !== "" && lastname.text.trim() !== "" && phonenumber.text.trim() !== "" && posizion.text.trim() !== "")
|
if (num_contacts < 3 && firstname.text.trim() !== "" && lastname.text.trim() !== "" && (phonenumber.text.trim() !== "" || mobile.text.trim() !== "") && posizion.text.trim() !== "")
|
||||||
{
|
{
|
||||||
contacts[num_contacts] = {}
|
contacts[num_contacts] = {}
|
||||||
contacts[num_contacts]["title"] = title.currentText
|
contacts[num_contacts]["title"] = title.currentText
|
||||||
contacts[num_contacts]["fname"] = firstname.text.trim()
|
contacts[num_contacts]["fname"] = firstname.text.trim()
|
||||||
contacts[num_contacts]["lname"] = lastname.text.trim()
|
contacts[num_contacts]["lname"] = lastname.text.trim()
|
||||||
contacts[num_contacts]["phone"] = phonenumber.text.trim()
|
contacts[num_contacts]["phone"] = phonenumber.text.trim()
|
||||||
|
contacts[num_contacts]["mobile"] = mobile.text.trim()
|
||||||
contacts[num_contacts]["position"] = posizion.text.trim()
|
contacts[num_contacts]["position"] = posizion.text.trim()
|
||||||
|
contactModel.append({name: title.currentText + " " + firstname.text.trim() + " " + lastname.text.trim(), phone: phonenumber.text.trim(), mobile: mobile.text.trim(), posizion: posizion.text.trim()})
|
||||||
contactModel.append({name: title.currentText + " " + firstname.text.trim() + " " + lastname.text.trim(), phone: phonenumber.text.trim(), posizion: posizion.text.trim()})
|
if (checkFields())
|
||||||
|
{
|
||||||
|
saveBtn.enabled = true
|
||||||
|
}
|
||||||
firstname.text = ""
|
firstname.text = ""
|
||||||
lastname.text = ""
|
lastname.text = ""
|
||||||
phonenumber.text = ""
|
phonenumber.text = ""
|
||||||
|
mobile.text = ""
|
||||||
posizion.text = ""
|
posizion.text = ""
|
||||||
|
|
||||||
|
removeContact.enabled = true
|
||||||
|
checkFields()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -136,7 +196,7 @@ GridLayout
|
|||||||
width: 175
|
width: 175
|
||||||
font.bold: true
|
font.bold: true
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "black"
|
color: "white"
|
||||||
}
|
}
|
||||||
|
|
||||||
Text
|
Text
|
||||||
@@ -146,7 +206,17 @@ GridLayout
|
|||||||
width: 100
|
width: 100
|
||||||
font.bold: true
|
font.bold: true
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "black"
|
color: "white"
|
||||||
|
}
|
||||||
|
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
id: cpmobile
|
||||||
|
text: qsTr("Mobil")
|
||||||
|
width: 100
|
||||||
|
font.bold: true
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
color: "white"
|
||||||
}
|
}
|
||||||
|
|
||||||
Text
|
Text
|
||||||
@@ -156,7 +226,7 @@ GridLayout
|
|||||||
width: 150
|
width: 150
|
||||||
font.bold: true
|
font.bold: true
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
color: "black"
|
color: "white"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -182,30 +252,35 @@ GridLayout
|
|||||||
|
|
||||||
Rectangle
|
Rectangle
|
||||||
{
|
{
|
||||||
|
id: mainRect
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: 100
|
implicitHeight: 100
|
||||||
color: firstname.palette.base
|
color: firstname.palette.base
|
||||||
border.color: firstname.activeFocus? firstname.palette.highlight: firstname.palette.base
|
border.color: firstname.activeFocus? firstname.palette.highlight: firstname.palette.base
|
||||||
|
|
||||||
ListView
|
ListView
|
||||||
{
|
{
|
||||||
id: contactView
|
id: contactView
|
||||||
implicitHeight: 500
|
implicitHeight: parent.height
|
||||||
implicitWidth: parent.width
|
implicitWidth: parent.width
|
||||||
model: contactModel
|
model: contactModel
|
||||||
|
|
||||||
|
|
||||||
header: headline
|
header: headline
|
||||||
|
highlight: Rectangle { color: "grey"}
|
||||||
highlight: highlight
|
highlightFollowsCurrentItem: false
|
||||||
|
onActiveFocusChanged: if(!focus) currentIndex = -1
|
||||||
highlightFollowsCurrentItem: true
|
|
||||||
focus: true
|
|
||||||
|
|
||||||
delegate: Item
|
delegate: Item
|
||||||
{
|
{
|
||||||
//width: parent.width
|
|
||||||
width: contactView.width
|
width: contactView.width
|
||||||
height: 15
|
height: 15
|
||||||
|
MouseArea
|
||||||
|
{
|
||||||
|
anchors.fill: parent
|
||||||
|
onClicked:
|
||||||
|
{
|
||||||
|
contactView.currentIndex = index
|
||||||
|
contactView.highlightFollowsCurrentItem = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MouseArea
|
MouseArea
|
||||||
{
|
{
|
||||||
@@ -227,18 +302,28 @@ GridLayout
|
|||||||
text: model.name
|
text: model.name
|
||||||
width: 175
|
width: 175
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
color: "white"
|
||||||
}
|
}
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: model.phone
|
text: model.phone
|
||||||
width: 100
|
width: 100
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
color: "white"
|
||||||
|
}
|
||||||
|
Text
|
||||||
|
{
|
||||||
|
text: model.mobile
|
||||||
|
width: 100
|
||||||
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
color: "white"
|
||||||
}
|
}
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: model.posizion
|
text: model.posizion
|
||||||
width: 150
|
width: 150
|
||||||
horizontalAlignment: Text.AlignLeft
|
horizontalAlignment: Text.AlignLeft
|
||||||
|
color: "white"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
import QtQuick
|
import QtQuick
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
|
import "../js/qmldict.js" as JsLib
|
||||||
|
|
||||||
Frame
|
Frame
|
||||||
{
|
{
|
||||||
|
property alias contactPerson: oaocontactperson
|
||||||
Layout.alignment: Qt.AlignTop
|
Layout.alignment: Qt.AlignTop
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
ColumnLayout
|
ColumnLayout
|
||||||
@@ -19,4 +21,8 @@ Frame
|
|||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function getForm()
|
||||||
|
{
|
||||||
|
return oaocontactperson.contacts
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,13 +15,13 @@ Item
|
|||||||
|
|
||||||
Button
|
Button
|
||||||
{
|
{
|
||||||
text: qsTr("Objekts zeigen")
|
text: qsTr("Zurück zu den Objekten")
|
||||||
onClicked: customersStack.pop()
|
onClicked: objectsStack.pop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted:
|
Component.onCompleted:
|
||||||
{
|
{
|
||||||
business_model.onRowClicked(selectedObject)
|
object_model.onRowClicked(selectedObject)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ Item
|
|||||||
id: horizontalHeaderview
|
id: horizontalHeaderview
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
implicitHeight: 40
|
implicitHeight: 40
|
||||||
visible: false
|
//visible: false
|
||||||
movableColumns: true //@disable-check M16
|
movableColumns: true //@disable-check M16
|
||||||
syncView: objectTable
|
syncView: objectTable
|
||||||
|
|
||||||
@@ -68,36 +68,22 @@ Item
|
|||||||
id: objectTable
|
id: objectTable
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
columnSpacing: 1
|
||||||
|
rowSpacing: 2
|
||||||
|
model: object_model
|
||||||
|
alternatingRows: true
|
||||||
|
resizableColumns: true // @disable-check M16
|
||||||
|
selectionBehavior: TableView.SelectRows
|
||||||
ScrollBar.vertical: ScrollBar
|
ScrollBar.vertical: ScrollBar
|
||||||
{
|
{
|
||||||
policy: objectTable.contentHeight > objectTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
|
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
|
selectionModel: ItemSelectionModel
|
||||||
{
|
{
|
||||||
id: obmodel
|
id: obmodel
|
||||||
model: objectTable.model
|
model: objectTable.model
|
||||||
}
|
}
|
||||||
|
|
||||||
// Timer
|
|
||||||
// {
|
|
||||||
// id: redrawTable
|
|
||||||
// running: true
|
|
||||||
// interval: 1
|
|
||||||
// repeat: false
|
|
||||||
// onTriggered:
|
|
||||||
// {
|
|
||||||
// objectTable.forceLayout();
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
delegate:Rectangle
|
delegate:Rectangle
|
||||||
{
|
{
|
||||||
required property bool selected
|
required property bool selected
|
||||||
@@ -112,7 +98,7 @@ Item
|
|||||||
|
|
||||||
Text
|
Text
|
||||||
{
|
{
|
||||||
text: model.display === null? "": model.display
|
text: (model.display === null || model.display === undefined)? "": model.display
|
||||||
elide: Text.ElideRight
|
elide: Text.ElideRight
|
||||||
width: parent.width
|
width: parent.width
|
||||||
height: parent.height
|
height: parent.height
|
||||||
|
|||||||
22194
doc/db_schemer_v1.1-pyqcrm-202502191145.sql
Normal file
22194
doc/db_schemer_v1.1-pyqcrm-202502191145.sql
Normal file
File diff suppressed because it is too large
Load Diff
@@ -50,6 +50,19 @@ function parseForm(...form)
|
|||||||
{
|
{
|
||||||
data_form[form[i].children[j].name] = form[i].children[j].checked
|
data_form[form[i].children[j].name] = form[i].children[j].checked
|
||||||
}
|
}
|
||||||
|
else if (form[i].children[j].toString().startsWith("SpinBox"))
|
||||||
|
{
|
||||||
|
data_form[form[i].children[j].name] = form[i].children[j].value
|
||||||
|
}
|
||||||
|
// else if (form[i].children[j].toString().startsWith("QQuickContentItem"))
|
||||||
|
// {
|
||||||
|
// console.log(form[i].children[j].children.children)
|
||||||
|
|
||||||
|
// for (var k = 0; k < form[i].children[j].length; k++)
|
||||||
|
// {
|
||||||
|
// console.log(form[i].children[j].name)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return data_form
|
return data_form
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from ..PyqcrmFlags import PyqcrmAppliEmpyFlags
|
|||||||
|
|
||||||
|
|
||||||
class EmployeeDAO(QObject):
|
class EmployeeDAO(QObject):
|
||||||
newEmployeeAdded = Signal()
|
newEmployeeAdded = Signal(bool)
|
||||||
|
|
||||||
__cur = None
|
__cur = None
|
||||||
__all_cols = None
|
__all_cols = None
|
||||||
@@ -44,7 +44,8 @@ class EmployeeDAO(QObject):
|
|||||||
if self.__cur:
|
if self.__cur:
|
||||||
self.__cur.callproc("addApplicant", (json.dumps(data), applicant, enc_key,))
|
self.__cur.callproc("addApplicant", (json.dumps(data), applicant, enc_key,))
|
||||||
self.__con.commit()
|
self.__con.commit()
|
||||||
self.newEmployeeAdded.emit()
|
self.newEmployeeAdded.emit(True)
|
||||||
|
|
||||||
except mariadb.Error as e:
|
except mariadb.Error as e:
|
||||||
print(str(e))
|
print(str(e))
|
||||||
|
self.newEmployeeAdded.emit(False)
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ from PySide6.QtCore import QAbstractTableModel, QModelIndex, Qt, Slot, Signal
|
|||||||
from .EmployeeDAO import EmployeeDAO
|
from .EmployeeDAO import EmployeeDAO
|
||||||
from ..PyqcrmFlags import PyqcrmFlags, PyqcrmAppliEmpyFlags
|
from ..PyqcrmFlags import PyqcrmFlags, PyqcrmAppliEmpyFlags
|
||||||
from ..ConfigLoader import ConfigLoader
|
from ..ConfigLoader import ConfigLoader
|
||||||
|
import re
|
||||||
|
|
||||||
|
|
||||||
class EmployeeModel(QAbstractTableModel):
|
class EmployeeModel(QAbstractTableModel):
|
||||||
|
addedNewEmployee = Signal(bool)
|
||||||
__data = None
|
__data = None
|
||||||
__employee_dao = None
|
__employee_dao = None
|
||||||
__visible_index = None
|
__visible_index = None
|
||||||
@@ -20,10 +22,12 @@ class EmployeeModel(QAbstractTableModel):
|
|||||||
self.__employee_dao.newEmployeeAdded.connect(self.__refreshView)
|
self.__employee_dao.newEmployeeAdded.connect(self.__refreshView)
|
||||||
self.__conf = ConfigLoader().getConfig()
|
self.__conf = ConfigLoader().getConfig()
|
||||||
self.__key = self.__conf['pyqcrm']['ENCRYPTION_KEY']
|
self.__key = self.__conf['pyqcrm']['ENCRYPTION_KEY']
|
||||||
|
print(self.__key)
|
||||||
self.__getData()
|
self.__getData()
|
||||||
|
|
||||||
@Slot(dict, bool)
|
@Slot(dict, bool)
|
||||||
def addEmployee(self, new_employee, applicant = True):
|
def addEmployee(self, new_employee, applicant = True):
|
||||||
|
if 'worklicense' in new_employee:
|
||||||
new_employee['worklicense'] = int(new_employee['worklicense'])
|
new_employee['worklicense'] = int(new_employee['worklicense'])
|
||||||
new_employee['residencetype'] = int(new_employee['residencetype'])
|
new_employee['residencetype'] = int(new_employee['residencetype'])
|
||||||
self.__employee_dao.addEmployee(new_employee, self.__key, applicant)
|
self.__employee_dao.addEmployee(new_employee, self.__key, applicant)
|
||||||
@@ -32,9 +36,11 @@ class EmployeeModel(QAbstractTableModel):
|
|||||||
def viewCriterion(self, criterion, processed = False, fired = False):
|
def viewCriterion(self, criterion, processed = False, fired = False):
|
||||||
self.__getData(criterion, processed, fired)
|
self.__getData(criterion, processed, fired)
|
||||||
|
|
||||||
@Slot()
|
@Slot(bool)
|
||||||
def __refreshView(self):
|
def __refreshView(self, added):
|
||||||
|
if added:
|
||||||
self.__getData()
|
self.__getData()
|
||||||
|
self.addedNewEmployee.emit(added)
|
||||||
|
|
||||||
def __getData(self, criterion = "Alle", processed = False, fired = False, every_state = True):
|
def __getData(self, criterion = "Alle", processed = False, fired = False, every_state = True):
|
||||||
self.beginResetModel()
|
self.beginResetModel()
|
||||||
@@ -64,6 +70,8 @@ class EmployeeModel(QAbstractTableModel):
|
|||||||
tr = row[applicant_col] #if type(row[index.column() + 2]) is str else str(row[index.column() + 2], "utf-8")
|
tr = row[applicant_col] #if type(row[index.column() + 2]) is str else str(row[index.column() + 2], "utf-8")
|
||||||
if applicant_col == 2 and self.__everyone:
|
if applicant_col == 2 and self.__everyone:
|
||||||
tr = 'Ja' if tr == 1 else 'Nein'
|
tr = 'Ja' if tr == 1 else 'Nein'
|
||||||
|
else:
|
||||||
|
tr = re.sub("Keine Angabe ","", tr)
|
||||||
#print(f"Data: {tr}")
|
#print(f"Data: {tr}")
|
||||||
# return row[index.column() + 2]
|
# return row[index.column() + 2]
|
||||||
return tr
|
return tr
|
||||||
|
|||||||
37
lib/DB/ObjectDAO.py
Normal file
37
lib/DB/ObjectDAO.py
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
from .DbManager import DbManager
|
||||||
|
import json
|
||||||
|
import mariadb
|
||||||
|
from PySide6.QtCore import QObject, Signal
|
||||||
|
from ..PyqcrmFlags import PyqcrmAppliEmpyFlags
|
||||||
|
|
||||||
|
|
||||||
|
class ObjectDAO(QObject):
|
||||||
|
newObjectAdded = Signal(bool)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
#print(f"*** File: {__file__}, __init__()")
|
||||||
|
self.__con = DbManager().getConnection()
|
||||||
|
if self.__con:
|
||||||
|
self.__cur = self.__con.cursor()
|
||||||
|
|
||||||
|
def addObject(self, new_object, new_objcontact, enc_key):
|
||||||
|
try:
|
||||||
|
if self.__cur:
|
||||||
|
self.__cur.callproc("addObject", (json.dumps(new_object), json.dumps(new_objcontact), enc_key,))
|
||||||
|
self.__con.commit()
|
||||||
|
self.newObjectAdded.emit(True)
|
||||||
|
except mariadb.Error as e:
|
||||||
|
self.newObjectAdded.emit(False)
|
||||||
|
print(str(e))
|
||||||
|
|
||||||
|
def getObjects(self, criterion, enc_key = None):
|
||||||
|
try:
|
||||||
|
if self.__cur:
|
||||||
|
self.__cur.callproc("getObjects", (criterion, enc_key,))
|
||||||
|
self.__all_cols = [desc[0] for desc in self.__cur.description]
|
||||||
|
return self.__cur.fetchall(), self.__all_cols
|
||||||
|
else:
|
||||||
|
return None, None
|
||||||
|
except mariadb.Error as e:
|
||||||
|
print(str(e))
|
||||||
87
lib/DB/ObjectModel.py
Normal file
87
lib/DB/ObjectModel.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
from PySide6.QtCore import QAbstractTableModel, QModelIndex, Qt, Slot, Signal
|
||||||
|
from .ObjectDAO import ObjectDAO
|
||||||
|
from ..PyqcrmFlags import PyqcrmFlags, PyqcrmAppliEmpyFlags
|
||||||
|
from ..ConfigLoader import ConfigLoader
|
||||||
|
import re
|
||||||
|
import json
|
||||||
|
|
||||||
|
class ObjectModel(QAbstractTableModel):
|
||||||
|
objectAdded = Signal(bool)
|
||||||
|
|
||||||
|
__data = None
|
||||||
|
__object_dao = None
|
||||||
|
__visible_index = None
|
||||||
|
__visible_columns = None
|
||||||
|
__col_name = ""
|
||||||
|
__employee_dao = None
|
||||||
|
__col_skip = 2
|
||||||
|
__everyone = True
|
||||||
|
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.__object_dao = ObjectDAO()
|
||||||
|
self.__object_dao.newObjectAdded.connect(self.__refreshView)
|
||||||
|
self.__conf = ConfigLoader().getConfig()
|
||||||
|
self.__key = self.__conf['pyqcrm']['ENCRYPTION_KEY']
|
||||||
|
self.__object_dao.newObjectAdded.connect(self.objectAdded)
|
||||||
|
self.__getData()
|
||||||
|
|
||||||
|
@Slot(dict, list, bool)
|
||||||
|
def addObject(self, new_object, new_objcontact = None, new_contact = False):
|
||||||
|
print(new_object)
|
||||||
|
|
||||||
|
print(new_objcontact)
|
||||||
|
|
||||||
|
self.__object_dao.addObject(new_object, new_objcontact, self.__key)
|
||||||
|
|
||||||
|
# @Slot(str)
|
||||||
|
# def viewCriterion(self, criterion, processed = False, fired = False):
|
||||||
|
# self.__getData(criterion, processed, fired)
|
||||||
|
|
||||||
|
@Slot()
|
||||||
|
def __refreshView(self):
|
||||||
|
self.__getData()
|
||||||
|
|
||||||
|
def __getData(self, criterion = "Alle"):
|
||||||
|
self.beginResetModel()
|
||||||
|
rows, self.__visible_columns = self.__object_dao.getObjects(criterion, self.__key)
|
||||||
|
self.__data = rows
|
||||||
|
self.endResetModel()
|
||||||
|
|
||||||
|
def rowCount(self, parent= QModelIndex()):
|
||||||
|
return len (self.__data)
|
||||||
|
|
||||||
|
def columnCount(self, parent= QModelIndex()):
|
||||||
|
return len(self.__visible_columns) - self.__col_skip
|
||||||
|
|
||||||
|
@Slot(str)
|
||||||
|
def viewCriterion(self, criterion):
|
||||||
|
self.__getData(criterion)
|
||||||
|
|
||||||
|
def data(self, index, role= Qt.DisplayRole):
|
||||||
|
if role == Qt.DisplayRole:
|
||||||
|
row = self.__data[index.row()]
|
||||||
|
applicant_col = index.column() + self.__col_skip
|
||||||
|
tr = row[applicant_col] #if type(row[index.column() + 2]) is str else str(row[index.column() + 2], "utf-8")
|
||||||
|
#print(f"Data: {tr}")
|
||||||
|
# return row[index.column() + 2]
|
||||||
|
return tr
|
||||||
|
return None
|
||||||
|
|
||||||
|
def headerData(self, section, orientation, role = Qt.DisplayRole):
|
||||||
|
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
|
||||||
|
self.__col_name = self.__visible_columns[section + self.__col_skip]
|
||||||
|
return self.__col_name
|
||||||
|
return super().headerData(section, orientation, role)
|
||||||
|
|
||||||
|
@Slot(int)
|
||||||
|
def onRowClicked(self, row):
|
||||||
|
#print(self.__data)
|
||||||
|
print(f"Selected table row: {row}, corresponding DB ID: {self.__data[row][0]}")
|
||||||
|
#if not self.__employee_dict['employee'] or self.__data[row][0] != self.__employee_dict['employee']['id']:
|
||||||
|
#self.__employee = self.__employee_dao.getEmployee(self.__data[row][0], self.__key)
|
||||||
|
#print(self.__business)
|
||||||
|
#self.__getEmployeeInfo()
|
||||||
|
# self.__getContactInfo()
|
||||||
|
# print(self.__business_dict)
|
||||||
10
main.py
10
main.py
@@ -15,6 +15,7 @@ from lib.DB.AddressModel import AddressModel
|
|||||||
from lib.DB.BTypeModel import BTypeModel
|
from lib.DB.BTypeModel import BTypeModel
|
||||||
from lib.DB.ContactModel import ContactModel
|
from lib.DB.ContactModel import ContactModel
|
||||||
from lib.DB.EmployeeModel import EmployeeModel
|
from lib.DB.EmployeeModel import EmployeeModel
|
||||||
|
from lib.DB.ObjectModel import ObjectModel
|
||||||
from lib.Printers import Printers
|
from lib.Printers import Printers
|
||||||
|
|
||||||
|
|
||||||
@@ -39,12 +40,13 @@ business_model = None
|
|||||||
business_type = None
|
business_type = None
|
||||||
contact_model = None
|
contact_model = None
|
||||||
employee_model = None
|
employee_model = None
|
||||||
|
object_model = None
|
||||||
printers = None
|
printers = None
|
||||||
user = None
|
user = None
|
||||||
|
|
||||||
def initializeProgram():
|
def initializeProgram():
|
||||||
#print(f"In {__file__} file, initializeProgram()")
|
#print(f"In {__file__} file, initializeProgram()")
|
||||||
global address_model, bad_config, business_model, user, business_type, contact_model, employee_model, db_con, printers
|
global address_model, bad_config, business_model, user, business_type, contact_model, employee_model, object_model, db_con, printers
|
||||||
if not bad_config:
|
if not bad_config:
|
||||||
dbconf = config.getConfig()['database']
|
dbconf = config.getConfig()['database']
|
||||||
DbManager(dbconf)
|
DbManager(dbconf)
|
||||||
@@ -57,19 +59,21 @@ def initializeProgram():
|
|||||||
business_type = BTypeModel()
|
business_type = BTypeModel()
|
||||||
contact_model = ContactModel()
|
contact_model = ContactModel()
|
||||||
employee_model = EmployeeModel()
|
employee_model = EmployeeModel()
|
||||||
|
object_model = ObjectModel()
|
||||||
publishContext()
|
publishContext()
|
||||||
|
|
||||||
bad_config = False
|
bad_config = False
|
||||||
|
|
||||||
def publishContext():
|
def publishContext():
|
||||||
# print(f"In {__file__} file, publishContext()")
|
# print(f"In {__file__} file, publishContext()")
|
||||||
global engine, address_model, bad_config, business_model, user, business_type, contact_model, employee_model, printers
|
global engine, address_model, bad_config, business_model, user, business_type, contact_model, object_model, employee_model, printers
|
||||||
engine.rootContext().setContextProperty("loggedin_user", user)
|
engine.rootContext().setContextProperty("loggedin_user", user)
|
||||||
engine.rootContext().setContextProperty("business_model", business_model)
|
engine.rootContext().setContextProperty("business_model", business_model)
|
||||||
engine.rootContext().setContextProperty("address_model", address_model)
|
engine.rootContext().setContextProperty("address_model", address_model)
|
||||||
engine.rootContext().setContextProperty("business_type", business_type)
|
engine.rootContext().setContextProperty("business_type", business_type)
|
||||||
engine.rootContext().setContextProperty("contact_model", contact_model)
|
engine.rootContext().setContextProperty("contact_model", contact_model)
|
||||||
engine.rootContext().setContextProperty("employee_model", employee_model)
|
engine.rootContext().setContextProperty("employee_model", employee_model)
|
||||||
|
engine.rootContext().setContextProperty("object_model", object_model)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
#QResource.registerResource("rc_qml.py")
|
#QResource.registerResource("rc_qml.py")
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
"lib/DB/EmployeeModel.py",
|
"lib/DB/EmployeeModel.py",
|
||||||
"lib/DB/EmployeeDAO.py",
|
"lib/DB/EmployeeDAO.py",
|
||||||
"lib/Printers.py",
|
"lib/Printers.py",
|
||||||
"lib/PyqcrmPDF.py"
|
"lib/PyqcrmPDF.py",
|
||||||
|
"lib/DB/ObjectDAO.py",
|
||||||
|
"lib/DB/ObjectModel.py"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user