from PySide6.QtCore import QAbstractTableModel, QModelIndex, Qt, Slot, Signal from .EmployeeDAO import EmployeeDAO from ..PyqcrmFlags import PyqcrmFlags, PyqcrmAppliEmpyFlags from ..ConfigLoader import ConfigLoader import re class EmployeeModel(QAbstractTableModel): __data = None __employee_dao = None __visible_index = None __visible_columns = None __col_name = "" __employee_dao = None __col_skip = 2 __everyone = True def __init__(self): super().__init__() self.__employee_dao = EmployeeDAO() self.__employee_dao.newEmployeeAdded.connect(self.__refreshView) self.__conf = ConfigLoader().getConfig() self.__key = self.__conf['pyqcrm']['ENCRYPTION_KEY'] print(self.__key) self.__getData() @Slot(dict, bool) def addEmployee(self, new_employee, applicant = True): new_employee['worklicense'] = int(new_employee['worklicense']) new_employee['residencetype'] = int(new_employee['residencetype']) self.__employee_dao.addEmployee(new_employee, self.__key, applicant) @Slot(str) def viewCriterion(self, criterion, processed = False, fired = False): self.__getData(criterion, processed, fired) @Slot() def __refreshView(self): self.__getData() def __getData(self, criterion = "Alle", processed = False, fired = False, every_state = True): self.beginResetModel() rows, self.__visible_columns = self.__employee_dao.getEmployees(self.__key, criterion, processed, fired, every_state) self.__data = rows self.endResetModel() def rowCount(self, parent= QModelIndex()): return len (self.__data) def columnCount(self, parent= QModelIndex()): return len(self.__visible_columns) - self.__col_skip @Slot(str, bool, bool, bool) def viewCriterion(self, criterion, processed, fired, every_state): self.__everyone = True if criterion == 'Alle' else False if self.__everyone and criterion != "Alle": self.__col_skip = 2 else: self.__col_skip = 2 self.__getData(criterion, processed, fired, every_state) def data(self, index, role= Qt.DisplayRole): if role == Qt.DisplayRole: row = self.__data[index.row()] applicant_col = index.column() + self.__col_skip tr = row[applicant_col] #if type(row[index.column() + 2]) is str else str(row[index.column() + 2], "utf-8") if applicant_col == 2 and self.__everyone: tr = 'Ja' if tr == 1 else 'Nein' else: tr = re.sub("Keine Angabe ","", tr) #print(f"Data: {tr}") # return row[index.column() + 2] return tr return None def headerData(self, section, orientation, role = Qt.DisplayRole): if orientation == Qt.Horizontal and role == Qt.DisplayRole: self.__col_name = self.__visible_columns[section + self.__col_skip] return self.__col_name return super().headerData(section, orientation, role) @Slot(int) def onRowClicked(self, row): #print(self.__data) print(f"Selected table row: {row}, corresponding DB ID: {self.__data[row][0]}") #if not self.__employee_dict['employee'] or self.__data[row][0] != self.__employee_dict['employee']['id']: #self.__employee = self.__employee_dao.getEmployee(self.__data[row][0], self.__key) #print(self.__business) #self.__getEmployeeInfo() # self.__getContactInfo() # print(self.__business_dict)