====== ImportCashData V5 - Guida Operativa ====== \\ ===== Panoramica ===== **ImportCashData** è un'applicazione console .NET che gestisce l'importazione di dati di cassa e contratti nel sistema ERP aziendale. L'applicazione supporta tre modalità operative principali: ^ Modalità ^ Descrizione ^ | **Corrispettivi** | Importazione chiusure di cassa e movimenti di magazzino | | **Contratti** | Importazione contratti web nel sistema gestionale | | **Scadenze** | Riscrittura delle scadenze di pagamento per un contratto | \\ \\ ===== Flusso Operativo ===== ==== Avvio dell'Applicazione ==== ImportCashData.exe /s [operazione] [parametro] \\ **Parametri riga di comando:** ^ Parametro ^ Obbligatorio ^ Descrizione ^ | ''/s'' | Sì | Flag di avvio (start) | | ''username'' | Sì | Credenziali utente ERP | | ''password'' | Sì | Password utente ERP | | ''/CONTRATTI'' | No | Attiva modalità importazione contratti | | ''/SCADENZE'' | No | Attiva modalità riscrittura scadenze | | ''[ID]'' | Solo con /SCADENZE | ID del contratto da elaborare | \\ **Esempi:** :: Importazione corrispettivi (modalità default) ImportCashData.exe /s admin password123 :: Importazione contratti ImportCashData.exe /s admin password123 /CONTRATTI :: Riscrittura scadenze contratto #456 ImportCashData.exe /s admin password123 /SCADENZE 456 \\ \\ ==== Fase di Inizializzazione ==== Il processo di inizializzazione segue questi passaggi: - **Parsing argomenti** - Verifica presenza /s, username, password - **Creazione istanza Engine** - Inizializzazione sistema di logging (file: ''importCashData.log'') - **Caricamento configurazione** - Lettura file ''DBCFG_cassa.xml'' e connessione a IERPCFG_A03 - **Connessione all'impresa** - Query ID azienda, connessione ERP tramite WrapperErp_5 \\ \\ ==== Modalità 1: Importazione Corrispettivi (Default) ==== Questa è la modalità principale che elabora le chiusure di cassa e genera i relativi movimenti contabili e di magazzino. \\ === Flusso di elaborazione === **1. Recupero Magazzini**\\ SELECT DISTINCT CODMAG FROM AY_CASSA_CHIUSURE \\ **2. Per ogni Magazzino** * Recupero chiusure in stato 0 (da elaborare) * Recupero dati pagamenti associati \\ **3. Per ogni Chiusura** * **a) StartTransaction()** - Avvio transazione * **b) pScriviCorrispettivo()** - Creazione movimento contabile * Recupero codici conto (CODCONCORR) * Recupero conto cassa (CODCONCASSACORR) * Creazione movimento MOVCON tipo 'R' * Gestione ripartizione IVA * Generazione movimento contabile * **c) pScriviIncasso()** - Solo se conto pagamento diverso da cassa predefinita * Trasferimento da conto pagamento a conto cassa predefinito * Creazione movimento MOVCON tipo 'C' * **d) GeneraMovimentoMagazzino()** - Per ogni vendita (AY_CASSA_VENDITE) * Creazione movimento magazzino * Scarico quantità da lotti * Se quantità > disponibile: INSERT in AY_CASSA_VENDITE_ECCESSO \\ **4. Esito elaborazione** ^ Successo ^ Errore ^ | Commit() | RollBack() | | UPDATE stato = 2 | Invio mail con errori | | Invio mail successo | BREAK dal ciclo | \\ \\ ==== Modalità 2: Importazione Contratti (/CONTRATTI) ==== === Flusso di elaborazione === **1. Recupero Contratti Attivi**\\ SELECT * FROM V_CONMV_CONTRATTI_IMPORT WHERE CM_STATO = 'A' \\ **2. Per ogni Contratto** * **a) Recupero scadenze pagamento** da CONTRATTI_WEB_SCADENZE * **b) Esecuzione PRG_IMPORTA_CONTRATTI_WEB** * Importazione nel calcolo premi * Valore ritorno atteso: 1 (righe inserite) * **c) Se tipo pagamento > 0:** * Calcolo importo (rate × num_rate) * pScriviPNContratto() - Creazione movimento contabile * Esecuzione AY_GENERA_SCAD_CONTRATTO * **d) Se CM_SWICHIUDISCAD = true:** * pScriviPNChiusuraScad() - Chiusura scadenze esistenti * Esecuzione EXSP_PARTITE_CONTRATTI_nuovi \\ **3. Invio Email Riepilogativa** - "Importazione Contratti WEB" \\ \\ ==== Modalità 3: Riscrittura Scadenze (/SCADENZE) ==== === Flusso di elaborazione === **1. Recupero Contratto**\\ SELECT * FROM contratti_Web WHERE CM_KEY = @ID \\ **2. Se contratto trovato e CM_SWICHIUDISCAD = true:** * Recupero scadenze da CONTRATTI_WEB_SCADENZE * pScriviPNChiusuraScad() - Ricreazione movimenti di chiusura * Esecuzione EXSP_PARTITE_CONTRATTI_nuovi - Riconciliazione pagamenti/fatture \\ \\ ===== Parametri di Configurazione ===== ==== File App.config - AppSettings ==== === Codici Contabili === ^ Chiave ^ Esempio ^ Descrizione ^ | **CODCONCORR** | ''500400005'' | Codice conto contabile per i corrispettivi | | **CODCONCASSACORR** | ''100110005'' | Codice conto cassa per i corrispettivi | | **CODCAU** | ''CNC'' | Codice causale contabile | | **CODCAUMOV** | ''VENN'' | Codice causale movimenti di magazzino | | **CODIVACORR** | ''22'' | Codice IVA per i corrispettivi | \\ === Parametri SMTP === ^ Chiave ^ Esempio ^ Descrizione ^ | **smtp_Server** | ''smtp.gmail.com'' | Server SMTP per invio email | | **smtp_Port** | ''587'' | Porta SMTP | | **smtp_User** | ''corrispettiving@gmail.com'' | Utente SMTP (mittente) | | **smtp_Password** | ''[app_password]'' | Password SMTP (app password) | | **smtp_UseSSL** | ''1'' | Abilita TLS/SSL (1=sì, 0=no) | | **smtp_UseImplicitSSL** | ''0'' | SSL implicito (1=sì, 0=no) | | **smtp_TimeOut** | ''0'' | Timeout connessione (0=default) | \\ === Destinatari Email === ^ Chiave ^ Descrizione ^ | **DestMail** | Destinatario principale per notifiche corrispettivi | | **DestMailCC** | Destinatario in copia (opzionale) | | **DestMailContratti** | Destinatario per notifiche importazione contratti | \\ === Connection String === \\ === Parametri Aggiuntivi === ^ Chiave ^ Descrizione ^ | **pathDllErp** | Percorso della DLL wrapper ERP (es. ''%%\\srvayerp\GEST\SAMW\Sam98ext.dll%%'') | \\ \\ ===== Tabelle e Viste Coinvolte ===== ==== Tabelle Principali ==== ^ Tabella ^ Descrizione ^ Operazioni ^ | **AY_CASSA_ELENCO_CHIUSURE** | Elenco riepilogativo delle chiusure cassa | SELECT, UPDATE (stato) | | **AY_CASSA_CHIUSURE** | Dettaglio delle chiusure cassa | SELECT | | **AY_CASSA_PAGAMENTI** | Metodi di pagamento configurati | SELECT | | **AY_CASSA_VENDITE** | Dettaglio vendite per chiusura | SELECT | | **AY_CASSA_ARTICOLI_LOTTI** | Informazioni sui lotti degli articoli | SELECT | | **AY_CASSA_CHIUSURE_IVA** | Ripartizione IVA per chiusura | SELECT | | **AY_CASSA_VENDITE_ECCESSO** | Vendite con quantità eccedente la disponibilità | INSERT | | **CONTRATTI_WEB** | Anagrafica contratti web | SELECT | | **CONTRATTI_WEB_SCADENZE** | Scadenze di pagamento contratti | SELECT | | **MOVCON** | Movimenti contabili (via ERP wrapper) | INSERT | \\ ==== Viste ==== ^ Vista ^ Descrizione ^ | **V_CONMV_CONTRATTI_IMPORT** | Contratti attivi da importare (filtro CM_STATO='A') | | **V_AY_CASSA_ARTICOLI_LOTTI** | Disponibilità lotti per articoli | \\ ==== Stored Procedures ==== ^ Procedura ^ Parametri ^ Descrizione ^ | **PRG_IMPORTA_CONTRATTI_WEB** | Dati contratto | Importa contratto nel calcolo premi. Ritorna il numero di righe inserite (atteso: 1) | | **AY_GENERA_SCAD_CONTRATTO** | ''@RIFCON'', ''@PARIDMOVCON'' | Genera le scadenze di pagamento per un contratto | | **EXSP_PARTITE_CONTRATTI_nuovi** | ID movimento | Riconcilia pagamenti contratti con fatture | \\ ==== Schema Relazioni Principali ==== AY_CASSA_ELENCO_CHIUSURE (1) ──────► (N) AY_CASSA_CHIUSURE │ - IDCHIUSURA (PK) │ - IDCHIUSURA (FK) │ - CODMAG │ - VALCHIUSURA │ - STATO │ - CODPAG │ - DATCHIU │ │ │ │ ▼ │ AY_CASSA_VENDITE (N) │ │ - IDCHIUSURA (FK) │ │ - CODART └─► AY_CASSA_PAGAMENTI │ - QUANTITA │ - CODPAG │ │ - CODCON ▼ │ - CODCAUINC AY_CASSA_ARTICOLI_LOTTI │ - CODART │ - CODLOTTO │ - DISPONIBILITA CONTRATTI_WEB (1) ──────────────► (N) CONTRATTI_WEB_SCADENZE │ - CM_KEY (PK) │ - CMCS_RIFCON (FK) │ - CM_STATO │ - CMCS_NUMDOC │ - CM_IMPRATA │ - CMCS_DATDOC │ - CM_NUMRATE │ - CMCS_IMPORTO │ - CM_RIFTIPOPAG │ - CM_SWICHIUDISCAD \\ ==== Stati Chiusura Cassa ==== ^ Stato ^ Descrizione ^ | **0** | Da elaborare | | **2** | Elaborato con successo | \\ \\ ===== Gestione degli Errori ===== ==== Livelli di Severità ==== Il sistema utilizza la classe ''Messaggi'' per la gestione dei log con i seguenti livelli: ^ Tipo ^ Livello ^ Descrizione ^ | **0** | Info | Messaggi informativi/diagnostici | | **1** | Warning | Avvertimenti non bloccanti | | **2** | Error | Errori che richiedono attenzione | | **3** | Critical | Errori critici che bloccano l'elaborazione | \\ ==== File di Log ==== * **Percorso:** ''{AppPath}\importCashData.log'' * **Formato:** Timestamp + messaggio * **Nota:** Non è presente rotazione automatica dei log \\ ==== Scenari di Errore Gestiti ==== === 1. Errori di Connessione === ^ Causa ^ Azione ^ Recovery ^ | Server non raggiungibile | Log errore + terminazione | Verificare configurazione rete | | Credenziali errate | Log errore + terminazione | Verificare username/password | \\ === 2. Errori di Validazione === ^ Errore ^ Causa ^ Gestione ^ | Codice conto non trovato | ''GetID'' ritorna -1 | Log errore, skip operazione | | Causale non valida | Codice causale inesistente | Log errore, skip operazione | | Metodo pagamento non trovato | CODPAG non in AY_CASSA_PAGAMENTI | Log warning, usa default | \\ === 3. Errori Transazionali === try { pEngI24.StartTransaction() // Operazioni contabili e di magazzino if (successo) { pEngI24.Commit() // UPDATE stato = 2 } } catch { pEngI24.RollBack() InvioMail(esito: false, dettaglio errori) } \\ === 4. Errori Stored Procedure === ^ Procedura ^ Valore Ritorno Errore ^ Gestione ^ | PRG_IMPORTA_CONTRATTI_WEB | ≠ 1 | Log errore, continua con prossimo contratto | | AY_GENERA_SCAD_CONTRATTO | < 0 | Rollback movimento, log errore | | EXSP_PARTITE_CONTRATTI_nuovi | < 0 | Log errore | \\ === 5. Gestione Quantità Insufficiente === Quando la quantità venduta supera la disponibilità a magazzino: -- Inserimento automatico dell'eccesso INSERT INTO AY_CASSA_VENDITE_ECCESSO (CODART, QUANTITA_ECCESSO, IDCHIUSURA, ...) VALUES (@CodArt, @QtaEccesso, @IdChiusura, ...) \\ ==== Meccanismo di Recovery ==== - **Transazioni atomiche:** Ogni chiusura è elaborata in una transazione separata - **Idempotenza:** Lo stato = 2 previene rielaborazioni - **Isolamento per magazzino:** Errori in un magazzino non bloccano gli altri - **Notifica immediata:** Email inviata al primo errore critico \\ \\ ===== Notifiche Email ===== ==== Configurazione SMTP ==== Server: smtp.gmail.com Porta: 587 Sicurezza: TLS/SSL abilitato Mittente: Configurato in smtp_User \\ ==== Logica Destinatari ==== ^ Funzione ^ Destinatario (TO) ^ Copia (CC) ^ | Corrispettivi | AppSettings["DestMail"] | AppSettings["DestMailCC"] | | Contratti | AppSettings["DestMailContratti"] | AppSettings["DestMailCC"] | \\ \\ ==== Email di Successo ==== === Quando viene inviata === * Al completamento di ogni chiusura cassa elaborata correttamente * Al termine dell'importazione contratti (se senza errori) \\ === Formato Email Successo - Corrispettivi === ^ Campo ^ Valore ^ | **Da** | corrispettiving@gmail.com | | **A** | [DestMail] | | **CC** | [DestMailCC] (se configurato) | | **Oggetto** | Importazione Corrispettivo in Contabilità : n° {IDCHIUSURA} del {DATA} per Negozio {CODMAG} | | **Corpo** | Importazione Corrispettivo Avvenuta Correttamente | \\ === Formato Email Successo - Contratti === ^ Campo ^ Valore ^ | **Da** | corrispettiving@gmail.com | | **A** | [DestMailContratti] | | **CC** | [DestMailCC] (se configurato) | | **Oggetto** | Importazione Contratti WEB | | **Corpo** | Importazione CONTRATTI Avvenuta Correttamente | \\ \\ ==== Email di Errore ==== === Quando viene inviata === * Al verificarsi di un errore durante l'elaborazione di una chiusura * Al termine dell'importazione contratti con errori \\ === Formato Email Errore === ^ Campo ^ Valore ^ | **Da** | corrispettiving@gmail.com | | **A** | [DestMail] o [DestMailContratti] | | **CC** | [DestMailCC] (se configurato) | | **Oggetto** | **Errore** Importazione Corrispettivo in Contabilità : n° {IDCHIUSURA} del {DATA} per Negozio {CODMAG} | | **Corpo** | Tabella HTML con elenco messaggi di log | \\ === Struttura Corpo Email Errore === Il corpo dell'email contiene un'intestazione e una tabella con tutti i messaggi registrati durante l'elaborazione:

