Vai al contenuto

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:

  1. Verifica il semaforo (vedi sotto): se assente, blocca l'elaborazione.
  2. Copia in locale i quattro file CSV di interscambio (testata da q:\arc\, righe/anagrafica/sconti dal path di configurazione).
  3. 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.dot risiede 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 move di COPIAF) dalla postazione client alla ext-tmp-dir server 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-elaboraimport-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), parsa ot-campi, ricava il rif. numerico w-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 con a-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" e go to fine. Altrimenti:
  • x-carica-testa: numera l'ordine (COGS25 cod.10), scrive COGTESOR (tipo C, causale da config, magazzino 1, currency E, porto da COGTABEL tipo 89, destinatario, agente, ecc.) e COGTORAG.
  • x-carica-riga: apre impmov2, 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: apre impsco, genera righe aggiuntive per sconto/coupon (merce merce-sconto, importo negativo), trasporto+contrassegno (merce merce-trasporto) e imposta il flag contrassegno; in presenza di contrassegno usa tipo-pagamento-ct/cond-pag-ct su 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-05 per 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 copybook ecm002.*.
  • 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.