Vai al contenuto

ASN055 - Integrazioni contratti

Sorgente: cbl/asn055.cbl (1.343 righe) | Tipo: Programma interattivo a griglia

Menu: Assist 2.0 > Archivi > Contratti > Integrazioni contratti


Scopo

Manutenzione tabellare delle integrazioni a contratti (ASNCNITG): per ciascun riferimento contratto registra correzioni di qta/importo da applicare al monte ore/prestazioni. Le integrazioni gia' applicate (tm-id-contratto != 0) sono read-only.

Supporta modalita' standalone (uso da menu) e called (invocato da altro programma con un riferimento contratto pre-impostato, tramite util-asn055).


Interfaccia chiamato (linkage)

util-asn055:

Campo Tipo Uso
asn055-called x(08) Identificativo programma chiamato ("ASN055")
asn055-caller x(08) Programma chiamante
asn055-rif-contratto x(15) Riferimento contratto filtro

Quando asn055-called = k-program-id and asn055-caller not = spaces, attiva il filtro w-dc-called = "S", w-dc-rif-contratto = asn055-rif-contratto: la griglia mostra solo le integrazioni del contratto e ogni nuova riga viene forzata sullo stesso riferimento.

File acceduti

File Copybook Modalita' Uso
ASNCNITG aitg-rec I-O Tabella integrazioni: scrittura/modifica/cancellazione
ASNCNTES acnt-rec Input Lookup contratto per riferimento (chiave k03) e raccolta cli-fat, id-contratto
ASNCNTAR acnr-rec Input Righe tariffe contratto: verifica disponibilita' qta/importo per segno negativo
COGGEANA ana-rec Input Anagrafica clienti (nome)
COGMERCI mer-rec Input Validazione merce/prestazione

Chiavi secondarie

  • asncnitg.k02 (id-contratto)
  • asncnitg.k03 (rif-contratto)
  • asncnitg.k04, k05 (altri ordinamenti)
  • asncntes.k03 (rif-contratto + cli-fat + id-contratto)

Programmi chiamati

Programma Operazione Scopo
ASN220 ASN220-CALLED Lookup contratto attivato da F8 sul campo riferimento (ritorna asn220-id)
GRIDADMN (gestione griglia) Personalizzazione colonne (Prepara, Svuota-Tutto, gestione da F4)

Campi griglia (tm-tab)

Campo Tipo Note
tm-id 9(12) ID record ASNCNITG. 0 = nuovo, !=0 = esistente
tm-id-contratto 9(12) ID contratto: !=0 → integrazione gia' applicata, read-only
tm-rif-contratto x(15) Riferimento contratto
tm-cliente/tm-nome 9(05)/x(40) Cliente di fatturazione (auto da contratto)
tm-data 9(08) Data integrazione
tm-merce-cm x(09) Codice prestazione
tm-qta/tm-qta-old 9() Quantita' / valore precedente per delta
tm-importo/tm-importo-old 9() Importo / valore precedente
tm-segno/tm-segno-old x(01) P o N
tm-note x() Note libere
tm-fl-riga-mod x(01) Flag riga modificata

Validazioni principali

x-controlla-tm-rif-contratto

Se tm-rif-contratto = spaces e tutti gli altri campi vuoti → riga "scartabile", esce ok.

Altrimenti: - Obbligatorio se altri campi compilati - Se w-dc-called = "S": deve coincidere con w-dc-rif-contratto - Cerca su ASNCNTES chiave k03 (acnt-rif-contratto). Scorre tutti i contratti con quel riferimento, prende quello con id maggiore (ultimo rinnovato). Estrae acnt-cli-fat-tip/cod, legge COGGEANA, popola tm-cliente/tm-nome

x-controlla-tm-segno

Valori ammessi: P o N. Se N, invoca x-controlla-riga-contratto.

x-controlla-riga-contratto (segno negativo)

Calcola la disponibilita' residua sul contratto considerando:

  1. Trova ASNCNTES con id maggiore (ultimo rinnovato)
  2. Scorre ASNCNTAR (chiave k02) per quel contratto, considerando solo pertinenza = 'C' e match acnr-merce = tm-merce-cm (i)
  3. Per ogni riga merce, scorre ASNCNITG (chiave k03 per riferimento) di tutte le altre integrazioni non ancora applicate (aitg-id-contratto = zero), sommando per segno P e sottraendo per segno N a acnr-qta e acnr-prezzo
  4. Se la stessa riga in griglia era negativa (tm-segno-old = "N"), restituisce qta/importo alla disponibilita'
  5. Verifica tm-qta (i) <= acnr-qta e tm-importo (i) <= acnr-prezzo. Se no, errore m-asn055-13-1/14-1
  6. PBUG-48 (22/11/18): se la prestazione non e' nell'ultimo contratto, cerca nei rinnovi precedenti scorrendo ASNCNTES (chiave k03) → ASNCNTAR. Se non trovata nemmeno qui, errore m-asn055-15-1

Logica di salvataggio (b-aggiorna)

Per ogni riga del grid (b-k da 1 a tm-grid-dati-pnt):

tm-rif-contratto tm-id Azione
spaces (vuoto) != 0 Cancella (b3-cancella)
spaces 0 Ignorata
valorizzato != 0 e tm-fl-riga-mod = "S" Modifica (b2-modifica)
valorizzato 0 Inserisce (b1-inserisci) con id auto-incrementato da w-amod-id

L'auto-incremento gestisce collision con loop scrivi-asncnitg (retry su WRITE non-ok).

Protezione righe applicate

z-tm-tab-*-be-ep: per i campi rif-contratto, data, merce, qta, importo, segno, note, se tm-id-contratto (k-be) not = 0w-cell-accept-ok = 'N' (cella non editabile). Stesso vincolo se w-dc-called = "S" sul campo riferimento contratto.

Modalita' ordinamento

tm-ordine Chiave usata
A aitg.k02 (id-contratto)
B aitg.k03 (rif-contratto): filtrata su w-dc-rif-contratto se called
C aitg.k04
D aitg.k05

Messaggi

ID Contesto
m-asn055-2-1 Titolo maschera
m-asn055-3-1/4-1 Abilitazione inserimento/modifica non concessa
m-asn055-5-1/6-1 Controlli pre-cancellazione (no righe / gia' applicata)
m-asn055-7-1/8-1/9-1 Riferimento contratto obbligatorio/inconsistente/non esistente
m-asn055-10-1 Data obbligatoria
m-asn055-11-1 Prestazione non esistente
m-asn055-12-1 Segno non valido (deve essere P o N)
m-asn055-13-1/14-1 Qta/Importo negativi non disponibili sul contratto
m-asn055-15-1 Prestazione non presente neanche sui contratti precedenti

Note implementative

  • Le righe gia' applicate (tm-id-contratto != 0) sono visualizzate ma protette: z-tm-tab-*-be-ep impedisce l'edit cella per cella
  • Il calcolo della disponibilita' per segno negativo tiene conto sia delle integrazioni esistenti non ancora applicate, sia delle modifiche in corso (tm-segno-old)
  • Il campo tm-fl-riga-mod distingue righe esistenti modificate da quelle non toccate (evita rwr inutili)
  • Logica multi-rinnovo (220119): per acnt-chia3 che ordina su rif-contratto + cli-fat + id, in caso di cambio cliente l'ordinamento puo' non essere temporale; viene preso esplicitamente l'id maggiore