1
0
mirror of https://github.com/devcode-it/openstamanager.git synced 2025-01-06 12:56:56 +01:00
openstamanager/src/base/Article.php

86 lines
2.5 KiB
PHP
Raw Normal View History

2018-09-25 16:47:44 +02:00
<?php
namespace Base;
use Modules\Articoli\Articolo as Original;
2018-09-25 17:13:23 +02:00
use Illuminate\Database\Eloquent\Builder;
2018-09-25 16:47:44 +02:00
abstract class Article extends Row
{
2018-09-25 17:13:23 +02:00
protected $serialRowID = 'documento';
2018-09-25 16:47:44 +02:00
abstract public function movimenta($qta);
protected static function boot()
{
2018-09-26 12:06:24 +02:00
parent::boot(true);
2018-09-25 16:47:44 +02:00
static::addGlobalScope('articles', function (Builder $builder) {
$builder->whereNotNull('idarticolo')->where('idarticolo', '<>', 0);
});
}
public static function new(Original $articolo)
{
$model = parent::new();
$model->articolo()->associate($articolo);
$model->descrizione = $articolo->descrizione;
$model->abilita_serial = $articolo->abilita_serial;
$model->um = $articolo->um;
return $model;
}
public function setSerials($serials)
{
database()->sync('mg_prodotti', [
2018-09-25 17:13:23 +02:00
'id_riga_'.$this->serialRowID => $this->id,
2018-09-25 16:47:44 +02:00
'dir' => 'entrata',
'id_articolo' => $this->idarticolo,
], [
'serial' => $serials,
]);
}
2018-09-25 17:13:23 +02:00
public function getSerialsAttribute()
{
if (empty($this->abilita_serial)) {
return [];
}
// Individuazione dei seriali
$list = database()->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_'.$this->serialRowID.' = '.prepare($this->id));
2018-09-26 10:49:38 +02:00
2018-09-25 17:13:23 +02:00
return array_column($list, 'serial');
}
2018-09-25 16:47:44 +02:00
public function setQtaAttribute($value)
{
$previous = $this->qta;
$this->attributes['qta'] = $value;
$diff = $value - $previous;
$this->movimenta($diff);
$database = database();
// Se c'è un collegamento ad un ddt, aggiorno la quantità evasa
if (!empty($this->idddt)) {
$database->query('UPDATE dt_righe_ddt SET qta_evasa = qta_evasa + '.$diff.' WHERE descrizione = '.prepare($this->descrizione).' AND idarticolo = '.prepare($this->idarticolo).' AND idddt = '.prepare($this->idddt).' AND idiva = '.prepare($this->idiva));
}
// Se c'è un collegamento ad un ordine, aggiorno la quantità evasa
if (!empty($this->idordine)) {
$database->query('UPDATE or_righe_ordini SET qta_evasa = qta_evasa + '.$diff.' WHERE descrizione = '.prepare($this->descrizione).' AND idarticolo = '.prepare($this->idarticolo).' AND idordine = '.prepare($this->idordine).' AND idiva = '.prepare($this->idiva));
}
}
public function articolo()
{
return $this->belongsTo(Original::class, 'idarticolo');
}
}