Merge branch 'main' of https://git.danielsto.de/Linuxero/pyqcrm
This commit is contained in:
@@ -2,127 +2,106 @@ import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
ColumnLayout
|
||||
{
|
||||
anchors.top: TopBar.bottom
|
||||
ColumnLayout {
|
||||
anchors.top: Navigation.bottom
|
||||
|
||||
Rectangle
|
||||
{
|
||||
color: "dimgrey"
|
||||
Rectangle {
|
||||
Layout.bottomMargin: 3
|
||||
Layout.fillHeight: true
|
||||
Layout.fillWidth: true
|
||||
Layout.bottomMargin: 3
|
||||
color: "dimgrey"
|
||||
radius: 45
|
||||
|
||||
RowLayout
|
||||
{
|
||||
RowLayout {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle
|
||||
{
|
||||
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"
|
||||
}
|
||||
color: "darkslategray"
|
||||
height: 145
|
||||
radius: 45
|
||||
width: 300
|
||||
|
||||
MouseArea
|
||||
{
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
color: "lightgoldenrodyellow"
|
||||
font.bold: true
|
||||
font.pixelSize: 45
|
||||
text: qsTr("Aufträge")
|
||||
}
|
||||
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...")
|
||||
|
||||
onExited: {
|
||||
contractButton.color = "darkslategray";
|
||||
contractButton.border.color = "steelblue";
|
||||
contractButton.border.width = 1;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
onHoveredChanged:
|
||||
{
|
||||
var w = contractButton.border.width === 3? 1: 3
|
||||
contractButton.border.width = w
|
||||
onPressed: {
|
||||
contractButton.color = "darkolivegreen";
|
||||
contractButton.border.width = 3;
|
||||
contractButton.border.color = "skyblue";
|
||||
console.log("Aufträge...");
|
||||
}
|
||||
|
||||
onExited:
|
||||
{
|
||||
|
||||
contractButton.color = "darkslategray"
|
||||
contractButton.border.color = "steelblue"
|
||||
contractButton.border.width = 1
|
||||
onReleased: {
|
||||
contractButton.color = "darkslategray";
|
||||
contractButton.border.width = 1;
|
||||
contractButton.border.color = "steelblue";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Rectangle
|
||||
{
|
||||
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")
|
||||
color: "darkslategray"
|
||||
height: 145
|
||||
radius: 45
|
||||
width: 300
|
||||
|
||||
Text {
|
||||
anchors.centerIn: parent
|
||||
font.pixelSize: 45
|
||||
font.bold: true
|
||||
color: "lightgoldenrodyellow"
|
||||
font.bold: true
|
||||
font.pixelSize: 45
|
||||
text: qsTr("Angebote")
|
||||
}
|
||||
MouseArea
|
||||
{
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
cursorShape: Qt.PointingHandCursor
|
||||
hoverEnabled: true
|
||||
|
||||
onPressed:
|
||||
{
|
||||
offerButton.color = "darkolivegreen"
|
||||
offerButton.border.width = 3
|
||||
offerButton.border.color = "skyblue"
|
||||
console.log("Angebote...")
|
||||
onExited: {
|
||||
offerButton.color = "darkslategray";
|
||||
offerButton.border.color = "steelblue";
|
||||
offerButton.border.width = 1;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
onHoveredChanged:
|
||||
{
|
||||
var w = offerButton.border.width === 3? 1: 3
|
||||
offerButton.border.width = w
|
||||
onPressed: {
|
||||
offerButton.color = "darkolivegreen";
|
||||
offerButton.border.width = 3;
|
||||
offerButton.border.color = "skyblue";
|
||||
console.log("Angebote...");
|
||||
}
|
||||
|
||||
onExited:
|
||||
{
|
||||
|
||||
offerButton.color = "darkslategray"
|
||||
offerButton.border.color = "steelblue"
|
||||
offerButton.border.width = 1
|
||||
onReleased: {
|
||||
offerButton.color = "darkslategray";
|
||||
offerButton.border.width = 1;
|
||||
offerButton.border.color = "steelblue";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
132
Gui/Navigation.qml
Normal file
132
Gui/Navigation.qml
Normal file
@@ -0,0 +1,132 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
ColumnLayout {
|
||||
height: parent.height
|
||||
spacing: 0
|
||||
|
||||
anchors {
|
||||
left: parent.left
|
||||
top: parent.top
|
||||
}
|
||||
ButtonGroup {
|
||||
id: buttonBar
|
||||
}
|
||||
BarButton {
|
||||
id: dashBoard
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
icon.source: "qrc:/images/dash.svg"
|
||||
text: qsTr("Dashboard")
|
||||
|
||||
onClicked: {
|
||||
appLoader.source = "Dashboard.qml";
|
||||
}
|
||||
}
|
||||
BarButton {
|
||||
id: kunden
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
icon.source: "qrc:/images/customer.svg"
|
||||
text: qsTr("Kunden")
|
||||
|
||||
onClicked: {
|
||||
appLoader.source = "CustomerTable.qml";
|
||||
}
|
||||
}
|
||||
BarButton {
|
||||
id: objekt
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
icon.source: "qrc:/images/object.svg"
|
||||
text: qsTr("Objekt")
|
||||
|
||||
onClicked: {
|
||||
appLoader.source = "ObjectTable.qml";
|
||||
}
|
||||
}
|
||||
BarButton {
|
||||
id: mitarbeiter
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
icon.source: "qrc:/images/employee.svg"
|
||||
text: qsTr("Mitarbeiter")
|
||||
|
||||
onClicked: {
|
||||
appLoader.source = "EmployeeTable.qml";
|
||||
}
|
||||
}
|
||||
BarButton {
|
||||
id: offers
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
icon.source: "qrc:/images/offer.svg"
|
||||
text: qsTr("Angebote")
|
||||
|
||||
onClicked: {
|
||||
appLoader.source = "OfferTable.qml";
|
||||
}
|
||||
}
|
||||
BarButton {
|
||||
id: abrechnung
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
icon.source: "qrc:/images/invoice.svg"
|
||||
text: qsTr("Abrechnung")
|
||||
}
|
||||
Item {
|
||||
id: hspacer
|
||||
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
BarButton {
|
||||
id: atajos
|
||||
|
||||
Layout.bottomMargin: Dimensions.s
|
||||
checkable: false
|
||||
flat: true
|
||||
icon.source: "qrc:/images/Bars3.svg"
|
||||
implicitHeight: 90
|
||||
implicitWidth: 90
|
||||
|
||||
onClicked: mainMenu.open()
|
||||
|
||||
Menu {
|
||||
id: mainMenu
|
||||
|
||||
MenuItem {
|
||||
text: qsTr("Einstellungen")
|
||||
|
||||
onTriggered: {
|
||||
// TODO: Check if logged-in user is admin first!!
|
||||
|
||||
appLoader.source = "PyqcrmConf.qml";
|
||||
}
|
||||
}
|
||||
MenuSeparator {
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Als PDF exportieren")
|
||||
}
|
||||
MenuSeparator {
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Drucken")
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Erweiterter Druck")
|
||||
|
||||
onTriggered: printerDialog.show()
|
||||
}
|
||||
MenuSeparator {
|
||||
}
|
||||
MenuItem {
|
||||
text: qsTr("Über PYQCRM")
|
||||
|
||||
onTriggered: readMeWin.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
Item {
|
||||
property var availableFilters: [""]
|
||||
anchors.fill: parent
|
||||
|
||||
StackView
|
||||
{
|
||||
id: objectsStack
|
||||
anchors.fill: parent
|
||||
initialItem: "ObjectsTable.qml"
|
||||
<<<<<<< HEAD
|
||||
anchors.topMargin: Dimensions.m
|
||||
=======
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
Item {
|
||||
property var availableFilters: [""]
|
||||
anchors.fill: parent
|
||||
|
||||
StackView
|
||||
{
|
||||
id: objectsStack
|
||||
anchors.fill: parent
|
||||
initialItem: "ObjectsTable.qml"
|
||||
<<<<<<< HEAD
|
||||
anchors.topMargin: Dimensions.m
|
||||
=======
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
Item {
|
||||
property var availableFilters: [""]
|
||||
|
||||
StackView
|
||||
{
|
||||
id: objectsStack
|
||||
anchors.fill: parent
|
||||
initialItem: "ObjectsTable.qml"
|
||||
anchors.margins: 9
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
Item {
|
||||
property var availableFilters: [""]
|
||||
|
||||
StackView
|
||||
{
|
||||
id: objectsStack
|
||||
anchors.fill: parent
|
||||
initialItem: "ObjectsTable.qml"
|
||||
anchors.topMargin: Dimensions.m
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
Item {
|
||||
property var availableFilters: [""]
|
||||
anchors.fill: parent
|
||||
|
||||
StackView
|
||||
{
|
||||
id: objectsStack
|
||||
anchors.fill: parent
|
||||
initialItem: "ObjectsTable.qml"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,257 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
<<<<<<< HEAD
|
||||
ColumnLayout
|
||||
{
|
||||
function viewCriterion(criterion)
|
||||
{
|
||||
business_model.viewCriterion(criterion.text);
|
||||
}
|
||||
function onObjectContactAdded(added)
|
||||
{
|
||||
console.log(added)
|
||||
if (added) object_model.viewCriterion("")
|
||||
}
|
||||
|
||||
anchors.fill: parent
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
contact_model.objectContactAdded.connect(onObjectContactAdded)
|
||||
objectsStack.pop()
|
||||
}
|
||||
RowLayout
|
||||
{
|
||||
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: addObjectBtn
|
||||
icon.source: "qrc:/images/PlusCircle.svg"
|
||||
text: qsTr("Objekt Hinzufügen")
|
||||
Layout.alignment: Qt.AlignRight
|
||||
onClicked: appLoader.source = "AddObject.qml"
|
||||
}
|
||||
=======
|
||||
ColumnLayout {
|
||||
spacing: Dimensions.l
|
||||
function onObjectContactAdded(added) {
|
||||
console.log(added);
|
||||
if (added)
|
||||
object_model.viewCriterion("");
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
contact_model.objectContactAdded.connect(onObjectContactAdded);
|
||||
objectsStack.pop();
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Dimensions.l
|
||||
|
||||
<<<<<<< HEAD
|
||||
ColumnLayout
|
||||
{
|
||||
id: tableColumn
|
||||
clip: true
|
||||
// anchors
|
||||
// {
|
||||
// top: searchBar.bottom
|
||||
// bottom: parent.bottom
|
||||
// left: parent.left
|
||||
// right: parent.right
|
||||
// topMargin: 15
|
||||
// }
|
||||
HorizontalHeaderView
|
||||
{
|
||||
=======
|
||||
SearchBar {
|
||||
}
|
||||
|
||||
Button {
|
||||
id: addObjectBtn
|
||||
Layout.alignment: Qt.AlignRight
|
||||
|
||||
icon.source: "qrc:/images/PlusCircle.svg"
|
||||
text: qsTr("Objekt Hinzufügen")
|
||||
|
||||
onClicked: appLoader.source = "AddObject.qml"
|
||||
}
|
||||
}
|
||||
ColumnLayout {
|
||||
id: tableColumn
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
Layout.verticalStretchFactor: 1
|
||||
|
||||
clip: true
|
||||
|
||||
HorizontalHeaderView {
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
id: horizontalHeaderview
|
||||
|
||||
Layout.fillWidth: true
|
||||
implicitHeight: 40
|
||||
movableColumns: true //@disable-check M16
|
||||
syncView: objectTable
|
||||
|
||||
delegate: Rectangle {
|
||||
Layout.fillWidth: true
|
||||
border.color: addObjectBtn.palette.base
|
||||
color: addObjectBtn.palette.alternateBase
|
||||
implicitHeight: 40
|
||||
implicitWidth: 1
|
||||
|
||||
Text {
|
||||
color: addObjectBtn.palette.text
|
||||
elide: Text.ElideRight
|
||||
height: parent.height
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
text: model.display
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
width: parent.width
|
||||
}
|
||||
}
|
||||
}
|
||||
TableView {
|
||||
id: objectTable
|
||||
|
||||
property real newWidth: 0
|
||||
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
alternatingRows: true
|
||||
columnSpacing: 1
|
||||
height: parent.height - horizontalHeaderview.height
|
||||
model: object_model
|
||||
resizableColumns: true // @disable-check M16
|
||||
rowSpacing: 2
|
||||
selectionBehavior: TableView.SelectRows
|
||||
z: 0
|
||||
|
||||
ScrollBar.vertical: ScrollBar {
|
||||
policy: objectTable.contentHeight > objectTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
|
||||
}
|
||||
delegate: Rectangle {
|
||||
required property bool current
|
||||
required property bool selected
|
||||
|
||||
color: selected ? addObjectBtn.palette.highlight
|
||||
: (objectTable.alternatingRows && row % 2 !== 0 ? addObjectBtn.palette.base
|
||||
: addObjectBtn.palette.alternateBase)
|
||||
|
||||
implicitHeight: 25
|
||||
implicitWidth: objectTable.width / objectTable.columns
|
||||
|
||||
Text {
|
||||
color: addObjectBtn.palette.text
|
||||
elide: Text.ElideRight
|
||||
height: parent.height
|
||||
leftPadding: 9 //@disable-check M16
|
||||
text: (model.display === null || model.display === undefined) ? "" : model.display
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
width: parent.width
|
||||
}
|
||||
MouseArea {
|
||||
id: mouseArea
|
||||
|
||||
property bool hovered: false
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
selectionModel: ItemSelectionModel {
|
||||
id: obmodel
|
||||
|
||||
model: objectTable.model
|
||||
}
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
|
||||
}
|
||||
Item
|
||||
{
|
||||
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
// function onObjectContactAdded(added)
|
||||
// {
|
||||
// console.log(added)
|
||||
// if (added) object_model.viewCriterion("")
|
||||
// }
|
||||
// function viewCriterion(criterion)
|
||||
// {
|
||||
// object_model.viewCriterion(criterion.text)
|
||||
// }
|
||||
|
||||
// Component.onCompleted:
|
||||
// {
|
||||
// contact_model.objectContactAdded.connect(onObjectContactAdded)
|
||||
// objectsStack.pop()
|
||||
// }
|
||||
|
||||
// function onObjectContactAdded(added)
|
||||
// {
|
||||
// console.log(added)
|
||||
// if (added) object_model.viewCriterion("")
|
||||
// }
|
||||
=======
|
||||
Item {
|
||||
Layout.fillWidth: true
|
||||
}
|
||||
}
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
|
||||
Item
|
||||
{
|
||||
anchors.fill: parent
|
||||
StackView
|
||||
{
|
||||
id: offersStack
|
||||
|
||||
anchors.fill: parent
|
||||
initialItem: "OffersTable.qml"
|
||||
<<<<<<< HEAD
|
||||
anchors.topMargin: Dimensions.m
|
||||
=======
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import Qt.labs.qmlmodels
|
||||
|
||||
<<<<<<< HEAD
|
||||
ColumnLayout
|
||||
{
|
||||
anchors.fill: parent
|
||||
function viewOffers(criterion)
|
||||
{
|
||||
//offer_model.viewCriterion(criterion)
|
||||
=======
|
||||
ColumnLayout {
|
||||
property var availableFilters: []
|
||||
|
||||
Layout.fillWidth: true
|
||||
anchors.fill: parent
|
||||
|
||||
RowLayout {
|
||||
spacing: Dimensions.l
|
||||
SearchBar {
|
||||
}
|
||||
}
|
||||
Item {
|
||||
Layout.fillHeight: true
|
||||
>>>>>>> 7f5675c06d72728a2249b66dc18d56221ad5a0c97791edbc86afeb57dcb3392d
|
||||
}
|
||||
|
||||
RowLayout
|
||||
{
|
||||
SearchBar
|
||||
{
|
||||
id:searchBar
|
||||
}
|
||||
QuickFilter
|
||||
{
|
||||
onSelectedChanged: (name) =>
|
||||
{
|
||||
business_model.viewCriterion(name)
|
||||
}
|
||||
|
||||
model: ListModel
|
||||
{
|
||||
ListElement
|
||||
{
|
||||
|
||||
name: "Alle"
|
||||
text: qsTr("Alle")
|
||||
selected: true
|
||||
}
|
||||
ListElement
|
||||
{
|
||||
name: "Offen"
|
||||
text: qsTr("Offen")
|
||||
selected: false
|
||||
}
|
||||
ListElement
|
||||
{
|
||||
name: "Abgeschlossen"
|
||||
text: qsTr("Abgeschlossen")
|
||||
selected: false
|
||||
}
|
||||
|
||||
ListElement
|
||||
{
|
||||
name: "Erledigt"
|
||||
text: qsTr("Erledigt")
|
||||
selected: false
|
||||
}
|
||||
}
|
||||
}
|
||||
Button
|
||||
{
|
||||
id: addOfferBtn
|
||||
text: qsTr("Angebote Hinzufügen")
|
||||
icon.source: "qrc:/images/PlusCircle.svg"
|
||||
Layout.alignment: Qt.AlignRight
|
||||
flat: true
|
||||
//onClicked: appLoader.source = "AddOffer.qml"
|
||||
}
|
||||
}
|
||||
Item {
|
||||
id: spacer
|
||||
Layout.fillHeight: true
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
270
Gui/TopBar.qml
270
Gui/TopBar.qml
@@ -1,270 +0,0 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
|
||||
ColumnLayout
|
||||
{
|
||||
id: topBar
|
||||
spacing: 0
|
||||
height: parent.height
|
||||
anchors
|
||||
{
|
||||
top: parent.top
|
||||
left: parent.left
|
||||
|
||||
|
||||
}
|
||||
ButtonGroup
|
||||
{
|
||||
id: buttonBar
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: dashBoard
|
||||
flat: true
|
||||
text: qsTr("Dashboard")
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
Layout.margins: 3
|
||||
Layout.topMargin: Dimensions.s
|
||||
icon.source: "qrc:/images/dash.svg"
|
||||
ButtonGroup.group: buttonBar
|
||||
// background: Rectangle
|
||||
// {
|
||||
// id: dashiBackie
|
||||
// border.width: dashBoard.activeFocus ? 2 : 1
|
||||
// border.color: "#888"
|
||||
// radius: 4
|
||||
// gradient: Gradient
|
||||
// {
|
||||
// GradientStop { position: 0 ; color: dashBoard.pressed ? "#000" : "#001" }
|
||||
// GradientStop { position: 1 ; color: dashBoard.pressed ? "#100" : "#000" }
|
||||
// }
|
||||
// }
|
||||
onClicked:
|
||||
{
|
||||
appLoader.source = "Dashboard.qml"
|
||||
|
||||
|
||||
// dashiBackie.border.width = 2
|
||||
// kundiBackie.border.width = 1
|
||||
// mitoBackie.border.width = 1
|
||||
// invoBackie.border.width = 1
|
||||
// objBackie.border.width = 1
|
||||
}
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: kunden
|
||||
flat: true
|
||||
text: qsTr("Kunden")
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
Layout.margins: 3
|
||||
icon.source: "qrc:/images/customer.svg"
|
||||
ButtonGroup.group: buttonBar
|
||||
// background: Rectangle
|
||||
// {
|
||||
// id: kundiBackie
|
||||
// border.width: kunden.activeFocus ? 2 : 1
|
||||
// border.color: "#888"
|
||||
// radius: 4
|
||||
// gradient: Gradient
|
||||
// {
|
||||
// GradientStop { position: 0 ; color: kunden.pressed ? "#000" : "#001" }
|
||||
// GradientStop { position: 1 ; color: kunden.pressed ? "#100" : "#000" }
|
||||
// }
|
||||
// }
|
||||
onClicked:
|
||||
{
|
||||
// TODO: here we should call the model
|
||||
appLoader.source = "CustomerTable.qml"
|
||||
// kundiBackie.border.width = 2
|
||||
// dashiBackie.border.width = 1
|
||||
// mitoBackie.border.width = 1
|
||||
// invoBackie.border.width = 1
|
||||
// objBackie.border.width = 1
|
||||
}
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: objekt
|
||||
flat: true
|
||||
text: qsTr("Objekt")
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
Layout.margins: 3
|
||||
icon.source: "qrc:/images/object.svg"
|
||||
ButtonGroup.group: buttonBar
|
||||
// background: Rectangle
|
||||
// {
|
||||
// id: objBackie
|
||||
// border.width: objekt.activeFocus ? 2 : 1
|
||||
// border.color: "#888"
|
||||
// radius: 4
|
||||
// gradient: Gradient
|
||||
// {
|
||||
// GradientStop { position: 0 ; color: objekt.pressed ? "#000" : "#001" }
|
||||
// GradientStop { position: 1 ; color: objekt.pressed ? "#100" : "#000" }
|
||||
// }
|
||||
// }
|
||||
onClicked:
|
||||
{
|
||||
appLoader.source = "ObjectTable.qml"
|
||||
// objBackie.border.width = 2
|
||||
// dashiBackie.border.width = 1
|
||||
// kundiBackie.border.width = 1
|
||||
// mitoBackie.border.width = 1
|
||||
// invoBackie.border.width = 1
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: mitarbeiter
|
||||
flat: true
|
||||
text: qsTr("Mitarbeiter")
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
Layout.margins: 3
|
||||
icon.source: "qrc:/images/employee.svg"
|
||||
|
||||
ButtonGroup.group: buttonBar
|
||||
// background: Rectangle
|
||||
// {
|
||||
// id: mitoBackie
|
||||
// border.width: mitarbeiter.activeFocus ? 2 : 1
|
||||
// border.color: "#888"
|
||||
// radius: 4
|
||||
// gradient: Gradient
|
||||
// {
|
||||
// GradientStop { position: 0 ; color: mitarbeiter.pressed ? "#000" : "#001" }
|
||||
// GradientStop { position: 1 ; color: mitarbeiter.pressed ? "#100" : "#000" }
|
||||
// }
|
||||
// }
|
||||
onClicked:
|
||||
{
|
||||
appLoader.source = "EmployeeTable.qml"
|
||||
// mitoBackie.border.width = 2
|
||||
// dashiBackie.border.width = 1
|
||||
// kundiBackie.border.width = 1
|
||||
// invoBackie.border.width = 1
|
||||
// objBackie.border.width = 1
|
||||
}
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: offers
|
||||
flat: true
|
||||
text: qsTr("Angebote")
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
Layout.margins: 3
|
||||
icon.source: "qrc:/images/offer.svg"
|
||||
ButtonGroup.group: buttonBar
|
||||
// background: Rectangle
|
||||
// {
|
||||
// id: offersBackie
|
||||
// border.width: offers.activeFocus ? 2 : 1
|
||||
// border.color: "#888"
|
||||
// radius: 4
|
||||
// gradient: Gradient
|
||||
// {
|
||||
// GradientStop { position: 0 ; color: offers.pressed ? "#000" : "#001" }
|
||||
// GradientStop { position: 1 ; color: offers.pressed ? "#100" : "#000" }
|
||||
// }
|
||||
// }
|
||||
onClicked:
|
||||
{
|
||||
appLoader.source = "OfferTable.qml"
|
||||
// mitoBackie.border.width = 2
|
||||
// dashiBackie.border.width = 1
|
||||
// kundiBackie.border.width = 1
|
||||
// invoBackie.border.width = 1
|
||||
// objBackie.border.width = 1
|
||||
// offersBackie.border.width = 1
|
||||
}
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: abrechnung
|
||||
flat: true
|
||||
text: qsTr("Abrechnung")
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
Layout.margins: 3
|
||||
icon.source: "qrc:/images/invoice.svg"
|
||||
ButtonGroup.group: buttonBar
|
||||
// background: Rectangle
|
||||
// {
|
||||
// id: invoBackie
|
||||
// border.width: abrechnung.activeFocus ? 2 : 1
|
||||
// border.color: "#888"
|
||||
// radius: 4
|
||||
// gradient: Gradient
|
||||
// {
|
||||
// GradientStop { position: 0 ; color: abrechnung.pressed ? "#000" : "#001" }
|
||||
// GradientStop { position: 1 ; color: abrechnung.pressed ? "#100" : "#000" }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
id: hspacer
|
||||
Layout.fillHeight: true
|
||||
}
|
||||
|
||||
BarButton
|
||||
{
|
||||
id: atajos
|
||||
implicitWidth: 90
|
||||
implicitHeight: 90
|
||||
checkable: false
|
||||
icon.source: "qrc:/images/Bars3.svg"
|
||||
|
||||
flat: true
|
||||
Layout.bottomMargin: Dimensions.s
|
||||
onClicked: mainMenu.open()
|
||||
|
||||
Menu {
|
||||
id: mainMenu
|
||||
MenuItem
|
||||
{
|
||||
//text: qsTr("Benutzer-Verwaltung")
|
||||
//onTriggered: appLoader.source = "UsersPage.qml"
|
||||
text: qsTr("Einstellungen")
|
||||
onTriggered:
|
||||
{
|
||||
// TODO: Check if logged-in user is admin first!!
|
||||
|
||||
appLoader.source = "PyqcrmConf.qml"
|
||||
}
|
||||
}
|
||||
MenuSeparator {}
|
||||
MenuItem { text: qsTr("Als PDF exportieren") }
|
||||
MenuSeparator {}
|
||||
MenuItem { text: qsTr("Drucken") }
|
||||
MenuItem
|
||||
{
|
||||
text: qsTr("Erweiterter Druck")
|
||||
onTriggered: printerDialog.show()
|
||||
}
|
||||
MenuSeparator {}
|
||||
MenuItem
|
||||
{
|
||||
text: qsTr("Über PYQCRM")
|
||||
onTriggered: readMeWin.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
219
Gui/main.qml
219
Gui/main.qml
@@ -4,173 +4,148 @@ import QtQuick.Controls
|
||||
import QtQuick.Dialogs
|
||||
import QtCore
|
||||
|
||||
ApplicationWindow
|
||||
{
|
||||
ApplicationWindow {
|
||||
id: appWindow
|
||||
width: Screen.width * .75
|
||||
height: Screen.height * .85
|
||||
visible: true
|
||||
title: "TERO Personal"
|
||||
font: Typography.body
|
||||
color: Colors.mantle
|
||||
|
||||
property string confile: ""
|
||||
property alias settingsFileDialog: settingsFiledialog
|
||||
|
||||
function goToLogin() {
|
||||
appLoader.source = "LoginScreen.qml";
|
||||
navigation.visible = true;
|
||||
}
|
||||
function showWindow(why) {
|
||||
if (why === 3) {
|
||||
systray.setVisible(false);
|
||||
appWindow.show();
|
||||
}
|
||||
}
|
||||
|
||||
color: Colors.mantle
|
||||
font: Typography.body
|
||||
height: Screen.height * .85
|
||||
palette.text: Colors.foreground
|
||||
title: "TERO Personal"
|
||||
visible: true
|
||||
width: Screen.width * .75
|
||||
|
||||
Component.onCompleted: {
|
||||
config.configurationReady.connect(goToLogin);
|
||||
systray.activated.connect(showWindow);
|
||||
|
||||
TopBar
|
||||
{
|
||||
id:topBar
|
||||
visible: bad_config || !db_con ? false: true
|
||||
if (bad_config) {
|
||||
importDialog.open();
|
||||
} else {
|
||||
if (db_con)
|
||||
appLoader.source = "LoginScreen.qml";
|
||||
else
|
||||
appLoader.source = "NoDbConnection.qml";
|
||||
}
|
||||
}
|
||||
onClosing: close => {
|
||||
if (false) {
|
||||
console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!");
|
||||
}
|
||||
}
|
||||
onVisibilityChanged: {
|
||||
if (appWindow.visibility === Window.Minimized && config.systray()) {
|
||||
systray.setVisible(true);
|
||||
appWindow.hide();
|
||||
}
|
||||
}
|
||||
onWindowStateChanged: windowState => {
|
||||
if (windowState !== Qt.WindowMinimized) {
|
||||
systray.setVisible(false);
|
||||
appWindow.show();
|
||||
}
|
||||
}
|
||||
|
||||
PrinterDialog
|
||||
{
|
||||
Navigation {
|
||||
id: navigation
|
||||
|
||||
visible: bad_config || !db_con ? false : true
|
||||
}
|
||||
PrinterDialog {
|
||||
id: printerDialog
|
||||
}
|
||||
|
||||
ReadMe
|
||||
{
|
||||
}
|
||||
ReadMe {
|
||||
id: readMeWin
|
||||
}
|
||||
|
||||
Item
|
||||
{
|
||||
}
|
||||
Item {
|
||||
id: mainView
|
||||
|
||||
}
|
||||
|
||||
Loader
|
||||
{
|
||||
id: appLoader
|
||||
|
||||
anchors
|
||||
{
|
||||
left: topBar.right
|
||||
Rectangle {
|
||||
id: contentBackground
|
||||
anchors {
|
||||
bottom: parent.bottom
|
||||
left: navigation.right
|
||||
right: parent.right
|
||||
top: parent.top
|
||||
bottom: parent.bottom
|
||||
|
||||
|
||||
|
||||
topMargin: Dimensions.l
|
||||
bottomMargin: Dimensions.l
|
||||
rightMargin: Dimensions.l
|
||||
leftMargin: Dimensions.l
|
||||
|
||||
}
|
||||
color: Colors.background
|
||||
}
|
||||
|
||||
Loader {
|
||||
id: appLoader
|
||||
|
||||
property alias window: appWindow
|
||||
|
||||
anchors {
|
||||
fill: contentBackground
|
||||
margins: Dimensions.l
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Dialog
|
||||
{
|
||||
Dialog {
|
||||
id: importDialog
|
||||
modal: true
|
||||
|
||||
anchors.centerIn: parent
|
||||
modal: true
|
||||
standardButtons: Dialog.Yes | Dialog.No
|
||||
onAccepted: settingsFiledialog.open()
|
||||
onRejected: appLoader.source= "Firststart.qml"
|
||||
title: qsTr("Einstellungen importieren")
|
||||
|
||||
onAccepted: settingsFiledialog.open()
|
||||
onRejected: appLoader.source = "Firststart.qml"
|
||||
}
|
||||
|
||||
FileDialog
|
||||
{
|
||||
|
||||
FileDialog {
|
||||
id: settingsFiledialog
|
||||
title: qsTr("PYQCRM Einstellungen")
|
||||
|
||||
currentFolder: StandardPaths.standardLocations(StandardPaths.DocumentsLocation)[0]
|
||||
modality: "ApplicationModal"
|
||||
nameFilters: [qsTr("PYQCRM Einstellungen (*.pyqrec)")]
|
||||
onAccepted:
|
||||
{
|
||||
exportFilePassword.open()
|
||||
confile = selectedFile
|
||||
title: qsTr("PYQCRM Einstellungen")
|
||||
|
||||
onAccepted: {
|
||||
exportFilePassword.open();
|
||||
confile = selectedFile;
|
||||
}
|
||||
}
|
||||
|
||||
Dialog
|
||||
{
|
||||
Dialog {
|
||||
id: exportFilePassword
|
||||
modal: true
|
||||
title: qsTr("PYQCRM Einstellungen")
|
||||
|
||||
anchors.centerIn: parent
|
||||
modal: true
|
||||
standardButtons: Dialog.Ok | Dialog.Cancel
|
||||
title: qsTr("PYQCRM Einstellungen")
|
||||
|
||||
onAccepted: config.importConfig(confile, exportPasswordInput.text)
|
||||
ColumnLayout
|
||||
{
|
||||
RowLayout
|
||||
{
|
||||
Label
|
||||
{
|
||||
|
||||
ColumnLayout {
|
||||
RowLayout {
|
||||
Label {
|
||||
text: qsTr("Passwort eingeben:")
|
||||
}
|
||||
|
||||
TextField
|
||||
{
|
||||
TextField {
|
||||
id: exportPasswordInput
|
||||
|
||||
echoMode: TextInput.Password
|
||||
implicitWidth: 300
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Component.onCompleted:
|
||||
{
|
||||
config.configurationReady.connect(goToLogin)
|
||||
systray.activated.connect(showWindow)
|
||||
|
||||
if(bad_config)
|
||||
{
|
||||
importDialog.open()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (db_con) appLoader.source= "LoginScreen.qml"
|
||||
else appLoader.source= "NoDbConnection.qml"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function showWindow(why)
|
||||
{
|
||||
if (why === 3)
|
||||
{
|
||||
systray.setVisible(false)
|
||||
appWindow.show()
|
||||
}
|
||||
}
|
||||
onVisibilityChanged:
|
||||
{
|
||||
if (appWindow.visibility === Window.Minimized && config.systray())
|
||||
{
|
||||
systray.setVisible(true)
|
||||
appWindow.hide()
|
||||
}
|
||||
}
|
||||
|
||||
onWindowStateChanged: (windowState) =>
|
||||
{
|
||||
if (windowState !== Qt.WindowMinimized)
|
||||
{
|
||||
systray.setVisible(false)
|
||||
appWindow.show()
|
||||
}
|
||||
}
|
||||
|
||||
onClosing: (close) =>
|
||||
{
|
||||
if (false)
|
||||
{
|
||||
console.log("Main window closed!! Was soll ich tun? kann ich mich beenden?!")
|
||||
}
|
||||
}
|
||||
|
||||
function goToLogin()
|
||||
{
|
||||
appLoader.source= "LoginScreen.qml"
|
||||
topBar.visible = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
module gui
|
||||
TopBar 1.0 TopBar.qml
|
||||
TopBar 1.0 Navigation.qml
|
||||
|
||||
Reference in New Issue
Block a user