1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-03-10 08:10:14 +01:00
This commit is contained in:
Matteo 2018-10-30 10:27:44 +01:00
parent 6b677920d7
commit 7da7a0cf5e
18 changed files with 243 additions and 143 deletions

View File

@ -254,20 +254,16 @@ switch (post('op')) {
} }
break; break;
case 'update_position': case 'update_position':
$start = filter('start'); $orders = explode( ",", $_POST['order'] );
$end = filter('end'); $order = 0;
$id = filter('id');
if ($start > $end) { foreach( $orders as $idriga ){
$dbo->query('UPDATE `co_righe_contratti` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idcontratto`='.prepare($id_record)); $dbo->query('UPDATE `co_righe_contratti` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$dbo->query('UPDATE `co_righe_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id)); $order++;
} elseif ($end != $start) { }
$dbo->query('UPDATE `co_righe_contratti` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idcontratto`='.prepare($id_record));
$dbo->query('UPDATE `co_righe_contratti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
}
break; break;
// eliminazione contratto // eliminazione contratto
case 'delete': case 'delete':

View File

@ -233,17 +233,19 @@ $(document).ready(function(){
cursor: "move", cursor: "move",
dropOnEmpty: true, dropOnEmpty: true,
scroll: true, scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) { update: function(event, ui) {
var order = "";
$(".table tr[data-id]").each( function(){
order += ","+$(this).data("id");
});
order = order.replace(/^,/, "");
$.post("'.$rootdir.'/actions.php", { $.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"), id: ui.item.data("id"),
id_module: '.$id_module.', id_module: '.$id_module.',
id_record: '.$id_record.', id_record: '.$id_record.',
op: "update_position", op: "update_position",
start: ui.item.data("start"), order: order,
end: ui.item.index()
}); });
} }
}); });

View File

@ -452,12 +452,14 @@ switch (post('op')) {
} }
for ($i = 0; $i < sizeof($rs); ++$i) { for ($i = 0; $i < sizeof($rs); ++$i) {
rimuovi_articolo_daddt($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']); if($rs[$i]['idarticolo']){
rimuovi_articolo_daddt($rs[$i]['idarticolo'], $id_record, $rs[$i]['id']);
}
} }
// Se delle righe sono state create da un ordine, devo riportare la quantità evasa nella tabella degli ordini // Se delle righe sono state create da un ordine, devo riportare la quantità evasa nella tabella degli ordini
// al valore di prima, riaggiungendo la quantità che sto togliendo // al valore di prima, riaggiungendo la quantità che sto togliendo
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idiva FROM dt_righe_ddt WHERE idddt='.prepare($id_record)); $rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idiva FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idarticolo="0"');
// Rimpiazzo la quantità negli ordini // Rimpiazzo la quantità negli ordini
for ($i = 0; $i < sizeof($rs); ++$i) { for ($i = 0; $i < sizeof($rs); ++$i) {
@ -494,20 +496,16 @@ switch (post('op')) {
break; break;
case 'update_position': case 'update_position':
$start = filter('start'); $orders = explode( ",", $_POST['order'] );
$end = filter('end'); $order = 0;
$id = filter('id');
if ($start > $end) { foreach( $orders as $idriga ){
$dbo->query('UPDATE `dt_righe_ddt` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idddt`='.prepare($id_record)); $dbo->query('UPDATE `dt_righe_ddt` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$dbo->query('UPDATE `dt_righe_ddt` SET `order`='.prepare($end).' WHERE id='.prepare($id)); $order++;
} elseif ($end != $start) { }
$dbo->query('UPDATE `dt_righe_ddt` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idddt`='.prepare($id_record));
$dbo->query('UPDATE `dt_righe_ddt` SET `order`='.prepare($end).' WHERE id='.prepare($id));
}
break; break;
// aggiungi righe da ordine // aggiungi righe da ordine
case 'add_ordine': case 'add_ordine':

View File

@ -369,17 +369,19 @@ $(document).ready(function(){
cursor: "move", cursor: "move",
dropOnEmpty: true, dropOnEmpty: true,
scroll: true, scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) { update: function(event, ui) {
var order = "";
$(".table tr[data-id]").each( function(){
order += ","+$(this).data("id");
});
order = order.replace(/^,/, "");
$.post("'.$rootdir.'/actions.php", { $.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"), id: ui.item.data("id"),
id_module: '.$id_module.', id_module: '.$id_module.',
id_record: '.$id_record.', id_record: '.$id_record.',
op: "update_position", op: "update_position",
start: ui.item.data("start"), order: order,
end: ui.item.index()
}); });
} }
}); });

View File

