# Ordini

Modulo nativo per la gestione ordini del locale.

## Obiettivo

Portare il flusso operativo storico di `ordini.html` dentro la suite `powerup.cool`, mantenendo:

- apertura dal portale senza doppio login
- persistenza reale
- storico e strumenti di confronto
- UI coerente con il linguaggio visivo del portale

## Architettura

- frontend: app statica HTML/CSS/JS servita da Nginx
- backend: FastAPI + SQLAlchemy
- proxy locale frontend -> backend su `/api` e `/storico_ordini.csv`

## Persistenza reale

Il modulo ha due modalita:

- accesso dal gestionale -> database SQLite dedicato del tenant
- fallback standalone legacy -> `ORDINI_DATABASE_URL` PostgreSQL

Questo significa che in modalita integrata il modulo legge il registry del `backend-hub` e riusa la sessione del gestionale.

## Accesso

### Modalita portale

- il `portal` apre il modulo con `?session=<token>`
- il backend valida il token del gestionale
- il tenant attivo determina il database del locale

### Modalita fallback

- login manuale con username o email
- fallback legacy con password admin di modulo

## Funzioni implementate

- catalogo prodotti persistito
- import CSV verso archivio SQL
- aggiunta o aggiornamento prodotto
- ordine in corso in `sessionStorage`
- ordine sospeso lato server
- conferma ordine e storico batch
- ultimo ordine
- confronto annuale
- export CSV storico
- note condivise
- obiettivi stagionali

## Endpoint principali

- `POST /api/login`
- `GET /api/session`
- `GET /api/prodotti`
- `POST /api/prodotti`
- `GET /api/ordini`
- `POST /api/ordini`
- `DELETE /api/ordini`
- `GET /api/ordini/ultimo`
- `GET /api/ordini/confronto`
- `GET /api/ordine_sospeso`
- `POST /api/ordine_sospeso`
- `DELETE /api/ordine_sospeso`
- `GET /api/note`
- `POST /api/note`
- `DELETE /api/note/{note_id}`
- `GET /api/obiettivi`
- `GET /storico_ordini.csv`

## Configurazione principale

- `ORDINI_DATABASE_URL`
- `ORDINI_ADMIN_PASSWORD`
- `ORDINI_API_TOKEN`
- `ORDINI_DEFAULT_STAFF`
- `ORDINI_FRONTEND_PUBLIC_URL`
- `ORDINI_BACKEND_PUBLIC_URL`
- `TENANCY_REGISTRY_DATABASE`
- `TENANCY_SESSION_DURATION_HOURS`

## Nota UX

Quando si interviene sul frontend del modulo, il riferimento visivo corretto e il `portal`, non il vecchio esempio standalone fuori dal workspace.
