Compare commits

..

11 Commits

Author SHA256 Message Date
00e535bb13 Added Houseno inte ApplicantPersonalData 2025-01-23 15:57:02 +01:00
103b172a60 update datenbank.drawio 2025-01-22 16:53:57 +01:00
c2edfab9a2 Added importCountry 2025-01-22 16:52:49 +01:00
180f8e5ae9 Merge branch 'schnacke'
ADDCity
2025-01-21 17:04:14 +01:00
dab3df3b14 AddLocation 2025-01-21 17:04:02 +01:00
75dc64b4f3 AddLocation 2025-01-21 17:00:39 +01:00
afad232068 Corrected references in QML frames 2025-01-20 17:28:34 +01:00
d870736dab Knappschaft weg 2025-01-20 13:08:39 +01:00
fc197246a6 Some GUI modification and DB documentation template 2025-01-20 08:31:25 +01:00
705bffc8d3 New employee to object as combobox 2025-01-17 11:06:07 +01:00
e94a9f9900 GUI in frames and other applicant-related stuff 2025-01-16 11:17:57 +01:00
35 changed files with 38387 additions and 1316 deletions

View File

@@ -2,8 +2,16 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
ColumnLayout // ScrollView
{ // {
// anchors.fill: parent
// ScrollBar.vertical: ScrollBar
// {
// policy: ScrollBar.AlwaysOn
// }
ColumnLayout
{
id: colPar
anchors.fill: parent anchors.fill: parent
Label Label
{ {
@@ -13,65 +21,153 @@ ColumnLayout
font.pixelSize: 35 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")
}
}
RowLayout RowLayout
{ {
Layout.fillWidth: true
spacing: 50
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true Layout.fillWidth: true
ApplicantPersonalData ApplicantPersonalData
{ {
id: personalData id: personalData
width: parent.width
} }
}
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
visible: radio.children[1].checked
ColumnLayout ColumnLayout
{ {
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
width: parent.width
// CheckBox
// {
// id: checkcontactdata
// Layout.fillWidth: true
// text: qsTr("Kontaktdaten")
// checked: false
// }
// ApplicantContactData
// {
// visible: checkcontactdata.checked
// }
CheckBox CheckBox
{ {
id: checkcontactdata id: miniJobber
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr("Kontaktdaten") text: qsTr("Minijob")
checked: false checked: false
onCheckStateChanged:
{
contactData.visible = checked
}
}
ApplicantContactData
{
id: contactData
visible: false
}
CheckBox
{
id: checkbankdata
Layout.fillWidth: true
text: qsTr("Bankdaten")
checked: false
onCheckStateChanged:
{
bankData.visible = checked
}
} }
ApplicantBankData ApplicantBankData
{ {
id: bankData id: bankAccount
visible: false
} }
ApplicantNationality
ApplicantNationalInsurance
{ {
id: nationalInsurance
}
ApplicantVarious
{
// Layout.margins:
// {
// top: 30
// }
}
}
}
} }
RowLayout
{
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
Button
{
text: qsTr("Abbrechen")
onClicked: appLoader.source = "EmployeeTable.qml"
}
Button
{
id: saveBtn
text: qsTr("Speichern")
enabled: false
// onClicked:
// {
// if (!checkAddContact.checked)
// {
// new_business = JsLib.addBusiness(customerView)
// business_model.addBusiness(new_business, 0)
// appLoader.source = "EmployeeTable.qml"
// }
// else
// {
// new_business = JsLib.addBusiness(customerView)
// var new_contact = JsLib.addBusiness(addContactLayout)
// contact_model.addContact(new_contact)
// }
// }
} }
} }
Item Item
{ {
Layout.fillHeight: true Layout.fillHeight: true
} }
} function checkFields()
{
if(radio.children[1].checked)
{
if(!personalData.checkPersonalField() || !bankAccount.checkBankField() )
saveBtn.enabled = false
else
saveBtn.enabled = true
}
else if (!personalData.checkPersonalField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
}
//}

View File

@@ -2,15 +2,21 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
GridLayout Frame
{ {
id: addContactLayout id: addContactFrame
Layout.fillWidth: true property alias contactGrid: addContactLayout
Layout.fillHeight: true
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
GridLayout
{
id: addContactLayout
anchors.fill: parent
// Layout.fillWidth: true
// Layout.fillHeight: true
// Layout.alignment: Qt.AlignTop
columns: 2 columns: 2
rowSpacing: 9 rowSpacing: 9
visible: false
property alias fname: firstname property alias fname: firstname
property alias lname: lastname property alias lname: lastname
@@ -99,7 +105,7 @@ GridLayout
Label Label
{ {
text: qsTr("Handy") text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
TextField TextField
@@ -182,6 +188,7 @@ GridLayout
editable: false editable: false
model: ["Nein", "Ja"] model: ["Nein", "Ja"]
} }
}
function checkContactField() function checkContactField()
{ {

View File

@@ -26,7 +26,6 @@ ColumnLayout
checked: false checked: false
onCheckStateChanged: onCheckStateChanged:
{ {
addContactLayout.visible = checked
checkFields() checkFields()
} }
} }
@@ -37,15 +36,21 @@ ColumnLayout
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
spacing: 45 spacing: 45
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
CustomerView CustomerView
{ {
id: customerView id: customerView
width: parent.width
}
} }
AddContact AddContact
{ {
id: addContactLayout id: addContactFrame
visible: checkAddContact.checked
} }
} }
RowLayout RowLayout
@@ -73,7 +78,7 @@ ColumnLayout
else else
{ {
new_business = JsLib.addBusiness(customerView) new_business = JsLib.addBusiness(customerView)
var new_contact = JsLib.addBusiness(addContactLayout) var new_contact = JsLib.addBusiness(addContactFrame.contactGrid)
contact_model.addContact(new_contact) contact_model.addContact(new_contact)
} }
} }
@@ -103,7 +108,7 @@ ColumnLayout
{ {
if(checkAddContact.checked) if(checkAddContact.checked)
{ {
if(!customerView.checkBusinessField() || !addContactLayout.checkContactField()) if(!customerView.checkBusinessField() || !addContactFrame.checkContactField())
saveBtn.enabled = false saveBtn.enabled = false
else else
saveBtn.enabled = true saveBtn.enabled = true

View File

@@ -26,7 +26,6 @@ ColumnLayout
checked: false checked: false
onCheckStateChanged: onCheckStateChanged:
{ {
addObjectLayout.visible = checked
//checkFields() //checkFields()
} }
} }
@@ -38,14 +37,21 @@ ColumnLayout
Layout.fillHeight: true Layout.fillHeight: true
spacing: 45 spacing: 45
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
ObjectView ObjectView
{ {
id: objectView id: objectView
width: parent.width
}
} }
ObjectAddOns ObjectAddOns
{ {
id: addObjectLayout id: addObjectLayout
visible: checkAddObject.checked
} }
} }
RowLayout RowLayout

