diff --git a/modules/articoli/widgets/stampa_inventario.php b/modules/articoli/widgets/stampa_inventario.php new file mode 100755 index 000000000..665f3fdcd --- /dev/null +++ b/modules/articoli/widgets/stampa_inventario.php @@ -0,0 +1,31 @@ +fetchOne('SELECT zz_prints.id FROM zz_prints INNER JOIN zz_modules ON zz_prints.id_module=zz_modules.id WHERE zz_modules.name="Articoli" AND zz_prints.name="Inventario magazzino"')['id']; + +echo ' +
+ +
+ +
+ {[ "type": "select", "label": "'.tr('Articoli da stampare').'", "name": "tipo", "required": "1", "values": "list=\"full\": \"'.tr('Tutti').'\", \"nozero\": \"'.tr('Solo esistenti').'\"", "value": "nozero" ]} +
+ +
+

 

+ + +
+ +
+ +
+ +'; diff --git a/templates/magazzino_inventario/body.php b/templates/magazzino_inventario/body.php index 074de9eeb..1ec8be6d2 100755 --- a/templates/magazzino_inventario/body.php +++ b/templates/magazzino_inventario/body.php @@ -1,70 +1,43 @@ $_GET['search_codice'], - 'descrizione' => $_GET['search_descrizione'], - 'categoria' => $_GET['search_categoria'], - 'subcategoria' => $_GET['search_subcategoria'], - 'tipo' => $_GET['search_tipo'], - 'fornitore' => $_GET['search_fornitore'], - 'barcode' => $_GET['search_barcode'], -]; +$where['servizio'] = '0'; -foreach ($search as $name => $value) { - if ($value == 'undefined') { - $search[$name] = null; +foreach( $_SESSION['module_'.$id_module] as $name => $value ){ + if( preg_match('/^search_(.+?)$/', $name, $m) ){ + $where[ $m[1] ] = $value; } } -$search['tipo'] = $search['tipo'] ?: 'solo prodotti attivi'; - -// Filtri effettivi -$where = [ - 'deleted_at IS NULL', - 'servizio = 0', -]; -if ($search['tipo'] == 'solo prodotti attivi') { - $where[] = 'attivo = 1'; -} elseif ($search['tipo'] == 'solo prodotti non attivi') { - $where[] = 'attivo = 0'; -} - -if (!empty($search['codice'])) { - $where[] = "(REPLACE(codice, '.', '') LIKE ".prepare('%'.$search['codice'].'%').' OR codice LIKE '.prepare('%'.$search['codice'].'%').')'; -} - -if (!empty($search['descrizione'])) { - $where[] .= "REPLACE(descrizione, '.', '') LIKE ".prepare('%'.$search['descrizione'].'%'); -} - -if (!empty($search['categoria'])) { - $where[] = 'id_categoria IN (SELECT id FROM mg_categorie WHERE nome LIKE '.prepare('%'.$search['categoria'].'%').' AND parent IS NULL)'; -} - -if (!empty($search['subcategoria'])) { - $where[] = 'id_sottocategoria IN (SELECT id FROM mg_categorie WHERE nome LIKE '.prepare('%'.$search['subcategoria'].'%').' AND parent NOT NULL)'; -} - -if (!empty($search['fornitore'])) { - $where[] = 'id_fornitore IN (SELECT idanagrafica FROM an_anagrafiche WHERE ragione_sociale LIKE '.prepare('%'.$search['fornitore'].'%').')'; -} - -if (!empty($search['barcode'])) { - $where[] = "(REPLACE(barcode, '.', '') LIKE ".prepare('%'.$search['barcode'].'%').' OR barcode LIKE '.prepare('%'.$search['barcode'].'%').')'; -} - $period_end = $_SESSION['period_end']; -$query = 'SELECT *, - (SELECT SUM(qta) FROM mg_movimenti WHERE mg_movimenti.idarticolo=mg_articoli.id AND data <= '.prepare($period_end).') AS qta -FROM mg_articoli LEFT OUTER JOIN (SELECT id, nome FROM mg_categorie) AS categoria ON mg_articoli.id_categoria = categoria.id WHERE 1=1 -ORDER BY codice ASC'; +$structure = Modules::get($id_module); -$query = str_replace('1=1', '1=1'.(!empty($where) ? ' AND '.implode(' AND ', $where) : ''), $query); -$rs = $dbo->fetchArray($query); +// RISULTATI VISIBILI +Util\Query::setSegments(false); +$query = Query::getQuery($structure, $where, 0, []); + +$query = Modules::replaceAdditionals($id_module, $query); + +// Modifiche alla query principale +$query = preg_replace('/ FROM `mg_articoli` /', ' FROM mg_articoli LEFT JOIN (SELECT idarticolo, SUM(qta) AS qta_totale FROM mg_movimenti GROUP BY idarticolo) movimenti ON movimenti.idarticolo=mg_articoli.id ', $query); + +$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.prezzo_acquisto,', $query); +$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.prezzo_vendita,', $query); +$query = preg_replace('/^SELECT /', 'SELECT mg_articoli.um,', $query); +$query = preg_replace('/^SELECT /', 'SELECT movimenti.qta_totale,', $query); + +if (post('tipo') == 'nozero') { + $query = str_replace('2=2', '2=2 AND movimenti.qta_totale > 0', $query); +} + +$data = Query::executeAndCount($query); echo '

