Vai al contenuto

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, imposta tm-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 gruppo clipot, chiave pratica-tipo-numerazione, in modifica); x-controlla-tm-tip valida "A"/"O". Se il tipo e' "O" verifica che esista almeno un orario aziendale (scan CRMAGORA su orr-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-ope valida l'operatore su PRNTOPER (descrizione in tm-nome) e su CRMUSERS (deve avere cru-liv numerico e non zero).
  • a-richiesta-conferma: x-imposta-conferma, acc-conf; poi a-rd-tab carica gli orari esistenti in griglia.
  • a-rd-tab / a-05 / a1-azienda: per tipo "O" scandisce CRMAGORA su orr-tip = "O" e orr-ope = tm-ope; se non trova nulla (w-primo = 0) ricade sugli orari aziendali (a1-azienda, orr-tip = "A"). Per ogni record mappa orr-gio sulla riga (LU=1..DO=7) e orr-prog sulla fascia (1/2/3), riempiendo tm-ini*/tm-fin*.
  • a-grid / a-accept-grid: accept sulla griglia. F3 -> c-aggiorna (salvataggio). F4 -> conferma e c1-cancella (cancellazione settimana). Invio -> a-riga-dettaglio (modifica riga giorno) solo in modalita' A e con abilitazione w-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 ripristinando tm-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 con orr-ora-ini/orr-ora-fin non nulli (orr-prog = 1/2/3).
  • c1-cancella: scandisce CRMAGORA per orr-tip (e orr-ope se 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 TO e NEXT SENTENCE estensivi. La chiusura file e' esplicita (close crmusers crmagora prntoper) anziche' tramite z-close-files.