fix: update eml support

This commit is contained in:
2026-02-12 10:15:48 +01:00
parent 8ec92a685c
commit 7b43826ef5
3 changed files with 53 additions and 33 deletions

View File

@@ -175,6 +175,18 @@ class BookData:
return int(match.group(1)) return int(match.group(1))
return 0 return 0
def to_book(self) -> Book:
return Book(
author=self.author,
year=self.year,
edition=self.edition,
title=self.title,
location=self.place,
publisher=self.publisher,
signature=self.signature,
internal_notes=None,
)
@dataclass @dataclass
class MailData: class MailData:
@@ -290,15 +302,18 @@ class ApparatData:
@dataclass @dataclass
class XMLMailSubmission: class XMLMailSubmission:
name: str | None name: str | None = None
lastname: str | None lastname: str | None = None
title: str | None title: str | None = None
telno: int | None telno: int | None = None
email: str | None email: str | None = None
app_name: str | None app_name: str | None = None
subject: str | None subject: str | None = None
semester: Semester | None semester: Semester | None = None
books: list[BookData] | None books: list[BookData] | None = None
dauerapparat: bool = False
# def __post_init__(self) -> None:
# convert semester to string
@dataclass @dataclass
@@ -374,6 +389,7 @@ class SemapDocument:
self.phoneNumber = int( self.phoneNumber = int(
regex.sub(r"[^\d]", "", str(self.phoneNumber)), regex.sub(r"[^\d]", "", str(self.phoneNumber)),
) )
self.title_length = len(self.title) + 3 + len(self.personName.split(",")[0])
@property @property
def nameSetter(self): def nameSetter(self):

View File

@@ -99,6 +99,9 @@ class Semester:
self.value = f"WiSe {year}/{next_year}" self.value = f"WiSe {year}/{next_year}"
else: # SoSe else: # SoSe
# year may only be the last two digits, so we don't want to pad it with a leading zero
if len(str(year)) > 2:
year = int(str(year)[-2:])
self.value = f"SoSe {year}" self.value = f"SoSe {year}"
# ------------------------------------------------------------------ # ------------------------------------------------------------------

View File

@@ -1243,28 +1243,25 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
self.active_apparat, self.active_apparat,
filetype=file_type, filetype=file_type,
) )
if file_type == "pdf": match file_type:
# TODO: implement parser here case "pdf":
data = pdf_to_semap(file) # TODO: implement parser here
signatures = data.signatures data = pdf_to_semap(file)
# self.confirm_popup("PDF Dateien werden nicht unterstützt!", title="Fehler") signatures = data.signatures
return signatures # self.confirm_popup("PDF Dateien werden nicht unterstützt!", title="Fehler")
if file_type == "csv": return signatures
return csv_to_list(file) case "csv":
if file_type in ("docx", "doc"): return csv_to_list(file)
data = word_to_semap(file) case _ if file_type in ("docx", "doc"):
log.info("Converted data from semap file") return word_to_semap(file)
log.debug("Got the data: {}", data) case "eml":
data = eml_to_semap(file)
return data log.info("Converted data from eml file")
if file_type == "eml": log.debug("Got the data: {}", data)
data = eml_to_semap(file) return data
log.info("Converted data from eml file") case _:
log.debug("Got the data: {}", data) error = "Dateityp wird nicht unterstützt"
raise ValueError(error)
return data
error = "Dateityp wird nicht unterstützt"
raise ValueError(error)
def import_data_from_document(self): def import_data_from_document(self):
global valid_input global valid_input
@@ -1314,6 +1311,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
self.app_fach.setCurrentText(data.subject if data.subject in subjects else "") self.app_fach.setCurrentText(data.subject if data.subject in subjects else "")
self.prof_title.setText(data.personTitle) self.prof_title.setText(data.personTitle)
self.drpdwn_prof_name.setCurrentText(data.personName) self.drpdwn_prof_name.setCurrentText(data.personName)
self.sem_year.setText("20" + str(data.semester.year)) self.sem_year.setText("20" + str(data.semester.year))
if data.semester.semester == "SoSe": if data.semester.semester == "SoSe":
self.sem_sommer.setChecked(True) self.sem_sommer.setChecked(True)
@@ -1325,9 +1323,13 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
self.check_eternal_app.setChecked(True) self.check_eternal_app.setChecked(True)
self.validate_semester() self.validate_semester()
if data.books != []: if data.books != []:
log.info("Importing books from document")
log.info(data)
self.btn_check_file_threaded(data) self.btn_check_file_threaded(data)
def btn_check_file_threaded(self, c_document: Optional[SemapDocument] = None): def btn_check_file_threaded(self, c_document: Optional[SemapDocument] = None):
log.info("Starting threaded file check")
log.info(c_document)
for runner in self.bookGrabber: for runner in self.bookGrabber:
if not runner.isRunning(): if not runner.isRunning():
runner.deleteLater() runner.deleteLater()
@@ -1373,8 +1375,7 @@ class Ui(QtWidgets.QMainWindow, Ui_Semesterapparat):
prof_id = self.db.getProfId(self.profdata) prof_id = self.db.getProfId(self.profdata)
# log.debug("Prof ID is None", prof_id) # log.debug("Prof ID is None", prof_id)
document = None document = c_document
if c_document is None: if c_document is None:
document = self.extract_document_data() document = self.extract_document_data()
if document is None: if document is None: