1
0
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:
valentina
2025-05-23 15:17:12 +02:00
parent 79962cd12c
commit 3603d2914b
2 changed files with 109 additions and 7 deletions

View File

@@ -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();
}
}
}
}
}
}

View File

@@ -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')) {