Un caso concreto: vogliamo bloccare l'invio di un bonus in ambito sociale, in modo che solo una famiglia possa fare richiesta.
Sarà indispensabile avere una base di dati o un'API da interrogare che ci da la chiave. Ipotiziamo che ci venga dato un file excel con i dati
Codice famiglia
codice fiscale
1234
SLVLNZxxxxxxxxx
Preparazione dei dati
Creiamo un JSON dal CSV, in modo che ogni riga del CSV diventi un oggetto di questo tipo:
{
"id": "SLVLNZxxxxxxxxx",
"famiglia": "1"
}
Si avvia un json-server per creare un'API su quei dati:
docker run -it [...] vimagick/json-server /app/db.json --read-only
Si testa con un client da CLI come httpie che è possibile interrogare l'API:
http get https://www2.stanzadelcittadino.it/comune-di-xxx/api/anagrafe/SLVLNZxxxxxxxxx
Ottenendo un risultato di questo tipo:
Preparazione della form
Usiamo un campo di nome unique_id per far si che solo un componente del nucleo familiare possa inviare la domanda.
Si aggiunge al form un campo di tipo Text fied che si popolerà con il valore del family code quando si inserisce nella form il campo Codice Fiscale:
Il valore del campo verrà calcolato in base a un piccolo script javascript da inserire nell'apposito campo Data -> Calculated Value
async function loadJSON(){
response = await fetch(url, param)
if (response.ok) {
console.log('got successful from API')
let responseData = await response.json()
console.log("famiglia: " + responseData['famiglia'])
if (!responseData.hasOwnProperty('famiglia')) {
console.log('error: got empty response data:')
console.log(responseData)
console.log('error routine, setting not available value')
instance.setValue('non disponibile')
} else {
console.log('got a non-null response Data')
instance.setValue(responseData['famiglia'])
}
} else {
console.log('error: got non 200 status code');
console.log('error routine, setting not available value')
instance.setValue('non disponibile')
}
}
if (data.applicant.data.fiscal_code.data.fiscal_code.length == 16){
let url = "/comune-di-xxxxx/api/anagrafe/" + data.applicant.data.fiscal_code.data.fiscal_code;
let param = {
method: "get",
headers: {'Content-Type': 'application/json'}
}
loadJSON(url, param)
} else {
console.log('not a valid value to perform api call')
value = ""
}
Per validare il campo sarà necessaria una validazione in JS, per ottenere un controllo di questo tipo:
Validazione JS del campo
if (data.unique_id && data.unique_id !== "non disponibile") {
valid = true
} else {
valid = "Siamo spiacenti, il suo nucleo familiare non può beneficiare di questo servizio. Per maggiori informazioni contatti il Comune ai recapiti nel Box Informazioni presente in questa pagina."
}