COGT20 - Anagrafica operatori¶
Sorgente: cbl/cogt20.cbl | Tipo: Programma interattivo GUI con griglia + frame di dettaglio a schede (anche richiamabile via CALL come lookup) | Program-ID: COGT20
Menu:
- Sistema > Configurazione > Menu/Operatori (voce "Operatori")
Scopo¶
E' l'anagrafica degli operatori del gestionale (tabella PRNTOPER), il cuore del controllo accessi: ogni operatore ha un codice numerico, una descrizione, una password, un profilo di abilitazioni, la periferica/stampante di default e una serie di flag e associazioni (agente, magazzino, zona, reparto, divisione, lingua, ecc.). E' il programma che governa chi puo' accedere e con quali abilitazioni.
Ogni operatore ha i dati distribuiti su tre file collegati per lo stesso codice operatore:
PRNTOPER(ptop-*) - dati anagrafici principali e flag di abilitazione;PRNTOPE2(pto2-*) - dati estesi (SMS, e-mail, credenziali SW-ING, id multiazienda, magazzino, area, zona, divisione, lingua, modo abilitazione, avviso fatture);MASKOPER(file.ARClocale,mop-*) - password cifrata e alcuni parametri di menu.
Il programma opera in due modalita' (a-modalita):
- Da menu: modalita' "Aggiornamento" (
a-modalita = "A") per inserire, modificare ed eliminare operatori. - Richiamato via CALL (
t20-called = COGT20et20-callervalorizzato, copybookutilt20.cpy): modalita' "Selezione" (a-modalita = "S"); l'operatore scelto con invio viene restituito al chiamante int20-out-cod/t20-out-des. In questa veste e' usato come help/selezione operatori (p.es. da COGT35, tasto F8).
Alcuni chiamanti particolari (WPOPEXE, WPOPTRE) accedono in sola visualizzazione: se t20-caller = "WPOPTRE" vengono disattivati inserimento, modifica, cancellazione e il pulsante restrizioni.
Struttura del programma¶
Il programma segue il pattern standard delle maschere Eurocoge basate su griglia con dettaglio: una griglia (e-tm-tab, gestita via GRIDADMN) elenca gli operatori e un frame di dettaglio a due schede (e-tab-control, pagine 01 e 02) consente inserimento/modifica del singolo operatore. La tabella interna tab-maschera (fino a k-max-ele-tab = 900 righe, occurs tm-righe) e' l'immagine di lavoro.
Inizializzazione (apri)¶
ctr-abil (salvo chiamate da WPOPEXE/WPOPTRE), z-99-init-program, open-files, apertura del file locale MASKOPER.ARC (path costruito da ext-ope-dir), lettura azienda (rd-azi), lettura configurazioni (x99-confi). Rileva la chiamata da altro programma (w-dc-called = "S") per impostare la modalita' selezione. Costruisce la chiave di trascodifica (w-key) dalla matrice w-calderone per cifrare/decifrare le password. Abilita i tasti funzione, prepara la griglia (z-prepara-tm-grid) e crea il pulsante custom "Restrizioni per operatore" (F5).
Caricamento (a10 / a10-loop)¶
Scandisce PRNTOPER dall'inizio (st-prntoper-notmin + rdnxt-prntoper) e per ogni operatore riempie la riga interna leggendo i dati collegati: PRNTOPE2 (rd-prntope2), profilo periferica PRNTPERF (rd-prntperf), profilo utente PRNTPROF (rd-prntprof), lingua COGTBLNG, zona/reparto/area su COGTABEL, sottoreparto su LODTABEL, agente su COGGEANA, magazzino su COGMAGAZ/CAPMAGAZ (consorzi), divisione su COGDIVIS. La password viene letta da MASKOPER e decifrata con ENCRYPT. Gli operatori con ptop-fl-val = "C" (cancellati logicamente) sono nascosti ai non amministratori.
Griglia e selezione modalita' (a-grid / a-accept-grid)¶
Il tasto F3 commuta tra Selezione e Aggiornamento. In Selezione l'invio restituisce l'operatore al chiamante e termina; in Aggiornamento l'invio apre la riga in modifica (a-operazione = "M"). Ctrl-A inserisce (a-operazione = "I"), Ctrl-E cancella (con conferma). Shift-F4 apre la personalizzazione griglia (GRIDADMN). F1 propone la copia degli operatori da MASKOPER (copia-oper) e, tramite DIALOGS, l'accesso alla modifica configurazioni (x99-confi). Il pulsante custom F5 (visibile solo se gestione-gruppo-aziende = "S") apre COGT35 per le restrizioni per operatore/azienda sull'operatore selezionato.
Riga di dettaglio a schede (a-riga-dettaglio ... a-riga-dettaglio-fine)¶
Il dettaglio e' organizzato su due schede accettate campo per campo con navigazione avanti/indietro (F2). I campi principali:
- Pagina 01: codice operatore (chiave, editabile solo in inserimento), descrizione, password (solo amministratore), periferica di default (
tm-prf-cod, F8 -> COGT24), flag validita' (tm-fl-val), profilo utente (tm-prof-cod, F8 -> COGT30), id multiazienda, agente (tm-age-cod, help COGS65W), lingua (F8 -> COGE0A), flag menu automatico/forzato/albero/Windows, flag export dati, flag amministratore, modo abilitazione (Ottimistica/Pessimistica). - Pagina 02: reparto/sottoreparto (visibili se
gestione-reparti = "S"; F8 -> W80 e COGF12), invio SMS, divisione (F8 -> COGD34), invio e-mail, utente/password SW-ING, agenzia (F8 -> WCA005.COB), magazzino (F8 -> W36), zona (F8 -> COGF01), area agenti CAP (F8 -> CAP270), controllo fatture attive su cruscotto.
Alla conferma (F3, a-riga-dettaglio-fine) il record viene scritto/riscritto contestualmente su PRNTOPER, PRNTOPE2 e MASKOPER (password cifrata con CRYPT); l'operazione (wr-/rwr-) e' scelta rileggendo prima il record in lock. Segue l'aggiornamento del flag SMS sul contatto CRM collegato (aggiorna-sms, su COGANATN/COGRIFER), l'eventuale creazione contatto potenziale (CRM016 se az-cli-pot = "S") e la sincronizzazione KPN (x-sincronizza-kpn).
Cancellazione (c-cancella)¶
Rilegge PRNTOPER in lock (rd-prntoper-lk) e lo elimina (del-prntoper); elimina anche i record collegati su MASKOPER (del-maskoper) e PRNTOPE2 (del-prntope2), poi sincronizza KPN.
Copia operatori (copia-oper)¶
Scandisce MASKOPER (st-maskoper-notmin + rdnxt-maskoper) e crea in PRNTOPER gli operatori presenti nel file maschere ma non ancora in anagrafica (funzione di allineamento/migrazione da vecchio impianto).
Sincronizzazione KPN (x-sincronizza-kpn)¶
Dopo ogni scrittura/cancellazione, invia la chiave operatore (ptop-chia1) al modulo di sincronizzazione tramite SWN073 (operazione ESPORTA-KEY), per propagare l'anagrafica operatori verso il sistema KPN.
Variante ISCOBOL (>> IF ISC IS DEFINED)¶
In compilazione iSeries/ISCOBOL, alla scrittura/cancellazione l'operatore viene propagato anche su DB relazionale tramite ISGESOPE (funzioni upsert/delete), usando i record lq-ptop-rec/lr-ptop-rec (copie di prntoper.cpy con prefisso rinominato).
Tabelle e file¶
| File logico | Chiave / accesso | Descrizione |
|---|---|---|
| FEURTAB | - | Tabella di sistema (aperta via cogfiles.cpy) |
| PRNTOPER | primaria ptop-chia1 (ptop-cod); secondaria ptop-chia2 (ptop-des) |
Anagrafica operatori: codice, descrizione, periferica, password, profilo, agente, flag abilitazione (ptop-fl-amm, ptop-fl-exp, ptop-menu-tree, ptop-menu-win, ptop-fl-val) |
| PRNTOPE2 | primaria pto2-cod |
Dati estesi operatore: SMS, e-mail, credenziali SW-ING, id multiazienda, magazzino/area/zona, divisione, lingua, modo abilitazione, avviso fatture |
| MASKOPER | file locale .ARC, chiave mop-ope |
Password cifrata e parametri di menu personalizzato (menu a carattere) |
| PRNTPERF | ptpf-cod (lettura) |
Descrizione periferica di default |
| PRNTPROF | ptpr-cod (lettura) |
Descrizione profilo utente |
| COGGEANA | ana-tipo/ana-cod (lettura) |
Anagrafica agente collegato all'operatore |
| COGTABEL | euta-tipo/euta-cod (lettura) |
Descrizioni zona (tipo 88), reparto (tipo 85), area (tipo "BV") |
| LODTABEL | lta-tipo/lta-cod (lettura) |
Descrizione sottoreparto (tipo 11), se gestione reparti attiva |
| COGMAGAZ / CAPMAGAZ | magz-* / magc-cod (lettura) |
Descrizione magazzino operatore (CAPMAGAZ solo per consorzi) |
| COGDIVIS | div-cod (lettura) |
Descrizione divisione |
| COGTBLNG | lng-cod (lettura) |
Descrizione lingua |
| COGANATN | atn-ope-cod (chia3, lettura) |
Contatti CRM collegati all'operatore (per aggiornamento SMS) |
| COGRIFER | rif-tip/rif-cod (lettura/riscrittura) |
Aggiornamento campo SMS del referente collegato |
COPY incluse¶
File Section¶
feurtab.fd, cogt20.select, cogt20.fd, cogfiles.cpy, maskoper.fd, maskoper.cpy
Working-Storage¶
cogt20.wrk, wstato.cpy, wgrave.cpy, wgrid.cpy, wopenf.cpy, wnscr.cpy, cogazien.cpy, utildlg.cpy, utilgdad.cpy, utils65.cpy, utild34.cpy, utilt24.cpy, utilt30.cpy, utilw80.cpy, utilncnf.cpy, utilw36.cpy, utilf01.cpy, utilcap270.cpy, utilcoge0a.cpy, utilcogt35.cpy, utilagprg.cpy; sotto >> IF ISC: utilisgesope.cpy, prntoper.cpy (due volte con replacing leading), iscobol.def
Linkage¶
wcont.cpy, utilf12.cpy, wcont1.cpy, utilt20.cpy
Procedure Division¶
cogt20.decla, cogt20-01.scr (screen), grave.cpy, mmmask.cpy, opengen.cpy, stato1.cpy, stato.cpy, winmsg.cpy, sendw36.cpy, coganatn.k03, sendw80.cpy, utilgrid.cpy, cogt20.prc, maskoper.k01
Le routine di I/O su PRNTOPER, PRNTOPE2, MASKOPER e le altre tabelle sono incluse tramite la catena di COPY generata (.k01/.k02/.k03).
CALL a sottoprogrammi¶
| Programma | Scopo |
|---|---|
| GRIDADMN | Gestione griglia (Prepara, Svuota-Tutto, Add-Record, Modify-Record) e personalizzazione colonne (Shift-F4) |
| COGT24 | Help/selezione periferica di default (F8 su periferica) |
| COGT30 | Help/selezione profilo utente (F8 su profilo) |
| COGT35 | Restrizioni per operatore/azienda dell'operatore selezionato (pulsante F5) |
| COGS65W | Help/selezione agente (campo agente) |
| COGE0A | Help/selezione lingua (F8) |
| COGF12 | Help/selezione sottoreparto (F8) |
| COGD34 | Help/selezione divisione (F8) |
| COGF01 | Help/selezione zona (F8) |
| CAP270 | Help/selezione area agenti CAP (F8) |
| WCA005.COB | Help/selezione agenzia (F8, solo consorzi) |
| W80 / W36 | Help reparto (tipo 85) e magazzino (send-w80 / send-w36) |
| CRM016 | Creazione contatto potenziale (se az-cli-pot = "S" in inserimento) |
| DIALOGS | Dialogo di scelta per la copia operatori / configurazione (F1) |
| ENCRYPT / CRYPT | Cifratura/decifratura password su MASKOPER |
| SWN073 | Sincronizzazione anagrafica operatore verso KPN (ESPORTA-KEY) |
| RNEWCONF | Lettura parametri di configurazione (vedi sotto) |
| ISGESOPE | (solo ISCOBOL) upsert/delete operatore su DB relazionale |
I sottoprogrammi Y* di gestione tabella sono generati dallo Screen Designer.
Il programma e' a sua volta richiamato via CALL come help/selezione operatori (p.es. da COGT35) e in sola lettura dai popup WPOPEXE/WPOPTRE.
Configurazioni RNEWCONF¶
Nel paragrafo x99-confi (pacchetto C) sono lette tre chiavi:
| Gruppo | Chiave | Variabile | Effetto |
|---|---|---|---|
| ODONTO | GESTIONE-REPARTI | tm-cfg-reparto |
Se "S", attiva i campi reparto/sottoreparto e le relative colonne di griglia |
| abilita | gruppo-aziende | tm-cfg-abil-gruppo |
Abilitazione gestione gruppo aziende (multiazienda) |
| assist | gestione-gruppo-aziende | tm-cfg-gruppo-aziende |
Se "S", mostra il pulsante F5 "Restrizioni per operatore" (COGT35) |
Note tecniche¶
- Password cifrate: la password non e' mai in chiaro su file. Su
MASKOPERe' cifrata conCRYPT(chiavew-keyderivata dalla matricew-calderone) e decifrata in visualizzazione conENCRYPT. Il campo password nel dettaglio e' visibile solo agli amministratori (w-fl-ammin = "S"). - Tre file per un operatore: creazione, modifica e cancellazione agiscono in modo coordinato su
PRNTOPER,PRNTOPE2eMASKOPER; l'operazione effettiva (wr-/rwr-) e' decisa rileggendo il record in lock su ciascun file, per gestire coerentemente i casi di record gia' presente/gia' cancellato. - Chiave secondaria descrizione:
PRNTOPERha una chiave alternata suptop-des; la scansione in caricamento avviene comunque sulla chiave primaria (codice). - Doppia veste (menu / lookup): la stessa maschera funge da anagrafica quando lanciata da menu e da finestra di selezione quando richiamata via CALL; discriminante
w-dc-called(dat20-called/t20-caller). - Accesso ristretto WPOPTRE: se il chiamante e'
WPOPTRE, tutti i tasti di modifica/inserimento/cancellazione e il pulsante restrizioni sono disattivati (sola consultazione). - Cancellazione logica:
ptop-fl-val = "C"marca un operatore come cancellato logicamente; e' visibile solo agli amministratori. - Sincronizzazione esterna: ogni variazione dell'anagrafica viene propagata a KPN via
SWN073e, in build ISCOBOL, a un DB relazionale viaISGESOPE.