|
330 | 330 | break; |
331 | 331 |
|
332 | 332 | case 'serial-articolo': |
| 333 | + // Query per selezionare i serial disponibili in magazzino |
| 334 | + // Un serial è disponibile se l'ultimo movimento cronologico è dir='uscita' (articolo entrato in magazzino) |
333 | 335 | $query = 'SELECT serial AS id, serial AS descrizione FROM mg_prodotti |where|'; |
334 | 336 |
|
335 | 337 | foreach ($elements as $element) { |
|
342 | 344 |
|
343 | 345 | $where[] = 'mg_prodotti.id_articolo='.prepare($superselect['idarticolo']); |
344 | 346 | $where[] = 'mg_prodotti.dir=\'uscita\''; |
345 | | - $where[] = 'mg_prodotti.id=(SELECT MAX(id) FROM mg_prodotti AS prodotti WHERE prodotti.id_articolo=mg_prodotti.id_articolo AND prodotti.serial=mg_prodotti.serial)'; |
346 | | - // Escludi i serial già venduti, considerando la data di carico effettiva (DDT se esiste, altrimenti fattura) |
347 | | - $where[] = 'mg_prodotti.serial NOT IN ( |
348 | | - SELECT DISTINCT vendite.serial |
349 | | - FROM mg_prodotti AS vendite |
350 | | - INNER JOIN co_righe_documenti AS riga_vendita ON vendite.id_riga_documento = riga_vendita.id |
351 | | - INNER JOIN co_documenti AS doc_vendita ON riga_vendita.iddocumento = doc_vendita.id |
352 | | - WHERE vendite.dir = \'entrata\' |
353 | | - AND vendite.id_articolo = mg_prodotti.id_articolo |
354 | | - AND vendite.serial IS NOT NULL |
355 | | - AND doc_vendita.data >= COALESCE( |
356 | | - ( |
357 | | - SELECT MIN(ddt.data) |
358 | | - FROM mg_prodotti AS acquisti_ddt |
359 | | - INNER JOIN dt_righe_ddt AS riga_ddt ON acquisti_ddt.id_riga_ddt = riga_ddt.id |
360 | | - INNER JOIN dt_ddt AS ddt ON riga_ddt.idddt = ddt.id |
361 | | - WHERE acquisti_ddt.serial = mg_prodotti.serial |
362 | | - AND acquisti_ddt.id_articolo = mg_prodotti.id_articolo |
363 | | - AND acquisti_ddt.dir = \'uscita\' |
364 | | - ), |
365 | | - ( |
366 | | - SELECT MIN(doc_acquisto.data) |
367 | | - FROM mg_prodotti AS acquisti_fat |
368 | | - INNER JOIN co_righe_documenti AS riga_acquisto ON acquisti_fat.id_riga_documento = riga_acquisto.id |
369 | | - INNER JOIN co_documenti AS doc_acquisto ON riga_acquisto.iddocumento = doc_acquisto.id |
370 | | - WHERE acquisti_fat.serial = mg_prodotti.serial |
371 | | - AND acquisti_fat.id_articolo = mg_prodotti.id_articolo |
372 | | - AND acquisti_fat.dir = \'uscita\' |
373 | | - AND acquisti_fat.id_riga_ddt IS NULL |
374 | | - ) |
375 | | - ) |
| 347 | + |
| 348 | + $where[] = 'mg_prodotti.id = ( |
| 349 | + SELECT m.id |
| 350 | + FROM mg_prodotti AS m |
| 351 | + LEFT JOIN co_righe_documenti rd ON rd.id = m.id_riga_documento |
| 352 | + LEFT JOIN co_documenti doc ON doc.id = rd.iddocumento |
| 353 | + LEFT JOIN dt_righe_ddt rdt ON rdt.id = m.id_riga_ddt |
| 354 | + LEFT JOIN dt_ddt ddt ON ddt.id = rdt.idddt |
| 355 | + LEFT JOIN or_righe_ordini ro ON ro.id = m.id_riga_ordine |
| 356 | + LEFT JOIN or_ordini ord ON ord.id = ro.idordine |
| 357 | + WHERE m.id_articolo = mg_prodotti.id_articolo |
| 358 | + AND m.serial = mg_prodotti.serial |
| 359 | + ORDER BY COALESCE(doc.data, ddt.data, ord.data, m.created_at) DESC, m.id DESC |
| 360 | + LIMIT 1 |
376 | 361 | )'; |
377 | 362 |
|
378 | 363 | if (!empty($search)) { |
|
0 commit comments