Fix aggiunta articoli con quantità negativa in ordini cliente

This commit is contained in:
Pek5892 2023-04-28 12:31:31 +02:00
parent 4a6b2f759e
commit 39c8ca17fc
1 changed files with 64 additions and 59 deletions

View File

@ -627,74 +627,79 @@ switch (post('op')) {
$originale = ArticoloOriginale::find($id_articolo); $originale = ArticoloOriginale::find($id_articolo);
$articolo = Articolo::build($ordine, $originale); if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') {
$qta = 1; $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->descrizione = $originale->descrizione;
$articolo->um = $originale->um; $articolo->um = $originale->um;
$articolo->qta = 1; $articolo->qta = 1;
$articolo->costo_unitario = $originale->prezzo_acquisto; $articolo->costo_unitario = $originale->prezzo_acquisto;
if ($dir == 'entrata') { if ($dir == 'entrata') {
$id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita'); $id_iva = ($ordine->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
} else { } else {
$id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita')); $id_iva = ($ordine->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
} }
$id_anagrafica = $ordine->idanagrafica; $id_anagrafica = $ordine->idanagrafica;
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
// CALCOLO PREZZO UNITARIO // CALCOLO PREZZO UNITARIO
$prezzo_unitario = 0; $prezzo_unitario = 0;
$sconto = 0; $sconto = 0;
// Prezzi netti clienti / listino fornitore // Prezzi netti clienti / listino fornitore
$prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
FROM mg_prezzi_articoli FROM mg_prezzi_articoli
WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
if ($prezzi) { if ($prezzi) {
foreach ($prezzi as $prezzo) { foreach ($prezzi as $prezzo) {
if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
$prezzo_unitario = $prezzo['prezzo_unitario']; $prezzo_unitario = $prezzo['prezzo_unitario'];
$sconto = $prezzo['sconto_percentuale']; $sconto = $prezzo['sconto_percentuale'];
continue; 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) { if ($listino) {
$prezzo_unitario = $prezzo['prezzo_unitario']; $prezzo_unitario = $listino['prezzo_unitario_listino'];
$sconto = $prezzo['sconto_percentuale']; $sconto = $listino['sconto_percentuale_listino'];
continue;
} }
} }
} if ($dir == 'entrata') {
if (empty($prezzo_unitario)) { $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
// Prezzi listini clienti } else {
$listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
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') { $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default'];
$prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
} else { $articolo->confermato = ($dir = 'entrata' ? setting('Conferma automaticamente le quantità negli ordini cliente') : setting('Conferma automaticamente le quantità negli ordini fornitore'));
$prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto; $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
} $articolo->setSconto($sconto, 'PRC');
$articolo->setProvvigione($provvigione ?: 0, 'PRC');
$provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default']; $articolo->save();
$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 { } else {
$response['error'] = tr('Nessun articolo corrispondente a magazzino'); $response['error'] = tr('Nessun articolo corrispondente a magazzino');
echo json_encode($response); echo json_encode($response);