Freeze stato gestione picking e storico
This commit is contained in:
@@ -203,7 +203,7 @@ if _MODULE_LOG_ENABLED:
|
||||
# -------------------- SQL --------------------
|
||||
SQL_PL = """
|
||||
SELECT
|
||||
COUNT(DISTINCT Pallet) AS Pallet,
|
||||
COUNT(DISTINCT NULLIF(LTRIM(RTRIM(CAST(Pallet AS varchar(32)))), '')) AS Pallet,
|
||||
COUNT(DISTINCT Lotto) AS Lotto,
|
||||
COUNT(DISTINCT Articolo) AS Articolo,
|
||||
COUNT(DISTINCT Descrizione) AS Descrizione,
|
||||
@@ -907,13 +907,25 @@ class GestionePickingListFrame(ctk.CTkFrame):
|
||||
self.after_idle(_paint)
|
||||
break
|
||||
|
||||
def _reselect_documento_after_reload(self, documento: str):
|
||||
"""(Opzionale) Dopo un reload DB, riseleziona la PL con lo stesso Documento."""
|
||||
def _reselect_documento_after_reload(self, documento: str) -> bool:
|
||||
"""After a reload, reselect the same document and reload its details."""
|
||||
for m in self.rows_models:
|
||||
if _s(m.pl.get("Documento")) == _s(documento):
|
||||
self._detail_cache.pop(documento, None)
|
||||
m.set_checked(True)
|
||||
self.on_row_checked(m, True)
|
||||
break
|
||||
return True
|
||||
return False
|
||||
|
||||
def _selected_documento_for_reload(self) -> str | None:
|
||||
"""Return the document that should survive a toolbar reload."""
|
||||
|
||||
selected = self._get_selected_model()
|
||||
if selected is not None:
|
||||
documento = _s(selected.pl.get("Documento"))
|
||||
return documento or None
|
||||
documento = _s(self.detail_doc)
|
||||
return documento or None
|
||||
|
||||
# ----- eventi -----
|
||||
@_log_call()
|
||||
@@ -967,6 +979,8 @@ class GestionePickingListFrame(ctk.CTkFrame):
|
||||
@_log_call()
|
||||
def reload_from_db(self, first: bool = False, reselect_documento: str | None = None):
|
||||
"""Load or reload the picking list summary table from the database."""
|
||||
if reselect_documento is None and not first:
|
||||
reselect_documento = self._selected_documento_for_reload()
|
||||
self.spinner.start(" Carico…") # spinner ON
|
||||
async def _job():
|
||||
_log_sql("SQL_PL", SQL_PL, {})
|
||||
@@ -976,8 +990,18 @@ class GestionePickingListFrame(ctk.CTkFrame):
|
||||
_log_dataset("SQL_PL", rows)
|
||||
self._refresh_mid_rows(rows)
|
||||
if reselect_documento:
|
||||
self.after_idle(lambda doc=reselect_documento: self._reselect_documento_after_reload(doc))
|
||||
self.spinner.stop() # spinner OFF
|
||||
def _reselect_or_clear(doc=reselect_documento):
|
||||
found = self._reselect_documento_after_reload(doc)
|
||||
if not found:
|
||||
self.detail_doc = None
|
||||
self._draw_details_hint()
|
||||
self.spinner.stop()
|
||||
self.busy.hide()
|
||||
self.after_idle(_reselect_or_clear)
|
||||
else:
|
||||
self.detail_doc = None
|
||||
self._draw_details_hint()
|
||||
self.spinner.stop() # spinner OFF
|
||||
# se era il primo load, ripristina il cursore standard
|
||||
if self._first_loading:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user