Folder structure in Gui changed, window size to fullscreen, scrollview in AddCustomer

This commit is contained in:
2025-05-14 09:54:51 +02:00
parent 591216c9a8
commit 75427b1326
18 changed files with 1621 additions and 362 deletions

View File

@@ -1,120 +1,120 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Dialogs
import Js
// import QtQuick
// import QtQuick.Layouts
// import QtQuick.Controls
// import QtQuick.Dialogs
// import Js
ColumnLayout
{
property var new_business: null
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 15
Label
{
text: qsTr("Kunden anlegen")
horizontalAlignment: Text.AlignHCenter
Layout.fillWidth: true
font.pixelSize: 35
}
CheckBox
{
id: checkAddContact
text: qsTr("Ansprechpartner hinzufügen")
Layout.alignment: Qt.AlignRight
checked: false
onCheckStateChanged:
{
checkFields()
}
}
// ColumnLayout
// {
// property var new_business: null
// Layout.fillWidth: true
// Layout.fillHeight: true
// spacing: 15
// Label
// {
// text: qsTr("Kunden anlegen")
// horizontalAlignment: Text.AlignHCenter
// Layout.fillWidth: true
// font.pixelSize: 35
// }
// CheckBox
// {
// id: checkAddContact
// text: qsTr("Ansprechpartner hinzufügen")
// Layout.alignment: Qt.AlignRight
// checked: false
// onCheckStateChanged:
// {
// checkFields()
// }
// }
RowLayout
{
id: addCustomer
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 45
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
CustomerView
{
id: customerView
width: parent.width
}
}
// RowLayout
// {
// id: addCustomer
// Layout.fillWidth: true
// Layout.fillHeight: true
// spacing: 45
// Frame
// {
// Layout.alignment: Qt.AlignTop
// Layout.fillWidth: true
// CustomerView
// {
// id: customerView
// width: parent.width
// }
// }
AddContact
{
id: addContactFrame
visible: checkAddContact.checked
}
}
RowLayout
{
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
Button
{
text: qsTr("Abbrechen")
onClicked: contentStack.pop()
}
Button
{
id: saveBtn
text: qsTr("Speichern")
enabled: false
onClicked:
{
if (!checkAddContact.checked)
{
new_business = JsLib.parseForm(customerView)
business_model.addBusiness(new_business, 0)
contentStack.pop()
}
else
{
new_business = JsLib.parseForm(customerView)
var new_contact = JsLib.parseForm(addContactFrame.contactGrid)
contact_model.addContact(new_contact)
}
}
}
}
Item
{
id: spacer3
Layout.fillHeight: true
}
// AddContact
// {
// id: addContactFrame
// visible: checkAddContact.checked
// }
// }
// RowLayout
// {
// Layout.fillHeight: true
// Layout.alignment: Qt.AlignRight
// Button
// {
// text: qsTr("Abbrechen")
// onClicked: contentStack.pop()
// }
// Button
// {
// id: saveBtn
// text: qsTr("Speichern")
// enabled: false
// onClicked:
// {
// if (!checkAddContact.checked)
// {
// new_business = JsLib.parseForm(customerView)
// business_model.addBusiness(new_business, 0)
// contentStack.pop()
// }
// else
// {
// new_business = JsLib.parseForm(customerView)
// var new_contact = JsLib.parseForm(addContactFrame.contactGrid)
// contact_model.addContact(new_contact)
// }
// }
// }
// }
// Item
// {
// id: spacer3
// Layout.fillHeight: true
// }
//Component.onCompleted: contact_model.contactIdReady.connect(onContactId)
// //Component.onCompleted: contact_model.contactIdReady.connect(onContactId)
Connections
{
target: contact_model
// Connections
// {
// target: contact_model
function onContactIdReady()
{
var con_id = arguments[0]
business_model.addBusiness(new_business, con_id)
contentStack.pop()
}
}
// function onContactIdReady()
// {
// var con_id = arguments[0]
// business_model.addBusiness(new_business, con_id)
// contentStack.pop()
// }
// }
function checkFields()
{
if(checkAddContact.checked)
{
if(!customerView.checkBusinessField() || !addContactFrame.checkContactField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
else if (!customerView.checkBusinessField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
}
// function checkFields()
// {
// if(checkAddContact.checked)
// {
// if(!customerView.checkBusinessField() || !addContactFrame.checkContactField())
// saveBtn.enabled = false
// else
// saveBtn.enabled = true
// }
// else if (!customerView.checkBusinessField())
// saveBtn.enabled = false
// else
// saveBtn.enabled = true
// }
// }

View File

@@ -0,0 +1,133 @@
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtQuick.Dialogs
import Js
import Gui
ScrollView
{
id: scroll
width: parent.width
height: parent.height
ColumnLayout
{
property var new_business: null
height: Screen.desktopAvailableHeight
width: scroll.width
Layout.fillWidth: true
Layout.fillHeight: true
spacing: 15
Label
{
text: qsTr("Kunden anlegen")
horizontalAlignment: Text.AlignHCenter
Layout.fillWidth: true
font.pixelSize: 35
}
CheckBox
{
id: checkAddContact
text: qsTr("Ansprechpartner hinzufügen")
Layout.alignment: Qt.AlignRight
checked: false
onCheckStateChanged:
{
checkFields()
}
}
RowLayout
{
id: addCustomer
// Layout.fillWidth: true
// Layout.fillHeight: true
spacing: 45
Frame
{
Layout.alignment: Qt.AlignTop
Layout.fillWidth: true
CustomerView
{
id: customerView
width: parent.width
}
}
AddContact
{
id: addContactFrame
visible: checkAddContact.checked
}
}
RowLayout
{
Layout.fillHeight: true
Layout.alignment: Qt.AlignRight
Button
{
text: qsTr("Abbrechen")
onClicked: contentStack.pop()
}
Button
{
id: saveBtn
text: qsTr("Speichern")
enabled: true
onClicked:
{
if (!checkAddContact.checked)
{
new_business = JsLib.parseForm(customerView)
business_model.addBusiness(new_business, 0)
contentStack.pop()
}
else
{
new_business = JsLib.parseForm(customerView)
var new_contact = JsLib.parseForm(addContactFrame.contactGrid)
contact_model.addContact(new_contact)
}
}
}
}
Item
{
id: spacer3
Layout.fillHeight: true
}
//Component.onCompleted: contact_model.contactIdReady.connect(onContactId)
Connections
{
target: contact_model
function onContactIdReady()
{
var con_id = arguments[0]
business_model.addBusiness(new_business, con_id)
contentStack.pop()
}
}
function checkFields()
{
if(checkAddContact.checked)
{
if(!customerView.checkBusinessField() || !addContactFrame.checkContactField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
else if (!customerView.checkBusinessField())
saveBtn.enabled = false
else
saveBtn.enabled = true
}
}
}

View File

@@ -0,0 +1,174 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
columns: 2
rowSpacing: 25
Layout.leftMargin: 7
// Grid row
ColumnLayout
{
Layout.columnSpan: 2
Label
{
id: contactLabel
color: "darksalmon"
font.bold: true
text: qsTr("Ansprechpartner")
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['salute'] + " " + contact['contact']['fname'] + " " + contact['contact']['lname']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Geburtsdatum")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['birthday']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("E-Mail")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['email']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Position")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['position']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Priorität")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['priority']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Telefon")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['phone']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Handy")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['cell']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Abrechnung")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['invoice']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Mahnung")
font.bold: true
}
Label
{
color: "goldenrod"
text: contact? contact['contact']['reminder']: ""
}
}
// Grid row
Item
{
Layout.columnSpan: 2
Layout.fillHeight: true
}
Component.onCompleted:
{
if (contact && contact['contact']['salute'] === "Frau")
contactLabel.text = qsTr("Ansprechpartnerin")
}
}

View File

@@ -0,0 +1,61 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
ColumnLayout
{
property int selectedClient: -1
property var client: null
property var contact: null
id: clDet
Button
{
text: qsTr("Zurück")
onClicked: contentStack.pop()
}
SplitView
{
id: clDetView
Layout.fillHeight: true
Layout.fillWidth: true
leftPadding: 9
rightPadding: 9
CustomerDetailsView
{
id: customerDetails
}
CustomerContactDetails
{
id: contactDetails
visible: false
}
NoCustomerContact
{
id: noCustomerContact
visible: false
}
}
Item
{
//Layout.columnSpan: 2
Layout.fillHeight: true
}
Component.onCompleted:
{
//business_model.onRowClicked(selectedClient)
client = business_model.getClientDetails()
if (client['business']['contactid'] > 0)
{
contact = contact_model.getContactDetails(client['business']['contactid'])
contactDetails.visible = true
}
else noCustomerContact.visible = true
}
}

View File

@@ -0,0 +1,225 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
columns: 2
rowSpacing: 25
SplitView.preferredWidth: clDetView.width / 3 * 1.8
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Steuer-ID")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['tax']? client['business']['tax']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Anmerkungen")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['info']? client['business']['info']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Kundenname")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['company']
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("CEO")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['ceo']
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Telefon")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['phone']? client['business']['phone']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Handy")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['cell']? client['business']['cell']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Webseite")
font.bold: true
}
Label
{
id: clientWebsite
color: "goldenrod"
font.underline: false
text: client['business']['website']? '<a href="' + client['business']['website'] + '">' + client['business']['website'] + '</a>': ""
onLinkActivated:
{
var web_protocol = /^((http|https):\/\/)/;
var client_website = !web_protocol.test(client['business']['website'])? "https://" + client['business']['website']: client['business']['website'];
Qt.openUrlExternally(client_website)
}
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("E-Mail")
font.bold: true
}
Label
{
id: clientEmail
color: "goldenrod"
text: client['business']['email']? '<a href="mailto:' + client['business']['email'] + '">' + client['business']['email'] + '</a>': ""
onLinkActivated: Qt.openUrlExternally('mailto:' + client['business']['email'])
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Straße")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['street']? client['business']['tax']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Haus-Nr.")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['house']? client['business']['house']: ""
}
}
// Grid row
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("PLZ")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['zip']? client['business']['zip']: ""
}
}
ColumnLayout
{
Label
{
color: "darksalmon"
text: qsTr("Stadt")
font.bold: true
}
Label
{
color: "goldenrod"
text: client['business']['city']? client['business']['city']: ""
}
}
// Grid row
// Item
// {
// Layout.columnSpan: 2
// Layout.fillHeight: true
// }
}

