SWN034 - Contratti: testata¶
Nome programma SWN034 Linkage section UTILAGPRG - Linkage comune Id processo: 37 Nome processo: CONTRATTI-TES Tabelle principali gestite
| AREA | AREAGATE | Direzione |
|---|---|---|
| ASNCNTES | ARPCNTES | ------> |
Logica generale Sincronizzazione della testata contratti. Esportazione Esportazione di tutti gli elementi effettivamente modificati (con dati variati). Importazione Le applicazioni WEB potranno inserire, modificare o cancellare logicamente nuovi elementi Configurazioni possibili
| Gruppo | Parametro | Note |
|---|---|---|
| abilita | attiva-areaapp | |
| areaapp | cod-azienda | |
| areaapp | db-conn-string | |
| areaapp | agg-postgres-online |
Elaborazione Tipi di segnalazione: Vedi Tipi di segnalazione A - Controllo di esecuzione Vedi Controllo di esecuzione A.1 - Aggiornamento KEEP-ALIVE Per il momento non lo eseguiamo: il keep-alive viene tenuto aggiornato dal thread autonomo di aglancio; se il programma venisse chiamato in "tempo reale" dal programma di gestione, non necessita comunque del keep-alive. A.2 - Apertura A.2.1 Apertura tabelle Tentare l'apertura della tabella da sincronizzare: ARPCNTES Se fallita inviare una Segnalazione critica e chiudere. B - Esportazione elementi aggiornati * ID SINCRO: gestito * Esportazione differenziale: gestita ma non ottimizzata: non esiste una chiave diretta per ottenere solo i record aggiornati * Cancellazione logica: non gestita In questa fase si dovrà tenere conto di * Limite record * Limite errori * "Esporta tutto" B.1 - Stato sincronizzazione Sulla tabella APSTATOSYN, leggere il record relativo alla tabella/oggetto da sincronizzare "ARPCNTES"; se il record non esiste, crearlo impostando
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ARPCNTES" |
| A_SYN_DA_GES_DATA | 0 |
| A_SYN_DA_GES_ORA | 0 |
| A_SYN_DA_ID_SINCRO | 1 |
Qui otterremo due informazioni importanti: * Data/ora ultima esportazione da gestionale a postgres (A_SYN_DA_GES_DATA e A_SY_DA_GES_ORA) * Prossimo ID sincronizzazione da memorizzare sulla tabella (A_SYN_ID_SINCRO) B.1.1 - Stato non esistente In questo programma, se questo record non esiste lo cerco con "ASNCNTES" e recupero da qui il primo id sincro da utilizzare, in modo che non rischio di perdere aggiornamenti nel passaggio da una modalità all'altra. B.2 - Ricerca record da esportare B.2.1 Ricerca record da esportare
| Tipo di elaborazione | Condizione | Cosa fare |
|---|---|---|
| Singolo record | AGPRG-KEY <> " " (conterrà ACNT-CHIA1) |
Si legge direttamente il record da aggiornare su ASNCNTES Verrà eseguita se agg-postgres-online è attiva Se viene sincronizzato un record cancellato, verrà effettuata la cancellazione logica |
| Esportazione totale | AGPRG-ESPORTA-TUTTO = "S" | Si scorrono tutti i record di ASNCNTES; ogni record va considerato, ignorando il controllo sulla variazione dei record |
| Esportazione standard | Si scorrono tutti i record di ASNCNTES; | |
| Pulizia | AGPRG-OPE = "PULIZIA" | Eseguire solo il giro di cancellazione logica B.3 quindi uscire |
Per ciascun record valido si cercano tutti i record collegati: * ASNCNTE2 * ASNCNCND: ricerca con:
| Dato | Contenuto |
|---|---|
| ACND-PERTINENZA | "C" |
| ACND-TIP | " " |
| ACND-COD | " " |
| ACND-ID | Id contratto |
B.2.2 Verifica ed esportazione record B.2.2.1 Esportazione STANDARD: Verifica se il record è da esportare Alcune informazioni di ASNCNTES sono dei totalizzatori che possono essere significativi, se il contratto è monte ore o monte valore. Questi totalizzatori non esistono su ASNCNTES, ma vengono ricavati da ASNS17 - Operazioni su contratti a scalare Per questo motivo, e allo scopo di ottimizzare le prestazioni del programma, si agisce nel seguente modo: * Contratto a scalare? (ACNT-TIPO-SCALARE <> " ") -> Proseguo sempre con l'elaborazione, perchè devo valutare le differenze anche dei campi restituiti da ASNS17 prima di decidere se aggiornare * Contratto standard? (ACNT-TIPO-SCALARE = " ") -> Proseguo solo se se data/ora aggiornamento sono superiori all'ultima elaborazione B.2.2.2 Esportazione record Dopodichè si effettua la ricerca dell'informazione su ARPCNTES
| Dato | Contenuto |
|---|---|
| A-CNT-AZI | Codice azienda |
| A-CNT-ID | ACNT-ID-CONTRATTO |
Se non esiste, inserirlo. In fase di inserimento, il campo A-CNT-FL-EMAIL-SCADENZA viene inizializzato a "N" (notifica email scadenza contratto disabilitata per default). Questo evita che i contratti gestiti da Areagate inviino email di scadenza non previste (TASK-4596).
Se esiste, aggiornarlo l'aggiornamento del record deve avvenire solo se almeno un dato tra quelli da modificare è diverso.
NB: se è stata richiesta l'esportazione completa (AGPRG-ESPORTA-TUTTO = "S") allora il record dovrà essere esportato a prescindere dal confronto
Suggerimento
Invece di popolare direttamente i dati del record di destinazione, portarli su delle copie in w/s. Al termine confrontare i dati sulla destinazione con la copia in w/s.
Aggiornamento da ASNCNTES
NB: se a questo punto A-CNT-AGG-APP vale "A", significa che nel lasso di tempo tra la fase di importazione e questa, qualcuno ha aggiornato il record su APP: quindi segnalare sul log e ignorare l'esportazione.
| Dato | Contenuto | Confronto? |
|---|---|---|
| A-CNT-AZI | Codice azienda | |
| A-CNT-ID | ACNT-ID-CONTRATTO | |
| A-CNT-RIF-CONTRATTO | ACNT-RIF-CONTRATTO | Si |
| A-CNT-DATA | ACNT-DATA | Si |
| A-CNT-DATA-DA | ACNT-DATA-DA (se 0 usare ACNT-DATA) | Si |
| A-CNT-DATA-A | ACNT-DATA-A (se 0 usare ACNT-DATA) | Si |
| A-CNT-TIP | ACNT-TIP | Si |
| A-CNT-MODELLO | ACNT-MODELLO | Si |
| A-CNT-TIP-ATT | ACNT-TIP-ATT | Si |
| A-CNT-CLI-FAT | ACNT-CLI-FAT | Si |
| A-CNT-CLI-ASS | ACNT-CLI-ASS | Si |
| A-CNT-CONTATTO | ACNT-CONTATTO | Si |
| A-CNT-FL-CHIUSO | ACNT-FL-CHIUSO | Si |
| A-CNT-FL-MAN-PREV | ACNT-FL-MAN-PREV | Si |
| A-CNT-N-MAN-PREV | ACNT-N-MAN-PREV | Si |
| A-CNT-TIPOLOGIA | ACNT-TIPOLOGIA con alcune eccezioni: |
Si |
| A-CNT-CONFERMA-RINNOVO | ACNT-CONFERMA-RINNOVO | Si |
| A-CNT-COMMESSA | ACNT-COMMESSA | Si |
| A-CNT-SOTTOCOM | ACNT-SOTTOCOM | Si |
| A-CNT-NOMINATIVO-CRM | ACNT-NOMINATIVO-CRM | Si |
| A-CNT-RINNOVATO | ACNT-RINNOVATO | Si |
| A-CNT-ACCETTA-RINNOVO | ACNT-ACCETTA-RINNOVO | Si |
| A-CNT-FL-PROPOSTA | ACNT-FL-PROPOSTA | Si |
| A-CNT-FL-ASSICURAZIONE | ACNT-FL-ASSICURAZIONE | Si |
| A-CNT-ASS-DATA-INI | ACNT-ASS-DATA-INI | Si |
| A-CNT-ASS-DATA-FIN | ACNT-ASS-DATA-FIN | Si |
| A-CNT-ASS-COD | ACNT-ASSICURAZIONE | Si |
| A-CNT-ASS-DES | Descrizione del codice assicurazione, trovato su cogtabel: Il dato da usare è EUTA-FE-DES |
Si |
| A-CNT-NR-INT-NO-FAT | ACNT-NR-INT-NO-FAT | Si |
| A-CNT-ID-ORIGINE | ACNT-ID-ORIGINE | Si |
| A-CNT-FL-STAGIONALE | ACNT-FL-STAGIONALE | Si |
| A-CNT-GETTONE | ACNT-GETTONE | Si |
| A-CNT-TIPO-FAT | ACNT-TIPO-FAT | Si |
| A-CNT-NOTE | ACNN-NOTE trovate su ASNCNDAG, con: |
Si |
| A-CNT-MODO-SCALARE | Se ACN2-TIPO-SCALARE <> " " Usare i campi omonimi trovati su UTIL-ASNS17, dopo una chiamata a ASNS17 |
Si |
| A-CNT-QTA-SCALARE | Si | |
| A-CNT-QTA-USATA | Si | |
| A-CNT-IMPORTO | Si | |
| A-CNT-IMP-USATO | Si | |
| A-CNT-MODO-SCALARE | Se ACN2-TIPO-SCALARE = " " Tutti i campi vuoti, eccetto |
Si |
| A-CNT-QTA-SCALARE | Si | |
| A-CNT-QTA-USATA | Si | |
| A-CNT-IMPORTO | Si | |
| A-CNT-IMP-USATO | Si | |
| A-CNT-FL-CANC | " " | Si |
| A-CNT-ID-SINCRO | Prossimo id sincro | |
| A-CNT-AGG-APP | "N" |
In questa fase tenere memoria di data+ora dell'ultimo record di input considerato. Per tutti i campi alfanumerici significativi (non flag, non valori fissi) effettuare il parsing tramite GESSTR, come già fatto negli altri programmi di sincronizzazione B.2.2.3 Ricalcolo importo statistico In fase di esportazione dobbiamo anche effettuare una operazione che non riguarda l'esportazione vera e propria ma è comodo farla ora, perchè sono operazioni propedeutiche all'esportazione degli interventi chiusi. Si tratta di ricalcolare il campo ACN2-IMP-LISTINO. Premessa Questa operazione deve seguire una logica ben particolare, allo scopo di sincronizzare bene le operazioni necessarie, che in sintesi sono: 1. Viene pre-chiuso un intervento collegato a contratto: verrà importato da SWN037 2. Quando l'intervento da pre-chiuso passa a chiuso (ASN140) aggiornerò il contratto (ASNCNTES) in modo che l'esecuzione successiva di SWN034 lo consideri 3. Gira SWN034: i contratti interessati vengono esportati, e a questo punto potranno essere ricalcolati gli importi ACN2-IMP-LISTINO 1. In questa fase dovrò marcare come "da aggiornare" gli interventi chiusi collegati al contratto 4. Gira SWN037, processo per esportazione interventi chiusi: verranno riesportati gli interventi chiusi interessati, e di conseguenza valorizzato RCID-IMP-STATISTICO Esecuzione * Leggo tutti gli interventi chiusi collegati al contratto; * In questa fase considero solo le prestazioni "manodopera" * In questa fase devo marcare l'intervento come "da riesportare" * Contenuto tabella: * Prestazione (indice) * Tot ore eseguite (ore-ese) * Tot ore ricalcolate (ore-ric) * Valore totale (val-tot) * Per ogni prestazione sommo la quantità in "ore-ese" * Conto gli interventi chiusi in "int-chiusi" e quelli totali in "n-int-tot" * Per ciascuna riga tabella, calcoliamo "ore-ric", con la proporzione tra il numero di interventi chiusi e quelli totali * ore-ric = ore-ese * n-int-tot / n-int-chiusi * Infine valorizziamo tutte le prestazioni al prezzo di listino (senza considerare le condizioni di contratto, quindi usando COGS01) * val-tot = prezzo-listino * ore-ric A questo punto sommiamo il valore di tutte le prestazioni cosi' ricad vate e lo salviamo in ASNCNTE2.ACN2-IMP-LISTINO B.3 Verifica record cancellati Sulla tabella di origine ASNCNTES non esiste il flag di cancellazione logica. Quindi si opererà come segue: 1. Scorrere tutti i record di ARPCNTES per l'azienda 2. Ricerca, per ciascuno, del corrispondente record su ASNCNTES A questo punto la situazione potrebbe essere la seguente:
| ASNCNTES trovato? | A-CNT-FL-CANC | Cosa fare |
|---|---|---|
| Si | "C" | Aggiornare ARPCNTES impostando |
| Si | " " | Nessuna operazione |
| No | "C" | Nessuna operazione |
| No | " " | Aggiornare ARPCNTES impostando |
B.9 - Aggiornamento id syncro Al termine dell'elaborazione, aggiornare il record APSTATOSYN:
| Dato | Contenuto |
|---|---|
| A_SYN_AZIENDA | Codice azienda |
| A_SYN_TABELLA | "ASNCNTES" |
| A_SYN_DA_GES_DATA | Data/ora dell'ultimo record aggiornato |
| A_SYN_DA_GES_ORA | |
| A_SYN_DA_ID_SINCRO | Ultimo id sincro + 1 |
| A_SYN_VERSIONE | 2 |
Storico Modifiche¶
| Build | Descrizione |
|---|---|
| 2026/0426 | TASK-4596: inizializzazione a-cnt-fl-email-scadenza a "N" all'inserimento di un nuovo record ARPCNTES, per evitare che i contratti gestiti da Areagate inviino email di scadenza non previste |
Estratto da documentazione interna ClickUp