Aggiunta possibilità di inserire un ordine da ddt e fatture

This commit is contained in:
Bacca97 2018-06-25 11:44:06 +02:00
parent c43413824b
commit 5cd5e349c6
8 changed files with 317 additions and 7 deletions

View File

@ -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;
}

View File

@ -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>

View File

@ -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'); ?>

View File

@ -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;

View File

@ -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

View File

@ -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>

View File

@ -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';

View File

@ -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));