mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-06-05 22:09:38 +02:00
fix: 1518 Bug cambio di stato automatico documenti
This commit is contained in:
@@ -222,25 +222,89 @@ class DDT extends Document
|
||||
$qta_evasa = $righe->sum('qta_evasa');
|
||||
$parziale = $qta != $qta_evasa;
|
||||
|
||||
$fatture_collegate = database()->table('co_righe_documenti')
|
||||
->where('idddt', $this->id)
|
||||
->join('co_documenti', 'co_righe_documenti.iddocumento', '=', 'co_documenti.id')
|
||||
->count();
|
||||
|
||||
$qta_fatturate = 0;
|
||||
$parziale_fatturato = true;
|
||||
$fattura = Fattura::find($trigger->iddocumento);
|
||||
if (!empty($fattura)) {
|
||||
$righe_fatturate = $fattura->getRighe()->where('idddt', '=', $this->id);
|
||||
$righe_fatturate = $fattura->getRighe()->where('idddt', $this->id);
|
||||
$qta_fatturate = $righe_fatturate->sum('qta');
|
||||
$parziale_fatturato = $qta != $qta_fatturate;
|
||||
}
|
||||
|
||||
$collegato_a_ordine = false;
|
||||
foreach ($righe as $riga) {
|
||||
if (!empty($riga->original_id) && !empty($riga->original_type) && strpos($riga->original_type, 'Ordini') !== false) {
|
||||
$collegato_a_ordine = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
if ($qta_evasa == 0) {
|
||||
if ($qta_evasa == 0 && !$collegato_a_ordine) {
|
||||
$descrizione = 'Bozza';
|
||||
} elseif (empty($qta_fatturate)) {
|
||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||
} else {
|
||||
} elseif ($fatture_collegate > 0) {
|
||||
$descrizione = $parziale_fatturato ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
} else {
|
||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||
}
|
||||
|
||||
$stato = Stato::where('name', $descrizione)->first()->id;
|
||||
$this->stato()->associate($stato);
|
||||
$this->save();
|
||||
|
||||
if ($descrizione == 'Fatturato' || $descrizione == 'Parzialmente fatturato') {
|
||||
$this->aggiornaStatiOrdiniCollegati();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Aggiorna lo stato degli ordini collegati a questo DDT.
|
||||
* Quando il DDT passa a "Fatturato" o "Parzialmente fatturato", anche gli ordini collegati
|
||||
* devono passare a "Fatturato" o "Parzialmente fatturato".
|
||||
*/
|
||||
public function aggiornaStatiOrdiniCollegati()
|
||||
{
|
||||
$righe_ddt = $this->getRighe();
|
||||
|
||||
foreach ($righe_ddt as $riga_ddt) {
|
||||
if (!empty($riga_ddt->original_id) && !empty($riga_ddt->original_type) && strpos($riga_ddt->original_type, 'Ordini') !== false) {
|
||||
$riga_ordine = $riga_ddt->getOriginalComponent();
|
||||
|
||||
if (!empty($riga_ordine)) {
|
||||
$ordine = $riga_ordine->getDocument();
|
||||
|
||||
if (!empty($ordine)) {
|
||||
$fatture_collegate = database()->table('co_righe_documenti')
|
||||
->where('idddt', $this->id)
|
||||
->join('co_documenti', 'co_righe_documenti.iddocumento', '=', 'co_documenti.id')
|
||||
->count();
|
||||
|
||||
if ($fatture_collegate > 0) {
|
||||
$righe_ordine = $ordine->getRighe();
|
||||
$qta = $righe_ordine->sum('qta');
|
||||
$qta_evasa = $righe_ordine->sum('qta_evasa');
|
||||
$parziale = $qta != $qta_evasa;
|
||||
|
||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
|
||||
if (database()->isConnected() && database()->tableExists('or_statiordine_lang')) {
|
||||
$stato = \Modules\Ordini\Stato::where('name', $descrizione)->first()->id;
|
||||
} else {
|
||||
$stato = \Modules\Ordini\Stato::where('descrizione', $descrizione)->first()->id;
|
||||
}
|
||||
|
||||
$ordine->stato()->associate($stato);
|
||||
$ordine->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -170,13 +170,51 @@ class Ordine extends Document
|
||||
$stato_attuale = $this->stato;
|
||||
$nome_stato = (database()->isConnected() && database()->tableExists('or_statiordine_lang') ? $stato_attuale->getTranslation('title', \Models\Locale::getPredefined()->id) : $stato_attuale->descrizione);
|
||||
|
||||
$righe_fatturate = $righe->where('qta_evasa', '>', 0);
|
||||
$qta_fatturate = 0;
|
||||
$fatture_collegate_totali = 0;
|
||||
|
||||
foreach ($righe_fatturate as $riga) {
|
||||
$fatture_collegate = database()->table('co_righe_documenti')
|
||||
->where('original_id', $riga->id)
|
||||
->where('original_type', get_class($riga))
|
||||
->join('co_documenti', 'co_righe_documenti.iddocumento', '=', 'co_documenti.id')
|
||||
->count();
|
||||
|
||||
$fatture_collegate_totali += $fatture_collegate;
|
||||
|
||||
if ($fatture_collegate > 0) {
|
||||
$qta_fatturate += $riga->qta;
|
||||
}
|
||||
}
|
||||
|
||||
$parziale_fatturato = $qta != $qta_fatturate;
|
||||
|
||||
// Impostazione del nuovo stato
|
||||
if ($qta_evasa == 0) {
|
||||
$descrizione = 'Accettato';
|
||||
} elseif (!in_array($nome_stato, ['Parzialmente fatturato', 'Fatturato']) && $trigger->getDocument() instanceof DDT) {
|
||||
} elseif ($trigger->getDocument() instanceof \Modules\Fatture\Fattura) {
|
||||
$descrizione = $parziale_fatturato ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
} elseif ($trigger->getDocument() instanceof \Modules\DDT\DDT) {
|
||||
$ddt = $trigger->getDocument();
|
||||
$fatture_ddt = database()->table('co_righe_documenti')
|
||||
->where('idddt', $ddt->id)
|
||||
->join('co_documenti', 'co_righe_documenti.iddocumento', '=', 'co_documenti.id')
|
||||
->count();
|
||||
|
||||
if ($fatture_ddt > 0) {
|
||||
$descrizione = $parziale_fatturato ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
} else {
|
||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||
}
|
||||
} elseif ($fatture_collegate_totali > 0) {
|
||||
$descrizione = $parziale_fatturato ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
} elseif (in_array($nome_stato, ['Parzialmente fatturato', 'Fatturato'])) {
|
||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||
} elseif ($qta_evasa > 0) {
|
||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||
} else {
|
||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||
$descrizione = $nome_stato;
|
||||
}
|
||||
|
||||
if (database()->isConnected() && database()->tableExists('or_statiordine_lang')) {
|
||||
|
Reference in New Issue
Block a user