st-ten-1/src/ui/archive/archive.py

124 lines
4.4 KiB
Python
Raw Normal View History

2022-11-07 15:26:57 +00:00
import csv
import os
import weakref
from lib.db import Archive as ArchiveDbModel
2022-06-01 16:37:19 +00:00
from lib.db import Users
2022-11-07 15:26:57 +00:00
from PyQt5.QtWidgets import QAbstractItemView, QFileDialog
2022-06-01 16:37:19 +00:00
from ui.crud import Crud, Json_External_Dialog_Cell_Widget
from ui.helpers import replace_widget
from ui.widget import Widget
class Archive(Widget):
2022-09-07 15:24:40 +00:00
def __init__(self, printer=None, hide_cloud_image=False):
2022-06-01 16:37:19 +00:00
super().__init__()
self.printer = printer
2022-09-07 15:24:40 +00:00
# session = Users.get_session()
# if session is not None and session.is_admin:
# crud_aliases = {
# "id": "Id",
# "time": "Data e ora",
# "user": "Operatore",
2022-10-03 11:48:59 +00:00
# "test_data.recipe.name": "Ricetta",
2022-09-07 15:24:40 +00:00
# "result": "Esito",
# "overridden": "Esito forzato",
# "test_data": "Dati del test",
# "archived": "Archiviato sul portale",
# "uploaded": "Immagine in cloud",
# }
# readonly = ["id"]
# else:
crud_aliases = {
"time": "Data e ora",
"user": "Operatore",
2022-10-03 11:48:59 +00:00
"test_data.recipe.name": "Ricetta",
2022-09-07 15:24:40 +00:00
"result": "Esito",
"overridden": "Esito forzato",
"test_data": "Dati del test",
}
# readonly = True
2022-06-01 16:37:19 +00:00
self.crud = Crud(
"archive",
display_name="Archivio",
2022-09-07 15:24:40 +00:00
readonly=True,
2022-06-01 16:37:19 +00:00
select=list(crud_aliases.keys()),
fields_aliases=crud_aliases,
widget_classes={
"test_data": Json_External_Dialog_Cell_Widget,
},
)
replace_widget(self, "crud_w", self.crud)
self.selected = None
self.print_b.setEnabled(False)
2022-08-02 16:15:30 +00:00
self.crud.db_tw.setSelectionBehavior(QAbstractItemView.SelectRows)
self.crud.db_tw.setSelectionMode(QAbstractItemView.SingleSelection)
self.crud.db_tw.itemSelectionChanged.connect(self.check)
2022-06-01 16:37:19 +00:00
self.print_b.clicked.connect(self.print_label)
2022-11-07 15:26:57 +00:00
self.export_b.clicked.connect(lambda checked, self=weakref.ref(self): self().export())
2022-06-01 16:37:19 +00:00
def check(self):
2022-08-02 16:15:30 +00:00
if not self.crud.modified:
selected = self.crud.get_selected_rows()
2022-06-01 16:37:19 +00:00
if len(selected) == 1:
selected = selected[0] - 1 # - 1 because rn starts from 1 (filters line)
2022-08-02 16:15:30 +00:00
if selected >= 0 and selected < len(self.crud.data_index):
selected = self.crud.data_index[selected]
self.selected = self.crud.db.table_model.get_by_id(selected)
2022-06-01 16:37:19 +00:00
self.print_b.setEnabled(True)
return
self.selected = None
self.print_b.setEnabled(False)
def print_label(self):
self.check()
if self.selected is not None and self.printer is not None:
self.printer.print_archive_label(self.selected)
2022-11-07 15:26:57 +00:00
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)