@ -445,12 +445,55 @@ switch (post('op')) {
$ritenutaacconto = ($prezzo - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; $ritenutaacconto = ($prezzo - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
} }
// Aggiunta riga contratto sul documento if (!empty(post('import'))) {
$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).'))'; // Replicazione delle righe del contratto sul documento
if ($dbo->query($query)) { $righe = $dbo->fetchArray('SELECT idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, IFNULL( (SELECT mg_articoli.abilita_serial FROM mg_articoli WHERE mg_articoli.id=co_righe_contratti.idarticolo), 0 ) AS abilita_serial FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
flash()->info(tr('Contratto _NUM_ aggiunto!', [
'_NUM_' => $numero, foreach ($righe as $key => $riga) {
])); $subtot = $riga['subtotale'];
$sconto = $riga['sconto'];
// Ricalcolo ritenuta per ogni singola riga
if (setting("Metodologia calcolo ritenuta d'acconto predefinito") == 'Imponibile') {
$ritenutaacconto = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
} else {
$ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
}
$dbo->insert('co_righe_documenti', [
'iddocumento' => $id_record,
'idcontratto' => $idcontratto,
'idconto' => $idconto,
'idarticolo' => $riga['idarticolo'],
'idiva' => $riga['idiva'],
'desc_iva' => $riga['desc_iva'],
'iva' => $riga['iva'],
'iva_indetraibile' => $riga['iva_indetraibile'],
'descrizione' => str_replace('SCONTO', 'SCONTO '.$descrizione, $riga['descrizione']),
'subtotale' => $riga['subtotale'],
'um' => $riga['um'],
'qta' => $riga['qta'],
'sconto' => $riga['sconto'],
'sconto_unitario' => $riga['sconto_unitario'],
'tipo_sconto' => $riga['tipo_sconto'],
'order' => orderValue('co_righe_documenti', 'iddocumento', $id_record),
'idritenutaacconto' => setting("Percentuale ritenuta d'acconto"),
'ritenutaacconto' => $ritenutaacconto,
'idrivalsainps' => setting('Percentuale rivalsa INPS'),
'rivalsainps' => $rivalsainps,
'abilita_serial' => $riga['abilita_serial'],
'calcolo_ritenutaacconto' => setting("Metodologia calcolo ritenuta d'acconto predefinito"),
]);
if (!empty($riga['idarticolo'])) {
add_movimento_magazzino($riga['idarticolo'], -$riga['qta'], ['iddocumento' => $id_record]);
}
}
}else{
// Aggiunta riga contratto sul documento
$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).'))';
$dbo->query($query);
// Scalo le qta degli articoli nel contratto // Scalo le qta degli articoli nel contratto
$righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto)); $righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
@ -459,20 +502,32 @@ switch (post('op')) {
add_movimento_magazzino($riga['idarticolo'], -$riga['qta'], ['iddocumento' => $id_record]); 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) flash()->info(tr('Contratto _NUM_ aggiunto!', [
if ($aggiorna_budget) { '_NUM_' => $numero,
$dbo->query('UPDATE co_contratti SET budget='.prepare($prezzo).' WHERE id='.prepare($idcontratto)); ]));
}
$dbo->query("UPDATE co_contratti SET idstato=(SELECT id FROM co_staticontratti WHERE descrizione='In attesa di pagamento') WHERE id=".prepare($idcontratto)); // Aggiorno lo stato degli interventi collegati al contratto se ce ne sono
$query2 = 'SELECT idcontratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND NOT idcontratto=0 AND idcontratto IS NOT NULL';
$rs2 = $dbo->fetchArray($query2);
// Ricalcolo inps, ritenuta e bollo for ($j = 0; $j < sizeof($rs2); ++$j) {
if ($dir == 'entrata') { $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id_contratto=".prepare($rs2[$j]['idcontratto']));
ricalcola_costiagg_fattura($id_record); }
} else {
ricalcola_costiagg_fattura($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));
}
$dbo->query("UPDATE co_contratti SET idstato=(SELECT id FROM co_staticontratti WHERE descrizione='In attesa di pagamento') WHERE id=".prepare($idcontratto));
// Ricalcolo inps, ritenuta e bollo
if ($dir == 'entrata') {
ricalcola_costiagg_fattura($id_record);
} else {
ricalcola_costiagg_fattura($id_record);
} }
} }
break; break;
@ -649,6 +704,9 @@ switch (post('op')) {
$rs = $dbo->fetchArray($q); $rs = $dbo->fetchArray($q);
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
$qdesc = 'SELECT is_descrizione FROM dt_righe_ddt WHERE id='.prepare($idrigaddt);
$rsdesc = $dbo->fetchArray($qdesc);
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza // Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
if (!empty($idarticolo)) { if (!empty($idarticolo)) {
$idiva_acquisto = $idiva; $idiva_acquisto = $idiva;
@ -663,8 +721,8 @@ switch (post('op')) {
} }
// Inserimento riga normale // Inserimento riga normale
elseif ($qta != 0) { elseif ($qta != 0 || $rsdesc[0]['is_descrizione']==1) {
$query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, idddt, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idddt).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, is_descrizione, idddt, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare( $rsdesc[0]['is_descrizione'] ).', '.prepare($idddt).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))';
$dbo->query($query); $dbo->query($query);
} }
@ -730,6 +788,9 @@ switch (post('op')) {
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$desc_iva = $rs[0]['descrizione']; $desc_iva = $rs[0]['descrizione'];
$qdesc = 'SELECT is_descrizione FROM dt_righe_ddt WHERE id='.prepare($idriga);
$rsdesc = $dbo->fetchArray($qdesc);
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza // Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
if (!empty($idarticolo)) { if (!empty($idarticolo)) {
$idiva_acquisto = $idiva; $idiva_acquisto = $idiva;
@ -747,8 +808,8 @@ switch (post('op')) {
} }
// Inserimento riga normale // Inserimento riga normale
elseif ($qta != 0) { elseif ($qta != 0 || $rsdesc[0]['is_descrizione']==1) {
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idordine).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'); $dbo->query('INSERT INTO co_righe_documenti(iddocumento, idarticolo, idordine, idiva, desc_iva, iva, iva_indetraibile, descrizione, is_descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idordine).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($rdesc[0]['is_descrizione']).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($um).', '.prepare($qta).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
} }
// Scalo la quantità dall'ordine // Scalo la quantità dall'ordine
@ -765,6 +826,10 @@ switch (post('op')) {
case 'fattura_da_contratto': case 'fattura_da_contratto':
$idcontratto = post('id_record'); $idcontratto = post('id_record');
$data = date('Y-m-d'); $data = date('Y-m-d');
$rs_segment = $dbo->fetchArray("SELECT * FROM zz_segments WHERE id_module=".prepare($id_module)." AND predefined='1'");
$id_segment = $rs_segment[0]['id'];
$numero = get_new_numerofattura($data); $numero = get_new_numerofattura($data);
$numero_esterno = get_new_numerosecondariofattura($data); $numero_esterno = get_new_numerosecondariofattura($data);
$tipo_documento = 'Fattura immediata di vendita'; $tipo_documento = 'Fattura immediata di vendita';
@ -774,8 +839,6 @@ switch (post('op')) {
$idanagrafica = $rs_contratto[0]['idanagrafica']; $idanagrafica = $rs_contratto[0]['idanagrafica'];
$idpagamento = $rs_contratto[0]['idpagamento']; $idpagamento = $rs_contratto[0]['idpagamento'];
$idconto = setting('Conto predefinito fatture di vendita'); $idconto = setting('Conto predefinito fatture di vendita');
$rs_segment = $dbo->fetchArray('SELECT * FROM zz_segments WHERE id_module='.prepare($id_module)." AND predefined='1'");
$id_segment = $rs_segment[0]['id'];
// Creazione nuova fattura // Creazione nuova fattura
$dbo->query('INSERT INTO co_documenti(numero, numero_esterno, data, idanagrafica, idtipodocumento, idstatodocumento, idpagamento, idconto, id_segment) VALUES('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($data).', '.prepare($idanagrafica).', (SELECT id FROM co_tipidocumento WHERE descrizione='.prepare($tipo_documento)."), (SELECT id FROM co_statidocumento WHERE descrizione='Bozza'), ".prepare($idpagamento).', '.prepare($idconto).','.prepare($id_segment).')'); $dbo->query('INSERT INTO co_documenti(numero, numero_esterno, data, idanagrafica, idtipodocumento, idstatodocumento, idpagamento, idconto, id_segment) VALUES('.prepare($numero).', '.prepare($numero_esterno).', '.prepare($data).', '.prepare($idanagrafica).', (SELECT id FROM co_tipidocumento WHERE descrizione='.prepare($tipo_documento)."), (SELECT id FROM co_statidocumento WHERE descrizione='Bozza'), ".prepare($idpagamento).', '.prepare($idconto).','.prepare($id_segment).')');
@ -785,7 +848,15 @@ switch (post('op')) {
$rs_righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto)); $rs_righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
for ($i = 0; $i < sizeof($rs_righe); ++$i) { for ($i = 0; $i < sizeof($rs_righe); ++$i) {
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idcontratto, is_descrizione, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, sconto_globale, idiva, desc_iva, iva, iva_indetraibile, um, qta, `order`) values('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($rs_righe[$i]['is_descrizione']).', '.prepare($rs_righe[$i]['descrizione']).', '.prepare($rs_righe[$i]['subtotale']).', '.prepare($rs_righe[$i]['sconto']).', '.prepare($rs_righe[$i]['sconto_unitario']).', '.prepare($rs_righe[$i]['tipo_sconto']).', '.prepare($rs_righe[$i]['sconto_globale']).', '.prepare($rs_righe[$i]['idiva']).', '.prepare($rs_righe[$i]['desc_iva']).', '.prepare($rs_righe[$i]['iva']).', '.prepare($rs_righe[$i]['iva_indetraibile']).', '.prepare($rs_righe[$i]['um']).', '.prepare($rs_righe[$i]['qta']).', '.prepare($rs_righe[$i]['order']).')'); // Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
if($rs_righe[$i]['idarticolo']!=0){
add_articolo_infattura($id_record, $rs_righe[$i]['idarticolo'], $rs_righe[$i]['descrizione'], $rs_righe[$i]['idiva'], $rs_righe[$i]['qta'], $rs_righe[$i]['subtotale'], $rs_righe[$i]['sconto'], $rs_righe[$i]['sconto_unitario'], $rs_righe[$i]['tipo_sconto']);
}
// Inserimento riga normale
else{
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, idcontratto, is_descrizione, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, sconto_globale, idiva, desc_iva, iva, iva_indetraibile, um, qta, `order`) values('.prepare($id_record).', '.prepare($idcontratto).', '.prepare($rs_righe[$i]['is_descrizione']).', '.prepare($rs_righe[$i]['descrizione']).', '.prepare($rs_righe[$i]['subtotale']).', '.prepare($rs_righe[$i]['sconto']).', '.prepare($rs_righe[$i]['sconto_unitario']).', '.prepare($rs_righe[$i]['tipo_sconto']).', '.prepare($rs_righe[$i]['sconto_globale']).', '.prepare($rs_righe[$i]['idiva']).', '.prepare($rs_righe[$i]['desc_iva']).', '.prepare($rs_righe[$i]['iva']).', '.prepare($rs_righe[$i]['iva_indetraibile']).', '.prepare($rs_righe[$i]['um']).', '.prepare($rs_righe[$i]['qta']).', '.prepare($rs_righe[$i]['order']).')');
}
} }
flash()->info(tr('Creata una nuova fattura!')); flash()->info(tr('Creata una nuova fattura!'));
@ -998,10 +1069,28 @@ switch (post('op')) {
$idriga = post('idriga'); $idriga = post('idriga');
// Lettura contratti collegati // Lettura contratti collegati
$query = 'SELECT iddocumento, idcontratto, is_contratto FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idcontratto IS NOT NULL AND NOT idcontratto=0'; $query = 'SELECT iddocumento, idcontratto, is_contratto, idarticolo FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idcontratto IS NOT NULL AND NOT idcontratto=0';
$rsp = $dbo->fetchArray($query); $rsp = $dbo->fetchArray($query);
$id_record = $rsp[0]['iddocumento']; $id_record = $rsp[0]['iddocumento'];
$idcontratto = $rsp[0]['idcontratto']; $idcontratto = $rsp[0]['idcontratto'];
$is_contratto = $rsp[0]['is_contratto'];
$idarticolo = $rsp[0]['idarticolo'];
// contratto su unica riga, perdo il riferimento dell'articolo quindi lo vado a leggere da co_righe_contratti
if (empty($idarticolo) && $is_contratto) {
// rimetto a magazzino gli articoli collegati al 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]);
}
}
} 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 idcontratto='.prepare($idcontratto); $query = 'DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idcontratto='.prepare($idcontratto);
@ -1030,14 +1119,6 @@ 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 // Ricalcolo inps, ritenuta e bollo
if ($dir == 'entrata') { if ($dir == 'entrata') {
ricalcola_costiagg_fattura($id_record); ricalcola_costiagg_fattura($id_record);
@ -1079,16 +1160,12 @@ switch (post('op')) {
break; break;
case 'update_position': case 'update_position':
$start = filter('start'); $orders = explode( ",", $_POST['order'] );
$end = filter('end'); $order = 0;
$id = filter('id');
if ($start > $end) { foreach( $orders as $idriga ){
$dbo->query('UPDATE `co_righe_documenti` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `iddocumento`='.prepare($id_record)); $dbo->query('UPDATE `co_righe_documenti` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$dbo->query('UPDATE `co_righe_documenti` SET `order`='.prepare($end).' WHERE id='.prepare($id)); $order++;
} elseif ($end != $start) {
$dbo->query('UPDATE `co_righe_documenti` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `iddocumento`='.prepare($id_record));
$dbo->query('UPDATE `co_righe_documenti` SET `order`='.prepare($end).' WHERE id='.prepare($id));
} }
break; break;

View File

@ -38,6 +38,10 @@ echo '
<div class="col-md-6"> <div class="col-md-6">
{[ "type": "select", "label": "'.tr('Contratto').'", "name": "idcontratto", "required": 1, "ajax-source": "contratti", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.text); $(\'#prezzo\').val($data.totale); $(\'#sconto\').val($data.sconto);\"" ]} {[ "type": "select", "label": "'.tr('Contratto').'", "name": "idcontratto", "required": 1, "ajax-source": "contratti", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.text); $(\'#prezzo\').val($data.totale); $(\'#sconto\').val($data.sconto);\"" ]}
</div> </div>
<div class="col-md-6">
{[ "type": "checkbox", "label": "'.tr('Importa righe').'", "name": "import", "value": "1", "placeholder": "'.tr('Replica righe del contratto in fattura').'" ]}
</div>
</div>'; </div>';
// Descrizione // Descrizione

View File

@ -190,10 +190,10 @@ if (!empty($rs)) {
echo ' echo '
<td> <td>
<input type="hidden" id="subtot_'.$i.'" name="subtot['.$r['id'].']" value="'.($r['subtotale'] / $r['qta']).'" /> <input type="hidden" id="subtot_'.$i.'" name="subtot['.$r['id'].']" value="'.str_replace('.', ',', ($r['subtotale'] / $r['qta'])).'" />
<input type="hidden" id="sconto_'.$i.'" name="sconto['.$r['id'].']" value="'.($r['sconto'] / $r['qta']).'" /> <input type="hidden" id="sconto_'.$i.'" name="sconto['.$r['id'].']" value="'.str_replace('.', ',', ($r['sconto'] / $r['qta'])).'" />
<input type="hidden" id="idiva_'.$i.'" name="idiva['.$r['id'].']" value="'.$r['idiva'].'" /> <input type="hidden" id="idiva_'.$i.'" name="idiva['.$r['id'].']" value="'.$r['idiva'].'" />
<input type="hidden" id="iva_'.$i.'" name="iva['.$r['id'].']" value="'.($r['iva'] / $r['qta']).'" /> <input type="hidden" id="iva_'.$i.'" name="iva['.$r['id'].']" value="'.str_replace('.', ',', ($r['iva'] / $r['qta'])).'" />
<big id="subtotale_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto + $iva).' &euro;</big><br/> <big id="subtotale_'.$i.'">'.Translator::numberToLocale($subtotale - $sconto + $iva).' &euro;</big><br/>

View File

@ -199,7 +199,7 @@ if (!empty($record['is_fiscale'])) {
if ($record['stato'] == 'Pagato') { if ($record['stato'] == 'Pagato') {
?> ?>
<a class="btn btn-sm btn-primary" href="javascript:;" onclick="if( confirm('Se riapri questa fattura verrà azzerato lo scadenzario e la prima nota. Continuare?') ){ $.post( '<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get($name)['id']; ?>&id_record=<?php echo $id_record; ?>', { id_module: '<?php echo Modules::get($name)['id']; ?>', id_record: '<?php echo $id_record; ?>', op: 'reopen' }, function(){ location.href='<?php echo $rootdir; ?>/editor.php?id_module=<?php echo Modules::get($name)['id']; ?>&id_record=<?php echo $id_record; ?>'; } ); }" title="Aggiungi prima nota"><i class="fa fa-folder-open"></i> <?php echo tr('Riapri fattura'); ?>...</a> <a class="btn btn-sm btn-primary" href="javascript:;" onclick="if( confirm('Se riapri questa fattura verrà azzerato lo scadenzario e la prima nota. Continuare?') ){ $.post( '<?php echo $rootdir; ?>/editor.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>', { id_module: '<?php echo $id_module; ?>', id_record: '<?php echo $id_record; ?>', op: 'reopen' }, function(){ location.href='<?php echo $rootdir; ?>/editor.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>'; } ); }" title="Aggiungi prima nota"><i class="fa fa-folder-open"></i> <?php echo tr('Riapri fattura'); ?>...</a>
<?php <?php
} }
} }
@ -309,7 +309,7 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
</div>'; </div>';
// Lettura preventivi accettati, in attesa di conferma o in lavorazione // 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')"; $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') AND default_revision=1";
$preventivi = $dbo->fetchArray($prev_query)[0]['tot']; $preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
echo ' echo '
<div class="tip" data-toggle="tooltip" title="'.tr('Preventivi accettati, in attesa di conferma o in lavorazione.').'" style="display:inline;"> <div class="tip" data-toggle="tooltip" title="'.tr('Preventivi accettati, in attesa di conferma o in lavorazione.').'" style="display:inline;">

View File

@ -107,14 +107,14 @@ function aggiungi_scadenza($iddocumento, $pagamento = '', $pagato = 0)
// All'ultimo ciclo imposto come cifra da pagare il totale della fattura meno gli importi già inseriti in scadenziario per evitare di inserire cifre arrotondate "male" // All'ultimo ciclo imposto come cifra da pagare il totale della fattura meno gli importi già inseriti in scadenziario per evitare di inserire cifre arrotondate "male"
if ($i == (sizeof($rs) - 1)) { if ($i == (sizeof($rs) - 1)) {
$da_pagare = sum($netto_fattura, -$totale_da_pagare); $da_pagare = sum($netto_fattura, -$totale_da_pagare, 2);
} }
// Totale da pagare (totale x percentuale di pagamento nei casi pagamenti multipli) // Totale da pagare (totale x percentuale di pagamento nei casi pagamenti multipli)
else { else {
$da_pagare = sum($netto_fattura / 100 * $rs[$i]['prc'], 0); $da_pagare = sum($netto_fattura / 100 * $rs[$i]['prc'], 0, 2);
} }
$totale_da_pagare = sum($da_pagare, $totale_da_pagare); $totale_da_pagare = sum($da_pagare, $totale_da_pagare, 2);
if ($dir == 'uscita') { if ($dir == 'uscita') {
$da_pagare = -$da_pagare; $da_pagare = -$da_pagare;
@ -187,7 +187,7 @@ function aggiorna_scadenziario($iddocumento, $totale_pagato, $data_pagamento)
// ...altrimenti aggiungo l'importo pagato // ...altrimenti aggiungo l'importo pagato
else { else {
$pagato = abs($rimanente_da_pagare); $pagato = abs($rimanente_da_pagare);
$rimanente_da_pagare -= abs($rs[$i]['da_pagare']) - abs($rs[$i]['pagato']); $rimanente_da_pagare -= abs($rimanente_da_pagare);
} }
} }
@ -606,6 +606,7 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
global $dir; global $dir;
global $idddt; global $idddt;
global $idordine; global $idordine;
global $idcontratto;
$dbo = database(); $dbo = database();
@ -617,6 +618,10 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
$idordine = 0; $idordine = 0;
} }
if (empty($idcontratto)) {
$idcontratto = 0;
}
// Lettura unità di misura dell'articolo // Lettura unità di misura dell'articolo
if (empty($idum)) { if (empty($idum)) {
$query = 'SELECT um FROM mg_articoli WHERE id='.prepare($idarticolo); $query = 'SELECT um FROM mg_articoli WHERE id='.prepare($idarticolo);
@ -684,6 +689,9 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
// Inserisco il riferimento dell'ordine alla riga // Inserisco il riferimento dell'ordine alla riga
$dbo->query('UPDATE co_righe_documenti SET idordine='.prepare($idordine).' WHERE id='.prepare($idriga)); $dbo->query('UPDATE co_righe_documenti SET idordine='.prepare($idordine).' WHERE id='.prepare($idriga));
// Inserisco il riferimento del contratto alla riga
$dbo->query('UPDATE co_righe_documenti SET idcontratto='.prepare($idcontratto).' WHERE id='.prepare($idriga));
} }
return $idriga; return $idriga;
@ -848,6 +856,21 @@ function rimuovi_riga_fattura($id_documento, $id_riga, $dir)
} }
} }
//Rimozione righe generiche
if (empty($riga['idarticolo'])) {
// TODO: possibile ambiguità tra righe molto simili tra loro
// Se l'articolo è stato inserito in fattura tramite un ddt devo sanare la qta_evasa
if (!empty($riga['idddt'])) {
$dbo->query('UPDATE dt_righe_ddt SET qta_evasa=qta_evasa-'.$riga['qta'].' WHERE qta='.prepare($riga['qta']).' AND descrizione='.prepare($riga['descrizione']).' AND idddt='.prepare($riga['idddt']));
}
// TODO: possibile ambiguità tra righe molto simili tra loro
// Se l'articolo è stato inserito in fattura tramite un ordine devo sanare la qta_evasa
if (!empty($riga['idordine'])) {
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$riga['qta'].' WHERE qta='.prepare($riga['qta']).' AND descrizione='.prepare($riga['descrizione']).' AND idordine='.prepare($riga['idordine']));
}
}
// Aggiorno lo stato dell'ordine // Aggiorno lo stato dell'ordine
if (!empty($riga['idordine']) && setting('Cambia automaticamente stato ordini fatturati')) { if (!empty($riga['idordine']) && setting('Cambia automaticamente stato ordini fatturati')) {
$dbo->query('UPDATE or_ordini SET idstatoordine = (SELECT id FROM or_statiordine WHERE descrizione = '.prepare(get_stato_ordine($riga['idordine'])).') WHERE id = '.prepare($riga['idordine'])); $dbo->query('UPDATE or_ordini SET idstatoordine = (SELECT id FROM or_statiordine WHERE descrizione = '.prepare(get_stato_ordine($riga['idordine'])).') WHERE id = '.prepare($riga['idordine']));

View File

@ -61,24 +61,24 @@ if (!empty($rs)) {
$extra = ''; $extra = '';
$mancanti = 0; $mancanti = 0;
// Individuazione dei seriali
if (!empty($r['abilita_serial'])) {
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_documento='.prepare($r['id'])), 'serial');
$mancanti = $r['qta'] - count($serials);
if ($mancanti > 0) {
$extra = 'class="warning"';
} else {
$mancanti = 0;
}
}
} }
// Righe generiche // Righe generiche
else { else {
$delete = 'unlink_riga'; $delete = 'unlink_riga';
} }
// Individuazione dei seriali
if (!empty($r['abilita_serial'])) {
$serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_documento='.prepare($r['id'])), 'serial');
$mancanti = $r['qta'] - count($serials);
if ($mancanti > 0) {
$extra = 'class="warning"';
} else {
$mancanti = 0;
}
}
echo ' echo '
<tr data-id="'.$r['id'].'" '.$extra.'> <tr data-id="'.$r['id'].'" '.$extra.'>
<td> <td>
@ -399,17 +399,19 @@ $(document).ready(function(){
cursor: "move", cursor: "move",
dropOnEmpty: true, dropOnEmpty: true,
scroll: true, scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) { update: function(event, ui) {
var order = "";
$(".table tr[data-id]").each( function(){
order += ","+$(this).data("id");
});
order = order.replace(/^,/, "");
$.post("'.$rootdir.'/actions.php", { $.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"), id: ui.item.data("id"),
id_module: '.$id_module.', id_module: '.$id_module.',
id_record: '.$id_record.', id_record: '.$id_record.',
op: "update_position", op: "update_position",
start: ui.item.data("start"), order: order,
end: ui.item.index()
}); });
} }
}); });

