Aggiungi diagnostica celle con multiple UDC

This commit is contained in:
2026-07-06 18:16:17 +02:00
parent 7f3ce9d3af
commit 1ea37eb49d
3 changed files with 95 additions and 40 deletions

View File

@@ -43,6 +43,49 @@ WHERE chiuse.StatoDocumento = 'D'
ORDER BY NomeSimbolicoCella, UDC;
"""
SQL_MULTIPLE_UDC_BY_CELL = """
WITH celle_multiple AS (
SELECT
g.IDCella
FROM dbo.XMag_GiacenzaPallet AS g
WHERE g.IDCella NOT IN (1000, 9999)
GROUP BY g.IDCella
HAVING COUNT(DISTINCT LTRIM(RTRIM(g.BarcodePallet))) > 1
)
SELECT
CONCAT(
RTRIM(c.Corsia),
' - ',
RTRIM(CAST(c.Colonna AS varchar(32))),
' - ',
RTRIM(CAST(c.Fila AS varchar(32)))
) AS CELLA,
LTRIM(RTRIM(g.BarcodePallet)) AS UDC
FROM dbo.XMag_GiacenzaPallet AS g
INNER JOIN celle_multiple AS cm
ON cm.IDCella = g.IDCella
INNER JOIN dbo.Celle AS c
ON c.ID = g.IDCella
ORDER BY CELLA, UDC;
"""
SHIPPED_NOT_DISASSOCIATED_COLUMNS = (
("UDC", "diagnostics.col.udc", "UDC", 130, "w"),
(
"Diagnostica",
"diagnostics.col.shipped_not_disassociated",
"Spedita ma non disassociata",
280,
"w",
),
("NomeSimbolicoCella", "diagnostics.col.symbolic_cell", "Nome simbolico cella", 240, "w"),
)
MULTIPLE_UDC_COLUMNS = (
("CELLA", "diagnostics.col.cell", "CELLA", 220, "w"),
("UDC", "diagnostics.col.udc", "UDC", 160, "w"),
)
def _rows_to_dicts(res: dict[str, Any] | None) -> list[dict[str, Any]]:
if not isinstance(res, dict):
@@ -74,6 +117,7 @@ class DiagnosticaWindow(ctk.CTkToplevel):
self._current_check = ""
self.var_status = tk.StringVar(value="")
self._last_export_slug = "diagnostica"
self._current_columns = SHIPPED_NOT_DISASSOCIATED_COLUMNS
self.title(
versioned_title(
@@ -112,7 +156,7 @@ class DiagnosticaWindow(ctk.CTkToplevel):
fg_color=theme_color(self._theme, "toolbar_frame_fg_color", ("#d7d7d7", "#3b3b3b")),
)
top.grid(row=0, column=0, sticky="ew", padx=8, pady=8)
top.grid_columnconfigure(1, weight=1)
top.grid_columnconfigure(2, weight=1)
button_font = theme_font(self._theme, "toolbar_button_font", ("Segoe UI", 10, "bold"))
ctk.CTkButton(
@@ -126,6 +170,17 @@ class DiagnosticaWindow(ctk.CTkToplevel):
font=button_font,
).grid(row=0, column=0, sticky="w", padx=(0, 8))
ctk.CTkButton(
top,
text=loc_text(
"diagnostics.button.multiple_udc_by_cell",
catalog=self._locale_catalog,
default="Celle con multiple UDC",
),
command=self._load_multiple_udc_by_cell,
font=button_font,
).grid(row=0, column=1, sticky="w", padx=(0, 8))
self.btn_export = ctk.CTkButton(
top,
text=loc_text("diagnostics.button.export", catalog=self._locale_catalog, default="Esporta XLSX"),
@@ -133,7 +188,7 @@ class DiagnosticaWindow(ctk.CTkToplevel):
font=button_font,
state="disabled",
)
self.btn_export.grid(row=0, column=2, sticky="e")
self.btn_export.grid(row=0, column=3, sticky="e")
ctk.CTkLabel(
self,
@@ -147,37 +202,8 @@ class DiagnosticaWindow(ctk.CTkToplevel):
wrap.grid_rowconfigure(0, weight=1)
wrap.grid_columnconfigure(0, weight=1)
cols = ("UDC", "Diagnostica", "NomeSimbolicoCella")
self.tree = ttk.Treeview(wrap, columns=cols, show="headings")
headings = {
"UDC": (
loc_text("diagnostics.col.udc", catalog=self._locale_catalog, default="UDC"),
130,
"w",
),
"Diagnostica": (
loc_text(
"diagnostics.col.shipped_not_disassociated",
catalog=self._locale_catalog,
default="Spedita ma non disassociata",
),
280,
"w",
),
"NomeSimbolicoCella": (
loc_text(
"diagnostics.col.symbolic_cell",
catalog=self._locale_catalog,
default="Nome simbolico cella",
),
240,
"w",
),
}
for col in cols:
text, width, anchor = headings[col]
self.tree.heading(col, text=text)
self.tree.column(col, width=width, anchor=anchor, stretch=True)
self.tree = ttk.Treeview(wrap, show="headings")
self._configure_tree_columns(self._current_columns)
style_treeview(
self.tree,
style_name="Diagnostics.Treeview",
@@ -196,10 +222,22 @@ class DiagnosticaWindow(ctk.CTkToplevel):
def _set_status(self, text: str) -> None:
self.var_status.set(text)
def _configure_tree_columns(self, columns) -> None:
self.tree.delete(*self.tree.get_children(""))
keys = tuple(str(col[0]) for col in columns)
self.tree.configure(columns=keys, show="headings")
for key, locale_key, default, width, anchor in columns:
self.tree.heading(
key,
text=loc_text(str(locale_key), catalog=self._locale_catalog, default=str(default)),
)
self.tree.column(key, width=int(width), anchor=str(anchor), stretch=True)
def _load_shipped_not_disassociated(self) -> None:
self._run_check(
key="shipped_not_disassociated",
sql=SQL_SHIPPED_NOT_DISASSOCIATED,
columns=SHIPPED_NOT_DISASSOCIATED_COLUMNS,
busy_text=loc_text(
"diagnostics.busy.shipped_not_disassociated",
catalog=self._locale_catalog,
@@ -207,7 +245,19 @@ class DiagnosticaWindow(ctk.CTkToplevel):
),
)
def _run_check(self, *, key: str, sql: str, busy_text: str) -> None:
def _load_multiple_udc_by_cell(self) -> None:
self._run_check(
key="multiple_udc_by_cell",
sql=SQL_MULTIPLE_UDC_BY_CELL,
columns=MULTIPLE_UDC_COLUMNS,
busy_text=loc_text(
"diagnostics.busy.multiple_udc_by_cell",
catalog=self._locale_catalog,
default="Cerco celle con multiple UDC...",
),
)
def _run_check(self, *, key: str, sql: str, columns, busy_text: str) -> None:
if self._load_in_progress or not self._is_alive():
return
@@ -217,6 +267,8 @@ class DiagnosticaWindow(ctk.CTkToplevel):
self._load_in_progress = True
self._current_check = key
self._last_export_slug = key
self._current_columns = columns
self._configure_tree_columns(columns)
try:
self.btn_export.configure(state="disabled")
except Exception:
@@ -242,15 +294,12 @@ class DiagnosticaWindow(ctk.CTkToplevel):
try:
rows = _rows_to_dicts(res)
self.tree.delete(*self.tree.get_children(""))
keys = [str(col[0]) for col in self._current_columns]
for index, row in enumerate(rows):
self.tree.insert(
"",
"end",
values=(
row.get("UDC") or "",
row.get("Diagnostica") or "",
row.get("NomeSimbolicoCella") or "",
),
values=tuple(row.get(key) or "" for key in keys),
tags=(zebra_tag(index),),
)
try: