﻿# Architettura Complessiva

Questa pagina collega i moduli principali del progetto in una vista unica,
partendo dal launcher fino ai moduli GUI e al livello infrastrutturale async/DB.

## Vista architetturale

```{mermaid}
flowchart TD
    Main["main.py"] --> Launcher["Launcher"]
    Main --> Loop["async_loop_singleton.get_global_loop()"]
    Main --> DB["AsyncMSSQLClient"]

    Launcher --> Reset["reset_corsie.py"]
    Launcher --> Layout["layout_window.py"]
    Launcher --> Ghost["view_celle_multiple.py"]
    Launcher --> Search["search_pallets.py"]
    Launcher --> Picking["gestione_pickinglist.py"]

    Reset --> Runner["gestione_aree_frame_async.AsyncRunner"]
    Layout --> Runner
    Ghost --> Runner
    Search --> Runner
    Picking --> Runner

    Runner --> Loop
    Runner --> DB
    Picking --> SP["prenota_sprenota_sql.py"]
    SP --> DB
    DB --> SQL["SQL Server / Mediseawall"]
```

## Flusso applicativo generale

```{mermaid}
flowchart LR
    User["Utente"] --> MainWin["Launcher"]
    MainWin --> Module["Finestra modulo"]
    Module --> AsyncReq["AsyncRunner.run(...)"]
    AsyncReq --> DbClient["AsyncMSSQLClient"]
    DbClient --> SqlServer["Database SQL Server"]
    SqlServer --> Callback["Callback _ok/_err"]
    Callback --> Module
```

## Osservazioni

- `main.py` centralizza il loop asincrono e il client database condiviso.
- I moduli GUI si concentrano sulla UI e delegano query e task lunghi a `AsyncRunner`.
- `gestione_pickinglist.py` è l'unico modulo che passa anche da `prenota_sprenota_sql.py` per la logica di prenotazione.
- La cartella `docs/flows/` contiene la vista dettagliata modulo per modulo.
