From b67bd12aeeb753a049896965568e89add8bb34ef Mon Sep 17 00:00:00 2001 From: Fabio Lovato Date: Thu, 10 Jan 2019 12:30:41 +0100 Subject: [PATCH 1/4] Aggiornata dicitura privacy con GDPR su stampa interventi --- templates/interventi/body.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/interventi/body.php b/templates/interventi/body.php index 9659209b0..58b7df7d1 100644 --- a/templates/interventi/body.php +++ b/templates/interventi/body.php @@ -331,7 +331,7 @@ echo ' - '.tr('I dati del ricevente verranno trattati in base al D.lgs n. 196/2003').' + '.tr('I dati del ricevente verrano trattati in base alla normativa europea UE 2016/679 del 27 aprile 2016 (GDPR)').' From bf5c39869c13984d9706aaa456ecb2cf34ffc6dd Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 10 Jan 2019 12:40:58 +0100 Subject: [PATCH 2/4] Rimossi tag HEAD e master --- modules/anagrafiche/edit.php | 7 +------ plugins/exportFE/src/FatturaElettronica.php | 4 ---- plugins/importFE/rows.php | 12 ------------ 3 files changed, 1 insertion(+), 22 deletions(-) diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index 71282b96b..4f553ee1c 100644 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -95,7 +95,6 @@ if (!$cliente) {
  • '.tr('Ente pubblico (B2G/PA) - Codice Univoco Ufficio (www.indicepa.gov.it), 6 caratteri').'
  • '.tr('Azienda (B2B) - Codice Destinatario, 7 caratteri').'
  • @@ -107,11 +106,7 @@ if (!$cliente) { } ?> {[ "type": "text", "label": "", "name": "codice_destinatario", "required": 0, "class": "text-center text-uppercase alphanumeric-mask", "value": "$codice_destinatario$", "maxlength": , "extra": "", "help": "", "readonly": "sedeLegale->nazione->iso2 != 'IT'); ?>" ]} -======= - $help_text = 'Attenzione: per impostare il codice specificare prima \'Tipologia\' e \'Nazione\' dell\'anagrafica:
    • Ente pubblico (B2G/PA) - Codice Univoco Ufficio (www.indicepa.gov.it), 6 caratteri
    • Azienda (B2B) - Codice Destinatario, 7 caratteri
    • Privato (B2C) - viene utilizzato il Codice Fiscale
    '.((in_array($id_azienda, $tipi_anagrafica)) ? '

    N.B. non è necessario comunicare il proprio codice destinatario ai fornitori in quanto è sufficiente che questo sia registrato nel portale del Sistema Di Interscambio dell\'Agenzia Entrate (SDI)

    ' : '').''; - ?> - {[ "type": "text", "label": "", "name": "codice_destinatario", "required": 0, "class": "text-center text-uppercase alphanumeric-mask", "value": "$codice_destinatario$", "maxlength": , "extra": "", "help": "", "readonly": "sedeLegale->nazione->iso2 != 'IT'); ?>" ]} ->>>>>>> master +
diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 9b49cc249..c1fc417f2 100644 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -1206,12 +1206,8 @@ class FatturaElettronica // Importo Totale Documento (2.1.1.9) // Importo totale del documento al netto dell'eventuale sconto e comprensivo di imposta a debito del cessionario / committente -<<<<<<< HEAD - $result['ImportoTotaleDocumento'] = $fattura->netto; -======= $fattura = Modules\Fatture\Fattura::find($documento['id']); $result['ImportoTotaleDocumento'] = abs($fattura->netto); ->>>>>>> master return $result; } diff --git a/plugins/importFE/rows.php b/plugins/importFE/rows.php index 7c50a48ec..a77bdbb8b 100644 --- a/plugins/importFE/rows.php +++ b/plugins/importFE/rows.php @@ -27,16 +27,6 @@ $citta = $sede['Comune']; $provincia = $sede['Provincia']; echo ' -<<<<<<< HEAD -

'. - $ragione_sociale.'
- - '.(!empty($codice_fiscale) ? (tr('Codice Fiscale').': '.$codice_fiscale.'
') : '').' - '.(!empty($partita_iva) ? (tr('Partita IVA').': '.$partita_iva.'
') : '').' - '.$cap.' '.$citta.' ('.$provincia.')
-
-


'; -=======