View File

@ -349,20 +349,16 @@ switch (post('op')) {
break; break;
case 'update_position': case 'update_position':
$start = filter('start'); $orders = explode( ",", $_POST['order'] );
$end = filter('end'); $order = 0;
$id = filter('id');
if ($start > $end) { foreach( $orders as $idriga ){
$dbo->query('UPDATE `or_righe_ordini` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idordine`='.prepare($id_record)); $dbo->query('UPDATE `or_righe_ordini` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$dbo->query('UPDATE `or_righe_ordini` SET `order`='.prepare($end).' WHERE id='.prepare($id)); $order++;
} elseif ($end != $start) { }
$dbo->query('UPDATE `or_righe_ordini` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idordine`='.prepare($id_record));
$dbo->query('UPDATE `or_righe_ordini` SET `order`='.prepare($end).' WHERE id='.prepare($id));
}
break; break;
case 'ordine_da_preventivo': case 'ordine_da_preventivo':

View File

@ -148,7 +148,7 @@ if (!empty($rs)) {
if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) { if ($record['flag_completato'] == 0 && empty($r['sconto_globale'])) {
echo " echo "
<form action='".$rootdir.'/editor.php?id_module='.Modules::get($name)['id'].'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'> <form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'> <input type='hidden' name='backto' value='record-edit'>
<input type='hidden' name='id_record' value='".$id_record."'> <input type='hidden' name='id_record' value='".$id_record."'>
<input type='hidden' name='idriga' value='".$r['id']."'> <input type='hidden' name='idriga' value='".$r['id']."'>
@ -349,17 +349,19 @@ $(document).ready(function(){
cursor: "move", cursor: "move",
dropOnEmpty: true, dropOnEmpty: true,
scroll: true, scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) { update: function(event, ui) {
var order = "";
$(".table tr[data-id]").each( function(){
order += ","+$(this).data("id");
});
order = order.replace(/^,/, "");
$.post("'.$rootdir.'/actions.php", { $.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"), id: ui.item.data("id"),
id_module: '.$id_module.', id_module: '.$id_module.',
id_record: '.$id_record.', id_record: '.$id_record.',
op: "update_position", op: "update_position",
start: ui.item.data("start"), order: order,
end: ui.item.index()
}); });
} }
}); });

