From 2231a476c71bfb9651e1a155a1634e15b46ef175 Mon Sep 17 00:00:00 2001
From: "Adriano (daitarn)"
Date: Sun, 27 Sep 2026 22:24:22 +0200
Subject: [PATCH] longevity: sezione Giornale di bordo nella scheda cliente
Form (data, nota) ed elenco voci dopo Anagrafica, cancella visibile solo ad
autore o admin, messaggi per ?giornale=aggiunta|cancellata.
Refs #16
Co-Authored-By: Claude Sonnet 5
---
.../longevity/gestionale/cliente/[code].astro | 57 +++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/apps/platforms/src/pages/longevity/gestionale/cliente/[code].astro b/apps/platforms/src/pages/longevity/gestionale/cliente/[code].astro
index ac71f9e..b5debe4 100644
--- a/apps/platforms/src/pages/longevity/gestionale/cliente/[code].astro
+++ b/apps/platforms/src/pages/longevity/gestionale/cliente/[code].astro
@@ -12,6 +12,7 @@ import { sessioniDi } from '../../../../lib/longevity/gestionale';
import { misureDaVerificare } from '../../../../lib/longevity/misure';
import { refertoDi, ultimaSessioneDi } from '../../../../lib/longevity/vista';
import { formattaNumero } from '../../../../lib/longevity/formato';
+import { vociDelGiornale } from '../../../../lib/longevity/giornale';
export const prerender = false;
@@ -26,6 +27,7 @@ const sessioni = sessioniDi(db, cliente.client_code);
const daVerificare = misureDaVerificare(db, cliente.client_code);
const ultimaId = ultimaSessioneDi(db, cliente.client_code);
const referto = ultimaId !== null ? refertoDi(db, ultimaId) : null;
+const voci = vociDelGiornale(db, cliente.client_code); // #16: giornale di bordo, solo staff
const ETICHETTA_TIPO: Record<'checkup' | 'questionario', string> = {
checkup: 'Check-up',
@@ -46,6 +48,13 @@ const MESSAGGIO_VERIFICA: Record<'confermata' | 'scartata', string> = {
};
const messaggioVerifica =
verificata === 'confermata' || verificata === 'scartata' ? MESSAGGIO_VERIFICA[verificata] : null;
+const giornaleEsito = params.get('giornale'); // #16: 'aggiunta' | 'cancellata', dal redirect dell'API
+const MESSAGGIO_GIORNALE: Record<'aggiunta' | 'cancellata', string> = {
+ aggiunta: 'Nota aggiunta al giornale di bordo.',
+ cancellata: 'Nota cancellata dal giornale di bordo.',
+};
+const messaggioGiornale =
+ giornaleEsito === 'aggiunta' || giornaleEsito === 'cancellata' ? MESSAGGIO_GIORNALE[giornaleEsito] : null;
---
Check-up salvato (sessione #{salvato}).
}
{corretto && Check-up corretto (sessione #{corretto}): punteggi ricalcolati.
}
{messaggioVerifica && {messaggioVerifica}
}
+ {messaggioGiornale && {messaggioGiornale}
}
{fuoriCount && (
{fuoriCount} {Number(fuoriCount) === 1 ? 'misura è' : 'misure sono'} fuori dal range di
@@ -86,6 +96,53 @@ const messaggioVerifica =
Data di nascita: {cliente.data_nascita ? formattaData(cliente.data_nascita) : '—'}
+
+
Giornale di bordo
+
Solo lo staff lo vede. Una nota sbagliata si cancella e si riscrive: non si modifica.
+
+
+
+ {voci.length === 0 ? (
+
Nessuna nota ancora.
+ ) : (
+
+ | Data | Autore | Nota | |
+
+ {voci.map((v) => (
+
+ | {formattaData(v.data)} |
+ {v.autore} |
+ {v.testo} |
+
+ {(v.autore === Astro.locals.user!.username || Astro.locals.user!.role === 'admin') && (
+
+ )}
+ |
+
+ ))}
+
+
+ )}
+
+
{!referto && (
Nessuna sessione ancora: apri un check-up per cominciare il fascicolo.