longevity: pagina del gestionale — modulo di check-up manuale

pages/longevity/gestionale/cliente/[code]/checkup.astro: campi da campiDelCheckup,
raggruppati per asse, etichetta e unità, input inputmode="decimal" tutti facoltativi
(la virgola decimale e i campi vuoti li gestisce l'endpoint). Invio verso
/api/longevity/gestionale/checkup.

Refs #2
This commit is contained in:
2026-09-26 13:05:47 +00:00
parent 179aeb442a
commit 9375a0380d
@@ -0,0 +1,57 @@
---
// Il modulo del check-up manuale: i campi letti dal registro (campiDelCheckup),
// raggruppati per asse come il modulo cartaceo. L'invio va all'API del gestionale, che fa
// la validazione vera (pages/api/longevity/gestionale/checkup.ts) — qui c'è solo il form.
import Longevity from '../../../../../layouts/Longevity.astro';
import { getLongevityDb } from '../../../../../lib/longevity/db';
import { clienteDaCodice } from '../../../../../lib/longevity/anagrafica';
import { campiDelCheckup } from '../../../../../lib/longevity/gestionale';
export const prerender = false;
const { code } = Astro.params;
const cliente = code ? clienteDaCodice(code) : null;
if (!cliente) return new Response('Cliente non trovato', { status: 404 });
const oggi = new Date().toISOString().slice(0, 10);
const gruppi = campiDelCheckup(getLongevityDb(), oggi);
const errore = Astro.url.searchParams.get('errore');
---
<Longevity
title={`Check-up — ${cliente.cognome} ${cliente.nome}`}
crumbs={['Clienti', `${cliente.cognome} ${cliente.nome}`, 'Nuovo check-up']}
variante="gestionale"
>
<div class="lg-head">
<h1>Nuovo check-up</h1>
<p>{cliente.cognome} {cliente.nome} — {cliente.client_code}. Lascia vuoto ciò che non hai misurato oggi.</p>
</div>
{errore && <p class="lg-form__errore">{errore}</p>}
<form class="lg-form" method="post" action="/api/longevity/gestionale/checkup">
<input type="hidden" name="client_code" value={cliente.client_code} />
<label class="lg-field">
<span>Data</span>
<input type="date" name="data" value={oggi} required />
</label>
{gruppi.map((g) => (
<section class="lg-form__blocco">
<h2>{g.asse}</h2>
{g.campi.map((c) => (
<label class="lg-field">
<span>{c.etichetta}{c.unita ? ` (${c.unita})` : ''}</span>
<input type="text" inputmode="decimal" name={c.id} />
</label>
))}
</section>
))}
<div class="lg-form__nav">
<a href={`/longevity/gestionale/cliente/${cliente.client_code}`}>Annulla</a>
<button type="submit">Salva check-up</button>
</div>
</form>
</Longevity>