Miglioramento evasione quantità per Note

This commit is contained in:
Dasc3er 2021-03-29 10:07:35 +02:00
parent ca15c2cfff
commit 681d3e734f
2 changed files with 56 additions and 15 deletions

View File

@ -189,6 +189,34 @@ trait RelationTrait
return $result;
}
/**
* Modifica la quantità del componente.
* Se la fattura è una Nota di credito/debito, risale al secondo livello di origine del componente e corregge di conseguenza le quantità evase.
*
* @param float $value
*
* @return float
*/
public function setQtaAttribute($value)
{
list($qta, $diff) = $this->parseQta($value);
parent::setQtaAttribute($value);
if ($this->fattura->isNota() && $this->hasOriginalComponent()) {
$source = $this->getOriginalComponent();
// Aggiornamento della quantità evasa di origine
if ($source->hasOriginalComponent()) {
$target = $source->getOriginalComponent();
$target->qta_evasa -= $diff;
$target->save();
}
}
return $diff;
}
/**
* Effettua i conti per la Rivalsa INPS.
*/

View File

@ -115,21 +115,8 @@ abstract class Component extends Model
*/
public function setQtaAttribute($value)
{
$previous = $this->qta;
$diff = $value - $previous;
// Controlli su eventuale massimo per la quantità
if ($this->hasOriginalComponent()) {
$original = $this->getOriginalComponent();
// Controllo per evitare di superare la quantità totale del componente di origine
if ($original->qta_rimanente < $diff) {
$diff = $original->qta_rimanente;
$value = $previous + $diff;
}
}
$this->attributes['qta'] = $value;
list($qta, $diff) = $this->parseQta($value);
$this->attributes['qta'] = $qta;
// Aggiornamento della quantità evasa di origine
if ($this->hasOriginalComponent()) {
@ -363,6 +350,32 @@ abstract class Component extends Model
return $new;
}
/**
* Verifica e calcola quantità e differenziale delle quantità.
*
* @param $value
*
* @return array [nuova quantità, differenza rispetto alla quantità precedente]
*/
protected function parseQta($value)
{
$previous = $this->qta;
$diff = $value - $previous;
// Controlli su eventuale massimo per la quantità
if ($this->hasOriginalComponent()) {
$original = $this->getOriginalComponent();
// Controllo per evitare di superare la quantità totale del componente di origine
if ($original->qta_rimanente < $diff) {
$diff = $original->qta_rimanente;
$value = $previous + $diff;
}
}
return [$value, $diff];
}
/**
* Azione personalizzata per la copia dell'oggetto (inizializzazione della copia).
*