Checkpoint before ghost pallet cleanup workflow
This commit is contained in:
@@ -20,18 +20,18 @@ async_msssql_query.py
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
gestione_aree_frame_async.py
|
||||
gestione_aree.py
|
||||
----------------------------
|
||||
|
||||
.. automodule:: gestione_aree_frame_async
|
||||
.. automodule:: gestione_aree
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
layout_window.py
|
||||
----------------
|
||||
gestione_layout.py
|
||||
------------------
|
||||
|
||||
.. automodule:: layout_window
|
||||
.. automodule:: gestione_layout
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
@@ -44,10 +44,10 @@ reset_corsie.py
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
view_celle_multiple.py
|
||||
----------------------
|
||||
view_celle_multi_udc.py
|
||||
-----------------------
|
||||
|
||||
.. automodule:: view_celle_multiple
|
||||
.. automodule:: view_celle_multi_udc
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
||||
|
||||
@@ -12,12 +12,12 @@ flowchart TD
|
||||
Main --> DB["AsyncMSSQLClient"]
|
||||
|
||||
Launcher --> Reset["reset_corsie.py"]
|
||||
Launcher --> Layout["layout_window.py"]
|
||||
Launcher --> Ghost["view_celle_multiple.py"]
|
||||
Launcher --> Layout["gestione_layout.py"]
|
||||
Launcher --> Ghost["view_celle_multi_udc.py"]
|
||||
Launcher --> Search["search_pallets.py"]
|
||||
Launcher --> Picking["gestione_pickinglist.py"]
|
||||
|
||||
Reset --> Runner["gestione_aree_frame_async.AsyncRunner"]
|
||||
Reset --> Runner["gestione_aree.AsyncRunner"]
|
||||
Layout --> Runner
|
||||
Ghost --> Runner
|
||||
Search --> Runner
|
||||
|
||||
@@ -12,12 +12,13 @@ I diagrammi sono scritti in Mermaid, quindi possono essere:
|
||||
## Indice
|
||||
|
||||
- [main](./main_flow.md)
|
||||
- [layout_window](./layout_window_flow.md)
|
||||
- [gestione_layout](./gestione_layout_flow.md)
|
||||
- [reset_corsie](./reset_corsie_flow.md)
|
||||
- [view_celle_multiple](./view_celle_multiple_flow.md)
|
||||
- [view_celle_multi_udc](./view_celle_multi_udc_flow.md)
|
||||
- [search_pallets](./search_pallets_flow.md)
|
||||
- [gestione_pickinglist](./gestione_pickinglist_flow.md)
|
||||
- [infrastruttura async/db](./async_db_flow.md)
|
||||
- [warehouse operational flow](./warehouse_operational_flow.md)
|
||||
|
||||
## Convenzioni
|
||||
|
||||
|
||||
@@ -35,5 +35,5 @@ flowchart TD
|
||||
## Note
|
||||
|
||||
- E un helper minimale usato da `main.py`.
|
||||
- Il modulo esiste separato da `gestione_aree_frame_async.py`, ma concettualmente
|
||||
- Il modulo esiste separato da `gestione_aree.py`, ma concettualmente
|
||||
svolge lo stesso ruolo di gestione del loop condiviso.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# `gestione_aree_frame_async.py`
|
||||
# `gestione_aree.py`
|
||||
|
||||
## Scopo
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
# `layout_window.py`
|
||||
# `gestione_layout.py`
|
||||
|
||||
## Scopo
|
||||
|
||||
Questo modulo visualizza il layout delle corsie come matrice di celle, mostra
|
||||
lo stato di occupazione, consente di cercare una UDC e permette l'export della
|
||||
matrice.
|
||||
matrice. La griglia ad alte prestazioni e' resa con `tksheet`, mantenendo la
|
||||
stessa semantica visiva delle celle operative.
|
||||
|
||||
## Flusso operativo
|
||||
|
||||
@@ -57,5 +58,7 @@ flowchart LR
|
||||
- Il modulo usa un token `_req_counter` per evitare che risposte async vecchie
|
||||
aggiornino la UI fuori ordine.
|
||||
- La statistica globale viene ricalcolata da query SQL, mentre quella della
|
||||
corsia corrente usa la matrice già caricata in memoria.
|
||||
- `destroy()` marca la finestra come non più attiva per evitare callback tardive.
|
||||
corsia corrente usa la matrice gia' caricata in memoria.
|
||||
- Il click destro su una cella riusa lo stesso menu contestuale della versione
|
||||
precedente basata su pulsanti CTk.
|
||||
- `destroy()` marca la finestra come non piu' attiva per evitare callback tardive.
|
||||
@@ -13,7 +13,7 @@ Questo modulo gestisce la vista master/detail delle picking list e permette di:
|
||||
|
||||
```{mermaid}
|
||||
flowchart TD
|
||||
A["open_pickinglist_window() da main.py"] --> B["create_pickinglist_frame()"]
|
||||
A["open_pickinglist_window() in gestione_pickinglist.py"] --> B["create_frame()"]
|
||||
B --> C["GestionePickingListFrame.__init__()"]
|
||||
C --> D["_build_layout()"]
|
||||
D --> E["after_idle(_first_show)"]
|
||||
|
||||
@@ -9,12 +9,13 @@ infrastrutturali.
|
||||
|
||||
README.md
|
||||
main_flow.md
|
||||
layout_window_flow.md
|
||||
gestione_layout_flow.md
|
||||
reset_corsie_flow.md
|
||||
view_celle_multiple_flow.md
|
||||
view_celle_multi_udc_flow.md
|
||||
search_pallets_flow.md
|
||||
gestione_pickinglist_flow.md
|
||||
warehouse_operational_flow.md
|
||||
async_db_flow.md
|
||||
async_msssql_query_flow.md
|
||||
gestione_aree_frame_async_flow.md
|
||||
gestione_aree_flow.md
|
||||
async_loop_singleton_flow.md
|
||||
|
||||
@@ -22,7 +22,7 @@ flowchart TD
|
||||
I --> K["open_layout_window()"]
|
||||
I --> L["open_celle_multiple_window()"]
|
||||
I --> M["open_search_window()"]
|
||||
I --> N["open_pickinglist_window()"]
|
||||
I --> N["gestione_pickinglist.open_pickinglist_window()"]
|
||||
```
|
||||
|
||||
## Schema di chiamata
|
||||
@@ -33,13 +33,13 @@ flowchart LR
|
||||
Launcher --> Layout["open_layout_window"]
|
||||
Launcher --> Ghost["open_celle_multiple_window"]
|
||||
Launcher --> Search["open_search_window"]
|
||||
Launcher --> Pick["open_pickinglist_window"]
|
||||
Pick --> PickFactory["create_pickinglist_frame"]
|
||||
Launcher --> Pick["gestione_pickinglist.open_pickinglist_window"]
|
||||
Pick --> PickFactory["gestione_pickinglist.create_frame"]
|
||||
```
|
||||
|
||||
## Note
|
||||
|
||||
- `db_app` viene creato una sola volta e poi passato a tutte le finestre.
|
||||
- Alla chiusura del launcher viene chiamato `db_app.dispose()` sul loop globale.
|
||||
- `open_pickinglist_window()` costruisce la finestra in modo nascosto e la rende
|
||||
- `gestione_pickinglist.open_pickinglist_window()` costruisce la finestra in modo nascosto e la rende
|
||||
visibile solo a layout pronto, per ridurre lo sfarfallio iniziale.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# `view_celle_multiple.py`
|
||||
# `view_celle_multi_udc.py`
|
||||
|
||||
## Scopo
|
||||
|
||||
167
docs/flows/warehouse_operational_flow.md
Normal file
167
docs/flows/warehouse_operational_flow.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# Warehouse Operational Flow
|
||||
|
||||
Questo diagramma descrive il flusso operativo integrato tra:
|
||||
|
||||
- layout di magazzino;
|
||||
- gestione picking list;
|
||||
- movimentazione fisica dei pallet;
|
||||
- viste SQL e stored procedure coinvolte;
|
||||
- aggiornamento dell'interfaccia dopo ogni operazione.
|
||||
|
||||
## Vista d'insieme
|
||||
|
||||
```{mermaid}
|
||||
flowchart TD
|
||||
UI["Operatore su interfaccia"] --> LAY["Gestione Layout"]
|
||||
UI --> PL["Gestione Picking List"]
|
||||
|
||||
subgraph Layout["Flusso Layout"]
|
||||
LAY --> LC1["Caricamento corsie e metadati layout"]
|
||||
LC1 --> LC2["vViewMappaturaDescrizioneCorsia"]
|
||||
LC1 --> LC3["vViewMappaturaPosizCorsia"]
|
||||
LC1 --> LC4["MagLayout"]
|
||||
LC1 --> LC5["Celle / Magazzini"]
|
||||
LC2 --> GRID["Rendering griglia scaffale"]
|
||||
LC3 --> GRID
|
||||
LC4 --> GRID
|
||||
LC5 --> GRID
|
||||
GRID --> LX["Click su cella / ricerca UDC / menu contestuale"]
|
||||
end
|
||||
|
||||
subgraph Picking["Flusso Picking List"]
|
||||
PL --> PC1["Caricamento elenco documenti"]
|
||||
PC1 --> PV1["XMag_ViewPackingList"]
|
||||
PV1 --> PGRID["Griglia documenti aggregata"]
|
||||
PGRID --> PSEL["Selezione documento"]
|
||||
PSEL --> PV2["vViewPackingListRestante"]
|
||||
PV2 --> PDET["Griglia dettaglio documento"]
|
||||
PDET --> PACT["Prenota / S-prenota / consultazione"]
|
||||
end
|
||||
|
||||
subgraph Mov["Movimentazione pallet"]
|
||||
LX --> MOVE{"Operazione fisica?"}
|
||||
MOVE -->|Carico o spostamento| SP1["sp_xMagGestioneMagazziniPallet"]
|
||||
MOVE -->|Scarico pallet| SP1
|
||||
PACT -->|Prenota o s-prenota| SP2["sp_xExePackingListPallet"]
|
||||
SP1 --> M1["Aggiorna movimenti MagazziniPallet"]
|
||||
SP1 --> M2["Aggiorna cella destinazione / origine"]
|
||||
SP1 --> M3["Controlla prenotazione automatica"]
|
||||
M3 --> SP3["sp_ControllaPrenotazionePackingListPalletNew"]
|
||||
SP3 --> SP4["sp_xExePackingListPalletPrenota"]
|
||||
SP2 --> M4["Aggiorna Celle.IDStato"]
|
||||
SP2 --> M5["Scrive LogPackingList"]
|
||||
SP4 --> M4
|
||||
end
|
||||
|
||||
subgraph Views["Ricostruzione contesto"]
|
||||
M1 --> GV["XMag_GiacenzaPallet"]
|
||||
M2 --> CV["Celle"]
|
||||
GV --> XP["XMag_ViewPackingList"]
|
||||
GV --> TP["vXTracciaProdotti"]
|
||||
CV --> XP
|
||||
XP --> RL1["Stato documento / pallet / ubicazione"]
|
||||
TP --> RL2["Articolo / lotto / descrizione"]
|
||||
end
|
||||
|
||||
RL1 --> LREF["Refresh Layout / Picking List"]
|
||||
RL2 --> LREF
|
||||
LREF --> GRID
|
||||
LREF --> PGRID
|
||||
LREF --> PDET
|
||||
```
|
||||
|
||||
## Flusso del layout
|
||||
|
||||
```{mermaid}
|
||||
flowchart TD
|
||||
A["Apertura Gestione Layout"] --> B["Legge mappatura corsie"]
|
||||
B --> B1["vViewMappaturaDescrizioneCorsia"]
|
||||
B --> B2["vViewMappaturaPosizCorsia"]
|
||||
B --> B3["MagLayout"]
|
||||
B --> B4["Celle / Magazzini"]
|
||||
B1 --> C["Costruisce geometria scaffale"]
|
||||
B2 --> C
|
||||
B3 --> C
|
||||
B4 --> C
|
||||
C --> D["Query giacenza pallet per corsia"]
|
||||
D --> E["Colora celle: vuota / piena / multipla"]
|
||||
E --> F["Mostra UDC piu recente nella cella"]
|
||||
F --> G{"Interazione utente"}
|
||||
G -->|Ricerca UDC| H["Evidenzia cella in blu"]
|
||||
G -->|Tasto destro su cella rossa| I["Menu contestuale"]
|
||||
I --> J["Dialog scarico / analisi multi UDC"]
|
||||
J --> K["Movimentazione fisica pallet"]
|
||||
K --> L["Refresh layout"]
|
||||
```
|
||||
|
||||
## Flusso della picking list
|
||||
|
||||
```{mermaid}
|
||||
flowchart TD
|
||||
A["Apertura Gestione Picking List"] --> B["Query aggregata documenti"]
|
||||
B --> C["XMag_ViewPackingList"]
|
||||
C --> D["Una riga per documento"]
|
||||
D --> E["Utente seleziona il documento"]
|
||||
E --> F["Query dettaglio documento"]
|
||||
F --> G["vViewPackingListRestante"]
|
||||
G --> H["Mostra pallet ancora rilevanti per il documento"]
|
||||
H --> I{"Azione utente"}
|
||||
I -->|Prenota o s-prenota| J["sp_xExePackingListPallet"]
|
||||
I -->|Consulta dettaglio| H
|
||||
J --> K["Aggiorna IDStato delle celle del documento"]
|
||||
K --> L["LogPackingList"]
|
||||
K --> M["Refresh lista documenti"]
|
||||
K --> N["Refresh dettaglio documento"]
|
||||
```
|
||||
|
||||
## Flusso della movimentazione pallet
|
||||
|
||||
```{mermaid}
|
||||
flowchart TD
|
||||
A["Utente legge barcode pallet e cella"] --> B["sp_xMagGestioneMagazziniPallet"]
|
||||
B --> C{"Il pallet esiste gia in giacenza?"}
|
||||
C -->|No| D["Inserisce movimento V sulla nuova cella"]
|
||||
C -->|Si| E["Inserisce movimento P sulla vecchia cella"]
|
||||
E --> F["Inserisce movimento V sulla nuova cella"]
|
||||
D --> G["Aggiorna ricostruzione giacenza"]
|
||||
F --> G
|
||||
G --> H["XMag_GiacenzaPallet"]
|
||||
H --> I["XMag_ViewPackingList"]
|
||||
H --> J["vXTracciaProdotti"]
|
||||
I --> K["Ubicazione e stato documento"]
|
||||
J --> L["Dati articolo e lotto"]
|
||||
K --> M["Refresh interfaccia"]
|
||||
L --> M
|
||||
```
|
||||
|
||||
## Significato delle viste e delle stored procedure
|
||||
|
||||
- `XMag_ViewPackingList`:
|
||||
ricostruisce il collegamento tra pallet, documento, ubicazione e stato
|
||||
logistico. E' la vista principale per la schermata picking list.
|
||||
- `vViewPackingListRestante`:
|
||||
mostra il dettaglio operativo del documento, cioe' le righe ancora visibili
|
||||
e ordinate per ubicazione.
|
||||
- `vXTracciaProdotti`:
|
||||
arricchisce il pallet con lotto, codice articolo e descrizione.
|
||||
- `sp_xMagGestioneMagazziniPallet`:
|
||||
esegue il movimento fisico del pallet nel magazzino.
|
||||
- `sp_xExePackingListPallet`:
|
||||
fa il toggle di prenotazione delle celle coinvolte in una picking list.
|
||||
- `sp_xExePackingListPalletPrenota`:
|
||||
forza la prenotazione a `IDStato = 1`.
|
||||
- `sp_ControllaPrenotazionePackingListPalletNew`:
|
||||
controlla se, dopo una movimentazione fisica, debba essere riapplicata una
|
||||
prenotazione automatica sulle celle coinvolte.
|
||||
|
||||
## Lettura pratica del sistema
|
||||
|
||||
- Il layout risponde alla domanda:
|
||||
"dove sono i pallet e come sono distribuiti nello scaffale?"
|
||||
- La picking list risponde alla domanda:
|
||||
"quali pallet fanno parte di un documento e quali celle sono prenotate?"
|
||||
- La movimentazione pallet risponde alla domanda:
|
||||
"cosa succede nel tracciato quando un pallet viene caricato, spostato o
|
||||
scaricato?"
|
||||
- Le viste vengono rilette dopo l'operazione per riportare la UI in uno stato
|
||||
coerente con il database.
|
||||
Reference in New Issue
Block a user