# `gestione_pickinglist.py` ## Scopo Questo modulo gestisce la vista master/detail delle picking list e permette di: - caricare l'elenco dei documenti; - vedere il dettaglio UDC della riga selezionata; - prenotare e s-prenotare una picking list; - mantenere una UI fluida con spinner e refresh differiti. ## Flusso di apertura ```{mermaid} flowchart TD A["open_pickinglist_window() da main.py"] --> B["create_pickinglist_frame()"] B --> C["GestionePickingListFrame.__init__()"] C --> D["_build_layout()"] D --> E["after_idle(_first_show)"] E --> F["reload_from_db(first=True)"] F --> G["query_json SQL_PL"] G --> H["_refresh_mid_rows()"] H --> I["Render tabella master"] ``` ## Flusso master/detail ```{mermaid} flowchart TD A["Utente seleziona checkbox riga"] --> B["on_row_checked()"] B --> C["Deseleziona altre righe"] C --> D["Salva detail_doc"] D --> E["query_json SQL_PL_DETAILS"] E --> F["_refresh_details()"] F --> G["Render tabella dettaglio"] ``` ## Prenotazione / s-prenotazione ```{mermaid} flowchart TD A["Click Prenota o S-prenota"] --> B["Verifica riga selezionata"] B --> C["Determina documento e stato atteso"] C --> D["Chiama sp_xExePackingListPallet_async()"] D --> E["Aggiorna Celle e LogPackingList sul DB"] E --> F["SPResult"] F --> G{"rc == 0?"} G -- Si --> H["_recolor_row_by_documento()"] G -- No --> I["Messaggio di errore"] ``` ## Schema di chiamata ```{mermaid} flowchart LR Init["__init__"] --> Build["_build_layout"] Init --> First["_first_show"] First --> Reload["reload_from_db"] Reload --> Mid["_refresh_mid_rows"] Check["on_row_checked"] --> Details["_refresh_details"] Pren["on_prenota"] --> SP["sp_xExePackingListPallet_async"] Spren["on_sprenota"] --> SP ``` ## Note - Il modulo usa `AsyncRunner`, `BusyOverlay` e `ToolbarSpinner`. - Il caricamento iniziale รจ differito con `after_idle` per ridurre lo sfarfallio. - La riga selezionata viene tenuta separata dal dettaglio tramite `detail_doc`.