CRM100 - Gestione orari agenda (azienda / operatore)¶
Sorgente: cbl/crm100.cbl | Program-ID: CRM100 | Tipo: Programma interattivo GUI (gestione tabella a griglia)
Menu: CRM > Archivi > Agenda > Gestione orari
Scopo¶
Definisce gli orari di lavoro usati dall'agenda CRM per determinare le fasce di disponibilita'. Gli orari possono essere di tipo Azienda ("A", validi per tutta l'organizzazione, orr-rif a spazi) oppure per singolo Operatore ("O", personalizzati, orr-ope valorizzato e con priorita' sull'orario aziendale).
Per ogni giorno della settimana (lunedi'-domenica) l'operatore puo' indicare fino a tre fasce orarie (formato HHMM), gestite in una griglia di 7 righe fisse (una per giorno). Le ore impostate qui sono la base con cui la creazione calendario (CRM120) marca le fasce come disponibili/non disponibili.
Gli orari sono memorizzati su CRMAGORA con un record per ciascuna coppia (giorno, progressivo fascia 1-3). Il salvataggio (F3) cancella integralmente l'orario in oggetto e lo riscrive; la cancellazione (F4) elimina l'intera settimana.
File e tabelle¶
| File/Tabella | Tipo | Modalita' | Descrizione |
|---|---|---|---|
| FEURTAB | ISAM | Input | Parametri file aziendali (cogfiles.cpy) |
| CRMAGORA | ISAM | I-O | Orari agenda (record orr-rec; chiave primaria orr-tip+orr-rif+orr-gio+orr-prog; orr-ope ridefinisce orr-rif; orr-gio = "LU".."DO"; orr-prog = fascia 1-3; orr-ora-ini, orr-ora-fin). Verbi: st-crmagora-notmin, rdnxt-crmagora, wr-crmagora, del-crmagora |
| CRMUSERS | ISAM | Input | Utenti CRM (record cru-rec: cru-ope, cru-liv); usato per validare che l'operatore sia un utente CRM con livello valido (rd-crmusers) |
| PRNTOPER | ISAM | Input | Operatori di sistema (record ptop-rec: ptop-cod, ptop-des); usato per validare/descrivere l'operatore (rd-prntoper) |
Copybook utilizzate¶
| Copybook | Descrizione |
|---|---|
crm100.select, crm100.fd, crm100.wrk, crm100-01.scr, crm100.prc, crm100.decla |
Screen Designer |
feurtab.fd, cogfiles.cpy |
FEURTAB |
wstato.cpy, wgrave.cpy, wgrid.cpy, wopenf.cpy, wnscr.cpy, cogazien.cpy |
Working storage standard + dati azienda + griglia |
utilgdad.cpy |
Linkage GRIDADMN |
utilwp04.cpy, sendwp04.cpy |
Linkage e routine per il selettore operatori WP04 (wp04-out) |
utils93.cpy |
Linkage/gestione campi ora (subroutine COGS93) |
utilncnf.cpy |
Linkage RNEWCONF (configurazione) |
wcont.cpy, wcont1.cpy |
Linkage standard (stringhe) |
stato.cpy, stato1.cpy, winmsg.cpy, grave.cpy, opengen.cpy, mmmask.cpy, utilgrid.cpy |
Copybook di fine procedure + griglia |
Logica¶
Struttura goto-driven. Testata (tipo orario + operatore) seguita da una griglia di 7 righe (k-max-ele-tab = 7). Flusso principale:
- apri: init,
open-files,rd-azi; abilita F1 (configura), F3 (conferma/aggiorna), F4 (cancella), Invio (modifica), Shift+F4 (griglia), F8 (aiuto). Prepara la griglia e le descrizioni dei giorni (td-des). Parte in modalita' "A". - a4: azzera
tab-maschera, impostatm-tip = "A", abilita F3 di conferma. - a-tm-tip: accept del tipo orario (combo gestita da COGS60,
z-s60-tm-tip); F1 apre la configurazione della funzione (x99-confi-> RNEWCONF gruppoclipot, chiavepratica-tipo-numerazione, in modifica);x-controlla-tm-tipvalida "A"/"O". Se il tipo e' "O" verifica che esista almeno un orario aziendale (scan CRMAGORA suorr-tip = "A"), altrimenti blocca. - a-tm-ope: accept operatore (visibile solo se tipo "O"); F8 apre il selettore operatori WP04 (
send-wp04);x-controlla-tm-opevalida l'operatore su PRNTOPER (descrizione intm-nome) e su CRMUSERS (deve averecru-livnumerico e non zero). - a-richiesta-conferma:
x-imposta-conferma,acc-conf; poia-rd-tabcarica gli orari esistenti in griglia. - a-rd-tab / a-05 / a1-azienda: per tipo "O" scandisce CRMAGORA su
orr-tip = "O"eorr-ope = tm-ope; se non trova nulla (w-primo = 0) ricade sugli orari aziendali (a1-azienda,orr-tip = "A"). Per ogni record mappaorr-giosulla riga (LU=1..DO=7) eorr-progsulla fascia (1/2/3), riempiendotm-ini*/tm-fin*. - a-grid / a-accept-grid: accept sulla griglia. F3 ->
c-aggiorna(salvataggio). F4 -> conferma ec1-cancella(cancellazione settimana). Invio ->a-riga-dettaglio(modifica riga giorno) solo in modalita' A e con abilitazionew-abi-agg. - a-riga-dettaglio / a-tm-ini1..a-tm-fin3: accept delle sei ore (tre fasce) tramite subroutine COGS93 (
z-s93-tm-*); ogni controllo (x-controlla-tm-*) verifica ore <= 24 e minuti in {0,15,30,45}. Esc annulla la riga ripristinandotm-ele-sav. - c-aggiorna: chiede conferma, esegue
c1-cancella(cancella tutte le righe esistenti dell'orario), poi riscrive CRMAGORA: per ogni giorno con almeno una fascia valorizzata scrive un record per ciascuna delle tre fasce conorr-ora-ini/orr-ora-finnon nulli (orr-prog= 1/2/3). - c1-cancella: scandisce CRMAGORA per
orr-tip(eorr-opese tipo "O") e cancella tutti i record dell'orario. - fine / z-chiudi:
close crmusers crmagora prntoper, chiude la window, esce.
Configurazioni (RNEWCONF)¶
Pacchetto "C", punto 01:
| Gruppo | Chiave | Uso |
|---|---|---|
clipot |
pratica-tipo-numerazione |
Configurazione della funzione, apribile in modifica con F1 (x99-confi) |
CALL¶
| Programma | Scopo |
|---|---|
GRIDADMN |
Amministrazione/riempimento griglia (via utilgdad.cpy) |
WP04 (via send-wp04/sendwp04.cpy) |
Selettore operatori (F8), ritorna wp04-out |
RNEWCONF |
Lettura/modifica configurazione della funzione (F1) |
Note¶
- Ricaduta azienda -> operatore: caricando gli orari di un operatore ("O") senza record propri, il programma propone automaticamente gli orari aziendali ("A") come base (
a-50->a1-azienda). Gli orari operatore, se presenti, prevalgono su quelli aziendali. - Salvataggio distruttivo: F3 cancella integralmente l'orario in oggetto (
c1-cancella) e lo riscrive da zero; F4 cancella l'intera settimana. Non esiste modifica record-per-record su CRMAGORA. - Precondizione per gli orari "O": deve gia' esistere un orario aziendale "A" (verificato in
x-controlla-tm-tip), altrimenti l'inserimento di orari per operatore e' bloccato. - I record CRMAGORA sono uno per (giorno, fascia): un giorno con tre fasce genera tre record; le fasce a zero non vengono scritte.
- Codice in stile legacy:
PERFORM ... THRU(a-rd-tab thru ex-a,c-aggiorna thru ex-c,c1-cancella thru ex-c1,a1-azienda thru ex-a1),GO TOeNEXT SENTENCEestensivi. La chiusura file e' esplicita (close crmusers crmagora prntoper) anziche' tramitez-close-files.