View File

@ -291,20 +291,16 @@ switch (post('op')) {
flash()->info('Riga modificata!'); flash()->info('Riga modificata!');
break; break;
case 'update_position': case 'update_position':
$start = filter('start'); $orders = explode( ",", $_POST['order'] );
$end = filter('end'); $order = 0;
$id = filter('id');
if ($start > $end) { foreach( $orders as $idriga ){
$dbo->query('UPDATE `co_righe_preventivi` SET `order`=`order` + 1 WHERE `order`>='.prepare($end).' AND `order`<'.prepare($start).' AND `idpreventivo`='.prepare($id_record)); $dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($end).' WHERE id='.prepare($id)); $order++;
} elseif ($end != $start) { }
$dbo->query('UPDATE `co_righe_preventivi` SET `order`=`order` - 1 WHERE `order`>'.prepare($start).' AND `order`<='.prepare($end).' AND `idpreventivo`='.prepare($id_record));
$dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($end).' WHERE id='.prepare($id));
}
break; break;
case 'add_revision': case 'add_revision':

View File

@ -230,17 +230,19 @@ $(document).ready(function(){
cursor: "move", cursor: "move",
dropOnEmpty: true, dropOnEmpty: true,
scroll: true, scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) { update: function(event, ui) {
var order = "";
$(".table tr[data-id]").each( function(){
order += ","+$(this).data("id");
});
order = order.replace(/^,/, "");
$.post("'.$rootdir.'/actions.php", { $.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"), id: ui.item.data("id"),
id_module: '.$id_module.', id_module: '.$id_module.',
id_record: '.$id_record.', id_record: '.$id_record.',
op: "update_position", op: "update_position",
start: ui.item.data("start"), order: order,
end: ui.item.index()
}); });
} }
}); });

