diff --git a/apps/platforms/src/pages/longevity/gestionale/index.astro b/apps/platforms/src/pages/longevity/gestionale/index.astro new file mode 100644 index 0000000..fe278e4 --- /dev/null +++ b/apps/platforms/src/pages/longevity/gestionale/index.astro @@ -0,0 +1,71 @@ +--- +// L'elenco dei clienti del gestionale: la prima pagina che il trainer apre. Ogni riga +// porta anche data e tipo dell'ultima sessione — utile per capire a colpo d'occhio chi +// non si presenta da tempo, senza aprire ogni scheda. +import Longevity from '../../../layouts/Longevity.astro'; +import { getLongevityDb } from '../../../lib/longevity/db'; +import { elencoClienti, etaDelCliente } from '../../../lib/longevity/anagrafica'; +import { sessioniDi } from '../../../lib/longevity/gestionale'; + +export const prerender = false; + +const db = getLongevityDb(); +const oggi = new Date().toISOString().slice(0, 10); + +const ETICHETTA_TIPO: Record<'checkup' | 'questionario', string> = { + checkup: 'Check-up', + questionario: 'Questionario', +}; +const formattaData = (iso: string) => + new Date(`${iso}T00:00:00`).toLocaleDateString('it-IT', { day: '2-digit', month: 'short', year: 'numeric' }); + +// Una query in più per ogni cliente (sessioniDi, tenendo solo [0]): va bene finché i +// fascicoli sono pochi — non è pensata per scalare a centinaia di clienti. +const righe = elencoClienti().map((c) => ({ + ...c, + eta: etaDelCliente(c.client_code, oggi), + ultima: sessioniDi(db, c.client_code)[0] ?? null, +})); +--- + +
+
+

Clienti

+

{righe.length} {righe.length === 1 ? 'fascicolo' : 'fascicoli'}.

+
+ Nuovo cliente +
+ + {righe.length === 0 ? ( +

Nessun cliente ancora. Apri il primo fascicolo.

+ ) : ( + + + + + + + + + + + + {righe.map((c) => ( + + + + + + + + ))} + +
CodiceCognome e nomeEtàAccessoUltima sessione
{c.client_code}{c.cognome} {c.nome}{c.eta ?? '—'}{c.ha_accesso ? 'Sì' : 'No'} + {c.ultima ? ( + <>{formattaData(c.ultima.data)} — {ETICHETTA_TIPO[c.ultima.tipo]} + ) : ( + Nessuna + )} +
+ )} +
diff --git a/apps/platforms/src/pages/longevity/gestionale/nuovo.astro b/apps/platforms/src/pages/longevity/gestionale/nuovo.astro new file mode 100644 index 0000000..20458ea --- /dev/null +++ b/apps/platforms/src/pages/longevity/gestionale/nuovo.astro @@ -0,0 +1,52 @@ +--- +// Il modulo per aprire un fascicolo nuovo: posta all'API del gestionale, che fa la +// validazione vera (pages/api/longevity/gestionale/clienti.ts). Qui c'è solo il form. +import Longevity from '../../../layouts/Longevity.astro'; + +export const prerender = false; + +const errore = Astro.url.searchParams.get('errore'); +--- + +
+

Nuovo cliente

+

Nome, cognome e sesso bastano per aprire il fascicolo: il resto si completa dopo.

+
+ + {errore &&

{errore}

} + +
+
+ + +
+ Sesso + + +
+ + + +
+ +
+ Annulla + +
+
+