1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-03-09 15:50: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

@ -255,16 +255,12 @@ switch (post('op')) {
break;
case 'update_position':
$start = filter('start');
$end = filter('end');
$id = filter('id');
$orders = explode( ",", $_POST['order'] );
$order = 0;
if ($start > $end) {
$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($end).' WHERE id='.prepare($id));
} 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));
foreach( $orders as $idriga ){
$dbo->query('UPDATE `co_righe_contratti` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$order++;
}
break;

View File

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

View File

@ -452,12 +452,14 @@ switch (post('op')) {
}
for ($i = 0; $i < sizeof($rs); ++$i) {
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
// 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
for ($i = 0; $i < sizeof($rs); ++$i) {
@ -495,16 +497,12 @@ switch (post('op')) {
break;
case 'update_position':
$start = filter('start');
$end = filter('end');
$id = filter('id');
$orders = explode( ",", $_POST['order'] );
$order = 0;
if ($start > $end) {
$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($end).' WHERE id='.prepare($id));
} 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));
foreach( $orders as $idriga ){
$dbo->query('UPDATE `dt_righe_ddt` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$order++;
}
break;

View File

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

View File

@ -445,12 +445,55 @@ switch (post('op')) {
$ritenutaacconto = ($prezzo - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale'];
}
if (!empty(post('import'))) {
// Replicazione delle righe del contratto sul documento
$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));
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).'))';
if ($dbo->query($query)) {
flash()->info(tr('Contratto _NUM_ aggiunto!', [
'_NUM_' => $numero,
]));
$dbo->query($query);
// Scalo le qta degli articoli nel contratto
$righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
@ -459,6 +502,19 @@ switch (post('op')) {
add_movimento_magazzino($riga['idarticolo'], -$riga['qta'], ['iddocumento' => $id_record]);
}
}
}
flash()->info(tr('Contratto _NUM_ aggiunto!', [
'_NUM_' => $numero,
]));
// 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);
for ($j = 0; $j < sizeof($rs2); ++$j) {
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id_contratto=".prepare($rs2[$j]['idcontratto']));
}
// 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) {
@ -474,7 +530,6 @@ switch (post('op')) {
ricalcola_costiagg_fattura($id_record);
}
}
}
break;
case 'manage_articolo':
@ -649,6 +704,9 @@ switch (post('op')) {
$rs = $dbo->fetchArray($q);
$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
if (!empty($idarticolo)) {
$idiva_acquisto = $idiva;
@ -663,8 +721,8 @@ switch (post('op')) {
}
// Inserimento riga normale
elseif ($qta != 0) {
$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).'))';
elseif ($qta != 0 || $rsdesc[0]['is_descrizione']==1) {
$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);
}
@ -730,6 +788,9 @@ switch (post('op')) {
$rs = $dbo->fetchArray($query);
$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
if (!empty($idarticolo)) {
$idiva_acquisto = $idiva;
@ -747,8 +808,8 @@ switch (post('op')) {
}
// Inserimento riga normale
elseif ($qta != 0) {
$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).'))');
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, 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
@ -765,6 +826,10 @@ switch (post('op')) {
case 'fattura_da_contratto':
$idcontratto = post('id_record');
$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_esterno = get_new_numerosecondariofattura($data);
$tipo_documento = 'Fattura immediata di vendita';
@ -774,8 +839,6 @@ switch (post('op')) {
$idanagrafica = $rs_contratto[0]['idanagrafica'];
$idpagamento = $rs_contratto[0]['idpagamento'];
$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
$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,8 +848,16 @@ switch (post('op')) {
$rs_righe = $dbo->fetchArray('SELECT * FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
for ($i = 0; $i < sizeof($rs_righe); ++$i) {
// 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!'));
break;
@ -998,10 +1069,28 @@ switch (post('op')) {
$idriga = post('idriga');
// 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);
$id_record = $rsp[0]['iddocumento'];
$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);
@ -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
if ($dir == 'entrata') {
ricalcola_costiagg_fattura($id_record);
@ -1079,16 +1160,12 @@ switch (post('op')) {
break;
case 'update_position':
$start = filter('start');
$end = filter('end');
$id = filter('id');
$orders = explode( ",", $_POST['order'] );
$order = 0;
if ($start > $end) {
$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($end).' WHERE id='.prepare($id));
} 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));
foreach( $orders as $idriga ){
$dbo->query('UPDATE `co_righe_documenti` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$order++;
}
break;

View File

@ -38,6 +38,10 @@ echo '
<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);\"" ]}
</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>';
// Descrizione

View File

@ -190,10 +190,10 @@ if (!empty($rs)) {
echo '
<td>
<input type="hidden" id="subtot_'.$i.'" name="subtot['.$r['id'].']" value="'.($r['subtotale'] / $r['qta']).'" />
<input type="hidden" id="sconto_'.$i.'" name="sconto['.$r['id'].']" value="'.($r['sconto'] / $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="'.str_replace('.', ',', ($r['sconto'] / $r['qta'])).'" />
<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/>

View File

@ -199,7 +199,7 @@ if (!empty($record['is_fiscale'])) {
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
}
}
@ -309,7 +309,7 @@ if ($record['stato'] != 'Pagato' && $record['stato'] != 'Emessa') {
</div>';
// 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'];
echo '
<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"
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)
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') {
$da_pagare = -$da_pagare;
@ -187,7 +187,7 @@ function aggiorna_scadenziario($iddocumento, $totale_pagato, $data_pagamento)
// ...altrimenti aggiungo l'importo pagato
else {
$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 $idddt;
global $idordine;
global $idcontratto;
$dbo = database();
@ -617,6 +618,10 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
$idordine = 0;
}
if (empty($idcontratto)) {
$idcontratto = 0;
}
// Lettura unità di misura dell'articolo
if (empty($idum)) {
$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
$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;
@ -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
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']));

View File

@ -61,6 +61,11 @@ if (!empty($rs)) {
$extra = '';
$mancanti = 0;
}
// Righe generiche
else {
$delete = 'unlink_riga';
}
// Individuazione dei seriali
if (!empty($r['abilita_serial'])) {
@ -73,11 +78,6 @@ if (!empty($rs)) {
$mancanti = 0;
}
}
}
// Righe generiche
else {
$delete = 'unlink_riga';
}
echo '
<tr data-id="'.$r['id'].'" '.$extra.'>
@ -399,17 +399,19 @@ $(document).ready(function(){
cursor: "move",
dropOnEmpty: true,
scroll: true,
start: function(event, ui) {
ui.item.data("start", ui.item.index());
},
update: function(event, ui) {
var order = "";
$(".table tr[data-id]").each( function(){
order += ","+$(this).data("id");
});
order = order.replace(/^,/, "");
$.post("'.$rootdir.'/actions.php", {
id: ui.item.data("id"),
id_module: '.$id_module.',
id_record: '.$id_record.',
op: "update_position",
start: ui.item.data("start"),
end: ui.item.index()
order: order,
});
}
});

View File

@ -350,16 +350,12 @@ switch (post('op')) {
break;
case 'update_position':
$start = filter('start');
$end = filter('end');
$id = filter('id');
$orders = explode( ",", $_POST['order'] );
$order = 0;
if ($start > $end) {
$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($end).' WHERE id='.prepare($id));
} 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));
foreach( $orders as $idriga ){
$dbo->query('UPDATE `or_righe_ordini` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$order++;
}
break;

View File

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

View File

@ -292,16 +292,12 @@ switch (post('op')) {
break;
case 'update_position':
$start = filter('start');
$end = filter('end');
$id = filter('id');
$orders = explode( ",", $_POST['order'] );
$order = 0;
if ($start > $end) {
$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($end).' WHERE id='.prepare($id));
} 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));
foreach( $orders as $idriga ){
$dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($order).' WHERE id='.prepare($idriga));
$order++;
}
break;

View File

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

View File

@ -50,7 +50,7 @@ include_once __DIR__.'/../../core.php';
Calcolo totale per chiudere la fattura
*/
// 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);
$importo_conto_aziendale = $rs[0]['rata'];

View File

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

View File

@ -151,7 +151,7 @@ foreach ($righe as $r) {
$sconto = sum($sconto);
$imponibile = sum($imponibile);
$iva = sum($iva, null, 2);
$iva = sum($iva);
$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;
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
UPDATE `zz_modules` SET `options` = "SELECT |select| FROM `zz_segments` WHERE 1=1 HAVING 2=2 ORDER BY name, id_module" WHERE `name` = 'Segmenti';