# `view_celle_multiple.py`

## Scopo

Questo modulo esplora le celle che contengono più pallet del previsto, organizzando i risultati in un albero:

- corsia

- cella duplicata

- pallet contenuti nella cella

## Flusso operativo

            flowchart TD
        A["open_celle_multiple_window()"] --> B["CelleMultipleWindow.__init__()"]
        B --> C["_build_layout()"]
        C --> D["_bind_events()"]
        D --> E["refresh_all()"]
        E --> F["_load_corsie()"]
        E --> G["_load_riepilogo()"]
        F --> H["query_json SQL_CORSIE"]
        G --> I["query_json SQL_RIEPILOGO_PERCENTUALI"]
        H --> J["_fill_corsie()"]
        I --> K["_fill_riepilogo()"]

## Lazy loading dell’albero

            flowchart TD
        A["Espansione nodo tree"] --> B["_on_open_node()"]
        B --> C{"Nodo corsia o nodo cella?"}
        C -- Corsia --> D["_load_celle_for_corsia()"]
        D --> E["query_json SQL_CELLE_DUP_PER_CORSIA"]
        E --> F["_fill_celle()"]
        C -- Cella --> G["_load_pallet_for_cella()"]
        G --> H["query_json SQL_PALLET_IN_CELLA"]
        H --> I["_fill_pallet()"]

## Schema di chiamata

            flowchart LR
        Refresh["refresh_all"] --> Corsie["_load_corsie"]
        Refresh --> Riep["_load_riepilogo"]
        Open["_on_open_node"] --> LoadCelle["_load_celle_for_corsia"]
        Open --> LoadPallet["_load_pallet_for_cella"]
        Export["export_to_xlsx"] --> Tree["tree dati dettaglio"]
        Export --> Sum["sum_tbl riepilogo"]

## Note

- L’albero è caricato a richiesta, non tutto in una sola query.

- Questo riduce il costo iniziale e rende il modulo più scalabile.

- L’export legge sia il dettaglio dell’albero sia la tabella di riepilogo.