Aggiunta possibilità di inserire un ordine da ddt e fatture
This commit is contained in:
parent
c43413824b
commit
5cd5e349c6
|
@ -327,6 +327,12 @@ switch (post('op')) {
|
|||
$query = 'DELETE FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND id='.prepare($idriga);
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
|
||||
//Aggiorno lo stato dell'ordine
|
||||
if(get_var('Cambia automaticamente stato ordini fatturati') && !empty($rs[0]['idordine'])){
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[0]['idordine']).'") WHERE id = '.prepare($rs[0]['idordine']));
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
|
@ -446,7 +452,7 @@ switch (post('op')) {
|
|||
// 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));
|
||||
|
||||
|
||||
// Rimpiazzo la quantità negli ordini
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$rs[$i]['qta'].' WHERE descrizione='.prepare($rs[$i]['descrizione']).' AND idarticolo='.prepare($rs[$i]['idarticolo']).' AND idordine='.prepare($rs[$i]['idordine']).' AND idiva='.prepare($rs[$i]['idiva']));
|
||||
|
@ -455,6 +461,13 @@ switch (post('op')) {
|
|||
$dbo->query('DELETE FROM dt_ddt WHERE id='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM dt_righe_ddt WHERE idddt='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_movimenti WHERE idddt='.prepare($id_record));
|
||||
|
||||
//Aggiorno gli stati degli ordini
|
||||
if(get_var('Cambia automaticamente stato ordini fatturati')){
|
||||
for ($i = 0; $i < sizeof($rs); ++$i) {
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine']));
|
||||
}
|
||||
}
|
||||
|
||||
$_SESSION['infos'][] = tr('Ddt eliminato!');
|
||||
|
||||
|
@ -488,6 +501,71 @@ switch (post('op')) {
|
|||
$dbo->query('UPDATE `dt_righe_ddt` SET `order`='.prepare($end).' WHERE id='.prepare($id));
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
// aggiungi righe da ordine
|
||||
case 'add_ordine':
|
||||
$idordine = $post['iddocumento'];
|
||||
|
||||
// Lettura di tutte le righe della tabella in arrivo
|
||||
foreach ($post['qta_da_evadere'] as $i => $value) {
|
||||
// Processo solo le righe da evadere
|
||||
if ($post['evadere'][$i] == 'on') {
|
||||
$idrigaordine = $i;
|
||||
$idarticolo = post('idarticolo')[$i];
|
||||
$descrizione = post('descrizione')[$i];
|
||||
|
||||
$qta = $post['qta_da_evadere'][$i];
|
||||
$um = post('um')[$i];
|
||||
|
||||
$subtot = $post['subtot'][$i] * $qta;
|
||||
$sconto = $post['sconto'][$i];
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
$qprc = 'SELECT tipo_sconto, sconto_unitario FROM or_righe_ordini WHERE id='.prepare($idrigaordine);
|
||||
$rsprc = $dbo->fetchArray($qprc);
|
||||
|
||||
$sconto_unitario = $rsprc[0]['sconto_unitario'];
|
||||
$tipo_sconto = $rsprc[0]['tipo_sconto'];
|
||||
|
||||
$idiva = post('idiva')[$i];
|
||||
|
||||
// Calcolo l'iva indetraibile
|
||||
$q = 'SELECT percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
|
||||
// Leggo la descrizione iva
|
||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$desc_iva = $rs[0]['descrizione'];
|
||||
|
||||
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
|
||||
if (!empty($idarticolo)) {
|
||||
$idiva_acquisto = $idiva;
|
||||
$prezzo_acquisto = $subtot;
|
||||
$riga = add_articolo_inddt($id_record, $idarticolo, $descrizione, $idiva_acquisto, $qta, $um, $prezzo_acquisto);
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$dbo->query('INSERT INTO mg_prodotti (id_riga_documento, id_articolo, dir, serial, lotto, altro) SELECT '.prepare($riga).', '.prepare($idarticolo).', '.prepare($dir).', serial, lotto, altro FROM mg_prodotti AS t WHERE id_riga_ordine='.prepare($idrigaordine));
|
||||
}
|
||||
|
||||
// Inserimento riga normale
|
||||
elseif ($qta != 0) {
|
||||
$query = 'INSERT INTO dt_righe_ddt(idddt, idarticolo, descrizione, idordine, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idordine).', '.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);
|
||||
}
|
||||
|
||||
// Scalo la quantità dall ordine
|
||||
$dbo->query('UPDATE or_righe_ordini SET qta_evasa = qta_evasa+'.$qta.' WHERE id='.prepare($idrigaordine));
|
||||
}
|
||||
}
|
||||
|
||||
ricalcola_costiagg_ddt($id_record);
|
||||
|
||||
$_SESSION['infos'][] = tr('Aggiunti nuovi articoli in ddt!');
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::get($id_module);
|
||||
|
||||
if ($module['name'] == 'Ddt di vendita') {
|
||||
$dir = 'entrata';
|
||||
$module_origin = 'Ordini cliente';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$module_origin = 'Ordini fornitore';
|
||||
}
|
||||
|
||||
$record = $dbo->fetchArray('SELECT * FROM dt_ddt WHERE id='.prepare($id_record));
|
||||
$numero = ($record[0]['numero_esterno'] != '') ? $record[0]['numero_esterno'] : $record[0]['numero'];
|
||||
$idconto = $record[0]['idconto'];
|
||||
$idanagrafica = $record[0]['idanagrafica'];
|
||||
|
||||
// Preventivo
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_ordine", "required": 1, "values": "query=SELECT or_ordini.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM or_ordini WHERE idanagrafica='.prepare($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).' LIMIT 0,1) AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
<div id="righeordine" class="col-md-12"></div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script>
|
||||
$('#id_ordine').change( function(){
|
||||
$('#righeordine').html('<i>Caricamento in corso...</i>');
|
||||
|
||||
$('#righeordine').load(globals.rootdir + '/modules/fatture/crea_documento.php?id_module=' + <?php echo Modules::get($module_origin)['id']; ?> + '&id_record=' + $(this).find('option:selected').val() + '&documento=ddt&op=add_ordine&iddocumento=' + globals.id_record);
|
||||
});
|
||||
</script>
|
|
@ -179,6 +179,13 @@ if ($module['name'] == 'Ddt di vendita') {
|
|||
<?php
|
||||
|
||||
if ($records[0]['flag_completato']==0) {
|
||||
// Lettura ordini
|
||||
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($records[0]['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'];
|
||||
echo '
|
||||
<a class="btn btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/ddt/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ordine" data-target="#bs-popup">
|
||||
<i class="fa fa-plus"></i> '.tr('Ordine').'
|
||||
</a>';
|
||||
?>
|
||||
<a class="btn btn-primary" data-href="<?php echo $rootdir; ?>/modules/ddt/row-add.php?id_module=<?php echo $id_module; ?>&id_record=<?php echo $id_record; ?>&is_articolo" data-toggle="modal" data-title="Aggiungi articolo" data-target="#bs-popup">
|
||||
<i class="fa fa-plus"></i> <?php echo tr('Articolo'); ?>
|
||||
|
|
|
@ -98,6 +98,11 @@ function rimuovi_articolo_daddt($idarticolo, $idddt, $idrigaddt)
|
|||
|
||||
// Elimino la riga dal ddt
|
||||
$dbo->query('DELETE FROM `dt_righe_ddt` WHERE id='.prepare($idrigaddt).' AND idddt='.prepare($idddt));
|
||||
|
||||
//Aggiorno lo stato dell'ordine
|
||||
if(get_var('Cambia automaticamente stato ordini fatturati') && !empty($idordine)){
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($idordine).'") WHERE id = '.prepare($idordine));
|
||||
}
|
||||
|
||||
// Elimino i seriali utilizzati dalla riga
|
||||
$dbo->query('DELETE FROM `mg_prodotti` WHERE id_articolo = '.prepare($idarticolo).' AND id_riga_ddt = '.prepare($idrigaddt));
|
||||
|
@ -281,6 +286,7 @@ function ricalcola_costiagg_ddt($idddt, $idrivalsainps = '', $idritenutaacconto
|
|||
function add_articolo_inddt($idddt, $idarticolo, $descrizione, $idiva, $qta, $idum, $prezzo, $sconto = 0, $sconto_unitario = 0, $tipo_sconto = 'UNT')
|
||||
{
|
||||
global $dir;
|
||||
global $idordine;
|
||||
|
||||
$dbo = Database::getConnection();
|
||||
|
||||
|
@ -318,6 +324,9 @@ function add_articolo_inddt($idddt, $idarticolo, $descrizione, $idiva, $qta, $id
|
|||
// Decremento la quantità dal magazzino centrale
|
||||
add_movimento_magazzino($idarticolo, $qta, ['idddt' => $idddt]);
|
||||
}
|
||||
|
||||
// Inserisco il riferimento dell'ordine alla riga
|
||||
$dbo->query('UPDATE dt_righe_ddt SET idordine='.prepare($idordine).' WHERE id='.prepare($idriga));
|
||||
}
|
||||
|
||||
return $idriga;
|
||||
|
|
|
@ -217,13 +217,12 @@ switch (post('op')) {
|
|||
}
|
||||
|
||||
// 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 co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idordine, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
||||
foreach ($rs as $r) {
|
||||
$dbo->query('UPDATE or_righe_ordini SET qta_evasa=qta_evasa-'.$r['qta'].' WHERE descrizione='.prepare($r['descrizione']).' AND idarticolo='.prepare($r['idarticolo']).' AND idordine='.prepare($r['idordine']).' AND idiva='.prepare($r['idiva']));
|
||||
}
|
||||
|
||||
// Se delle righe sono state create da un ddt, devo riportare la quantità evasa nella tabella dei ddt al valore di prima, riaggiungendo la quantità che sto togliendo
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record));
|
||||
foreach ($rs as $r) {
|
||||
$dbo->query('UPDATE dt_righe_ddt SET qta_evasa=qta_evasa-'.$r['qta'].' WHERE descrizione='.prepare($r['descrizione']).' AND idarticolo='.prepare($r['idarticolo']).' AND idddt='.prepare($r['idddt']).' AND idiva='.prepare($r['idiva']));
|
||||
}
|
||||
|
@ -233,6 +232,20 @@ switch (post('op')) {
|
|||
$dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM mg_movimenti WHERE iddocumento='.prepare($id_record));
|
||||
$dbo->query('DELETE FROM co_movimenti WHERE iddocumento='.prepare($id_record));
|
||||
|
||||
//Aggiorno gli stati dei ddt
|
||||
if(get_var('Cambia automaticamente stato ddt fatturati')){
|
||||
foreach ($rs as $r) {
|
||||
$dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="'.get_stato_ddt($r['idddt']).'") WHERE id = '.prepare($r['idddt']));
|
||||
}
|
||||
}
|
||||
|
||||
//Aggiorno gli stati degli ordini
|
||||
if(get_var('Cambia automaticamente stato ordini fatturati')){
|
||||
foreach ($rs as $r) {
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($r['idordine']).'") WHERE id = '.prepare($r['idordine']));
|
||||
}
|
||||
}
|
||||
|
||||
// Azzeramento collegamento della rata contrattuale alla pianificazione
|
||||
$dbo->query('UPDATE co_ordiniservizio_pianificazionefatture SET iddocumento=0 WHERE iddocumento='.prepare($id_record));
|
||||
|
@ -1258,8 +1271,9 @@ switch (post('op')) {
|
|||
$idarticolo = post('idarticolo');
|
||||
|
||||
// Leggo se la riga è collegata a un ddt, per aggiornargli lo stato
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga));
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idordine, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga));
|
||||
$idddt = $rs[0]['idddt'];
|
||||
$idordine = $rs[0]['idordine'];
|
||||
|
||||
if (!rimuovi_articolo_dafattura($idarticolo, $id_record, $idriga)) {
|
||||
$_SESSION['errors'][] = tr('Alcuni serial number sono già stati utilizzati!');
|
||||
|
@ -1272,11 +1286,20 @@ switch (post('op')) {
|
|||
// Se nella fattura non c'é più il ddt rimosso, aggiorno lo stato del ddt in "Bozza"
|
||||
$rs = $dbo->fetchArray('SELECT id FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idddt='.prepare($idddt));
|
||||
|
||||
if( sizeof($rs) == 0 ){
|
||||
if( sizeof($rs) == 0 && get_var('Cambia automaticamente stato ddt fatturati') ){
|
||||
$dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="Bozza") WHERE id = '.prepare($idddt));
|
||||
}
|
||||
}
|
||||
|
||||
if( !empty($idordine) ){
|
||||
// Se nella fattura non c'é più l'ordine rimosso, aggiorno lo stato dell'ordine in "Bozza"
|
||||
$rs = $dbo->fetchArray('SELECT id FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idordine='.prepare($idordine));
|
||||
|
||||
if( sizeof($rs) == 0 && get_var('Cambia automaticamente stato ordini fatturati') ){
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="Bozza") WHERE id = '.prepare($idordine));
|
||||
}
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
|
@ -1404,8 +1427,9 @@ switch (post('op')) {
|
|||
|
||||
// Se la riga è stata creata da un ddt, devo riportare la quantità evasa nella tabella dei ddt
|
||||
// al valore di prima, riaggiungendo la quantità che sto togliendo
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga));
|
||||
$rs = $dbo->fetchArray('SELECT qta, descrizione, idarticolo, idddt, idordine, idiva FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND id='.prepare($idriga));
|
||||
$idddt = $rs[0]['idddt'];
|
||||
$idordine = $rs[0]['idordine'];
|
||||
|
||||
// Rimpiazzo la quantità nei ddt
|
||||
$dbo->query('UPDATE dt_righe_ddt SET qta_evasa=qta_evasa-'.$rs[0]['qta'].' WHERE descrizione='.prepare($rs[0]['descrizione']).' AND idarticolo='.prepare($rs[0]['idarticolo']).' AND idddt='.prepare($rs[0]['idddt']).' AND idiva='.prepare($rs[0]['idiva']));
|
||||
|
@ -1417,11 +1441,20 @@ switch (post('op')) {
|
|||
// Se nella fattura non c'é più il ddt rimosso, aggiorno lo stato del ddt in "Bozza"
|
||||
$rs = $dbo->fetchArray('SELECT id FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idddt='.prepare($idddt));
|
||||
|
||||
if( sizeof($rs) == 0 ){
|
||||
if( sizeof($rs) == 0 && get_var('Cambia automaticamente stato ddt fatturati') ){
|
||||
$dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="Bozza") WHERE id = '.prepare($idddt));
|
||||
}
|
||||
}
|
||||
|
||||
if( !empty($idordine) ){
|
||||
// Se nella fattura non c'é più l'ordine rimosso, aggiorno lo stato dell'ordine in "Bozza"
|
||||
$rs = $dbo->fetchArray('SELECT id FROM co_righe_documenti WHERE iddocumento='.prepare($id_record).' AND idordine='.prepare($idordine));
|
||||
|
||||
if( sizeof($rs) == 0 && get_var('Cambia automaticamente stato ordini fatturati') ){
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="Bozza") WHERE id = '.prepare($idordine));
|
||||
}
|
||||
}
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo
|
||||
if ($dir == 'entrata') {
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
|
@ -1463,6 +1496,75 @@ switch (post('op')) {
|
|||
}
|
||||
|
||||
break;
|
||||
|
||||
// aggiungi righe da ordine
|
||||
case 'add_ordine':
|
||||
$idordine = $post['iddocumento'];
|
||||
|
||||
$rs = $dbo->fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
|
||||
$idconto = $rs[0]['idconto'];
|
||||
|
||||
// Lettura di tutte le righe della tabella in arrivo
|
||||
foreach ($post['qta_da_evadere'] as $i => $value) {
|
||||
// Processo solo le righe da evadere
|
||||
if ($post['evadere'][$i] == 'on') {
|
||||
$idrigaordine = $i;
|
||||
$idarticolo = post('idarticolo')[$i];
|
||||
$descrizione = post('descrizione')[$i];
|
||||
|
||||
$qta = $post['qta_da_evadere'][$i];
|
||||
$um = post('um')[$i];
|
||||
|
||||
$subtot = $post['subtot'][$i] * $qta;
|
||||
$sconto = $post['sconto'][$i];
|
||||
$sconto = $sconto * $qta;
|
||||
|
||||
$qprc = 'SELECT tipo_sconto, sconto_unitario FROM or_righe_ordini WHERE id='.prepare($idrigaordine);
|
||||
$rsprc = $dbo->fetchArray($qprc);
|
||||
|
||||
$sconto_unitario = $rsprc[0]['sconto_unitario'];
|
||||
$tipo_sconto = $rsprc[0]['tipo_sconto'];
|
||||
|
||||
$idiva = post('idiva')[$i];
|
||||
|
||||
// Calcolo l'iva indetraibile
|
||||
$q = 'SELECT percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($q);
|
||||
$iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale'];
|
||||
$iva_indetraibile = $iva / 100 * $rs[0]['indetraibile'];
|
||||
|
||||
// Leggo la descrizione iva
|
||||
$query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
$desc_iva = $rs[0]['descrizione'];
|
||||
|
||||
// Se sto aggiungendo un articolo uso la funzione per inserirlo e incrementare la giacenza
|
||||
if (!empty($idarticolo)) {
|
||||
$idiva_acquisto = $idiva;
|
||||
$prezzo_acquisto = $subtot;
|
||||
$riga = add_articolo_infattura($id_record, $idarticolo, $descrizione, $idiva_acquisto, $qta, $prezzo_acquisto, 0, 0, 'UNT', 0, $idconto);
|
||||
|
||||
// Lettura lotto, serial, altro dalla riga dell'ordine
|
||||
$dbo->query('INSERT INTO mg_prodotti (id_riga_documento, id_articolo, dir, serial, lotto, altro) SELECT '.prepare($riga).', '.prepare($idarticolo).', '.prepare($dir).', serial, lotto, altro FROM mg_prodotti AS t WHERE id_riga_ordine='.prepare($idrigaordine));
|
||||
}
|
||||
|
||||
// Inserimento riga normale
|
||||
elseif ($qta != 0) {
|
||||
$query = 'INSERT INTO co_righe_documenti(iddocumento, idarticolo, descrizione, idconto, idordine, idiva, desc_iva, iva, iva_indetraibile, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, `order`) VALUES('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($descrizione).', '.prepare($idconto).', '.prepare($idordine).', '.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);
|
||||
}
|
||||
|
||||
// Scalo la quantità dall ordine
|
||||
$dbo->query('UPDATE or_righe_ordini SET qta_evasa = qta_evasa+'.$qta.' WHERE id='.prepare($idrigaordine));
|
||||
}
|
||||
}
|
||||
|
||||
ricalcola_costiagg_fattura($id_record);
|
||||
|
||||
$_SESSION['infos'][] = tr('Aggiunti nuovi articoli in fattura!');
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Aggiornamento stato dei ddt presenti in questa fattura in base alle quantità totali evase
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
$module = Modules::get($id_module);
|
||||
|
||||
if ($module['name'] == 'Fatture di vendita') {
|
||||
$dir = 'entrata';
|
||||
$module_origin = 'Ordini cliente';
|
||||
} else {
|
||||
$dir = 'uscita';
|
||||
$module_origin = 'Ordini fornitore';
|
||||
}
|
||||
|
||||
$record = $dbo->fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record));
|
||||
$numero = ($record[0]['numero_esterno'] != '') ? $record[0]['numero_esterno'] : $record[0]['numero'];
|
||||
$idconto = $record[0]['idconto'];
|
||||
$idanagrafica = $record[0]['idanagrafica'];
|
||||
|
||||
// Preventivo
|
||||
echo '
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
{[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_ordine", "required": 1, "values": "query=SELECT or_ordini.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM or_ordini WHERE idanagrafica='.prepare($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).' LIMIT 0,1) AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
|
||||
</div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<div class="row">
|
||||
<div id="righeordine" class="col-md-12"></div>
|
||||
</div>';
|
||||
|
||||
echo '
|
||||
<script src="'.$rootdir.'/lib/init.js"></script>';
|
||||
|
||||
?>
|
||||
|
||||
<script>
|
||||
$('#id_ordine').change( function(){
|
||||
$('#righeordine').html('<i>Caricamento in corso...</i>');
|
||||
|
||||
$('#righeordine').load(globals.rootdir + '/modules/fatture/crea_documento.php?id_module=' + <?php echo Modules::get($module_origin)['id']; ?> + '&id_record=' + $(this).find('option:selected').val() + '&documento=fattura&op=add_ordine&iddocumento=' + globals.id_record);
|
||||
});
|
||||
</script>
|
|
@ -306,6 +306,14 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
|
|||
<i class="fa fa-plus"></i> Ddt
|
||||
</a>';
|
||||
}
|
||||
|
||||
// Lettura ordini
|
||||
$ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($records[0]['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'];
|
||||
echo '
|
||||
<a class="btn btn-sm btn-primary'.(!empty($ordini) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ordine.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ordine" data-target="#bs-popup">
|
||||
<i class="fa fa-plus"></i> Ordine
|
||||
</a>';
|
||||
|
||||
// Lettura articoli
|
||||
$art_query = 'SELECT COUNT(*) AS tot FROM mg_articoli WHERE attivo = 1';
|
||||
|
|
|
@ -663,12 +663,17 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
|
|||
{
|
||||
global $dir;
|
||||
global $idddt;
|
||||
global $idordine;
|
||||
|
||||
$dbo = Database::getConnection();
|
||||
|
||||
if (empty($idddt)) {
|
||||
$idddt = 0;
|
||||
}
|
||||
|
||||
if (empty($idordine)) {
|
||||
$idordine = 0;
|
||||
}
|
||||
|
||||
// Lettura unità di misura dell'articolo
|
||||
if (empty($idum)) {
|
||||
|
@ -711,6 +716,9 @@ function add_articolo_infattura($iddocumento, $idarticolo, $descrizione, $idiva,
|
|||
|
||||
// Inserisco il riferimento del ddt alla riga
|
||||
$dbo->query('UPDATE co_righe_documenti SET idddt='.prepare($idddt).' WHERE id='.prepare($idriga));
|
||||
|
||||
// Inserisco il riferimento dell'ordine alla riga
|
||||
$dbo->query('UPDATE co_righe_documenti SET idordine='.prepare($idordine).' WHERE id='.prepare($idriga));
|
||||
}
|
||||
|
||||
return $idriga;
|
||||
|
@ -779,6 +787,16 @@ function rimuovi_articolo_dafattura($idarticolo, $iddocumento, $idrigadocumento)
|
|||
}
|
||||
// Elimino la riga dal documento
|
||||
$dbo->query('DELETE FROM `co_righe_documenti` WHERE id='.prepare($idrigadocumento).' AND iddocumento='.prepare($iddocumento));
|
||||
|
||||
//Aggiorno lo stato dell'ordine
|
||||
if(get_var('Cambia automaticamente stato ordini fatturati') && !empty($idordine)){
|
||||
$dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($idordine).'") WHERE id = '.prepare($idordine));
|
||||
}
|
||||
|
||||
//Aggiorno lo stato del ddt
|
||||
if(get_var('Cambia automaticamente stato ddt fatturati') && !empty($idddt)){
|
||||
$dbo->query('UPDATE dt_ddt SET idstatoddt=(SELECT id FROM dt_statiddt WHERE descrizione="'.get_stato_ddt($idddt).'") WHERE id = '.prepare($idddt));
|
||||
}
|
||||
|
||||
// Elimino i movimenti avvenuti nel magazzino per questo articolo lotto, serial, altro
|
||||
$dbo->query('DELETE FROM `mg_movimenti` WHERE idarticolo = '.prepare($idarticolo).' AND iddocumento = '.prepare($iddocumento).' AND id = '.prepare($idrigadocumento));
|
||||
|
|
Loading…
Reference in New Issue