Vai al contenuto

ASN056 - Proposta contratto matricole

Sorgente: cbl/asn056.cbl (1.728 righe) | Tipo: Programma interattivo con griglia paginata e file di transito

Menu: Assist 2.0 > Archivi > Contratti > Proposta contratto matricole


Scopo

Per ogni matricola con garanzia in scadenza nel periodo indicato, propone l'aggancio a un contratto attivo del cliente con tipo fatturazione "M" (a matricola). Alla conferma scrive le righe di pertinenza matricola sul contratto (ASNCNMTR + ASNCNMT2).

Escluse: matricole gia' collegate a contratto attivo "a matricola", matricole "Muletto" gia' assegnate.


File acceduti

File Copybook Modalita' Uso
ASNMATRI amtr-rec Input Scorre tutte le matricole, filtra per amtr-gar-fin nel periodo
ASNMTRTP amtp-rec Input Tipologia matricola (descrizione)
ASNCNMTR acnc-rec I-O Pertinenze matricole su contratto: controllo collegamenti esistenti (chiave k02 id-matricola) e scrittura nuove
ASNCNMT2 acnb-rec Output Tabella complementare matricole/contratto (PCASE-4281)
ASNCNTES acnt-rec Input Testate contratti: scorre quelli del cliente (chiave k05 cli-ass) per individuare candidati
ASNCNCND acnd-rec Input Condizioni contratto: verifica acnd-tip-fatt = "M"
COGGEANA ana-rec Input Anagrafica cliente (nome, zona, provincia)
COGTABEL euta-rec Input Decodifica zona (tipo 88), regione da provincia (tipo 26)

File di transito (temporanei)

File Scopo
cogtrans (trs_asn056.{oper}) Buffer matricole estratte. Chiave 1: trs-id-mat. Chiave 2 alternativa: nome + cli-cod + id-mat (ordinamento alfabetico per la griglia paginata)
filelog (asn056_{oper}.txt) File di log testuale con segnalazioni (F7 lo apre via OPENFILE)

Chiavi secondarie

  • cogtrans.k01, k02
  • asncntes.k05 (cli-ass)
  • asncnmtr.k02 (id-matricola)

Programmi chiamati

Programma Operazione Scopo
ASN220 ASN220-CALLED con asn220-tip-fatt = "M" Ricerca contratto manuale (F9 su colonna tm-r-id-contr), filtra a contratti "a matricola" del cliente (asn220-cli-ass)
DTPRG (utility) Conversione data → giorni progressivi
PRGDT (utility) Conversione giorni progressivi → data
GRIDADMN Personalizzazione griglia (Prepara, Svuota-Tutto, Add/Modify-Record, S-F4)
OPENFILE Apertura file di log via F7

Variabili di maschera

Campo Tipo Note
tm-data-ini, tm-data-fin 9(08) Periodo di scadenza garanzia
tm-r-id-mat, tm-r-sn-mat, tm-r-tipo-mat, tm-r-tipo-des Dati matricola riga griglia
tm-r-data-fine x(10) Data fine garanzia formattata
tm-r-cli, tm-r-nome 9(05)/x(40) Cliente
tm-r-zona, tm-r-zona-d, tm-r-regione, tm-r-regione-d Zona/regione (TASK 280219)
tm-r-id-contr 9(12) Contratto proposto (o 0 se ambiguo)
tm-r-fl-piu-contr x "+Contratti" se ambiguo
tm-r-sel x Marca selezione

Flusso principale

Fase 1: input periodo

Solo tm-data-ini e tm-data-fin sono accept obbligatori. x-controlla-tm-data-fin verifica tm-data-ini <= tm-data-fin.

Fase 2: caricamento transito (carica-file)

  1. Apre cogtrans output e filelog output
  2. Scorre ASNMATRI dall'inizio
  3. Per ogni matricola con amtr-gar-fin nel range:
    • Verifica esclusione: scorre ASNCNMTR (k02) per id-matricola = amtr-id:
      • Se acnc-tip = 'M' (muletto) → log "Matricola: \<id> collegata a contratto: \<id> tipo Muletto", skip
      • Altrimenti legge ASNCNCND (pert C) e ASNCNTES. Se acnt-fl-chiuso = spaces e acnd-tip-fatt = "M" → log "Matricola collegata a contratto: \<id>", skip
    • Conta contratti attivi "a matricola" del cliente: scorre ASNCNTES k05 per cli-ass-tip/cod = amtr-cli-tip/cod, conta w-quanti quelli con acnt-fl-chiuso = spaces e acnd-tip-fatt = "M"
    • Se w-quanti = 0 → log "Cliente: \<cod> Senza Contratti (Matricola:\<id>)"
    • Scrive record trs-rec su cogtrans con:
      • Se w-quanti > 1trs-id-contratto = 0, trs-fl-piu-contr = "S"
      • Se w-quanti = 1trs-id-contratto = w-id-contratto
    • Popola trs-zona, trs-zona-d, trs-regione, trs-regione-d da COGGEANA + COGTABEL
    • Chiave alternativa trs-chia2 = nome + cli-cod + id-mat per ordinamento alfabetico

