Fix #449 e miglioramenti vari

This commit is contained in:
Thomas Zilio 2019-01-25 12:41:26 +01:00
parent 23723bd6e0
commit 3c5cdbb931
4 changed files with 48 additions and 30 deletions

View File

@ -111,7 +111,7 @@ Monolog\ErrorHandler::register($logger, [], Monolog\Logger::ERROR, Monolog\Logge
// Aggiunta di Monolog a Whoops // Aggiunta di Monolog a Whoops
if (App::debug()) { if (App::debug()) {
$whoops->pushHandler(function (\Whoops\Exception\ErrorException $exception, $inspector, $run) use ($logger) { $whoops->pushHandler(function ($exception, $inspector, $run) use ($logger) {
$logger->addError($exception->getMessage(), [ $logger->addError($exception->getMessage(), [
'code' => $exception->getCode(), 'code' => $exception->getCode(),
'message' => $exception->getMessage(), 'message' => $exception->getMessage(),

View File

@ -96,32 +96,6 @@ abstract class Article extends Row
return $this->belongsTo(Original::class, 'idarticolo'); return $this->belongsTo(Original::class, 'idarticolo');
} }
public function copiaIn(Document $document)
{
$class = get_class($document);
$namespace = implode('\\', explode('\\', $class, -1));
$current = get_class($this);
$pieces = explode('\\', $current);
$type = end($pieces);
$object = $namespace.'\\Components\\'.$type;
$attributes = $this->getAttributes();
unset($attributes['id']);
$model = $object::build($document, $this->articolo);
$model->save();
$model = $object::find($model->id);
$accepted = $model->getAttributes();
$attributes = array_intersect_key($attributes, $accepted);
$model->fill($attributes);
return $model;
}
protected static function boot() protected static function boot()
{ {
parent::boot(true); parent::boot(true);
@ -169,4 +143,9 @@ abstract class Article extends Row
return true; return true;
} }
protected function customCopiaIn($original)
{
$this->articolo()->associate($original->articolo);
}
} }

View File

@ -23,6 +23,11 @@ abstract class Description extends Model
return $model; return $model;
} }
/**
* Imposta il proprietario dell'oggetto e l'ordine relativo all'interno delle righe.
*
* @param Document $document
*/
public function setParent(Document $document) public function setParent(Document $document)
{ {
$this->parent()->associate($document); $this->parent()->associate($document);
@ -35,8 +40,17 @@ abstract class Description extends Model
$this->save(); $this->save();
} }
public function copiaIn(Document $document) /**
* Copia l'oggetto (articolo, riga, descrizione) nel corrispettivo per il documento indicato.
*
* @param Document $document
* @param float|null $qta
*
* @return self
*/
public function copiaIn(Document $document, $qta = null)
{ {
// Individuazione classe di destinazione
$class = get_class($document); $class = get_class($document);
$namespace = implode('\\', explode('\\', $class, -1)); $namespace = implode('\\', explode('\\', $class, -1));
@ -46,18 +60,34 @@ abstract class Description extends Model
$object = $namespace.'\\Components\\'.$type; $object = $namespace.'\\Components\\'.$type;
// Attributi dell'oggetto da copiare
$attributes = $this->getAttributes(); $attributes = $this->getAttributes();
unset($attributes['id']); unset($attributes['id']);
$model = $object::build($document); if ($qta !== null) {
$attributes['qta'] = $qta;
}
// Creazione del nuovo oggetto
$model = new $object();
$model->setParent($document);
$model->customCopiaIn($this);
$model->save(); $model->save();
// Impostazione degli attributi
$model = $object::find($model->id); $model = $object::find($model->id);
$accepted = $model->getAttributes(); $accepted = $model->getAttributes();
$attributes = array_intersect_key($attributes, $accepted); $attributes = array_intersect_key($attributes, $accepted);
$model->fill($attributes); $model->fill($attributes);
$model->save();
// Rimozione quantità evasa
$this->qta_evasa = $this->qta_evasa + $attributes['qta'];
return $model; return $model;
} }
@ -65,6 +95,15 @@ abstract class Description extends Model
abstract public function getParentID(); abstract public function getParentID();
/**
* Azione personalizzata per la copia dell'oggetto.
*
* @param $original
*/
protected function customCopiaIn($original)
{
}
protected static function boot($bypass = false) protected static function boot($bypass = false)
{ {
parent::boot(); parent::boot();

View File

@ -444,7 +444,7 @@ switch (post('op')) {
if (!empty(post('import'))) { if (!empty(post('import'))) {
// Replicazione delle righe del contratto sul documento // Replicazione delle righe del contratto sul documento
$righe = $dbo->fetchArray('SELECT idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, IFNULL( (SELECT mg_articoli.abilita_serial FROM mg_articoli WHERE mg_articoli.id=co_righe_contratti.idarticolo), 0 ) AS abilita_serial FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto)); $righe = $dbo->fetchArray('SELECT *, IFNULL( (SELECT mg_articoli.abilita_serial FROM mg_articoli WHERE mg_articoli.id=co_righe_contratti.idarticolo), 0 ) AS abilita_serial FROM co_righe_contratti WHERE idcontratto='.prepare($idcontratto));
foreach ($righe as $key => $riga) { foreach ($righe as $key => $riga) {
$subtot = $riga['subtotale']; $subtot = $riga['subtotale'];