Log Importazione Corrispettivo in Contabilità : n° 1234 del 20-01-2026 per Negozio MAG01

[Info] Inizio elaborazione chiusura 1234
[Info] Creazione movimento contabile corrispettivo
[Errore] Codice conto 500400099 non trovato nel piano dei conti
[Errore] Impossibile completare la registrazione contabile
\\ === Classificazione Messaggi nel Log Email === ^ Prefisso ^ Tipo Messaggio ^ Significato ^ | ''[Info]'' | Tipo 0 - Informativo | Operazione completata normalmente | | ''[Warning]'' | Tipo 1 - Avvertimento | Situazione anomala non bloccante | | ''[Errore]'' | Tipo 2-3 - Errore | Problema che ha causato il fallimento | \\ ==== Comportamento Post-Invio ==== Dopo l'invio dell'email (sia successo che errore), la lista messaggi viene svuotata: pMessaggi.Items.Clear() Questo assicura che le email successive contengano solo i messaggi relativi all'elaborazione corrente. \\ \\ ===== Esecuzione Schedulata ===== Per l'esecuzione automatica tramite Task Scheduler di Windows: @echo off cd /d "C:\Program Files\ImportCashData\V5" ImportCashData.exe /s username password \\ **Configurazione consigliata:** * Esecuzione giornaliera post-chiusura cassa * Account di servizio con privilegi minimi necessari * Monitoraggio file log per anomalie * Verifica periodica casella email per notifiche errore \\ ---- //Documento generato automaticamente - ImportCashData V5//