Fase 3: griglia paginata

Riapre cogtrans in I-O, costruisce la griglia con paginazione standard (pg-up/pg-dwn + fscrol2.cpy + dtab.cpy).

Su Invio sulla riga:

  1. Verifica che trs-id-contratto != 0 (se 0 mostra m-asn056-9-1 "Selezionare prima il contratto")
  2. Toggle trs-fl-sel tra m-proposta e spaces
  3. Aggiorna grid

Su F9 sulla colonna contratto: chiama ASN220 e valida via x-controlla-tm-r-id-contr: - ASNCNTES deve esistere - acnt-fl-chiuso deve essere spaces (non C/D) - ASNCNCND deve avere acnd-tip-fatt = "M" - Cliente del contratto deve coincidere con quello della matricola (trs-cli-tip/cod)

Fase 4: conferma (F3 = a1-aggiorna)

Per ogni record cogtrans con trs-fl-sel != spaces e trs-id-contratto != 0:

  1. Calcola w-prog-2 come max acnc-prog + 1 scorrendo ASNCNMTR (chiave primaria) per id-contratto + tip = 'C'
  2. Calcola acnc-data-da = trs-data-fine + 1 giorno via DTPRG/PRGDT
  3. Scrive ASNCNMTR:
    • tip = "C", prog = w-prog-2
    • id-matricola = trs-id-mat
    • raggr = spaces, canone = zero
    • data-da calcolata, data-a = zero
    • cadenza-fatt = spaces
    • provenienza = "P" (proposta)
    • da-confermare = "X" (richiede revisione)
    • data-ult-fatt/data-ult-fatt-prec = zero
  4. PCASE-4281 (TASK 280125): scrive anche ASNCNMT2 con stessa chiave (write o rwr se esistente)

Validazioni F9 manuale (x-controlla-tm-r-id-contr)

Controllo Errore
Esistenza contratto m-asn056-17-1
acnt-fl-chiuso = 'C' o 'D' m-asn056-18-1
acnd-tip-fatt != "M" m-asn056-19-1
Cliente assistito contratto != cliente matricola m-asn056-20-1 / m-asn056-21-1 (cli-ass vs cli-fat)

Configurazioni

ASN056 non legge RNEWCONF.

Messaggi

ID Contesto
m-asn056-2-1 Titolo maschera
m-asn056-3-1 "Confermi aggiornamento?"
m-asn056-4-1/5-1 Errori apertura cogtrans / "Estrazione in corso"
m-asn056-6-1 "Nessuna matricola trovata nel periodo"
m-asn056-7-1/8-1 Fine/inizio paginazione
m-asn056-9-1 "Selezionare prima un contratto" (Invio su riga con id-contratto=0)
m-asn056-10-1 ... 12-1 Errori validazione F9
m-asn056-13-1 Conferma aggiornamento finale
m-asn056-14-1 ... 16-1 Validazione date in testata
m-asn056-17-1 ... 21-1 Validazione contratto manuale

Note implementative

  • Il file cogtrans e' creato nella temp dir con suffisso {wo-oper} per evitare collisioni multi-utente
  • Il file di log asn056_{oper}.txt viene aperto da F7 (apertura sul server tramite OPENFILE)
  • TASK 280219 (28/02/2019): aggiunti campi zona/regione anche se non sempre visualizzati - utili per filtri/ordinamenti in griglia
  • TASK 141125 (14/11/2025): considera disdetta anticipata con acnt-fl-chiuso = 'D' oltre a 'C'
  • PCASE-4281 (28/01/2025): tabella complementare ASNCNMT2 per gestione dati estesi pertinenze matricola
  • Solo il tm-r-id-contr e' editabile sulla griglia: gli altri campi sono read-only (z-99-begin-entry-tm-tab)