View File

@@ -29,7 +29,7 @@ ApplicationWindow
text: qsTr("Eingesetzter Mitarbeiter") text: qsTr("Eingesetzter Mitarbeiter")
Layout.alignment: Qt.AlignRight Layout.alignment: Qt.AlignRight
} }
TextField ComboBox
{ {
id: assignee id: assignee
Layout.fillWidth: true Layout.fillWidth: true
@@ -103,10 +103,10 @@ ApplicationWindow
text: qsTr("Hinzufügen") text: qsTr("Hinzufügen")
onClicked: onClicked:
{ {
if (assignee.text.trim() !== "" && duration.text.trim() !== "" && wage.text.trim() !== "" && cleanDays.text.trim() !== "" && tasks.text.trim() !== "" && output.text.trim() !== "") if (duration.text.trim() !== "" && wage.text.trim() !== "" && cleanDays.text.trim() !== "" && tasks.text.trim() !== "" && output.text.trim() !== "")
{ {
var ne = { var ne = {
"assignee": assignee.text.trim(), "assignee": assignee.currentText,
"duration": duration.text.trim(), "duration": duration.text.trim(),
"wage": wage.text.trim(), "wage": wage.text.trim(),
"cleandays": cleanDays.text.trim(), "cleandays": cleanDays.text.trim(),

View File

@@ -4,6 +4,7 @@ import QtQuick.Layouts
GridLayout GridLayout
{ {
id: bankAccount
columns: 2 columns: 2
Label Label
{ {
@@ -14,6 +15,8 @@ GridLayout
{ {
id: iban id: iban
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
Label Label
{ {
@@ -25,5 +28,13 @@ GridLayout
{ {
id: bankname id: bankname
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
} }
function checkBankField()
{
return (iban.text.trim() && bankname.text.trim())
}
} }

View File

@@ -0,0 +1,52 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Label
{
text: qsTr("Geburtsname")
}
TextField
{
id: birthname
Layout.fillWidth: true
}
Label
{
text: qsTr("Geburtsdatum")
}
TextField
{
id: birthday
Layout.fillWidth: true
placeholderText: qsTr("TT.MM.JJJJ")
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}))/
}
}
Label
{
text: qsTr("Geburtsort")
}
TextField
{
id: placeofbirth
Layout.fillWidth: true
}
Label
{
text: qsTr("Geschlecht")
}
ComboBox
{
id: gender
Layout.fillWidth: true
editable: false
model: [qsTr("Mann"), qsTr("Frau"), qsTr("Divers")]
}

View File

@@ -23,9 +23,6 @@ GridLayout
} }
RowLayout RowLayout
{ {
ComboBox ComboBox
{ {
id: postcode id: postcode

19
Gui/ApplicantMiniJob.qml Normal file
View File

@@ -0,0 +1,19 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
columns: 2
Label
{
text: qsTr("Knappschaft")
}
TextField
{
id: knappschaft
Layout.fillWidth: true
}
}

View File

@@ -0,0 +1,131 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
id: nationalInsurance
columns: 2
Label
{
text: qsTr("Staatsangehörigkeit Deutsch")
}
ButtonGroup
{
buttons: radio.children
onClicked:
{
checkFields()
personalData.requiredField()
}
}
Row
{
id: radio
Layout.fillWidth: true
Layout.alignment: Qt.AlignLeft
RadioButton
{
text: qsTr("Ja")
checked: true
}
RadioButton
{
text: qsTr("Nein")
}
}
Label
{
text: qsTr("Sozialversicherungs-Nr")
}
TextField
{
id: socialnumber
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
}
Label
{
text: qsTr("Steuer-ID")
}
TextField
{
id: taxnumber
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
}
Label
{
text: qsTr("Krankenkasse")
}
TextField
{
id: medicalinsurance
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
}
CheckBox
{
Layout.columnSpan: 2
text: qsTr("Arbeitserlaubnis")
visible: radio.children[1].checked
}
Label
{
text: qsTr("Staatsangehörigkeit")
visible: radio.children[1].checked
}
TextField
{
id: nationality
visible: radio.children[1].checked
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
}
Label
{
text: qsTr("Pass gültig bis")
visible: radio.children[1].checked
}
TextField
{
id: pass
visible: radio.children[1].checked
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
}
Label
{
text: qsTr("Aufenthaltstitel gültig bis")
visible: radio.children[1].checked
}
TextField
{
id: aufenthalt
visible: radio.children[1].checked
Layout.fillWidth: true
placeholderText: "Pflichtfeld"
placeholderTextColor: "red"
}
}

View File

@@ -2,62 +2,6 @@ import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
GridLayout
{
columns: 2
Label
{
text: qsTr("Staatsangehörigkeit Deutsch")
}
Row
{
RadioButton
{
id: radioyes
text: qsTr("Ja")
checked: true
}
RadioButton
{
id: radiono
text: qsTr("Nein")
}
}
Label
{
text: qsTr("Sozialversicherungs-Nr")
}
TextField
{
id: socialnumber
}
Label
{
text: qsTr("Steuer-ID")
}
TextField
{
id: taxnumber
}
Label
{
text: qsTr("Krankenkasse")
}
TextField
{
id: medicalinsurance
}
Item
{
Layout.columnSpan: 2
visible: radiono.checked
GridLayout
{
columns: 2
CheckBox CheckBox
{ {
Layout.columnSpan: 2 Layout.columnSpan: 2
@@ -70,6 +14,7 @@ GridLayout
TextField TextField
{ {
id: nationality id: nationality
} }
Label Label
{ {
@@ -78,6 +23,7 @@ GridLayout
TextField TextField
{ {
id: pass id: pass
} }
Label Label
{ {
@@ -86,7 +32,6 @@ GridLayout
TextField TextField
{ {
id: aufenthalt id: aufenthalt
} }
}
}
}

View File

@@ -5,32 +5,12 @@ import QtQuick.Layouts
GridLayout GridLayout
{ {
id: personalData id: personalData
columns: 2 columns: 4
ButtonGroup
{
buttons: radio.children
}
Row
{
Layout.fillWidth: true
id: radio
Layout.columnSpan: 2
RadioButton
{
checked: true
text: qsTr("Bewerber")
}
RadioButton
{
text: qsTr("Mitarbeiter")
}
}
Label Label
{ {
text: qsTr("Anrede") text: qsTr("Anrede")
Layout.alignment: Qt.AlignRight
} }
ComboBox ComboBox
{ {
@@ -38,10 +18,14 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
editable: false editable: false
model: [qsTr("Herr"), qsTr("Frau")] model: [qsTr("Herr"), qsTr("Frau")]
onCurrentTextChanged: briefAnrede.text = title.currentText === "Herr"? "Sehr geehrter " +
title.currentText: "Sehr geehrte " + title.currentText
Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Vorname") text: qsTr("Vorname")
Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
@@ -49,11 +33,13 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld" placeholderText: "Pflichtfeld"
placeholderTextColor: "red" placeholderTextColor: "red"
onTextChanged: checkFields()
Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Nachname") text: qsTr("Nachname")
Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
@@ -61,58 +47,124 @@ GridLayout
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: "Pflichtfeld" placeholderText: "Pflichtfeld"
placeholderTextColor: "red" placeholderTextColor: "red"
onTextChanged: checkFields()
Layout.columnSpan: 3
}
Label
{
text: qsTr("Straße")
Layout.alignment: Qt.AlignRight
}
TextField
{
id: street
Layout.fillWidth: true
placeholderTextColor: "red"
} }
Label Label
{ {
text: qsTr("Geburtsname") text: qsTr("Nr.")
Layout.alignment: Qt.AlignRight
} }
TextField TextField
{ {
id: birthname property string name: "houseno"
id: houseno
Layout.fillWidth: true Layout.fillWidth: true
placeholderTextColor: "red"
} }
Label Label
{ {
text: qsTr("Geburtsdatum") text: qsTr("PLZ")
Layout.alignment: Qt.AlignRight
} }
TextField
ComboBox
{ {
id: birthday id: postcode
Layout.fillWidth: true Layout.fillWidth: true
placeholderText: qsTr("TT.MM.JJJJ") 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 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-9]{1,5})/
} }
}
Label
{
text: qsTr("Geburtsort")
}
TextField
{
id: placeofbirth
Layout.fillWidth: true
} }
Label Label
{ {
text: qsTr("Geschlecht") text: qsTr("Ort")
Layout.alignment: Qt.AlignRight
} }
ComboBox ComboBox
{ {
id: gender id: city
Layout.fillWidth: true Layout.fillWidth: true
editable: false editable: true
model: [qsTr("Mann"), qsTr("Frau"), qsTr("Divers")] onEditTextChanged: checkFields()
onCurrentTextChanged: checkFields()
model: address_model
textRole: "city"
popup.height: 300
popup.y: postcode.y + 5 - (postcode.height * 2)
currentIndex: -1
}
Label
{
text: qsTr("Telefonnummer")
Layout.alignment: Qt.AlignRight
}
TextField
{
id: phonenumber
Layout.fillWidth: true
placeholderTextColor: "red"
Layout.columnSpan: 3
}
Label
{
text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight
}
TextField
{
id: cellphone
Layout.fillWidth: true
placeholderTextColor: "red"
Layout.columnSpan: 3
}
Label
{
text: qsTr("E-Mail")
Layout.alignment: Qt.AlignRight
}
TextField
{
id: email
Layout.fillWidth: true
placeholderTextColor: "red"
Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Familienstand") text: qsTr("Familienstand")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
ComboBox ComboBox
{ {
@@ -120,46 +172,106 @@ GridLayout
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
{ {
text: qsTr("Jobbeschreibung") text: qsTr("Jobbeschreibung")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField TextField
{ {
id: jobdescription id: jobdescription
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red"
Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Arbeitsbeginn") text: qsTr("Arbeitsbeginn")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField TextField
{ {
id: workstart id: workstart
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red"
Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Bei Befristung Ende") text: qsTr("Bei Befristung Ende")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField TextField
{ {
id: workend id: workend
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red"
Layout.columnSpan: 3
} }
Label Label
{ {
text: qsTr("Arbeitszeiten") text: qsTr("Arbeitszeiten")
Layout.alignment: Qt.AlignRight
visible: radio.children[1].checked
} }
TextField TextField
{ {
id: timetowork id: timetowork
Layout.fillWidth: true Layout.fillWidth: true
visible: radio.children[1].checked
placeholderTextColor: "red"
Layout.columnSpan: 3
}
Label
{
text: qsTr("Briefanrede")
Layout.alignment: Qt.AlignRight
}
TextField
{
id: briefAnrede
Layout.fillWidth: true
placeholderTextColor: "red"
Layout.columnSpan: 3
} }
Item
{
Layout.fillHeight: true
Layout.columnSpan: 4
}
function checkPersonalField()
{
if (radio.children[0].checked)
{
return (firstname.text.trim() && lastname.text.trim())
}
else
{
console.log("Mitarbeiter")
return (firstname.text.trim() && lastname.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
workstart.placeholderText = pf
workend.placeholderText = pf
timetowork.placeholderText = pf
briefAnrede.placeholderText = pf
}
} }

53
Gui/ApplicantVarious.qml Normal file
View File

@@ -0,0 +1,53 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
columns: 2
Label
{
text: qsTr("Grad der Behinderung")
}
TextField
{
id: behinderung
placeholderText: "0,0"
Layout.fillWidth: true
}
Label
{
text: qsTr("Disponent")
}
TextField
{
id: disponent
Layout.fillWidth: true
}
Label
{
text: qsTr("Kostenstelle")
}
TextField
{
id: kostenstelle
Layout.fillWidth: true
}
Label
{
text: qsTr("Fremdlohn-Nr.")
}
TextField
{
id: fremdLohnNummer
Layout.fillWidth: true
}
}

27
Gui/CustomerDetails.qml Normal file
View File

@@ -0,0 +1,27 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Item
{
property int selectedClient: -1
id: clDet
ColumnLayout
{
Label
{
text: qsTr("Ausgewählter Kunde " + selectedClient)
}
Button
{
text: qsTr("Kunden zeigen")
onClicked: customersStack.pop()
}
}
Component.onCompleted:
{
business_model.onRowClicked(selectedClient)
}
}

View File

@@ -9,206 +9,11 @@ Item {
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"] property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"]
id: test id: test
SearchBar StackView
{ {
id:searchBar id: customersStack
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
{
id: tableColumn
anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout
{
RadioButton
{
id: showAll
checked: true
text: qsTr("Alle")
onClicked: viewCriterion(showAll)
}
RadioButton
{
id: showInterested
text: qsTr("Interessent")
onClicked: viewCriterion(showInterested)
}
RadioButton
{
id: showClientele
text: qsTr("Kunden")
onClicked: viewCriterion(showClientele)
}
RadioButton
{
id: showProvider
text: qsTr("Lieferant")
onClicked: viewCriterion(showProvider)
}
RadioButton
{
id: showFinished
text: qsTr("Erledigt")
onClicked: viewCriterion(showFinished)
}
}
HorizontalHeaderView
{
id: horizontalHeader
Layout.fillWidth: true
implicitHeight: 40
movableColumns: true //@disable-check M16
syncView: customerTable
delegate: Rectangle {
color: addBusinessBtn.palette.alternateBase
border.color: addBusinessBtn.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: addBusinessBtn.palette.text
}
}
}
TableView
{
//property var customWidths: [0.2, 0.5, 0.3, 05, 0.2, 0.2]
property real newWidth: 0
id: customerTable
Layout.fillHeight: true
Layout.fillWidth: true
ScrollBar.vertical: ScrollBar
{
policy: customerTable.contentHeight > customerTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
}
columnSpacing: 1
rowSpacing: 2
model: business_model
alternatingRows: true
resizableColumns: true // @disable-check M16
selectionBehavior: TableView.SelectRows
selectionModel: ItemSelectionModel
{
id: selModel
model: customerTable.model
}
// columnWidthProvider: function(column)
// {
// switch (column)
// {
// case 0: return width * 0.2;
// case 1: return width * 0.5;
// case 2: return width * 0.3;
// default: return width / model.columnCount();
// }
//return customWidths[column] * width;
//return tableColumn.content.implicitWidth // model.columnCount()
// newWidth = columnWidth(column)
// return newWidth
// }
Timer
{
id: redrawTable
running: true
interval: 1
repeat: false
onTriggered:
{
customerTable.forceLayout();
}
}
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
elide: Text.ElideRight
width: parent.width
height: parent.height
verticalAlignment: Text.AlignVCenter
leftPadding: 9 //@d isable-check M16
color: addBusinessBtn.palette.text
}
MouseArea
{
property bool hovered: false
id: mouseArea
anchors.fill: parent anchors.fill: parent
hoverEnabled: true initialItem: "CustomersTable.qml"
onClicked:
{
business_model.onRowClicked(row)
}
onEntered:
{
customerTable.selectionModel.select(customerTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
}
}
}
onContentWidthChanged:
{
//console.log("Model changed!!")
redrawTable.start()
}
}
Item
{
//Layout.fillHeight: true
Layout.fillWidth: true
}
}
function viewCriterion(criterion)
{
business_model.viewCriterion(criterion.text)
} }
} }

View File

@@ -149,7 +149,7 @@ GridLayout
Label Label
{ {
text: qsTr("Handy") text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
} }
TextField TextField

219
Gui/CustomersTable.qml Normal file
View File

@@ -0,0 +1,219 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
import QtQuick.Controls.Fusion
Item
{
SearchBar
{
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
{
id: tableColumn
anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout
{
RadioButton
{
id: showAll
checked: true
text: qsTr("Alle")
onClicked: viewCriterion(showAll)
}
RadioButton
{
id: showInterested
text: qsTr("Interessent")
onClicked: viewCriterion(showInterested)
}
RadioButton
{
id: showClientele
text: qsTr("Kunden")
onClicked: viewCriterion(showClientele)
}
RadioButton
{
id: showProvider
text: qsTr("Lieferant")
onClicked: viewCriterion(showProvider)
}
RadioButton
{
id: showFinished
text: qsTr("Erledigt")
onClicked: viewCriterion(showFinished)
}
}
HorizontalHeaderView
{
id: horizontalHeader
Layout.fillWidth: true
implicitHeight: 40
movableColumns: true //@disable-check M16
syncView: customerTable
delegate: Rectangle {
color: addBusinessBtn.palette.alternateBase
border.color: addBusinessBtn.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: addBusinessBtn.palette.text
}
}
}
TableView
{
//property var customWidths: [0.2, 0.5, 0.3, 05, 0.2, 0.2]
property real newWidth: 0
id: customerTable
Layout.fillHeight: true
Layout.fillWidth: true
ScrollBar.vertical: ScrollBar
{
policy: customerTable.contentHeight > customerTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
}
columnSpacing: 1
rowSpacing: 2
model: business_model
alternatingRows: true
resizableColumns: true // @disable-check M16
selectionBehavior: TableView.SelectRows
selectionModel: ItemSelectionModel
{
id: selModel
model: customerTable.model
}
// columnWidthProvider: function(column)
// {
// switch (column)
// {
// case 0: return width * 0.2;
// case 1: return width * 0.5;
// case 2: return width * 0.3;
// default: return width / model.columnCount();
// }
//return customWidths[column] * width;
//return tableColumn.content.implicitWidth // model.columnCount()
// newWidth = columnWidth(column)
// return newWidth
// }
Timer
{
id: redrawTable
running: true
interval: 1
repeat: false
onTriggered:
{
customerTable.forceLayout();
}
}
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
elide: Text.ElideRight
width: parent.width
height: parent.height
verticalAlignment: Text.AlignVCenter
leftPadding: 9 //@d isable-check M16
color: addBusinessBtn.palette.text
}
MouseArea
{
property bool hovered: false
id: mouseArea
anchors.fill: parent
hoverEnabled: true
// onClicked:
// {
// business_model.onRowClicked(row)
// }
onDoubleClicked:
{
customersStack.push("CustomerDetails.qml", {selectedClient: row});
}
onEntered:
{
customerTable.selectionModel.select(customerTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
}
}
}
onContentWidthChanged:
{
//console.log("Model changed!!")
redrawTable.start()
}
}
Item
{
//Layout.fillHeight: true
Layout.fillWidth: true
}
}
function viewCriterion(criterion)
{
business_model.viewCriterion(criterion.text)
}
Component.onCompleted: customersStack.pop()
}

View File

@@ -8,9 +8,124 @@ ColumnLayout
Rectangle Rectangle
{ {
color: "blue" color: "dimgrey"
Layout.fillHeight: true Layout.fillHeight: true
Layout.fillWidth: true Layout.fillWidth: true
Layout.bottomMargin: 9 Layout.bottomMargin: 3
radius: 45
RowLayout
{
anchors.fill: parent
Rectangle
{
id: contractButton
width: 300
height: 145
color: "darkslategray"
radius: 45
Layout.alignment: Qt.AlignHCenter
border.color: "steelblue"
border.width: 1
Text
{
text: qsTr("Aufträge")
anchors.centerIn: parent
font.pixelSize: 45
font.bold: true
color: "lightgoldenrodyellow"
}
MouseArea
{
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onPressed:
{
contractButton.color = "darkolivegreen"
contractButton.border.width = 3
contractButton.border.color = "skyblue"
console.log("Aufträge...")
}
onReleased:
{
contractButton.color = "darkslategray"
contractButton.border.width = 1
contractButton.border.color = "steelblue"
}
onHoveredChanged:
{
var w = contractButton.border.width === 3? 1: 3
contractButton.border.width = w
}
onExited:
{
contractButton.color = "darkslategray"
contractButton.border.color = "steelblue"
contractButton.border.width = 1
}
}
}
Rectangle
{
id: offerButton
width: 300
height: 145
color: "darkslategray"
radius: 45
Layout.alignment: Qt.AlignHCenter
border.color: "steelblue"
border.width: 1
Text
{
text: qsTr("Angebote")
anchors.centerIn: parent
font.pixelSize: 45
font.bold: true
color: "lightgoldenrodyellow"
}
MouseArea
{
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
onPressed:
{
offerButton.color = "darkolivegreen"
offerButton.border.width = 3
offerButton.border.color = "skyblue"
console.log("Angebote...")
}
onReleased:
{
offerButton.color = "darkslategray"
offerButton.border.width = 1
offerButton.border.color = "steelblue"
}
onHoveredChanged:
{
var w = offerButton.border.width === 3? 1: 3
offerButton.border.width = w
}
onExited:
{
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:
{
business_model.onRowClicked(selectedEmployee)
}
}

View File

@@ -4,121 +4,13 @@ import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
Item { Item
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort", "Status"] {
StackView
SearchBar
{ {
id:searchBar id: employeesStack
anchors.margins: 9
}
ColumnLayout
{
anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout
{
RadioButton
{
checked: true
text: qsTr("Alle")
}
RadioButton
{
text: qsTr("Bewerber")
}
RadioButton
{
text: qsTr("Mitarbeiter")
}
RadioButton
{
text: qsTr("Erledigt")
}
RadioButton
{
text: qsTr("Ausgeschieden")
}
}
HorizontalHeaderView
{
id: horizontalHeader
Layout.fillWidth: true
syncView: testTable
}
TableView
{
id: testTable
Layout.fillHeight: true
Layout.fillWidth: true
columnSpacing: 1
rowSpacing: 2
model: business_model
selectionBehavior: TableView.SelectRows
selectionModel: ItemSelectionModel
{
id: selModel
model: testTable.model
}
delegate:Rectangle
{
required property bool selected
required property bool current
implicitWidth: 200
implicitHeight: 25
color: selected? "lightblue": palette.base
Text
{
Layout.fillWidth: true
text: model.display
}
MouseArea
{
id: mouseArea
property bool hovered:false
anchors.fill: parent anchors.fill: parent
hoverEnabled: true initialItem: "EmployeesTable.qml"
onClicked:
{
business_model.onRowClicked(row)
testTable.selectionModel.select(testTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
}
}
}
}
} }
} }

132
Gui/EmployeesTable.qml Normal file
View File

@@ -0,0 +1,132 @@
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"
}
ColumnLayout
{
anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout
{
RadioButton
{
checked: true
text: qsTr("Alle")
}
RadioButton
{
text: qsTr("Bewerber")
}
RadioButton
{
text: qsTr("Mitarbeiter")
}
RadioButton
{
text: qsTr("Erledigt")
}
RadioButton
{
text: qsTr("Ausgeschieden")
}
}
HorizontalHeaderView
{
id: horizontalHeader
Layout.fillWidth: true
syncView: testTable
}
TableView
{
id: testTable
Layout.fillHeight: true
Layout.fillWidth: true
columnSpacing: 1
rowSpacing: 2
model: business_model
selectionBehavior: TableView.SelectRows
selectionModel: ItemSelectionModel
{
id: selModel
model: testTable.model
}
delegate:Rectangle
{
required property bool selected
required property bool current
implicitWidth: 200
implicitHeight: 25
color: selected? "lightblue": palette.base
Text
{
Layout.fillWidth: true
text: model.display? model.display: ""
}
MouseArea
{
id: mouseArea
property bool hovered:false
anchors.fill: parent
hoverEnabled: true
onDoubleClicked:
{
employeesStack.push("EmployeeDetails.qml", {selectedEmployee: row});
}
}
}
}
}
Component.onCompleted: employeesStack.pop()
}

View File

@@ -1,11 +1,15 @@
import QtQuick import QtQuick
import QtQuick.Layouts import QtQuick.Layouts
import QtQuick.Controls
ColumnLayout Frame
{ {
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
ColumnLayout
{
id: addObjectLayout id: addObjectLayout
visible: false width: parent.width
ObjectAddOnEmployee ObjectAddOnEmployee
{ {
id: oaoemployee id: oaoemployee
@@ -18,4 +22,5 @@ ColumnLayout
{ {
Layout.fillHeight: true Layout.fillHeight: true
} }
}
} }

27
Gui/ObjectDetails.qml Normal file
View File

@@ -0,0 +1,27 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Item
{
property int selectedObject: -1
id: obDet
ColumnLayout
{
Label
{
text: qsTr("Ausgewählter Objekt " + selectedObject)
}
Button
{
text: qsTr("Objekts zeigen")
onClicked: customersStack.pop()
}
}
Component.onCompleted:
{
business_model.onRowClicked(selectedObject)
}
}

View File

@@ -6,155 +6,13 @@ import QtQuick.Controls.Fusion
Item { Item {
property var availableFilters: [""] property var availableFilters: [""]
SearchBar
{
id:searchBar
anchors.margins: 9
}
Button StackView
{ {
id: addObjectBtn id: objectsStack
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 anchors.fill: parent
hoverEnabled: true initialItem: "ObjectsTable.qml"
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)
// }
} }

160
Gui/ObjectsTable.qml Normal file
View File

@@ -0,0 +1,160 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
import QtQuick.Controls.Fusion
Item
{
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
onDoubleClicked:
{
objectsStack.push("ObjectDetails.qml", {selectedObject: 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)
// }
Component.onCompleted: objectsStack.pop()
}

View File

@@ -41,7 +41,7 @@ ApplicationWindow
top: topBar.bottom top: topBar.bottom
bottom: parent.bottom bottom: parent.bottom
topMargin: 0 topMargin: 0
bottomMargin: 9 bottomMargin: 5
rightMargin: 9 rightMargin: 9
leftMargin: 9 leftMargin: 9
} }
@@ -57,7 +57,7 @@ ApplicationWindow
} }
else else
{ {
if (db_con) appLoader.source= "AddApplicant.qml" if (db_con) appLoader.source= "LoginScreen.qml"
else appLoader.source= "NoDbConnection.qml" else appLoader.source= "NoDbConnection.qml"
} }
} }

BIN
doc/PYQCRM_DATENBANK.odt Normal file

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
doc/pyqcrm_er_diagram.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

View File

@@ -8,13 +8,17 @@ class AddressDAO:
def __init__(self): def __init__(self):
#print(f"*** File: {__file__}, init()") #print(f"*** File: {__file__}, init()")
self.__con = DbManager().getConnection() self.__con = DbManager().getConnection()
if self.__con: if self.__con:
self.__cur = self.__con.cursor() self.__cur = self.__con.cursor()
def __importPlz(self): def __importPlz(self):
with open("import json filepath here", "r") as plz: with open("pfad zur datei", "r") as plz:
postcodes = json.load(plz) postcodes = json.load(plz)
irgendwas = ""
try: try:
for i in postcodes: for i in postcodes:
test =i["plz_name"].split(",") test =i["plz_name"].split(",")
@@ -24,13 +28,44 @@ class AddressDAO:
town = town.strip() town = town.strip()
if town: if town:
print(f"PROCESSING {i['name']} {town}") print(f"PROCESSING {i['name']} {town}")
self.__cur.callproc("addZipCodes", (i["name"], town,)) self.__cur.callproc("addZipCodes", (i["name"], town, irgendwas,))
#self.__cur.callproc("addZipCodes", ("56271", "Kleinmaischeid", irgendwas,))
except mariadb.OperationalError as e: except mariadb.OperationalError as e:
print(f"Database Error: {e}") print(f"Database Error: {e}")
finally: finally:
self.__con.commit() self.__con.commit()
print("FINISHED")# print("FINISHED")#
def __importCountry(self):
with open("pfad zur datei", "r") as country:
countries = json.load(country)
old = ""
try:
for i in countries["daten"]:
if i[4] == "":
continue
elif i[8] == "YU":
continue
elif i[4] == old:
continue
elif i[4] == "Serbien und Montenegro":
continue
elif i[4] == "Bosnien und Herzegowina":
continue
print(i[4], i[3], i[2], i[8], i[7])
self.__cur.execute("INSERT INTO country (country, countryshort, nationality, iso2, iso3) VALUES (%s, %s, %s, %s, %s)", (i[4], i[3], i[2], i[8], i[7]))
old = i[4]
except mariadb.OperationalError as e:
print(f"Database Error: {e}")
finally:
self.__con.commit()
print("FINISHED")#
def getAddressData(self, all = True, zipcode = None): def getAddressData(self, all = True, zipcode = None):
try: try:
if self.__cur: if self.__cur:

View File

@@ -15,6 +15,8 @@ from lib.DB.BTypeModel import BTypeModel
from lib.DB.ContactModel import ContactModel from lib.DB.ContactModel import ContactModel
# [pyqcrm] # [pyqcrm]
# program-name="" # program-name=""
# version= # version=

10
qml.qrc
View File

@@ -29,5 +29,15 @@
<file>Gui/ApplicantContactData.qml</file> <file>Gui/ApplicantContactData.qml</file>
<file>Gui/ApplicantBankData.qml</file> <file>Gui/ApplicantBankData.qml</file>
<file>Gui/ApplicantNationality.qml</file> <file>Gui/ApplicantNationality.qml</file>
<file>Gui/ApplicantNationalInsurance.qml</file>
<file>Gui/ApplicantMiniJob.qml</file>
<file>Gui/ApplicantVarious.qml</file>
<file>Gui/ApplicantBirthData.qml</file>
<file>Gui/CustomersTable.qml</file>
<file>Gui/CustomerDetails.qml</file>
<file>Gui/ObjectsTable.qml</file>
<file>Gui/EmployeesTable.qml</file>
<file>Gui/EmployeeDetails.qml</file>
<file>Gui/ObjectDetails.qml</file>
</qresource> </qresource>
</RCC> </RCC>