# Diagramma Operativo - Scarico UDC / Prelievo

## Obiettivo
Prelevare una UDC dal magazzino e scaricarla verso la cella virtuale `9000000`.

## Nota importante
Dal codice C# emergono **due sottocasi diversi**:

- `scarico picking list`
  - parte da `F1` o `F2`
  - valida il pallet atteso della coda
- `scarico diretto`
  - parte dal pulsante `F4 Elimina`
  - non richiede una picking list prenotata

Questo diagramma descrive il **primo scarico UDC diretto**, cioe' il prelievo senza navigazione picking list.

## Stato iniziale del barcode

- form aperta
- nessuna operazione pendente
- focus sul campo `Pallet`
- prima label di stato neutra o grigia
- campo `Cella` non significativo finche' non si entra nel comando

## Come si entra nello stato iniziale dello scarico

Dal comportamento C# la strada piu' fedele e':

1. l'operatore preme `F4`
2. la form entra in modalita' scarico diretto
3. la prima label deve indicare:
   - `OP Scarico`
4. il campo `Cella` viene preimpostato a:
   - `9000000`
5. il focus va sul campo `Pallet`

## Stato operativo durante lo scarico

- `Pallet` = da leggere
- `Cella` = `9000000`
- focus sul campo `Pallet`
- label 1 grigia con:
  - `OP Scarico`

## Sequenza operativa

```mermaid
flowchart TD
    A["Stato neutro"] --> B["Operatore preme F4"]
    B --> C["Form entra in OP Scarico"]
    C --> D["Cella preimpostata a 9000000"]
    D --> E["Focus sul campo Pallet"]
    E --> F["Operatore legge barcode pallet"]
    F --> G{"Invio automatico del lettore o Enter manuale"}
    G --> H["Esecuzione stored sp_xMagGestioneMagazziniPallet"]
    H --> I{"Esito OK?"}
    I -- Si --> L["Label 1 verde/giallo: Ok Scarico"]
    L --> M["Label 2 = lotto"]
    M --> N["Label 3 = codice prodotto"]
    N --> O["Label 4 = descrizione articolo"]
    O --> P["Focus torna su Pallet per operazione successiva"]
    I -- No --> Q["Label 1 rossa con errore"]
    Q --> R["Focus torna su Pallet"]
```

## Stato finale se l'operazione va bene

- prima label:
  - verde chiaro o giallo-verde
  - testo tipo `Ok Scarico`
- seconda label:
  - lotto del pallet movimentato
- terza label:
  - codice prodotto
- quarta label:
  - descrizione articolo
- focus:
  - torna sul campo `Pallet`
- campo `Cella`:
  - resta `9000000`

## Stato finale se l'operazione fallisce

- prima label rossa
- testo di errore operativo
- focus sul campo `Pallet`
- nessun avanzamento di coda

## Coerenza con il C#

I punti dedotti direttamente dal codice C# sono:

- `F4 Elimina` forza uno scarico verso `9000000`
- lo scarico usa:
  - `sp_xMagGestioneMagazziniPallet`
- dopo il movimento il C# richiama:
  - `GetDatiPallet(...)`
  - e se il pallet non e' piu' nella vista picking passa a:
  - `GetDatiPalletLotto(...)`
- da quest'ultima lettura arrivano:
  - `Ok Scarico`
  - lotto
  - codice prodotto
  - descrizione articolo

## Punto ancora da verificare sul campo

Da confermare in prova reale:

- se nel client legacy il colore di successo finale dello scarico diretto sia:
  - verde chiaro
  - oppure giallo-verde
- se il focus torni sempre al campo `Pallet` anche dopo errore
- se il lettore genera davvero `Enter` automatico in ogni scenario di scansione
