# `view_celle_multi_udc.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

```{mermaid}
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

```{mermaid}
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

```{mermaid}
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.
