From 7d78c09480e3bc99578fc64cc82ba0741337ac4d Mon Sep 17 00:00:00 2001 From: WorldTeacher Date: Tue, 10 Dec 2024 11:22:18 +0100 Subject: [PATCH] chore: bugfxes, featurework --- src/ui/widgets/elsa_main.py | 184 ++++++++++++++++++++++++++++-------- 1 file changed, 143 insertions(+), 41 deletions(-) diff --git a/src/ui/widgets/elsa_main.py b/src/ui/widgets/elsa_main.py index b002d8d..dae48d4 100644 --- a/src/ui/widgets/elsa_main.py +++ b/src/ui/widgets/elsa_main.py @@ -3,10 +3,11 @@ from natsort import natsorted from icecream import ic from .widget_sources.Ui_elsa_maindialog import Ui_Dialog from PyQt6 import QtCore, QtWidgets, QtGui +from PyQt6.QtGui import QRegularExpressionValidator from PyQt6.QtCore import QDate from src import Icon from src.backend import recreateElsaFile, generateSemesterByDate, Database -from src.logic import elsa_word_to_csv, MyLogger +from src.logic import elsa_word_to_csv, MyLogger, Prof from src.ui import popus_confirm from src.ui.dialogs import ElsaAddEntry from src.ui.widgets import FilePicker @@ -36,15 +37,78 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.btn_open_document_elsa.clicked.connect(self.openDocumentElsa) self.quote_entry.clicked.connect(self.elsa_table_entry) self.quote_entry.setEnabled(False) + self.newProf.hide() + Icon("person", self.prof_icon) + # validators + # prof mail + self.newProf_mail.setValidator( + QRegularExpressionValidator( + QtCore.QRegularExpression( + r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}" + ) + ) + ) + self.newProf_telnr.setValidator(QtGui.QIntValidator()) + self.newProf_telnr.setValidator( + QtGui.QRegularExpressionValidator(QtCore.QRegularExpression(r"^\d{3,14}")) + ) ##Variables self.logger = MyLogger("ElsaDialog") self.db = Database() self.graph_data = {"x": [generateSemesterByDate()], "y": [0]} - + self.createProf = False + + self.elsa_prof.addItems(self.getProfs()) + self.elsa_prof.addItem("") + self.elsa_prof.setCurrentText("") + # implement a check for the prof name. if name is not in list and has schema of lastname, firstname, show newProf frame + self.elsa_prof.currentTextChanged.connect(self.checkProf) + self.newProf_mail.textChanged.connect(self.checkProfData) + self.newProf_telnr.textChanged.connect(self.checkProfData) + self.newProf_title.textChanged.connect(self.checkProfData) + self.loadFrame() # self.show() - + + def checkProfData(self): + if ( + (self.newProf_mail.text() != "" and self.newProf_mail.hasAcceptableInput()) + and self.newProf_title.text() != "" + and ( + self.newProf_telnr.text() != "" + and self.newProf_telnr.hasAcceptableInput() + ) + ): + self.elsa_save.setEnabled(True) + self.elsa_save.setToolTip("") + else: + self.elsa_save.setEnabled(False) + self.elsa_save.setToolTip("Bitte erst Daten eingeben") + + def checkProf(self): + if ( + ", " in self.elsa_prof.currentText() + and self.elsa_prof.currentText() not in self.getProfs() + ): + self.newProf.show() + self.elsa_save.setEnabled(False) + self.elsa_save.setToolTip("Bitte erst Daten eingeben") + self.createProf = True + else: + self.newProf.hide() + self.createProf = False + self.elsa_save.setEnabled(True) + self.elsa_save.setToolTip("") + + def getProfs(self): + profs = self.db.getProfs() + profs = [f"{prof.lastname}, {prof.firstname}" for prof in profs] + + profs = list(set(profs)) + profs.sort() + return profs + def elsa_context_menu(self, position): menu = QtWidgets.QMenu() # TODO: add functions @@ -62,6 +126,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): elif mediatype == "Monografien": data.btn_mono.click() + data.search() data.exec() def add_new_elsa(self): @@ -69,7 +134,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.elsa_cancel_create.setEnabled(True) self.dokument_list_elsa.setRowCount(0) profs = self.db.getProfs() - profs = [f"{prof.lastname}, {prof.firstnameP}" for prof in profs] + profs = [f"{prof.lastname}, {prof.firstname}" for prof in profs] elsa_profs = self.db.getElsaProfs() profs.extend(elsa_profs) profs = list(set(profs)) @@ -81,9 +146,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.elsa_semester.setText("") self.elsa_save.setEnabled(True) self.elsa_update.setEnabled(False) - semester = generateSemesterByDate() - if semester in self.graph_data["x"]: - position = self.graph_data["x"] + self.elsa_prof.setFocus() def cancel_elsa_creation(self): self.create_frame_elsa.setEnabled(False) @@ -131,18 +194,48 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.confirm_popup("Bitte füllen Sie alle Felder aus", title="Fehler") return + prof = self.elsa_prof.currentText() semester = self.elsa_semester.text() date = self.elsa_date.text() - prof_id = self.db.getElsaProfId(prof) + profdata = Prof( + firstname=prof.split(", ")[1], + lastname=prof.split(", ")[0], + mail=self.newProf_mail.text(), + telnr=self.newProf_telnr.text(), + title=self.newProf_title.text(), + fullname=f"{prof.split(", ")[0]} {prof.split(", ")[1]}", + ) + prof_id = self.db.getProfId(profdata) + ic(profdata, prof_id) + if prof_id is None: - self.db.createElsaProf(prof) - prof_id = self.db.getElsaProfId(prof) - self.db.createElsaApparat(date, prof_id, semester) + self.db.createProf(profdata) + prof_id = self.db.getProfId(prof) + elsa_id = self.db.createElsaApparat( + date, + prof_id, + semester, + ) + + if self.dokument_list_elsa.rowCount() > 0: + files = [] + for i in range(self.dokument_list_elsa.rowCount()): + filename = self.dokument_list_elsa.item(i, 0).text() + filetype = self.dokument_list_elsa.item(i, 1).text() + file_path = self.dokument_list_elsa.item(i, 3).text() + file = {"name": filename, "path": file_path, "type": filetype} + files.append(file) + self.db.insertElsaFile( + files, + elsa_id, + ) self.cancel_elsa_creation() self.refresh_elsa_table() self.elsa_prof.clear() - self.elsa_prof.addItem(prof) + self.elsa_prof.addItems(self.getProfs()) + self.elsa_prof.addItem("") + self.elsa_prof.setCurrentText("") self.quote_entry.setEnabled(False) def refresh_elsa_table(self): @@ -155,7 +248,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.elsa_table.insertRow(0) date = apparat[1] semester = apparat[2] - prof = self.db.getElsaProf(apparat[3]) + prof = self.db.getProfNameById(apparat[3]) self.elsa_table.setItem(0, 0, QtWidgets.QTableWidgetItem(prof)) self.elsa_table.setItem(0, 1, QtWidgets.QTableWidgetItem(date)) self.elsa_table.setItem(0, 2, QtWidgets.QTableWidgetItem(semester)) @@ -186,7 +279,9 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.elsa_date.setText(date) self.elsa_semester.setText(semester) self.elsa_prof.setCurrentText(prof) + ic(elsa_id) if elsa_id is None: + log. return documents = self.db.getElsaFiles(elsa_id) for document in documents: @@ -206,12 +301,7 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): if scans == []: self.create_frame_elsa.setEnabled(True) - # print(scans) - # remove all rows from the table - for scan in scans: - # print("Inserting row") - # print(scan["type"]) self.setElsaRow(scan) self.quote_entry.setEnabled(True) @@ -234,7 +324,11 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.table_elsa_list.setItem( 0, 6, QtWidgets.QTableWidgetItem(scan["chapter_title"]) ) - self.table_elsa_list.setItem(0, 7, QtWidgets.QTableWidgetItem(scan["pages"])) + self.table_elsa_list.setItem( + 0, + 7, + QtWidgets.QTableWidgetItem(scan["pages"]), + ) self.table_elsa_list.setItem(0, 8, QtWidgets.QTableWidgetItem(scan["location"])) self.table_elsa_list.setItem( 0, 9, QtWidgets.QTableWidgetItem(scan["publisher"]) @@ -265,27 +359,27 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): data["path"] = file data["type"] = filetype datalist.append(data) - elsa_id = self.db.getElsaId( - self.elsa_prof.currentText(), - self.elsa_semester.text(), - self.elsa_date.text(), - ) - # print(elsa_id) - if elsa_id is None: - # create elsa - self.db.createElsaApparat( - self.elsa_date.text(), - self.elsa_prof.currentText(), - self.elsa_semester.text(), - ) - elsa_id = self.db.getElsaId( - self.elsa_prof.currentText(), - self.elsa_semester.text(), - self.elsa_date.text(), - ) - self.db.insertElsaFile(datalist, elsa_id) - self.elsa_save.setEnabled(False) - self.refresh_elsa_table() + # elsa_id = self.db.getElsaId( + # self.elsa_prof.currentText(), + # self.elsa_semester.text(), + # self.elsa_date.text(), + # ) + # # print(elsa_id) + # if elsa_id is None: + # # create elsa + # self.db.createElsaApparat( + # self.elsa_date.text(), + # self.elsa_prof.currentText(), + # self.elsa_semester.text(), + # ) + # elsa_id = self.db.getElsaId( + # self.elsa_prof.currentText(), + # self.elsa_semester.text(), + # self.elsa_date.text(), + # ) + # self.db.insertElsaFile(datalist, elsa_id) + # self.elsa_save.setEnabled(False) + # self.refresh_elsa_table() def parseDokumentElsa(self): if self.dokument_list_elsa.rowCount() == 0: @@ -310,7 +404,15 @@ class ElsaDialog(QtWidgets.QDialog, Ui_Dialog): self.elsa_date.text(), ) for row in data: - self.setElsaRow(row) + if ";" in row["pages"]: + count = row["pages"].split(";") + for i in range(len(count)): + row["pages"] = count[i] + self.setElsaRow( + row, + ) + else: + self.setElsaRow(row) self.db.addElsaMedia(row, elsa_id) self.quote_entry.setEnabled(True)