# Specifica - Storico Picking List

## Obiettivo

La finestra "Storico Picking List" deve permettere di consultare le picking list visibili nel modello dati Python parallelo, comprese quelle gia' esaurite, mostrando lo stato sintetico della lista e il dettaglio delle UDC.

## Accesso

- La finestra si apre dal launcher principale tramite il pulsante "Storico Picking List".
- In una fase successiva potra' essere collegata alla form "Gestione Picking List" per aprire direttamente il dettaglio della lista selezionata.
- La finestra e' disponibile agli operatori autenticati secondo il permesso `launcher.open_history_pickinglist`.

## Comportamento UI

- La finestra usa lo stesso posizionamento delle altre form del backoffice.
- Tutte le interrogazioni al database sono asincrone.
- Durante il caricamento della lista e del dettaglio deve comparire l'overlay standard dell'applicazione.
- La parte alta mostra l'elenco delle picking list.
- La parte bassa mostra il dettaglio della picking list selezionata.
- Il filtro principale e' il numero documento, con ricerca parziale.

## Logica dati

La form usa un ramo di lettura storico Python separato dalle viste operative C#.

Oggetti SQL dedicati:

- `dbo.py_vPreparaPackingListSAMA1`
- `dbo.py_vPreparaPackingList`
- `dbo.py_XMag_ViewPackingListStorico`

Questi oggetti sono creati dallo script `apply_python_pickinglist_history_views.sql` e possono essere rimossi con `rollback_python_pickinglist_history_views.sql`.

La vista storica non usa `dbo.vPreparaPackingListSAMA1`, `dbo.vPreparaPackingList` o `dbo.XMag_ViewPackingList`, cosi' il programma C# continua a lavorare sul proprio ramo legacy.

La vista `dbo.py_vPreparaPackingListSAMA1` include:

- documenti dell'anno corrente: `BAMTES.ANNDOC >= YEAR(GETDATE())`
- documenti aperti e chiusi: `BAMTES.STATO IN ('P', 'D')`
- nessun filtro sugli ultimi 10 giorni

La lista alta aggrega per documento:

- data documento
- stato documento gestionale
- totale UDC
- righe residue
- righe spedite
- stato operativo
- stato prenotazione Python

Lo stato operativo e' calcolato cosi':

- `Chiusa`: il documento gestionale ha `BAMTES.STATO = 'D'`.
- `Da lavorare`: nessuna riga risulta spedita.
- `In corso`: almeno una riga risulta spedita e almeno una riga resta da lavorare.
- `Esaurita`: non restano righe operative.

Il criterio primario per riconoscere una picking list lavorata nello storico e' lo stato gestionale `BAMTES.STATO`.
La cella `9999 = 7G.1.1` resta un indizio logistico importante, ma non e' sufficiente come unico criterio storico perche' una UDC non piu' in giacenza puo' ricadere nei fallback della vista.

## Convenzioni operative

Una riga con `Cella = 9999` viene considerata spedita/prelevata, coerentemente con la convenzione `7G.1.1` osservata sul barcode.

## Limiti noti

Questa finestra e' una prima vista storica di consultazione. Non sostituisce ancora una vera storicizzazione annuale progettata a database. Quando il database verra' riprogettato per FlyWMS, sara' preferibile costruire una vista storica dedicata, con date di chiusura lista, utente, tempi e movimento UDC collegato.
