From 0a83b4d4d6a26292d582d217ab576442ea2b287e Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Fri, 23 Nov 2018 16:48:30 +0100 Subject: [PATCH] Ampliamento nodi FE --- modules/anagrafiche/actions.php | 5 -- modules/anagrafiche/init.php | 5 ++ modules/fatture/actions.php | 1 + modules/fatture/edit.php | 76 +++++++++++++++++- modules/fatture/init.php | 23 ++++-- plugins/exportPA/src/FatturaElettronica.php | 89 +++++++++++++++++---- update/2_4_3.sql | 2 + 7 files changed, 174 insertions(+), 27 deletions(-) diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php index d6e16ac28..90b501e94 100644 --- a/modules/anagrafiche/actions.php +++ b/modules/anagrafiche/actions.php @@ -4,11 +4,6 @@ include_once __DIR__.'/../../core.php'; use Modules\Anagrafiche\Anagrafica; -$id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica']; -$id_cliente = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Cliente'")[0]['idtipoanagrafica']; -$id_fornitore = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Fornitore'")[0]['idtipoanagrafica']; -$id_tecnico = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Tecnico'")[0]['idtipoanagrafica']; - switch (post('op')) { case 'update': // Informazioni sulla sede diff --git a/modules/anagrafiche/init.php b/modules/anagrafiche/init.php index cf69f2583..3f13cdb3f 100644 --- a/modules/anagrafiche/init.php +++ b/modules/anagrafiche/init.php @@ -4,6 +4,11 @@ include_once __DIR__.'/../../core.php'; use Modules\Anagrafiche\Anagrafica; +$id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica']; +$id_cliente = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Cliente'")[0]['idtipoanagrafica']; +$id_fornitore = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Fornitore'")[0]['idtipoanagrafica']; +$id_tecnico = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Tecnico'")[0]['idtipoanagrafica']; + if (isset($id_record)) { $anagrafica = Anagrafica::find($id_record); diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 40f086c50..6b8b4c4f3 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -90,6 +90,7 @@ switch (post('op')) { 'idconto' => post('idconto'), 'n_colli' => post('n_colli'), + 'tipo_resa' => post('tipo_resa'), 'bollo' => 0, 'rivalsainps' => 0, 'ritenutaacconto' => 0, diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index cc85dc9ac..51f7b58a7 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -265,8 +265,82 @@ if ($tipodoc == 'Fattura accompagnatoria di vendita') {
- {[ "type": "select", "label": "'.tr('Vettore').'", "name": "idvettore", "values": "query=SELECT DISTINCT an_anagrafiche.idanagrafica AS id, an_anagrafiche.ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE an_tipianagrafiche_anagrafiche.idtipoanagrafica=(SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione=\'Vettore\') ORDER BY descrizione ASC", "value": "$idvettore$", "required": 1 ]} + {[ "type": "select", "label": "'.tr('Vettore').'", "name": "idvettore", "values": "query=SELECT DISTINCT an_anagrafiche.idanagrafica AS id, an_anagrafiche.ragione_sociale AS descrizione FROM an_anagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica WHERE an_tipianagrafiche_anagrafiche.idtipoanagrafica=(SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione=\'Vettore\') ORDER BY descrizione ASC", "value": "$idvettore$", "required": '.intval($record['idspedizione'] != 3).' ]}
+ + '; + + $tipo_resa = [ + [ + 'id' => 'EXW', + 'text' => 'EXW', + ], + [ + 'id' => 'FCA', + 'text' => 'FCA', + ], + [ + 'id' => 'FAS', + 'text' => 'FAS', + ], + [ + 'id' => 'FOB', + 'text' => 'FOB', + ], + [ + 'id' => 'CFR', + 'text' => 'CFR', + ], + [ + 'id' => 'CIF', + 'text' => 'CIF', + ], + [ + 'id' => 'CPT', + 'text' => 'CPT', + ], + [ + 'id' => 'CIP', + 'text' => 'CIP', + ], + [ + 'id' => 'DAF', + 'text' => 'DAF', + ], + [ + 'id' => 'DES', + 'text' => 'DES', + ], + [ + 'id' => 'DEQ', + 'text' => 'DEQ', + ], + [ + 'id' => 'DDU', + 'text' => 'DDU', + ], + [ + 'id' => 'DDP', + 'text' => 'DDP', + ] + ]; + + + echo ' +
+ {[ "type": "select", "label": "'.tr('Tipo Resa').'", "name": "tipo_resa", "values": '.json_encode($tipo_resa).', "readonly": '.intval($record['causale_desc'] != 'Reso').' ]} +
+ '; diff --git a/modules/fatture/init.php b/modules/fatture/init.php index fb627eda5..33161f0ec 100644 --- a/modules/fatture/init.php +++ b/modules/fatture/init.php @@ -11,11 +11,24 @@ if ($module['name'] == 'Fatture di vendita') { if (isset($id_record)) { $fattura = Modules\Fatture\Fattura::with('tipo', 'stato')->find($id_record); - $record = $dbo->fetchOne('SELECT *, co_tipidocumento.reversed AS is_reversed, co_documenti.idagente AS idagente_fattura, co_documenti.note, co_documenti.note_aggiuntive, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc`, - (SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale, - (SELECT descrizione FROM co_ritenutaacconto WHERE id=idritenutaacconto) AS ritenutaacconto_desc, - (SELECT descrizione FROM co_rivalsainps WHERE id=idrivalsainps) AS rivalsainps_desc - FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir = '.prepare($dir).' AND co_documenti.id='.prepare($id_record)); + $record = $dbo->fetchOne('SELECT *, + co_tipidocumento.reversed AS is_reversed, + co_documenti.idagente AS idagente_fattura, + co_documenti.note, + co_documenti.note_aggiuntive, + co_documenti.idpagamento, + co_documenti.id AS iddocumento, + co_statidocumento.descrizione AS `stato`, + co_tipidocumento.descrizione AS `descrizione_tipodoc`, + (SELECT is_fiscale FROM zz_segments WHERE id = id_segment) AS is_fiscale, + (SELECT descrizione FROM co_ritenutaacconto WHERE id=idritenutaacconto) AS ritenutaacconto_desc, + (SELECT descrizione FROM co_rivalsainps WHERE id=idrivalsainps) AS rivalsainps_desc, + (SELECT descrizione FROM dt_causalet WHERE id=idcausalet) AS causale_desc + FROM co_documenti + LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id + INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica + INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id + WHERE co_tipidocumento.dir = '.prepare($dir).' AND co_documenti.id='.prepare($id_record)); $note_accredito = $dbo->fetchArray("SELECT co_documenti.id, IF(numero_esterno != '', numero_esterno, numero) AS numero, data FROM co_documenti JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE reversed = 1 AND ref_documento=".prepare($id_record)); } diff --git a/plugins/exportPA/src/FatturaElettronica.php b/plugins/exportPA/src/FatturaElettronica.php index ef34cb662..f2f7e373f 100644 --- a/plugins/exportPA/src/FatturaElettronica.php +++ b/plugins/exportPA/src/FatturaElettronica.php @@ -153,6 +153,25 @@ class FatturaElettronica return $this->ordini; } + /** + * Restituisce le fatture collegaten al documento. + * + * @return array + */ + public function getFattureCollegate() + { + if (empty($this->fatture_collegate)) { + $documento = $this->getDocumento(); + $database = database(); + + $note_accredito = $database->fetchArray("SELECT numero_esterno, data FROM co_documenti WHERE id=".prepare($documento['ref_documento'])); + + $this->fatture_collegate = $note_accredito; + } + + return $this->fatture_collegate; + } + /** * Restituisce le informazioni relative al documento. * @@ -436,17 +455,23 @@ class FatturaElettronica $documento = $fattura->getDocumento(); $database = database(); - $vettore = static::getAnagrafica($documento['idvettore']); - $causale = $database->fetchOne('SELECT descrizione FROM dt_causalet WHERE id = '.prepare($documento['idcausalet']))['descrizione']; $aspetto = $database->fetchOne('SELECT descrizione FROM dt_aspettobeni WHERE id = '.prepare($documento['idaspettobeni']))['descrizione']; - $result = [ - 'DatiAnagraficiVettore' => static::getDatiAnagrafici($vettore), - 'CausaleTrasporto' => $causale, - 'NumeroColli' => $documento['n_colli'], - 'Descrizione' => $aspetto, - ]; + $result = []; + + if ($documento['idvettore']) { + $vettore = static::getAnagrafica($documento['idvettore']); + $result['DatiAnagraficiVettore'] = static::getDatiAnagrafici($vettore); + } + + $result['CausaleTrasporto'] = $causale; + $result['NumeroColli'] = $documento['n_colli']; + $result['Descrizione'] = $aspetto; + + if ($documento['tipo_resa']) { + $result['TipoResa'] = $documento['tipo_resa']; + } return $result; } @@ -463,20 +488,20 @@ class FatturaElettronica $result = []; foreach ($ordini as $element) { if (!empty($element['id_documento_fe'])) { - $dati_contratto = [ + $dati = [ 'IdDocumento' => $element['id_documento_fe'], ]; } if (!empty($element['codice_cig'])) { - $dati_contratto['CodiceCIG'] = $element['codice_cig']; + $dati['CodiceCIG'] = $element['codice_cig']; } if (!empty($element['codice_cup'])) { - $dati_contratto['CodiceCUP'] = $element['codice_cup']; + $dati['CodiceCUP'] = $element['codice_cup']; } - $result[] = $dati_contratto; + $result[] = $dati; } return $result; @@ -494,20 +519,40 @@ class FatturaElettronica $result = []; foreach ($contratti as $element) { if (!empty($element['id_documento_fe'])) { - $dati_contratto = [ + $dati = [ 'IdDocumento' => $element['id_documento_fe'], ]; } if (!empty($element['codice_cig'])) { - $dati_contratto['CodiceCIG'] = $element['codice_cig']; + $dati['CodiceCIG'] = $element['codice_cig']; } if (!empty($element['codice_cup'])) { - $dati_contratto['CodiceCUP'] = $element['codice_cup']; + $dati['CodiceCUP'] = $element['codice_cup']; } - $result[] = $dati_contratto; + $result[] = $dati; + } + + return $result; + } + + /** + * Restituisce l'array responsabile per la generazione del tag DatiFattureCollegate. + * + * @return array + */ + protected static function getDatiFattureCollegate($fattura) + { + $fatture = $fattura->getFattureCollegate(); + + $result = []; + foreach ($fatture as $element) { + $result[] = [ + 'IdDocumento' => $element['numero_esterno'], + 'Data' => $element['data'], + ]; } return $result; @@ -551,6 +596,18 @@ class FatturaElettronica } } + // Controllo le le righe per la fatturazione di contratti + $dati_fatture_collegate = static::getDatiFattureCollegate($fattura); + if (!empty($dati_fatture_collegate)) { + foreach ($dati_fatture_collegate as $dato) { + if (!empty($dato)) { + $result[] = [ + 'DatiFattureCollegate' => $dato, + ]; + } + } + } + if ($documento['tipo'] == 'Fattura accompagnatoria di vendita') { $result['DatiTrasporto'] = static::getDatiTrasporto($fattura); } diff --git a/update/2_4_3.sql b/update/2_4_3.sql index 902c27086..040c53491 100644 --- a/update/2_4_3.sql +++ b/update/2_4_3.sql @@ -31,3 +31,5 @@ ALTER TABLE `co_documenti` CHANGE `codice_xml` `progressivo_invio` VARCHAR(255); -- Aggiunto codice cig e codice cup per fatture e ordini ALTER TABLE `or_ordini` ADD `codice_cig` VARCHAR(15) AFTER `tipo_sconto_globale`, ADD `codice_cup` VARCHAR(15) AFTER `codice_cig`, ADD `id_documento_fe` VARCHAR(20) AFTER `codice_cup`; ALTER TABLE `co_righe_documenti` ADD `data_inizio_periodo` date, ADD `data_fine_periodo` date, ADD `riferimento_amministrazione` VARCHAR(20), ADD `tipo_cessione_prestazione` enum('SC', 'PR', 'AB', 'AC') DEFAULT NULL; + +ALTER TABLE `co_documenti` ADD `tipo_resa` VARCHAR(3);