diff --git a/src/ui/archive/archive.py b/src/ui/archive/archive.py index ace88b2..cecd4d9 100755 --- a/src/ui/archive/archive.py +++ b/src/ui/archive/archive.py @@ -1,5 +1,10 @@ +import csv +import os +import weakref + +from lib.db import Archive as ArchiveDbModel from lib.db import Users -from PyQt5.QtWidgets import QAbstractItemView +from PyQt5.QtWidgets import QAbstractItemView, QFileDialog from ui.crud import Crud, Json_External_Dialog_Cell_Widget from ui.helpers import replace_widget from ui.widget import Widget @@ -50,6 +55,7 @@ class Archive(Widget): self.crud.db_tw.setSelectionMode(QAbstractItemView.SingleSelection) self.crud.db_tw.itemSelectionChanged.connect(self.check) self.print_b.clicked.connect(self.print_label) + self.export_b.clicked.connect(lambda checked, self=weakref.ref(self): self().export()) def check(self): if not self.crud.modified: @@ -68,3 +74,50 @@ class Archive(Widget): self.check() if self.selected is not None and self.printer is not None: self.printer.print_archive_label(self.selected) + + def export(self, csv_path=None): + if csv_path is None: + csv_path, _ = QFileDialog.getSaveFileName( + None, + "Esportazione archivio", + "archivio.csv", + "CSV data (*.csv);;All Files (*)", + ) + csv_path = str(csv_path) + if not len(csv_path): + return + if not csv_path.lower().endswith(".csv"): + csv_path += ".csv" + csv_dir = os.path.dirname(csv_path) + if len(csv_dir): + os.makedirs(csv_dir, exist_ok=True) + data = [] + fieldnames = [ + # "id", + "time", + "user", + "result", + "overridden", + "test_data", + "label", + # "archived", + # "uploaded", + ] + for archived in list(ArchiveDbModel.select()): + exportable = { + # "id": archived.id, + "time": archived.time, + "user": archived.user, + "result": archived.result, + "overridden": archived.overridden, + "test_data": archived.test_data, + # "label": archived.label, + # "archived": archived.archived, + # "uploaded": archived.uploaded, + } + data.append(exportable) + if len(data): + with open(csv_path, "w", newline="") as f: + w = csv.DictWriter(f, fieldnames, extrasaction="ignore") + w.writeheader() + w.writerows(data) diff --git a/src/ui/archive/archive.ui b/src/ui/archive/archive.ui index 7aa782b..b29acd3 100755 --- a/src/ui/archive/archive.ui +++ b/src/ui/archive/archive.ui @@ -6,8 +6,8 @@ 0 0 - 98 - 61 + 184 + 51 @@ -27,7 +27,14 @@ - + + + + Esporta + + + + diff --git a/src/ui/login/login.py b/src/ui/login/login.py index fd8838f..9a1e23d 100755 --- a/src/ui/login/login.py +++ b/src/ui/login/login.py @@ -6,6 +6,10 @@ from PyQt5.QtGui import QKeySequence from PyQt5.QtWidgets import QMessageBox, QShortcut from ui.widget import Widget +# TESTING +login_count = 0 +# /TESTING + class Login(Widget): wrong_credentials = pyqtSignal() @@ -26,10 +30,12 @@ class Login(Widget): self.user_cb.setCurrentText("USER") self.password_le.setText("user") if "--auto-login-admin" in sys.argv or "--auto-login-user" in sys.argv or "--test" in sys.argv: - self.test_timer = QTimer() - self.test_timer.setSingleShot(True) - self.test_timer.timeout.connect(self.login_b.clicked.emit) - self.test_timer.start(500) + global login_count + if login_count <= 0: + self.test_timer = QTimer() + self.test_timer.setSingleShot(True) + self.test_timer.timeout.connect(self.login_b.clicked.emit) + self.test_timer.start(500) # /TESTING def try_login(self): @@ -40,4 +46,8 @@ class Login(Widget): self.wrong_credentials.emit() QMessageBox.critical(None, "Errore login", "Credenziali errate") else: + # TESTING + global login_count + login_count += 1 + # /TESTING self.successful_login.emit() diff --git a/src/ui/recipe_selection/recipe_selection.py b/src/ui/recipe_selection/recipe_selection.py index 16c9c6e..9f3ccd0 100755 --- a/src/ui/recipe_selection/recipe_selection.py +++ b/src/ui/recipe_selection/recipe_selection.py @@ -368,7 +368,7 @@ class Recipe_Selection(Widget): "stampa_etichetta_abilitata", print_template_field, ] - for recipe in Recipes.select(): + for recipe in list(Recipes.select()): steps = recipe.get_steps_map() exportable = { recipe_name_field: recipe.name,