|
340 | 340 |
|
341 | 341 | case 'serial-articolo': |
342 | 342 | // Query per selezionare i serial disponibili in magazzino |
343 | | - // Un serial è disponibile se l'ultimo movimento cronologico è dir='uscita' (articolo entrato in magazzino) |
344 | | - $query = 'SELECT serial AS id, serial AS descrizione FROM mg_prodotti |where|'; |
| 343 | + // Un serial è disponibile se il suo ultimo movimento cronologico ha dir='uscita' |
| 344 | + $data_movimento = "COALESCE(`co_documenti`.`data`, `dt_ddt`.`data`, `or_ordini`.`data`, '1000-01-01')"; |
| 345 | + |
| 346 | + $movimenti_seriali = 'SELECT |
| 347 | + `mg_prodotti`.`id`, |
| 348 | + `mg_prodotti`.`id_articolo`, |
| 349 | + `mg_prodotti`.`serial`, |
| 350 | + `mg_prodotti`.`dir`, |
| 351 | + '.$data_movimento.' AS `data_movimento` |
| 352 | + FROM `mg_prodotti` |
| 353 | + LEFT JOIN `co_righe_documenti` ON `mg_prodotti`.`id_riga_documento` = `co_righe_documenti`.`id` |
| 354 | + LEFT JOIN `co_documenti` ON `co_righe_documenti`.`iddocumento` = `co_documenti`.`id` |
| 355 | + LEFT JOIN `dt_righe_ddt` ON `mg_prodotti`.`id_riga_ddt` = `dt_righe_ddt`.`id` |
| 356 | + LEFT JOIN `dt_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` |
| 357 | + LEFT JOIN `or_righe_ordini` ON `mg_prodotti`.`id_riga_ordine` = `or_righe_ordini`.`id` |
| 358 | + LEFT JOIN `or_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` |
| 359 | + WHERE `mg_prodotti`.`serial` IS NOT NULL'; |
| 360 | + |
| 361 | + $query = 'SELECT `seriali_disponibili`.`serial` AS id, `seriali_disponibili`.`serial` AS descrizione |
| 362 | + FROM ( |
| 363 | + SELECT |
| 364 | + `movimenti`.`id_articolo`, |
| 365 | + `movimenti`.`serial`, |
| 366 | + SUBSTRING_INDEX(GROUP_CONCAT(`movimenti`.`dir` ORDER BY `movimenti`.`data_movimento` DESC, `movimenti`.`id` DESC), ",", 1) AS `ultimo_dir` |
| 367 | + FROM ('.$movimenti_seriali.') AS `movimenti` |
| 368 | + GROUP BY `movimenti`.`id_articolo`, `movimenti`.`serial` |
| 369 | + ) AS `seriali_disponibili` |
| 370 | + |where| |
| 371 | + ORDER BY `seriali_disponibili`.`serial` ASC'; |
345 | 372 |
|
346 | 373 | foreach ($elements as $element) { |
347 | | - $filter[] = 'serial='.prepare($element); |
| 374 | + $filter[] = '`seriali_disponibili`.`serial`='.prepare($element); |
348 | 375 | } |
349 | 376 |
|
| 377 | + $where[] = '`seriali_disponibili`.`id_articolo`='.prepare($superselect['idarticolo']); |
| 378 | + |
350 | 379 | if (!empty($filter)) { |
351 | | - $query .= ' OR (('.implode(' OR ', $filter).') AND mg_prodotti.dir=\'entrata\')'; |
| 380 | + $where[] = '(`seriali_disponibili`.`ultimo_dir`=\'uscita\' OR ('.implode(' OR ', $filter).'))'; |
| 381 | + } else { |
| 382 | + $where[] = '`seriali_disponibili`.`ultimo_dir`=\'uscita\''; |
352 | 383 | } |
353 | 384 |
|
354 | | - $where[] = 'mg_prodotti.id_articolo='.prepare($superselect['idarticolo']); |
355 | | - $where[] = 'mg_prodotti.dir=\'uscita\''; |
356 | | - |
357 | | - $where[] = 'mg_prodotti.id = ( |
358 | | - SELECT m.id |
359 | | - FROM mg_prodotti AS m |
360 | | - LEFT JOIN co_righe_documenti rd ON rd.id = m.id_riga_documento |
361 | | - LEFT JOIN co_documenti doc ON doc.id = rd.iddocumento |
362 | | - LEFT JOIN dt_righe_ddt rdt ON rdt.id = m.id_riga_ddt |
363 | | - LEFT JOIN dt_ddt ddt ON ddt.id = rdt.idddt |
364 | | - LEFT JOIN or_righe_ordini ro ON ro.id = m.id_riga_ordine |
365 | | - LEFT JOIN or_ordini ord ON ord.id = ro.idordine |
366 | | - WHERE m.id_articolo = mg_prodotti.id_articolo |
367 | | - AND m.serial = mg_prodotti.serial |
368 | | - ORDER BY COALESCE(doc.data, ddt.data, ord.data, m.created_at) DESC, m.id DESC |
369 | | - LIMIT 1 |
370 | | - )'; |
371 | | - |
372 | 385 | if (!empty($search)) { |
373 | | - $search_fields[] = '`mg_prodotti`.`serial` LIKE '.prepare('%'.$search.'%'); |
| 386 | + $search_fields[] = '`seriali_disponibili`.`serial` LIKE '.prepare('%'.$search.'%'); |
374 | 387 | } |
375 | 388 |
|
376 | 389 | break; |
|
0 commit comments