diff --git a/editor.php b/editor.php index 205e31dd6..ed14eed50 100755 --- a/editor.php +++ b/editor.php @@ -326,12 +326,25 @@ if ($read_only || !empty($block_edit)) { content_was_modified = false; }); - // questo controllo blocca il modulo vendita al banco, dopo la lettura con barcode, appare il messaggio di conferma - window.onbeforeunload = function(){ + // questo controllo blocca il modulo vendita al banco, dopo la lettura con barcode, appare il messaggio di conferma + window.onbeforeunload = function(e){ if(content_was_modified) { - return 'Uscire senza salvare?'; + var dialogText = "Uscire senza salvare?"; + e.returnValue = dialogText; + $("#main_loading").fadeOut(); + return dialogText; } }; + + window.addEventListener("unload", function(e) { + //console.log(e); + $("#main_loading").show(); + }); + + + + + diff --git a/include/common/riga.php b/include/common/riga.php index 3c0c28c37..57ae2ee93 100644 --- a/include/common/riga.php +++ b/include/common/riga.php @@ -15,6 +15,7 @@ if ($module['name'] == 'Fatture di acquisto' || $module['name'] == 'Fatture di v // Percentuale rivalsa INPS e Percentuale ritenuta d'acconto if ($options['action'] == 'edit') { if ($options['dir'] == 'uscita') { + //Luca S. questi campi non dovrebbero essere impostati a 1 di default, ma solo se il fornitore ha effettivamente rivalsa inps o ritenuta $show_idrivalsainps = 1; $show_idritenutaacconto = 1; $show_calcolo_ritenutaacconto = 1; @@ -45,8 +46,10 @@ if ($module['name'] == 'Fatture di acquisto' || $module['name'] == 'Fatture di v $show_idritenutaacconto = 1; $show_calcolo_ritenutaacconto = 1; + // Luca S. questi campi non dovrebbero essere definiti all'interno della scheda fornitore? $idrivalsainps = ''; $idritenutaacconto = ''; + // questo campo non andrebbe letto da impostazioni $calcolo_ritenutaacconto = setting("Metodologia calcolo ritenuta d'acconto predefinito"); } elseif ($options['dir'] == 'entrata' && $options['op'] == 'addriga' && (setting('Percentuale rivalsa INPS') != '' || setting("Percentuale ritenuta d'acconto") != '')) { if (setting('Percentuale rivalsa INPS') != '') { @@ -117,7 +120,7 @@ if ($module['name'] == 'Fatture di acquisto' || $module['name'] == 'Fatture di v if ($show_calcolo_ritenutaacconto == 1) { echo '
- {[ "type": "select", "label": "'.tr("Calcola ritenuta d'acconto su").'", "name": "calcolo_ritenutaacconto", "value": "'.$calcolo_ritenutaacconto.'", "values": "list=\"Imponibile\":\"Imponibile\", \"Imponibile + rivalsa inps\":\"Imponibile + rivalsa inps\"", "required": "1" ]} + {[ "type": "select", "label": "'.tr("Calcola ritenuta d'acconto su").'", "name": "calcolo_ritenutaacconto", "value": "'.((empty($calcolo_ritenutaacconto)) ? 'Imponibile' : $calcolo_ritenutaacconto).'", "values": "list=\"Imponibile\":\"Imponibile\", \"Imponibile + rivalsa inps\":\"Imponibile + rivalsa inps\"", "required": "1" ]}
'; } diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 5a53467f2..a8a5b64e5 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -69,6 +69,8 @@ switch (post('op')) { case 'update': if (post('id_record') !== null) { + include_once Modules::filepath($module['name'], 'modutil.php'); + $idstatodocumento = post('idstatodocumento'); $idpagamento = post('idpagamento'); @@ -525,7 +527,7 @@ switch (post('op')) { // Calcolo iva $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); $rs = $dbo->fetchArray($query); - $iva = ($prezzo-$sconto) / 100 * $rs[0]['percentuale']; + $iva = ($prezzo - $sconto) / 100 * $rs[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; $desc_iva = $rs[0]['descrizione']; @@ -590,8 +592,16 @@ switch (post('op')) { } } else { // Aggiunta riga preventivo sul documento - $query = 'INSERT INTO co_righe_documenti(iddocumento, idpreventivo, idconto, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, `order`) VALUES('.prepare($id_record).', '.prepare($idpreventivo).', '.prepare($idconto).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(setting("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(setting('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $query = 'INSERT INTO co_righe_documenti(iddocumento, idpreventivo, is_preventivo, idconto, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, `order`) VALUES('.prepare($id_record).', '.prepare($idpreventivo).', "1", '.prepare($idconto).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(setting("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(setting('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $dbo->query($query); + + // Scarico gli articoli nel preventivo + $righe = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE idpreventivo='.prepare($idpreventivo)); + foreach ($righe as $key => $riga) { + if (!empty($riga['idarticolo'])) { + add_movimento_magazzino($riga['idarticolo'], -$riga['qta'], ['iddocumento' => $id_record]); + } + } } // Aggiorno lo stato degli interventi collegati al preventivo se ce ne sono @@ -653,7 +663,7 @@ switch (post('op')) { // Calcolo iva $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); $rs = $dbo->fetchArray($query); - $iva = ($prezzo-$sconto) / 100 * $rs[0]['percentuale']; + $iva = ($prezzo - $sconto) / 100 * $rs[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; $desc_iva = $rs[0]['descrizione']; @@ -672,12 +682,20 @@ switch (post('op')) { } // Aggiunta riga contratto sul documento - $query = 'INSERT INTO co_righe_documenti(iddocumento, idcontratto, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(setting('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(setting("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(setting("Metodologia calcolo ritenuta d'acconto predefinito")).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $query = 'INSERT INTO co_righe_documenti(iddocumento, idcontratto, is_contratto, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, calcolo_ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idcontratto).', "1", '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', 1, ".prepare(setting('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(setting("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', '.prepare(setting("Metodologia calcolo ritenuta d'acconto predefinito")).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; if ($dbo->query($query)) { flash()->info(tr('Contratto _NUM_ aggiunto!', [ '_NUM_' => $numero, ])); + //Scalo le qta degli articoli nel contratto + $righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto)); + foreach ($righe as $key => $riga) { + if (!empty($riga['idarticolo'])) { + add_movimento_magazzino($riga['idarticolo'], -$riga['qta'], ['iddocumento' => $id_record]); + } + } + // Aggiorno il budget sul contratto con l'importo inserito in fattura e imposto lo stato del contratto "In attesa di pagamento" (se selezionato) if ($aggiorna_budget) { $dbo->query('UPDATE co_contratti SET budget='.prepare($prezzo).' WHERE id='.prepare($idcontratto)); @@ -703,9 +721,9 @@ switch (post('op')) { $idiva = post('idiva'); $idconto = post('idconto'); $idum = post('um'); - $idrivalsainps = post('idrivalsainps'); - $idritenutaacconto = post('idritenutaacconto'); - $calcolo_ritenutaacconto = post('calcolo_ritenutaacconto'); + $idrivalsainps = post('idrivalsainps'); + $idritenutaacconto = post('idritenutaacconto'); + $calcolo_ritenutaacconto = post('calcolo_ritenutaacconto'); $qta = post('qta'); if (!empty($record['is_reversed'])) { @@ -726,7 +744,7 @@ switch (post('op')) { add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva, $qta, $prezzo * $qta, $sconto, $sconto_unitario, $tipo_sconto, '0', $idconto, $idum, $idrivalsainps, $idritenutaacconto, $calcolo_ritenutaacconto); - ricalcola_costiagg_fattura($id_record); + ricalcola_costiagg_fattura($id_record); flash()->info(tr('Articolo aggiunto!')); } @@ -1253,26 +1271,28 @@ switch (post('op')) { $idriga = post('idriga'); // Lettura preventivi collegati - $query = 'SELECT iddocumento, idpreventivo, idarticolo FROM co_righe_documenti WHERE id='.prepare($idriga); + $query = 'SELECT iddocumento, idpreventivo, is_preventivo, idarticolo FROM co_righe_documenti WHERE id='.prepare($idriga); $rsp = $dbo->fetchArray($query); $id_record = $rsp[0]['iddocumento']; $idpreventivo = $rsp[0]['idpreventivo']; - $idarticolo = $rsp[0]['idarticolo']; - - //preventivo su unica riga, perdo il riferimento dell'articolo quindi lo vado a leggere da co_righe_preventivi - if (empty($idarticolo)){ - //rimetto a magazzino gli articoli collegati al preventivo - $rsa = $dbo->fetchArray('SELECT idarticolo, qta FROM co_righe_preventivi WHERE idpreventivo = '.prepare($idpreventivo)); - for ($i = 0; $i < sizeof($rsa); ++$i) { - if (!empty($rsa[$i]['idarticolo'])) - add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_record]); - //rimuovi_articolo_dafattura($rsa[$i]['idarticolo'], $id_record, $idriga); - } - }else{ - $rs5 = $dbo->fetchArray('SELECT idarticolo, id, qta FROM co_righe_documenti WHERE id = '.prepare($idriga).' AND idintervento IS NULL'); - rimuovi_articolo_dafattura($rs5[0]['idarticolo'], $id_record, $idriga); - } + $is_preventivo = $rsp[0]['is_preventivo']; + $idarticolo = $rsp[0]['idarticolo']; + //preventivo su unica riga, perdo il riferimento dell'articolo quindi lo vado a leggere da co_righe_preventivi + if (empty($idarticolo) && $is_preventivo) { + //rimetto a magazzino gli articoli collegati al preventivo + $rsa = $dbo->fetchArray('SELECT idarticolo, qta FROM co_righe_preventivi WHERE idpreventivo = '.prepare($idpreventivo)); + for ($i = 0; $i < sizeof($rsa); ++$i) { + if (!empty($rsa[$i]['idarticolo'])) { + add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_record]); + } + } + } else { + if (!empty($idarticolo)) { + $rs5 = $dbo->fetchArray('SELECT idarticolo, id, qta FROM co_righe_documenti WHERE id = '.prepare($idriga).' AND idintervento IS NULL'); + rimuovi_articolo_dafattura($rs5[0]['idarticolo'], $id_record, $idriga); + } + } $query = 'DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga); @@ -1319,7 +1339,7 @@ switch (post('op')) { $idriga = post('idriga'); // Lettura contratti collegati - $query = 'SELECT iddocumento, idcontratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idcontratto IS NOT NULL AND NOT idcontratto=0'; + $query = 'SELECT iddocumento, idcontratto, is_contratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idcontratto IS NOT NULL AND NOT idcontratto=0'; $rsp = $dbo->fetchArray($query); $id_record = $rsp[0]['iddocumento']; $idcontratto = $rsp[0]['idcontratto']; @@ -1351,6 +1371,14 @@ switch (post('op')) { } } + //Riporto a magazzino gli articoli nelle righe del contratto + $rsa = $dbo->fetchArray('SELECT idarticolo, qta FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto)); + for ($i = 0; $i < sizeof($rsa); ++$i) { + if (!empty($rsa[$i]['idarticolo'])) { + add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_record]); + } + } + // Ricalcolo inps, ritenuta e bollo if ($dir == 'entrata') { ricalcola_costiagg_fattura($id_record); diff --git a/modules/fatture/add_ddt.php b/modules/fatture/add_ddt.php index efe63d9a3..a760a1ab2 100644 --- a/modules/fatture/add_ddt.php +++ b/modules/fatture/add_ddt.php @@ -6,15 +6,17 @@ $module = Modules::get($id_module); if ($module['name'] == 'Fatture di vendita') { $dir = 'entrata'; + $module_origin = 'Ddt di vendita'; } else { $dir = 'uscita'; + $module_origin = 'Ddt di acquisto'; } $info = $dbo->fetchOne('SELECT * FROM co_documenti WHERE id='.prepare($id_record)); $numero = ($info['numero_esterno'] != '') ? $info['numero_esterno'] : $info['numero']; $idanagrafica = $info['idanagrafica']; -// Preventivo +// Ddt echo '
@@ -36,6 +38,6 @@ echo ' $('#id_ddt').change( function(){ $('#righeddt').html('Caricamento in corso...'); - $('#righeddt').load(globals.rootdir + '/modules/fatture/crea_documento.php?id_module=' + + '&id_record=' + $(this).find('option:selected').val() + '&documento=fattura&op=add_ddt&iddocumento=' + globals.id_record); + $('#righeddt').load(globals.rootdir + '/modules/fatture/crea_documento.php?id_module=' + + '&id_record=' + $(this).find('option:selected').val() + '&documento=fattura&op=add_ddt&iddocumento=' + globals.id_record); }); diff --git a/modules/fatture/add_ordine.php b/modules/fatture/add_ordine.php index 6c8e7ba7d..20e959962 100644 --- a/modules/fatture/add_ordine.php +++ b/modules/fatture/add_ordine.php @@ -16,7 +16,7 @@ $info = $dbo->fetchOne('SELECT * FROM co_documenti WHERE id='.prepare($id_record $numero = ($info['numero_esterno'] != '') ? $info['numero_esterno'] : $info['numero']; $idanagrafica = $info['idanagrafica']; -// Preventivo +// Ordine echo '
diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index ccbbbc8cf..78d4f99d9 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -278,36 +278,41 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') { } echo ' - + '; // Lettura preventivi accettati, in attesa di conferma o in lavorazione $prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($record['idanagrafica'])." AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione='Accettato' OR descrizione='In lavorazione' OR descrizione='In attesa di conferma')"; $preventivi = $dbo->fetchArray($prev_query)[0]['tot']; echo ' - + '; // Lettura contratti accettati, in attesa di conferma o in lavorazione $contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($record['idanagrafica']).' AND id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE NOT idcontratto=NULL) AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND NOT EXISTS (SELECT id FROM co_righe_documenti WHERE co_righe_documenti.idcontratto = co_contratti.id)'; $contratti = $dbo->fetchArray($contr_query)[0]['tot']; echo ' - - +
+ Contratto - '; - - // Lettura ddt - $ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; - $ddt = $dbo->fetchArray($ddt_query)[0]['tot']; - echo ' - - Ddt - '; + +
'; } + // Lettura ddt + $ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)'; + $ddt = $dbo->fetchArray($ddt_query)[0]['tot']; + echo ' + + Ddt + '; + // Lettura ordini $ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Bozza\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)'; $ordini = $dbo->fetchArray($ordini_query)[0]['tot']; @@ -429,3 +434,86 @@ if (!empty($operations)) { + + + + + + +$( ".btn-sm[data-toggle=\"tooltip\"]" ).each(function() { + + $(this).on("click", function(){ + + form = $("#edit-form"); + btn = $(this); + + prev_html = btn.html(); + prev_class = btn.attr("class"); + + btn.html(" Attendere..."); + btn.addClass("btn-warning"); + btn.prop("disabled", true); + + function restore_btn(btn, prev_html, prev_class){ + btn.attr("class", ""); + btn.addClass(prev_class); + btn.html(prev_html); + btn.prop("disabled", false); + } + + //Procedo al salvataggio solo se tutti i campi obbligatori sono compilati, altimenti mostro avviso + if (form.parsley().isValid()){ + + content_was_modified = false; + + form.find("input:disabled, select:disabled").removeAttr("disabled"); + + $.ajax({ + url: "'.ROOTDIR.'/modules/fatture/actions.php?id_module=" + globals.id_module , + cache: false, + type: "POST", + processData: false, + dataType : "html", + data: form.serialize(), + success: function(data) { + $("#main_loading").fadeOut(); + + restore_btn(btn, prev_html, prev_class); + }, + error: function(data) { + $("#main_loading").fadeOut(); + + swal("'.tr('Errore').'", "'.tr('Errore durante il salvataggio').'", "error"); + session_set ("errors,0", 0, 1); + + restore_btn(btn, prev_html, prev_class); + } + }); + + }else{ + + swal({ + type: "error", + text: "'.tr('Alcuni campi obbligatori non sono stati compilati correttamente.').'", + title: "'.tr('Errore').'", + onClose: hide_popup + }).then(function () { + + }); + + function hide_popup(){ + $("#bs-popup").modal("hide"); + + session_set ("errors,0", 0, 1); + form.parsley().validate(); + } + + restore_btn(btn, prev_html, prev_class); + } + + }); +}); +'; +?> diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index aa0a25a91..f6c1eb2df 100644 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -866,6 +866,26 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir) $dbo->attach('mg_prodotti', ['id_riga_documento' => $riga['ref_riga_documento'], 'dir' => $dir, 'id_articolo' => $riga['idarticolo']], ['serial' => $serials]); } } + + // Rimozione articoli collegati ad un preventivo importato con riga unica + if(empty($riga['idarticolo']) && $riga['is_preventivo']){ + //rimetto a magazzino gli articoli collegati al preventivo + $rsa = $dbo->fetchArray('SELECT idarticolo, qta FROM co_righe_preventivi WHERE idpreventivo = '.prepare($riga['idpreventivo'])); + for ($i = 0; $i < sizeof($rsa); ++$i) { + if (!empty($rsa[$i]['idarticolo'])) + add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_documento]); + } + } + + // Rimozione articoli collegati ad un contratto importato con riga unica + if(empty($riga['idarticolo']) && $riga['is_contratto']){ + //rimetto a magazzino gli articoli collegati al contratto + $rsa = $dbo->fetchArray('SELECT idarticolo, qta FROM co_righe_contratti WHERE idcontratto = '.prepare($riga['idcontratto'])); + for ($i = 0; $i < sizeof($rsa); ++$i) { + if (!empty($rsa[$i]['idarticolo'])) + add_movimento_magazzino($rsa[$i]['idarticolo'], $rsa[$i]['qta'], ['iddocumento' => $id_documento]); + } + } // Aggiorno lo stato dell'ordine if (!empty($riga['idordine']) && setting('Cambia automaticamente stato ordini fatturati')) { diff --git a/modules/import/add.php b/modules/import/add.php index 844020211..240a09383 100644 --- a/modules/import/add.php +++ b/modules/import/add.php @@ -55,7 +55,7 @@ $( "#example" ).click(function(event) { data: {op: 'example', module: module}, success: function(data){ window.location = file; - $('#main_loading').hide(); + $('#main_loading').fadeOut(); return false; } }); diff --git a/modules/ordini/buttons.php b/modules/ordini/buttons.php index 721d9f5e7..420de7749 100644 --- a/modules/ordini/buttons.php +++ b/modules/ordini/buttons.php @@ -2,7 +2,7 @@ include_once __DIR__.'/../../core.php'; -if (!in_array($record['stato'], ['Evaso', 'Fatturato'])) { +if (!in_array($record['stato'], ['Bozza', 'Evaso', 'Fatturato'])) { echo ' '; } diff --git a/templates/base/header.php b/templates/base/header.php index bc088b17b..5c7429c4f 100644 --- a/templates/base/header.php +++ b/templates/base/header.php @@ -23,5 +23,6 @@ return '

'.(!empty($f_capsoc) ? tr('Cap.Soc.').': '.$f_capsoc : '').'

'.(!empty($f_telefono) ? tr('Tel').': '.$f_telefono : '').'

'.(!empty($f_email) ? tr('Email').': '.$f_email : '').'

+

'.(!empty($f_sitoweb) ? tr('Web').': '.$f_sitoweb : '').'

'; diff --git a/templates/registro_iva/pdfgen.registro_iva.php b/templates/registro_iva/pdfgen.registro_iva.php index fdf75035d..8ba3b47aa 100644 --- a/templates/registro_iva/pdfgen.registro_iva.php +++ b/templates/registro_iva/pdfgen.registro_iva.php @@ -44,7 +44,7 @@ switch ($periodo[0]) { break; }*/ -$query = 'SELECT *, SUM(subtotale-co_righe_documenti.sconto) AS subtotale, SUM(iva) AS iva, (SELECT ragione_sociale FROM an_anagrafiche WHERE an_anagrafiche.idanagrafica=co_documenti.idanagrafica) AS ragione_sociale FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id=co_righe_documenti.iddocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE dir = '.prepare($dir).' AND is_descrizione = 0 AND co_documenti.data >= '.prepare($date_start).' AND co_documenti.data <= '.prepare($date_end).' GROUP BY co_documenti.id, co_righe_documenti.idiva ORDER BY co_documenti.data'; +$query = 'SELECT *, SUM(subtotale-co_righe_documenti.sconto) AS subtotale, SUM(iva) AS iva, (SELECT ragione_sociale FROM an_anagrafiche WHERE an_anagrafiche.idanagrafica=co_documenti.idanagrafica) AS ragione_sociale FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id=co_righe_documenti.iddocumento INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE dir = '.prepare($dir).' AND idstatodocumento NOT IN (SELECT id FROM co_statidocumento WHERE descrizione="Bozza" OR descrizione="Annullata") AND is_descrizione = 0 AND co_documenti.data >= '.prepare($date_start).' AND co_documenti.data <= '.prepare($date_end).' GROUP BY co_documenti.id, co_righe_documenti.idiva ORDER BY co_documenti.data'; $rs = $dbo->fetchArray($query); if ('entrata' == $dir) { @@ -61,12 +61,14 @@ if ('entrata' == $dir) { $body .= " - + - + + - + + @@ -76,25 +78,21 @@ $body .= " for ($i = 0; $i < sizeof($rs); ++$i) { $body .= ''; + if ($rs[$i]['numero'] == $rs[$i - 1]['numero']) { $body .= " "; $body .= " "; + $body .= " "; + } else { - $body .= " '; + $body .= " '; + $body .= " '; $body .= " '; } - if ('entrata' == $dir) { - $body .= "'; - } elseif ('uscita' == $dir) { - $body .= "'; - } + $body .= ""; + + $body .= " '; $body .= " '; $body .= " '; $body .= " '; diff --git a/update/2_4_1.sql b/update/2_4_1.sql index 675fb58d7..fb671c489 100644 --- a/update/2_4_1.sql +++ b/update/2_4_1.sql @@ -146,10 +146,10 @@ ALTER TABLE `in_tipiintervento` ADD `tempo_standard` DECIMAL(10,2) NULL AFTER ` UPDATE `zz_widgets` SET `text` = 'Promemoria contratti da pianificare' WHERE `zz_widgets`.`name` = 'Interventi da pianificare'; -- Fix arrotondamenti per fatture di vendita -UPDATE `zz_views` SET `query` = '(SELECT SUM(round(subtotale,2) - round(sconto,2) + round(iva,2) + round(rivalsainps,2) - round(ritenutaacconto,2)) FROM co_righe_documenti WHERE co_righe_documenti.iddocumento=co_documenti.id GROUP BY iddocumento) + round(bollo,2) + round(iva_rivalsainps,2)' WHERE `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita') AND name = 'Totale'; +--UPDATE `zz_views` SET `query` = '(SELECT SUM(round(subtotale,2) - round(sconto,2) + round(iva,2) + round(rivalsainps,2) - round(ritenutaacconto,2)) FROM co_righe_documenti WHERE co_righe_documenti.iddocumento=co_documenti.id GROUP BY iddocumento) + round(bollo,2) + round(iva_rivalsainps,2)' WHERE `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita') AND name = 'Totale'; -- Fix arrotondamenti per fatture di acquisto -UPDATE `zz_views` SET `query` = '(SELECT SUM(round(subtotale,2) - round(sconto,2) + round(iva,2) + round(rivalsainps,2) - round(ritenutaacconto,2)) FROM co_righe_documenti WHERE co_righe_documenti.iddocumento=co_documenti.id GROUP BY iddocumento ) + round(bollo,2) + round(iva_rivalsainps,2)' WHERE `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto') AND name = 'Totale'; +--UPDATE `zz_views` SET `query` = '(SELECT SUM(round(subtotale,2) - round(sconto,2) + round(iva,2) + round(rivalsainps,2) - round(ritenutaacconto,2)) FROM co_righe_documenti WHERE co_righe_documenti.iddocumento=co_documenti.id GROUP BY iddocumento ) + round(bollo,2) + round(iva_rivalsainps,2)' WHERE `zz_views`.`id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto') AND name = 'Totale'; -- Aggiunta impostazioni per cambio stato automatici INSERT INTO `zz_settings` (`idimpostazione`, `nome`, `valore`, `tipo`, `editable`, `sezione`) VALUES (NULL, 'Cambia automaticamente stato ddt fatturati', '1', 'boolean', '1', 'Ddt'); @@ -461,3 +461,6 @@ UPDATE `zz_settings` SET `tipo` = REPLACE( -- Fix id delle Banche UPDATE `zz_views` SET `enabled` = 0 WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Banche') AND `name` = 'id'; + +-- Aggiunta campi per specificare se la riga importata è un import unico di pù righe +ALTER TABLE `co_righe_documenti` ADD `is_preventivo` TINYINT(1) NOT NULL AFTER `is_descrizione`, ADD `is_contratto` TINYINT(1) NOT NULL AFTER `is_preventivo`;
N° doc.No prot.No doc. DataCausale
Ragione sociale
".(($dir=='entrata') ? 'Cliente': 'Fornitore')."Causale Aliquota Imponibile Imposta
".(!empty($rs[$i]['numero_esterno']) ? $rs[$i]['numero_esterno'] : $rs[$i]['numero']).'".$rs[$i]['numero'].'".$rs[$i]['numero_esterno'].'".date('d/m/Y', strtotime($rs[$i]['data'])).' - Fattura di vendita
- ".$rs[$i]['ragione_sociale'].' -
- Fattura di acquisto
- ".$rs[$i]['ragione_sociale'].' -
".$rs[$i]['ragione_sociale']."".(($dir=='entrata') ? 'Fattura di vendita': 'Fattura di acquisto').'".$rs[$i]['desc_iva'].'".Translator::numberToLocale($rs[$i]['subtotale']).' €".Translator::numberToLocale($rs[$i]['iva']).' €