From da818b9908767c15247373c290022a2600a093dd Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Thu, 31 Aug 2017 16:23:26 +0200 Subject: [PATCH] Fix completo della branch 2.2.1 Completo ripristino dei fix da Sourceforge per il branch 2.2.1, con l'eccezione dei file riguardanti le stampe. --- .../HTMLBuilder/Manager/FileManager.php | 2 + lib/functions.js | 41 +++--- modules/anagrafiche/actions.php | 123 ++++++++---------- modules/anagrafiche/init.php | 2 + modules/articoli/actions.php | 5 + modules/articoli/edit.php | 10 ++ modules/articoli/plugins/articoli.lotti.php | 2 +- modules/contratti/actions.php | 2 +- modules/contratti/init.php | 2 +- modules/ddt/edit.php | 2 +- modules/fatture/edit.php | 15 ++- modules/fatture/init.php | 2 +- modules/fatture/modutil.php | 14 +- modules/ordini/creaddt.php | 2 +- modules/ordini/creafattura.php | 2 +- templates/pdfgen_variables.php | 14 ++ update/2_3.sql | 2 +- 17 files changed, 148 insertions(+), 94 deletions(-) diff --git a/lib/classes/HTMLBuilder/Manager/FileManager.php b/lib/classes/HTMLBuilder/Manager/FileManager.php index 56e94c8c8..900a6c617 100644 --- a/lib/classes/HTMLBuilder/Manager/FileManager.php +++ b/lib/classes/HTMLBuilder/Manager/FileManager.php @@ -103,6 +103,8 @@ class FileManager implements ManagerInterface form_data.append("id_record","'.$options['id_record'].'"); form_data.append("id_module", "'.$options['id_module'].'"); + $("#main_loading").fadeIn(); + $.ajax({ url: "'.ROOTDIR.'/actions.php", cache: false, diff --git a/lib/functions.js b/lib/functions.js index 039a6c40d..b46f39628 100644 --- a/lib/functions.js +++ b/lib/functions.js @@ -168,6 +168,20 @@ $(document).ready(function () { $('ul.nav a[href="' + hash + '"]').tab('show'); } + // Salvo lo scroll per riportare qui l'utente al reload + $(window).on('scroll', function () { + if (localStorage != undefined) { + localStorage.setItem('scrollTop_' + globals.id_module + '_' + globals.id_record, $(document).scrollTop()); + } + }); + + // Riporto l'utente allo scroll precedente + if (localStorage['scrollTop_' + globals.id_module + '_' + globals.id_record] != undefined) { + setTimeout(function () { + scrollToAndFocus(localStorage['scrollTop_' + globals.id_module + '_' + globals.id_record]); + }, 1); + } + $('.nav-tabs a').click(function (e) { $(this).tab('show'); @@ -941,22 +955,19 @@ function start_inputmask() { } } -/* -/* Funzione per far scrollare la pagina fino a un id + focus e offset -/* es: scrollToAndFocus ('id',0,'','Attenzione'); -*/ -function scrollToAndFocus(id, offset, focus, messaggio) { +/** + * Funzione per far scrollare la pagina fino a un id + focus e offset + * @param integer offset + * @param string id + */ +function scrollToAndFocus(offset, id) { + if (id) { + offset += $('#' + id).offset().top; + } + $('html,body').animate({ - scrollTop: $('#' + id).offset().top + offset - }, 'slow', function () { - if (messaggio != '') { - alert(messaggio); - messaggio = ''; - }; - if (focus != '') { - $('#' + focus).focus(); - } - }); + scrollTop: offset + }, 'slow'); } /** diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php index 271064a6a..ae9d6de6b 100644 --- a/modules/anagrafiche/actions.php +++ b/modules/anagrafiche/actions.php @@ -72,7 +72,7 @@ switch (post('op')) { $dbo->sync('an_anagrafiche_agenti', ['idanagrafica' => $id_record], ['idagente' => (array) $post['idagenti']]); // Se l'agente di default è stato elencato anche tra gli agenti secondari lo rimuovo - if(!empty($post['idagente'])){ + if (!empty($post['idagente'])) { $dbo->query('DELETE FROM an_anagrafiche_agenti WHERE idanagrafica='.prepare($id_record).' AND idagente='.prepare($post['idagente'])); } @@ -85,42 +85,30 @@ switch (post('op')) { $idconto_fornitore = $rs[0]['idconto_fornitore']; // Creo il relativo conto nel partitario se non esiste - if (empty($idconto_cliente)) { - foreach ($post['idtipoanagrafica'] as $idtipoanagrafica) { - $rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica='.prepare($idtipoanagrafica)); + if (empty($idconto_cliente) && in_array($id_cliente, $post['idtipoanagrafica'])) { + // Calcolo prossimo numero cliente + $rs = $dbo->fetchArray("SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Crediti clienti e crediti diversi'"); + $new_numero = $rs[0]['max_numero'] + 1; + $new_numero = str_pad($new_numero, 6, '0', STR_PAD_LEFT); - if ($rs[0]['descrizione'] == 'Cliente') { - // Calcolo prossimo numero cliente - $rs = $dbo->fetchArray("SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Crediti clienti e crediti diversi'"); - $new_numero = $rs[0]['max_numero'] + 1; - $new_numero = str_pad($new_numero, 6, '0', STR_PAD_LEFT); + $dbo->query('INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES('.prepare($new_numero).', '.prepare($post['ragione_sociale']).", (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Crediti clienti e crediti diversi'), 1, 1)"); + $idconto = $dbo->lastInsertedID(); - $dbo->query('INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES('.prepare($new_numero).', '.prepare($post['ragione_sociale']).", (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Crediti clienti e crediti diversi'), 1, 1)"); - $idconto = $dbo->lastInsertedID(); - - // Collegamento conto - $dbo->query('UPDATE an_anagrafiche SET idconto_cliente='.prepare($idconto).' WHERE idanagrafica='.prepare($id_record)); - } - } + // Collegamento conto + $dbo->query('UPDATE an_anagrafiche SET idconto_cliente='.prepare($idconto).' WHERE idanagrafica='.prepare($id_record)); } - if (empty($idconto_fornitore)) { - foreach ($post['idtipoanagrafica'] as $idtipoanagrafica) { - $rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica='.prepare($idtipoanagrafica)); + if (empty($idconto_fornitore) && in_array($id_fornitore, $post['idtipoanagrafica'])) { + // Calcolo prossimo numero cliente + $rs = $dbo->fetchArray("SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Debiti fornitori e debiti diversi'"); + $new_numero = $rs[0]['max_numero'] + 1; + $new_numero = str_pad($new_numero, 6, '0', STR_PAD_LEFT); - if ($rs[0]['descrizione'] == 'Fornitore') { - // Calcolo prossimo numero cliente - $rs = $dbo->fetchArray("SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Debiti fornitori e debiti diversi'"); - $new_numero = $rs[0]['max_numero'] + 1; - $new_numero = str_pad($new_numero, 6, '0', STR_PAD_LEFT); + $dbo->query('INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES('.prepare($new_numero).', '.prepare($post['ragione_sociale']).", (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Debiti fornitori e debiti diversi'), 1, 1)"); + $idconto = $dbo->lastInsertedID(); - $dbo->query('INSERT INTO co_pianodeiconti3(numero, descrizione, idpianodeiconti2, can_delete, can_edit) VALUES('.prepare($new_numero).', '.prepare($post['ragione_sociale']).", (SELECT id FROM co_pianodeiconti2 WHERE descrizione='Debiti fornitori e debiti diversi'), 1, 1)"); - $idconto = $dbo->lastInsertedID(); - - // Collegamento conto - $dbo->query('UPDATE an_anagrafiche SET idconto_fornitore='.prepare($idconto).' WHERE idanagrafica='.prepare($id_record)); - } - } + // Collegamento conto + $dbo->query('UPDATE an_anagrafiche SET idconto_fornitore='.prepare($idconto).' WHERE idanagrafica='.prepare($id_record)); } break; @@ -130,52 +118,44 @@ switch (post('op')) { $ragione_sociale = post('ragione_sociale'); // Inserimento anagrafica base - if (count($idtipoanagrafica) > 0 && $ragione_sociale != '') { - // Leggo l'ultimo codice anagrafica per calcolare il successivo - $rs = $dbo->fetchArray('SELECT codice FROM an_anagrafiche ORDER BY CAST(codice AS SIGNED) DESC LIMIT 0, 1'); - $codice = get_next_code($rs[0]['codice'], 1, get_var('Formato codice anagrafica')); + // Leggo l'ultimo codice anagrafica per calcolare il successivo + $rs = $dbo->fetchArray('SELECT codice FROM an_anagrafiche ORDER BY CAST(codice AS SIGNED) DESC LIMIT 0, 1'); + $codice = get_next_code($rs[0]['codice'], 1, get_var('Formato codice anagrafica')); - // Se ad aggiungere un cliente è un agente, lo imposto come agente di quel cliente - // Lettura tipologia della nuova anagrafica - for ($t = 0; $t < count($idtipoanagrafica); ++$t) { - $rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica='.prepare($idtipoanagrafica[$t])); - $tipoanagrafica_dst .= $rs[0]['descrizione']; - if ($t < count($idtipoanagrafica) - 1) { - $tipoanagrafica_dst .= ', '; - } + // Se ad aggiungere un cliente è un agente, lo imposto come agente di quel cliente + // Lettura tipologia dell'utente loggato + $agente_is_logged = false; + + $rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica = an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica = '.prepare($user['idanagrafica'])); + + for ($i = 0; $i < count($rs); ++$i) { + if ($rs[$i]['descrizione'] == 'Agente') { + $agente_is_logged = true; + $i = count($rs); } - - // Lettura tipologia dell'utente loggato - $agente_is_logged = false; - - $rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche INNER JOIN an_tipianagrafiche_anagrafiche ON an_tipianagrafiche.idtipoanagrafica = an_tipianagrafiche_anagrafiche.idtipoanagrafica WHERE idanagrafica = '.prepare($user['idanagrafica'])); - - for ($i = 0; $i < count($rs); ++$i) { - if ($rs[$i]['descrizione'] == 'Agente') { - $agente_is_logged = true; - $i = count($rs); - } - } - - $idagente = ($agente_is_logged && str_contains($tipoanagrafica_dst, 'Cliente')) ? $user['idanagrafica'] : 0; - - // Inserisco l'anagrafica - $query = 'INSERT INTO an_anagrafiche(ragione_sociale, codice, idagente) VALUES ('.prepare($ragione_sociale).', '.prepare($codice).', '.prepare($idagente).')'; - $dbo->query($query); - - $new_id = $dbo->lastInsertedID(); } + $idagente = ($agente_is_logged && in_array($id_cliente, $post['idtipoanagrafica'])) ? $user['idanagrafica'] : 0; + + // Inserisco l'anagrafica + $dbo->insert('an_anagrafiche', [ + 'ragione_sociale' => $ragione_sociale, + 'codice' => $codice, + 'idagente' => $idagente, + ]); + + $new_id = $dbo->lastInsertedID(); + // Inserisco il rapporto dell'anagrafica (cliente, tecnico, ecc) $dbo->sync('an_tipianagrafiche_anagrafiche', ['idanagrafica' => $new_id], ['idtipoanagrafica' => (array) $idtipoanagrafica]); - if (str_contains($tipoanagrafica_dst, 'Azienda')) { + if (in_array($id_azienda, $post['idtipoanagrafica'])) { $dbo->query('UPDATE zz_settings SET valore='.prepare($new_id)." WHERE nome='Azienda predefinita'"); $_SESSION['infos'][] = _('Anagrafica Azienda impostata come predefinita. Per ulteriori informazionioni, visitare "Strumenti -> Impostazioni -> Generali".'); } - // Creo il relativo conto nel partitario - if (str_contains($tipoanagrafica_dst, 'Cliente')) { + // Creo il relativo conto nel partitario (cliente) + if (in_array($id_cliente, $post['idtipoanagrafica'])) { // Calcolo prossimo numero cliente $rs = $dbo->fetchArray("SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Crediti clienti e crediti diversi'"); $new_numero = $rs[0]['max_numero'] + 1; @@ -187,7 +167,10 @@ switch (post('op')) { // Collegamento conto $dbo->query('UPDATE an_anagrafiche SET idconto_cliente='.prepare($idconto).' WHERE idanagrafica='.prepare($new_id)); - } elseif (str_contains($tipoanagrafica_dst, 'Fornitore')) { + } + + // Creo il relativo conto nel partitario (fornitore) + if (in_array($id_fornitore, $post['idtipoanagrafica'])) { // Calcolo prossimo numero cliente $rs = $dbo->fetchArray("SELECT MAX(CAST(co_pianodeiconti3.numero AS UNSIGNED)) AS max_numero FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti2.descrizione='Debiti fornitori e debiti diversi'"); $new_numero = $rs[0]['max_numero'] + 1; @@ -203,6 +186,12 @@ switch (post('op')) { $id_record = $new_id; + // Lettura tipologia della nuova anagrafica + if (!empty($idtipoanagrafica)) { + $rs = $dbo->fetchArray('SELECT descrizione FROM an_tipianagrafiche WHERE idtipoanagrafica IN ('.implode(',', $idtipoanagrafica).')'); + $tipoanagrafica_dst = implode(', ', array_column($rs, 'descrizione')); + } + if (isAjaxRequest() && str_contains($tipoanagrafica_dst, post('tipoanagrafica'))) { echo json_encode(['id' => $id_record, 'text' => $ragione_sociale]); } diff --git a/modules/anagrafiche/init.php b/modules/anagrafiche/init.php index 5abad7fa6..f99328297 100644 --- a/modules/anagrafiche/init.php +++ b/modules/anagrafiche/init.php @@ -7,3 +7,5 @@ if (isset($id_record)) { } $id_azienda = $dbo->fetchArray("SELECT idtipoanagrafica FROM an_tipianagrafiche WHERE descrizione='Azienda'")[0]['idtipoanagrafica']; +$id_cliente = $dbo->fetchArray("SELECT descrizione FROM an_tipianagrafiche WHERE descrizione='Cliente'"); +$id_fornitore = $dbo->fetchArray("SELECT descrizione FROM an_tipianagrafiche WHERE descrizione='Fornitore'"); diff --git a/modules/articoli/actions.php b/modules/articoli/actions.php index d0f647dd8..a5f1708d1 100644 --- a/modules/articoli/actions.php +++ b/modules/articoli/actions.php @@ -23,6 +23,9 @@ switch (post('op')) { $gg_garanzia = post('gg_garanzia'); $componente_filename = post('componente_filename'); + $volume = post('volume'); + $peso_lordo = post('peso_lordo'); + $attivo = post('attivo'); $note = post('note'); @@ -39,6 +42,8 @@ switch (post('op')) { ' prezzo_acquisto='.prepare($prezzo_acquisto).','. ' idiva_vendita='.prepare($idiva_vendita).','. ' gg_garanzia='.prepare($gg_garanzia).','. + ' volume='.prepare($idiva_vendita).','. + ' peso_lordo='.prepare($gg_garanzia).','. ' componente_filename='.prepare($componente_filename).','. ' attivo='.prepare($attivo).', '. ' note='.prepare($note). diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 792a25a8a..a7a4ad5b1 100644 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -108,6 +108,16 @@ if(empty($records[0]['abilita_serial'])){ +
+
+ {[ "type": "number", "label": "", "name": "peso_lordo", "value": "$peso_lordo$", "icon-after": "KG" ]} +
+ +
+ {[ "type": "number", "label": "", "name": "volume", "value": "$volume$", "icon-after": "M3" ]} +
+
+
diff --git a/modules/articoli/plugins/articoli.lotti.php b/modules/articoli/plugins/articoli.lotti.php index d76e6d23a..43f538cdd 100644 --- a/modules/articoli/plugins/articoli.lotti.php +++ b/modules/articoli/plugins/articoli.lotti.php @@ -180,7 +180,7 @@ $rs2 = $dbo->fetchArray($query); '.$rs2[$i]['serial'].''; echo ' - '.Translator::timestampToLocale($rs2[$i]['data']).''; + '.Translator::timestampToLocale($rs2[$i]['created_at']).''; // Ricerca vendite su ddt $query3 = 'SELECT *, ( SELECT descrizione FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS tipo_documento, ( SELECT `dir` FROM dt_tipiddt WHERE id=(SELECT idtipoddt FROM dt_ddt WHERE id=idddt) ) AS `dir`, ( SELECT numero FROM dt_ddt WHERE id=idddt ) AS numero, ( SELECT numero_esterno FROM dt_ddt WHERE id=idddt ) AS numero_esterno, ( SELECT data FROM dt_ddt WHERE id=idddt ) AS data FROM dt_righe_ddt WHERE idarticolo='.prepare($id_record).' AND lotto='.prepare($rs2[$i]['lotto']).' AND serial='.prepare($rs2[$i]['serial']).' AND altro='.prepare($rs2[$i]['altro']); diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 8735dafde..e445ac3ac 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -136,7 +136,7 @@ switch (post('op')) { $iva = ($prezzo - ($sconto * $qta)) / 100 * $rs2[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; - $dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto) VALUES ('.prepare($idcontratto).', '.prepare($idiva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).')'); + $dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto) VALUES ('.prepare($idcontratto).', '.prepare($idiva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).')'); $_SESSION['infos'][] = _('Articolo aggiunto!'); diff --git a/modules/contratti/init.php b/modules/contratti/init.php index 9088b8a7c..c2e384f75 100644 --- a/modules/contratti/init.php +++ b/modules/contratti/init.php @@ -3,5 +3,5 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM co_staticontratti WHERE id=idstato) AS stato, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti) AS matricoleimpianti FROM co_contratti WHERE id='.prepare($id_record).Modules::getAdditionalsQuery($id_module)); + $records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM co_staticontratti WHERE id=idstato) AS stato, (SELECT GROUP_CONCAT(my_impianti_contratti.idimpianto) FROM my_impianti_contratti WHERE idcontratto = co_contratti.id) AS matricoleimpianti FROM co_contratti WHERE id='.prepare($id_record).Modules::getAdditionalsQuery($id_module)); } diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 5e3176f00..f434c2047 100644 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -69,7 +69,7 @@ if ($dir == 'uscita') {
- {[ "type": "select", "label": "", "name": "idsede", "value": "$idsede$", "ajax-source": "sedi" ]} + {[ "type": "select", "label": "", "name": "idsede", "values": "query=SELECT id, CONCAT_WS(', ', nomesede, citta) AS descrizione FROM an_sedi WHERE (idanagrafica='' OR idanagrafica=(SELECT valore FROM zz_impostazioni WHERE nome='Azienda predefinita')) UNION SELECT '0' AS id, 'Sede legale' AS descrizione ORDER BY descrizione", "value": "$idsede$" ]}
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 75bdd45a5..e8409fd6f 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -6,6 +6,8 @@ $rs = $dbo->fetchArray('SELECT co_tipidocumento.descrizione, dir FROM co_tipidoc $dir = $rs[0]['dir']; $tipodoc = $rs[0]['descrizione']; +$_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica']; + ?>
@@ -78,7 +80,7 @@ if ($dir == 'uscita') {
- {[ "type": "select", "label": "", "name": "idagente", "values": "query=SELECT an_anagrafiche_agenti.idagente AS id, ragione_sociale AS descrizione FROM an_anagrafiche_agenti INNER JOIN an_anagrafiche ON an_anagrafiche_agenti.idagente=an_anagrafiche.idanagrafica WHERE an_anagrafiche_agenti.idanagrafica='$idanagrafica$' ORDER BY ragione_sociale", "value": "$idagente$" ]} + {[ "type": "select", "label": "", "name": "idagente", "ajax-source": "agenti", "value": "$idagente_fattura$" ]}
o colli'); ?>", "name": "n_colli", "value": "$n_colli$" ]} + +
+
+ {[ "type": "select", "label": "", "name": "idspedizione", "values": "query=SELECT id, descrizione FROM dt_spedizione ORDER BY descrizione ASC", "value": "$idspedizione$" ]} +
+ +
+ {[ "type": "select", "label": "", "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$"" ]} +
+
+ fetchArray('SELECT *, 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 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_documenti.id='.prepare($id_record)); + $records = $dbo->fetchArray('SELECT *, 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 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_documenti.id='.prepare($id_record)); } diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index 140393f07..27066ca60 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -103,12 +103,20 @@ function aggiungi_scadenza($iddocumento, $pagamento = '') // Ultimo del mese elseif ($rs[$i]['giorno'] < 0) { - $scadenza = date('Y-m-t', strtotime($data.' +'.$rs[$i]['num_giorni'].' day')); + $date = new DateTime($data); + + $add = floor($rs[$i]['num_giorni'] / 30); + for ($c = 0; $c < $add; ++$c) { + $date->modify('last day of next month'); + } // Ultimo del mese più X giorni - if ($rs[$i]['giorno'] != -1) { - $scadenza = date('Y-m-d', strtotime($scadenza.' +'.(-$rs[$i]['giorno'] - 1).' day')); + $giorni = -$rs[$i]['giorno'] - 1; + if ($giorni > 0) { + $date->modify('+'.($giorni).' day'); } + + $scadenza = $date->format('Y-m-d'); } // Giorno preciso del mese diff --git a/modules/ordini/creaddt.php b/modules/ordini/creaddt.php index 3970045a7..034ef4c46 100644 --- a/modules/ordini/creaddt.php +++ b/modules/ordini/creaddt.php @@ -39,7 +39,7 @@ echo " "; echo " "; // Selezione articoli dell'ordine da portare nel ddt -$query = "SELECT * FROM or_ordini INNER JOIN or_righe_ordini ON or_ordini.id=or_righe_ordini.idordine WHERE or_ordini.id='".$id_record."'"; +$query = "SELECT * FROM or_ordini INNER JOIN or_righe_ordini ON or_ordini.id=or_righe_ordini.idordine WHERE or_ordini.id='".$id_record."' GROUP BY idgruppo HAVING qta_rimanente > 0"; $rs = $dbo->fetchArray($query); $n = sizeof($rs); diff --git a/modules/ordini/creafattura.php b/modules/ordini/creafattura.php index 0322a3e34..500f1e39d 100644 --- a/modules/ordini/creafattura.php +++ b/modules/ordini/creafattura.php @@ -39,7 +39,7 @@ echo " \n"; echo " \n"; // Selezione articoli dell'ordine da portare nella fattura -$query = "SELECT * FROM or_ordini INNER JOIN or_righe_ordini ON or_ordini.id=or_righe_ordini.idordine WHERE or_ordini.id='".$id_record."' GROUP BY idgruppo"; +$query = "SELECT * FROM or_ordini INNER JOIN or_righe_ordini ON or_ordini.id=or_righe_ordini.idordine WHERE or_ordini.id='".$id_record."' GROUP BY idgruppo HAVING qta_rimanente > 0"; $rs = $dbo->fetchArray($query); $n = sizeof($rs); diff --git a/templates/pdfgen_variables.php b/templates/pdfgen_variables.php index a9a8159bf..123466408 100644 --- a/templates/pdfgen_variables.php +++ b/templates/pdfgen_variables.php @@ -105,6 +105,20 @@ foreach ($replace as $prefix => $values) { $report = str_replace(array_keys($values), array_values($values), $report); } +// Valori aggiuntivi per la sostituzione +$values = [ + 'dicitura_fissa_fattura' => get_var('Dicitura fissa fattura'), +]; + +foreach ($values as $key => $value) { + $values['$'.$key.'$'] = empty($value) ? $value : $value.'
'; + unset($values[$key]); +} + +// Sostituisce alle variabili del template i valori +$body = str_replace(array_keys($values), array_values($values), $body); +$report = str_replace(array_keys($values), array_values($values), $report); + // Aggiunta del footer standard if (!str_contains($body, '') && !str_contains($report, '')) { $report .= ' diff --git a/update/2_3.sql b/update/2_3.sql index c9832e063..3c959d209 100644 --- a/update/2_3.sql +++ b/update/2_3.sql @@ -110,7 +110,7 @@ INSERT INTO `zz_settings` (`nome`, `valore`, `tipo`, `editable`, `sezione`) VALU -- 2016-12-20 -- Aggiunto peso lordo e volume (per ddt e fatture accompagnatorie) -ALTER TABLE `mg_articoli` ADD `peso_lordo` decimal(12,4) NOT NULL AFTER `gg_garanzia`, ADD `volume` decimal(12,4) NOT NULL AFTER `peso_lordo`; +ALTER TABLE `mg_articoli` ADD `peso_lordo` decimal(12, 4) NOT NULL AFTER `gg_garanzia`, ADD `volume` decimal(12, 4) NOT NULL AFTER `peso_lordo`; -- 2016-02-15 -- Aggiunta sconto percentuale e unitario su fatture e righe, ddt e righe, ordini e righe, preventivi e righe, contratti e righe