View File

@ -50,7 +50,7 @@ include_once __DIR__.'/../../core.php';
Calcolo totale per chiudere la fattura Calcolo totale per chiudere la fattura
*/ */
// Lettura importo da scadenzario (seleziono l'importo di questo mese) // Lettura importo da scadenzario (seleziono l'importo di questo mese)
$query = 'SELECT *, scadenza, ABS(da_pagare-pagato) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($iddocumento)." AND ABS(da_pagare) > ABS(pagato) ORDER BY DATE_FORMAT(scadenza,'%m/%Y') ASC"; $query = 'SELECT *, scadenza, ABS(da_pagare-pagato) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($iddocumento)." AND ABS(da_pagare) > ABS(pagato) ORDER BY DATE_FORMAT(scadenza,'%m/%Y') DESC";
$rs = $dbo->fetchArray($query); $rs = $dbo->fetchArray($query);
$importo_conto_aziendale = $rs[0]['rata']; $importo_conto_aziendale = $rs[0]['rata'];

View File

@ -161,7 +161,7 @@ echo '
// Info per il footer // Info per il footer
$imponibile = sum($imponibile) - sum($sconto); $imponibile = sum($imponibile) - sum($sconto);
$iva = sum($iva, null, 2); $iva = sum($iva);
$totale = $imponibile + $iva; $totale = $imponibile + $iva;

