ECM999 — Recupero singolo ordine e-commerce (a posteriori)¶
Sorgente: cbl/ecm999.cbl | Program-ID: ECM999 | Tipo: Utility (non a menu)
Scopo¶
Utility di recupero manuale di un singolo ordine e-commerce a posteriori, a partire dai file di interscambio conservati in q:\arc\. Consente di "tirar su" (ri-importare) un ordine specifico che per qualche motivo non era stato acquisito, o che deve essere ricaricato.
Il programma e' una variante di ECM002 (il modulo standard di importazione ordini e-commerce chiamato da COGO91): condivide struttura, screen, copybook e gran parte della logica, ma opera su un singolo ordine identificato dal suo numero di riferimento interno anziche' elaborare in blocco tutti i record dei file di import.
Non e' presente in prog.txt (non a menu): viene lanciato direttamente dall'assistenza quando serve recuperare un ordine.
Utilizzato da Blutekna¶
Come dichiarato nell'intestazione del sorgente, il programma e' utilizzato dal cliente Blutekna (personalizzazione azienda "BT", la stessa per cui COGO91 richiama ECM002). Riprende integralmente la configurazione RNEWCONF del gruppo ecommerce gia' usata dal flusso ordini e-commerce standard.
Uso operativo¶
Il file da recuperare viene letto dalla cartella q:\arc\ (percorso hard-coded per la sola testata ordine — vedi import-ord), che e' l'archivio storico dei file di interscambio prodotti dall'e-commerce. L'utility:
- Verifica il semaforo (vedi sotto): se assente, blocca l'elaborazione.
- Copia in locale i quattro file CSV di interscambio (testata da
q:\arc\, righe/anagrafica/sconti dal path di configurazione). - Scorre la testata cercando l'ordine da recuperare e ne ricrea anagrafica cliente, testata, righe e piede.
Gestione del semaforo¶
Meccanismo di mutua esclusione (concordato "Mauro/Simone il 21.06.2021"), identico a ECM002:
- Il file
semaforo.dotrisiede nel path di configurazione (tm-cfg-path+\semaforo.dot). - Se non esiste: l'elaborazione non parte (messaggio "File semaforo non presente: Sincronizzazione dati non abilitata") e il programma esce.
- Se esiste: viene spostato (operazione
movedi COPIAF) dalla postazione client allaext-tmp-dirserver per la durata dell'elaborazione, poi al termine viene riposizionato nella posizione originaria sul client. In questo modo, mentre l'ordine viene recuperato, nessun altro processo (es. l'import automatico) puo' operare.
File e tabelle utilizzati¶
File sequenziali di interscambio (line sequential, in lettura)¶
| File (SELECT) | Record | Path sorgente | Copia locale | Contenuto |
|---|---|---|---|---|
impmov |
rec-estra x(300) |
q:\arc\ + tm-cfg-testata |
ec-ordinet.csv |
Testata ordini |
impmov2 |
rec2-riga x(300) |
tm-cfg-path + tm-cfg-righe |
ec-ordiner.csv |
Righe ordine |
impana |
riga-ana x(3000) |
tm-cfg-path + tm-cfg-anag |
ec-clienti.csv |
Anagrafica clienti (dati fatturazione + spedizione) |
impsco |
riga-sco x(300) |
tm-cfg-path + tm-cfg-sconti |
ec-sconti.csv |
Sconti, spese trasporto, contrassegno |
semaforo |
rec-semaforo x(300) |
tm-cfg-path + \semaforo.dot |
— | Semaforo di lock |
Tutti i CSV usano il carattere " come delimitatore di campo (parsing via UNSTRING ... DELIMITED BY '"'). La copia dei file avviene tramite la subroutine COPIAF (l-copiaf.cpy / u-copiaf.cpy).
Layout dei record parsati (gruppi di working-storage):
- Testata (
ot-campi):ot-ord-n,ot-website,ot-rif(rif. interno numerico),ot-cf,ot-piva,ot-data-cf,ot-tipo-pag,ot-note1,ot-note2. - Anagrafica (
a-clcom-campi): dati fatturazione (a-clcom-nome,-cognome,-cofi,-piva, indirizzo, ecc.) e dati spedizione (suffisso-sp), piu'a-clcom-raso(ragione sociale). - Riga (
or-campi):or-nriga,or-riford,or-tot,or-merce,or-qta,or-prezzo. - Sconti (
os-campi):os-riford,os-sconto,os-trasporto,os-contrassegno.
Tabelle gestionali scritte / aggiornate¶
| Tabella | Copybook FD | Uso |
|---|---|---|
| COGGEANA | coggeana (+ k02/k03/k04/k05) |
Anagrafica clienti (lettura per ricerca, aggiornamento pagamento/agente/listino/zona/divisa) |
| COGGEDST / COGGEDS2 | cogdesti / cogdest2 |
Destinazioni merce (indirizzo di spedizione) |
| COGCNDCF | cogcndcf |
Condizioni/dati anagrafici cliente privato (nome/cognome) |
| COGANCAP | cogancap |
Dati aggiuntivi cliente (brand w-brand = "E") |
| COGANAPP | coganapp |
Flag applicativi cliente (aap-fl-sol, aap-invio-ec-web) |
| COGAPPOG | cogappog |
Tipologia statistica cliente (app-tip-stt) |
| COGTESOR | cogtesor |
Testata ordine (tor-...) |
| COGTORAG | cogtorag |
Raggruppamento testata ordine (brand) |
| COGRIGOR | cogrigor |
Righe ordine (ror-...) |
| COGRORA2 | cogrora2 |
Dati IVA/esenzione riga ordine |
| COGRACMC | cogracmc (+ k02) |
Raccordo codice merce e-commerce → merce gestionale |
| COGMERCI | cogmerci |
Anagrafica merci (lettura per IVA/esenzione) |
| COGTABEL | cogtabel |
Tabelle (provincia→regione→zona tipo 88, porto tipo 89 cod. "03", agente) |
Copybook principali¶
| Copybook | Contenuto |
|---|---|
ecm002.select / ecm002.fd / ecm002.wrk / ecm002.decla / ecm002.prc / ecm002-01.scr |
Struttura completa ereditata da ECM002 (SELECT, FD, working, declaratives, procedure di supporto, screen) |
feurtab.fd / cogfiles.cpy |
Tabelle standard gestionale |
logfile.fd / logfile.cpy / statolog.cpy / makelog.cpy |
File di log dell'elaborazione (ecm002_log.log) |
l-copiaf.cpy / u-copiaf.cpy |
Interfaccia subroutine COPIAF (copia/spostamento file client↔server) |
utilncnf.cpy |
Configurazioni RNEWCONF |
utilinsana.cpy |
Interfaccia INSANA (inserimento anagrafica) |
utilcrms03.cpy |
Interfaccia CRMS03 (scheda CRM cliente) |
utils25.cpy |
Interfaccia COGS25 (numeratori) |
utils01.cpy |
Interfaccia COGS01 (listino/prezzo) + redefine util-o16 per COGO16C |
utilu10.cpy / utilu12.cpy |
Interfacce COGU10 (edit importi valuta) e COGU12 (movimenti/impegno merce) |
utilgesstr.cpy |
Interfaccia GESSTR (conversione testo importato) |
wcont.cpy / wcont1.cpy |
Area di comunicazione standard |
wstato / wgrave / wopenf / wnscr / cogazien / mmmask |
Copybook standard di programma GUI standalone |
Programmi chiamati¶
| Programma | Scopo |
|---|---|
| COPIAF | Copia/spostamento/info dei file di interscambio tra client e server, e gestione del semaforo |
| COGE05 | Controllo formale codice fiscale / partita IVA |
| INSANA | Inserimento nuova anagrafica cliente |
| CRMS03 | Aggiornamento scheda CRM del cliente |
| COGS25 | Assegnazione numeri progressivi (numeratore ordini, causale/cod. 10; anche cod. 58 in prendi-num-ord) |
| COGS01 | Calcolo prezzo di listino |
| COGU10 | Edit importi in valuta |
| COGU12 | Aggiornamento movimenti/impegno di magazzino per la riga ordine |
| COGO16C | Inserimento automatico ordine (piede, ins-auto) al termine del caricamento |
| GESSTR | Conversione testo importato (decodifica caratteri) |
| C\$TOUPPER | Conversione stringhe in maiuscolo |
| RNEWCONF | Lettura configurazioni gruppo ecommerce |
Configurazioni RNEWCONF (gruppo ecommerce)¶
Lette in x99-confi (16 chiavi) e riverificate in x-configurazione-bis (tipo pagamento per suddivisione G sul valore di ot-tipo-pag):
path-in, listino, agente, tipologia-cliente, tipo-pagamento, cond-pag, tipo-pagamento-ct, cond-pag-ct, nome-file-testata-ordine, nome-file-righe-ordine, nome-file-anag, nome-file-dati-aggiuntivi, causale-ordine, merce-sconto, merce-trasporto, merce-contrassegno.
Dettaglio delle chiavi in ecommerce. Vedi anche il flusso E-commerce / Shop.
Logica di elaborazione¶
1. Inizializzazione (main / m-00)¶
Apertura file e log, lettura azienda (rd-azi), lettura configurazioni (x99-confi), costruzione e display della maschera (Importa Dati Merci da Ecommerce.), gestione controlli.
2. Controllo semaforo¶
Verifica esistenza semaforo.dot via COPIAF fileinfo. Se assente → messaggio e go to fine. Se presente → spostamento su ext-tmp-dir server per la durata dell'elaborazione.
3. Elaborazione (b-elabora → import-ord)¶
- Copia in locale dei quattro CSV via COPIAF (testata da
q:\arc\, righe/anagrafica/sconti dal path di configurazione). Ogni copia mancante viene loggata e interrompe l'elaborazione. import-ord-10: legge la testata (impmov), parsaot-campi, ricava il rif. numericow-ot-rif/w-num-ordine, ricava la data, riverifica il tipo pagamento (x-configurazione-bis) e logga l'inizio inserimento.import-ord-20: scorre l'anagrafica (impana) fino a trovare il record cona-clcom-rif = w-num-ordine; converte i testi (z-converti-w-testo-bis), quindi ricerca il cliente per codice fiscale (chiave 5 COGGEANA) o partita IVA (chiave 2). Se non trovato →x-crea-cliente(INSANA + impostazione pagamento, agente, listino, zona da provincia→regione, brand, scheda CRM). Se presente indirizzo di spedizione →x-cogdesti(creazione/aggiornamento destinazione COGGEDST/COGGEDS2).import-ord-30: se il cliente non e' stato agganciato → log errore, messaggio "Problema in acquisizione ordini per semaforo" ego to fine. Altrimenti:x-carica-testa: numera l'ordine (COGS25 cod.10), scrive COGTESOR (tipoC, causale da config, magazzino 1, currencyE, porto da COGTABEL tipo 89, destinatario, agente, ecc.) e COGTORAG.x-carica-riga: apreimpmov2, per ogni riga dell'ordine risolve la merce via COGRACMC, scrive COGRIGOR (prezzo e totale divisi per 10000), scrive COGRORA2 con IVA/esenzione da COGMERCI e aggiorna impegno merce via COGU12.x-carica-sco: apreimpsco, genera righe aggiuntive per sconto/coupon (mercemerce-sconto, importo negativo), trasporto+contrassegno (mercemerce-trasporto) e imposta il flag contrassegno; in presenza di contrassegno usatipo-pagamento-ct/cond-pag-ctsu cliente e testata.lancia-cons: chiama COGO16C (ins-auto) per il consolidamento/inserimento automatico dell'ordine e logga il numero ordine creato.- Loop
go to import-ord-05per il record successivo di testata; termina a fine file.
4. Chiusura (fine / z-chiudi)¶
Riposiziona il semaforo sul client (COPIAF move), ricrea semaforo in output, chiude i file, chiude la finestra ed esce (z-99-exit-program, exit program).
Note¶
- Derivazione da ECM002: il commento nel sorgente segnala esplicitamente il punto di divergenza (
FINE DUBBIO: modifica rispetto ECM002 !!!) nella gestione del semaforo. La maggior parte del codice e' condivisa tramite i copybookecm002.*. - Importi: prezzi e totali dei CSV sono espressi in decimillesimi e vengono divisi per 10000 in fase di caricamento.
- Sconto: la riga sconto/coupon viene sempre inserita con importo negativo per abbassare il totale ordine.
- Numerazione alternativa (
prendi-num-ord): dopo PBUG-544 (15.01.2020) usa numeratore COGS25 cod. 58 senza anno di competenza; i relativi PERFORM (x-parifica-numero) risultano commentati nel flusso attivo. - Program-ID non a menu: assente da
prog.txt; nessuna documentazione utente prevista (utility di assistenza). Vedi Altri programmi non a menu.