EXPERIMENTAL: switch from PyQt6 to PySide6

This commit is contained in:
WorldTeacher
2024-02-22 21:20:57 +01:00
parent 6d1119783f
commit d6a9868640
37 changed files with 326 additions and 226 deletions

View File

@@ -1,21 +1,23 @@
import sqlite3
import threading
import time
from PyQt6.QtCore import QThread, pyqtSignal
from icecream import ic
from PySide6.QtCore import QThread, Signal
from src.backend.database import Database
from src.logic.log import MyLogger
from src.transformers import RDS_AVAIL_DATA
from src.logic.webrequest import BibTextTransformer, WebRequest
import sqlite3
from icecream import ic
from src.transformers import RDS_AVAIL_DATA
class BookGrabber(QThread):
updateSignal = pyqtSignal(int, int)
done = pyqtSignal()
def __init__(self,app_id, prof_id, mode, data, parent=None):
super(BookGrabber, self).__init__(parent = None)
self.is_Running = True
updateSignal = Signal(int, int)
done = Signal()
def __init__(self, app_id, prof_id, mode, data, parent=None):
super(BookGrabber, self).__init__(parent=None)
self.is_Running = True
self.logger = MyLogger("Worker")
self.logger.log_info("Starting worker thread")
self.data = data
@@ -26,16 +28,14 @@ class BookGrabber(QThread):
self.state = (self.app_id, self.prof_id, self.mode, self.data)
ic(self.state)
time.sleep(2)
# def resetValues(self):
# self.app_id = None
# self.prof_id = None
# self.mode = None
# self.data = None
# self.book_id = None
def run(self):
while self.is_Running:
self.db = Database()
@@ -64,7 +64,7 @@ class BookGrabber(QThread):
for rds_item in rds.items:
sign = rds_item.superlocation
loc = rds_item.location
ic(sign,loc)
ic(sign, loc)
ic(rds_item)
if self.app_id in sign or self.app_id in loc:
state = 1
@@ -94,13 +94,15 @@ class BookGrabber(QThread):
self.stop()
if not self.is_Running:
break
def stop(self):
self.is_Running = False
class AvailChecker(QThread):
updateSignal = pyqtSignal(str, int)
updateProgress = pyqtSignal(int,int)
updateSignal = Signal(str, int)
updateProgress = Signal(int, int)
def __init__(
self, links: list = None, appnumber: int = None, parent=None, books=list[dict]
):
@@ -119,8 +121,11 @@ class AvailChecker(QThread):
self.links = links
self.appnumber = appnumber
self.books = books
self.logger.log_info(f"Started worker with appnumber: {self.appnumber} and links: {self.links} and {len(self.books)} books...")
self.logger.log_info(
f"Started worker with appnumber: {self.appnumber} and links: {self.links} and {len(self.books)} books..."
)
time.sleep(2)
def run(self):
self.db = Database()
state = 0
@@ -144,12 +149,7 @@ class AvailChecker(QThread):
book_id = book["id"]
break
self.logger.log_info(f"State of {link}: " + str(state))
print(
"Updating availability of "
+ str(book_id)
+ " to "
+ str(state)
)
print("Updating availability of " + str(book_id) + " to " + str(state))
self.db.setAvailability(book_id, state)
count += 1
self.updateProgress.emit(count, len(self.links))
@@ -162,10 +162,10 @@ class AvailChecker(QThread):
class AutoAdder(QThread):
updateSignal = pyqtSignal(int)
updateSignal = Signal(int)
setTextSignal = pyqtSignal(int)
progress = pyqtSignal(int)
setTextSignal = Signal(int)
progress = Signal(int)
def __init__(self, data=None, app_id=None, prof_id=None, parent=None):
super().__init__(parent)
@@ -206,10 +206,13 @@ class AutoAdder(QThread):
# teminate thread
self.finished.emit()
class BackgroundChecker(QThread):
"""Check all apparats for available Books"""
pass
class MockAvailCheck:
def __init__(
@@ -263,7 +266,6 @@ class MockAvailCheck:
result.append((item.callnumber, state))
count += 1
return result
self.logger.log_info("Worker thread finished")
# teminate thread

View File

@@ -6,19 +6,30 @@ import os
import sys
import tempfile
import time
from pathlib import Path
import webbrowser
from pathlib import Path
from icecream import ic
from natsort import natsorted
from omegaconf import OmegaConf
from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtCore import QDate, QThread, pyqtSignal
from PyQt6.QtGui import QColor, QRegularExpressionValidator
from src.logic import c_sort
from PySide6 import QtCore, QtGui, QtWidgets
from PySide6.QtCore import QDate, QThread, Signal
from PySide6.QtGui import QColor, QRegularExpressionValidator
# from src.logic.webrequest import BibTextTransformer, WebRequest
# from src.utils import documentationview
from src.backend.admin_console import AdminCommands
from src.backend.create_file import recreateFile
from src.backend.database import Database
from src.backend.delete_temp_contents import delete_temp_contents
from src.backend.semester import generateSemesterByDate
from src.logic import c_sort
from src.logic.constants import APP_NRS, PROF_TITLES
from src.logic.dataclass import ApparatData, BookData, MailData,Subjects
from src.logic.csvparser import csv_to_list
from src.logic.dataclass import ApparatData, BookData, MailData, Subjects
from src.logic.log import MyLogger
from src.logic.threads import BookGrabber,AvailChecker
from src.logic.threads import AvailChecker, BookGrabber
from src.logic.wordparser import word_docx_to_csv
from src.ui import (
App_Ext_Dialog,
FilePicker,
@@ -34,15 +45,7 @@ from src.ui import (
reminder_ui,
settings_ui,
)
# from src.logic.webrequest import BibTextTransformer, WebRequest
from src.utils import documentationview
from src.backend.admin_console import AdminCommands
from src.backend.semester import generateSemesterByDate
from src.backend.create_file import recreateFile
from src.backend.delete_temp_contents import delete_temp_contents
from src.logic.csvparser import csv_to_list
from src.logic.wordparser import word_docx_to_csv
from icecream import ic
config = OmegaConf.load("config.yaml")
@@ -70,6 +73,7 @@ class Medien(medienadder_ui):
# self.btn_save_path_select.clicked.connect(self.select_save_path)
# # self.setWindowIcon(QtGui.QIcon("ui\icon.png"))
# def select_save_path(self) -> None:
# # open a dialog to select a save path
# dialog = QtWidgets.QFileDialog()
@@ -80,15 +84,16 @@ class Medien(medienadder_ui):
# self.save_path.setText(self.settings.save_path)
# self.settings.save_settings()
class MyComboBox(QtWidgets.QComboBox):
def __init__(self, parent=None):
super().__init__(parent)
valid_input = (0, 0, 0, 0, 0, 0)
class MessageCalendar(QtWidgets.QCalendarWidget):
#Widget for MessageCalendar
# Widget for MessageCalendar
def __init__(self, parent=None):
super().__init__(parent)
self.messages = {} # Dictionary to store dates with messages
@@ -168,9 +173,9 @@ class Ui(Ui_Semesterapparat):
self.tableWidget_apparate.setSortingEnabled(True)
# self.tableWidget_apparate.text
self.actionEinstellungen.triggered.connect(self.open_settings)
#if help>documentation is clicked, open the documentation or shortcut is pressed
# if help>documentation is clicked, open the documentation or shortcut is pressed
self.actionDokumentation.triggered.connect(self.open_documentation)
# set validators
self.sem_year.setText(str(QtCore.QDate.currentDate().year()))
self.prof_mail.setValidator(
@@ -275,7 +280,7 @@ class Ui(Ui_Semesterapparat):
for apparat in self.apparats:
self.insert_apparat_into_table(apparat)
self.old_apparats = self.apparats #create a clone to compare against later
self.old_apparats = self.apparats # create a clone to compare against later
# if length of apparats changes, update box_apparats
# if tab is changed, gather data needed
self.tabWidget.currentChanged.connect(self.tab_changed)
@@ -289,9 +294,11 @@ class Ui(Ui_Semesterapparat):
# TODO:admin - change faculty
self.select_action_box.addItem("")
self.select_action_box.setCurrentText("")
self.hide_all()
self.hide_all()
self.select_action_box.currentTextChanged.connect(self.admin_action_changed)
self.edit_faculty_member_select_member.currentTextChanged.connect(self.edit_faculty_member_set_data)
self.edit_faculty_member_select_member.currentTextChanged.connect(
self.edit_faculty_member_set_data
)
self.book_search.clicked.connect(self.search_book)
# enable click functionality for the combobox to allow selection of roles
@@ -301,6 +308,7 @@ class Ui(Ui_Semesterapparat):
self.pushButton.clicked.connect(self.delete_user)
self.update_user.clicked.connect(self.update_user_data)
self.update_faculty_member.clicked.connect(self.edit_faculty_member_action)
def populate_appfach_dropdown(self):
self.app_fach.clear()
self.app_fach.addItem("")
@@ -308,8 +316,10 @@ class Ui(Ui_Semesterapparat):
self.app_fach.addItems([subject[1] for subject in self.db.getSubjects()])
def open_documentation(self):
documentation = documentationview.DocumentationViewer()
documentation.show()
# open the documentation in the default browser
webbrowser.open("file:///" + os.path.abspath("docs/index.html"))
# documentation = documentationview.DocumentationViewer()
# documentation.show()
def tabW1_changed(self):
if self.tabWidget.currentIndex() == 1:
@@ -323,7 +333,7 @@ class Ui(Ui_Semesterapparat):
title = self.search_by_title.text()
params = {
"signature": signature if signature != "" else None,
"title": title if title != "" else None
"title": title if title != "" else None,
}
params = {key: value for key, value in params.items() if value is not None}
ic(params)
@@ -333,16 +343,24 @@ class Ui(Ui_Semesterapparat):
for book in retdata:
self.book_search_result.insertRow(0)
self.book_search_result.setItem(0,0,QtWidgets.QTableWidgetItem(book[0].title))
self.book_search_result.setItem(0,1,QtWidgets.QTableWidgetItem(book[0].signature))
self.book_search_result.setItem(
0, 0, QtWidgets.QTableWidgetItem(book[0].title)
)
self.book_search_result.setItem(
0, 1, QtWidgets.QTableWidgetItem(book[0].signature)
)
print(book[1])
self.book_search_result.setItem(0,2,QtWidgets.QTableWidgetItem(self.db.getApparatName(book[1],book[2])))
self.book_search_result.setItem(
0,
2,
QtWidgets.QTableWidgetItem(self.db.getApparatName(book[1], book[2])),
)
def edit_faculty_member_set_data(self):
# get the selected member
name = self.edit_faculty_member_select_member.currentText()
fullname = name.replace(",","")
print(fullname,name)
fullname = name.replace(",", "")
print(fullname, name)
# get the data for the selected member
data = self.db.getProfByName(fullname)
# set the data
@@ -356,7 +374,11 @@ class Ui(Ui_Semesterapparat):
self.edit_faculty_member_title.setText(data[1])
self.faculty_member_old_telnr.setText(data[6])
self.faculty_member_oldmail.setText(data[5])
self.edit_faculty_member_title.setText(data[1]) if data[1] != None else self.edit_faculty_member_title.setText("")
(
self.edit_faculty_member_title.setText(data[1])
if data[1] != None
else self.edit_faculty_member_title.setText("")
)
# self.edit_faculty_member_name.setText(f"{data[3]} {data[2]}")
# self.edit_faculty_member_title.setCurrentText(data[1])
@@ -374,7 +396,12 @@ class Ui(Ui_Semesterapparat):
# self.user_create_frame_error.setText("Der Nutzername ist bereits vergeben")#TODO: implement error message
return
userdata = AdminCommands().create_password(password)
self.db.createUser(username=username, password=f"{userdata[1]}{userdata[0]}", salt=userdata[1], role=role)
self.db.createUser(
username=username,
password=f"{userdata[1]}{userdata[0]}",
salt=userdata[1],
role=role,
)
self.user_create_frame_username.clear()
self.user_create_frame_password.clear()
self.user_frame_userrole.setCurrentText("")
@@ -384,7 +411,9 @@ class Ui(Ui_Semesterapparat):
if self.user_delete_confirm.isChecked():
username = self.user_delete_frame_user_select.currentText()
self.db.deleteUser(username)
self.user_delete_frame_user_select.removeItem(self.user_delete_frame_user_select.currentIndex())
self.user_delete_frame_user_select.removeItem(
self.user_delete_frame_user_select.currentIndex()
)
self.user_delete_confirm.setChecked(False)
else:
# self.user_delete_err_message.setText("Bitte bestätigen Sie die Löschung des Nutzers") # TODO: implement error message
@@ -392,61 +421,88 @@ class Ui(Ui_Semesterapparat):
def update_user_data(self):
username = self.user_edit_frame_user_select.currentText()
password = self.user_edit_frame_new_password.text() if self.user_edit_frame_new_password.text() != "" else None
role = self.user_edit_frame_role_select.currentText() if self.user_edit_frame_role_select.currentText() != "" else None
password = (
self.user_edit_frame_new_password.text()
if self.user_edit_frame_new_password.text() != ""
else None
)
role = (
self.user_edit_frame_role_select.currentText()
if self.user_edit_frame_role_select.currentText() != ""
else None
)
userdata = AdminCommands().create_password(password)
data = {
"password": f"{userdata[1]}{userdata[0]}",
"salt": userdata[1],
"role": role
"role": role,
}
data = {key: value for key, value in data.items() if value is not None}
print(data)
self.db.updateUser(username=username,data = data)
self.db.updateUser(username=username, data=data)
self.user_edit_frame_user_select.setCurrentText("")
self.user_edit_frame_new_password.clear()
self.user_edit_frame_role_select.setCurrentText("")
def edit_faculty_member_action(self):
def __gen_fullname(fname,lname,data):
def __gen_fullname(fname, lname, data):
if fname == "" and lname == "":
return data[3]
if fname == ""and lname != "":
if fname == "" and lname != "":
return f"{lname} {data[1]}"
if fname != "" and lname == "":
return f"{data[2]} {fname}"
if fname != "" and lname != "":
return f"{lname} {fname}"
# get the data and use new value if it is not none and does not mach the old value
if self.edit_faculty_member_select_member.currentText() =="":
if self.edit_faculty_member_select_member.currentText() == "":
return
olddata = self.db.getFacultyMember(self.edit_faculty_member_select_member.currentText())
olddata = self.db.getFacultyMember(
self.edit_faculty_member_select_member.currentText()
)
data = olddata[0]
oldlname = data[2]
oldfname = data[1]
# take data except first and last entry
titel = self.edit_faculty_member_new_title.currentText() if self.edit_faculty_member_new_title.currentText() != "Kein Titel" else None
fname = self.edit_faculty_member_new_surname.text() if self.edit_faculty_member_new_surname.text() != "" else self.edit_faculty_member_select_member.currentText().split(" ")[1].strip()
lname = self.user_faculty_member_new_name.text() if self.user_faculty_member_new_name.text() != "" else self.edit_faculty_member_select_member.currentText().split(" ")[0].strip()
fullname = __gen_fullname(fname,lname,data)
titel = (
self.edit_faculty_member_new_title.currentText()
if self.edit_faculty_member_new_title.currentText() != "Kein Titel"
else None
)
fname = (
self.edit_faculty_member_new_surname.text()
if self.edit_faculty_member_new_surname.text() != ""
else self.edit_faculty_member_select_member.currentText()
.split(" ")[1]
.strip()
)
lname = (
self.user_faculty_member_new_name.text()
if self.user_faculty_member_new_name.text() != ""
else self.edit_faculty_member_select_member.currentText()
.split(" ")[0]
.strip()
)
fullname = __gen_fullname(fname, lname, data)
mail = self.user_faculty_member_new_telnr.text()
telnr = self.user_faculty_member_new_mail.text()
new_data = {
"titel":titel,
"fname":fname,
"lname":lname,
"fullname":fullname,
"mail":mail,
"telnr":telnr,
"titel": titel,
"fname": fname,
"lname": lname,
"fullname": fullname,
"mail": mail,
"telnr": telnr,
}
new_data = {key: value for key, value in new_data.items() if value != ""}
self.db.updateFacultyMember(data = new_data,oldlname=oldlname,oldfname=oldfname)
self.db.updateFacultyMember(data=new_data, oldlname=oldlname, oldfname=oldfname)
self.add_faculty_member_data()
self.edit_faculty_member_new_title.setCurrentText("")
self.edit_faculty_member_new_surname.clear()
self.edit_faculty_member_new_surname.clear()
self.user_faculty_member_new_name.clear()
self.user_faculty_member_new_telnr.clear()
self.user_faculty_member_new_mail.clear()
@@ -465,7 +521,7 @@ class Ui(Ui_Semesterapparat):
roles = list(dict.fromkeys(roles))
users = self.db.getUsers()
users = [user[2] for user in users]
users.remove(self.active_user)
users.remove(self.active_user)
if "admin" in users:
users.remove("admin")
if action == "Nutzer anlegen":
@@ -498,7 +554,7 @@ class Ui(Ui_Semesterapparat):
faculty_members = self.db.getFacultyMembers()
names = [f"{member[5]}" for member in faculty_members]
self.edit_faculty_member_select_member.clear()
self.edit_faculty_member_select_member.addItems(names)
self.edit_faculty_member_select_member.addItems(names)
self.edit_faculty_member_select_member.addItem("")
self.edit_faculty_member_select_member.setCurrentText("")
@@ -561,7 +617,7 @@ class Ui(Ui_Semesterapparat):
created_status.person_double_clicked.connect(self.open_apparat)
deleted_status.person_double_clicked.connect(self.open_apparat)
def open_apparat(self, header:str, apparat:str, parent_depth:int):
def open_apparat(self, header: str, apparat: str, parent_depth: int):
print(header)
if header == "deleted" and parent_depth == 2:
# TODO: warn message here
@@ -577,11 +633,9 @@ class Ui(Ui_Semesterapparat):
# set the items 0 = clickable checkbox, 1 = appname, 2 = profname, 3 = fach
# insert new row
self.tableWidget.insertRow(0)
self.tableWidget.setItem(0,0, QtWidgets.QTableWidgetItem(""))
self.tableWidget.setItem(0, 0, QtWidgets.QTableWidgetItem(""))
self.tableWidget.setItem(0, 1, QtWidgets.QTableWidgetItem(app[1]))
self.tableWidget.setItem(
0, 2, QtWidgets.QTableWidgetItem(str(app[4]))
)
self.tableWidget.setItem(0, 2, QtWidgets.QTableWidgetItem(str(app[4])))
self.tableWidget.setItem(0, 3, QtWidgets.QTableWidgetItem(app[2]))
self.tableWidget.setItem(0, 4, QtWidgets.QTableWidgetItem(app[3]))
# replace the 0 with a checkbox
@@ -591,7 +645,9 @@ class Ui(Ui_Semesterapparat):
# if i[9] is 1, set the background of the row to red
if int(app[9]) == 1:
for j in range(5):
self.tableWidget.item(0, j).setBackground(QtGui.QColor(235, 74, 71))
self.tableWidget.item(0, j).setBackground(
QtGui.QColor(235, 74, 71)
)
# disable the checkbox
self.tableWidget.cellWidget(0, 0).setEnabled(False)
# set the tooltip
@@ -654,9 +710,7 @@ class Ui(Ui_Semesterapparat):
apparats = [str(apparat) for apparat in apparats]
self.box_appnrs.addItems(apparats)
persons = self.db.getProfs()
self.box_person.addItems(
[f"{person[3]}, {person[2]}" for person in persons]
)
self.box_person.addItems([f"{person[3]}, {person[2]}" for person in persons])
self.box_fach.addItems(subject[1] for subject in self.db.getSubjects())
semester = self.db.getSemersters()
self.box_erstellsemester.addItems(semester)
@@ -669,9 +723,7 @@ class Ui(Ui_Semesterapparat):
self.tabWidget_3.removeTab(1)
self.statistics_table.setRowCount(len(data))
for i in range(len(data)):
self.statistics_table.setItem(
i, 0, QtWidgets.QTableWidgetItem(data[i][0])
)
self.statistics_table.setItem(i, 0, QtWidgets.QTableWidgetItem(data[i][0]))
self.statistics_table.setItem(
i, 1, QtWidgets.QTableWidgetItem(str(data[i][1]))
)
@@ -695,11 +747,11 @@ class Ui(Ui_Semesterapparat):
def tab_changed(self):
curr_tab = self.tabWidget.currentIndex()
if curr_tab == 0: # create tab
if curr_tab == 0: # create tab
return
elif curr_tab == 1: # statistics tab
elif curr_tab == 1: # statistics tab
self.populate_tab()
elif curr_tab == 2: #admin tab
elif curr_tab == 2: # admin tab
self.populate_admin_tab()
def populate_admin_tab(self):
@@ -730,33 +782,47 @@ class Ui(Ui_Semesterapparat):
self.db_err_message.setText("")
self.btn_del_select_apparats.setEnabled(True)
params = {
"appnr": self.box_appnrs.currentText()
if self.box_appnrs.currentText() != ""
else None,
"prof_id": self.db.getProfId(self.box_person.currentText())
if self.box_person.currentText() != ""
else None,
"fach": self.box_fach.currentText()
if self.box_fach.currentText() != ""
else None,
"erstellsemester": self.box_erstellsemester.currentText()
if self.box_erstellsemester.currentText() != ""
else None,
"dauer": "1"
if self.box_dauerapp.currentText() == "Ja"
else "0"
if self.box_dauerapp.currentText() == "Nein"
else None,
"endsemester": self.box_semester.currentText()
if self.box_semester.currentText() != ""
else None,
"appnr": (
self.box_appnrs.currentText()
if self.box_appnrs.currentText() != ""
else None
),
"prof_id": (
self.db.getProfId(self.box_person.currentText())
if self.box_person.currentText() != ""
else None
),
"fach": (
self.box_fach.currentText()
if self.box_fach.currentText() != ""
else None
),
"erstellsemester": (
self.box_erstellsemester.currentText()
if self.box_erstellsemester.currentText() != ""
else None
),
"dauer": (
"1"
if self.box_dauerapp.currentText() == "Ja"
else "0" if self.box_dauerapp.currentText() == "Nein" else None
),
"endsemester": (
self.box_semester.currentText()
if self.box_semester.currentText() != ""
else None
),
"deletable": "True" if self.check_deletable.isChecked() else None,
"deletesemester": self.generateSemester(today=True),
}
params = {key: value for key, value in params.items() if value is not None} #remove empty lines to prevent errors
params = {
key: value for key, value in params.items() if value is not None
} # remove empty lines to prevent errors
print(params)
params = {
key: value for key, value in params.items() if value != "Alle"
} # remove empty lines to prevent errors
print(params)
params = {key: value for key, value in params.items() if value != "Alle"} #remove empty lines to prevent errors
print(params)
result = self.db.statistic_request(**params)
# add QTableWidgetItems to the table
self.tableWidget.setRowCount(len(result))
@@ -1011,17 +1077,20 @@ class Ui(Ui_Semesterapparat):
def get_index_of_value(self, table_widget, value):
for i in range(table_widget.rowCount()):
for j in range(table_widget.columnCount()):
if table_widget.item(i, j) is not None and table_widget.item(i, j).text() == value:
if (
table_widget.item(i, j) is not None
and table_widget.item(i, j).text() == value
):
return i, j
return None
def load_app_data(self,app_id=None):
def load_app_data(self, app_id=None):
print(type(app_id))
if isinstance(app_id, str):
# double click the tableWidget_apparate row with the given app_id
row,column = self.get_index_of_value(self.tableWidget_apparate,app_id)
row, column = self.get_index_of_value(self.tableWidget_apparate, app_id)
# set the current index to the row
self.tableWidget_apparate.setCurrentCell(row,0)
self.tableWidget_apparate.setCurrentCell(row, 0)
app_pos = self.tableWidget_apparate.currentIndex()
appnr = self.tableWidget_apparate.item(app_pos.row(), 0).text()
appname = self.tableWidget_apparate.item(app_pos.row(), 1).text()
@@ -1170,12 +1239,15 @@ class Ui(Ui_Semesterapparat):
def check_availability(self):
self.threadeds.clear()
def _update_progress(current, all_titles):
self.avail_status.setText( "{}/{}".format(current, all_titles))
self.avail_status.setText("{}/{}".format(current, all_titles))
def _hide_progress_label():
self.label_20.hide()
self.avail_status.hide()
self.avail_status.setText("0/0")
# get all links from the table
# if no index in tableWidget_apparat_media is selected, check all
if self.tableWidget_apparat_media.currentRow() == -1:
@@ -1307,6 +1379,7 @@ class Ui(Ui_Semesterapparat):
link = "https://" + link
webbrowser.open(link)
# get the name of the column
columnname = self.tableWidget_apparat_media.horizontalHeaderItem(
item.column()
@@ -1366,7 +1439,7 @@ class Ui(Ui_Semesterapparat):
return
if not _selected_doc_location == "Database":
path = Path(_selected_doc_location)
path:Path = path + "/" + _selected_doc_name
path: Path = path + "/" + _selected_doc_name
if os.getenv("OS") == "Windows_NT":
path = path.resolve()
os.startfile(path)
@@ -1374,7 +1447,9 @@ class Ui(Ui_Semesterapparat):
path = path.resolve()
os.system(f"open {path}")
else:
recreateFile(_selected_doc_name,self.active_apparat ,filetype=_selected_doc_filetype)
recreateFile(
_selected_doc_name, self.active_apparat, filetype=_selected_doc_filetype
)
# # if ~ in path, replace it with the home directory
# if "~" in path:
# path = path.replace("~", str(Path.home()))
@@ -1508,7 +1583,7 @@ class Ui(Ui_Semesterapparat):
self.dokument_list.currentRow(), 0
).text()
if file_location == "Database":
file = recreateFile(file_name,app_id,file_type,open=False)
file = recreateFile(file_name, app_id, file_type, open=False)
else:
self.add_files()
if file_type == "pdf":
@@ -1529,7 +1604,9 @@ class Ui(Ui_Semesterapparat):
signatures = [i for i in signatures if i != ""]
ic(signatures)
print("starting thread")
grabber = BookGrabber(mode = "ARRAY", app_id = app_id,prof_id = prof_id,data = signatures)
grabber = BookGrabber(
mode="ARRAY", app_id=app_id, prof_id=prof_id, data=signatures
)
# grabber.mode = "ARRAY"
# grabber.data = signatures
# grabber.app_id = app_id
@@ -1587,9 +1664,7 @@ class Ui(Ui_Semesterapparat):
appd = ApparatData()
appd.appnr = self.active_apparat
appd.prof_title = (
None
if self.prof_title.text() == ""
else self.prof_title.text()
None if self.prof_title.text() == "" else self.prof_title.text()
)
appd.profname = self.drpdwn_prof_name.currentText()
appd.appname = self.app_name.text()
@@ -1620,9 +1695,10 @@ class Ui(Ui_Semesterapparat):
__clear_fields()
if self.check_send_mail.isChecked():
self.contact_prof()
def send_mail_preview(self):
pass
@property
def active_apparat(self):
return self.drpdwn_app_nr.currentText()
@@ -1635,11 +1711,15 @@ class Ui(Ui_Semesterapparat):
"name": self.dokument_list.item(i, 0).text(),
"type": self.dokument_list.item(i, 1).text(),
"date": self.dokument_list.item(i, 2).text(),
"path": self.dokument_list.item(i, 3).text(),
"path": self.dokument_list.item(i, 3).text(),
}
)
self.dokument_list.item(i, 2).setText("")
self.db.insertFile(files, self.active_apparat, self.db.getProfId(self.drpdwn_prof_name.currentText()))
self.db.insertFile(
files,
self.active_apparat,
self.db.getProfId(self.drpdwn_prof_name.currentText()),
)
def update_apparat_list(self):
# get a list of new apparats based on self.apparats and self.old_apparats
@@ -1656,6 +1736,7 @@ class Ui(Ui_Semesterapparat):
def insert_apparat_into_table(self, apparat):
ic(apparat)
def __dauer_check(apparat):
return "Ja" if apparat[7] == 1 else "Nein"
@@ -1688,7 +1769,6 @@ class Ui(Ui_Semesterapparat):
)
self.logger.log_info(f"Inserted apparat {apparat[4]}")
def open_context_menu(self, position):
menu = QtWidgets.QMenu()
extend_action = menu.addAction("Verlängern")
@@ -1741,9 +1821,7 @@ class Ui(Ui_Semesterapparat):
self.message_box.setText(message["message"])
appnr = message["appnr"]
appnr = "/" if appnr is None else str(appnr)
self.line_app_info.setText(
appnr
)
self.line_app_info.setText(appnr)
def __delete_message():
message = messages[self.spin_select_message.value() - 1]
@@ -1753,7 +1831,6 @@ class Ui(Ui_Semesterapparat):
self.spin_select_message.setMaximum(len(messages))
self.spin_select_message.setValue(1)
self.label_total_day_messages.setText("/ " + str(len(messages)))
selected_date = self.calendarWidget.selectedDate().toString("yyyy-MM-dd")
print(selected_date)
@@ -1767,9 +1844,11 @@ class Ui(Ui_Semesterapparat):
self.message_frame.show()
self.label_total_day_messages.setText("/ " + str(message_count))
# if there is only one message, disable the spinbox
self.spin_select_message.setEnabled(
False
) if message_count == 1 else self.spin_select_message.setEnabled(True)
(
self.spin_select_message.setEnabled(False)
if message_count == 1
else self.spin_select_message.setEnabled(True)
)
self.spin_select_message.setValue(1)
# load the first message
__update_message()
@@ -1819,7 +1898,11 @@ class Ui(Ui_Semesterapparat):
signature=book,
prof_id=self.db.getProfId(self.drpdwn_prof_name.currentText()),
)
book_id = self.db.getBookIdBasedOnSignature(self.active_apparat,self.db.getProfId(self.drpdwn_prof_name.currentText()),book)
book_id = self.db.getBookIdBasedOnSignature(
self.active_apparat,
self.db.getProfId(self.drpdwn_prof_name.currentText()),
book,
)
widget = QtWidgets.QDialog()
bookedit = edit_bookdata_ui()
bookedit.setupUi(widget)
@@ -1880,6 +1963,7 @@ class Ui(Ui_Semesterapparat):
)
self.db.deleteBook(book_id)
self.update_app_media_list()
def extend_apparat(self):
framework = QtWidgets.QDialog()
frame = App_Ext_Dialog()
@@ -1937,7 +2021,12 @@ class Ui(Ui_Semesterapparat):
"general": general_data,
}
mail_prev = Mail_Dialog(app_id = self.active_apparat,data = pass_data,app_name = self.app_name.text(),app_subject = self.app_fach.currentText())
mail_prev = Mail_Dialog(
app_id=self.active_apparat,
data=pass_data,
app_name=self.app_name.text(),
app_subject=self.app_fach.currentText(),
)
mail_prev.setupUi(dialog)
mail_prev.comboBox.addItems(mail_prevs)
mail_prev.set_mail()
@@ -1951,9 +2040,7 @@ class Ui(Ui_Semesterapparat):
state = self.confirm_popup(message)
print(state)
if state == 1:
self.db.deleteApparat(
selected_apparat_id, generateSemesterByDate()
)
self.db.deleteApparat(selected_apparat_id, generateSemesterByDate())
# delete the corresponding entry from self.apparats
for apparat in self.apparats:
if apparat[4] == int(selected_apparat_id):