'. @@ -101,8 +91,6 @@ if (!empty($fattura_pa->getBody()['DatiPagamento'])){ '; } ->>>>>>> master - // Tipo del documento $codice_tipo_documento_fe = (intval(database()->fetchNum('SELECT id FROM co_tipidocumento WHERE codice_tipo_documento_fe = '.prepare($fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento']).''))) ? $fattura_pa->getBody()['DatiGenerali']['DatiGeneraliDocumento']['TipoDocumento'] : '%'; From b09e16a1702b05bc1c6459c8d85177795bb6c074 Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 10 Jan 2019 15:19:17 +0100 Subject: [PATCH 3/4] Introduzione flag fattura per conto del fornitore + Fix codice articolo in stampa preventivo --- modules/fatture/edit.php | 12 ++++++++++++ templates/preventivi/body.php | 2 +- update/2_4_6.sql | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 update/2_4_6.sql diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index ea1d73579..f0c9ee9a7 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -234,6 +234,18 @@ if ($dir == 'uscita') { {[ "type": "checkbox", "label": "", "name": "split_payment", "value": "$split_payment$", "help": "", "placeholder": "" ]}

+ +
+ {[ "type": "checkbox", "label": "", "name": "is_fattura_conto_terzi", "value": "$is_fattura_conto_terzi$", "help": "", "placeholder": "" ]} +
+ + +
diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index b2c80b149..0936bf38b 100644 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -82,7 +82,7 @@ echo " '; // RIGHE PREVENTIVO CON ORDINAMENTO UNICO -$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `co_righe_preventivi` WHERE idpreventivo=".prepare($id_record).' ORDER BY `order`'); +$righe = $dbo->fetchArray("SELECT *, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo),'') AS codice_articolo, (SELECT percentuale FROM co_iva WHERE id=idiva) AS perc_iva FROM `co_righe_preventivi` WHERE idpreventivo=".prepare($id_record).' ORDER BY `order`'); foreach ($righe as $r) { $count = 0; $count += ceil(strlen($r['descrizione']) / $autofill['words']); diff --git a/update/2_4_6.sql b/update/2_4_6.sql new file mode 100644 index 000000000..8b73531da --- /dev/null +++ b/update/2_4_6.sql @@ -0,0 +1 @@ +ALTER TABLE `co_righe_documenti` ADD `ritenutaenasarco` DECIMAL(12,4) NOT NULL AFTER `ritenutaacconto`; \ No newline at end of file From d640414c1f9a536802d2c7ed98bb96f53f1813bf Mon Sep 17 00:00:00 2001 From: Luca Date: Thu, 10 Jan 2019 17:27:19 +0100 Subject: [PATCH 4/4] Aggiunte immagini per stampa ordine --- core.php | 1 + modules/ordini/modutil.php | 2 +- modules/preventivi/actions.php | 4 +- templates/ordini/body.php | 79 ++++++++++++++++++++++++---------- 4 files changed, 62 insertions(+), 24 deletions(-) diff --git a/core.php b/core.php index ba0afd8d5..4738e8634 100644 --- a/core.php +++ b/core.php @@ -31,6 +31,7 @@ foreach ($namespaces as $path => $namespace) { } // Inclusione dei file modutil.php +// TODO: sostituire * con lista module dir {aggiornamenti,anagrafiche,articoli} $files = glob(__DIR__.'/{modules,plugins}/*/modutil.php', GLOB_BRACE); $custom_files = glob(__DIR__.'/{modules,plugins}/*/custom/modutil.php', GLOB_BRACE); foreach ($custom_files as $key => $value) { diff --git a/modules/ordini/modutil.php b/modules/ordini/modutil.php index f951b3cb6..02cdc2729 100644 --- a/modules/ordini/modutil.php +++ b/modules/ordini/modutil.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; use Modules\Ordini\Ordine; /** - * Funzione per generare un nuovo numero per la fattura. + * Funzione per generare un nuovo numero per l'ordine. * * @deprecated 2.4.5 */ diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index e4182d0bb..1f89c39b3 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -23,7 +23,7 @@ switch (post('op')) { $id_record = $preventivo->id; flash()->info(tr('Aggiunto preventivo numero _NUM_!', [ - '_NUM_' => $numero, + '_NUM_' => $preventivo['numero'], ])); break; @@ -110,6 +110,7 @@ switch (post('op')) { $numeropreventivo_template = str_replace('#', '%', $numeropreventivo_template); $rs = $dbo->fetchArray('SELECT numero FROM co_preventivi WHERE numero LIKE('.prepare(Util\Generator::complete($numeropreventivo_template)).') ORDER BY numero DESC LIMIT 0,1'); $numero = Util\Generator::generate(setting('Formato codice preventivi'), $rs[0]['numero']); + $dbo->query('UPDATE co_preventivi SET idstato=1, numero = '.$numero.', master_revision = id WHERE id='.prepare($id_record)); @@ -121,6 +122,7 @@ switch (post('op')) { $dbo->query('DROP TEMPORARY TABLE tmp'); flash()->info(tr('Preventivo duplicato correttamente!')); + break; diff --git a/templates/ordini/body.php b/templates/ordini/body.php index d82a1bfd3..106b25aa3 100644 --- a/templates/ordini/body.php +++ b/templates/ordini/body.php @@ -2,14 +2,41 @@ include_once __DIR__.'/../../core.php'; +function findKey($array, $keySearch) +{ + foreach ($array as $key => $item) { + if ($key == $keySearch) { + return true; + } elseif (is_array($item) && findKey($item, $keySearch)) { + echo $key; + return true; + } + } + return false; +} + $report_name = 'ordine_'.$numero_ord.'.pdf'; +$has_image = false; +// RIGHE ORDINE +$righe = $dbo->fetchArray("SELECT *, + IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS codice_articolo, + IFNULL((SELECT `immagine` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS immagine_articolo, + (SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_ordine` = `or_righe_ordini`.`id`) AS seriali, + (SELECT `percentuale` FROM `co_iva` WHERE `id` = `or_righe_ordini`.`idiva`) AS perc_iva +FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`'); + +//controllo se gli articoli nell'ordine hanno un'immagine +if (findKey($righe,"immagine_articolo")){ + if (!empty($righe[(findKey($righe,"immagine_articolo")-1)]["immagine_articolo"])) + $has_image = true; +} $autofill = [ 'count' => 0, // Conteggio delle righe 'words' => 70, // Numero di parolo dopo cui contare una riga nuova 'rows' => 20, // Numero di righe massimo presente nella pagina 'additional' => 15, // Numero di righe massimo da aggiungere - 'columns' => 5, // Numero di colonne della tabella + 'columns' => (($has_image) ? 6:5), // Numero di colonne della tabella ]; $sconto = []; @@ -20,8 +47,13 @@ $iva = []; echo " - - + "; + + if ($has_image){ +echo " "; + } +echo " + @@ -31,26 +63,29 @@ echo " '; -// RIGHE PREVENTIVO CON ORDINAMENTO UNICO -$righe = $dbo->fetchArray("SELECT *, - IFNULL((SELECT `codice` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS codice_articolo, - IFNULL((SELECT `immagine` FROM `mg_articoli` WHERE `id` = `or_righe_ordini`.`idarticolo`), '') AS immagine_articolo, - (SELECT GROUP_CONCAT(`serial` SEPARATOR ', ') FROM `mg_prodotti` WHERE `id_riga_ordine` = `or_righe_ordini`.`id`) AS seriali, - (SELECT `percentuale` FROM `co_iva` WHERE `id` = `or_righe_ordini`.`idiva`) AS perc_iva -FROM `or_righe_ordini` WHERE idordine=".prepare($id_record).' ORDER BY `order`'); + foreach ($righe as $r) { $count = 0; $count += ceil(strlen($r['descrizione']) / $autofill['words']); $count += substr_count($r['descrizione'], PHP_EOL); - - echo ' - + + echo ' + '; + + if ($has_image){ + echo ' + '; + + } + + echo ' - @@ -184,7 +219,7 @@ if ($options['pricing']) { if (!empty($sconto)) { echo ' - @@ -196,7 +231,7 @@ if ($options['pricing']) { // Imponibile scontato echo ' - @@ -209,7 +244,7 @@ if ($options['pricing']) { // IVA echo ' - @@ -223,7 +258,7 @@ if ($options['pricing']) { // TOTALE echo ' -
".tr('Descrizione', [], ['upper' => true])."
".tr('Immagine', [], ['upper' => true])."".tr('Descrizione', [], ['upper' => true])." ".tr('Q.tà', [], ['upper' => true])." ".tr('Prezzo unitario', [], ['upper' => true])." ".tr('Importo', [], ['upper' => true])."
'; + if (!empty($r['immagine_articolo'])){ + echo ''; + } + echo ' + '; - if (!empty($r['immagine_articolo'])) { - //echo '
'; - } - echo ' '.nl2br($r['descrizione']); @@ -171,7 +206,7 @@ if ($options['pricing']) { // Totale imponibile echo '
+ '.tr('Imponibile', [], ['upper' => true]).':
+ '.tr('Sconto', [], ['upper' => true]).':
+ '.tr('Imponibile scontato', [], ['upper' => true]).':
+ '.tr('Totale IVA', [], ['upper' => true]).':
+ '.tr('Quotazione totale', [], ['upper' => true]).':