Files
pyqcrm/Gui/EmployeesTable.qml
2025-03-24 10:53:46 +01:00

198 lines
5.8 KiB
QML

import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import Qt.labs.qmlmodels
ColumnLayout {
property var availableFilters: ["Name", "Adresse", "PLZ", "Ort", "Status"]
function viewEmployees(criterion) {
employee_model.viewCriterion(criterion, showProcessed.checked, showFired.checked, showEveryone.checked);
}
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
Layout.alignment: Qt.AlignRight
icon.source: "qrc:/images/PlusCircle.svg"
text: qsTr("Mitarbeiter Hinzufügen")
onClicked: appLoader.source = "AddApplicant.qml"
}
}
RowLayout {
id: viewCriterion
CheckBox {
id: showEveryone
checked: true
text: qsTr("Alle Stati")
onCheckedChanged: {
showFired.checked = false;
showProcessed.checked = false;
}
onClicked: viewEmployees(criterion.checkedButton.text)
}
CheckBox {
id: showProcessed
checked: false
enabled: !showEveryone.checked
text: qsTr("Erledigt")
onClicked: {
showFired.checked = false;
viewEmployees(criterion.checkedButton.text);
}
}
CheckBox {
id: showFired
checked: false
enabled: !showEveryone.checked
text: qsTr("Ausgeschieden")
onClicked: {
showProcessed.checked = false;
viewEmployees(criterion.checkedButton.text);
}
}
}
ColumnLayout {
id: tableParent
Layout.fillWidth: true
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
clip: true
HorizontalHeaderView {
id: employeeTableHeader
Layout.fillWidth: true
width: tableParent.width
implicitHeight: 40
movableColumns: true //@disable-check M16
syncView: appliEmpTable
delegate: Rectangle {
Layout.fillWidth: true
border.color: palette.base
color: addEmployeeBtn.palette.alternateBase
implicitHeight: 40
implicitWidth: 1
Text {
color: palette.text
elide: Text.ElideRight
height: parent.height
horizontalAlignment: Text.AlignHCenter
text: model.display
verticalAlignment: Text.AlignVCenter
width: parent.width
}
}
}
TableView {
id: appliEmpTable
Layout.fillWidth: true
Layout.fillHeight: true
Layout.verticalStretchFactor: 1
columnSpacing: 1
height: tableParent.height - employeeTableHeader.height
model: employee_model
resizableColumns: true
rowSpacing: 2
selectionBehavior: TableView.SelectRows
ScrollBar.vertical: ScrollBar {
policy: appliEmpTable.contentHeight > appliEmpTable.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
}
delegate: Rectangle {
required property bool current
required property bool selected
color: selected ? addEmployeeBtn.palette.highlight //palette.highlight
: (appliEmpTable.alternatingRows && row % 2 !== 0 ? addEmployeeBtn.palette.base // palette.base
: addEmployeeBtn.palette.alternateBase) //palette.alternateBase)
implicitHeight: 25
implicitWidth: appliEmpTable.width / appliEmpTable.columns
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 {
id: mouseArea
property bool hovered: false
anchors.fill: parent
hoverEnabled: true
onDoubleClicked: {
employeesStack.push("EmployeeDetails.qml", {
selectedEmployee: row
});
}
onEntered: {
appliEmpTable.selectionModel.select(appliEmpTable.model.index(row, 0), ItemSelectionModel.SelectCurrent | ItemSelectionModel.Rows);
}
}
}
selectionModel: ItemSelectionModel {
id: selModel
model: appliEmpTable.model
}
}
Item {
Layout.fillWidth: true
}
}
}