'.tr('Inventario al _DATE_', [ @@ -87,16 +60,16 @@ echo ' '; $totali = []; -foreach ($rs as $r) { - $valore_magazzino = $r['prezzo_acquisto'] * $r['qta']; +foreach ($data['results'] as $r) { + $valore_magazzino = $r['prezzo_acquisto'] * $r['qta_totale']; echo ' - '.$r['codice'].' - '.$r['nome'].' - '.$r['descrizione'].' + '.$r['Codice'].' + '.$r['Categoria'].' + '.$r['Descrizione'].' '.moneyFormat($r['prezzo_vendita']).' - '.Translator::numberToLocale($r['qta']).' '.$r['um'].' + '.Translator::numberToLocale($r['qta_totale']).' '.$r['um'].' '.moneyFormat($r['prezzo_acquisto']).' '.moneyFormat($valore_magazzino).' '; @@ -106,7 +79,7 @@ foreach ($rs as $r) { // Totali $totale_acquisto = sum($totali); -$totale_qta = sum(array_column($rs, 'qta')); +$totale_qta = sum(array_column($rs, 'qta_totale')); echo ' diff --git a/update/2_4_14.sql b/update/2_4_14.sql index 3a8a0b033..8b77604f8 100755 --- a/update/2_4_14.sql +++ b/update/2_4_14.sql @@ -510,3 +510,12 @@ ALTER TABLE `co_preventivi` ADD `numero_revision` INT NOT NULL AFTER `default_re -- Riordinamento campi Fatture di vendita UPDATE `zz_views` SET `order` = '11' WHERE `zz_views`.`name` = 'icon_Stato' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di vendita'); + +-- Aggiornamento stampa inventario +UPDATE `zz_widgets` SET `more_link` = './modules/articoli/widgets/stampa_inventario.php', `more_link_type` = 'popup' WHERE `zz_widgets`.`name` = 'Stampa inventario'; + +-- Ottimizzazione query articoli +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_articoli` LEFT OUTER JOIN an_anagrafiche ON mg_articoli.id_fornitore=an_anagrafiche.idanagrafica LEFT OUTER JOIN co_iva ON mg_articoli.idiva_vendita=co_iva.id LEFT OUTER JOIN (SELECT SUM(qta-qta_evasa) AS qta_impegnata, idarticolo FROM or_righe_ordini INNER JOIN or_ordini ON or_righe_ordini.idordine=or_ordini.id WHERE idstatoordine IN(SELECT id FROM or_statiordine WHERE completato=0) GROUP BY idarticolo) a ON a.idarticolo=mg_articoli.id LEFT JOIN mg_categorie ON mg_articoli.id_categoria=mg_categorie.id LEFT JOIN mg_categorie AS sottocategorie ON mg_articoli.id_sottocategoria=sottocategorie.id WHERE 1=1 AND (`mg_articoli`.`deleted_at`) IS NULL HAVING 2=2 ORDER BY `descrizione`' WHERE `zz_modules`.`name` = 'Articoli'; +UPDATE `zz_views` SET `query` = 'mg_categorie.nome' WHERE `zz_views`.`name` = 'Categoria' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'); +UPDATE `zz_views` SET `query` = 'sottocategorie.nome' WHERE `zz_views`.`name` = 'Sottocategoria' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'); +UPDATE `zz_views` SET `query` = 'an_anagrafiche.ragione_sociale' WHERE `zz_views`.`name` = 'Fornitore' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'); \ No newline at end of file