Fix Mitarbeiter Table

This commit is contained in:
Yuri Becker
2025-03-24 10:53:46 +01:00
parent 721232a975
commit 480dd673c4
5 changed files with 151 additions and 184 deletions

View File

@@ -6,7 +6,6 @@ import Qt.labs.qmlmodels
Item { Item {
anchors.fill: parent anchors.fill: parent
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"] property var availableFilters: ["Name", "Adresse", "PLZ", "Ort"]
id: test
StackView StackView
{ {

View File

@@ -4,11 +4,9 @@ import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
ColumnLayout { ColumnLayout {
function viewCriterion(criterion) {
business_model.viewCriterion(criterion.text);
}
anchors.fill: parent anchors.fill: parent
spacing: Dimensions.l
Component.onCompleted: customersStack.pop() Component.onCompleted: customersStack.pop()
@@ -32,22 +30,22 @@ ColumnLayout {
selected: true selected: true
} }
ListElement { ListElement {
name: "showProvider" name: "Interessent"
text: qsTr("Interessent") text: qsTr("Interessent")
selected: false selected: false
} }
ListElement { ListElement {
name: "showClientele" name: "Kunde"
text: qsTr("Kunde") text: qsTr("Kunde")
selected: false selected: false
} }
ListElement { ListElement {
name: "showProvider" name: "Lieferant"
text: qsTr("Lieferant") text: qsTr("Lieferant")
selected: false selected: false
} }
ListElement { ListElement {
name: "showFinished" name: "Erledigt"
text: qsTr("Erledigt") text: qsTr("Erledigt")
selected: false selected: false
} }

View File

@@ -3,16 +3,14 @@ import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
Item {
anchors.fill: parent
Item StackView {
{
StackView
{
id: employeesStack id: employeesStack
anchors.fill: parent anchors.fill: parent
initialItem: "EmployeesTable.qml" initialItem: "EmployeesTable.qml"
} }
} }

View File

@@ -3,222 +3,195 @@ import QtQuick.Layouts
import QtQuick.Controls import QtQuick.Controls
import Qt.labs.qmlmodels import Qt.labs.qmlmodels
Item ColumnLayout {
{
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort", "Status"] property var availableFilters: ["Name", "Adresse", "PLZ", "Ort", "Status"]
SearchBar function viewEmployees(criterion) {
{ employee_model.viewCriterion(criterion, showProcessed.checked, showFired.checked, showEveryone.checked);
id:searchBar
anchors.margins: 9
} }
Button anchors.fill: parent
{ spacing: Dimensions.s
Component.onCompleted: employeesStack.pop()
RowLayout {
Layout.fillWidth: true
Layout.horizontalStretchFactor: 1
spacing: Dimensions.l
SearchBar {
}
QuickFilter {
model: ListModel {
ListElement {
name: "Alle"
selected: true
text: qsTr("Alle")
}
ListElement {
name: "Bewerber"
selected: false
text: qsTr("Bewerber")
}
ListElement {
name: "Mitarbeiter"
text: qsTr("Mitarbeiter")
}
}
onSelectedChanged: name => {
viewEmployees(name);
}
}
Button {
id: addEmployeeBtn id: addEmployeeBtn
text: qsTr("Mitarbeiter Hinzufügen")
Layout.alignment: Qt.AlignRight
icon.source: "qrc:/images/PlusCircle.svg" icon.source: "qrc:/images/PlusCircle.svg"
anchors.right: parent.right text: qsTr("Mitarbeiter Hinzufügen")
flat: true
onClicked: appLoader.source = "AddApplicant.qml" onClicked: appLoader.source = "AddApplicant.qml"
} }
ButtonGroup
{
id: criterion
// buttons: criterion.children
onClicked:
{
viewEmployees(criterion.checkedButton.text)
} }
} RowLayout {
ColumnLayout
{
id: tableParent
clip: true
anchors
{
top: searchBar.bottom
bottom: parent.bottom
left: parent.left
right: parent.right
}
RowLayout
{
id: viewCriterion id: viewCriterion
RadioButton CheckBox {
{
//id: showAll
checked: true
text: qsTr("Alle")
ButtonGroup.group: criterion
//onClicked: viewEmployees(showAll)
}
RadioButton
{
//id: showApplicant
text: qsTr("Bewerber")
ButtonGroup.group: criterion
//onClicked: viewEmployees(showApplicant)
}
RadioButton
{
//id: showEmployee
text: qsTr("Mitarbeiter")
ButtonGroup.group: criterion
//onClicked: viewEmployees(showEmployee)
}
CheckBox
{
id: showEveryone id: showEveryone
text: qsTr("Alle Stati")
checked: true checked: true
text: qsTr("Alle Stati")
onCheckedChanged: {
showFired.checked = false;
showProcessed.checked = false;
}
onClicked: viewEmployees(criterion.checkedButton.text) onClicked: viewEmployees(criterion.checkedButton.text)
onCheckedChanged:
{
showFired.checked = false
showProcessed.checked = false
} }
} CheckBox {
CheckBox
{
id: showProcessed id: showProcessed
checked: false
enabled: !showEveryone.checked
text: qsTr("Erledigt") text: qsTr("Erledigt")
enabled: !showEveryone.checked
checked: false onClicked: {
onClicked: showFired.checked = false;
{ viewEmployees(criterion.checkedButton.text);
showFired.checked = false
viewEmployees(criterion.checkedButton.text)
} }
} }
CheckBox CheckBox {
{
id: showFired id: showFired
text: qsTr("Ausgeschieden")
enabled: !showEveryone.checked
checked: false checked: false
onClicked: enabled: !showEveryone.checked
{ text: qsTr("Ausgeschieden")
showProcessed.checked = false
viewEmployees(criterion.checkedButton.text)
}
}
onClicked: {
showProcessed.checked = false;
viewEmployees(criterion.checkedButton.text);
} }
}
HorizontalHeaderView }
{ ColumnLayout {
id: employeeTableHeader id: tableParent
Layout.fillWidth: true Layout.fillWidth: true
syncView: appliEmpTable Layout.fillHeight: true
Layout.verticalStretchFactor: 1
clip: true
HorizontalHeaderView {
id: employeeTableHeader
Layout.fillWidth: true
width: tableParent.width
implicitHeight: 40 implicitHeight: 40
movableColumns: true //@disable-check M16 movableColumns: true //@disable-check M16
delegate: Rectangle syncView: appliEmpTable
{
color: addEmployeeBtn.palette.alternateBase delegate: Rectangle {
border.color: palette.base
implicitHeight: 40
Layout.fillWidth: true Layout.fillWidth: true
border.color: palette.base
color: addEmployeeBtn.palette.alternateBase
implicitHeight: 40
implicitWidth: 1 implicitWidth: 1
Text
{ Text {
text: model.display color: palette.text
elide: Text.ElideRight elide: Text.ElideRight
width: parent.width
height: parent.height height: parent.height
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
text: model.display
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
color: palette.text width: parent.width
} }
} }
} }
TableView {
TableView
{
id: appliEmpTable id: appliEmpTable
//Layout.fillHeight: true
height: tableParent.height - (viewCriterion.height + employeeTableHeader.height)
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
columnSpacing: 1 columnSpacing: 1
rowSpacing: 2 height: tableParent.height - employeeTableHeader.height
alternatingRows: true
resizableColumns: true
model: employee_model model: employee_model
resizableColumns: true
rowSpacing: 2
selectionBehavior: TableView.SelectRows selectionBehavior: TableView.SelectRows
ScrollBar.vertical: ScrollBar ScrollBar.vertical: ScrollBar {
{
policy: appliEmpTable.contentHeight > appliEmpTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff policy: appliEmpTable.contentHeight > appliEmpTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
} }
delegate: Rectangle {
selectionModel: ItemSelectionModel
{
id: selModel
model: appliEmpTable.model
}
delegate:Rectangle
{
required property bool selected
required property bool current required property bool current
implicitWidth: appliEmpTable.width / appliEmpTable.columns required property bool selected
implicitHeight: 25
color: selected color: selected ? addEmployeeBtn.palette.highlight //palette.highlight
? addEmployeeBtn.palette.highlight //palette.highlight : (appliEmpTable.alternatingRows && row % 2 !== 0 ? addEmployeeBtn.palette.base // palette.base
: (appliEmpTable.alternatingRows && row % 2 !== 0
? addEmployeeBtn.palette.base // palette.base
: addEmployeeBtn.palette.alternateBase) //palette.alternateBase) : addEmployeeBtn.palette.alternateBase) //palette.alternateBase)
Text implicitHeight: 25
{ implicitWidth: appliEmpTable.width / appliEmpTable.columns
text: (model.display === null || model.display === undefined)? "": model.display
elide: Text.ElideRight Text {
width: parent.width
height: parent.height
verticalAlignment: Text.AlignVCenter
leftPadding: 9 //@d isable-check M16
color: palette.text color: palette.text
elide: Text.ElideRight
height: parent.height
leftPadding: 9 //@d isable-check M16
text: (model.display === null || model.display === undefined) ? "" : model.display
verticalAlignment: Text.AlignVCenter
width: parent.width
} }
MouseArea {
MouseArea
{
id: mouseArea id: mouseArea
property bool hovered:false
property bool hovered: false
anchors.fill: parent anchors.fill: parent
hoverEnabled: true hoverEnabled: true
onDoubleClicked: onDoubleClicked: {
{ employeesStack.push("EmployeeDetails.qml", {
employeesStack.push("EmployeeDetails.qml", {selectedEmployee: row}); selectedEmployee: row
} });
onEntered:
{
appliEmpTable.selectionModel.select(appliEmpTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows)
} }
onEntered: {
appliEmpTable.selectionModel.select(appliEmpTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows);
}
}
}
selectionModel: ItemSelectionModel {
id: selModel
model: appliEmpTable.model
} }
} }
} Item {
Item
{
Layout.fillWidth: true Layout.fillWidth: true
} }
} }
function viewEmployees(criterion)
{
employee_model.viewCriterion(criterion, showProcessed.checked, showFired.checked, showEveryone.checked)
}
Component.onCompleted: employeesStack.pop()
} }

View File

@@ -146,8 +146,7 @@ GridLayout
} }
TextField TextField
{ {id: gesamtnetto
id: gesamtnetto
Layout.fillWidth: true Layout.fillWidth: true
Layout.columnSpan: 3 Layout.columnSpan: 3
} }