View File

@@ -0,0 +1,293 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
GridLayout
{
id: customerView
columns: 4
Layout.fillWidth: true
Layout.fillHeight: true
rowSpacing: 9
property alias businesstxt: firmenName
property alias street: streetid
property alias postcodetxt: postcode
property alias citytxt: city
Label
{
id: lblFirmenName
text: qsTr("Firmenname*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "business"
id: firmenName
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields()
Layout.columnSpan: 3
}
Label
{
text: qsTr("Land")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
visible: false
}
ComboBox
{
property string name: "country"
id: country
Layout.fillWidth: true
editable: true
// onEditTextChanged: checkFields()
// onCurrentTextChanged: checkFields()
model: address_model
textRole: "country"
popup.height: 300
currentIndex: 37
Layout.columnSpan: 3
visible: false
}
Label
{
text: qsTr("PLZ")
Layout.alignment: Qt.AlignRight
}
ComboBox
{
property string name: "postcode"
id: postcode
Layout.fillWidth: true
editable: true
onCurrentTextChanged: checkFields()
onEditTextChanged: checkFields()
onActivated: currentValue
model: address_model
textRole: "display"
popup.height: 300
currentIndex: -1
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([0-9]{1,5})/
}
}
Label
{
text: qsTr("Ort")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
ComboBox
{
property string name: "city"
id: city
Layout.fillWidth: true
editable: true
onEditTextChanged: checkFields()
onCurrentTextChanged: checkFields()
model: address_model
textRole: "city"
popup.height: 300
currentIndex: -1
Layout.columnSpan: 3
}
Label
{
text: qsTr("Straße*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "street"
id: streetid
Layout.fillWidth: true
onTextChanged: checkFields()
}
Label
{
text: qsTr("Nr.*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "houseno"
id: housenoid
Layout.fillWidth: true
onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /([0-9a-zA-Z\-]{1,6})/
}
}
Label
{
text: qsTr("Telefon")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "telephone"
id: telephone
Layout.fillWidth: true
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([+0-9]{1})([0-9]{1,17})/
}
}
Label
{
text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "cellphone"
id: cellphone
Layout.fillWidth: true
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([+0-9]{1})([0-9]{1,17})/
}
}
Label
{
text: qsTr("E-Mail")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "email"
id: email
Layout.fillWidth: true
placeholderText: qsTr("beispiel@domain.de")
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([\+!#$%&\*\\/\=?\^_`\.{|}\~\-\_0-9A-Za-z]{1,185})@([0-9A-Za-z\.\-\_]{1,64})\.([a-zA-z]{2,5})/
}
}
Label
{
text: qsTr("Homepage")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "homepage"
id: homepage
Layout.fillWidth: true
Layout.columnSpan: 3
placeholderText: "www.oschkarischtverhaftetwegensexy.jinx"
}
Label
{
text: qsTr("Geschäftsführer")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "ceo"
id: ceo
Layout.fillWidth: true
Layout.columnSpan: 3
}
Label
{
text: qsTr("USt-IdNr")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "taxno"
id: taxno
Layout.fillWidth: true
Layout.columnSpan: 3
}
Label
{
text: qsTr("Typ")
Layout.alignment: Qt.AlignRight
}
ComboBox
{
property string name: "typeid"
id: typeid
Layout.fillWidth: true
editable: false
model: business_type
textRole: "display"
Layout.columnSpan: 3
}
Label
{
text: qsTr("Info")
Layout.alignment: Qt.AlignRight | Qt.AlignTop
}
ScrollView
{
id: infoView
Layout.fillWidth: true
Layout.preferredHeight: 100
Layout.columnSpan: 3
ScrollBar.horizontal: ScrollBar
{
policy: ScrollBar.AlwaysOn
}
TextArea
{
property string name: "customerinfo"
id: customerInfo
implicitWidth: parent.width
wrapMode: TextEdit.Wrap
background: Rectangle
{
color: customerInfo.palette.base
border.color: customerInfo.activeFocus? customerInfo.palette.highlight: customerInfo.palette.base
}
}
}
function checkBusinessField()
{
if (!firmenName.text.trim() || !streetid.text.trim())
{
return false
}
else
{
if (!postcode.editText.trim() || !postcode.currentText || !city.editText.trim() || !city.currentText)
return false
else
return true
}
}
}

View File

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

1
Gui/Customer/qmldir Normal file
View File

@@ -0,0 +1 @@
module Customer

View File

@@ -1,271 +1,271 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
// import QtQuick
// import QtQuick.Controls
// import QtQuick.Layouts
GridLayout
{
id: customerView
columns: 4
Layout.fillWidth: true
Layout.fillHeight: true
rowSpacing: 9
property alias businesstxt: firmenName
property alias street: streetid
property alias postcodetxt: postcode
property alias citytxt: city
Label
{
id: lblFirmenName
text: qsTr("Firmenname*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
// GridLayout
// {
// id: customerView
// columns: 4
// Layout.fillWidth: true
// Layout.fillHeight: true
// rowSpacing: 9
// property alias businesstxt: firmenName
// property alias street: streetid
// property alias postcodetxt: postcode
// property alias citytxt: city
// Label
// {
// id: lblFirmenName
// text: qsTr("Firmenname*")
// Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "business"
// }
// TextField
// {
// property string name: "business"
id: firmenName
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
onTextChanged: checkFields()
Layout.columnSpan: 3
}
// id: firmenName
// Layout.fillWidth: true
// Layout.alignment: Qt.AlignVCenter
// onTextChanged: checkFields()
// Layout.columnSpan: 3
// }
Label
{
text: qsTr("Straße*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
// Label
// {
// text: qsTr("Straße*")
// Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
// }
TextField
{
property string name: "street"
id: streetid
Layout.fillWidth: true
onTextChanged: checkFields()
}
// TextField
// {
// property string name: "street"
// id: streetid
// Layout.fillWidth: true
// onTextChanged: checkFields()
// }
Label
{
text: qsTr("Nr.*")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
// Label
// {
// text: qsTr("Nr.*")
// Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
// }
TextField
{
property string name: "houseno"
id: housenoid
Layout.fillWidth: true
onTextChanged: checkFields()
validator: RegularExpressionValidator
{
regularExpression: /([0-9a-zA-Z\-]{1,6})/
}
}
// TextField
// {
// property string name: "houseno"
// id: housenoid
// Layout.fillWidth: true
// onTextChanged: checkFields()
// validator: RegularExpressionValidator
// {
// regularExpression: /([0-9a-zA-Z\-]{1,6})/
// }
// }
Label
{
text: qsTr("PLZ")
Layout.alignment: Qt.AlignRight
}
// Label
// {
// text: qsTr("PLZ")
// Layout.alignment: Qt.AlignRight
// }
ComboBox
{
property string name: "postcode"
id: postcode
Layout.fillWidth: true
editable: true
onCurrentTextChanged: checkFields()
onEditTextChanged: checkFields()
onActivated: currentValue
model: address_model
textRole: "display"
popup.height: 300
currentIndex: -1
onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([0-9]{1,5})/
}
// ComboBox
// {
// property string name: "postcode"
// id: postcode
// Layout.fillWidth: true
// editable: true
// onCurrentTextChanged: checkFields()
// onEditTextChanged: checkFields()
// onActivated: currentValue
// model: address_model
// textRole: "display"
// popup.height: 300
// currentIndex: -1
// onCurrentIndexChanged: city.currentIndex = postcode.currentIndex
// Layout.columnSpan: 3
// validator: RegularExpressionValidator
// {
// regularExpression: /([0-9]{1,5})/
// }
}
// }
Label
{
text: qsTr("Ort")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
ComboBox
{
property string name: "city"
id: city
Layout.fillWidth: true
editable: true
onEditTextChanged: checkFields()
onCurrentTextChanged: checkFields()
model: address_model
textRole: "city"
popup.height: 300
currentIndex: -1
Layout.columnSpan: 3
}
// Label
// {
// text: qsTr("Ort")
// Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
// }
// ComboBox
// {
// property string name: "city"
// id: city
// Layout.fillWidth: true
// editable: true
// onEditTextChanged: checkFields()
// onCurrentTextChanged: checkFields()
// model: address_model
// textRole: "city"
// popup.height: 300
// currentIndex: -1
// Layout.columnSpan: 3
// }
Label
{
text: qsTr("Telefon")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "telephone"
id: telephone
Layout.fillWidth: true
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([+0-9]{1})([0-9]{1,17})/
}
// Label
// {
// text: qsTr("Telefon")
// Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
// }
// TextField
// {
// property string name: "telephone"
// id: telephone
// Layout.fillWidth: true
// Layout.columnSpan: 3
// validator: RegularExpressionValidator
// {
// regularExpression: /([+0-9]{1})([0-9]{1,17})/
// }
}
// }
Label
{
text: qsTr("Mobil")
Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
}
TextField
{
property string name: "cellphone"
id: cellphone
Layout.fillWidth: true
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([+0-9]{1})([0-9]{1,17})/
}
}
// Label
// {
// text: qsTr("Mobil")
// Layout.alignment: Qt.AlignRight | Qt.AlignVCenter
// }
// TextField
// {
// property string name: "cellphone"
// id: cellphone
// Layout.fillWidth: true
// Layout.columnSpan: 3
// validator: RegularExpressionValidator
// {
// regularExpression: /([+0-9]{1})([0-9]{1,17})/
// }
// }
Label
{
text: qsTr("E-Mail")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "email"
id: email
Layout.fillWidth: true
placeholderText: qsTr("beispiel@domain.de")
Layout.columnSpan: 3
validator: RegularExpressionValidator
{
regularExpression: /([\+!#$%&\*\\/\=?\^_`\.{|}\~\-\_0-9A-Za-z]{1,185})@([0-9A-Za-z\.\-\_]{1,64})\.([a-zA-z]{2,5})/
}
}
// Label
// {
// text: qsTr("E-Mail")
// Layout.alignment: Qt.AlignRight
// }
// TextField
// {
// property string name: "email"
// id: email
// Layout.fillWidth: true
// placeholderText: qsTr("beispiel@domain.de")
// Layout.columnSpan: 3
// validator: RegularExpressionValidator
// {
// regularExpression: /([\+!#$%&\*\\/\=?\^_`\.{|}\~\-\_0-9A-Za-z]{1,185})@([0-9A-Za-z\.\-\_]{1,64})\.([a-zA-z]{2,5})/
// }
// }
Label
{
text: qsTr("Homepage")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "homepage"
id: homepage
Layout.fillWidth: true
Layout.columnSpan: 3
placeholderText: "www.oschkarischtverhaftetwegensexy.jinx"
}
// Label
// {
// text: qsTr("Homepage")
// Layout.alignment: Qt.AlignRight
// }
// TextField
// {
// property string name: "homepage"
// id: homepage
// Layout.fillWidth: true
// Layout.columnSpan: 3
// placeholderText: "www.oschkarischtverhaftetwegensexy.jinx"
// }
Label
{
text: qsTr("Geschäftsführer")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "ceo"
id: ceo
Layout.fillWidth: true
Layout.columnSpan: 3
}
// Label
// {
// text: qsTr("Geschäftsführer")
// Layout.alignment: Qt.AlignRight
// }
// TextField
// {
// property string name: "ceo"
// id: ceo
// Layout.fillWidth: true
// Layout.columnSpan: 3
// }
Label
{
text: qsTr("USt-IdNr")
Layout.alignment: Qt.AlignRight
}
TextField
{
property string name: "taxno"
id: taxno
Layout.fillWidth: true
Layout.columnSpan: 3
}
Label
{
text: qsTr("Typ")
Layout.alignment: Qt.AlignRight
}
ComboBox
{
property string name: "typeid"
id: typeid
Layout.fillWidth: true
editable: false
model: business_type
textRole: "display"
Layout.columnSpan: 3
}
Label
{
text: qsTr("Info")
Layout.alignment: Qt.AlignRight | Qt.AlignTop
}
// Label
// {
// text: qsTr("USt-IdNr")
// Layout.alignment: Qt.AlignRight
// }
// TextField
// {
// property string name: "taxno"
// id: taxno
// Layout.fillWidth: true
// Layout.columnSpan: 3
// }
// Label
// {
// text: qsTr("Typ")
// Layout.alignment: Qt.AlignRight
// }
// ComboBox
// {
// property string name: "typeid"
// id: typeid
// Layout.fillWidth: true
// editable: false
// model: business_type
// textRole: "display"
// Layout.columnSpan: 3
// }
// Label
// {
// text: qsTr("Info")
// Layout.alignment: Qt.AlignRight | Qt.AlignTop
// }
ScrollView
{
id: infoView
Layout.fillWidth: true
Layout.preferredHeight: 100
Layout.columnSpan: 3
ScrollBar.horizontal: ScrollBar
{
policy: ScrollBar.AlwaysOn
}
// ScrollView
// {
// id: infoView
// Layout.fillWidth: true
// Layout.preferredHeight: 100
// Layout.columnSpan: 3
// ScrollBar.horizontal: ScrollBar
// {
// policy: ScrollBar.AlwaysOn
// }
TextArea
{
property string name: "customerinfo"
id: customerInfo
implicitWidth: parent.width
wrapMode: TextEdit.Wrap
background: Rectangle
{
color: customerInfo.palette.base
border.color: customerInfo.activeFocus? customerInfo.palette.highlight: customerInfo.palette.base
}
}
}
function checkBusinessField()
{
if (!firmenName.text.trim() || !streetid.text.trim())
{
return false
// TextArea
// {
// property string name: "customerinfo"
// id: customerInfo
// implicitWidth: parent.width
// wrapMode: TextEdit.Wrap
// background: Rectangle
// {
// color: customerInfo.palette.base
// border.color: customerInfo.activeFocus? customerInfo.palette.highlight: customerInfo.palette.base
// }
// }
// }
// function checkBusinessField()
// {
// if (!firmenName.text.trim() || !streetid.text.trim())
// {
// return false
}
else
{
if (!postcode.editText.trim() || !postcode.currentText || !city.editText.trim() || !city.currentText)
return false
else
return true
}
// }
// else
// {
// if (!postcode.editText.trim() || !postcode.currentText || !city.editText.trim() || !city.currentText)
// return false
// else
// return true
// }
}
}
// }
// }

View File

@@ -31,7 +31,7 @@ ColumnLayout {
BarButton {
ButtonGroup.group: mainNav
icon.source: "qrc:/images/UserGroup-Outline.svg"
target: "/Gui/CustomersTable.qml"
target: "/Gui/Customer/CustomersTable.qml"
text: qsTr("Kunden")
visible: !onSubPage
}

View File

@@ -18,13 +18,13 @@ ApplicationWindow {
}
font: Typography.body
height: Screen.height * .85
height: Screen.desktopAvailableHeight
palette.window: Colors.mantle
palette.placeholderText: Colors.interactive
palette.text: Colors.foreground
title: "TERO Personal"
visible: true
width: Screen.width * .75
width: Screen.desktopAvailableWidth
Component.onCompleted: {
systray.activated.connect(showWindow);

View File

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