AVVCRM - Schedulazione avvisi
Posizione nel menu
Programma non a menu.
Linkage section
Programma richiamabile dal programma di schedulazione COGSKP; la linkage e' analoga agli altri programmi richiamati da li'.
Logica generale
Questo programma analizza tutte le tipologie di avviso attive. Per ciascuna tipologia:
- Filtra i nominativi in base al filtro previsto
- Verifica se ciascun nominativo corrisponde ai criteri dell'avviso
- Se per un nominativo deve essere generato l'avviso, lo genera in funzione della tipologia prevista (notifica, e-mail, SMS)
Elaborazione
A - Ricerca filtri attivi
Scansione di tutti i record di CRMAVTES usando AVT-CHIA3; considerare solo quelli con AVT-FL-ATTIVO = "S".
Per ciascun record eseguire il punto B.
B - Filtro su nominativi
Definire un file di transito TRAN-CRM040 (vedi CRM038). Eseguire una chiamata a CRM040 con i seguenti parametri:
| Dato | Contenuto |
|---|---|
| CRM040-CALLER | k-program-id |
| CRM040-CALLED | "CRM040" |
| CRM040-OPE | "ESEGUI-FILTRO" |
| CRM040-FLT-TIP | K-CPT-FILTRO-ALLARME |
| CRM040-FLT-COD | AVT-CHIA1 |
All'uscita aprire il transito TRAN-CRM040. Ciascun record contiene l'elenco dei nominativi filtrati. Per ciascun nominativo trovato eseguire il punto C.
C - Verifica nominativo
Cercare il contenuto dell'informazione su cui viene effettuato l'allarme AVT-INF-AVVISO con chiamata a CRMS06:
| Dato | Contenuto |
|---|---|
| CRMS06-OPE | "LEGGI" |
| CRMS06-NOM | Codice nominativo trovato |
| CRMS06-INF | AVT-INF-AVVISO |
| CRMS06-INF-SPECIE | "I" |
Il dato restituito potra' essere una data (in CRMS06-DATO) o un valore numerico (in CRMS06-DATO-NUM). In entrambi i casi sommare il valore contenuto in AVT-SOGLIA1.
Se l'informazione in AVT-INF-CONFRONTO e':
- Vuota (puo' essere solo se l'inf-avviso e' di tipo data): il valore di confronto e' la data di sistema
- Significativa: il valore di confronto e' il contenuto dell'informazione
L'avviso dovra' essere effettuato se (INF-AVVISO + SOGLIA) >= VALORE-CONFRONTO; in tal caso proseguire con il punto D.
D - Emissione avviso
Come prima cosa eseguire la sostituzione dei tag contenuti in AVT-MESSAGGIO (punto D.4).
Per ciascun destinatario trovato (punto D.5), in base al contenuto di AVD-TIP-NOTIFICA:
- "E": Emissione via e-mail (punto D.1)
- "S": Emissione via SMS (punto D.2)
- "N": Emissione via notifica (punto D.3)
Dopodiche', se AVT-INF-DA-AGGIORNARE > 0, eseguire il punto E.
D.1 - Emissione avviso via e-mail
Chiamata a POSTA:
| Dato | Contenuto |
|---|---|
| POSTA-OPE | "COMPLETO" |
| POSTA-OGGETTO | AVT-OGGETTO |
| MYMAIL-TEXT | AVT-MESSAGGIO compilato |
| MYMAIL-INVIO-AUTO | "S" |
| POSTA-EMAIL | Indirizzo di posta trovato al punto D.5 |
D.2 - Emissione avviso via SMS
Chiamata a AREASMS:
| Dato | Contenuto |
|---|---|
| AREASMS-OPE | "INVIA-SILENT" |
| AREASMS-TESTO | AVT-MESSAGGIO compilato |
| AREASMS-DEST-NUM | Numero di telefono trovato al punto D.5 |
D.3 - Emissione avviso via notifica
Verificare se e' gia' stata emessa una segnalazione per l'evento corrente. L'evento e' identificato da codice nominativo + identificativo segnalazione.
Ricerca su COGSEGNA dell'esistenza di una segnalazione, con scansione attraverso SGN-CHIA2. Se esiste un record avente SGN-CAT="A", SGN-TIP="L", SGN-KEY-LIV="1", SGN-KEY=codice nominativo + AVT-CHIA1 e SGN-FL-EVA="N", l'evento e' gia' stato notificato e nessun utente lo ha evaso: uscire.
Altrimenti inserire i seguenti record:
Record su COGSEGNA:
| Dato | Contenuto |
|---|---|
| SGN-NUM | Primo numero libero |
| SGN-CAT | "A" |
| SGN-TIP | "L" |
| SGN-KEY-LIV | "1" |
| SGN-KEY | Codice nominativo + AVT-CHIA1 |
| SGN-AUT-TIP | "P" |
| SGN-AUT | k-program-id |
| SGN-DATA-EMI | Data sistema |
| SGN-ORA-EMI | Ora sistema |
| SGN-FL-EVA | "N" |
| SGN-OGG | AVT-OGGETTO |
| SGN-FL-AGG | "S" |
Record su COGSGNT:
| Dato | Contenuto |
|---|---|
| SGL-NUM | SGN-NUM |
| SGN-LEN | Lunghezza di AVT-MESSAGGIO compilato |
| SGN-NOTE | AVT-MESSAGGIO compilato |
Per ciascun destinatario, record su COGSGNDT:
| Dato | Contenuto |
|---|---|
| SGO-NUM | SGN-NUM |
| SGO-OPE | Codice operatore destinatario |
| SGO-DATA-EMI | SGN-DATA-EMI |
| SGO-ORA-EMI | SGN-ORA-EMI |
| SGO-DATA-EVA | 0 |
| SGO-ORA-EVA | 0 |
| SGO-FL-EVA | "N" |
| SGO-FL-ALLARME | "N" |
| SGO-DATA-ALL | 0 |
| SGO-ORA-ALL | 0 |
| SGO-FL-VISTA | "N" |
D.4 - Compilazione testo messaggio
La compilazione del messaggio comporta la sostituzione di appositi contrassegni con un'informazione relativa alla scheda CRM. Ad esempio:
Il contratto n. <INFO-F0002> scadra' in data <INFO-I0151>, verificare se e' da rinnovare
potra' diventare:
Il contratto n. 153 scadra' in data 31/10/2013, verificare se e' da rinnovare
Il loop scorre il testo del messaggio finche' viene trovata una stringa contenente <INFO-. I 5 caratteri successivi sono:
- Carattere 1: Specie informazione ("F" fissa, "I" variabile)
- Caratteri 2-5: Codice informazione da trasformare
Usare CRMS06 per ottenere il contenuto dell'informazione. Quindi sostituire il tag <INFO-xnnnn> con il contenuto appropriato in base al tipo informazione:
- Tipo data: Editare con le barre (es. 31/10/2013)
- Tipo numero: Usare direttamente CRMS06-DATO-EDIT
- Tipo nominativo: Usare CRMS06-DATO-NUM per leggere CRMANAGR e usare CRA-NOME
D.5 - Ricerca destinatario
Determina quanti e quali destinatari deve avere l'avviso. Scorrere il contenuto di CRMAVDST:
- "O" (Operatore): Leggere PRNTOPE2 usando AVD-DST-OPE. I dati PTO2-SMS o PTO2-EMAIL contengono l'indirizzo per la spedizione, in base al tipo notifica.
- "G" (Gruppo): Scansione di PRNTGROD per tutti i record con PGOD-GRP = AVD-DST-GRUPPO. Per ciascun record leggere PRNTOPE2 per i dati di contatto.
- "P" (Proprietario): Se l'utente ha impostato l'informazione proprietario, questa contiene il codice nominativo del proprietario. Usare CRMS06 per estrarre il codice (CRMS06-DATO-NUM), leggere CRMANAGR e cercare il contatto su COGRIFER con posizione = AVT-POSIZIONE. Usare RIF-MAIL per e-mail o il primo campo RIF-TEL-1/2/3 corrispondente a un numero mobile per SMS.
E - Aggiornamento informazione
Se AVT-INF-DA-AGGIORNARE > 0, in base a AVT-TIPO-AGGIORNAMENTO:
- "A" (Valore informazione avviso): Aggiornare con il contenuto dell'informazione AVT-INF-AVVISO letto in precedenza
- "B" (Data sistema): Aggiornare con la data di sistema
- "C" (Incremento): Incrementare il valore (solo per info numeriche)
L'aggiornamento si esegue con chiamata a CRMS06:
| Dato | Contenuto |
|---|---|
| CRMS06-OPE | "SCRIVI" |
| CRMS06-NOM | Codice nominativo trovato |
| CRMS06-INF | AVT-INF-DA-AGGIORNARE |
| CRMS06-DATO / CRMS06-DATO-NUM | Dato da aggiornare (in base al tipo informazione) |