From 39c8ca17fc3e82ba9cd9174594aa8923ed9f120c Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Fri, 28 Apr 2023 12:31:31 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20aggiunta=20articoli=20con=20quantit=C3=A0?= =?UTF-8?q?=20negativa=20in=20ordini=20cliente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ordini/actions.php | 123 +++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 59 deletions(-) diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index 3c9c60a1a..942a5d1eb 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -627,74 +627,79 @@ switch (post('op')) { $originale = ArticoloOriginale::find($id_articolo); - $articolo = Articolo::build($ordine, $originale); - $qta = 1; + if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') { + $response['error'] = tr('Quantità a magazzino non sufficiente'); + echo json_encode($response); + } else { + $articolo = Articolo::build($ordine, $originale); + $qta = 1; - $articolo->descrizione = $originale->descrizione; - $articolo->um = $originale->um; - $articolo->qta = 1; - $articolo->costo_unitario = $originale->prezzo_acquisto; + $articolo->descrizione = $originale->descrizione; + $articolo->um = $originale->um; + $articolo->qta = 1; + $articolo->costo_unitario = $originale->prezzo_acquisto; - if ($dir == 'entrata') { - $id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita'); - } else { - $id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita')); - } - $id_anagrafica = $ordine->idanagrafica; - $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - - // CALCOLO PREZZO UNITARIO - $prezzo_unitario = 0; - $sconto = 0; - // Prezzi netti clienti / listino fornitore - $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario - FROM mg_prezzi_articoli - WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); + if ($dir == 'entrata') { + $id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita'); + } else { + $id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita')); + } + $id_anagrafica = $ordine->idanagrafica; + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + + // CALCOLO PREZZO UNITARIO + $prezzo_unitario = 0; + $sconto = 0; + // Prezzi netti clienti / listino fornitore + $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario + FROM mg_prezzi_articoli + WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); - if ($prezzi) { - foreach ($prezzi as $prezzo) { - if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; + if ($prezzi) { + foreach ($prezzi as $prezzo) { + if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; + } + + if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; + } } + } + if (empty($prezzo_unitario)) { + // Prezzi listini clienti + $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino + FROM mg_listini + LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino + LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino + WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; + if ($listino) { + $prezzo_unitario = $listino['prezzo_unitario_listino']; + $sconto = $listino['sconto_percentuale_listino']; } } - } - if (empty($prezzo_unitario)) { - // Prezzi listini clienti - $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino - FROM mg_listini - LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino - LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino - WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - - if ($listino) { - $prezzo_unitario = $listino['prezzo_unitario_listino']; - $sconto = $listino['sconto_percentuale_listino']; + if ($dir == 'entrata') { + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + } else { + $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto; } - } - if ($dir == 'entrata') { - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); - } else { - $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto; - } - - $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default']; - - $articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore')); - $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); - $articolo->setSconto($sconto, 'PRC'); - $articolo->setProvvigione($provvigione ?: 0, 'PRC'); - $articolo->save(); + + $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default']; + + $articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore')); + $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); + $articolo->setSconto($sconto, 'PRC'); + $articolo->setProvvigione($provvigione ?: 0, 'PRC'); + $articolo->save(); - - flash()->info(tr('Nuovo articolo aggiunto!')); + + flash()->info(tr('Nuovo articolo aggiunto!')); + } } else { $response['error'] = tr('Nessun articolo corrispondente a magazzino'); echo json_encode($response);