View File

@ -151,7 +151,7 @@ foreach ($righe as $r) {
$sconto = sum($sconto); $sconto = sum($sconto);
$imponibile = sum($imponibile); $imponibile = sum($imponibile);
$iva = sum($iva, null, 2); $iva = sum($iva);
$totale = $imponibile - $sconto; $totale = $imponibile - $sconto;

View File

@ -513,7 +513,7 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`,
ALTER TABLE `zz_segments` ADD `is_fiscale` boolean NOT NULL DEFAULT 1; ALTER TABLE `zz_segments` ADD `is_fiscale` boolean NOT NULL DEFAULT 1;
INSERT INTO `zz_segments` (`id_module`, `name`, `clause`, `position`, `pattern`,`note`, `predefined`, `is_fiscale`) VALUES INSERT INTO `zz_segments` (`id_module`, `name`, `clause`, `position`, `pattern`,`note`, `predefined`, `is_fiscale`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'), 'Fatture pro-forma', '1=1', 'WHR', 'PRO-###', '', 1, 0); ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'), 'Fatture pro-forma', '1=1', 'WHR', 'PRO-###', '', 0, 0);
-- Fix campi di ricerca -- Fix campi di ricerca
UPDATE `zz_modules` SET `options` = "SELECT |select| FROM `zz_segments` WHERE 1=1 HAVING 2=2 ORDER BY name, id_module" WHERE `name` = 'Segmenti'; UPDATE `zz_modules` SET `options` = "SELECT |select| FROM `zz_segments` WHERE 1=1 HAVING 2=2 ORDER BY name, id_module" WHERE `name` = 'Segmenti';