From 4d923b81e0c52e03fd5791680f403d79a367e3b0 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 30 Nov 2018 15:33:25 +0100 Subject: [PATCH] Miglioramento import FE --- config/namespaces.php | 4 +- plugins/{exportPA => exportFE}/actions.php | 0 plugins/{exportPA => exportFE}/edit.php | 4 +- plugins/{exportPA => exportFE}/init.php | 2 +- .../src/FatturaElettronica.php | 2 +- .../src/stylesheet-1.2.1.xsl | 5084 ++++++++--------- plugins/{exportPA => exportFE}/view.php | 0 plugins/{importPA => importFE}/actions.php | 59 +- plugins/{importPA => importFE}/edit.php | 44 +- plugins/importFE/list.php | 70 + plugins/{importPA => importFE}/rows.php | 17 +- .../src/FatturaElettronica.php | 98 +- plugins/importFE/src/Interaction.php | 91 + src/Uploads.php | 10 +- update/2_4_3.sql | 4 + 15 files changed, 2872 insertions(+), 2617 deletions(-) rename plugins/{exportPA => exportFE}/actions.php (100%) rename plugins/{exportPA => exportFE}/edit.php (97%) rename plugins/{exportPA => exportFE}/init.php (80%) rename plugins/{exportPA => exportFE}/src/FatturaElettronica.php (99%) rename plugins/{exportPA => exportFE}/src/stylesheet-1.2.1.xsl (97%) rename plugins/{exportPA => exportFE}/view.php (100%) rename plugins/{importPA => importFE}/actions.php (50%) rename plugins/{importPA => importFE}/edit.php (70%) create mode 100644 plugins/importFE/list.php rename plugins/{importPA => importFE}/rows.php (85%) rename plugins/{importPA => importFE}/src/FatturaElettronica.php (77%) create mode 100644 plugins/importFE/src/Interaction.php diff --git a/config/namespaces.php b/config/namespaces.php index fc7e7de7a..4f5ba52bb 100644 --- a/config/namespaces.php +++ b/config/namespaces.php @@ -6,6 +6,6 @@ return [ 'modules/articoli' => 'Modules\Articoli', 'modules/fatture' => 'Modules\Fatture', 'modules/interventi' => 'Modules\Interventi', - 'plugins/exportPA' => 'Plugins\ExportPA', - 'plugins/importPA' => 'Plugins\ImportPA', + 'plugins/exportFE' => 'Plugins\ExportFE', + 'plugins/importFE' => 'Plugins\ImportFE', ]; diff --git a/plugins/exportPA/actions.php b/plugins/exportFE/actions.php similarity index 100% rename from plugins/exportPA/actions.php rename to plugins/exportFE/actions.php diff --git a/plugins/exportPA/edit.php b/plugins/exportFE/edit.php similarity index 97% rename from plugins/exportPA/edit.php rename to plugins/exportFE/edit.php index c9b366c9f..183fe19d5 100644 --- a/plugins/exportPA/edit.php +++ b/plugins/exportFE/edit.php @@ -25,7 +25,7 @@ if (!empty($fattura_pa)) { } // Campi obbligatori per l'anagrafica Azienda -$azienda = Plugins\ExportPA\FatturaElettronica::getAzienda(); +$azienda = Plugins\ExportFE\FatturaElettronica::getAzienda(); $fields = [ 'piva' => 'Partita IVA', // 'codice_fiscale' => 'Codice Fiscale', @@ -125,7 +125,7 @@ echo ' echo ' - + '.tr('Visualizza').' diff --git a/plugins/exportPA/init.php b/plugins/exportFE/init.php similarity index 80% rename from plugins/exportPA/init.php rename to plugins/exportFE/init.php index a42b35856..5b7f5c3fd 100644 --- a/plugins/exportPA/init.php +++ b/plugins/exportFE/init.php @@ -1,6 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - % - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - () - -
-
- - - - - - - - - () - - - - - - - - -
- Tipo dato: - - - (dati relativi a lotti e scadenze) - - -
- - -
- - - - Lotto: - - - Rif. testo: - - - -
-
- - - - -
- - - - Scadenza: - - - Rif. data: - - - - - - - -
-
- - -
- - - - Quantità del suddetto lotto: - - - Rif. numero: - - - -
-
- - - -
- -
- - -
- RIF.AMM. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - -
-
- - - - - - - - - - - - - - - - - - -
- -
-
- - - -
- -
-
-
- - - - - - - - - - -
-
- - - - - - - - -
- - - - - - - - - ------------------------ - - - - -
- - - -
- -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dati ritenuta d'accontoAliquota ritenutaCausale Importo
- - - - - - - - - - - - (ritenuta persone fisiche) - - - (ritenuta persone giuridiche) - - - - - (!!! codice non previsto !!!) - - - - - - - - - - - - - - - - - - - - (decodifica come da modello 770S) - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
- - - - - - - -
- - -
- - - - - - - - - - -
- - - Identificativo fiscale ai fini IVA: - - - - - - -
- -
- - - - Codice fiscale: - - - - - - -
- -
- - - - Denominazione: - - - - - - -
- -
- - - - Cognome nome: - - - - - - - - - - - - - - - -
- - -
- - - - Regime fiscale: - - - - - - - - - - (ordinario) - - - (contribuenti minimi) - - - (nuove iniziative produttive) - - - (agricoltura e attività connesse e pesca) - - - (vendita sali e tabacchi) - - - (commercio fiammiferi) - - - (editoria) - - - (gestione servizi telefonia pubblica) - - - (rivendita documenti di trasporto pubblico e di sosta) - - - (intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72) - - - (agenzie viaggi e turismo) - - - (agriturismo) - - - (vendite a domicilio) - - - (rivendita beni usati, oggetti d’arte, - d’antiquariato o da collezione) - - - (agenzie di vendite all’asta di oggetti d’arte, - antiquariato o da collezione) - - - (IVA per cassa P.A.) - - - (IVA per cassa - art. 32-bis, D.L. 83/2012) - - - (Regime forfettario) - - - (altro) - - - - - (!!! codice non previsto !!!) - - - - - -
- -
- - - -
- - - - Indirizzo: - - - - - - - - -
- -
- - - - Comune: - - - - - - - - - Provincia: - - - - - - - - - -
-
- - - - Cap: - - - - - - - - - Nazione: - - - - - - - - -
-
-
- - - - Telefono: - - - - - - - - -
- -
- - - - Email: - - - - - - - - - -
- -
- - - - Riferimento Amministrazione: - - - - - - - - - -
- -
- - -
- - - Identificativo fiscale ai fini IVA: - - - - - - -
- -
- - - - Codice fiscale: - - - - - - -
- -
- - - - Cognome nome: - - - - - - - - - - - - - - - -
- -
- - - - Regime fiscale: - - - - - - - - - - (ordinario) - - - (contribuenti minimi) - - - (nuove iniziative produttive) - - - (agricoltura e attività connesse e pesca) - - - (vendita sali e tabacchi) - - - (commercio fiammiferi) - - - (editoria) - - - (gestione servizi telefonia pubblica) - - - (rivendita documenti di trasporto pubblico e di sosta) - - - (intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72) - - - (agenzie viaggi e turismo) - - - (agriturismo) - - - (vendite a domicilio) - - - (rivendita beni usati, oggetti d’arte, - d’antiquariato o da collezione) - - - (agenzie di vendite all’asta di oggetti d’arte, - antiquariato o da collezione) - - - (IVA per cassa P.A.) - - - (IVA per cassa - art. 32-bis, D.L. 83/2012) - - - (Regime forfettario) - - - (altro) - - - - - (!!! codice non previsto !!!) - - - - - -
- - - -
- - - - Indirizzo: - - - - - - - - -
- -
- - - - Comune: - - - - - - - - - Provincia: - - - - - - - - - -
-
- - - - Cap: - - - - - - - - - Nazione: - - - - - - - - -
-
-
-
- -
-
- - - -
- - - -
- - - - - - -
- - -
- - - - - - - -
- - - Identificativo fiscale ai fini IVA: - - - - - - -
- -
- - - - Codice fiscale: - - - - - - -
- -
- - - - Denominazione: - - - - - - -
- -
- - - - Cognome nome: - - - - - - - - - - - - - - - -
- - -
- - - -
- - - - Indirizzo: - - - - - - - - -
- - - -
- - - - Comune: - - - - - - - - - Provincia: - - - - - - - - - -
-
- - - - Cap: - - - - - - - - - Nazione: - - - - - - - - -
-
- - - - Pec: - - - - - -
- - -
-
- - - -
- - - Identificativo fiscale ai fini IVA: - - - - - - -
- -
- - - - Codice fiscale: - - - - - - -
-
- -
- - - - Denominazione: - - - - - - -
- -
- - - - Cognome nome: - - - - - - - - - - - - - - - -
- - - -
- - - - Indirizzo: - - - - - - - - -
- - - -
- - - - Comune: - - - - - - - - - Provincia: - - - - - - - - - -
-
- - - - Cap: - - - - - - - - - Nazione: - - - - - - - - -
-
- - - - Pec: - - - - - -
- - -
- -
-
-
-
- -
- - - - - -
- - - - -
- - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tipologia documentoArt. 73Numero documentoData documentoCodice destinatario
- - - - - - - - - - - (fattura) - - - (acconto/anticipo su fattura) - - - (acconto/anticipo su parcella) - - - (nota di credito) - - - (nota di debito) - - - (parcella) - - - (autofattura) - - - - (fattura semplificata) - - - (nota di credito semplificata) - - - (nota di debito semplificata) - - - - - (!!! codice non previsto !!!) - - - - - - - - - - - - - - - - - - - - - - - - - Indicata PEC - - - - - - - - -
- - -
- - - - - - - - - - - - - - - - - -
Causale
- - - - - - - -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescrizioneImposta%IVAPrezzo totale
- - - - - - -
- RIF.NORM. -
-
- -
- - - - - - - - - - - - - - - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cod. articoloDescrizioneQuantitàPrezzo unitarioUMSconto o magg.%IVAPrezzo totale
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Dati Cassa PrevidenzialeImponibile%Contr.Ritenuta%IVAImporto
- - - - - - - - - - - (Cassa Nazionale Previdenza e Assistenza Avvocati - e Procuratori legali) - - - (Cassa Previdenza Dottori Commercialisti) - - - (Cassa Previdenza e Assistenza Geometri) - - - (Cassa Nazionale Previdenza e Assistenza - Ingegneri e Architetti liberi profess.) - - - (Cassa Nazionale del Notariato) - - - (Cassa Nazionale Previdenza e Assistenza - Ragionieri e Periti commerciali) - - - (Ente Nazionale Assistenza Agenti e Rappresentanti - di Commercio-ENASARCO) - - - (Ente Nazionale Previdenza e Assistenza Consulenti - del Lavoro-ENPACL) - - - (Ente Nazionale Previdenza e Assistenza - Medici-ENPAM) - - - (Ente Nazionale Previdenza e Assistenza - Farmacisti-ENPAF) - - - (Ente Nazionale Previdenza e Assistenza - Veterinari-ENPAV) - - - (Ente Nazionale Previdenza e Assistenza Impiegati - dell'Agricoltura-ENPAIA) - - - (Fondo Previdenza Impiegati Imprese di Spedizione - e Agenzie Marittime) - - - (Istituto Nazionale Previdenza Giornalisti - Italiani-INPGI) - - - (Opera Nazionale Assistenza Orfani Sanitari - Italiani-ONAOSI) - - - (Cassa Autonoma Assistenza Integrativa - Giornalisti Italiani-CASAGIT) - - - (Ente Previdenza Periti Industriali e Periti - Industriali Laureati-EPPI) - - - (Ente Previdenza e Assistenza - Pluricategoriale-EPAP) - - - (Ente Nazionale Previdenza e Assistenza - Biologi-ENPAB) - - - (Ente Nazionale Previdenza e Assistenza - Professione Infermieristica-ENPAPI) - - - (Ente Nazionale Previdenza e Assistenza - Psicologi-ENPAP) - - - (INPS) - - - - - (!!! codice non previsto !!!) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - - -
- - - - - - - - -
RIEPILOGHI IVA E TOTALI
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
esigibilità iva / riferimenti normativi%IVASpese accessorieTotale imponibileTotale imposta
- - - - - - - - - - - - (esigibilità immediata) - - - (esigibilità differita) - - - (scissione dei pagamenti) - - - (!!! codice non previsto !!!) - - - - - - - Esigib. non dich. (si presume immediata) - - - - - -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - -
- Importo bollo - - Sconto/Maggiorazione - - Valuta - - Totale documento -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - -
- -
- - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Modalità pagamentoIBANIstitutoData scadenzaImporto
- - - - - - - - - - - Contanti - - - Assegno - - - Assegno circolare - - - Contanti presso Tesoreria - - - Bonifico - - - Vaglia cambiario - - - Bollettino bancario - - - Carta di pagamento - - - RID - - - RID utenze - - - RID veloce - - - RIBA - - - MAV - - - Quietanza erario - - - Giroconto su conti di contabilità speciale - - - Domiciliazione bancaria - - - Domiciliazione postale - - - Bollettino di c/c postale - - - SEPA Direct Debit - - - SEPA Direct Debit CORE - - - SEPA Direct Debit B2B - - - Trattenuta su somme già riscosse - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
- - -
- * -
- -
- -
-
- -
- -
- - - - -
Allegati:
- -
    - -
  • -
    - - - - -
    -
  • - - -
    - -
- -
- - - - -
- - - -
- -
- - - - - -
- - -
- - - -
-
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + % + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + % + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + () + +
+
+ + + + + + + + + () + + + + + + + + +
+ Tipo dato: + + + (dati relativi a lotti e scadenze) + + +
+ + +
+ + + + Lotto: + + + Rif. testo: + + + +
+
+ + + + +
+ + + + Scadenza: + + + Rif. data: + + + + + + + +
+
+ + +
+ + + + Quantità del suddetto lotto: + + + Rif. numero: + + + +
+
+ + + +
+ +
+ + +
+ RIF.AMM. +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + +
+ +
+
+ + + +
+ +
+
+
+ + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + + + + ------------------------ + + + + +
+ + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Dati ritenuta d'accontoAliquota ritenutaCausale Importo
+ + + + + + + + + + + + (ritenuta persone fisiche) + + + (ritenuta persone giuridiche) + + + + + (!!! codice non previsto !!!) + + + + + + + + + + + + + + + + + + + + (decodifica come da modello 770S) + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ + + + + + + +
+ + +
+ + + + + + + + + + +
+ + + Identificativo fiscale ai fini IVA: + + + + + + +
+ +
+ + + + Codice fiscale: + + + + + + +
+ +
+ + + + Denominazione: + + + + + + +
+ +
+ + + + Cognome nome: + + + + + + + + + + + + + + + +
+ + +
+ + + + Regime fiscale: + + + + + + + + + + (ordinario) + + + (contribuenti minimi) + + + (nuove iniziative produttive) + + + (agricoltura e attività connesse e pesca) + + + (vendita sali e tabacchi) + + + (commercio fiammiferi) + + + (editoria) + + + (gestione servizi telefonia pubblica) + + + (rivendita documenti di trasporto pubblico e di sosta) + + + (intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72) + + + (agenzie viaggi e turismo) + + + (agriturismo) + + + (vendite a domicilio) + + + (rivendita beni usati, oggetti d’arte, + d’antiquariato o da collezione) + + + (agenzie di vendite all’asta di oggetti d’arte, + antiquariato o da collezione) + + + (IVA per cassa P.A.) + + + (IVA per cassa - art. 32-bis, D.L. 83/2012) + + + (Regime forfettario) + + + (altro) + + + + + (!!! codice non previsto !!!) + + + + + +
+ +
+ + + +
+ + + + Indirizzo: + + + + + + + + +
+ +
+ + + + Comune: + + + + + + + + + Provincia: + + + + + + + + + +
+
+ + + + Cap: + + + + + + + + + Nazione: + + + + + + + + +
+
+
+ + + + Telefono: + + + + + + + + +
+ +
+ + + + Email: + + + + + + + + + +
+ +
+ + + + Riferimento Amministrazione: + + + + + + + + + +
+ +
+ + +
+ + + Identificativo fiscale ai fini IVA: + + + + + + +
+ +
+ + + + Codice fiscale: + + + + + + +
+ +
+ + + + Cognome nome: + + + + + + + + + + + + + + + +
+ +
+ + + + Regime fiscale: + + + + + + + + + + (ordinario) + + + (contribuenti minimi) + + + (nuove iniziative produttive) + + + (agricoltura e attività connesse e pesca) + + + (vendita sali e tabacchi) + + + (commercio fiammiferi) + + + (editoria) + + + (gestione servizi telefonia pubblica) + + + (rivendita documenti di trasporto pubblico e di sosta) + + + (intrattenimenti, giochi e altre attività di cui alla tariffa allegata al DPR 640/72) + + + (agenzie viaggi e turismo) + + + (agriturismo) + + + (vendite a domicilio) + + + (rivendita beni usati, oggetti d’arte, + d’antiquariato o da collezione) + + + (agenzie di vendite all’asta di oggetti d’arte, + antiquariato o da collezione) + + + (IVA per cassa P.A.) + + + (IVA per cassa - art. 32-bis, D.L. 83/2012) + + + (Regime forfettario) + + + (altro) + + + + + (!!! codice non previsto !!!) + + + + + +
+ + + +
+ + + + Indirizzo: + + + + + + + + +
+ +
+ + + + Comune: + + + + + + + + + Provincia: + + + + + + + + + +
+
+ + + + Cap: + + + + + + + + + Nazione: + + + + + + + + +
+
+
+
+ +
+
+ + + +
+ + + +
+ + + + + + +
+ + +
+ + + + + + + +
+ + + Identificativo fiscale ai fini IVA: + + + + + + +
+ +
+ + + + Codice fiscale: + + + + + + +
+ +
+ + + + Denominazione: + + + + + + +
+ +
+ + + + Cognome nome: + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + + Indirizzo: + + + + + + + + +
+ + + +
+ + + + Comune: + + + + + + + + + Provincia: + + + + + + + + + +
+
+ + + + Cap: + + + + + + + + + Nazione: + + + + + + + + +
+
+ + + + Pec: + + + + + +
+ + +
+
+ + + +
+ + + Identificativo fiscale ai fini IVA: + + + + + + +
+ +
+ + + + Codice fiscale: + + + + + + +
+
+ +
+ + + + Denominazione: + + + + + + +
+ +
+ + + + Cognome nome: + + + + + + + + + + + + + + + +
+ + + +
+ + + + Indirizzo: + + + + + + + + +
+ + + +
+ + + + Comune: + + + + + + + + + Provincia: + + + + + + + + + +
+
+ + + + Cap: + + + + + + + + + Nazione: + + + + + + + + +
+
+ + + + Pec: + + + + + +
+ + +
+ +
+
+
+
+ +
+ + + + + +
+ + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tipologia documentoArt. 73Numero documentoData documentoCodice destinatario
+ + + + + + + + + + + (fattura) + + + (acconto/anticipo su fattura) + + + (acconto/anticipo su parcella) + + + (nota di credito) + + + (nota di debito) + + + (parcella) + + + (autofattura) + + + + (fattura semplificata) + + + (nota di credito semplificata) + + + (nota di debito semplificata) + + + + + (!!! codice non previsto !!!) + + + + + + + + + + + + + + + + + + + + + + + + + Indicata PEC + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + +
Causale
+ + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
DescrizioneImposta%IVAPrezzo totale
+ + + + + + +
+ RIF.NORM. +
+
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Cod. articoloDescrizioneQuantitàPrezzo unitarioUMSconto o magg.%IVAPrezzo totale
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Dati Cassa PrevidenzialeImponibile%Contr.Ritenuta%IVAImporto
+ + + + + + + + + + + (Cassa Nazionale Previdenza e Assistenza Avvocati + e Procuratori legali) + + + (Cassa Previdenza Dottori Commercialisti) + + + (Cassa Previdenza e Assistenza Geometri) + + + (Cassa Nazionale Previdenza e Assistenza + Ingegneri e Architetti liberi profess.) + + + (Cassa Nazionale del Notariato) + + + (Cassa Nazionale Previdenza e Assistenza + Ragionieri e Periti commerciali) + + + (Ente Nazionale Assistenza Agenti e Rappresentanti + di Commercio-ENASARCO) + + + (Ente Nazionale Previdenza e Assistenza Consulenti + del Lavoro-ENPACL) + + + (Ente Nazionale Previdenza e Assistenza + Medici-ENPAM) + + + (Ente Nazionale Previdenza e Assistenza + Farmacisti-ENPAF) + + + (Ente Nazionale Previdenza e Assistenza + Veterinari-ENPAV) + + + (Ente Nazionale Previdenza e Assistenza Impiegati + dell'Agricoltura-ENPAIA) + + + (Fondo Previdenza Impiegati Imprese di Spedizione + e Agenzie Marittime) + + + (Istituto Nazionale Previdenza Giornalisti + Italiani-INPGI) + + + (Opera Nazionale Assistenza Orfani Sanitari + Italiani-ONAOSI) + + + (Cassa Autonoma Assistenza Integrativa + Giornalisti Italiani-CASAGIT) + + + (Ente Previdenza Periti Industriali e Periti + Industriali Laureati-EPPI) + + + (Ente Previdenza e Assistenza + Pluricategoriale-EPAP) + + + (Ente Nazionale Previdenza e Assistenza + Biologi-ENPAB) + + + (Ente Nazionale Previdenza e Assistenza + Professione Infermieristica-ENPAPI) + + + (Ente Nazionale Previdenza e Assistenza + Psicologi-ENPAP) + + + (INPS) + + + + + (!!! codice non previsto !!!) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + + + + + + +
RIEPILOGHI IVA E TOTALI
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
esigibilità iva / riferimenti normativi%IVASpese accessorieTotale imponibileTotale imposta
+ + + + + + + + + + + + (esigibilità immediata) + + + (esigibilità differita) + + + (scissione dei pagamenti) + + + (!!! codice non previsto !!!) + + + + + + + Esigib. non dich. (si presume immediata) + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + +
+ Importo bollo + + Sconto/Maggiorazione + + Valuta + + Totale documento +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Modalità pagamentoIBANIstitutoData scadenzaImporto
+ + + + + + + + + + + Contanti + + + Assegno + + + Assegno circolare + + + Contanti presso Tesoreria + + + Bonifico + + + Vaglia cambiario + + + Bollettino bancario + + + Carta di pagamento + + + RID + + + RID utenze + + + RID veloce + + + RIBA + + + MAV + + + Quietanza erario + + + Giroconto su conti di contabilità speciale + + + Domiciliazione bancaria + + + Domiciliazione postale + + + Bollettino di c/c postale + + + SEPA Direct Debit + + + SEPA Direct Debit CORE + + + SEPA Direct Debit B2B + + + Trattenuta su somme già riscosse + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+ * +
+ +
+ +
+
+ +
+ +
+ + + + +
Allegati:
+ +
    + +
  • +
    + + + + +
    +
  • + + +
    + +
+ +
+ + + + +
+ + + +
+ +
+ + + + + +
+ + +
+ + + +
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
\ No newline at end of file diff --git a/plugins/exportPA/view.php b/plugins/exportFE/view.php similarity index 100% rename from plugins/exportPA/view.php rename to plugins/exportFE/view.php diff --git a/plugins/importPA/actions.php b/plugins/importFE/actions.php similarity index 50% rename from plugins/importPA/actions.php rename to plugins/importFE/actions.php index b283fa6e6..d729025ce 100644 --- a/plugins/importPA/actions.php +++ b/plugins/importFE/actions.php @@ -2,30 +2,39 @@ include_once __DIR__.'/../../core.php'; +use Plugins\ImportFE\FatturaElettronica; +use Plugins\ImportFE\Interaction; + include_once Modules::filepath('Fatture di vendita', 'modutil.php'); $directory = Uploads::getDirectory($id_module); switch (filter('op')) { case 'save': - $id = Uploads::getFakeID(); - $filename = $upload = Uploads::upload($_FILES['blob'], [ - 'name' => tr('Fattura Elettronica'), - 'category' => tr('Fattura Elettronica'), - 'id_module' => $id_module, - 'id_record' => $id, - ]); - - try { - $xml = file_get_contents(DOCROOT.'/'.$directory.'/'.$filename); - $fattura_pa = new Plugins\ImportPA\FatturaElettronica($xml, post('id_segment')); + $content = file_get_contents($_FILES['blob']['tmp_name']); + $file = FatturaElettronica::store($_FILES['blob']['name'], $content); + if (FatturaElettronica::isValid($file)) { echo json_encode([ - 'id' => $id, - 'filename' => $filename, - 'id_segment' => post('id_segment'), + 'filename' => $file, ]); - } catch (UnexpectedValueException $e) { + } else { + echo json_encode([ + 'already' => 1, + ]); + } + + break; + + case 'prepare': + $name = get('name'); + $file = Interaction::getImportXML($name); + + if (FatturaElettronica::isValid($file)) { + echo json_encode([ + 'filename' => $file, + ]); + } else { echo json_encode([ 'already' => 1, ]); @@ -34,23 +43,17 @@ switch (filter('op')) { break; case 'generate': - $id = post('id'); - $filename = post('filename'); - - $xml = file_get_contents(DOCROOT.'/'.$directory.'/'.$filename); - $fattura_pa = new Plugins\ImportPA\FatturaElettronica($xml, post('id_segment')); - - $id_record = $fattura_pa->saveFattura(post('pagamento')); - $idrivalsainps = 0; - $idritenutaacconto = 0; - $bollo = 0; + $fattura_pa = new FatturaElettronica(post('filename')); + $id_record = $fattura_pa->saveFattura(post('pagamento'), post('id_segment')); $fattura_pa->saveRighe(post('articoli'), post('iva'), post('conto')); $fattura_pa->getFattura()->updateSconto(); - $fattura_pa->saveAllegati($directory); + $fattura_pa->saveAllegati(); - Uploads::updateFake($id, $id_record); + $idrivalsainps = 0; + $idritenutaacconto = 0; + $bollo = 0; ricalcola_costiagg_fattura($id_record, $idrivalsainps, $idritenutaacconto, $bollo); elimina_scadenza($id_record); @@ -58,6 +61,8 @@ switch (filter('op')) { aggiungi_scadenza($id_record, post('pagamento')); aggiungi_movimento($id_record, 'uscita'); + $fattura_pa->delete(); + redirect(ROOTDIR.'/editor.php?id_module='.$id_module.'&id_record='.$id_record); break; diff --git a/plugins/importPA/edit.php b/plugins/importFE/edit.php similarity index 70% rename from plugins/importPA/edit.php rename to plugins/importFE/edit.php index 832f92b30..457ff06bc 100644 --- a/plugins/importPA/edit.php +++ b/plugins/importFE/edit.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +use Plugins\ImportFE\Interaction; + echo ' '; +} diff --git a/plugins/importFE/list.php b/plugins/importFE/list.php new file mode 100644 index 000000000..4fbbaa35d --- /dev/null +++ b/plugins/importFE/list.php @@ -0,0 +1,70 @@ + + + + '.tr('Nome').' + # + + + '; + + foreach ($list as $element) { + echo ' + + '.$element.' + + + + '; + } + + echo ' + +'; +} else { + echo ' +

'.tr('Nessuna fattura da importare').'.

'; +} + +echo ' +'; diff --git a/plugins/importPA/rows.php b/plugins/importFE/rows.php similarity index 85% rename from plugins/importPA/rows.php rename to plugins/importFE/rows.php index 17547596e..247d74a23 100644 --- a/plugins/importPA/rows.php +++ b/plugins/importFE/rows.php @@ -2,10 +2,7 @@ include_once __DIR__.'/../../core.php'; -$directory = Uploads::getDirectory($id_module); - -$xml = file_get_contents(DOCROOT.'/'.$directory.'/'.get('filename')); -$fattura_pa = new Plugins\ImportPA\FatturaElettronica($xml, post('id_segment')); +$fattura_pa = new Plugins\ImportFE\FatturaElettronica(get('filename')); echo '
@@ -63,6 +60,10 @@ echo ' echo ' {[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "values": "query='.$query.'" ]}'; +// Sezionale +echo ' + {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.$id_module.' ORDER BY name", "value": "'.$_SESSION['module_'.$id_module]['id_segment'].'" ]}'; + // Righe $righe = $fattura_pa->getRighe(); @@ -77,7 +78,7 @@ if (!empty($righe)) { '.tr('Q.tà').' '.tr('Prezzo unitario').' '.tr('Iva associata').'* - '.tr('Conto').' + '.tr('Conto').'* '.tr('Articolo associato').' '; @@ -93,13 +94,13 @@ if (!empty($righe)) { echo ' '.$riga['Descrizione'].' - '.Translator::numberToLocale( $riga['Quantita'] ).' '.$riga['UnitaMisura'].' - '.Translator::numberToLocale( $riga['PrezzoUnitario'] ).' € + '.Translator::numberToLocale($riga['Quantita']).' '.$riga['UnitaMisura'].' + '.Translator::numberToLocale($riga['PrezzoUnitario']).' € {[ "type": "select", "name": "iva['.$key.']", "values": "query='.str_replace('"', '\"', $query).'", "required": 1 ]} - {[ "type": "select", "name": "conto['.$key.']", "ajax-source": "conti-acquisti" ]} + {[ "type": "select", "name": "conto['.$key.']", "ajax-source": "conti-acquisti", "required": 1 ]} {[ "type": "select", "name": "articoli['.$key.']", "ajax-source": "articoli" ]} diff --git a/plugins/importPA/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php similarity index 77% rename from plugins/importPA/src/FatturaElettronica.php rename to plugins/importFE/src/FatturaElettronica.php index aa6c066cb..c04fcecc4 100644 --- a/plugins/importPA/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -1,6 +1,6 @@ file = static::getImportDirectory().'/'.$file; - $this->xml = $array; - $this->id_sezionale = $id_sezionale; + $xml = simplexml_load_file($this->file, 'SimpleXMLElement', LIBXML_NOCDATA); + $json = json_decode(json_encode($xml), true); + + $this->xml = $json; // Individuazione fattura pre-esistente $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; $data = $dati_generali['Data']; $numero = $dati_generali['Numero']; + $progressivo_invio = $this->getHeader()['DatiTrasmissione']['ProgressivoInvio']; $fattura = Fattura::where([ - 'id_segment' => $id_sezionale, + 'progressivo_invio' => $progressivo_invio, 'data' => $data, 'numero' => $numero, ])->first(); if (!empty($fattura)) { - throw new \UnexpectedValueException(); + $this->delete(); + + throw new UnexpectedValueException(); + } + } + + public static function getImportDirectory() + { + if (!isset(self::$directory)) { + $module = Modules::get('Fatture di acquisto'); + + $plugin = $module->plugins->first(function ($value, $key) { + return $value->name = 'Fatturazione Elettronica'; + }); + + self::$directory = DOCROOT.'/'.$plugin->upload_directory; + } + + return self::$directory; + } + + public static function store($filename, $content) + { + $file = static::getImportDirectory().'/'.$filename; + + file_put_contents($file, $content); + + return $filename; + } + + public static function isValid($file) + { + try { + new static($file); + + return true; + } catch (UnexpectedValueException $e) { + return false; } } @@ -200,12 +243,18 @@ class FatturaElettronica return $result; } - public function saveAllegati($directory) + public function saveAllegati() { $allegati = $this->getAllegati(); $module = Modules::get('Fatture di acquisto'); + $info = [ + 'category' => tr('Fattura Elettronica'), + 'id_module' => $module->id, + 'id_record' => $this->fattura->id, + ]; + foreach ($allegati as $allegato) { $content = base64_decode($allegato['Attachment']); $original = $allegato['NomeAttachment'].'.'.strtolower($allegato['FormatoAttachment']); @@ -213,16 +262,18 @@ class FatturaElettronica 'id_module' => $module['id'], ]); - file_put_contents($directory.'/'.$filename, $content); + file_put_contents($module->upload_directory.'/'.$filename, $content); - Uploads::register([ + Uploads::register(array_merge($info, [ 'filename' => $filename, 'original' => $original, - 'category' => tr('Fattura elettronica'), - 'id_module' => $module['id'], - 'id_record' => $this->fattura->id, - ]); + ])); } + + // Registrazione XML come allegato + $filename = Uploads::upload($this->file, array_merge($info, [ + 'name' => tr('Fattura Elettronica'), + ])); } public function getFattura() @@ -235,22 +286,22 @@ class FatturaElettronica * * @return int */ - public function saveFattura($id_pagamento) + public function saveFattura($id_pagamento, $id_sezionale) { $anagrafica = static::createAnagrafica($this->getHeader()['CedentePrestatore']); $dati_generali = $this->getBody()['DatiGenerali']['DatiGeneraliDocumento']; $data = $dati_generali['Data']; - $numero = Fattura::getNumero($data, 'uscita', $this->id_sezionale); $numero_esterno = $dati_generali['Numero']; + $progressivo_invio = $this->getHeader()['DatiTrasmissione']['ProgressivoInvio']; $descrizione_tipo = empty($this->getBody()['DatiGenerali']['DatiTrasporto']) ? 'Fattura immediata di acquisto' : 'Fattura accompagnatoria di acquisto'; $tipo = TipoFattura::where('descrizione', $descrizione_tipo)->first(); - $fattura = Fattura::make($anagrafica, $tipo, $data, $this->id_sezionale); + $fattura = Fattura::make($anagrafica, $tipo, $data, $id_sezionale); $this->fattura = $fattura; - $fattura->numero = $numero; + $fattura->progressivo_invio = $progressivo_invio; $fattura->numero_esterno = $numero_esterno; $fattura->idpagamento = $id_pagamento; @@ -288,4 +339,9 @@ class FatturaElettronica return $fattura->id; } + + public function delete() + { + delete($this->file); + } } diff --git a/plugins/importFE/src/Interaction.php b/plugins/importFE/src/Interaction.php new file mode 100644 index 000000000..28bd496ce --- /dev/null +++ b/plugins/importFE/src/Interaction.php @@ -0,0 +1,91 @@ + 'https://services.osmcloud.it/v1/', + 'verify' => false + ]); + } + + return self::$client; + } + + public function isEnabled() + { + return false; + } + + protected function request($type, $resource, $data = [], $options = []) + { + $client = static::getClient(); + + $json = array_merge($data, [ + 'token' => setting('OSMCloud Services API Token'), + 'resource' => $resource, + ]); + + $options = array_merge($options, [ + 'json' => $json, + 'http_errors' => false, + ]); + + return $client->request($type, '', $options); + } + + public static function listToImport() + { + $directory = FatturaElettronica::getImportDirectory(); + + $response = static::request('GET', 'get_fatture_da_importare'); + $body = $response->getBody(); + + $list = json_decode($body, true) ?: []; + + $files = glob($directory.'/*.xml'); + foreach ($files as $file) { + $list[] = basename($file); + } + + return array_clean($list); + } + + public static function getImportXML($name) + { + $directory = FatturaElettronica::getImportDirectory(); + $file = $directory.'/'.$name; + + if (!file_exists($file)) { + $response = static::request('GET', 'get_fattura_da_importare', [ + 'name' => $name, + ]); + + $body = $response->getBody(); + + FatturaElettronica::store($name, $body); + } + + return $name; + } +} diff --git a/src/Uploads.php b/src/Uploads.php index 418e81d2a..3e5b98199 100644 --- a/src/Uploads.php +++ b/src/Uploads.php @@ -86,15 +86,17 @@ class Uploads */ public static function upload($source, $data, $options = []) { - $src = $source['tmp_name']; - $original = $source['name']; + $original = isset($source['name']) ? $source['name'] : $source; $filename = self::getName($original, $data); - $directory = DOCROOT.'/'.self::getDirectory($data['id_module'], $data['id_plugin']); // Creazione file fisico - if (!directory($directory) || !move_uploaded_file($src, $directory.'/'.$filename)) { + if ( + !directory($directory) || + (is_uploaded_file($source['tmp_name']) && !move_uploaded_file($source['tmp_name'], $directory.'/'.$filename)) || + (is_string($source) && !copy($source, $directory.'/'.$filename)) + ) { return null; } diff --git a/update/2_4_3.sql b/update/2_4_3.sql index 3ee0c32db..a0aaffaef 100644 --- a/update/2_4_3.sql +++ b/update/2_4_3.sql @@ -48,3 +48,7 @@ UPDATE `zz_views` SET `visible` = '0' WHERE `zz_views`.`name` = 'id' AND `id_mod -- Colonna tipi di spedizione predefinita INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default` ) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Tipi di spedizione'), 'Predefinita', 'IF(predefined, ''Sì'', ''No'')', 2, 1, 0, 0, NULL, NULL, 0, 0, 0); + +-- Fix plugin +UPDATE `zz_plugins` SET `directory` = 'exportFE' WHERE `idmodule_to` = (SELECT `id` FROM `zz_modules` WHERE `name`='Fatture di vendita') AND `name` = 'Fatturazione Elettronica'; +UPDATE `zz_plugins` SET `directory` = 'importFE' WHERE `idmodule_to` = (SELECT `id` FROM `zz_modules` WHERE `name`='Fatture di acquisto') AND `name` = 'Fatturazione Elettronica';