mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-19 21:10:49 +01:00
Miglioramenti per Warning PHP
Revisione della gerarchia tra le classi Eloquent. Modifica dei metodi getOriginal e hasOriginal per le righe in getOriginalComponent e hasOriginalComponent per maggiore compatibilità. Correzione del documento per le righe da parent a document. Suddivisione della gestione righe in: Component per gestire le relazioni, Accounting per gestire i prezzi. Separazione di righe, articoli, sconti e descrizioni in classi indipendenti.
This commit is contained in:
parent
19e6a8ac23
commit
1796a02b34
4
core.php
4
core.php
@ -258,8 +258,8 @@ if (!API\Response::isAPIRequest()) {
|
|||||||
$plugin = Plugins::getCurrent();
|
$plugin = Plugins::getCurrent();
|
||||||
$structure = isset($plugin) ? $plugin : $module;
|
$structure = isset($plugin) ? $plugin : $module;
|
||||||
|
|
||||||
$id_module = $module['id'];
|
$id_module = $module ? $module['id'] : null;
|
||||||
$id_plugin = $plugin['id'];
|
$id_plugin = $plugin ? $plugin['id'] : null;
|
||||||
|
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ echo '
|
|||||||
</div>';
|
</div>';
|
||||||
|
|
||||||
$documenti_disponibili = collect();
|
$documenti_disponibili = collect();
|
||||||
$direzione_richiesta = $source->parent->direzione == 'entrata' ? 'uscita' : 'entrata';
|
$direzione_richiesta = $source->getDocument()->direzione == 'entrata' ? 'uscita' : 'entrata';
|
||||||
|
|
||||||
// Individuazione DDT disponibili
|
// Individuazione DDT disponibili
|
||||||
$ddt = DDT::whereHas('stato', function ($query) {
|
$ddt = DDT::whereHas('stato', function ($query) {
|
||||||
|
@ -55,7 +55,7 @@ if (!$riferimenti->isEmpty()) {
|
|||||||
'.$riferimento->target->descrizione.'
|
'.$riferimento->target->descrizione.'
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<small>'.reference($riferimento->target->parent).'</small>
|
<small>'.reference($riferimento->target->getDocument()).'</small>
|
||||||
</td>
|
</td>
|
||||||
</tr>';
|
</tr>';
|
||||||
|
|
||||||
|
@ -289,7 +289,8 @@ if (Auth::check()) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$hide_sidebar = Auth::check() && (setting('Nascondere la barra sinistra di default') or $_SESSION['settings']['sidebar-collapse']);
|
$settings_collapse = session('settings.sidebar-collapse') ? 1 : 0;
|
||||||
|
$hide_sidebar = Auth::check() && (setting('Nascondere la barra sinistra di default') || $settings_collapse);
|
||||||
echo '
|
echo '
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
@ -520,10 +521,16 @@ if (Auth::check()) {
|
|||||||
<div class="col-md-12">';
|
<div class="col-md-12">';
|
||||||
|
|
||||||
// Eventuale messaggio personalizzato per l'installazione corrente
|
// Eventuale messaggio personalizzato per l'installazione corrente
|
||||||
include_once App::filepath('include/custom/extra', 'extra.php');
|
$extra_file = App::filepath('include/custom/extra', 'extra.php');
|
||||||
|
if ($extra_file) {
|
||||||
|
include_once $extra_file;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Eventuale messaggio personalizzato per l'installazione corrente
|
// Eventuale messaggio personalizzato per l'installazione corrente
|
||||||
include_once App::filepath('include/custom/extra', 'login.php');
|
$extra_file = App::filepath('include/custom/extra', 'login.php');
|
||||||
|
if ($extra_file) {
|
||||||
|
include_once $extra_file;
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($messages['info']) || !empty($messages['warning']) || !empty($messages['error'])) {
|
if (!empty($messages['info']) || !empty($messages['warning']) || !empty($messages['error'])) {
|
||||||
echo '
|
echo '
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
*
|
*
|
||||||
* @since 2.4.2
|
* @since 2.4.2
|
||||||
*/
|
*/
|
||||||
|
use Common\Components\Accounting;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Esegue una somma precisa tra due interi/array.
|
* Esegue una somma precisa tra due interi/array.
|
||||||
@ -113,7 +114,7 @@ function orderValue($table, $field, $id)
|
|||||||
*
|
*
|
||||||
* @return string|null
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
function discountInfo(\Common\Components\Row $riga, $mostra_maggiorazione = true)
|
function discountInfo(Accounting $riga, $mostra_maggiorazione = true)
|
||||||
{
|
{
|
||||||
if (empty($riga->sconto_unitario) || (!$mostra_maggiorazione && $riga->sconto_unitario < 0)) {
|
if (empty($riga->sconto_unitario) || (!$mostra_maggiorazione && $riga->sconto_unitario < 0)) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -17,11 +17,13 @@
|
|||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Funzioni fondamentali per il corretto funzionamento del nucleo del progetto.
|
* Funzioni fondamentali per il corretto funzionamento del nucleo del progetto.
|
||||||
*
|
*
|
||||||
* @since 2.3
|
* @since 2.3
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use HTMLBuilder\HTMLBuilder;
|
||||||
use Models\OperationLog;
|
use Models\OperationLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -213,8 +215,10 @@ function translateTemplate()
|
|||||||
$id_record = filter('id_record');
|
$id_record = filter('id_record');
|
||||||
$id_parent = filter('id_parent');
|
$id_parent = filter('id_parent');
|
||||||
|
|
||||||
$id_module = Modules::getCurrent()['id'];
|
$module = Modules::getCurrent();
|
||||||
$id_plugin = Plugins::getCurrent()['id'];
|
$plugin = Plugins::getCurrent();
|
||||||
|
$id_module = $module ? $module['id'] : null;
|
||||||
|
$id_plugin = $plugin ? $plugin['id'] : null;
|
||||||
|
|
||||||
$template = ob_get_clean();
|
$template = ob_get_clean();
|
||||||
|
|
||||||
@ -225,7 +229,7 @@ function translateTemplate()
|
|||||||
];
|
];
|
||||||
|
|
||||||
$template = replace($template, $replaces);
|
$template = replace($template, $replaces);
|
||||||
$template = \HTMLBuilder\HTMLBuilder::replace($template);
|
$template = HTMLBuilder::replace($template);
|
||||||
$template = replace($template, $replaces);
|
$template = replace($template, $replaces);
|
||||||
|
|
||||||
// Informazioni estese sulle azioni dell'utente
|
// Informazioni estese sulle azioni dell'utente
|
||||||
@ -406,3 +410,22 @@ function check_query($query)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function session($name = '')
|
||||||
|
{
|
||||||
|
$session = &$_SESSION;
|
||||||
|
if (empty($name)) {
|
||||||
|
return $session;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pieces = explode('.', $name);
|
||||||
|
foreach ($pieces as $piece) {
|
||||||
|
if (!isset($session[$piece])) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$session = &$session[$piece];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $session;
|
||||||
|
}
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Modules\Anagrafiche;
|
namespace Modules\Anagrafiche;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Modules\Contratti\Contratto;
|
use Modules\Contratti\Contratto;
|
||||||
use Modules\DDT\DDT;
|
use Modules\DDT\DDT;
|
||||||
@ -34,6 +35,7 @@ use Util\Generator;
|
|||||||
|
|
||||||
class Anagrafica extends Model
|
class Anagrafica extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use RecordTrait;
|
use RecordTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
@ -62,7 +64,7 @@ class Anagrafica extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build($ragione_sociale, $nome = '', $cognome = '', array $tipologie = [])
|
public static function build($ragione_sociale, $nome = '', $cognome = '', array $tipologie = [])
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->ragione_sociale = $ragione_sociale;
|
$model->ragione_sociale = $ragione_sociale;
|
||||||
|
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Anagrafiche;
|
namespace Modules\Anagrafiche;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Nazione extends Model
|
class Nazione extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'an_nazioni';
|
protected $table = 'an_nazioni';
|
||||||
|
|
||||||
public function anagrafiche()
|
public function anagrafiche()
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Anagrafiche;
|
namespace Modules\Anagrafiche;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Sede extends Model
|
class Sede extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'an_sedi';
|
protected $table = 'an_sedi';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Anagrafiche;
|
namespace Modules\Anagrafiche;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Tipo extends Model
|
class Tipo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'an_tipianagrafiche';
|
protected $table = 'an_tipianagrafiche';
|
||||||
protected $primaryKey = 'idtipoanagrafica';
|
protected $primaryKey = 'idtipoanagrafica';
|
||||||
|
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Modules\Articoli;
|
namespace Modules\Articoli;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Modules;
|
use Modules;
|
||||||
use Modules\Interventi\Components\Articolo as ArticoloIntervento;
|
use Modules\Interventi\Components\Articolo as ArticoloIntervento;
|
||||||
@ -30,6 +31,7 @@ use Uploads;
|
|||||||
|
|
||||||
class Articolo extends Model
|
class Articolo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
use RecordTrait;
|
use RecordTrait;
|
||||||
|
|
||||||
@ -41,7 +43,7 @@ class Articolo extends Model
|
|||||||
|
|
||||||
public static function build($codice, $nome, Categoria $categoria = null, Categoria $sottocategoria = null)
|
public static function build($codice, $nome, Categoria $categoria = null, Categoria $sottocategoria = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->codice = $codice;
|
$model->codice = $codice;
|
||||||
$model->descrizione = $nome;
|
$model->descrizione = $nome;
|
||||||
|
@ -19,11 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Articoli;
|
namespace Modules\Articoli;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Traits\HierarchyTrait;
|
use Traits\HierarchyTrait;
|
||||||
|
|
||||||
class Categoria extends Model
|
class Categoria extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use HierarchyTrait;
|
use HierarchyTrait;
|
||||||
|
|
||||||
protected $table = 'mg_categorie';
|
protected $table = 'mg_categorie';
|
||||||
@ -31,7 +33,7 @@ class Categoria extends Model
|
|||||||
|
|
||||||
public static function build($nome)
|
public static function build($nome)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->nome = $nome;
|
$model->nome = $nome;
|
||||||
$model->save();
|
$model->save();
|
||||||
|
@ -19,9 +19,10 @@
|
|||||||
|
|
||||||
namespace Modules\Articoli;
|
namespace Modules\Articoli;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Classe dedicata alla gestione dei movimenti di magazzino degli articoli.
|
* Classe dedicata alla gestione dei movimenti di magazzino degli articoli.
|
||||||
*
|
*
|
||||||
* Alcuni appunti sull'utilizzo dei campi *idsede_azienda* e *idsede_controparte*
|
* Alcuni appunti sull'utilizzo dei campi *idsede_azienda* e *idsede_controparte*
|
||||||
@ -32,12 +33,14 @@ use Common\Model;
|
|||||||
*/
|
*/
|
||||||
class Movimento extends Model
|
class Movimento extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $document;
|
protected $document;
|
||||||
protected $table = 'mg_movimenti';
|
protected $table = 'mg_movimenti';
|
||||||
|
|
||||||
public static function build(Articolo $articolo, $qta, $descrizone, $data, $document = null)
|
public static function build(Articolo $articolo, $qta, $descrizone, $data, $document = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->articolo()->associate($articolo);
|
$model->articolo()->associate($articolo);
|
||||||
|
|
||||||
|
@ -19,18 +19,20 @@
|
|||||||
|
|
||||||
namespace Modules\CategorieDocumentali;
|
namespace Modules\CategorieDocumentali;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
class Categoria extends Model
|
class Categoria extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
protected $table = 'do_categorie';
|
protected $table = 'do_categorie';
|
||||||
|
|
||||||
public static function build($descrizione)
|
public static function build($descrizione)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
$model->descrizione = $descrizione;
|
$model->descrizione = $descrizione;
|
||||||
|
|
||||||
$model->save();
|
$model->save();
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Modules\Checklists;
|
namespace Modules\Checklists;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Models\Group;
|
use Models\Group;
|
||||||
use Models\Module;
|
use Models\Module;
|
||||||
use Models\Plugin;
|
use Models\Plugin;
|
||||||
@ -29,6 +30,7 @@ use Traits\HierarchyTrait;
|
|||||||
|
|
||||||
class Check extends Model
|
class Check extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use HierarchyTrait;
|
use HierarchyTrait;
|
||||||
|
|
||||||
protected static $parent_identifier = 'id_parent';
|
protected static $parent_identifier = 'id_parent';
|
||||||
@ -46,7 +48,7 @@ class Check extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build(User $user, $structure, $id_record, $content, $parent_id = null)
|
public static function build(User $user, $structure, $id_record, $content, $parent_id = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->user()->associate($user);
|
$model->user()->associate($user);
|
||||||
$model->id_parent = $parent_id;
|
$model->id_parent = $parent_id;
|
||||||
|
@ -19,13 +19,16 @@
|
|||||||
|
|
||||||
namespace Modules\Checklists;
|
namespace Modules\Checklists;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Models\Module;
|
use Models\Module;
|
||||||
use Models\Plugin;
|
use Models\Plugin;
|
||||||
use Models\User;
|
use Models\User;
|
||||||
|
|
||||||
class Checklist extends Model
|
class Checklist extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'zz_checklists';
|
protected $table = 'zz_checklists';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -37,7 +40,7 @@ class Checklist extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build($nome)
|
public static function build($nome)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->name = $nome;
|
$model->name = $nome;
|
||||||
$model->save();
|
$model->save();
|
||||||
|
@ -19,11 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Checklists;
|
namespace Modules\Checklists;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Traits\HierarchyTrait;
|
use Traits\HierarchyTrait;
|
||||||
|
|
||||||
class ChecklistItem extends Model
|
class ChecklistItem extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use HierarchyTrait;
|
use HierarchyTrait;
|
||||||
|
|
||||||
protected static $parent_identifier = 'id_parent';
|
protected static $parent_identifier = 'id_parent';
|
||||||
@ -39,7 +41,7 @@ class ChecklistItem extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build(Checklist $checklist, $contenuto, $id_parent = null)
|
public static function build(Checklist $checklist, $contenuto, $id_parent = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->checklist()->associate($checklist);
|
$model->checklist()->associate($checklist);
|
||||||
$model->id_parent = $id_parent;
|
$model->id_parent = $id_parent;
|
||||||
|
@ -121,7 +121,7 @@ switch (post('op')) {
|
|||||||
$righe = $contratto->getRighe();
|
$righe = $contratto->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
$new_riga->qta_evasa = 0;
|
$new_riga->qta_evasa = 0;
|
||||||
$new_riga->save();
|
$new_riga->save();
|
||||||
|
@ -51,9 +51,9 @@ foreach ($righe as $riga) {
|
|||||||
<td>';
|
<td>';
|
||||||
|
|
||||||
// Aggiunta dei riferimenti ai documenti
|
// Aggiunta dei riferimenti ai documenti
|
||||||
if ($riga->hasOriginal()) {
|
if ($riga->hasOriginalComponent()) {
|
||||||
echo '
|
echo '
|
||||||
<small class="pull-right text-right text-muted">'.reference($riga->getOriginal()->parent, tr('Origine')).'</small>';
|
<small class="pull-right text-right text-muted">'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine')).'</small>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Descrizione
|
// Descrizione
|
||||||
|
@ -23,18 +23,18 @@ use Modules\Contratti\Contratto;
|
|||||||
|
|
||||||
trait RelationTrait
|
trait RelationTrait
|
||||||
{
|
{
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'idcontratto';
|
return 'idcontratto';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Contratto::class, $this->getParentID());
|
return $this->belongsTo(Contratto::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function contratto()
|
public function contratto()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ namespace Modules\Contratti;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonInterval;
|
use Carbon\CarbonInterval;
|
||||||
use Common\Components\Description;
|
use Common\Components\Component;
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Interventi\Intervento;
|
use Modules\Interventi\Intervento;
|
||||||
@ -58,7 +58,7 @@ class Contratto extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, $nome)
|
public static function build(Anagrafica $anagrafica, $nome)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
|
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ class Contratto extends Document
|
|||||||
* Effettua un controllo sui campi del documento.
|
* Effettua un controllo sui campi del documento.
|
||||||
* Viene richiamato dalle modifiche alle righe del documento.
|
* Viene richiamato dalle modifiche alle righe del documento.
|
||||||
*/
|
*/
|
||||||
public function triggerEvasione(Description $trigger)
|
public function triggerEvasione(Component $trigger)
|
||||||
{
|
{
|
||||||
parent::triggerEvasione($trigger);
|
parent::triggerEvasione($trigger);
|
||||||
|
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Contratti;
|
namespace Modules\Contratti;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Stato extends Model
|
class Stato extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_staticontratti';
|
protected $table = 'co_staticontratti';
|
||||||
|
|
||||||
public function preventivi()
|
public function preventivi()
|
||||||
|
@ -31,10 +31,11 @@ echo '
|
|||||||
<ul class="dropdown-menu" role="menu">';
|
<ul class="dropdown-menu" role="menu">';
|
||||||
|
|
||||||
// Stati intervento
|
// Stati intervento
|
||||||
|
$stati_sessione = session('dashboard.idstatiintervento') ?: [];
|
||||||
$stati_intervento = $dbo->fetchArray('SELECT idstatointervento AS id, descrizione, colore FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione ASC');
|
$stati_intervento = $dbo->fetchArray('SELECT idstatointervento AS id, descrizione, colore FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione ASC');
|
||||||
foreach ($stati_intervento as $stato) {
|
foreach ($stati_intervento as $stato) {
|
||||||
$attr = '';
|
$attr = '';
|
||||||
if (in_array("'".$stato['id']."'", $_SESSION['dashboard']['idstatiintervento'])) {
|
if (in_array("'".$stato['id']."'", $stati_sessione)) {
|
||||||
$attr = 'checked="checked"';
|
$attr = 'checked="checked"';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,10 +69,11 @@ echo '
|
|||||||
<ul class="dropdown-menu" role="menu">';
|
<ul class="dropdown-menu" role="menu">';
|
||||||
|
|
||||||
// Tipi intervento
|
// Tipi intervento
|
||||||
|
$tipi_sessione = session('dashboard.idtipiintervento') ?: [];
|
||||||
$tipi_intervento = $dbo->fetchArray('SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC');
|
$tipi_intervento = $dbo->fetchArray('SELECT idtipointervento AS id, descrizione FROM in_tipiintervento ORDER BY descrizione ASC');
|
||||||
foreach ($tipi_intervento as $tipo) {
|
foreach ($tipi_intervento as $tipo) {
|
||||||
$attr = '';
|
$attr = '';
|
||||||
if (in_array("'".$tipo['id']."'", $_SESSION['dashboard']['idtipiintervento'])) {
|
if (in_array("'".$tipo['id']."'", $tipi_sessione)) {
|
||||||
$attr = 'checked="checked"';
|
$attr = 'checked="checked"';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,12 +106,13 @@ echo '
|
|||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu" role="menu">';
|
<ul class="dropdown-menu" role="menu">';
|
||||||
|
|
||||||
|
$tecnici_sessione = session('dashboard.idtecnici') ?: [];
|
||||||
$tecnici_disponibili = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale, colore FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica
|
$tecnici_disponibili = $dbo->fetchArray("SELECT an_anagrafiche.idanagrafica AS id, ragione_sociale, colore FROM an_anagrafiche INNER JOIN (an_tipianagrafiche_anagrafiche INNER JOIN an_tipianagrafiche ON an_tipianagrafiche_anagrafiche.idtipoanagrafica=an_tipianagrafiche.idtipoanagrafica) ON an_anagrafiche.idanagrafica=an_tipianagrafiche_anagrafiche.idanagrafica
|
||||||
LEFT OUTER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id
|
LEFT OUTER JOIN in_interventi_tecnici ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id
|
||||||
WHERE an_anagrafiche.deleted_at IS NULL AND an_tipianagrafiche.descrizione='Tecnico' ".Modules::getAdditionalsQuery('Interventi').' GROUP BY an_anagrafiche.idanagrafica ORDER BY ragione_sociale ASC');
|
WHERE an_anagrafiche.deleted_at IS NULL AND an_tipianagrafiche.descrizione='Tecnico' ".Modules::getAdditionalsQuery('Interventi').' GROUP BY an_anagrafiche.idanagrafica ORDER BY ragione_sociale ASC');
|
||||||
foreach ($tecnici_disponibili as $tecnico) {
|
foreach ($tecnici_disponibili as $tecnico) {
|
||||||
$attr = '';
|
$attr = '';
|
||||||
if (in_array("'".$tecnico['id']."'", $_SESSION['dashboard']['idtecnici'])) {
|
if (in_array("'".$tecnico['id']."'", $tecnici_sessione)) {
|
||||||
$attr = 'checked="checked"';
|
$attr = 'checked="checked"';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,10 +146,11 @@ echo '
|
|||||||
<ul class="dropdown-menu" role="menu">';
|
<ul class="dropdown-menu" role="menu">';
|
||||||
|
|
||||||
// Zone
|
// Zone
|
||||||
|
$zone_sessione = session('dashboard.idzone') ?: [];
|
||||||
$zone = $dbo->fetchArray('(SELECT 0 AS ordine, \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT 1 AS ordine, id, descrizione FROM an_zone) ORDER BY ordine, descrizione ASC');
|
$zone = $dbo->fetchArray('(SELECT 0 AS ordine, \'0\' AS id, \'Nessuna zona\' AS descrizione) UNION (SELECT 1 AS ordine, id, descrizione FROM an_zone) ORDER BY ordine, descrizione ASC');
|
||||||
foreach ($zone as $zona) {
|
foreach ($zone as $zona) {
|
||||||
$attr = '';
|
$attr = '';
|
||||||
if (in_array("'".$zona['id']."'", $_SESSION['dashboard']['idzone'])) {
|
if (in_array("'".$zona['id']."'", $zone_sessione)) {
|
||||||
$attr = 'checked="checked"';
|
$attr = 'checked="checked"';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,9 +76,9 @@ foreach ($righe as $riga) {
|
|||||||
</button>';
|
</button>';
|
||||||
|
|
||||||
// Aggiunta dei riferimenti ai documenti
|
// Aggiunta dei riferimenti ai documenti
|
||||||
if ($riga->hasOriginal()) {
|
if ($riga->hasOriginalComponent()) {
|
||||||
echo '
|
echo '
|
||||||
<br>'.reference($riga->getOriginal()->parent, tr('Origine'));
|
<br>'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine'));
|
||||||
}
|
}
|
||||||
echo '
|
echo '
|
||||||
</small>';
|
</small>';
|
||||||
|
@ -23,18 +23,18 @@ use Modules\DDT\DDT;
|
|||||||
|
|
||||||
trait RelationTrait
|
trait RelationTrait
|
||||||
{
|
{
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'idddt';
|
return 'idddt';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(DDT::class, $this->getParentID());
|
return $this->belongsTo(DDT::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ddt()
|
public function ddt()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ class DDT extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data)
|
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
|
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\DDT;
|
namespace Modules\DDT;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Stato extends Model
|
class Stato extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'dt_statiddt';
|
protected $table = 'dt_statiddt';
|
||||||
|
|
||||||
public function ddt()
|
public function ddt()
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\DDT;
|
namespace Modules\DDT;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Tipo extends Model
|
class Tipo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'dt_tipiddt';
|
protected $table = 'dt_tipiddt';
|
||||||
|
|
||||||
public function ddt()
|
public function ddt()
|
||||||
|
@ -20,13 +20,15 @@
|
|||||||
namespace Modules\Emails;
|
namespace Modules\Emails;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Notifications\EmailNotification;
|
use Notifications\EmailNotification;
|
||||||
use Traits\StoreTrait;
|
use Traits\StoreTrait;
|
||||||
|
|
||||||
class Account extends Model
|
class Account extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use StoreTrait;
|
use StoreTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Modules\Emails;
|
namespace Modules\Emails;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Models\PrintTemplate;
|
use Models\PrintTemplate;
|
||||||
use Models\Upload;
|
use Models\Upload;
|
||||||
use Models\User;
|
use Models\User;
|
||||||
@ -27,13 +28,15 @@ use Modules\Newsletter\Newsletter;
|
|||||||
|
|
||||||
class Mail extends Model
|
class Mail extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'em_emails';
|
protected $table = 'em_emails';
|
||||||
|
|
||||||
protected $options = null;
|
protected $options = null;
|
||||||
|
|
||||||
public static function build(User $user, $template = null, $id_record = null, $account = null)
|
public static function build(User $user, $template = null, $id_record = null, $account = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->created_by = $user->id;
|
$model->created_by = $user->id;
|
||||||
|
|
||||||
|
@ -19,17 +19,20 @@
|
|||||||
|
|
||||||
namespace Modules\Emails;
|
namespace Modules\Emails;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Receiver extends Model
|
class Receiver extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'em_email_receiver';
|
protected $table = 'em_email_receiver';
|
||||||
|
|
||||||
/* Relazioni Eloquent */
|
/* Relazioni Eloquent */
|
||||||
|
|
||||||
public static function build(Mail $mail, $address, $type = null)
|
public static function build(Mail $mail, $address, $type = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->email()->associate($mail);
|
$model->email()->associate($mail);
|
||||||
|
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Modules\Emails;
|
namespace Modules\Emails;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Models\Module;
|
use Models\Module;
|
||||||
use Models\PrintTemplate;
|
use Models\PrintTemplate;
|
||||||
@ -27,6 +28,7 @@ use Traits\StoreTrait;
|
|||||||
|
|
||||||
class Template extends Model
|
class Template extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use StoreTrait;
|
use StoreTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
|
@ -304,7 +304,7 @@ switch (post('op')) {
|
|||||||
$righe = $fattura->getRighe();
|
$righe = $fattura->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
// Rimozione riferimenti (deorecati)
|
// Rimozione riferimenti (deorecati)
|
||||||
$new_riga->idpreventivo = 0;
|
$new_riga->idpreventivo = 0;
|
||||||
|
@ -240,7 +240,7 @@ switch (post('op')) {
|
|||||||
$righe = $fattura->getRighe();
|
$righe = $fattura->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
if (!post('riferimenti')) {
|
if (!post('riferimenti')) {
|
||||||
$new_riga->idpreventivo = 0;
|
$new_riga->idpreventivo = 0;
|
||||||
|
@ -65,8 +65,8 @@ foreach ($righe as $riga) {
|
|||||||
$extra_riga = '';
|
$extra_riga = '';
|
||||||
if (!$riga->isDescrizione()) {
|
if (!$riga->isDescrizione()) {
|
||||||
// Informazioni su CIG, CUP, ...
|
// Informazioni su CIG, CUP, ...
|
||||||
if ($riga->hasOriginal()) {
|
if ($riga->hasOriginalComponent()) {
|
||||||
$documento_originale = $riga->getOriginal()->parent;
|
$documento_originale = $riga->getOriginalComponent()->getDocument();
|
||||||
|
|
||||||
$num_item = $documento_originale['num_item'];
|
$num_item = $documento_originale['num_item'];
|
||||||
$codice_cig = $documento_originale['codice_cig'];
|
$codice_cig = $documento_originale['codice_cig'];
|
||||||
@ -102,9 +102,9 @@ foreach ($righe as $riga) {
|
|||||||
'.$extra_riga;
|
'.$extra_riga;
|
||||||
|
|
||||||
// Aggiunta dei riferimenti ai documenti
|
// Aggiunta dei riferimenti ai documenti
|
||||||
if ($riga->hasOriginal()) {
|
if ($riga->hasOriginalComponent()) {
|
||||||
echo '
|
echo '
|
||||||
<br>'.reference($riga->getOriginal()->parent, tr('Origine'));
|
<br>'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine'));
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '
|
echo '
|
||||||
|
@ -52,8 +52,8 @@ class Articolo extends Article
|
|||||||
|
|
||||||
// Movimenta il magazzino solo se l'articolo non è già stato movimentato da un documento precedente
|
// Movimenta il magazzino solo se l'articolo non è già stato movimentato da un documento precedente
|
||||||
// Movimentazione forzata per Note di credito/debito
|
// Movimentazione forzata per Note di credito/debito
|
||||||
if ($this->hasOriginal() && !$this->parent->isNota()) {
|
if ($this->hasOriginalComponent() && !$this->getDocument()->isNota()) {
|
||||||
$original = $this->getOriginal();
|
$original = $this->getOriginalComponent();
|
||||||
$movimenta = !$original->movimenta_magazzino;
|
$movimenta = !$original->movimenta_magazzino;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,26 +26,26 @@ use Modules\Rivalse\RivalsaINPS;
|
|||||||
|
|
||||||
trait RelationTrait
|
trait RelationTrait
|
||||||
{
|
{
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'iddocumento';
|
return 'iddocumento';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Fattura::class, $this->getParentID());
|
return $this->belongsTo(Fattura::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fattura()
|
public function fattura()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNettoAttribute()
|
public function getNettoAttribute()
|
||||||
{
|
{
|
||||||
$result = $this->totale - $this->ritenuta_acconto - $this->ritenuta_contributi;
|
$result = $this->totale - $this->ritenuta_acconto - $this->ritenuta_contributi;
|
||||||
|
|
||||||
if ($this->parent->split_payment) {
|
if ($this->getDocument()->split_payment) {
|
||||||
$result = $result - $this->iva;
|
$result = $result - $this->iva;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ trait RelationTrait
|
|||||||
{
|
{
|
||||||
if ($this->attributes['ritenuta_contributi']) {
|
if ($this->attributes['ritenuta_contributi']) {
|
||||||
$result = $this->totale_imponibile;
|
$result = $this->totale_imponibile;
|
||||||
$ritenuta = $this->parent->ritenutaContributi;
|
$ritenuta = $this->getDocument()->ritenutaContributi;
|
||||||
|
|
||||||
$result = $result * $ritenuta->percentuale_imponibile / 100;
|
$result = $result * $ritenuta->percentuale_imponibile / 100;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ namespace Modules\Fatture;
|
|||||||
|
|
||||||
use Auth;
|
use Auth;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Common\Components\Description;
|
use Common\Components\Component;
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
@ -86,7 +86,7 @@ class Fattura extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment, $numero_esterno = null)
|
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment, $numero_esterno = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$user = Auth::user();
|
$user = Auth::user();
|
||||||
|
|
||||||
@ -416,7 +416,7 @@ class Fattura extends Document
|
|||||||
|
|
||||||
// Metodi generali
|
// Metodi generali
|
||||||
|
|
||||||
public function triggerComponent(Description $trigger)
|
public function triggerComponent(Component $trigger)
|
||||||
{
|
{
|
||||||
parent::triggerComponent($trigger);
|
parent::triggerComponent($trigger);
|
||||||
|
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Fatture;
|
namespace Modules\Fatture;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Stato extends Model
|
class Stato extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_statidocumento';
|
protected $table = 'co_statidocumento';
|
||||||
|
|
||||||
public function fatture()
|
public function fatture()
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Fatture;
|
namespace Modules\Fatture;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class StatoFE extends Model
|
class StatoFE extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
public $incrementing = false;
|
public $incrementing = false;
|
||||||
protected $table = 'fe_stati_documento';
|
protected $table = 'fe_stati_documento';
|
||||||
protected $primaryKey = 'codice';
|
protected $primaryKey = 'codice';
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Fatture;
|
namespace Modules\Fatture;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Tipo extends Model
|
class Tipo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_tipidocumento';
|
protected $table = 'co_tipidocumento';
|
||||||
|
|
||||||
public function fatture()
|
public function fatture()
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
|
|
||||||
namespace Modules\Impianti;
|
namespace Modules\Impianti;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
|
||||||
class Impianto extends Model
|
class Impianto extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'my_impianti';
|
protected $table = 'my_impianti';
|
||||||
|
|
||||||
// Relazioni Eloquent
|
// Relazioni Eloquent
|
||||||
|
@ -552,7 +552,7 @@ switch (post('op')) {
|
|||||||
$righe = $intervento->getRighe();
|
$righe = $intervento->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
$new_riga->qta_evasa = 0;
|
$new_riga->qta_evasa = 0;
|
||||||
$new_riga->save();
|
$new_riga->save();
|
||||||
|
@ -184,7 +184,7 @@ switch (post('op')) {
|
|||||||
$righe = $intervento->getRighe();
|
$righe = $intervento->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
$new_riga->qta_evasa = 0;
|
$new_riga->qta_evasa = 0;
|
||||||
$new_riga->save();
|
$new_riga->save();
|
||||||
|
@ -25,19 +25,19 @@ trait RelationTrait
|
|||||||
{
|
{
|
||||||
protected $disableOrder = true;
|
protected $disableOrder = true;
|
||||||
|
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'idintervento';
|
return 'idintervento';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Intervento::class, $this->getParentID());
|
return $this->belongsTo(Intervento::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function intervento()
|
public function intervento()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fixIvaIndetraibile()
|
public function fixIvaIndetraibile()
|
||||||
|
@ -19,21 +19,23 @@
|
|||||||
|
|
||||||
namespace Modules\Interventi\Components;
|
namespace Modules\Interventi\Components;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Interventi\Intervento;
|
use Modules\Interventi\Intervento;
|
||||||
use Modules\Iva\Aliquota;
|
/*
|
||||||
use Modules\TipiIntervento\Tipo as TipoSessione;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Notazione: i costi sono rivolti all'azienda, i prezzi al cliente.
|
* Notazione: i costi sono rivolti all'azienda, i prezzi al cliente.
|
||||||
*
|
*
|
||||||
* @since 2.4.9
|
* @since 2.4.9
|
||||||
*/
|
*/
|
||||||
|
use Modules\Iva\Aliquota;
|
||||||
|
use Modules\TipiIntervento\Tipo as TipoSessione;
|
||||||
|
|
||||||
class Sessione extends Model
|
class Sessione extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use RelationTrait;
|
use RelationTrait;
|
||||||
|
|
||||||
protected $table = 'in_interventi_tecnici';
|
protected $table = 'in_interventi_tecnici';
|
||||||
@ -54,9 +56,9 @@ class Sessione extends Model
|
|||||||
throw new InvalidArgumentException();
|
throw new InvalidArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->parent()->associate($intervento);
|
$model->document()->associate($intervento);
|
||||||
$model->anagrafica()->associate($anagrafica);
|
$model->anagrafica()->associate($anagrafica);
|
||||||
|
|
||||||
$id_tipo = $intervento['idtipointervento'];
|
$id_tipo = $intervento['idtipointervento'];
|
||||||
@ -152,7 +154,7 @@ class Sessione extends Model
|
|||||||
return parent::save($options);
|
return parent::save($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'idintervento';
|
return 'idintervento';
|
||||||
}
|
}
|
||||||
@ -171,7 +173,7 @@ class Sessione extends Model
|
|||||||
|
|
||||||
public function parent()
|
public function parent()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Intervento::class, $this->getParentID());
|
return $this->belongsTo(Intervento::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Costi per l'azienda
|
// Costi per l'azienda
|
||||||
|
@ -54,7 +54,7 @@ class Intervento extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, TipoSessione $tipo_sessione, Stato $stato, $data_richiesta)
|
public static function build(Anagrafica $anagrafica, TipoSessione $tipo_sessione, Stato $stato, $data_richiesta)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->anagrafica()->associate($anagrafica);
|
$model->anagrafica()->associate($anagrafica);
|
||||||
$model->stato()->associate($stato);
|
$model->stato()->associate($stato);
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Interventi;
|
namespace Modules\Interventi;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Stato extends Model
|
class Stato extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $primaryKey = 'idstatointervento';
|
protected $primaryKey = 'idstatointervento';
|
||||||
protected $table = 'in_statiintervento';
|
protected $table = 'in_statiintervento';
|
||||||
|
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Interventi;
|
namespace Modules\Interventi;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Tipo extends Model
|
class Tipo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $primaryKey = 'idtipointervento';
|
protected $primaryKey = 'idtipointervento';
|
||||||
protected $table = 'in_tipiintervento';
|
protected $table = 'in_tipiintervento';
|
||||||
|
|
||||||
|
@ -19,9 +19,12 @@
|
|||||||
|
|
||||||
namespace Modules\Iva;
|
namespace Modules\Iva;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Aliquota extends Model
|
class Aliquota extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_iva';
|
protected $table = 'co_iva';
|
||||||
}
|
}
|
||||||
|
@ -19,15 +19,18 @@
|
|||||||
|
|
||||||
namespace Modules\Listini;
|
namespace Modules\Listini;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Listino extends Model
|
class Listino extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'mg_listini';
|
protected $table = 'mg_listini';
|
||||||
|
|
||||||
public static function build($nome, $percentuale)
|
public static function build($nome, $percentuale)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->nome = $nome;
|
$model->nome = $nome;
|
||||||
$model->percentuale = $percentuale;
|
$model->percentuale = $percentuale;
|
||||||
|
@ -19,13 +19,15 @@
|
|||||||
|
|
||||||
namespace Modules\Newsletter;
|
namespace Modules\Newsletter;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Traits\RecordTrait;
|
use Traits\RecordTrait;
|
||||||
|
|
||||||
class Lista extends Model
|
class Lista extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
use RecordTrait;
|
use RecordTrait;
|
||||||
|
|
||||||
@ -33,7 +35,7 @@ class Lista extends Model
|
|||||||
|
|
||||||
public static function build($name)
|
public static function build($name)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
$model->name = $name;
|
$model->name = $name;
|
||||||
|
|
||||||
$model->save();
|
$model->save();
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Modules\Newsletter;
|
namespace Modules\Newsletter;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Models\User;
|
use Models\User;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
@ -30,6 +31,7 @@ use Traits\RecordTrait;
|
|||||||
|
|
||||||
class Newsletter extends Model
|
class Newsletter extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
use RecordTrait;
|
use RecordTrait;
|
||||||
|
|
||||||
@ -37,7 +39,7 @@ class Newsletter extends Model
|
|||||||
|
|
||||||
public static function build(User $user, Template $template, $name)
|
public static function build(User $user, Template $template, $name)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->user()->associate($user);
|
$model->user()->associate($user);
|
||||||
$model->template()->associate($template);
|
$model->template()->associate($template);
|
||||||
|
@ -403,7 +403,7 @@ switch (post('op')) {
|
|||||||
$qta = post('qta_da_evadere')[$riga->id];
|
$qta = post('qta_da_evadere')[$riga->id];
|
||||||
|
|
||||||
$copia = $riga->replicate();
|
$copia = $riga->replicate();
|
||||||
$copia->setParent($ordine);
|
$copia->setDocument($ordine);
|
||||||
|
|
||||||
// Ripristino dei valori di default per campi potenzialmente impostati
|
// Ripristino dei valori di default per campi potenzialmente impostati
|
||||||
$copia->original_id = null;
|
$copia->original_id = null;
|
||||||
|
@ -69,9 +69,9 @@ foreach ($righe as $riga) {
|
|||||||
<td>';
|
<td>';
|
||||||
|
|
||||||
// Aggiunta dei riferimenti ai documenti
|
// Aggiunta dei riferimenti ai documenti
|
||||||
if ($riga->hasOriginal()) {
|
if ($riga->hasOriginalComponent()) {
|
||||||
echo '
|
echo '
|
||||||
<small class="pull-right text-right text-muted">'.reference($riga->getOriginal()->parent, tr('Origine')).'</small>';
|
<small class="pull-right text-right text-muted">'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine')).'</small>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($riga->isArticolo()) {
|
if ($riga->isArticolo()) {
|
||||||
|
@ -23,18 +23,18 @@ use Modules\Ordini\Ordine;
|
|||||||
|
|
||||||
trait RelationTrait
|
trait RelationTrait
|
||||||
{
|
{
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'idordine';
|
return 'idordine';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Ordine::class, $this->getParentID());
|
return $this->belongsTo(Ordine::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function ordine()
|
public function ordine()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
namespace Modules\Ordini;
|
namespace Modules\Ordini;
|
||||||
|
|
||||||
use Common\Components\Description;
|
use Common\Components\Component;
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\DDT\DDT;
|
use Modules\DDT\DDT;
|
||||||
@ -47,7 +47,7 @@ class Ordine extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data)
|
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
|
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ class Ordine extends Document
|
|||||||
* Effettua un controllo sui campi del documento.
|
* Effettua un controllo sui campi del documento.
|
||||||
* Viene richiamato dalle modifiche alle righe del documento.
|
* Viene richiamato dalle modifiche alle righe del documento.
|
||||||
*/
|
*/
|
||||||
public function triggerEvasione(Description $trigger)
|
public function triggerEvasione(Component $trigger)
|
||||||
{
|
{
|
||||||
parent::triggerEvasione($trigger);
|
parent::triggerEvasione($trigger);
|
||||||
|
|
||||||
@ -163,7 +163,7 @@ class Ordine extends Document
|
|||||||
// Impostazione del nuovo stato
|
// Impostazione del nuovo stato
|
||||||
if ($qta_evasa == 0) {
|
if ($qta_evasa == 0) {
|
||||||
$descrizione = 'Bozza';
|
$descrizione = 'Bozza';
|
||||||
} elseif (!in_array($stato_attuale->descrizione, ['Parzialmente fatturato', 'Fatturato']) && $trigger->parent instanceof DDT) {
|
} elseif (!in_array($stato_attuale->descrizione, ['Parzialmente fatturato', 'Fatturato']) && $trigger->getDocument() instanceof DDT) {
|
||||||
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
$descrizione = $parziale ? 'Parzialmente evaso' : 'Evaso';
|
||||||
} else {
|
} else {
|
||||||
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
$descrizione = $parziale ? 'Parzialmente fatturato' : 'Fatturato';
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Ordini;
|
namespace Modules\Ordini;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Stato extends Model
|
class Stato extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'or_statiordine';
|
protected $table = 'or_statiordine';
|
||||||
|
|
||||||
public function ordini()
|
public function ordini()
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Ordini;
|
namespace Modules\Ordini;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Tipo extends Model
|
class Tipo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'or_tipiordine';
|
protected $table = 'or_tipiordine';
|
||||||
|
|
||||||
public function ordini()
|
public function ordini()
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
|
|
||||||
namespace Modules\Pagamenti;
|
namespace Modules\Pagamenti;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Pagamento extends Model
|
class Pagamento extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_pagamenti';
|
protected $table = 'co_pagamenti';
|
||||||
|
|
||||||
public function fatture()
|
public function fatture()
|
||||||
|
@ -107,7 +107,7 @@ switch (post('op')) {
|
|||||||
$righe = $preventivo->getRighe();
|
$righe = $preventivo->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
$new_riga->qta_evasa = 0;
|
$new_riga->qta_evasa = 0;
|
||||||
$new_riga->save();
|
$new_riga->save();
|
||||||
@ -334,7 +334,7 @@ switch (post('op')) {
|
|||||||
$righe = $preventivo->getRighe();
|
$righe = $preventivo->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$new_riga = $riga->replicate();
|
$new_riga = $riga->replicate();
|
||||||
$new_riga->setParent($new);
|
$new_riga->setDocument($new);
|
||||||
|
|
||||||
$new_riga->qta_evasa = 0;
|
$new_riga->qta_evasa = 0;
|
||||||
$new_riga->save();
|
$new_riga->save();
|
||||||
|
@ -50,9 +50,9 @@ foreach ($righe as $riga) {
|
|||||||
<td>';
|
<td>';
|
||||||
|
|
||||||
// Aggiunta dei riferimenti ai documenti
|
// Aggiunta dei riferimenti ai documenti
|
||||||
if ($riga->hasOriginal()) {
|
if ($riga->hasOriginalComponent()) {
|
||||||
echo '
|
echo '
|
||||||
<small class="pull-right text-right text-muted">'.reference($riga->getOriginal()->parent, tr('Origine')).'</small>';
|
<small class="pull-right text-right text-muted">'.reference($riga->getOriginalComponent()->getDocument(), tr('Origine')).'</small>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Descrizione
|
// Descrizione
|
||||||
|
@ -23,18 +23,18 @@ use Modules\Preventivi\Preventivo;
|
|||||||
|
|
||||||
trait RelationTrait
|
trait RelationTrait
|
||||||
{
|
{
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'idpreventivo';
|
return 'idpreventivo';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Preventivo::class, $this->getParentID());
|
return $this->belongsTo(Preventivo::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function preventivo()
|
public function preventivo()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,7 +21,7 @@ namespace Modules\Preventivi;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonInterval;
|
use Carbon\CarbonInterval;
|
||||||
use Common\Components\Description;
|
use Common\Components\Component;
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Interventi\Intervento;
|
use Modules\Interventi\Intervento;
|
||||||
@ -47,7 +47,7 @@ class Preventivo extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, TipoSessione $tipo_sessione, $nome, $data_bozza, $id_sede)
|
public static function build(Anagrafica $anagrafica, TipoSessione $tipo_sessione, $nome, $data_bozza, $id_sede)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
|
$stato_documento = Stato::where('descrizione', 'Bozza')->first();
|
||||||
|
|
||||||
@ -230,7 +230,7 @@ class Preventivo extends Document
|
|||||||
* Effettua un controllo sui campi del documento.
|
* Effettua un controllo sui campi del documento.
|
||||||
* Viene richiamato dalle modifiche alle righe del documento.
|
* Viene richiamato dalle modifiche alle righe del documento.
|
||||||
*/
|
*/
|
||||||
public function triggerEvasione(Description $trigger)
|
public function triggerEvasione(Component $trigger)
|
||||||
{
|
{
|
||||||
parent::triggerEvasione($trigger);
|
parent::triggerEvasione($trigger);
|
||||||
|
|
||||||
@ -246,7 +246,7 @@ class Preventivo extends Document
|
|||||||
if ($qta_evasa == 0) {
|
if ($qta_evasa == 0) {
|
||||||
$descrizione = 'In lavorazione';
|
$descrizione = 'In lavorazione';
|
||||||
$codice_intervento = 'OK';
|
$codice_intervento = 'OK';
|
||||||
} elseif (!in_array($stato_attuale->descrizione, ['Parzialmente fatturato', 'Fatturato']) && $trigger->parent instanceof Ordine) {
|
} elseif (!in_array($stato_attuale->descrizione, ['Parzialmente fatturato', 'Fatturato']) && $trigger->getDocument() instanceof Ordine) {
|
||||||
$descrizione = $this->stato->descrizione;
|
$descrizione = $this->stato->descrizione;
|
||||||
$codice_intervento = 'OK';
|
$codice_intervento = 'OK';
|
||||||
} else {
|
} else {
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Modules\Preventivi;
|
namespace Modules\Preventivi;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Stato extends Model
|
class Stato extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_statipreventivi';
|
protected $table = 'co_statipreventivi';
|
||||||
|
|
||||||
public function preventivi()
|
public function preventivi()
|
||||||
|
@ -19,18 +19,21 @@
|
|||||||
|
|
||||||
namespace Modules\PrimaNota;
|
namespace Modules\PrimaNota;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
use Modules\Scadenzario\Scadenza;
|
/*
|
||||||
|
|
||||||
/**
|
|
||||||
* Struttura ausiliaria dedicata alla raggruppamento e alla gestione di un insieme di Movimenti, unificati attraverso il numero di mastrino.
|
* Struttura ausiliaria dedicata alla raggruppamento e alla gestione di un insieme di Movimenti, unificati attraverso il numero di mastrino.
|
||||||
*
|
*
|
||||||
* Questa classe non è utilizzabile come normale modello Eloquent poichè non prevede operazioni di modifica a livello di database.
|
* Questa classe non è utilizzabile come normale modello Eloquent poichè non prevede operazioni di modifica a livello di database.
|
||||||
* La creazione di un record può essere utilizzata per la gestione di un insieme di Movimenti, mentre l'eliminazione provoca la rimozione in cascata dei Movimenti associati al Mastrino.
|
* La creazione di un record può essere utilizzata per la gestione di un insieme di Movimenti, mentre l'eliminazione provoca la rimozione in cascata dei Movimenti associati al Mastrino.
|
||||||
*/
|
*/
|
||||||
|
use Modules\Scadenzario\Scadenza;
|
||||||
|
|
||||||
class Mastrino extends Model
|
class Mastrino extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
public $incrementing = false;
|
public $incrementing = false;
|
||||||
protected $table = 'co_movimenti';
|
protected $table = 'co_movimenti';
|
||||||
protected $primaryKey = 'idmastrino';
|
protected $primaryKey = 'idmastrino';
|
||||||
@ -44,7 +47,7 @@ class Mastrino extends Model
|
|||||||
|
|
||||||
public static function build($descrizione, $data, $is_insoluto = false, $contabile = false)
|
public static function build($descrizione, $data, $is_insoluto = false, $contabile = false)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->idmastrino = self::getNextMastrino();
|
$model->idmastrino = self::getNextMastrino();
|
||||||
$model->data = $data;
|
$model->data = $data;
|
||||||
|
@ -19,12 +19,15 @@
|
|||||||
|
|
||||||
namespace Modules\PrimaNota;
|
namespace Modules\PrimaNota;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
use Modules\Scadenzario\Scadenza;
|
use Modules\Scadenzario\Scadenza;
|
||||||
|
|
||||||
class Movimento extends Model
|
class Movimento extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_movimenti';
|
protected $table = 'co_movimenti';
|
||||||
|
|
||||||
protected $appends = [
|
protected $appends = [
|
||||||
@ -35,7 +38,7 @@ class Movimento extends Model
|
|||||||
|
|
||||||
public static function build(Mastrino $mastrino, $id_conto, Fattura $documento = null, Scadenza $scadenza = null)
|
public static function build(Mastrino $mastrino, $id_conto, Fattura $documento = null, Scadenza $scadenza = null)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
// Informazioni dipendenti dal mastrino
|
// Informazioni dipendenti dal mastrino
|
||||||
$model->idmastrino = $mastrino->idmastrino;
|
$model->idmastrino = $mastrino->idmastrino;
|
||||||
|
@ -19,9 +19,12 @@
|
|||||||
|
|
||||||
namespace Modules\Ritenute;
|
namespace Modules\Ritenute;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class RitenutaAcconto extends Model
|
class RitenutaAcconto extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_ritenutaacconto';
|
protected $table = 'co_ritenutaacconto';
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
|
|
||||||
namespace Modules\RitenuteContributi;
|
namespace Modules\RitenuteContributi;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
|
|
||||||
class RitenutaContributi extends Model
|
class RitenutaContributi extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_ritenuta_contributi';
|
protected $table = 'co_ritenuta_contributi';
|
||||||
|
|
||||||
public function fatture()
|
public function fatture()
|
||||||
|
@ -19,9 +19,12 @@
|
|||||||
|
|
||||||
namespace Modules\Rivalse;
|
namespace Modules\Rivalse;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class RivalsaINPS extends Model
|
class RivalsaINPS extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_rivalse';
|
protected $table = 'co_rivalse';
|
||||||
}
|
}
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
|
|
||||||
namespace Modules\Scadenzario;
|
namespace Modules\Scadenzario;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
|
|
||||||
class Scadenza extends Model
|
class Scadenza extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_scadenziario';
|
protected $table = 'co_scadenziario';
|
||||||
|
|
||||||
protected $dates = [
|
protected $dates = [
|
||||||
@ -33,7 +36,7 @@ class Scadenza extends Model
|
|||||||
|
|
||||||
public static function build($descrizione, $importo, $data_scadenza, $type = 'fattura', $is_pagato = false)
|
public static function build($descrizione, $importo, $data_scadenza, $type = 'fattura', $is_pagato = false)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->descrizione = $descrizione;
|
$model->descrizione = $descrizione;
|
||||||
$model->scadenza = $data_scadenza;
|
$model->scadenza = $data_scadenza;
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
|
|
||||||
namespace Modules\TipiIntervento;
|
namespace Modules\TipiIntervento;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
|
||||||
class Tipo extends Model
|
class Tipo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'in_tipiintervento';
|
protected $table = 'in_tipiintervento';
|
||||||
protected $primaryKey = 'idtipointervento';
|
protected $primaryKey = 'idtipointervento';
|
||||||
|
|
||||||
@ -38,7 +41,7 @@ class Tipo extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build($codice, $descrizione)
|
public static function build($codice, $descrizione)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->codice = $codice;
|
$model->codice = $codice;
|
||||||
$model->descrizione = $descrizione;
|
$model->descrizione = $descrizione;
|
||||||
|
@ -19,18 +19,20 @@
|
|||||||
|
|
||||||
namespace Plugins\DettagliArticolo;
|
namespace Plugins\DettagliArticolo;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Articoli\Articolo;
|
use Modules\Articoli\Articolo;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Classe per la gestione delle relazioni tra articolo e fornitore.
|
* Classe per la gestione delle relazioni tra articolo e fornitore.
|
||||||
*
|
*
|
||||||
* @since 2.4.15
|
* @since 2.4.15
|
||||||
*/
|
*/
|
||||||
class DettaglioFornitore extends Model
|
class DettaglioFornitore extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
protected $table = 'mg_fornitore_articolo';
|
protected $table = 'mg_fornitore_articolo';
|
||||||
@ -42,7 +44,7 @@ class DettaglioFornitore extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $fornitore, Articolo $articolo)
|
public static function build(Anagrafica $fornitore, Articolo $articolo)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->anagrafica()->associate($fornitore);
|
$model->anagrafica()->associate($fornitore);
|
||||||
$model->articolo()->associate($articolo);
|
$model->articolo()->associate($articolo);
|
||||||
|
@ -19,18 +19,21 @@
|
|||||||
|
|
||||||
namespace Plugins\DettagliArticolo;
|
namespace Plugins\DettagliArticolo;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Articoli\Articolo;
|
use Modules\Articoli\Articolo;
|
||||||
use Modules\Iva\Aliquota;
|
use Modules\Iva\Aliquota;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Classe per la gestione delle relazioni articolo-prezzo sulla base di un range di quantità e di una specifica anagrafica.
|
* Classe per la gestione delle relazioni articolo-prezzo sulla base di un range di quantità e di una specifica anagrafica.
|
||||||
*
|
*
|
||||||
* @since 2.4.18
|
* @since 2.4.18
|
||||||
*/
|
*/
|
||||||
class DettaglioPrezzo extends Model
|
class DettaglioPrezzo extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'mg_prezzi_articoli';
|
protected $table = 'mg_prezzi_articoli';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -40,7 +43,7 @@ class DettaglioPrezzo extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build(Articolo $articolo, Anagrafica $anagrafica, $direzione = 'uscita')
|
public static function build(Articolo $articolo, Anagrafica $anagrafica, $direzione = 'uscita')
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->anagrafica()->associate($anagrafica);
|
$model->anagrafica()->associate($anagrafica);
|
||||||
$model->articolo()->associate($articolo);
|
$model->articolo()->associate($articolo);
|
||||||
|
@ -19,18 +19,20 @@
|
|||||||
|
|
||||||
namespace Plugins\DichiarazioniIntento;
|
namespace Plugins\DichiarazioniIntento;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Classe per la gestione delle dichiarazione d'intento.
|
* Classe per la gestione delle dichiarazione d'intento.
|
||||||
*
|
*
|
||||||
* @since 2.4.11
|
* @since 2.4.11
|
||||||
*/
|
*/
|
||||||
class Dichiarazione extends Model
|
class Dichiarazione extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use SoftDeletes;
|
use SoftDeletes;
|
||||||
|
|
||||||
protected $table = 'co_dichiarazioni_intento';
|
protected $table = 'co_dichiarazioni_intento';
|
||||||
@ -48,7 +50,7 @@ class Dichiarazione extends Model
|
|||||||
*/
|
*/
|
||||||
public static function build(Anagrafica $anagrafica, $data, $numero_protocollo, $numero_progressivo, $data_inizio, $data_fine)
|
public static function build(Anagrafica $anagrafica, $data, $numero_protocollo, $numero_progressivo, $data_inizio, $data_fine)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->anagrafica()->associate($anagrafica);
|
$model->anagrafica()->associate($anagrafica);
|
||||||
|
|
||||||
|
@ -1185,8 +1185,8 @@ class FatturaElettronica
|
|||||||
$descrizione = str_replace('’', ' ', $descrizione);
|
$descrizione = str_replace('’', ' ', $descrizione);
|
||||||
|
|
||||||
// Aggiunta dei riferimenti ai documenti
|
// Aggiunta dei riferimenti ai documenti
|
||||||
if (setting('Riferimento dei documenti in Fattura Elettronica') && $riga->hasOriginal()) {
|
if (setting('Riferimento dei documenti in Fattura Elettronica') && $riga->hasOriginalComponent()) {
|
||||||
$descrizione .= "\n".$riga->getOriginal()->parent->getReference();
|
$descrizione .= "\n".$riga->getOriginalComponent()->getDocument()->getReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
$dettaglio['Descrizione'] = $descrizione;
|
$dettaglio['Descrizione'] = $descrizione;
|
||||||
|
@ -362,7 +362,7 @@ switch (filter('op')) {
|
|||||||
|
|
||||||
// Ricerca della riga
|
// Ricerca della riga
|
||||||
$riga = $documento->getRiga($namespace.$type, $collegamento['id']);
|
$riga = $documento->getRiga($namespace.$type, $collegamento['id']);
|
||||||
$riga_origine = $riga->getOriginal();
|
$riga_origine = $riga->getOriginalComponent();
|
||||||
|
|
||||||
// Compilazione dei dati
|
// Compilazione dei dati
|
||||||
$results[$key] = [
|
$results[$key] = [
|
||||||
|
@ -54,7 +54,7 @@ $id_riferimento = get('id_riferimento');
|
|||||||
$righe = $documento->getRighe();
|
$righe = $documento->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$qta_rimanente = $riga->qta_rimanente - $righe_utilizzate[$riga->id];
|
$qta_rimanente = $riga->qta_rimanente - $righe_utilizzate[$riga->id];
|
||||||
$riga_origine = $riga->getOriginal();
|
$riga_origine = $riga->getOriginalComponent();
|
||||||
|
|
||||||
$dettagli = [
|
$dettagli = [
|
||||||
'tipo' => get_class($riga),
|
'tipo' => get_class($riga),
|
||||||
|
@ -45,7 +45,7 @@ class Pianificazione extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Contratto $contratto, $data_scadenza)
|
public static function build(Contratto $contratto, $data_scadenza)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->contratto()->associate($contratto);
|
$model->contratto()->associate($contratto);
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ switch ($operazione) {
|
|||||||
$righe = $promemoria_originale->getRighe();
|
$righe = $promemoria_originale->getRighe();
|
||||||
foreach ($righe as $riga) {
|
foreach ($righe as $riga) {
|
||||||
$copia = $riga->replicate();
|
$copia = $riga->replicate();
|
||||||
$copia->setParent($promemoria_corrente);
|
$copia->setDocument($promemoria_corrente);
|
||||||
$copia->save();
|
$copia->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,19 +25,19 @@ trait RelationTrait
|
|||||||
{
|
{
|
||||||
protected $disableOrder = true;
|
protected $disableOrder = true;
|
||||||
|
|
||||||
public function getParentID()
|
public function getDocumentID()
|
||||||
{
|
{
|
||||||
return 'id_promemoria';
|
return 'id_promemoria';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function parent()
|
public function document()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Promemoria::class, $this->getParentID());
|
return $this->belongsTo(Promemoria::class, $this->getDocumentID());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function contratto()
|
public function contratto()
|
||||||
{
|
{
|
||||||
return $this->parent();
|
return $this->document();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function fixIvaIndetraibile()
|
public function fixIvaIndetraibile()
|
||||||
|
@ -49,7 +49,7 @@ class Promemoria extends Document
|
|||||||
*/
|
*/
|
||||||
public static function build(Contratto $contratto, TipoSessione $tipo, $data_richiesta)
|
public static function build(Contratto $contratto, TipoSessione $tipo, $data_richiesta)
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
$model->contratto()->associate($contratto);
|
$model->contratto()->associate($contratto);
|
||||||
$model->tipo()->associate($tipo);
|
$model->tipo()->associate($tipo);
|
||||||
|
405
src/Common/Components/Accounting.php
Normal file
405
src/Common/Components/Accounting.php
Normal file
@ -0,0 +1,405 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.n.c.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Common\Components;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Modules\Iva\Aliquota;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe dedicata alla gestione delle informazioni contabili standard di una componente dei Documenti.
|
||||||
|
*
|
||||||
|
* Prevede i seguenti campi nel database:
|
||||||
|
*
|
||||||
|
* @property float prezzo_unitario
|
||||||
|
* @property float iva_unitaria = prezzo_unitario * percentuale_iva
|
||||||
|
* @property float prezzo_unitario_ivato = prezzo_unitario + iva_unitaria
|
||||||
|
* @property float sconto_unitario
|
||||||
|
* @property float sconto_iva_unitario = sconto_unitario * percentuale_iva
|
||||||
|
* @property float sconto_unitario_ivato = sconto_unitario + sconto_iva_unitario
|
||||||
|
*
|
||||||
|
* Introduce i seguenti campi ausiliari:
|
||||||
|
* @property float imponibile = prezzo_unitario * qta
|
||||||
|
* @property float sconto = sconto_unitario * qta
|
||||||
|
* @property float totale_imponibile = (prezzo_unitario - sconto_unitario) * qta [Imponibile con sconto]
|
||||||
|
* @property float iva = (iva_unitaria - sconto_iva_unitario) * qta
|
||||||
|
* @property float totale = (prezzo_unitario_ivato - sconto_unitario_ivato) * qta [Totale imponibile con IVA]
|
||||||
|
* @property float importo = se incorpora_iva: totale, altrimenti: totale_imponibile
|
||||||
|
*
|
||||||
|
* Per una estensione del sistema dei totali (Rivalsa, Ritenuta, ...), si consiglia di introdurre un relativo Netto a pagare. [Fatture]
|
||||||
|
*
|
||||||
|
* @since 2.4.18
|
||||||
|
*/
|
||||||
|
abstract class Accounting extends Component
|
||||||
|
{
|
||||||
|
protected $casts = [
|
||||||
|
'qta' => 'float',
|
||||||
|
'prezzo_unitario' => 'float',
|
||||||
|
'prezzo_unitario_ivato' => 'float',
|
||||||
|
'iva_unitaria' => 'float',
|
||||||
|
'sconto_percentuale' => 'float',
|
||||||
|
'sconto_unitario' => 'float',
|
||||||
|
'sconto_iva_unitario' => 'float',
|
||||||
|
'sconto_unitario_ivato' => 'float',
|
||||||
|
//'qta_evasa' => 'float',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $appends = [
|
||||||
|
'prezzo_unitario_corrente',
|
||||||
|
'sconto_unitario_corrente',
|
||||||
|
'max_qta',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function getIvaIndetraibileAttribute()
|
||||||
|
{
|
||||||
|
return $this->iva / 100 * $this->aliquota->indetraibile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function aliquota()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Aliquota::class, 'idiva');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIvaAttribute()
|
||||||
|
{
|
||||||
|
return ($this->iva_unitaria - $this->sconto_iva_unitario) * $this->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il prezzo unitario secondo le informazioni indicate per valore e tipologia (UNT o PRC).
|
||||||
|
*
|
||||||
|
* @param $value
|
||||||
|
* @param $type
|
||||||
|
*/
|
||||||
|
public function setPrezzoUnitario($prezzo_unitario, $id_iva)
|
||||||
|
{
|
||||||
|
$this->id_iva = $id_iva;
|
||||||
|
|
||||||
|
// Gestione IVA incorporata
|
||||||
|
if ($this->incorporaIVA()) {
|
||||||
|
$this->prezzo_unitario_ivato = $prezzo_unitario;
|
||||||
|
} else {
|
||||||
|
$this->prezzo_unitario = $prezzo_unitario;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il totale (imponibile + iva) dell'elemento.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getTotaleAttribute()
|
||||||
|
{
|
||||||
|
return ($this->prezzo_unitario_ivato - $this->sconto_unitario_ivato) * $this->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce l'imponibile dell'elemento (prezzo unitario senza IVA * qta).
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getImponibileAttribute()
|
||||||
|
{
|
||||||
|
return $this->prezzo_unitario * $this->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il tipo di sconto della riga corrente.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getTipoScontoAttribute()
|
||||||
|
{
|
||||||
|
return $this->sconto_percentuale ? 'PRC' : 'UNT';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il margine totale (imponibile - spesa) relativo all'elemento.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getMargineAttribute()
|
||||||
|
{
|
||||||
|
return $this->totale_imponibile - $this->spesa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce l'importo (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita con IVA incorporata') per la riga.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getImportoAttribute()
|
||||||
|
{
|
||||||
|
return $this->incorporaIVA() ? $this->totale : $this->totale_imponibile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il totale imponibile dell'elemento (imponibile - sconto unitario senza IVA).
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getTotaleImponibileAttribute()
|
||||||
|
{
|
||||||
|
$result = $this->prezzo_unitario >= 0 ? $this->imponibile : -$this->imponibile;
|
||||||
|
|
||||||
|
$result -= $this->sconto;
|
||||||
|
|
||||||
|
return $this->prezzo_unitario >= 0 ? $result : -$result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il sconto unitario ivato (con IVA) per la riga corrente.
|
||||||
|
*
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setScontoUnitarioIvatoAttribute($value)
|
||||||
|
{
|
||||||
|
$this->attributes['sconto_unitario_ivato'] = $value;
|
||||||
|
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
||||||
|
|
||||||
|
$this->attributes['sconto_iva_unitario'] = $value * $percentuale_iva / (1 + $percentuale_iva); // Calcolo IVA
|
||||||
|
$this->attributes['sconto_unitario'] = $value - $this->attributes['sconto_iva_unitario'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la spesa (costo_unitario * qta) relativa all'elemento.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getSpesaAttribute()
|
||||||
|
{
|
||||||
|
return $this->costo_unitario * $this->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getIvaDetraibileAttribute()
|
||||||
|
{
|
||||||
|
return $this->iva - $this->iva_indetraibile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce lo sconto unitario corrente (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita comprensivi di IVA') per la riga.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getScontoUnitarioCorrenteAttribute()
|
||||||
|
{
|
||||||
|
// Gestione IVA incorporata
|
||||||
|
if ($this->incorporaIVA()) {
|
||||||
|
return $this->sconto_unitario_ivato;
|
||||||
|
} else {
|
||||||
|
return $this->sconto_unitario;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta lo sconto secondo le informazioni indicate per valore e tipologia (UNT o PRC).
|
||||||
|
*
|
||||||
|
* @param $value
|
||||||
|
* @param $type
|
||||||
|
*/
|
||||||
|
public function setSconto($value, $type)
|
||||||
|
{
|
||||||
|
$incorpora_iva = $this->incorporaIVA();
|
||||||
|
|
||||||
|
if ($type == 'PRC') {
|
||||||
|
$this->attributes['sconto_percentuale'] = $value;
|
||||||
|
|
||||||
|
$sconto = calcola_sconto([
|
||||||
|
'sconto' => $value,
|
||||||
|
'prezzo' => $incorpora_iva ? $this->prezzo_unitario_ivato : $this->prezzo_unitario,
|
||||||
|
'tipo' => 'PRC',
|
||||||
|
'qta' => 1,
|
||||||
|
]);
|
||||||
|
} else {
|
||||||
|
$this->attributes['sconto_percentuale'] = 0;
|
||||||
|
$sconto = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Gestione IVA incorporata
|
||||||
|
if ($incorpora_iva) {
|
||||||
|
$this->sconto_unitario_ivato = $sconto;
|
||||||
|
} else {
|
||||||
|
$this->sconto_unitario = $sconto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function incorporaIVA()
|
||||||
|
{
|
||||||
|
return $this->getDocument()->direzione == 'entrata' && setting('Utilizza prezzi di vendita comprensivi di IVA');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il prezzo unitario (senza IVA) per la riga corrente.
|
||||||
|
*
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setPrezzoUnitarioAttribute($value)
|
||||||
|
{
|
||||||
|
$this->attributes['prezzo_unitario'] = $value;
|
||||||
|
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
||||||
|
|
||||||
|
$this->attributes['iva_unitaria'] = $value * $percentuale_iva; // Calcolo IVA
|
||||||
|
$this->attributes['prezzo_unitario_ivato'] = $value + $this->attributes['iva_unitaria'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce lo sconto della riga corrente in euro.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getScontoAttribute()
|
||||||
|
{
|
||||||
|
return $this->qta * $this->sconto_unitario;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il prezzo unitario corrente (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita comprensivi di IVA') per la riga.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getPrezzoUnitarioCorrenteAttribute()
|
||||||
|
{
|
||||||
|
// Gestione IVA incorporata
|
||||||
|
if ($this->incorporaIVA()) {
|
||||||
|
return $this->prezzo_unitario_ivato;
|
||||||
|
} else {
|
||||||
|
return $this->prezzo_unitario;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce il margine percentuale relativo all'elemento.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getMarginePercentualeAttribute()
|
||||||
|
{
|
||||||
|
return (1 - ($this->spesa / $this->imponibile)) * 100;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il prezzo unitario ivato (con IVA) per la riga corrente.
|
||||||
|
*
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setPrezzoUnitarioIvatoAttribute($value)
|
||||||
|
{
|
||||||
|
$this->attributes['prezzo_unitario_ivato'] = $value;
|
||||||
|
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
||||||
|
|
||||||
|
$this->attributes['iva_unitaria'] = $value * $percentuale_iva / (1 + $percentuale_iva); // Calcolo IVA
|
||||||
|
$this->attributes['prezzo_unitario'] = $value - $this->attributes['iva_unitaria'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il sconto unitario (senza IVA) per la riga corrente.
|
||||||
|
*
|
||||||
|
* @param $value
|
||||||
|
*/
|
||||||
|
public function setScontoUnitarioAttribute($value)
|
||||||
|
{
|
||||||
|
$this->attributes['sconto_unitario'] = $value;
|
||||||
|
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
||||||
|
|
||||||
|
$this->attributes['sconto_iva_unitario'] = $value * $percentuale_iva; // Calcolo IVA
|
||||||
|
$this->attributes['sconto_unitario_ivato'] = $value + $this->attributes['sconto_iva_unitario'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta l'identificatore dell'IVA.
|
||||||
|
*
|
||||||
|
* @param int $value
|
||||||
|
*/
|
||||||
|
public function setIdIvaAttribute($value)
|
||||||
|
{
|
||||||
|
$this->attributes['idiva'] = $value;
|
||||||
|
$this->load('aliquota');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getSubtotaleAttribute()
|
||||||
|
{
|
||||||
|
return $this->imponibile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Salva la riga, impostando i campi dipendenti dai singoli parametri.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function save(array $options = [])
|
||||||
|
{
|
||||||
|
// Fix dei campi statici
|
||||||
|
$this->fixSubtotale();
|
||||||
|
$this->fixSconto();
|
||||||
|
|
||||||
|
$this->fixIva();
|
||||||
|
|
||||||
|
return parent::save($options);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per il subtotale della riga.
|
||||||
|
*/
|
||||||
|
protected function fixSubtotale()
|
||||||
|
{
|
||||||
|
$this->attributes['subtotale'] = $this->imponibile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per l'IVA.
|
||||||
|
*/
|
||||||
|
protected function fixIva()
|
||||||
|
{
|
||||||
|
$this->attributes['iva'] = $this->iva;
|
||||||
|
|
||||||
|
$descrizione = $this->aliquota->descrizione;
|
||||||
|
if (!empty($descrizione)) {
|
||||||
|
$this->attributes['desc_iva'] = $descrizione;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->fixIvaIndetraibile();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per l'IVA indetraibile.
|
||||||
|
*/
|
||||||
|
protected function fixIvaIndetraibile()
|
||||||
|
{
|
||||||
|
$this->attributes['iva_indetraibile'] = $this->iva_indetraibile;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Effettua i conti per lo sconto totale.
|
||||||
|
*/
|
||||||
|
protected function fixSconto()
|
||||||
|
{
|
||||||
|
$this->attributes['sconto'] = $this->sconto;
|
||||||
|
$this->attributes['tipo_sconto'] = $this->sconto_percentuale ? 'PRC' : 'UNT';
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function boot()
|
||||||
|
{
|
||||||
|
parent::boot();
|
||||||
|
|
||||||
|
// Pre-caricamento Aliquota IVA
|
||||||
|
static::addGlobalScope('aliquota', function (Builder $builder) {
|
||||||
|
$builder->with('aliquota');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -20,14 +20,17 @@
|
|||||||
namespace Common\Components;
|
namespace Common\Components;
|
||||||
|
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
|
use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Modules\Articoli\Articolo as Original;
|
use Modules\Articoli\Articolo as Original;
|
||||||
use Modules\Articoli\Movimento;
|
use Modules\Articoli\Movimento;
|
||||||
use Plugins\DettagliArticolo\DettaglioFornitore;
|
use Plugins\DettagliArticolo\DettaglioFornitore;
|
||||||
use UnexpectedValueException;
|
use UnexpectedValueException;
|
||||||
|
|
||||||
abstract class Article extends Row
|
abstract class Article extends Accounting
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
public $movimenta_magazzino = true;
|
public $movimenta_magazzino = true;
|
||||||
protected $abilita_movimentazione = true;
|
protected $abilita_movimentazione = true;
|
||||||
|
|
||||||
@ -38,7 +41,8 @@ abstract class Article extends Row
|
|||||||
|
|
||||||
public static function build(Document $document, Original $articolo)
|
public static function build(Document $document, Original $articolo)
|
||||||
{
|
{
|
||||||
$model = parent::build($document, true);
|
$model = new static();
|
||||||
|
$model->setDocument($document);
|
||||||
|
|
||||||
$model->articolo()->associate($articolo);
|
$model->articolo()->associate($articolo);
|
||||||
|
|
||||||
@ -49,6 +53,31 @@ abstract class Article extends Row
|
|||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isDescrizione()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isSconto()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isRiga()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isArticolo()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Metodo dedicato a gestire in automatico la movimentazione del magazzino in relazione all'articolo di riferimento sulla base delle caratteristiche del movimento (magazzino abilitato o meno).
|
||||||
|
*
|
||||||
|
* @param $qta
|
||||||
|
*/
|
||||||
public function movimenta($qta)
|
public function movimenta($qta)
|
||||||
{
|
{
|
||||||
if (!$this->movimenta_magazzino) {
|
if (!$this->movimenta_magazzino) {
|
||||||
@ -58,8 +87,8 @@ abstract class Article extends Row
|
|||||||
$movimenta = true;
|
$movimenta = true;
|
||||||
|
|
||||||
// Movimenta il magazzino solo se l'articolo non è già stato movimentato da un documento precedente
|
// Movimenta il magazzino solo se l'articolo non è già stato movimentato da un documento precedente
|
||||||
if ($this->hasOriginal()) {
|
if ($this->hasOriginalComponent()) {
|
||||||
$original = $this->getOriginal();
|
$original = $this->getOriginalComponent();
|
||||||
$movimenta = !$original->movimenta_magazzino;
|
$movimenta = !$original->movimenta_magazzino;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +99,7 @@ abstract class Article extends Row
|
|||||||
|
|
||||||
public function getDirection()
|
public function getDirection()
|
||||||
{
|
{
|
||||||
return $this->parent->direzione;
|
return $this->getDocument()->direzione;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -242,7 +271,7 @@ abstract class Article extends Row
|
|||||||
|
|
||||||
protected function movimentaMagazzino($qta)
|
protected function movimentaMagazzino($qta)
|
||||||
{
|
{
|
||||||
$documento = $this->parent;
|
$documento = $this->getDocument();
|
||||||
$data = $documento->getReferenceDate();
|
$data = $documento->getReferenceDate();
|
||||||
|
|
||||||
$qta_movimento = $documento->direzione == 'uscita' ? $qta : -$qta;
|
$qta_movimento = $documento->direzione == 'uscita' ? $qta : -$qta;
|
||||||
@ -265,15 +294,14 @@ abstract class Article extends Row
|
|||||||
|
|
||||||
protected static function boot()
|
protected static function boot()
|
||||||
{
|
{
|
||||||
// Precaricamento Articolo
|
parent::boot();
|
||||||
|
|
||||||
|
// Pre-caricamento Articolo
|
||||||
static::addGlobalScope('articolo', function (Builder $builder) {
|
static::addGlobalScope('articolo', function (Builder $builder) {
|
||||||
$builder->with('articolo', 'dettaglioFornitore');
|
$builder->with('articolo', 'dettaglioFornitore');
|
||||||
});
|
});
|
||||||
|
|
||||||
parent::boot(true);
|
$table = static::getTableName();
|
||||||
|
|
||||||
$table = parent::getTableName();
|
|
||||||
|
|
||||||
static::addGlobalScope('articles', function (Builder $builder) use ($table) {
|
static::addGlobalScope('articles', function (Builder $builder) use ($table) {
|
||||||
$builder->whereNotNull($table.'.idarticolo')->where($table.'.idarticolo', '<>', 0);
|
$builder->whereNotNull($table.'.idarticolo')->where($table.'.idarticolo', '<>', 0);
|
||||||
});
|
});
|
||||||
@ -341,18 +369,4 @@ abstract class Article extends Row
|
|||||||
{
|
{
|
||||||
$this->articolo()->associate($original->articolo);
|
$this->articolo()->associate($original->articolo);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function customBeforeDataCopiaIn($original)
|
|
||||||
{
|
|
||||||
//$this->movimentazione(false);
|
|
||||||
|
|
||||||
parent::customBeforeDataCopiaIn($original);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function customAfterDataCopiaIn($original)
|
|
||||||
{
|
|
||||||
// $this->movimentazione(true);
|
|
||||||
|
|
||||||
parent::customAfterDataCopiaIn($original);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
393
src/Common/Components/Component.php
Normal file
393
src/Common/Components/Component.php
Normal file
@ -0,0 +1,393 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.n.c.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Common\Components;
|
||||||
|
|
||||||
|
use Common\Document;
|
||||||
|
use Common\RowReference;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Classe dedicata alla gestione delle informazioni di base dei componenti dei Documenti, e in particolare di:
|
||||||
|
* - Collegamento con il Documento do origine
|
||||||
|
* - Riferimento di origine
|
||||||
|
* - Riferimenti informativi tra righe di altri documenti
|
||||||
|
* - Importazione tra documenti distinti di un componente.
|
||||||
|
*
|
||||||
|
* @property string original_type
|
||||||
|
* @property string original_id
|
||||||
|
*
|
||||||
|
* @since 2.4.18
|
||||||
|
*/
|
||||||
|
abstract class Component extends Model
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Componente di origine da cui il compontente corrente deriva.
|
||||||
|
*
|
||||||
|
* @var Component|null
|
||||||
|
*/
|
||||||
|
protected $original_model = null;
|
||||||
|
|
||||||
|
protected $guarded = [];
|
||||||
|
|
||||||
|
protected $appends = [
|
||||||
|
'max_qta',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $hidden = [
|
||||||
|
'parent',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function hasOriginalComponent()
|
||||||
|
{
|
||||||
|
return !empty($this->original_type) && !empty($this->getOriginalComponent());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getOriginalComponent()
|
||||||
|
{
|
||||||
|
if (!isset($this->original_model) && !empty($this->original_type)) {
|
||||||
|
$class = $this->original_type;
|
||||||
|
|
||||||
|
$this->original_model = $class::find($this->original_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->original_model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function referenceSources()
|
||||||
|
{
|
||||||
|
$class = get_class($this);
|
||||||
|
|
||||||
|
return $this->hasMany(RowReference::class, 'target_id')
|
||||||
|
->where('target_type', $class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function referenceTargets()
|
||||||
|
{
|
||||||
|
$class = get_class($this);
|
||||||
|
|
||||||
|
return $this->hasMany(RowReference::class, 'source_id')
|
||||||
|
->where('source_type', $class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce l'eventuale limite sulla quantità massima derivato dal componente di origine.
|
||||||
|
*
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
public function getMaxQtaAttribute()
|
||||||
|
{
|
||||||
|
if (!$this->hasOriginalComponent()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
$original = $this->getOriginalComponent();
|
||||||
|
|
||||||
|
return $original->qta_rimanente + $this->qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modifica la quantità del componente.
|
||||||
|
*
|
||||||
|
* @param float $value
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function setQtaAttribute($value)
|
||||||
|
{
|
||||||
|
$previous = $this->qta;
|
||||||
|
$diff = $value - $previous;
|
||||||
|
|
||||||
|
if ($this->hasOriginalComponent()) {
|
||||||
|
$original = $this->getOriginalComponent();
|
||||||
|
|
||||||
|
if ($original->qta_rimanente < $diff) {
|
||||||
|
$diff = $original->qta_rimanente;
|
||||||
|
$value = $previous + $diff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->attributes['qta'] = $value;
|
||||||
|
|
||||||
|
if ($this->hasOriginalComponent()) {
|
||||||
|
$original = $this->getOriginalComponent();
|
||||||
|
|
||||||
|
$original->qta_evasa += $diff;
|
||||||
|
$original->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $diff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restituisce la quantità rimanente del componente.
|
||||||
|
*
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getQtaRimanenteAttribute()
|
||||||
|
{
|
||||||
|
return $this->qta - $this->qta_evasa;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gestisce la possibilità di eliminare il componente.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function canDelete()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
if (!$this->canDelete()) {
|
||||||
|
throw new InvalidArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->hasOriginalComponent()) {
|
||||||
|
$original = $this->getOriginalComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->qta = 0;
|
||||||
|
$result = parent::delete();
|
||||||
|
|
||||||
|
// Trigger per la modifica delle righe
|
||||||
|
$this->getDocument()->triggerComponent($this);
|
||||||
|
|
||||||
|
// Trigger per l'evasione delle quantità
|
||||||
|
if ($this->hasOriginalComponent()) {
|
||||||
|
$original->getDocument()->triggerEvasione($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toArray()
|
||||||
|
{
|
||||||
|
$array = parent::toArray();
|
||||||
|
|
||||||
|
$result = array_merge($array, [
|
||||||
|
'spesa' => $this->spesa,
|
||||||
|
'imponibile' => $this->imponibile,
|
||||||
|
'sconto' => $this->sconto,
|
||||||
|
'totale_imponibile' => $this->totale_imponibile,
|
||||||
|
'iva' => $this->iva,
|
||||||
|
'totale' => $this->totale,
|
||||||
|
]);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copia l'oggetto (articolo, riga, descrizione) nel corrispettivo per il documento indicato.
|
||||||
|
*
|
||||||
|
* @param Document $document Documento di destinazione
|
||||||
|
* @param float|null $qta Quantità da riportare
|
||||||
|
*
|
||||||
|
* @return self
|
||||||
|
*/
|
||||||
|
public function copiaIn(Document $document, $qta = null)
|
||||||
|
{
|
||||||
|
// Individuazione classe di destinazione
|
||||||
|
$class = get_class($document);
|
||||||
|
$namespace = implode('\\', explode('\\', $class, -1));
|
||||||
|
|
||||||
|
$current = get_class($this);
|
||||||
|
$pieces = explode('\\', $current);
|
||||||
|
$type = end($pieces);
|
||||||
|
|
||||||
|
$object = $namespace.'\\Components\\'.$type;
|
||||||
|
|
||||||
|
// Attributi dell'oggetto da copiare
|
||||||
|
$attributes = $this->getAttributes();
|
||||||
|
unset($attributes['id']);
|
||||||
|
unset($attributes['order']);
|
||||||
|
|
||||||
|
if ($qta !== null) {
|
||||||
|
$attributes['qta'] = $qta;
|
||||||
|
}
|
||||||
|
|
||||||
|
$attributes['qta_evasa'] = 0;
|
||||||
|
|
||||||
|
// Creazione del nuovo oggetto
|
||||||
|
$model = new $object();
|
||||||
|
|
||||||
|
// Rimozione attributo in conflitto
|
||||||
|
unset($attributes[$model->getDocumentID()]);
|
||||||
|
|
||||||
|
// Riferimento di origine per l'evasione automatica della riga
|
||||||
|
$is_evasione = true;
|
||||||
|
if ($is_evasione) {
|
||||||
|
// Mantenimento dell'origine della riga precedente
|
||||||
|
$model->original_id = $attributes['original_id'];
|
||||||
|
$model->original_type = $attributes['original_type'];
|
||||||
|
|
||||||
|
// Aggiornamento dei riferimenti
|
||||||
|
list($riferimento_precedente, $nuovo_riferimento) = $model->impostaOrigine($current, $this->id);
|
||||||
|
|
||||||
|
// Correzione della descrizione
|
||||||
|
$attributes['descrizione'] = str_replace($riferimento_precedente, '', $attributes['descrizione']);
|
||||||
|
$attributes['descrizione'] .= $nuovo_riferimento;
|
||||||
|
}
|
||||||
|
unset($attributes['original_id']);
|
||||||
|
unset($attributes['original_type']);
|
||||||
|
|
||||||
|
// Impostazione del genitore
|
||||||
|
$model->setDocument($document);
|
||||||
|
|
||||||
|
// Azioni specifiche di inizializzazione
|
||||||
|
$model->customInitCopiaIn($this);
|
||||||
|
|
||||||
|
$model->save();
|
||||||
|
|
||||||
|
// Impostazione degli attributi
|
||||||
|
$model = $object::find($model->id);
|
||||||
|
if (empty($model)) {
|
||||||
|
dd($model, $attributes, $object);
|
||||||
|
}
|
||||||
|
$accepted = $model->getAttributes();
|
||||||
|
|
||||||
|
// Azioni specifiche precedenti
|
||||||
|
$model->customBeforeDataCopiaIn($this);
|
||||||
|
|
||||||
|
$attributes = array_intersect_key($attributes, $accepted);
|
||||||
|
$model->fill($attributes);
|
||||||
|
|
||||||
|
// Azioni specifiche successive
|
||||||
|
$model->customAfterDataCopiaIn($this);
|
||||||
|
|
||||||
|
$model->save();
|
||||||
|
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta l'origine del componente, restituendo un array contenente i replace da effettuare per modificare la descrizione in modo coerente.
|
||||||
|
*
|
||||||
|
* @param string $type
|
||||||
|
* @param string $id
|
||||||
|
*/
|
||||||
|
public function impostaOrigine($type, $id)
|
||||||
|
{
|
||||||
|
$riferimento_precedente = null;
|
||||||
|
$nuovo_riferimento = null;
|
||||||
|
|
||||||
|
// Rimozione del riferimento precedente dalla descrizione
|
||||||
|
if ($this->hasOriginalComponent()) {
|
||||||
|
$riferimento = $this->getOriginalComponent()->getDocument()->getReference();
|
||||||
|
$riferimento_precedente = "\nRif. ".strtolower($riferimento);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->original_id = $id;
|
||||||
|
$this->original_type = $type;
|
||||||
|
|
||||||
|
// Aggiunta del riferimento nella descrizione
|
||||||
|
$origine = $type::find($id);
|
||||||
|
if (!empty($origine)) {
|
||||||
|
$riferimento = $origine->getDocument()->getReference();
|
||||||
|
$nuovo_riferimento = "\nRif. ".strtolower($riferimento);
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$riferimento_precedente, $nuovo_riferimento];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Imposta il proprietario dell'oggetto e l'ordine relativo all'interno delle righe.
|
||||||
|
*
|
||||||
|
* @param Document $document Documento di riferimento
|
||||||
|
*/
|
||||||
|
public function setDocument(Document $document)
|
||||||
|
{
|
||||||
|
$this->document()->associate($document);
|
||||||
|
|
||||||
|
// Ordine delle righe
|
||||||
|
if (empty($this->disableOrder)) {
|
||||||
|
$this->order = orderValue($this->table, $this->getDocumentID(), $document->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Document
|
||||||
|
*/
|
||||||
|
public function getDocument()
|
||||||
|
{
|
||||||
|
return $this->document;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract public function document();
|
||||||
|
|
||||||
|
abstract public function getDocumentID();
|
||||||
|
|
||||||
|
public function save(array $options = [])
|
||||||
|
{
|
||||||
|
$result = parent::save($options);
|
||||||
|
|
||||||
|
// Trigger per la modifica delle righe
|
||||||
|
$this->getDocument()->triggerComponent($this);
|
||||||
|
|
||||||
|
// Trigger per l'evasione delle quantità
|
||||||
|
if ($this->hasOriginalComponent()) {
|
||||||
|
$original = $this->getOriginalComponent();
|
||||||
|
|
||||||
|
$original->getDocument()->triggerEvasione($this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Azione personalizzata per la copia dell'oggetto (inizializzazione della copia).
|
||||||
|
*
|
||||||
|
* @param $original
|
||||||
|
*/
|
||||||
|
protected function customInitCopiaIn($original)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Azione personalizzata per la copia dell'oggetto (dopo la copia).
|
||||||
|
*
|
||||||
|
* @param $original
|
||||||
|
*/
|
||||||
|
protected function customBeforeDataCopiaIn($original)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Azione personalizzata per la copia dell'oggetto (dopo la copia).
|
||||||
|
*
|
||||||
|
* @param $original
|
||||||
|
*/
|
||||||
|
protected function customAfterDataCopiaIn($original)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static function boot()
|
||||||
|
{
|
||||||
|
// Pre-caricamento Documento
|
||||||
|
static::addGlobalScope('document', function (Builder $builder) {
|
||||||
|
$builder->with('document');
|
||||||
|
});
|
||||||
|
|
||||||
|
parent::boot();
|
||||||
|
}
|
||||||
|
}
|
@ -20,295 +20,43 @@
|
|||||||
namespace Common\Components;
|
namespace Common\Components;
|
||||||
|
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
abstract class Description extends Model
|
abstract class Description extends Component
|
||||||
{
|
{
|
||||||
use MorphTrait;
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $guarded = [];
|
public static function build(Document $document)
|
||||||
|
|
||||||
protected $appends = [
|
|
||||||
'max_qta',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $hidden = [
|
|
||||||
'parent',
|
|
||||||
];
|
|
||||||
|
|
||||||
public static function build(Document $document, $bypass = false)
|
|
||||||
{
|
{
|
||||||
$model = parent::build();
|
$model = new static();
|
||||||
|
|
||||||
if (!$bypass) {
|
$model->is_descrizione = 1;
|
||||||
$model->is_descrizione = 1;
|
$model->qta = 1;
|
||||||
$model->qta = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$model->setParent($document);
|
$model->setDocument($document);
|
||||||
|
|
||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMaxQtaAttribute()
|
public function isDescrizione()
|
||||||
{
|
|
||||||
if (!$this->hasOriginal()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
$original = $this->getOriginal();
|
|
||||||
|
|
||||||
return $original->qta_rimanente + $this->qta;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Modifica la quantità dell'elemento.
|
|
||||||
*
|
|
||||||
* @param float $value
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function setQtaAttribute($value)
|
|
||||||
{
|
|
||||||
$previous = $this->qta;
|
|
||||||
$diff = $value - $previous;
|
|
||||||
|
|
||||||
if ($this->hasOriginal()) {
|
|
||||||
$original = $this->getOriginal();
|
|
||||||
|
|
||||||
if ($original->qta_rimanente < $diff) {
|
|
||||||
$diff = $original->qta_rimanente;
|
|
||||||
$value = $previous + $diff;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->attributes['qta'] = $value;
|
|
||||||
|
|
||||||
if ($this->hasOriginal()) {
|
|
||||||
$original = $this->getOriginal();
|
|
||||||
|
|
||||||
$original->qta_evasa += $diff;
|
|
||||||
$original->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $diff;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce la quantità rimanente dell'elemento.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getQtaRimanenteAttribute()
|
|
||||||
{
|
|
||||||
return $this->qta - $this->qta_evasa;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function canDelete()
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete()
|
|
||||||
{
|
|
||||||
if (!$this->canDelete()) {
|
|
||||||
throw new \InvalidArgumentException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->hasOriginal()) {
|
|
||||||
$original = $this->getOriginal();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->qta = 0;
|
|
||||||
$result = parent::delete();
|
|
||||||
|
|
||||||
// Trigger per la modifica delle righe
|
|
||||||
$this->parent->triggerComponent($this);
|
|
||||||
|
|
||||||
// Trigger per l'evasione delle quantità
|
|
||||||
if ($this->hasOriginal()) {
|
|
||||||
$original->parent->triggerEvasione($this);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function toArray()
|
|
||||||
{
|
|
||||||
$array = parent::toArray();
|
|
||||||
|
|
||||||
$result = array_merge($array, [
|
|
||||||
'spesa' => $this->spesa,
|
|
||||||
'imponibile' => $this->imponibile,
|
|
||||||
'sconto' => $this->sconto,
|
|
||||||
'totale_imponibile' => $this->totale_imponibile,
|
|
||||||
'iva' => $this->iva,
|
|
||||||
'totale' => $this->totale,
|
|
||||||
]);
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta il proprietario dell'oggetto e l'ordine relativo all'interno delle righe.
|
|
||||||
*/
|
|
||||||
public function setParent(Document $document)
|
|
||||||
{
|
|
||||||
$this->parent()->associate($document);
|
|
||||||
|
|
||||||
// Ordine delle righe
|
|
||||||
if (empty($this->disableOrder)) {
|
|
||||||
$this->order = orderValue($this->table, $this->getParentID(), $document->id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copia l'oggetto (articolo, riga, descrizione) nel corrispettivo per il documento indicato.
|
|
||||||
*
|
|
||||||
* @return self
|
|
||||||
*/
|
|
||||||
public function copiaIn(Document $document, $qta = null)
|
|
||||||
{
|
|
||||||
// Individuazione classe di destinazione
|
|
||||||
$class = get_class($document);
|
|
||||||
$namespace = implode('\\', explode('\\', $class, -1));
|
|
||||||
|
|
||||||
$current = get_class($this);
|
|
||||||
$pieces = explode('\\', $current);
|
|
||||||
$type = end($pieces);
|
|
||||||
|
|
||||||
$object = $namespace.'\\Components\\'.$type;
|
|
||||||
|
|
||||||
// Attributi dell'oggetto da copiare
|
|
||||||
$attributes = $this->getAttributes();
|
|
||||||
unset($attributes['id']);
|
|
||||||
unset($attributes['order']);
|
|
||||||
|
|
||||||
if ($qta !== null) {
|
|
||||||
$attributes['qta'] = $qta;
|
|
||||||
}
|
|
||||||
|
|
||||||
$attributes['qta_evasa'] = 0;
|
|
||||||
|
|
||||||
// Creazione del nuovo oggetto
|
|
||||||
$model = new $object();
|
|
||||||
|
|
||||||
// Rimozione attributo in conflitto
|
|
||||||
unset($attributes[$model->getParentID()]);
|
|
||||||
|
|
||||||
// Riferimento di origine per l'evasione automatica della riga
|
|
||||||
$is_evasione = true;
|
|
||||||
if ($is_evasione) {
|
|
||||||
// Mantenimento dell'origine della riga precedente
|
|
||||||
$model->original_id = $attributes['original_id'];
|
|
||||||
$model->original_type = $attributes['original_type'];
|
|
||||||
|
|
||||||
// Aggiornamento dei riferimenti
|
|
||||||
list($riferimento_precedente, $nuovo_riferimento) = $model->impostaOrigine($current, $this->id);
|
|
||||||
|
|
||||||
// Correzione della descrizione
|
|
||||||
$attributes['descrizione'] = str_replace($riferimento_precedente, '', $attributes['descrizione']);
|
|
||||||
$attributes['descrizione'] .= $nuovo_riferimento;
|
|
||||||
}
|
|
||||||
unset($attributes['original_id']);
|
|
||||||
unset($attributes['original_type']);
|
|
||||||
|
|
||||||
// Impostazione del genitore
|
|
||||||
$model->setParent($document);
|
|
||||||
|
|
||||||
// Azioni specifiche di inizializzazione
|
|
||||||
$model->customInitCopiaIn($this);
|
|
||||||
|
|
||||||
$model->save();
|
|
||||||
|
|
||||||
// Impostazione degli attributi
|
|
||||||
$model = $object::find($model->id);
|
|
||||||
$accepted = $model->getAttributes();
|
|
||||||
|
|
||||||
// Azioni specifiche precedenti
|
|
||||||
$model->customBeforeDataCopiaIn($this);
|
|
||||||
|
|
||||||
$attributes = array_intersect_key($attributes, $accepted);
|
|
||||||
$model->fill($attributes);
|
|
||||||
|
|
||||||
// Azioni specifiche successive
|
|
||||||
$model->customAfterDataCopiaIn($this);
|
|
||||||
|
|
||||||
$model->save();
|
|
||||||
|
|
||||||
return $model;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta l'origine dell'elemento, restituendo un array contenente i replace da effettuare per modificare la descrizione in modo coerente.
|
|
||||||
*
|
|
||||||
* @param $type
|
|
||||||
* @param $id
|
|
||||||
*/
|
|
||||||
public function impostaOrigine($type, $id)
|
|
||||||
{
|
|
||||||
$riferimento_precedente = null;
|
|
||||||
$nuovo_riferimento = null;
|
|
||||||
|
|
||||||
// Rimozione del riferimento precedente dalla descrizione
|
|
||||||
if ($this->hasOriginal()) {
|
|
||||||
$riferimento = $this->getOriginal()->parent->getReference();
|
|
||||||
$riferimento_precedente = "\nRif. ".strtolower($riferimento);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->original_id = $id;
|
|
||||||
$this->original_type = $type;
|
|
||||||
|
|
||||||
// Aggiunta del riferimento nella descrizione
|
|
||||||
$origine = $type::find($id);
|
|
||||||
if (!empty($origine)) {
|
|
||||||
$riferimento = $origine->parent->getReference();
|
|
||||||
$nuovo_riferimento = "\nRif. ".strtolower($riferimento);
|
|
||||||
}
|
|
||||||
|
|
||||||
return [$riferimento_precedente, $nuovo_riferimento];
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract public function parent();
|
|
||||||
|
|
||||||
abstract public function getParentID();
|
|
||||||
|
|
||||||
public function isDescrizione()
|
|
||||||
{
|
|
||||||
return !$this->isArticolo() && !$this->isSconto() && !$this->isRiga() && $this instanceof Description;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function isSconto()
|
public function isSconto()
|
||||||
{
|
{
|
||||||
return $this instanceof Discount;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isRiga()
|
public function isRiga()
|
||||||
{
|
{
|
||||||
return !$this->isArticolo() && !$this->isSconto() && $this instanceof Row;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isArticolo()
|
public function isArticolo()
|
||||||
{
|
{
|
||||||
return $this instanceof Article;
|
return false;
|
||||||
}
|
|
||||||
|
|
||||||
public function save(array $options = [])
|
|
||||||
{
|
|
||||||
$result = parent::save($options);
|
|
||||||
|
|
||||||
// Trigger per la modifica delle righe
|
|
||||||
$this->parent->triggerComponent($this);
|
|
||||||
|
|
||||||
// Trigger per l'evasione delle quantità
|
|
||||||
if ($this->hasOriginal()) {
|
|
||||||
$original = $this->getOriginal();
|
|
||||||
|
|
||||||
$original->parent->triggerEvasione($this);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -319,46 +67,16 @@ abstract class Description extends Model
|
|||||||
protected function customInitCopiaIn($original)
|
protected function customInitCopiaIn($original)
|
||||||
{
|
{
|
||||||
$this->is_descrizione = $original->is_descrizione;
|
$this->is_descrizione = $original->is_descrizione;
|
||||||
$this->is_sconto = $original->is_sconto;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Azione personalizzata per la copia dell'oggetto (dopo la copia).
|
|
||||||
*
|
|
||||||
* @param $original
|
|
||||||
*/
|
|
||||||
protected function customBeforeDataCopiaIn($original)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Azione personalizzata per la copia dell'oggetto (dopo la copia).
|
|
||||||
*
|
|
||||||
* @param $original
|
|
||||||
*/
|
|
||||||
protected function customAfterDataCopiaIn($original)
|
|
||||||
{
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static function boot($bypass = false)
|
protected static function boot($bypass = false)
|
||||||
{
|
{
|
||||||
// Precaricamento Documento
|
// Pre-caricamento Documento
|
||||||
static::addGlobalScope('parent', function (Builder $builder) {
|
|
||||||
$builder->with('parent');
|
|
||||||
});
|
|
||||||
|
|
||||||
parent::boot();
|
parent::boot();
|
||||||
|
|
||||||
$table = parent::getTableName();
|
$table = static::getTableName();
|
||||||
|
static::addGlobalScope('descriptions', function (Builder $builder) use ($table) {
|
||||||
if (!$bypass) {
|
$builder->where($table.'.is_descrizione', '=', 1);
|
||||||
static::addGlobalScope('descriptions', function (Builder $builder) use ($table) {
|
});
|
||||||
$builder->where($table.'.is_descrizione', '=', 1);
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
static::addGlobalScope('not_descriptions', function (Builder $builder) use ($table) {
|
|
||||||
$builder->where($table.'.is_descrizione', '=', 0);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,15 +20,19 @@
|
|||||||
namespace Common\Components;
|
namespace Common\Components;
|
||||||
|
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
|
use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
abstract class Discount extends Row
|
abstract class Discount extends Accounting
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $guarded = [];
|
protected $guarded = [];
|
||||||
|
|
||||||
public static function build(Document $document)
|
public static function build(Document $document)
|
||||||
{
|
{
|
||||||
$model = parent::build($document, true);
|
$model = new static();
|
||||||
|
$model->setDocument($document);
|
||||||
|
|
||||||
$model->is_sconto = 1;
|
$model->is_sconto = 1;
|
||||||
$model->qta = 1;
|
$model->qta = 1;
|
||||||
@ -36,6 +40,26 @@ abstract class Discount extends Row
|
|||||||
return $model;
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isDescrizione()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isSconto()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isRiga()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isArticolo()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public function getIvaAttribute()
|
public function getIvaAttribute()
|
||||||
{
|
{
|
||||||
return $this->attributes['iva'];
|
return $this->attributes['iva'];
|
||||||
@ -61,12 +85,16 @@ abstract class Discount extends Row
|
|||||||
$this->fixIvaIndetraibile();
|
$this->fixIvaIndetraibile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function customInitCopiaIn($original)
|
||||||
|
{
|
||||||
|
$this->is_sconto = $original->is_sconto;
|
||||||
|
}
|
||||||
|
|
||||||
protected static function boot($bypass = false)
|
protected static function boot($bypass = false)
|
||||||
{
|
{
|
||||||
parent::boot(true);
|
parent::boot();
|
||||||
|
|
||||||
$table = parent::getTableName();
|
|
||||||
|
|
||||||
|
$table = static::getTableName();
|
||||||
static::addGlobalScope('discounts', function (Builder $builder) use ($table) {
|
static::addGlobalScope('discounts', function (Builder $builder) use ($table) {
|
||||||
$builder->where($table.'.is_sconto', '=', 1);
|
$builder->where($table.'.is_sconto', '=', 1);
|
||||||
});
|
});
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
|
||||||
* Copyright (C) DevCode s.n.c.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Common\Components;
|
|
||||||
|
|
||||||
use Common\RowReference;
|
|
||||||
|
|
||||||
trait MorphTrait
|
|
||||||
{
|
|
||||||
protected $original_model = null;
|
|
||||||
|
|
||||||
public function hasOriginal()
|
|
||||||
{
|
|
||||||
return !empty($this->original_type) && !empty($this->getOriginal());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getOriginal()
|
|
||||||
{
|
|
||||||
if (!isset($this->original_model) && !empty($this->original_type)) {
|
|
||||||
$class = $this->original_type;
|
|
||||||
|
|
||||||
$this->original_model = $class::find($this->original_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->original_model;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function referenceSources()
|
|
||||||
{
|
|
||||||
$class = get_class($this);
|
|
||||||
|
|
||||||
return $this->hasMany(RowReference::class, 'target_id')
|
|
||||||
->where('target_type', $class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function referenceTargets()
|
|
||||||
{
|
|
||||||
$class = get_class($this);
|
|
||||||
|
|
||||||
return $this->hasMany(RowReference::class, 'source_id')
|
|
||||||
->where('source_type', $class);
|
|
||||||
}
|
|
||||||
}
|
|
@ -20,380 +20,57 @@
|
|||||||
namespace Common\Components;
|
namespace Common\Components;
|
||||||
|
|
||||||
use Common\Document;
|
use Common\Document;
|
||||||
|
use Common\SimpleModelTrait;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Modules\Iva\Aliquota;
|
|
||||||
|
|
||||||
abstract class Row extends Description
|
abstract class Row extends Accounting
|
||||||
{
|
{
|
||||||
protected $casts = [
|
use SimpleModelTrait;
|
||||||
'qta' => 'float',
|
|
||||||
'prezzo_unitario' => 'float',
|
|
||||||
'prezzo_unitario_ivato' => 'float',
|
|
||||||
'iva_unitaria' => 'float',
|
|
||||||
'sconto_percentuale' => 'float',
|
|
||||||
'sconto_unitario' => 'float',
|
|
||||||
'sconto_iva_unitario' => 'float',
|
|
||||||
'sconto_unitario_ivato' => 'float',
|
|
||||||
//'qta_evasa' => 'float',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $appends = [
|
public static function build(Document $document)
|
||||||
'prezzo_unitario_corrente',
|
|
||||||
'sconto_unitario_corrente',
|
|
||||||
'max_qta',
|
|
||||||
];
|
|
||||||
|
|
||||||
public static function build(Document $document, $bypass = false)
|
|
||||||
{
|
{
|
||||||
return parent::build($document, true);
|
$model = new static();
|
||||||
|
$model->setDocument($document);
|
||||||
|
|
||||||
|
return $model;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attributi di contabilità
|
public function isDescrizione()
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce l'imponibile dell'elemento (prezzo unitario senza IVA * qta).
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getImponibileAttribute()
|
|
||||||
{
|
{
|
||||||
return $this->prezzo_unitario * $this->qta;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function isSconto()
|
||||||
* Restituisce il totale imponibile dell'elemento (imponibile - sconto unitario senza IVA).
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getTotaleImponibileAttribute()
|
|
||||||
{
|
{
|
||||||
$result = $this->prezzo_unitario >= 0 ? $this->imponibile : -$this->imponibile;
|
return false;
|
||||||
|
|
||||||
$result -= $this->sconto;
|
|
||||||
|
|
||||||
return $this->prezzo_unitario >= 0 ? $result : -$result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function isRiga()
|
||||||
* Restituisce il totale (imponibile + iva) dell'elemento.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getTotaleAttribute()
|
|
||||||
{
|
{
|
||||||
return ($this->prezzo_unitario_ivato - $this->sconto_unitario_ivato) * $this->qta;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function isArticolo()
|
||||||
* Restituisce l'importo (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita con IVA incorporata') per la riga.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getImportoAttribute()
|
|
||||||
{
|
{
|
||||||
return $this->incorporaIVA() ? $this->totale : $this->totale_imponibile;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected static function boot()
|
||||||
* Restituisce la spesa (costo_unitario * qta) relativa all'elemento.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getSpesaAttribute()
|
|
||||||
{
|
{
|
||||||
return $this->costo_unitario * $this->qta;
|
parent::boot();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
$table = static::getTableName();
|
||||||
* Restituisce il margine totale (imponibile - spesa) relativo all'elemento.
|
static::addGlobalScope('not_articles', function (Builder $builder) use ($table) {
|
||||||
*
|
$builder->whereNull($table.'.idarticolo')->orWhere($table.'.idarticolo', '=', 0);
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getMargineAttribute()
|
|
||||||
{
|
|
||||||
return $this->totale_imponibile - $this->spesa;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce il margine percentuale relativo all'elemento.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getMarginePercentualeAttribute()
|
|
||||||
{
|
|
||||||
return (1 - ($this->spesa / $this->imponibile)) * 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Attributi della componente
|
|
||||||
|
|
||||||
public function getIvaAttribute()
|
|
||||||
{
|
|
||||||
return ($this->iva_unitaria - $this->sconto_iva_unitario) * $this->qta;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getIvaIndetraibileAttribute()
|
|
||||||
{
|
|
||||||
return $this->iva / 100 * $this->aliquota->indetraibile;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getIvaDetraibileAttribute()
|
|
||||||
{
|
|
||||||
return $this->iva - $this->iva_indetraibile;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getSubtotaleAttribute()
|
|
||||||
{
|
|
||||||
return $this->imponibile;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce lo sconto della riga corrente in euro.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getScontoAttribute()
|
|
||||||
{
|
|
||||||
return $this->qta * $this->sconto_unitario;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce il tipo di sconto della riga corrente.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getTipoScontoAttribute()
|
|
||||||
{
|
|
||||||
return $this->sconto_percentuale ? 'PRC' : 'UNT';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta l'identificatore dell'IVA.
|
|
||||||
*
|
|
||||||
* @param int $value
|
|
||||||
*/
|
|
||||||
public function setIdIvaAttribute($value)
|
|
||||||
{
|
|
||||||
$this->attributes['idiva'] = $value;
|
|
||||||
$this->load('aliquota');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce il prezzo unitario corrente (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita comprensivi di IVA') per la riga.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getPrezzoUnitarioCorrenteAttribute()
|
|
||||||
{
|
|
||||||
// Gestione IVA incorporata
|
|
||||||
if ($this->incorporaIVA()) {
|
|
||||||
return $this->prezzo_unitario_ivato;
|
|
||||||
} else {
|
|
||||||
return $this->prezzo_unitario;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Restituisce lo sconto unitario corrente (unitario oppure unitario ivato a seconda dell'impostazione 'Utilizza prezzi di vendita comprensivi di IVA') per la riga.
|
|
||||||
*
|
|
||||||
* @return float
|
|
||||||
*/
|
|
||||||
public function getScontoUnitarioCorrenteAttribute()
|
|
||||||
{
|
|
||||||
// Gestione IVA incorporata
|
|
||||||
if ($this->incorporaIVA()) {
|
|
||||||
return $this->sconto_unitario_ivato;
|
|
||||||
} else {
|
|
||||||
return $this->sconto_unitario;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta il prezzo unitario (senza IVA) per la riga corrente.
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
*/
|
|
||||||
public function setPrezzoUnitarioAttribute($value)
|
|
||||||
{
|
|
||||||
$this->attributes['prezzo_unitario'] = $value;
|
|
||||||
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
|
||||||
|
|
||||||
$this->attributes['iva_unitaria'] = $value * $percentuale_iva; // Calcolo IVA
|
|
||||||
$this->attributes['prezzo_unitario_ivato'] = $value + $this->attributes['iva_unitaria'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta il prezzo unitario ivato (con IVA) per la riga corrente.
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
*/
|
|
||||||
public function setPrezzoUnitarioIvatoAttribute($value)
|
|
||||||
{
|
|
||||||
$this->attributes['prezzo_unitario_ivato'] = $value;
|
|
||||||
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
|
||||||
|
|
||||||
$this->attributes['iva_unitaria'] = $value * $percentuale_iva / (1 + $percentuale_iva); // Calcolo IVA
|
|
||||||
$this->attributes['prezzo_unitario'] = $value - $this->attributes['iva_unitaria'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta il sconto unitario (senza IVA) per la riga corrente.
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
*/
|
|
||||||
public function setScontoUnitarioAttribute($value)
|
|
||||||
{
|
|
||||||
$this->attributes['sconto_unitario'] = $value;
|
|
||||||
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
|
||||||
|
|
||||||
$this->attributes['sconto_iva_unitario'] = $value * $percentuale_iva; // Calcolo IVA
|
|
||||||
$this->attributes['sconto_unitario_ivato'] = $value + $this->attributes['sconto_iva_unitario'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta il sconto unitario ivato (con IVA) per la riga corrente.
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
*/
|
|
||||||
public function setScontoUnitarioIvatoAttribute($value)
|
|
||||||
{
|
|
||||||
$this->attributes['sconto_unitario_ivato'] = $value;
|
|
||||||
$percentuale_iva = floatval($this->aliquota->percentuale) / 100;
|
|
||||||
|
|
||||||
$this->attributes['sconto_iva_unitario'] = $value * $percentuale_iva / (1 + $percentuale_iva); // Calcolo IVA
|
|
||||||
$this->attributes['sconto_unitario'] = $value - $this->attributes['sconto_iva_unitario'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta il prezzo unitario secondo le informazioni indicate per valore e tipologia (UNT o PRC).
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
* @param $type
|
|
||||||
*/
|
|
||||||
public function setPrezzoUnitario($prezzo_unitario, $id_iva)
|
|
||||||
{
|
|
||||||
$this->id_iva = $id_iva;
|
|
||||||
|
|
||||||
// Gestione IVA incorporata
|
|
||||||
if ($this->incorporaIVA()) {
|
|
||||||
$this->prezzo_unitario_ivato = $prezzo_unitario;
|
|
||||||
} else {
|
|
||||||
$this->prezzo_unitario = $prezzo_unitario;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Imposta lo sconto secondo le informazioni indicate per valore e tipologia (UNT o PRC).
|
|
||||||
*
|
|
||||||
* @param $value
|
|
||||||
* @param $type
|
|
||||||
*/
|
|
||||||
public function setSconto($value, $type)
|
|
||||||
{
|
|
||||||
$incorpora_iva = $this->incorporaIVA();
|
|
||||||
|
|
||||||
if ($type == 'PRC') {
|
|
||||||
$this->attributes['sconto_percentuale'] = $value;
|
|
||||||
|
|
||||||
$sconto = calcola_sconto([
|
|
||||||
'sconto' => $value,
|
|
||||||
'prezzo' => $incorpora_iva ? $this->prezzo_unitario_ivato : $this->prezzo_unitario,
|
|
||||||
'tipo' => 'PRC',
|
|
||||||
'qta' => 1,
|
|
||||||
]);
|
|
||||||
} else {
|
|
||||||
$this->attributes['sconto_percentuale'] = 0;
|
|
||||||
$sconto = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Gestione IVA incorporata
|
|
||||||
if ($incorpora_iva) {
|
|
||||||
$this->sconto_unitario_ivato = $sconto;
|
|
||||||
} else {
|
|
||||||
$this->sconto_unitario = $sconto;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Salva la riga, impostando i campi dipendenti dai singoli parametri.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function save(array $options = [])
|
|
||||||
{
|
|
||||||
// Fix dei campi statici
|
|
||||||
$this->fixSubtotale();
|
|
||||||
$this->fixSconto();
|
|
||||||
|
|
||||||
$this->fixIva();
|
|
||||||
|
|
||||||
return parent::save($options);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function aliquota()
|
|
||||||
{
|
|
||||||
return $this->belongsTo(Aliquota::class, 'idiva');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static function boot($bypass = false)
|
|
||||||
{
|
|
||||||
// Precaricamento Aliquota IVA
|
|
||||||
static::addGlobalScope('aliquota', function (Builder $builder) {
|
|
||||||
$builder->with('aliquota');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
parent::boot(true);
|
static::addGlobalScope('not_discounts', function (Builder $builder) use ($table) {
|
||||||
|
$builder->where($table.'.is_sconto', '=', 0);
|
||||||
|
});
|
||||||
|
|
||||||
$table = parent::getTableName();
|
static::addGlobalScope('not_descriptions', function (Builder $builder) use ($table) {
|
||||||
|
$builder->where($table.'.is_descrizione', '=', 0);
|
||||||
if (!$bypass) {
|
});
|
||||||
static::addGlobalScope('rows', function (Builder $builder) use ($table) {
|
|
||||||
$builder->whereNull($table.'.idarticolo')->orWhere($table.'.idarticolo', '=', 0);
|
|
||||||
});
|
|
||||||
|
|
||||||
static::addGlobalScope('not_discounts', function (Builder $builder) use ($table) {
|
|
||||||
$builder->where($table.'.is_sconto', '=', 0);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Effettua i conti per il subtotale della riga.
|
|
||||||
*/
|
|
||||||
protected function fixSubtotale()
|
|
||||||
{
|
|
||||||
$this->attributes['subtotale'] = $this->imponibile;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Effettua i conti per l'IVA.
|
|
||||||
*/
|
|
||||||
protected function fixIva()
|
|
||||||
{
|
|
||||||
$this->attributes['iva'] = $this->iva;
|
|
||||||
|
|
||||||
$descrizione = $this->aliquota->descrizione;
|
|
||||||
if (!empty($descrizione)) {
|
|
||||||
$this->attributes['desc_iva'] = $descrizione;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->fixIvaIndetraibile();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Effettua i conti per l'IVA indetraibile.
|
|
||||||
*/
|
|
||||||
protected function fixIvaIndetraibile()
|
|
||||||
{
|
|
||||||
$this->attributes['iva_indetraibile'] = $this->iva_indetraibile;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Effettua i conti per lo sconto totale.
|
|
||||||
*/
|
|
||||||
protected function fixSconto()
|
|
||||||
{
|
|
||||||
$this->attributes['sconto'] = $this->sconto;
|
|
||||||
$this->attributes['tipo_sconto'] = $this->sconto_percentuale ? 'PRC' : 'UNT';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -407,9 +84,4 @@ abstract class Row extends Description
|
|||||||
|
|
||||||
parent::customAfterDataCopiaIn($original);
|
parent::customAfterDataCopiaIn($original);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function incorporaIVA()
|
|
||||||
{
|
|
||||||
return $this->parent->direzione == 'entrata' && setting('Utilizza prezzi di vendita comprensivi di IVA');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,8 @@
|
|||||||
|
|
||||||
namespace Common;
|
namespace Common;
|
||||||
|
|
||||||
use Common\Components\Description;
|
use Common\Components\Component;
|
||||||
|
use Illuminate\Database\Eloquent\Model as Model;
|
||||||
|
|
||||||
abstract class Document extends Model implements ReferenceInterface
|
abstract class Document extends Model implements ReferenceInterface
|
||||||
{
|
{
|
||||||
@ -65,11 +66,11 @@ abstract class Document extends Model implements ReferenceInterface
|
|||||||
$righe = $this->getRighe();
|
$righe = $this->getRighe();
|
||||||
|
|
||||||
$groups = $righe->groupBy(function ($item, $key) {
|
$groups = $righe->groupBy(function ($item, $key) {
|
||||||
if (!$item->hasOriginal()) {
|
if (!$item->hasOriginalComponent()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$parent = $item->getOriginal()->parent;
|
$parent = $item->getOriginalComponent()->getDocument();
|
||||||
|
|
||||||
return serialize($parent);
|
return serialize($parent);
|
||||||
});
|
});
|
||||||
@ -191,7 +192,7 @@ abstract class Document extends Model implements ReferenceInterface
|
|||||||
* Metodo richiamato a seguito di modifiche sull'evasione generale delle righe del documento.
|
* Metodo richiamato a seguito di modifiche sull'evasione generale delle righe del documento.
|
||||||
* Utilizzabile per l'impostazione automatica degli stati.
|
* Utilizzabile per l'impostazione automatica degli stati.
|
||||||
*/
|
*/
|
||||||
public function triggerEvasione(Description $trigger)
|
public function triggerEvasione(Component $trigger)
|
||||||
{
|
{
|
||||||
$this->setRelations([]);
|
$this->setRelations([]);
|
||||||
}
|
}
|
||||||
@ -200,7 +201,7 @@ abstract class Document extends Model implements ReferenceInterface
|
|||||||
* Metodo richiamato a seguito della modifica o creazione di una riga del documento.
|
* Metodo richiamato a seguito della modifica o creazione di una riga del documento.
|
||||||
* Utilizzabile per limpostazione automatica di campi statici del documento.
|
* Utilizzabile per limpostazione automatica di campi statici del documento.
|
||||||
*/
|
*/
|
||||||
public function triggerComponent(Description $trigger)
|
public function triggerComponent(Component $trigger)
|
||||||
{
|
{
|
||||||
$this->setRelations([]);
|
$this->setRelations([]);
|
||||||
}
|
}
|
||||||
|
@ -21,26 +21,10 @@ namespace Common;
|
|||||||
|
|
||||||
use Illuminate\Database\Eloquent\Model as Original;
|
use Illuminate\Database\Eloquent\Model as Original;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated 2.4.18
|
||||||
|
*/
|
||||||
abstract class Model extends Original
|
abstract class Model extends Original
|
||||||
{
|
{
|
||||||
// Retrocompatibilità MySQL
|
use SimpleModelTrait;
|
||||||
public function setUpdatedAtAttribute($value)
|
|
||||||
{
|
|
||||||
// to Disable updated_at
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crea una nuova istanza del modello.
|
|
||||||
*
|
|
||||||
* @return static
|
|
||||||
*/
|
|
||||||
public static function build()
|
|
||||||
{
|
|
||||||
return new static();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getTableName()
|
|
||||||
{
|
|
||||||
return with(new static())->getTable();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@ namespace Common;
|
|||||||
|
|
||||||
class RowReference extends Model
|
class RowReference extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'co_riferimenti_righe';
|
protected $table = 'co_riferimenti_righe';
|
||||||
|
|
||||||
public function source()
|
public function source()
|
||||||
|
44
src/Common/SimpleModelTrait.php
Normal file
44
src/Common/SimpleModelTrait.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.n.c.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Common;
|
||||||
|
|
||||||
|
trait SimpleModelTrait
|
||||||
|
{
|
||||||
|
// Retrocompatibilità MySQL
|
||||||
|
public function setUpdatedAtAttribute($value)
|
||||||
|
{
|
||||||
|
// to Disable updated_at
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getTableName()
|
||||||
|
{
|
||||||
|
return with(new static())->getTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crea una nuova istanza del modello.
|
||||||
|
*
|
||||||
|
* @return static
|
||||||
|
*/
|
||||||
|
public static function build()
|
||||||
|
{
|
||||||
|
return new static();
|
||||||
|
}
|
||||||
|
}
|
@ -132,6 +132,7 @@ class ButtonManager implements ManagerInterface
|
|||||||
'id_record' => $options['id_record'],
|
'id_record' => $options['id_record'],
|
||||||
'class' => $options['class'],
|
'class' => $options['class'],
|
||||||
'parameters' => $options['parameters'],
|
'parameters' => $options['parameters'],
|
||||||
|
'html_id' => $options['html_id'].'_p',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
unset($list[$predefined]);
|
unset($list[$predefined]);
|
||||||
@ -144,7 +145,7 @@ class ButtonManager implements ManagerInterface
|
|||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu dropdown-menu-right">';
|
<ul class="dropdown-menu dropdown-menu-right">';
|
||||||
|
|
||||||
foreach ($list as $element) {
|
foreach ($list as $i => $element) {
|
||||||
$result .= '
|
$result .= '
|
||||||
<li>'.$this->link([
|
<li>'.$this->link([
|
||||||
'type' => $options['type'],
|
'type' => $options['type'],
|
||||||
@ -153,6 +154,7 @@ class ButtonManager implements ManagerInterface
|
|||||||
'id_record' => $options['id_record'],
|
'id_record' => $options['id_record'],
|
||||||
'class' => false,
|
'class' => false,
|
||||||
'parameters' => $options['parameters'],
|
'parameters' => $options['parameters'],
|
||||||
|
'html_id' => $options['html_id'].'_'.$i,
|
||||||
]).'</li>';
|
]).'</li>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -217,9 +217,8 @@ class FileManager implements ManagerInterface
|
|||||||
|
|
||||||
$source = array_clean(array_column($categories, 'category'));
|
$source = array_clean(array_column($categories, 'category'));
|
||||||
|
|
||||||
$upload_max_filesize = \Util\FileSystem::formatBytes(ini_get('upload_max_filesize'), 0);
|
$upload_max_filesize = ini_get('upload_max_filesize');
|
||||||
//remove unit
|
$upload_max_filesize = substr($upload_max_filesize, 0, -1);
|
||||||
$upload_max_filesize = substr($upload_max_filesize, 0, strrpos($upload_max_filesize, ' '));
|
|
||||||
|
|
||||||
$result .= '
|
$result .= '
|
||||||
<script>$(document).ready(init)</script>
|
<script>$(document).ready(init)</script>
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Models;
|
namespace Models;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class ApiResource extends Model
|
class ApiResource extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'zz_api_resources';
|
protected $table = 'zz_api_resources';
|
||||||
|
|
||||||
/* Relazioni Eloquent */
|
/* Relazioni Eloquent */
|
||||||
|
@ -21,7 +21,8 @@ namespace Models;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonInterval;
|
use Carbon\CarbonInterval;
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Traits\StoreTrait;
|
use Traits\StoreTrait;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,6 +31,7 @@ use Traits\StoreTrait;
|
|||||||
*/
|
*/
|
||||||
class Cache extends Model
|
class Cache extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use StoreTrait;
|
use StoreTrait;
|
||||||
|
|
||||||
protected $table = 'zz_cache';
|
protected $table = 'zz_cache';
|
||||||
|
@ -19,11 +19,14 @@
|
|||||||
|
|
||||||
namespace Models;
|
namespace Models;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Util\Query;
|
use Util\Query;
|
||||||
|
|
||||||
class Clause extends Model
|
class Clause extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'zz_group_module';
|
protected $table = 'zz_group_module';
|
||||||
|
|
||||||
/* Relazioni Eloquent */
|
/* Relazioni Eloquent */
|
||||||
|
@ -19,10 +19,13 @@
|
|||||||
|
|
||||||
namespace Models;
|
namespace Models;
|
||||||
|
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
class Group extends Model
|
class Group extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
|
|
||||||
protected $table = 'zz_groups';
|
protected $table = 'zz_groups';
|
||||||
|
|
||||||
/* Relazioni Eloquent */
|
/* Relazioni Eloquent */
|
||||||
|
@ -21,13 +21,15 @@ namespace Models;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Carbon\CarbonInterval;
|
use Carbon\CarbonInterval;
|
||||||
use Common\Model;
|
use Common\SimpleModelTrait;
|
||||||
use Hooks\Manager;
|
use Hooks\Manager;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Traits\StoreTrait;
|
use Traits\StoreTrait;
|
||||||
|
|
||||||
class Hook extends Model
|
class Hook extends Model
|
||||||
{
|
{
|
||||||
|
use SimpleModelTrait;
|
||||||
use StoreTrait;
|
use StoreTrait;
|
||||||
|
|
||||||
protected $table = 'zz_hooks';
|
protected $table = 'zz_hooks';
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user