Correzione delle query per la selezione degli articoli, con rimozione del limite di quantità per gli articoli nelle Fatture di Acquisto.
Ottimizzazione delle query per l'individuazione della presenza di Articoli, DDT, ...

Grazie a @dariosera e @xxfuma85xx
This commit is contained in:
Thomas Zilio 2018-02-09 14:25:40 +01:00
parent 00a5924cba
commit 2129106a4b
3 changed files with 35 additions and 29 deletions

View File

@ -231,9 +231,9 @@ switch ($op) {
$filter[] = 'mg_articoli.id='.prepare($element);
}
$where[] = 'attivo=1';
$where[] = 'attivo = 1';
if (!empty($superselect['dir']) && $superselect['dir'] == 'entrata') {
//$where[] = 'qta>0';
//$where[] = '(qta > 0 OR servizio = 1)';
}
if (!empty($search)) {
@ -241,7 +241,6 @@ switch ($op) {
$search_fields[] = 'mg_articoli.codice LIKE '.prepare('%'.$search.'%');
}
$wh = '';
if (!empty($search_fields)) {
$where[] = '('.implode(' OR ', $search_fields).')';
}
@ -250,6 +249,7 @@ switch ($op) {
$where[] = '('.implode(' OR ', $filter).')';
}
$wh = '';
if (count($where) != 0) {
$wh = 'WHERE '.implode(' AND ', $where);
}

View File

@ -12,7 +12,7 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
if (empty($qta)) {
return false;
}
//Info Articolo
$rs_art = $dbo->fetchArray("SELECT * FROM mg_articoli WHERE id='".$idarticolo."'");
@ -79,9 +79,9 @@ function add_movimento_magazzino($idarticolo, $qta, $array = [], $descrizone = '
$movimento = str_replace(['_NAME_', '_TYPE_', '_NUM_'], [$nome, $tipo, $numero], $movimento);
$new = ($qta > 0 ? '+' : '').$qta;
//Movimento il magazzino solo se l'articolo non è un servizio
if($rs_art[0]['servizio']==0){
if ($rs_art[0]['servizio'] == 0) {
// Movimentazione effettiva
if (empty($array['idintervento']) || empty($array['idautomezzo'])) {
$dbo->query('UPDATE mg_articoli SET qta = qta + '.$new.' WHERE id = '.prepare($idarticolo));

View File

@ -7,6 +7,7 @@ $dir = $rs[0]['dir'];
$tipodoc = $rs[0]['descrizione'];
$_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
$_SESSION['superselect']['ddt'] = $dir;
?>
<form action="" class="text-right" method="post" id="form-copy">
@ -17,12 +18,12 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
<form action="" method="post" role="form">
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="update">
<input type="hidden" name="id_record" value="<?php echo $id_record ?>">
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
<!-- INTESTAZIONE -->
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title"><?php echo tr('Intestazione') ?></h3>
<h3 class="panel-title"><?php echo tr('Intestazione'); ?></h3>
</div>
<div class="panel-body">
@ -42,7 +43,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
</div>';
$label = tr('Numero secondario');
} else {
$label = tr('Numero fattura');
$label = tr('Numero fattura');
}
?>
<div class="col-md-3">
@ -109,7 +110,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
<div class="row">
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Tipo fattura'); ?>", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, descrizione FROM co_tipidocumento WHERE dir='<?php echo $dir ?>'", "value": "$idtipodocumento$" ]}
{[ "type": "select", "label": "<?php echo tr('Tipo fattura'); ?>", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, descrizione FROM co_tipidocumento WHERE dir='<?php echo $dir; ?>'", "value": "$idtipodocumento$" ]}
</div>
<div class="col-md-3">
@ -120,7 +121,7 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
$ajaxsource = 'conti-acquisti';
}
?>
{[ "type": "select", "label": "<?php echo tr('Conto'); ?>", "name": "idconto", "required": 1, "value": "$idconto$", "ajax-source": "<?php echo $ajaxsource ?>" ]}
{[ "type": "select", "label": "<?php echo tr('Conto'); ?>", "name": "idconto", "required": 1, "value": "$idconto$", "ajax-source": "<?php echo $ajaxsource; ?>" ]}
</div>
<div class="col-md-3">
@ -191,13 +192,13 @@ $da_pagare = $rs3[0]['da_pagare'];
if (($n2 <= 0 && $records[0]['stato'] == 'Emessa') || $differenza != 0) {
?>
<a class="btn btn-sm btn-primary" href="javascript:;" onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id'] ?>&iddocumento=<?php echo $id_record ?>&dir=<?php echo $dir ?>', 1 );"><i class="fa fa-euro"></i> Aggiungi prima nota...</a><br><br>
<a class="btn btn-sm btn-primary" href="javascript:;" onclick="launch_modal( 'Aggiungi prima nota', '<?php echo $rootdir; ?>/add.php?id_module=<?php echo Modules::get('Prima nota')['id']; ?>&iddocumento=<?php echo $id_record; ?>&dir=<?php echo $dir; ?>', 1 );"><i class="fa fa-euro"></i> <?php echo tr('Aggiungi prima nota'); ?>...</a><br><br>
<?php
}
if ($records[0]['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> 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 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>
<?php
}
?>
@ -206,7 +207,7 @@ if ($records[0]['stato'] == 'Pagato') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura.'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
{[ "type": "number", "label": "<?php echo tr('Sconto incondizionato'); ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura.'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
if ($records[0]['stato'] == 'Emessa') {
echo ', "disabled" : 1';
}
@ -250,14 +251,14 @@ if ($records[0]['stato'] == 'Emessa') {
if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
if ($dir == 'entrata') {
// Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti
$qi = 'SELECT id FROM in_interventi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)";
$interventi = $dbo->fetchNum($qi);
$int_query = 'SELECT COUNT(*) AS tot FROM in_interventi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)";
$interventi = $dbo->fetchArray($int_query)[0]['tot'];
// Se non trovo niente provo a vedere se ce ne sono per clienti terzi
if (empty($interventi)) {
// Lettura interventi non rifiutati, non fatturati e non collegati a preventivi o contratti (clienti terzi)
$qi = 'SELECT id FROM in_interventi WHERE idclientefinale='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)";
$interventi = $dbo->fetchNum($qi);
$int_query = 'SELECT COUNT(*) AS tot FROM in_interventi WHERE idclientefinale='.prepare($records[0]['idanagrafica'])." AND NOT idstatointervento='DENY' AND id NOT IN (SELECT idintervento FROM co_righe_documenti WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_preventivi_interventi WHERE idintervento IS NOT NULL) AND id NOT IN (SELECT idintervento FROM co_righe_contratti WHERE idintervento IS NOT NULL)";
$interventi = $dbo->fetchArray($int_query)[0]['tot'];
}
echo '
@ -266,16 +267,16 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
</a>';
// Lettura preventivi accettati, in attesa di conferma o in lavorazione
$qp = 'SELECT id FROM co_preventivi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione='Accettato' OR descrizione='In lavorazione' OR descrizione='In attesa di conferma')";
$preventivi = $dbo->fetchNum($qp);
$prev_query = 'SELECT COUNT(*) AS tot FROM co_preventivi WHERE idanagrafica='.prepare($records[0]['idanagrafica'])." AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione='Accettato' OR descrizione='In lavorazione' OR descrizione='In attesa di conferma')";
$preventivi = $dbo->fetchArray($prev_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($preventivi) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_preventivo.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi preventivo" data-target="#bs-popup">
<i class="fa fa-plus"></i> Preventivo
</a>';
// Lettura contratti accettati, in attesa di conferma o in lavorazione
$qc = 'SELECT id FROM co_contratti WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE NOT idcontratto=NULL) AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND NOT EXISTS (SELECT id FROM co_righe_documenti WHERE co_righe_documenti.idcontratto = co_contratti.id)';
$contratti = $dbo->fetchNum($qc);
$contr_query = 'SELECT COUNT(*) AS tot FROM co_contratti WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND id NOT IN (SELECT idcontratto FROM co_righe_documenti WHERE NOT idcontratto=NULL) AND idstato IN( SELECT id FROM co_staticontratti WHERE fatturabile = 1) AND NOT EXISTS (SELECT id FROM co_righe_documenti WHERE co_righe_documenti.idcontratto = co_contratti.id)';
$contratti = $dbo->fetchArray($contr_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($contratti) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_contratto.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi contratto" data-target="#bs-popup">
@ -283,8 +284,8 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
</a>';
// Lettura ddt
$qd = 'SELECT id FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt = $dbo->fetchNum($qd);
$ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idanagrafica='.prepare($records[0]['idanagrafica']).' AND idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Bozza\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir='.prepare($dir).') AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($ddt) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_ddt.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi ddt" data-target="#bs-popup">
<i class="fa fa-plus"></i> Ddt
@ -292,7 +293,12 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
}
// Lettura articoli
$articoli = $dbo->fetchNum('SELECT * FROM mg_articoli WHERE qta > 0');
$art_query = 'SELECT COUNT(*) AS tot FROM mg_articoli WHERE attivo = 1';
if ($dir == 'entrata') {
$art_query .= ' AND (qta > 0 OR servizio = 1)';
}
$articoli = $dbo->fetchArray($art_query)[0]['tot'];
echo '
<a class="btn btn-sm btn-primary'.(!empty($articoli) ? '' : ' disabled').'" data-href="'.$rootdir.'/modules/fatture/add_articolo.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi articolo" data-target="#bs-popup">
<i class="fa fa-plus"></i> Articolo
@ -302,7 +308,7 @@ if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa') {
<a class="btn btn-sm btn-primary" data-href="'.$rootdir.'/modules/fatture/add_riga.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi riga" data-target="#bs-popup">
<i class="fa fa-plus"></i> Riga generica
</a>';
echo '
<a class="btn btn-sm btn-primary" data-href="'.$rootdir.'/modules/fatture/add_descrizione.php?id_module='.$id_module.'&id_record='.$id_record.'" data-toggle="modal" data-title="Aggiungi descrizione" data-target="#bs-popup">
<i class="fa fa-plus"></i> Descrizione
@ -341,11 +347,11 @@ if ($dir == 'entrata') {
} else {
if ($records[0]['descrizione_tipodoc'] == 'Fattura accompagnatoria di vendita') {
?>
<a class="btn btn-info btn-sm pull-right" href="<?php echo $rootdir ?>/pdfgen.php?ptype=fatture_accompagnatorie&iddocumento=<?php echo $id_record ?>" target="_blank"><i class="fa fa-print"></i> Stampa fattura</a>
<a class="btn btn-info btn-sm pull-right" href="<?php echo $rootdir; ?>/pdfgen.php?ptype=fatture_accompagnatorie&iddocumento=<?php echo $id_record; ?>" target="_blank"><i class="fa fa-print"></i> Stampa fattura</a>
<?php
} else {
?>
<a class="btn btn-info btn-sm pull-right" href="<?php echo $rootdir ?>/pdfgen.php?ptype=fatture&iddocumento=<?php echo $id_record ?>" target="_blank"><i class="fa fa-print"></i> Stampa fattura</a>
<a class="btn btn-info btn-sm pull-right" href="<?php echo $rootdir; ?>/pdfgen.php?ptype=fatture&iddocumento=<?php echo $id_record; ?>" target="_blank"><i class="fa fa-print"></i> Stampa fattura</a>
<?php
}
}
@ -368,7 +374,7 @@ include $docroot.'/modules/fatture/row-list.php';
</div>
</div>
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module ?>", "id_record": "<?php echo $id_record ?>" )}
{( "name": "filelist_and_upload", "id_module": "<?php echo $id_module; ?>", "id_record": "<?php echo $id_record; ?>" )}
<script type="text/javascript">
$('#idanagrafica').change( function(){