Skip to content

Commit 5deab37

Browse files
committed
fix: gestione evasione seriali rientrati a magazzino tramite nota di credito
1 parent 2aba9bf commit 5deab37

1 file changed

Lines changed: 16 additions & 31 deletions

File tree

modules/articoli/ajax/select.php

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@
330330
break;
331331

332332
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)
333335
$query = 'SELECT serial AS id, serial AS descrizione FROM mg_prodotti |where|';
334336

335337
foreach ($elements as $element) {
@@ -342,37 +344,20 @@
342344

343345
$where[] = 'mg_prodotti.id_articolo='.prepare($superselect['idarticolo']);
344346
$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
376361
)';
377362

378363
if (!empty($search)) {

0 commit comments

Comments
 (0)