156 lines
5.7 KiB
Python
156 lines
5.7 KiB
Python
from natsort import natsorted
|
|
from PySide6 import QtWidgets
|
|
|
|
from src import Icon
|
|
from src.database import Database
|
|
from src.core.models import Semester
|
|
from src.utils.richtext import SemapSchilder, SemesterDocument
|
|
|
|
from .dialog_sources.documentprint_ui import Ui_Dialog
|
|
|
|
|
|
class DocumentPrintDialog(QtWidgets.QDialog, Ui_Dialog):
|
|
def __init__(self, parent=None):
|
|
super().__init__(parent)
|
|
self.setupUi(self)
|
|
self.setWindowIcon(Icon("print").icon)
|
|
self.frame.hide()
|
|
|
|
self.semester = Semester()
|
|
|
|
self.db = Database()
|
|
|
|
self.insert_table_data()
|
|
self.expertMode.clicked.connect(self.enable_expert_mode)
|
|
# Ensure the signal is connected only once
|
|
try:
|
|
self.pushButton_2.clicked.disconnect()
|
|
except (TypeError, RuntimeWarning):
|
|
pass # Signal was not connected before
|
|
self.pushButton_2.clicked.connect(self.on_pushButton_2_clicked)
|
|
|
|
try:
|
|
self.pushButton.clicked.disconnect()
|
|
except (TypeError, RuntimeWarning):
|
|
pass
|
|
self.pushButton.clicked.connect(self.on_pushButton_clicked)
|
|
|
|
try:
|
|
self.btn_load_current_apparats.clicked.disconnect()
|
|
except (TypeError, RuntimeWarning):
|
|
pass
|
|
self.btn_load_current_apparats.clicked.connect(self.load_current_clicked)
|
|
|
|
try:
|
|
self.manualCheck.clicked.disconnect()
|
|
except (TypeError, RuntimeWarning):
|
|
pass
|
|
self.manualCheck.clicked.connect(self.manual_request)
|
|
|
|
def manual_request(self):
|
|
self.tableWidget.setRowCount(0)
|
|
request_text = self.textBrowser.toPlainText()
|
|
data = self.db.query_db(request_text)
|
|
apparats: list[str] = []
|
|
if not data:
|
|
self.tableWidget.setRowCount(0)
|
|
return
|
|
for row in data:
|
|
apparats.append(f"{row[0]}")
|
|
|
|
self.tableWidget.setHorizontalHeaderLabels(["", "Semesterapparat"])
|
|
self.tableWidget.setColumnWidth(0, 50)
|
|
for entry in apparats:
|
|
# insert the entry, column 1 should be a checkbox, column 2 the data
|
|
self.tableWidget.insertRow(0)
|
|
self.tableWidget.setItem(0, 0, QtWidgets.QTableWidgetItem(""))
|
|
checkbox = QtWidgets.QCheckBox()
|
|
|
|
self.tableWidget.setCellWidget(0, 0, checkbox)
|
|
|
|
self.tableWidget.setItem(0, 1, QtWidgets.QTableWidgetItem(entry))
|
|
# align row 0 column 0 to center
|
|
|
|
def load_current_clicked(self):
|
|
entries = self.get_valid_apparats_for_signs()
|
|
self.tableWidget.setHorizontalHeaderLabels(["", "Semesterapparat"])
|
|
self.tableWidget.setColumnWidth(0, 50)
|
|
self.tableWidget.setRowCount(0)
|
|
for entry in entries:
|
|
# insert the entry, column 1 should be a checkbox, column 2 the data
|
|
self.tableWidget.insertRow(0)
|
|
self.tableWidget.setItem(0, 0, QtWidgets.QTableWidgetItem(""))
|
|
checkbox = QtWidgets.QCheckBox()
|
|
|
|
self.tableWidget.setCellWidget(0, 0, checkbox)
|
|
|
|
self.tableWidget.setItem(0, 1, QtWidgets.QTableWidgetItem(entry))
|
|
|
|
def enable_expert_mode(self):
|
|
# if self.exportMode.
|
|
if self.expertMode.isChecked():
|
|
self.frame.show()
|
|
self.expertMode.setText("Expertenmodus deaktivieren")
|
|
else:
|
|
self.frame.hide()
|
|
self.expertMode.setText("Expertenmodus aktivieren")
|
|
|
|
def on_pushButton_2_clicked(self):
|
|
# get the checked items from the table
|
|
checked_items = []
|
|
for i in range(self.tableWidget.rowCount()):
|
|
checkbox = self.tableWidget.cellWidget(i, 0)
|
|
if isinstance(checkbox, QtWidgets.QCheckBox) and checkbox.isChecked():
|
|
item = self.tableWidget.item(i, 1)
|
|
if item is not None:
|
|
checked_items.append(item.text())
|
|
document = SemapSchilder(checked_items)
|
|
document.send
|
|
|
|
def on_pushButton_clicked(self):
|
|
apparats: list[tuple[int, str]] = []
|
|
apps = self.db.getAllAparats(0)
|
|
apps = natsorted(apps, key=lambda x: x.appnr, reverse=True)
|
|
for app in apps:
|
|
prof = self.db.getProfById(app.prof_id)
|
|
data = (app.appnr, f"{prof.lastname} ({app.name})")
|
|
apparats.append(data)
|
|
SemesterDocument(
|
|
semester=self.semester.value,
|
|
filename="Semesterapparat",
|
|
full=True,
|
|
apparats=apparats,
|
|
)
|
|
|
|
def insert_table_data(self):
|
|
entries = self.get_valid_apparats_for_signs()
|
|
self.tableWidget.setHorizontalHeaderLabels(["", "Semesterapparat"])
|
|
self.tableWidget.setColumnWidth(0, 50)
|
|
for entry in entries:
|
|
# insert the entry, column 1 should be a checkbox, column 2 the data
|
|
self.tableWidget.insertRow(0)
|
|
self.tableWidget.setItem(0, 0, QtWidgets.QTableWidgetItem(""))
|
|
checkbox = QtWidgets.QCheckBox()
|
|
|
|
self.tableWidget.setCellWidget(0, 0, checkbox)
|
|
|
|
self.tableWidget.setItem(0, 1, QtWidgets.QTableWidgetItem(entry))
|
|
# align row 0 column 0 to center
|
|
|
|
def get_valid_apparats_for_signs(self):
|
|
this_sem = self.db.query_db(
|
|
query="SELECT prof.lname || ' (' || semesterapparat.name || ')' AS formatted_result from semesterapparat INNER JOIN prof ON semesterapparat.prof_id = prof.id WHERE (erstellsemester = ? OR erstellsemester = ?) AND semesterapparat.deletion_status=0",
|
|
args=(str(self.semester.value), str(self.semester.previous)),
|
|
)
|
|
apparats: list[str] = []
|
|
for row in this_sem:
|
|
apparats.append(f"{row[0]}")
|
|
return apparats
|
|
|
|
|
|
def launch():
|
|
app = QtWidgets.QApplication([])
|
|
dialog = DocumentPrintDialog()
|
|
dialog.show()
|
|
app.exec()
|