Vai al contenuto

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