various updates and changes, move admin widgets into different seperate dialogs
This commit is contained in:
357
src/ui/widgets/elsa_main.py
Normal file
357
src/ui/widgets/elsa_main.py
Normal file
@@ -0,0 +1,357 @@
|
||||
import os
|
||||
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.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.ui.dialogs import ElsaAddEntry
|
||||
from src.ui.widgets import FilePicker
|
||||
from src.ui.widgets import DataGraph
|
||||
|
||||
class ElsaDialog(QtWidgets.QDialog, Ui_Dialog):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setupUi(self)
|
||||
self.table_elsa_list.setContextMenuPolicy(
|
||||
QtCore.Qt.ContextMenuPolicy.CustomContextMenu
|
||||
)
|
||||
self.table_elsa_list.customContextMenuRequested.connect(self.elsa_context_menu)
|
||||
# elsa buttons
|
||||
Icon("semester", self.active_semester)
|
||||
Icon("today", self.elsa_date_today)
|
||||
self.create_frame_elsa.setEnabled(False)
|
||||
self.elsa_add_new.clicked.connect(self.add_new_elsa)
|
||||
self.elsa_cancel_create.clicked.connect(self.cancel_elsa_creation)
|
||||
self.elsa_save.clicked.connect(self.save_elsa)
|
||||
self.elsa_date_today.clicked.connect(self.generateTodayDateElsa)
|
||||
self.active_semester.clicked.connect(self.addSemester)
|
||||
self.elsa_update.clicked.connect(self.update_elsa)
|
||||
self.elsa_table.doubleClicked.connect(self.open_elsa)
|
||||
self.btn_add_document_elsa.clicked.connect(self.addDokumentElsa)
|
||||
self.check_file_elsa.clicked.connect(self.parseDokumentElsa)
|
||||
self.btn_open_document_elsa.clicked.connect(self.openDocumentElsa)
|
||||
self.quote_entry.clicked.connect(self.elsa_table_entry)
|
||||
self.quote_entry.setEnabled(False)
|
||||
|
||||
##Variables
|
||||
self.logger = MyLogger("ElsaDialog")
|
||||
self.db = Database()
|
||||
self.graph_data = {"x": [generateSemesterByDate()], "y": [0]}
|
||||
|
||||
self.loadFrame()
|
||||
# self.show()
|
||||
|
||||
def elsa_context_menu(self, position):
|
||||
menu = QtWidgets.QMenu()
|
||||
# TODO: add functions
|
||||
pass
|
||||
def elsa_table_entry(self):
|
||||
data = ElsaAddEntry()
|
||||
selected_row = self.table_elsa_list.currentRow()
|
||||
signature = self.table_elsa_list.item(selected_row, 10).text()
|
||||
mediatype = self.table_elsa_list.item(selected_row, 11).text()
|
||||
data.searchIdent.setText(signature)
|
||||
if mediatype == "Zeitschriftenaufsätze":
|
||||
data.btn_zs.click()
|
||||
elif mediatype == "Herausgeberwerke":
|
||||
data.btn_hg.click()
|
||||
elif mediatype == "Monographie":
|
||||
data.btn_mono.click()
|
||||
|
||||
data.exec()
|
||||
|
||||
def add_new_elsa(self):
|
||||
self.create_frame_elsa.setEnabled(True)
|
||||
self.elsa_cancel_create.setEnabled(True)
|
||||
self.dokument_list_elsa.setRowCount(0)
|
||||
profs = self.db.getProfs()
|
||||
for prof in profs:
|
||||
self.elsa_prof.addItem(f"{prof[3]}, {prof[2]}")
|
||||
self.elsa_prof.setCurrentText("")
|
||||
self.elsa_date.setText("")
|
||||
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"]
|
||||
|
||||
def cancel_elsa_creation(self):
|
||||
self.create_frame_elsa.setEnabled(False)
|
||||
self.elsa_cancel_create.setEnabled(False)
|
||||
self.elsa_prof.setCurrentText("")
|
||||
self.elsa_date.setText("")
|
||||
self.elsa_semester.setText("")
|
||||
self.dokument_list_elsa.setRowCount(0)
|
||||
self.table_elsa_list.setRowCount(0)
|
||||
self.quote_entry.setEnabled(False)
|
||||
self.elsa_save.setEnabled(False)
|
||||
self.elsa_update.setEnabled(False)
|
||||
def generateTodayDateElsa(self):
|
||||
self.elsa_date.setText(QDate.currentDate().toString("dd.MM.yyyy"))
|
||||
|
||||
def addSemester(self):
|
||||
self.elsa_semester.setText(generateSemesterByDate())
|
||||
|
||||
def update_elsa(self):
|
||||
prof = self.elsa_prof.currentText()
|
||||
date = self.elsa_date.text()
|
||||
semester = self.elsa_semester.text()
|
||||
elsa_id = self.db.getElsaId(prof, semester, date)
|
||||
if elsa_id is None:
|
||||
return
|
||||
self.db.updateElsaApparat(elsa_id, prof, semester, date)
|
||||
self.elsa_update.setEnabled(False)
|
||||
self.cancel_elsa_creation()
|
||||
|
||||
def save_elsa(self):
|
||||
if (
|
||||
self.elsa_prof.currentText() == ""
|
||||
or self.elsa_semester.text() == ""
|
||||
or self.elsa_date.text() == ""
|
||||
):
|
||||
# warning message
|
||||
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()
|
||||
|
||||
self.db.createElsaApparat(date, prof, semester)
|
||||
self.cancel_elsa_creation()
|
||||
self.refresh_elsa_table()
|
||||
self.elsa_prof.clear()
|
||||
self.elsa_prof.addItem(prof)
|
||||
self.quote_entry.setEnabled(False)
|
||||
|
||||
def refresh_elsa_table(self):
|
||||
self.elsa_table.setRowCount(0)
|
||||
elsa_apparats = self.db.getElsaApparats()
|
||||
for apparat in elsa_apparats:
|
||||
self.insert_elsa_into_table(apparat)
|
||||
|
||||
def insert_elsa_into_table(self, apparat):
|
||||
self.elsa_table.insertRow(0)
|
||||
date = apparat[1]
|
||||
semester = apparat[2]
|
||||
prof = 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))
|
||||
return (semester, 1)
|
||||
|
||||
def open_elsa(self):
|
||||
prof = self.elsa_table.item(self.elsa_table.currentRow(), 0).text()
|
||||
date = self.elsa_table.item(self.elsa_table.currentRow(), 1).text()
|
||||
semester = self.elsa_table.item(self.elsa_table.currentRow(), 2).text()
|
||||
self.elsa_update.setEnabled(True)
|
||||
self.elsa_save.setEnabled(False)
|
||||
if self.elsa_prof.currentText() == prof and date == self.elsa_date.text():
|
||||
self.logger.log_info("Same prof, stopping")
|
||||
return
|
||||
self.create_frame_elsa.setEnabled(True)
|
||||
self.dokument_list_elsa.setRowCount(0)
|
||||
self.table_elsa_list.setRowCount(0)
|
||||
self.elsa_cancel_create.setEnabled(True)
|
||||
# get elsa apparats, iterate over them and find the one where all matches
|
||||
elsa_apparats = self.db.getElsaApparats()
|
||||
elsa_id = None
|
||||
for apparat in elsa_apparats:
|
||||
if apparat[1] == date and apparat[2] == semester and apparat[3] == prof:
|
||||
elsa_id = apparat[0]
|
||||
# print(elsa_id)
|
||||
break
|
||||
self.elsa_date.setText(date)
|
||||
self.elsa_semester.setText(semester)
|
||||
self.elsa_prof.setCurrentText(prof)
|
||||
if elsa_id is None:
|
||||
return
|
||||
documents = self.db.getElsaFiles(elsa_id)
|
||||
for document in documents:
|
||||
# print(document)
|
||||
self.dokument_list_elsa.insertRow(0)
|
||||
self.dokument_list_elsa.setItem(
|
||||
0, 0, QtWidgets.QTableWidgetItem(document[0])
|
||||
)
|
||||
self.dokument_list_elsa.setItem(
|
||||
0, 1, QtWidgets.QTableWidgetItem(document[1])
|
||||
)
|
||||
self.dokument_list_elsa.setItem(0, 2, QtWidgets.QTableWidgetItem("❌"))
|
||||
self.dokument_list_elsa.setItem(
|
||||
0, 3, QtWidgets.QTableWidgetItem("Database")
|
||||
)
|
||||
scans = self.db.getElsaMedia(elsa_id)
|
||||
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)
|
||||
# self.cancel_elsa_creation()
|
||||
|
||||
def setElsaRow(self, scan):
|
||||
self.table_elsa_list.insertRow(0)
|
||||
self.table_elsa_list.setItem(
|
||||
0, 0, QtWidgets.QTableWidgetItem(scan["work_author"])
|
||||
)
|
||||
self.table_elsa_list.setItem(
|
||||
0, 1, QtWidgets.QTableWidgetItem(scan["section_author"])
|
||||
)
|
||||
self.table_elsa_list.setItem(0, 2, QtWidgets.QTableWidgetItem(scan["year"]))
|
||||
self.table_elsa_list.setItem(0, 3, QtWidgets.QTableWidgetItem(scan["issue"]))
|
||||
self.table_elsa_list.setItem(0, 4, QtWidgets.QTableWidgetItem(scan["edition"]))
|
||||
self.table_elsa_list.setItem(
|
||||
0, 5, QtWidgets.QTableWidgetItem(scan["work_title"])
|
||||
)
|
||||
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, 8, QtWidgets.QTableWidgetItem(scan["location"]))
|
||||
self.table_elsa_list.setItem(
|
||||
0, 9, QtWidgets.QTableWidgetItem(scan["publisher"])
|
||||
)
|
||||
self.table_elsa_list.setItem(
|
||||
0, 10, QtWidgets.QTableWidgetItem(scan["signature"])
|
||||
)
|
||||
self.table_elsa_list.setItem(0, 11, QtWidgets.QTableWidgetItem(scan["type"]))
|
||||
|
||||
def addDokumentElsa(self):
|
||||
# print("Add document")
|
||||
picker = FilePicker()
|
||||
files = picker.pick_files()
|
||||
datalist = []
|
||||
for file in files:
|
||||
data = {}
|
||||
# print(file)
|
||||
filename = file.split("/")[-1]
|
||||
filetype = filename.split(".")[-1]
|
||||
self.dokument_list_elsa.insertRow(0)
|
||||
self.dokument_list_elsa.setItem(0, 0, QtWidgets.QTableWidgetItem(filename))
|
||||
self.dokument_list_elsa.setItem(0, 1, QtWidgets.QTableWidgetItem(filetype))
|
||||
self.dokument_list_elsa.setItem(0, 2, QtWidgets.QTableWidgetItem("*"))
|
||||
self.dokument_list_elsa.setItem(0, 3, QtWidgets.QTableWidgetItem(file))
|
||||
# set tooltip of row 3 to the file path for each row
|
||||
self.dokument_list_elsa.item(0, 3).setToolTip(file)
|
||||
data["name"] = filename
|
||||
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()
|
||||
|
||||
def parseDokumentElsa(self):
|
||||
if self.dokument_list_elsa.rowCount() == 0:
|
||||
return
|
||||
else:
|
||||
# get the file path of the selected file based on it's row
|
||||
row = self.dokument_list_elsa.currentRow()
|
||||
file = self.dokument_list_elsa.item(row, 3).text()
|
||||
# print(file)
|
||||
if file == "Database":
|
||||
filename = self.dokument_list_elsa.item(row, 0).text()
|
||||
filetype = self.dokument_list_elsa.item(row, 1).text()
|
||||
|
||||
file = recreateElsaFile(
|
||||
filename=filename, filetype=filetype, open=False
|
||||
)
|
||||
# print(file)
|
||||
data, doctype = elsa_word_to_csv(file)
|
||||
elsa_id = self.db.getElsaId(
|
||||
self.elsa_prof.currentText(),
|
||||
self.elsa_semester.text(),
|
||||
self.elsa_date.text(),
|
||||
)
|
||||
for row in data:
|
||||
self.setElsaRow(row)
|
||||
|
||||
self.db.addElsaMedia(row, elsa_id)
|
||||
self.quote_entry.setEnabled(True)
|
||||
|
||||
def openDocumentElsa(self):
|
||||
# open the selected document
|
||||
row = self.dokument_list_elsa.currentRow()
|
||||
location = self.dokument_list_elsa.item(row, 3).text()
|
||||
filetype = self.dokument_list_elsa.item(row, 1).text()
|
||||
filename = self.dokument_list_elsa.item(row, 0).text()
|
||||
if location == "Database":
|
||||
recreateElsaFile(filename, filetype, open=True)
|
||||
else:
|
||||
os.system(f"{filename}")
|
||||
|
||||
def loadFrame(self):
|
||||
self.elsa_cancel_create.click()
|
||||
try:
|
||||
self.elsa_statistics.removeTab(1)
|
||||
except:
|
||||
self.logger.log_debug("No tab to remove")
|
||||
self.elsa_table.setRowCount(0)
|
||||
elsa_apparats = self.db.getElsaApparats()
|
||||
elsa_apparats = natsorted(elsa_apparats, key=lambda x: x[2], reverse=True)
|
||||
# x = semester, y = number of apparats
|
||||
|
||||
for apparat in elsa_apparats:
|
||||
# print(apparat)
|
||||
data = self.insert_elsa_into_table(apparat)
|
||||
semester = data[0]
|
||||
number = data[1]
|
||||
if semester not in self.graph_data["x"]:
|
||||
self.graph_data["x"].append(semester)
|
||||
self.graph_data["y"].append(number)
|
||||
else:
|
||||
index = self.graph_data["x"].index(semester)
|
||||
self.graph_data["y"][index] += number
|
||||
|
||||
generateMissing = True if len(self.graph_data["x"]) > 1 else False
|
||||
graph = DataGraph(
|
||||
"ELSA Apparate pro Semester",
|
||||
self.graph_data,
|
||||
generateMissing,
|
||||
"Anzahl der Apparate",
|
||||
)
|
||||
ic(self.graph_data)
|
||||
self.elsa_statistics_table.setRowCount(0)
|
||||
for i in range(len(self.graph_data["x"])):
|
||||
self.elsa_statistics_table.insertRow(0)
|
||||
self.elsa_statistics_table.setItem(
|
||||
0, 0, QtWidgets.QTableWidgetItem(self.graph_data["x"][i])
|
||||
)
|
||||
self.elsa_statistics_table.setItem(
|
||||
0, 1, QtWidgets.QTableWidgetItem(str(self.graph_data["y"][i]))
|
||||
)
|
||||
self.elsa_statistics.addTab(graph, "Graph")
|
||||
|
||||
def launch():
|
||||
app = QtWidgets.QApplication([])
|
||||
window = ElsaDialog()
|
||||
window.show()
|
||||
app.exec()
|
||||
Reference in New Issue
Block a user