feat: miglioria gestione classe articolo per distinta base
This commit is contained in:
parent
3dedde4675
commit
90ddbe4f10
|
@ -29,6 +29,9 @@ use Modules\Interventi\Components\Articolo as ArticoloIntervento;
|
||||||
use Modules\Iva\Aliquota;
|
use Modules\Iva\Aliquota;
|
||||||
use Plugins\ListinoFornitori\DettaglioFornitore;
|
use Plugins\ListinoFornitori\DettaglioFornitore;
|
||||||
use Traits\RecordTrait;
|
use Traits\RecordTrait;
|
||||||
|
use Modules\Preventivi\Components\Articolo as ArticoloPreventivo;
|
||||||
|
use Models\Plugin;
|
||||||
|
|
||||||
|
|
||||||
class Articolo extends Model
|
class Articolo extends Model
|
||||||
{
|
{
|
||||||
|
@ -82,6 +85,45 @@ class Articolo extends Model
|
||||||
$this->save();
|
$this->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Plugin::where('name', 'Distinta base')->first()->id) {
|
||||||
|
$descrizione_ricorsivo = '';
|
||||||
|
if (!empty($array['reference_type']) && !empty($array['reference_id'])) {
|
||||||
|
$object = new $array['reference_type']();
|
||||||
|
$document = $object::find($array['reference_id']);
|
||||||
|
$dir = $document->direzione;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->componenti->isEmpty() && setting('Produci articoli della distinta base in fase di vendita') && $manuale == false && $dir == 'entrata' && $descrizone != "tr('Produzione articolo')" && $descrizone != "tr('Scomposizione articolo')") {
|
||||||
|
if ($qta < 0) {
|
||||||
|
$descrizione_ricorsivo = tr('Produzione articolo');
|
||||||
|
} else {
|
||||||
|
$descrizione_ricorsivo = tr('Scomposizione articolo');
|
||||||
|
}
|
||||||
|
$this->movimenta(-$qta, $descrizione_ricorsivo, $data, false);
|
||||||
|
$this->movimentaRicorsivo($qta, $descrizione_ricorsivo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->componenti->isEmpty() && setting('Scomponi articolo padre in fase di acquisto') && $manuale == false && $dir == 'uscita' && $descrizone != "tr('Produzione articolo')" && $descrizone != "tr('Scomposizione articolo')") {
|
||||||
|
if ($qta < 0) {
|
||||||
|
$descrizione_ricorsivo = tr('Produzione articolo');
|
||||||
|
} else {
|
||||||
|
$descrizione_ricorsivo = tr('Scomposizione articolo');
|
||||||
|
}
|
||||||
|
$this->movimenta(-$qta, $descrizione_ricorsivo, $data, false);
|
||||||
|
$this->movimentaRicorsivo($qta, $descrizione_ricorsivo);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$this->componenti->isEmpty() && setting('Movimenta gli articoli figlio tramite i movimenti manuali') && $manuale) {
|
||||||
|
if ($qta < 0) {
|
||||||
|
$descrizione_ricorsivo = tr('Produzione articolo');
|
||||||
|
} else {
|
||||||
|
$descrizione_ricorsivo = tr('Scomposizione articolo');
|
||||||
|
}
|
||||||
|
$this->movimenta(-$qta, $descrizione_ricorsivo, $data, false);
|
||||||
|
$this->movimentaRicorsivo($qta, $descrizione_ricorsivo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $id;
|
return $id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,4 +393,133 @@ class Articolo extends Model
|
||||||
{
|
{
|
||||||
return self::$translated_fields;
|
return self::$translated_fields;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @version distinta_base
|
||||||
|
*/
|
||||||
|
public function componenti()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(Articolo::class, 'mg_articoli_distinte', 'id_articolo', 'id_figlio')->withPivot('qta');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function parti()
|
||||||
|
{
|
||||||
|
return $this->belongsToMany(Articolo::class, 'mg_articoli_distinte', 'id_figlio', 'id_articolo')->withPivot('qta');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version distinta_base
|
||||||
|
*/
|
||||||
|
public function triggerChange(Articolo $trigger)
|
||||||
|
{
|
||||||
|
if ($this->sincronizza_prezzo_vendita) {
|
||||||
|
$this->prezzo_vendita = $this->totale_vendita;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->sincronizza_prezzo_acquisto) {
|
||||||
|
$this->prezzo_acquisto = $this->totale_acquisto;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version distinta_base
|
||||||
|
*/
|
||||||
|
public function save(array $attributes = [])
|
||||||
|
{
|
||||||
|
if (Plugin::where('name', 'Distinta base')->first()->id) {
|
||||||
|
// Supporto al plugin Fornitori (prodotto per il coefficiente relativo)
|
||||||
|
if (!$this->componenti->isEmpty()) {
|
||||||
|
if ($this->sincronizza_prezzo_vendita) {
|
||||||
|
$this->prezzo_vendita = $this->totale_vendita;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->sincronizza_prezzo_acquisto) {
|
||||||
|
$this->prezzo_acquisto = $this->totale_acquisto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = parent::save($attributes);
|
||||||
|
|
||||||
|
$parti = $this->parti;
|
||||||
|
foreach ($parti as $parte) {
|
||||||
|
$parte->pivot->qta = 1; // Fix per le quantità inverse
|
||||||
|
$parte->triggerChange($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
} else {
|
||||||
|
return parent::save($attributes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Funzione per inserire i movimenti di magazzino.
|
||||||
|
*
|
||||||
|
* @version distinta_base
|
||||||
|
*
|
||||||
|
* @param null $descrizone
|
||||||
|
* @param null $data
|
||||||
|
* @param bool $manuale
|
||||||
|
* @param array $array
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function movimentaRicorsivo($qta, $descrizone = null, $data = null, $manuale = false, $array = [])
|
||||||
|
{
|
||||||
|
$componenti = $this->componenti;
|
||||||
|
|
||||||
|
$suffix = ' (di.ba.)';
|
||||||
|
$descrizone = str_contains((string) $descrizone, $suffix) ? $descrizone : $descrizone.$suffix;
|
||||||
|
|
||||||
|
foreach ($componenti as $componente) {
|
||||||
|
$qta_componente = $qta * $componente->pivot->qta;
|
||||||
|
$componente->movimenta($qta_componente, $descrizone, $data, $manuale, $array);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTotaleAcquistoAttribute()
|
||||||
|
{
|
||||||
|
$componenti = $this->componenti;
|
||||||
|
$prezzo_acquisto = 0;
|
||||||
|
|
||||||
|
foreach ($componenti as $componente) {
|
||||||
|
$prezzo_acquisto += $componente->prezzo_acquisto * $componente->pivot->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $prezzo_acquisto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTotaleVenditaAttribute()
|
||||||
|
{
|
||||||
|
$componenti = $this->componenti;
|
||||||
|
$prezzo_vendita = 0;
|
||||||
|
|
||||||
|
foreach ($componenti as $componente) {
|
||||||
|
$prezzo_vendita += $componente->prezzo_vendita * $componente->pivot->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $prezzo_vendita;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @version distinta_base
|
||||||
|
*/
|
||||||
|
public function componenti_preventivo($idrigapreventivo = null)
|
||||||
|
{
|
||||||
|
return database()->select('mg_articoli_distinte_preventivi', ['id_figlio', 'qta', 'prezzo_acquisto', 'prezzo_vendita', 'sconto', 'tipo_sconto'], [
|
||||||
|
'idrigapreventivo' => $idrigapreventivo,
|
||||||
|
'id_articolo' => $this->id,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function triggerChangePreventivo($idrigapreventivo)
|
||||||
|
{
|
||||||
|
$riga = ArticoloPreventivo::find($idrigapreventivo);
|
||||||
|
|
||||||
|
$riga->costo_unitario = $riga->totale_acquisto ?: 0;
|
||||||
|
$riga->setPrezzoUnitario($riga->totale_vendita, $riga->idiva);
|
||||||
|
|
||||||
|
$riga->save();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue