diff --git a/config.yaml b/config.yaml
index 0761b46..d07083c 100644
--- a/config.yaml
+++ b/config.yaml
@@ -1,6 +1,11 @@
default_apps: true
save_path: ~/Desktop/semap/db/temp/
icon_path: icons/
+zotero:
+ api_key:
+ library_id: ""
+ library_type: user
+
custom_applications:
- name: Text files
extensions:
@@ -27,13 +32,31 @@ custom_applications:
- xls
application: Excel
database:
- name: semap.db
+ name: test.sam
path: ~\Desktop\semap\db\
tempdir: ~\Desktop\semap\db\temp\
mail:
- smtp_server:
- port:
- sender:
- user_name:
- use_user_name:
- password:
+ smtp_server: ''
+ port: 0
+ sender: ''
+ user_name: ''
+ use_user_name: false
+ password: ''
+ signature: '
+
+
+
+
'
diff --git a/src/__init__.py b/src/__init__.py
index b6ed906..ac7b067 100644
--- a/src/__init__.py
+++ b/src/__init__.py
@@ -1,6 +1,7 @@
-__version__ = "0.1.0"
+__version__ = "1.0.0"
__author__ = "Alexander Kirchner"
from .logic.log import MyLogger
from .utils.icon import Icon
+from .ui.userInterface import launch_gui as UI
diff --git a/src/backend/database.py b/src/backend/database.py
index 4af46c8..58fa213 100644
--- a/src/backend/database.py
+++ b/src/backend/database.py
@@ -148,8 +148,8 @@ class Database:
conn = self.connect()
cursor = conn.cursor()
log_message = f"Querying database with query {query}, args: {args}"
- if "INSERT" in query:
- log_message = f"Querying database with query {query}"
+ # if "INSERT" in query:
+ # log_message = f"Querying database with query {query}"
self.logger.log_info(log_message)
@@ -661,7 +661,10 @@ class Database:
data = self.getProfByName(prof_name.replace(",", ""))
if data is None:
- return None
+ # get last used id and return id + 1
+ profno = self.query_db("SELECT id FROM prof ORDER BY id DESC", one=True)[0]
+ return profno + 1
+ # return None
else:
return data[0]
diff --git a/src/logic/__init__.py b/src/logic/__init__.py
index 46ee042..5a6587c 100644
--- a/src/logic/__init__.py
+++ b/src/logic/__init__.py
@@ -7,3 +7,4 @@ from .dataclass import ApparatData, BookData
from .csvparser import csv_to_list
from .wordparser import elsa_word_to_csv, word_docx_to_csv
from .log import MyLogger
+from .zotero import ZoteroController
diff --git a/src/logic/csvparser.py b/src/logic/csvparser.py
index 7653ce7..846a257 100644
--- a/src/logic/csvparser.py
+++ b/src/logic/csvparser.py
@@ -7,7 +7,8 @@ def csv_to_list(path: str) -> list[str]:
"""
Extracts the data from a csv file and returns it as a pandas dataframe
"""
- with open(path, newline="") as csvfile:
+ with open(path, newline="", encoding="utf-8") as csvfile:
+ # if decoder fails to map, assign ""
reader = csv.reader(csvfile, delimiter=";", quotechar="|")
ret = []
for row in reader:
diff --git a/src/ui/Ui_semesterapparat_ui.py b/src/ui/Ui_semesterapparat_ui.py
index a076e29..e208e91 100644
--- a/src/ui/Ui_semesterapparat_ui.py
+++ b/src/ui/Ui_semesterapparat_ui.py
@@ -1118,9 +1118,6 @@ class Ui_MainWindow(object):
self.label_42.setObjectName("label_42")
self.gridLayout_12.addWidget(self.label_42, 2, 0, 1, 1)
self.gridLayout_14.addLayout(self.gridLayout_12, 0, 0, 1, 1)
- self.reset_selection = QtWidgets.QToolButton(parent=self.admin)
- self.reset_selection.setGeometry(QtCore.QRect(250, 30, 22, 22))
- self.reset_selection.setObjectName("reset_selection")
self.tabWidget.addTab(self.admin, "")
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)
self.horizontalLayout.addLayout(self.gridLayout)
@@ -1309,11 +1306,10 @@ class Ui_MainWindow(object):
self.retranslateUi(MainWindow)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
- MainWindow.setTabOrder(self.drpdwn_app_nr, self.prof_title)
- MainWindow.setTabOrder(self.prof_title, self.drpdwn_prof_name)
- MainWindow.setTabOrder(self.drpdwn_prof_name, self.prof_tel_nr)
- MainWindow.setTabOrder(self.prof_tel_nr, self.prof_mail)
- MainWindow.setTabOrder(self.prof_mail, self.app_name)
+ MainWindow.setTabOrder(self.drpdwn_app_nr, self.drpdwn_prof_name)
+ MainWindow.setTabOrder(self.drpdwn_prof_name, self.prof_mail)
+ MainWindow.setTabOrder(self.prof_mail, self.prof_tel_nr)
+ MainWindow.setTabOrder(self.prof_tel_nr, self.app_name)
MainWindow.setTabOrder(self.app_name, self.app_fach)
MainWindow.setTabOrder(self.app_fach, self.sem_winter)
MainWindow.setTabOrder(self.sem_winter, self.sem_sommer)
@@ -1363,15 +1359,10 @@ class Ui_MainWindow(object):
MainWindow.setTabOrder(self.elsa_statistics_table, self.elsa_cancel_create)
MainWindow.setTabOrder(self.elsa_cancel_create, self.elsa_add_new)
MainWindow.setTabOrder(self.elsa_add_new, self.elsa_table)
- MainWindow.setTabOrder(self.elsa_table, self.reset_selection)
- MainWindow.setTabOrder(self.reset_selection, self.valid_check_app_fach)
- MainWindow.setTabOrder(self.valid_check_app_fach, self.edit_faculty_member_new_surname)
- MainWindow.setTabOrder(self.edit_faculty_member_new_surname, self.valid_check_profname)
- MainWindow.setTabOrder(self.valid_check_profname, self.valid_check_appname)
- MainWindow.setTabOrder(self.valid_check_appname, self.valid_check_semester)
- MainWindow.setTabOrder(self.valid_check_semester, self.valid_check_mail)
- MainWindow.setTabOrder(self.valid_check_mail, self.valid_check_telnr)
- MainWindow.setTabOrder(self.valid_check_telnr, self.edit_faculty_member_new_title)
+ MainWindow.setTabOrder(self.elsa_table, self.edit_faculty_member_new_surname)
+ MainWindow.setTabOrder(self.edit_faculty_member_new_surname, self.edit_faculty_member_new_title)
+ MainWindow.setTabOrder(self.edit_faculty_member_new_title, self.elsa_update)
+ MainWindow.setTabOrder(self.elsa_update, self.quote_entry)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
@@ -1548,7 +1539,6 @@ class Ui_MainWindow(object):
self.label_41.setText(_translate("MainWindow", "Alte Angaben"))
self.update_faculty_member.setText(_translate("MainWindow", "Aktualisieren"))
self.label_42.setText(_translate("MainWindow", "Neue Angaben"))
- self.reset_selection.setText(_translate("MainWindow", "..."))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.admin), _translate("MainWindow", "Admin"))
self.groupBox_2.setTitle(_translate("MainWindow", "Software"))
self.appdata_check.setText(_translate("MainWindow", "Apparatsdaten eingegeben"))
diff --git a/src/ui/dialogs/dialog_sources/Ui_elsa_add_table_entry.py b/src/ui/dialogs/dialog_sources/Ui_elsa_add_table_entry.py
index 4903dd4..d27e3d8 100644
--- a/src/ui/dialogs/dialog_sources/Ui_elsa_add_table_entry.py
+++ b/src/ui/dialogs/dialog_sources/Ui_elsa_add_table_entry.py
@@ -257,6 +257,7 @@ class Ui_Dialog(object):
self.label_32.setObjectName("label_32")
self.gridLayout_5.addWidget(self.label_32, 0, 0, 1, 1)
self.file_desc_edit = QtWidgets.QTextEdit(parent=self.page)
+ self.file_desc_edit.setReadOnly(True)
self.file_desc_edit.setObjectName("file_desc_edit")
self.gridLayout_5.addWidget(self.file_desc_edit, 5, 0, 1, 1)
spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
@@ -273,12 +274,14 @@ class Ui_Dialog(object):
self.label_33.setObjectName("label_33")
self.gridLayout_5.addWidget(self.label_33, 4, 0, 1, 1)
self.filename_edit = QtWidgets.QTextEdit(parent=self.page)
+ self.filename_edit.setReadOnly(True)
self.filename_edit.setObjectName("filename_edit")
self.gridLayout_5.addWidget(self.filename_edit, 1, 0, 1, 1)
self.label_34 = QtWidgets.QLabel(parent=self.page)
self.label_34.setObjectName("label_34")
self.gridLayout_5.addWidget(self.label_34, 2, 0, 1, 1)
self.ilias_filename = QtWidgets.QTextEdit(parent=self.page)
+ self.ilias_filename.setReadOnly(True)
self.ilias_filename.setObjectName("ilias_filename")
self.gridLayout_5.addWidget(self.ilias_filename, 3, 0, 1, 1)
self.copy_ilias_filename = QtWidgets.QToolButton(parent=self.page)
@@ -293,7 +296,7 @@ class Ui_Dialog(object):
self.verticalLayout.addWidget(self.buttonBox)
self.retranslateUi(Dialog)
- self.stackedWidget.setCurrentIndex(0)
+ self.stackedWidget.setCurrentIndex(3)
self.buttonBox.accepted.connect(Dialog.accept) # type: ignore
self.buttonBox.rejected.connect(Dialog.reject) # type: ignore
QtCore.QMetaObject.connectSlotsByName(Dialog)
diff --git a/src/ui/dialogs/dialog_sources/elsa_add_table_entry.ui b/src/ui/dialogs/dialog_sources/elsa_add_table_entry.ui
index 07f0462..3835662 100644
--- a/src/ui/dialogs/dialog_sources/elsa_add_table_entry.ui
+++ b/src/ui/dialogs/dialog_sources/elsa_add_table_entry.ui
@@ -110,7 +110,7 @@
-
- 0
+ 3
@@ -457,7 +457,11 @@ Nachname, Vorname
-
-
+
+
+ true
+
+
-
@@ -500,7 +504,11 @@ Nachname, Vorname
-
-
+
+
+ true
+
+
-
@@ -510,7 +518,11 @@ Nachname, Vorname
-
-
+
+
+ true
+
+
-
diff --git a/src/ui/dialogs/settings.py b/src/ui/dialogs/settings.py
index 3ea7f14..3481ea2 100644
--- a/src/ui/dialogs/settings.py
+++ b/src/ui/dialogs/settings.py
@@ -6,6 +6,24 @@ from src import Icon
from .dialog_sources.settings_ui import Ui_Dialog as _settings
config = OmegaConf.load("config.yaml")
+base = """'
+
+
+
+
'"""
class Settings(QtWidgets.QDialog, _settings):
@@ -21,7 +39,7 @@ class Settings(QtWidgets.QDialog, _settings):
self.underscore.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
self.font_size.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
self.fontComboBox.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus)
-
+ self.setWindowIcon(Icon("settings").icon)
self.font_size.setCurrentText("9")
# add button to toggle password visibility
if user == "admin":
@@ -52,7 +70,9 @@ class Settings(QtWidgets.QDialog, _settings):
self.sender_email.setText(config.mail.sender)
self.mail_username.setText(config.mail.user_name)
self.password.setText(config.mail.password)
- self.use_username_smtp_login.setChecked(config.mail.use_user_name)
+ self.use_username_smtp_login.setChecked(
+ config.mail.use_user_name if config.mail.use_user_name else False
+ )
self.editSignature.setHtml(config.mail.signature)
def setCurrentFont(self):
@@ -66,17 +86,15 @@ class Settings(QtWidgets.QDialog, _settings):
def toggle_password(self):
self.togglePassword.setIconSize(QtCore.QSize(16, 16))
- on_icon = Icon("hide_password")
- off_icon = Icon("show_password")
if self.showPassword is False:
self.password.setEchoMode(QtWidgets.QLineEdit.EchoMode.Normal)
- off_icon.set_icon(self.togglePassword)
+ Icon("show_password", self.togglePassword)
self.showPassword = True
else:
self.password.setEchoMode(QtWidgets.QLineEdit.EchoMode.Password)
- on_icon.set_icon(self.togglePassword)
+ Icon("hide_password", self.togglePassword)
self.showPassword = False
def setFontBold(self):
@@ -121,16 +139,26 @@ class Settings(QtWidgets.QDialog, _settings):
print(self.editSignature.toHtml())
def return_data(self):
+ port = self.smtp_port.text()
+ if port != "None":
+ port = int(port)
+ else:
+ port = 0
+ signature = self.editSignature.toHtml()
+ if signature != base:
+ signature = signature
+ else:
+ signature = ""
config.database.name = self.db_name.text()
config.database.path = self.db_path.text()
config.save_path = self.save_path.text()
config.mail.smtp_server = self.smtp_address.text()
- config.mail.port = int(self.smtp_port.text())
+ config.mail.port = port
config.mail.sender = self.sender_email.text()
config.mail.user_name = self.mail_username.text()
config.mail.password = self.password.text()
config.mail.use_user_name = self.use_username_smtp_login.isChecked()
- config.mail.signature = self.editSignature.toHtml()
+ config.mail.signature = signature
return config
@@ -144,6 +172,6 @@ def launch_settings():
import sys
app = QtWidgets.QApplication(sys.argv)
- window = Settings()
+ window = Settings("admin")
window.show()
sys.exit(app.exec())
diff --git a/src/ui/semesterapparat_ui.ui b/src/ui/semesterapparat_ui.ui
index eb1e7cb..7c68071 100644
--- a/src/ui/semesterapparat_ui.ui
+++ b/src/ui/semesterapparat_ui.ui
@@ -2766,19 +2766,6 @@
-
-
-
- 250
- 30
- 22
- 22
-
-
-
- ...
-
-
@@ -3135,10 +3122,9 @@
drpdwn_app_nr
- prof_title
drpdwn_prof_name
- prof_tel_nr
prof_mail
+ prof_tel_nr
app_name
app_fach
sem_winter
@@ -3189,15 +3175,10 @@
elsa_cancel_create
elsa_add_new
elsa_table
- reset_selection
- valid_check_app_fach
edit_faculty_member_new_surname
- valid_check_profname
- valid_check_appname
- valid_check_semester
- valid_check_mail
- valid_check_telnr
edit_faculty_member_new_title
+ elsa_update
+ quote_entry