From fda1bca710a89ecef832e1a0d3245ded9d4b4e32 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Tue, 3 Mar 2020 10:33:32 +0100 Subject: [PATCH] Movimentazioni (#766) Aggiunto raggruppamento dei movimenti per documento, aggiornamento per causali personalizzate dei movimenti manuali e implementazione nuovo sistema di riferimento ai documenti. --- include/src/Components/Article.php | 25 +++- include/src/Document.php | 4 +- include/src/ReferenceInterface.php | 14 ++ lib/common.php | 23 ++++ modules/anagrafiche/ajax/select.php | 2 +- modules/anagrafiche/src/Anagrafica.php | 5 + .../articoli/plugins/articoli.movimenti.php | 82 ++++++----- modules/articoli/src/Articolo.php | 22 +++ modules/articoli/src/Movimento.php | 127 ++++++++++++++++++ modules/causali/actions.php | 2 +- modules/causali_movimenti/actions.php | 41 ++++++ modules/causali_movimenti/add.php | 31 +++++ modules/causali_movimenti/edit.php | 37 +++++ modules/causali_movimenti/init.php | 7 + modules/contratti/src/Components/Articolo.php | 10 -- modules/contratti/src/Contratto.php | 19 +++ modules/ddt/actions.php | 2 - modules/ddt/bulk.php | 8 +- modules/ddt/row-list.php | 6 +- modules/ddt/src/Components/Articolo.php | 34 ----- modules/ddt/src/DDT.php | 19 +++ modules/fatture/bulk.php | 27 ++-- modules/fatture/row-list.php | 6 +- modules/fatture/src/Components/Articolo.php | 34 ----- modules/fatture/src/Fattura.php | 19 +++ .../interventi/src/Components/Articolo.php | 32 ----- modules/interventi/src/Intervento.php | 25 ++++ modules/misure/actions.php | 4 +- modules/movimenti/actions.php | 5 +- modules/movimenti/add.php | 65 ++++----- modules/ordini/row-list.php | 6 +- modules/ordini/src/Components/Articolo.php | 10 -- modules/ordini/src/Ordine.php | 19 +++ .../preventivi/src/Components/Articolo.php | 10 -- modules/preventivi/src/Preventivo.php | 19 +++ modules/primanota/add.php | 4 +- modules/relazioni_anagrafiche/actions.php | 4 +- modules/tipi_scadenze/actions.php | 2 +- plugins/exportFE/src/FatturaElettronica.php | 9 +- .../src/Components/Articolo.php | 10 -- src/Traits/RecordTrait.php | 2 + src/Traits/ReferenceTrait.php | 48 +++++++ templates/ddt/body.php | 8 +- templates/fatture/body.php | 8 +- templates/magazzino_inventario/body.php | 4 +- update/2_4_14.sql | 28 ++++ update/tables.php | 1 + 47 files changed, 663 insertions(+), 266 deletions(-) create mode 100644 include/src/ReferenceInterface.php create mode 100644 modules/articoli/src/Movimento.php create mode 100755 modules/causali_movimenti/actions.php create mode 100755 modules/causali_movimenti/add.php create mode 100755 modules/causali_movimenti/edit.php create mode 100755 modules/causali_movimenti/init.php create mode 100644 src/Traits/ReferenceTrait.php diff --git a/include/src/Components/Article.php b/include/src/Components/Article.php index 95cb7586c..3f833180b 100755 --- a/include/src/Components/Article.php +++ b/include/src/Components/Article.php @@ -5,6 +5,7 @@ namespace Common\Components; use Common\Document; use Illuminate\Database\Eloquent\Builder; use Modules\Articoli\Articolo as Original; +use Modules\Articoli\Movimento; use UnexpectedValueException; abstract class Article extends Row @@ -49,7 +50,10 @@ abstract class Article extends Row } } - abstract public function getDirection(); + public function getDirection() + { + return $this->parent->direzione; + } /** * Imposta i seriali collegati all'articolo. @@ -205,7 +209,24 @@ abstract class Article extends Row return !empty($this->abilita_serial) && !empty($this->serialRowID); } - abstract protected function movimentaMagazzino($qta); + protected function movimentaMagazzino($qta) + { + $documento = $this->fattura; + $data = $documento->data; + + $qta_movimento = $documento->direzione == 'uscita' ? $qta : -$qta; + $movimento = Movimento::descrizioneMovimento($qta_movimento, $documento->direzione).' - '.$documento->getReference(); + + $partenza = $documento->direzione == 'uscita' ? $documento->idsede_destinazione : $documento->idsede_partenza; + $arrivo = $documento->direzione == 'uscita' ? $documento->idsede_partenza : $documento->idsede_destinazione; + + $this->articolo->movimenta($qta_movimento, $movimento, $data, false, [ + 'reference_type' => get_class($documento), + 'reference_id' => $documento->id, + 'idsede_azienda' => $partenza, + 'idsede_controparte' => $arrivo, + ]); + } protected static function boot() { diff --git a/include/src/Document.php b/include/src/Document.php index 74ae1e300..3f04bee7f 100755 --- a/include/src/Document.php +++ b/include/src/Document.php @@ -4,7 +4,7 @@ namespace Common; use Common\Components\Description; -abstract class Document extends Model +abstract class Document extends Model implements ReferenceInterface { /** * Restituisce la collezione di righe e articoli con valori rilevanti per i conti. @@ -66,6 +66,8 @@ abstract class Document extends Model abstract public function sconti(); + abstract public function getDirezioneAttribute(); + /** * Calcola l'imponibile del documento. * diff --git a/include/src/ReferenceInterface.php b/include/src/ReferenceInterface.php new file mode 100644 index 000000000..fed8e4323 --- /dev/null +++ b/include/src/ReferenceInterface.php @@ -0,0 +1,14 @@ + (!empty($riga->sconto_percentuale) ? '%' : currency()), ]); } + +function reference($document) +{ + if (!empty($document) && !($document instanceof \Common\ReferenceInterface)) { + return; + } + + $extra = ''; + $module_id = null; + $document_id = null; + + if (empty($document)) { + $description = tr('Documento di riferimento non disponibile'); + $extra = 'class="disabled"'; + } else { + $module_id = $document->module; + $document_id = $document->id; + + $description = $document->getReference(); + } + + return Modules::link($module_id, $document_id, $description, $description, $extra); +} diff --git a/modules/anagrafiche/ajax/select.php b/modules/anagrafiche/ajax/select.php index 28901fe13..b76d9d1d4 100755 --- a/modules/anagrafiche/ajax/select.php +++ b/modules/anagrafiche/ajax/select.php @@ -243,7 +243,7 @@ switch ($resource) { case 'sedi_azienda': if (isset($superselect['idanagrafica'])) { $user = Auth::user(); - $id_azienda = get_var('Azienda predefinita'); + $id_azienda = setting('Azienda predefinita'); $query = "SELECT * FROM (SELECT '0' AS id, CONCAT_WS(' - ', 'Sede legale' , (SELECT CONCAT (citta, ' (', ragione_sociale,')') FROM an_anagrafiche |where|)) AS descrizione UNION SELECT id, CONCAT_WS(' - ', nomesede, citta) FROM an_sedi |where|) AS tab |filter| ORDER BY descrizione"; diff --git a/modules/anagrafiche/src/Anagrafica.php b/modules/anagrafiche/src/Anagrafica.php index f8716a0d2..3953e14fd 100755 --- a/modules/anagrafiche/src/Anagrafica.php +++ b/modules/anagrafiche/src/Anagrafica.php @@ -205,6 +205,11 @@ class Anagrafica extends Model // Attributi Eloquent + public function getModuleAttribute() + { + return 'Anagrafiche'; + } + /** * Restituisce l'identificativo. * diff --git a/modules/articoli/plugins/articoli.movimenti.php b/modules/articoli/plugins/articoli.movimenti.php index c28176f4d..a89a402df 100755 --- a/modules/articoli/plugins/articoli.movimenti.php +++ b/modules/articoli/plugins/articoli.movimenti.php @@ -7,6 +7,29 @@ echo '

'.tr('Movimenti').'

+
'; +if (empty($_GET['movimentazione_completa'])) { + echo ' + + + '.tr('Mostra tutti i movimenti').' + '; +} else { + echo ' + + + '.tr('Mostra gli ultimi 20 movimenti').' + '; +} + +echo ' + + + '.tr('Visualizza dettagli').' + '; + +echo ' +
'; @@ -15,33 +38,27 @@ $qta_totale = $dbo->fetchOne('SELECT SUM(qta) AS qta FROM mg_movimenti WHERE ida $qta_totale_attuale = $dbo->fetchOne('SELECT SUM(qta) AS qta FROM mg_movimenti WHERE idarticolo='.prepare($id_record).' AND data <= CURDATE()')['qta']; echo ' -

'.tr('Quantità calcolata dai movimenti').': '.Translator::numberToLocale($qta_totale, 'qta').' '.$record['um'].'

'; +

'.tr('Quantità calcolata dai movimenti').': '.Translator::numberToLocale($qta_totale, 'qta').' '.$record['um'].'

'; echo ' -

'.tr('Quantità calcolata attuale').': '.Translator::numberToLocale($qta_totale_attuale, 'qta').' '.$record['um'].'

'; +

'.tr('Quantità calcolata attuale').': '.Translator::numberToLocale($qta_totale_attuale, 'qta').' '.$record['um'].'

'; -// Elenco movimenti magazzino -$query = 'SELECT * FROM mg_movimenti WHERE idarticolo='.prepare($id_record).' ORDER BY data DESC, id DESC'; -if (empty($_GET['show_all1'])) { - $query .= ' LIMIT 0, 20'; +// Individuazione movimenti +$movimenti = $articolo->movimentiComposti() + ->orderBy('data', 'id'); +if (empty($_GET['movimentazione_completa'])) { + $movimenti->limit(20); } -$movimenti = $dbo->fetchArray($query); +// Raggruppamento per documento +$movimenti = $movimenti->get(); if (!empty($movimenti)) { - if (empty($_GET['show_all1'])) { - echo ' -

[ '.tr('Mostra tutti i movimenti').' ]

'; - } else { - echo ' -

[ '.tr('Mostra solo gli ultimi 20 movimenti').' ]

'; - } - echo ' - + '; @@ -53,7 +70,8 @@ if (!empty($movimenti)) { } else { $movimento['progressivo_finale'] = $movimenti[$i - 1]['progressivo_iniziale']; } - $movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento['qta']; + $movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento->qta; + $movimento['progressivo_iniziale'] = $movimento['progressivo_finale'] - $movimento->qta; $movimenti[$i]['progressivo_iniziale'] = $movimento['progressivo_iniziale']; $movimenti[$i]['progressivo_finale'] = $movimento['progressivo_finale']; @@ -62,40 +80,32 @@ if (!empty($movimenti)) { echo ' - + + + '; - // Causale - $dir = ($movimento['qta'] < 0) ? 'vendita' : 'acquisto'; - - if (!empty($movimento['iddocumento'])) { - $dir = $dbo->fetchArray('SELECT dir FROM co_tipidocumento WHERE id = (SELECT idtipodocumento FROM co_documenti WHERE id = '.prepare($movimento['iddocumento']).')')[0]['dir'] == 'entrata' ? 'vendita' : 'acquisto'; - } - - echo ' - '; - // Data echo ' - '; + '; // Operazioni echo ' ' + $new_tr + '' ); $('#modals > div table.scadenze > tbody tr').last().find('select').attr('id', 'conto' + i).attr('name', 'idconto[' + i + ']'); } - + $('#modals > div #conto' + i).append(option); } } else { diff --git a/modules/relazioni_anagrafiche/actions.php b/modules/relazioni_anagrafiche/actions.php index 2390dad8b..eb50cd53b 100755 --- a/modules/relazioni_anagrafiche/actions.php +++ b/modules/relazioni_anagrafiche/actions.php @@ -17,7 +17,7 @@ switch (filter('op')) { ])); } } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio.')); + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); } break; @@ -45,7 +45,7 @@ switch (filter('op')) { ])); } } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio.')); + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); } break; diff --git a/modules/tipi_scadenze/actions.php b/modules/tipi_scadenze/actions.php index cb1c9239f..c156c7bf0 100755 --- a/modules/tipi_scadenze/actions.php +++ b/modules/tipi_scadenze/actions.php @@ -36,7 +36,7 @@ switch (filter('op')) { ])); } } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio.')); + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); } break; diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 567e36359..054773370 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -1167,12 +1167,9 @@ class FatturaElettronica $descrizione = str_replace('…', '...', $descrizione); $descrizione = str_replace('’', ' ', $descrizione); - if (setting('Riferimento dei documenti in Fattura Elettronica')) { - $ref = doc_references($riga->toArray(), 'entrata', ['iddocumento']); - - if (!empty($ref)) { - $descrizione .= "\n".$ref['description']; - } + // Aggiunta dei riferimenti ai documenti + if (setting('Riferimento dei documenti in Fattura Elettronica') && $riga->hasOriginal()) { + $descrizione .= "\n".$riga->getOriginal()->parent->getReference(); } $dettaglio['Descrizione'] = $descrizione; diff --git a/plugins/pianificazione_interventi/src/Components/Articolo.php b/plugins/pianificazione_interventi/src/Components/Articolo.php index 5a4558ee8..68c20e1a5 100755 --- a/plugins/pianificazione_interventi/src/Components/Articolo.php +++ b/plugins/pianificazione_interventi/src/Components/Articolo.php @@ -26,14 +26,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - return; - } - - public function getDirection() - { - return $this->contratto->tipo->dir; - } } diff --git a/src/Traits/RecordTrait.php b/src/Traits/RecordTrait.php index 2ad8dae52..c59cd3110 100755 --- a/src/Traits/RecordTrait.php +++ b/src/Traits/RecordTrait.php @@ -7,6 +7,8 @@ use Models\Plugin; trait RecordTrait { + abstract public function getModuleAttribute(); + public function getModule() { return !empty($this->module) ? Module::get($this->module) : null; diff --git a/src/Traits/ReferenceTrait.php b/src/Traits/ReferenceTrait.php new file mode 100644 index 000000000..65856ee00 --- /dev/null +++ b/src/Traits/ReferenceTrait.php @@ -0,0 +1,48 @@ +getReferenceName(); + $number = $this->getReferenceNumber(); + $date = $this->getReferenceDate(); + + // Testo relativo + $name = Stringy::create($name)->toLowerCase(); + + if (!empty($date) && !empty($number)) { + $description = tr('Rif. _DOC_ num. _NUM_ del _DATE_', [ + '_DOC_' => $name, + '_NUM_' => $number, + '_DATE_' => dateFormat($date), + ]); + } elseif (!empty($number)) { + $description = tr('Rif. _DOC_ num. _NUM_', [ + '_DOC_' => $name, + '_NUM_' => $number, + ]); + } elseif (!empty($date)) { + $description = tr('Rif. _DOC_ del _DATE_', [ + '_DOC_' => $name, + '_DATE_' => dateFormat($date), + ]); + } else { + $description = tr('Rif. _DOC_', [ + '_DOC_' => $name, + ]); + } + + return $description; + } +} diff --git a/templates/ddt/body.php b/templates/ddt/body.php index 710440841..ba6fc7bd3 100755 --- a/templates/ddt/body.php +++ b/templates/ddt/body.php @@ -65,14 +65,14 @@ foreach ($righe as $riga) { } // Aggiunta dei riferimenti ai documenti - if (setting('Riferimento dei documenti nelle stampe')) { - $ref = doc_references($r, $record['dir'], ['idddt']); + if (setting('Riferimento dei documenti nelle stampe') && $riga->hasOriginal()) { + $ref = $riga->getOriginal()->parent->getReference(); if (!empty($ref)) { echo ' -
'.$ref['description'].''; +
'.$ref.''; - $autofill->count($ref['description'], true); + $autofill->count($ref, true); } } diff --git a/templates/fatture/body.php b/templates/fatture/body.php index b5ce4fbe9..4ff13b082 100755 --- a/templates/fatture/body.php +++ b/templates/fatture/body.php @@ -80,14 +80,14 @@ foreach ($righe as $riga) { } // Aggiunta dei riferimenti ai documenti - if (setting('Riferimento dei documenti nelle stampe')) { - $ref = doc_references($r, $record['dir'], ['iddocumento']); + if (setting('Riferimento dei documenti nelle stampe') && $riga->hasOriginal()) { + $ref = $riga->getOriginal()->parent->getReference(); if (!empty($ref)) { echo ' -
'.$ref['description'].''; +
'.$ref.''; - $autofill->count($ref['description'], true); + $autofill->count($ref, true); } } diff --git a/templates/magazzino_inventario/body.php b/templates/magazzino_inventario/body.php index a1f2750c2..074de9eeb 100755 --- a/templates/magazzino_inventario/body.php +++ b/templates/magazzino_inventario/body.php @@ -59,7 +59,7 @@ if (!empty($search['barcode'])) { $period_end = $_SESSION['period_end']; $query = 'SELECT *, - (SELECT SUM(qta) FROM mg_movimenti WHERE mg_movimenti.idarticolo=mg_articoli.id AND (mg_movimenti.idintervento IS NULL) AND data <= '.prepare($period_end).') AS qta + (SELECT SUM(qta) FROM mg_movimenti WHERE mg_movimenti.idarticolo=mg_articoli.id AND data <= '.prepare($period_end).') AS qta FROM mg_articoli LEFT OUTER JOIN (SELECT id, nome FROM mg_categorie) AS categoria ON mg_articoli.id_categoria = categoria.id WHERE 1=1 ORDER BY codice ASC'; @@ -83,7 +83,7 @@ echo ' - + '; $totali = []; diff --git a/update/2_4_14.sql b/update/2_4_14.sql index 79d5c687f..c61bbca6e 100755 --- a/update/2_4_14.sql +++ b/update/2_4_14.sql @@ -392,6 +392,34 @@ UPDATE `zz_views` SET `query` = 'righe.totale_imponibile' WHERE `id_module` = (S INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format`, `default`, `visible`) VALUES ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore'), 'Totale ivato', 'righe.totale', 5, 1, 1, 1, 1); +-- Aggiunta gestione dinamica dei movimenti degli Articoli +ALTER TABLE `mg_movimenti` ADD `reference_id` int(11), ADD `reference_type` varchar(255); +UPDATE `mg_movimenti` SET `reference_id` = `iddocumento`, `reference_type` = 'Modules\\Fatture\\Fattura' WHERE `iddocumento` IS NOT NULL AND `iddocumento` != 0; +UPDATE `mg_movimenti` SET `reference_id` = `idintervento`, `reference_type` = 'Modules\\Interventi\\Intervento' WHERE `idintervento` IS NOT NULL AND `idintervento` != 0; +UPDATE `mg_movimenti` SET `reference_id` = `idddt`, `reference_type` = 'Modules\\DDT\\DDT' WHERE `idddt` IS NOT NULL AND `idddt` != 0; + +-- Descrizioni movimenti predefinite per l'aggiunta dal modulo Movimenti +CREATE TABLE IF NOT EXISTS `mg_causali_movimenti` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `nome` varchar(255) NOT NULL, + `descrizione` varchar(255) NOT NULL, + `movimento_carico` BOOLEAN DEFAULT TRUE, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +INSERT INTO `mg_causali_movimenti` (`id`, `nome`, `descrizione`, `movimento_carico`) VALUES +(NULL, 'Carico', 'Carico manuale', '1'), +(NULL, 'Scarico', 'Scarico manuale', '0'); + +-- Introduzione modulo Movimenti predefiniti +INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`) VALUES (NULL, 'Causali movimenti', 'Causali movimenti', 'causali_movimenti', 'SELECT |select| FROM `mg_causali_movimenti` WHERE 1=1 HAVING 2=2', '', 'fa fa-truck', '2.4.14', '2.4.14', '1', (SELECT `id` FROM `zz_modules` t WHERE t.`name` = 'Tabelle'), '1', '1'); + +INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `default`, `visible`) VALUES +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Causali movimenti'), 'Movimento di carico', 'IF(movimento_carico, ''Si'', ''No'')', 4, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Causali movimenti'), 'Descrizione', 'descrizione', 3, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Causali movimenti'), 'Nome', 'nome', 2, 1, 0, 0, 1), +((SELECT `id` FROM `zz_modules` WHERE `name` = 'Causali movimenti'), 'id', 'id', 1, 1, 0, 0, 0); + -- Miglioramento della cache interna CREATE TABLE IF NOT EXISTS `zz_cache` ( `id` int(11) NOT NULL AUTO_INCREMENT, diff --git a/update/tables.php b/update/tables.php index 6ebf43748..6c89ad33d 100755 --- a/update/tables.php +++ b/update/tables.php @@ -79,6 +79,7 @@ return [ 'in_vociservizio', 'mg_articoli', 'mg_categorie', + 'mg_causali_movimenti', 'mg_listini', 'mg_movimenti', 'mg_prodotti',
'.tr('Q.tà').' '.tr('Q.tà progressiva').''.tr('Causale').''.tr('Operazione').' '.tr('Data').' #
- '.numberFormat($movimento['qta'], 'qta').' '.$record['um'].' + '.numberFormat($movimento->qta, 'qta').' '.$record['um'].' '.numberFormat($movimento['progressivo_iniziale'], 'qta').' '.$record['um'].' '.numberFormat($movimento['progressivo_finale'], 'qta').' '.$record['um'].' + + '.$movimento->descrizione.''.($movimento->hasDocument() ? ' - '.reference($movimento->getDocument()) : '').' '.$movimento['movimento'].' - '.((!empty($movimento['idintervento'])) ? Modules::link('Interventi', $movimento['idintervento']) : '').' - '.((!empty($movimento['idddt'])) ? (Modules::link('DDt di '.$dir, $movimento['idddt'], null, null, (intval($database->fetchOne('SELECT * FROM `dt_ddt` WHERE `id` ='.prepare($movimento['idddt'])))) ? '' : 'class="disabled"')) : '').' - '.((!empty($movimento['iddocumento'])) ? (Modules::link('Fatture di '.$dir, $movimento['iddocumento'], null, null, (intval($database->fetchOne('SELECT * FROM `co_documenti` WHERE `id` ='.prepare($movimento['iddocumento'])))) ? '' : 'class="disabled"')) : '').' - '.Translator::dateToLocale($movimento['data']).' '.dateFormat($movimento->data).' '; - if (Auth::admin() && $movimento['manuale'] == '1') { + if (Auth::admin() && $movimento->isManuale()) { echo ' - + '; } diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 6f04f8ce3..639dba028 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -128,6 +128,28 @@ class Articolo extends Model return $this->hasMany(ArticoloIntervento::class, 'idarticolo'); } + /** + * Restituisce i movimenti di magazzino dell'articolo. + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany|\Illuminate\Database\Query\Builder + */ + public function movimenti() + { + return $this->hasMany(Movimento::class, 'idarticolo'); + } + + /** + * Restituisce i movimenti di magazzino dell'articolo raggruppati per documento relativo. + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany|\Illuminate\Database\Query\Builder + */ + public function movimentiComposti() + { + return $this->movimenti() + ->selectRaw('*, sum(qta) as qta_documento, IFNULL(reference_type, UUID()) as tipo_gruppo') + ->groupBy('tipo_gruppo', 'reference_id'); + } + public function categoria() { return $this->belongsTo(Categoria::class, 'id_categoria'); diff --git a/modules/articoli/src/Movimento.php b/modules/articoli/src/Movimento.php new file mode 100644 index 000000000..116f12250 --- /dev/null +++ b/modules/articoli/src/Movimento.php @@ -0,0 +1,127 @@ +articolo()->associate($articolo); + + $model->qta = $qta; + $model->descrizone = $descrizone; + $model->data = $data; + + if (!empty($document)) { + $class = get_class($document); + $id = $document->id; + + $model->reference_type = $class; + $model->reference_id = $id; + } else { + $model->manuale = true; + } + + $model->save(); + + return $model; + } + + public function getDescrizioneAttribute() + { + $descrizione = $this->movimento; + if ($this->hasDocument()) { + $documento = $this->getDocument(); + + $descrizione = $documento ? self::descrizioneMovimento($this->qta, $documento->direzione) : $descrizione; + } + + return $descrizione; + } + + public function getDataAttribute() + { + $data = $this->attributes['data']; + if ($this->hasDocument()) { + $documento = $this->getDocument(); + + $data = $documento ? $documento->getReferenceDate() : $data; + } + + return $data; + } + + public function getQtaAttribute() + { + if (isset($this->qta_documento)) { + return $this->qta_documento; + } + + return $this->qta; + } + + public function articolo() + { + return $this->hasOne(Articolo::class, 'idarticolo'); + } + + public function movimentiRelativi() + { + return $this->hasMany(Movimento::class, 'idarticolo', 'idarticolo') + ->where('reference_type', $this->reference_type) + ->where('reference_id', $this->reference_id); + } + + public function hasDocument() + { + return isset($this->reference_type); + } + + public function isManuale() + { + return !empty($this->manuale); + } + + /** + * Restituisce il documento collegato al movimento. + * + * @return Model + */ + public function getDocument() + { + if ($this->hasDocument() && !isset($this->document)) { + $class = $this->reference_type; + $id = $this->reference_id; + + $this->document = $class::find($id); + } + + return $this->document; + } + + public static function descrizioneMovimento($qta, $direzione = 'entrata') + { + if (empty($direzione)) { + $direzione = 'entrata'; + } + + $carico = ($direzione == 'entrata') ? tr('Ripristino articolo') : tr('Carico magazzino'); + $scarico = ($direzione == 'entrata') ? tr('Scarico magazzino') : tr('Rimozione articolo'); + + $descrizione = $qta > 0 ? $carico : $scarico; + + // Descrizione per vecchi documenti rimossi ma con movimenti azzerati + if ($qta == 0) { + $descrizione = tr('Nessun movimento'); + } + + return $descrizione; + } +} diff --git a/modules/causali/actions.php b/modules/causali/actions.php index 5e7b99a81..fd21ca8d9 100755 --- a/modules/causali/actions.php +++ b/modules/causali/actions.php @@ -25,7 +25,7 @@ switch (filter('op')) { ])); } } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio.')); + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); } break; diff --git a/modules/causali_movimenti/actions.php b/modules/causali_movimenti/actions.php new file mode 100755 index 000000000..33588f3e2 --- /dev/null +++ b/modules/causali_movimenti/actions.php @@ -0,0 +1,41 @@ +update('mg_causali_movimenti', [ + 'nome' => post('nome'), + 'movimento_carico' => post('movimento_carico'), + 'descrizione' => post('descrizione'), + ], [ + 'id' => $id_record, + ]); + } else { + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); + } + + break; + + case 'add': + $database->insert('mg_causali_movimenti', [ + 'nome' => post('nome'), + 'movimento_carico' => post('movimento_carico'), + 'descrizione' => post('descrizione'), + ]); + $id_record = $database->lastInsertedID(); + + break; + + case 'delete': + if (isset($id_record)) { + $dbo->query('DELETE FROM `mg_causali_movimenti` WHERE `id`='.prepare($id_record)); + + flash()->info(tr('Tipologia di _TYPE_ eliminata con successo!', [ + '_TYPE_' => 'movimento predefinito', + ])); + } + + break; +} diff --git a/modules/causali_movimenti/add.php b/modules/causali_movimenti/add.php new file mode 100755 index 000000000..8019cfd69 --- /dev/null +++ b/modules/causali_movimenti/add.php @@ -0,0 +1,31 @@ +
+ + + +
+
+ {[ "type": "text", "label": "", "name": "nome", "required": 1 ]} +
+ +
+ {[ "type": "checkbox", "label": "", "name": "movimento_carico" ]} +
+
+ +
+
+ {[ "type": "textarea", "label": "", "name": "descrizione", "required": 1 ]} +
+
+ + +
+
+ +
+
+
diff --git a/modules/causali_movimenti/edit.php b/modules/causali_movimenti/edit.php new file mode 100755 index 000000000..5ecb07a25 --- /dev/null +++ b/modules/causali_movimenti/edit.php @@ -0,0 +1,37 @@ +
+ + + + +
+
+

+
+ +
+
+
+ {[ "type": "text", "label": "", "name": "nome", "required": 1, "value": "$nome$" ]} +
+ +
+ {[ "type": "checkbox", "label": "", "name": "movimento_carico", "value": "$movimento_carico$" ]} +
+
+ +
+
+ {[ "type": "textarea", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$" ]} +
+
+
+
+
+ + + + diff --git a/modules/causali_movimenti/init.php b/modules/causali_movimenti/init.php new file mode 100755 index 000000000..909f99184 --- /dev/null +++ b/modules/causali_movimenti/init.php @@ -0,0 +1,7 @@ +fetchOne('SELECT * FROM `mg_causali_movimenti` WHERE id='.prepare($id_record)); +} diff --git a/modules/contratti/src/Components/Articolo.php b/modules/contratti/src/Components/Articolo.php index a59deea58..1d199d926 100755 --- a/modules/contratti/src/Components/Articolo.php +++ b/modules/contratti/src/Components/Articolo.php @@ -25,14 +25,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - return; - } - - public function getDirection() - { - return $this->contratto->tipo->dir; - } } diff --git a/modules/contratti/src/Contratto.php b/modules/contratti/src/Contratto.php index d1146f1e2..cd6b234a6 100755 --- a/modules/contratti/src/Contratto.php +++ b/modules/contratti/src/Contratto.php @@ -11,10 +11,12 @@ use Modules\TipiIntervento\Tipo as TipoSessione; use Plugins\PianificazioneFatturazione\Pianificazione; use Plugins\PianificazioneInterventi\Promemoria; use Traits\RecordTrait; +use Traits\ReferenceTrait; use Util\Generator; class Contratto extends Document { + use ReferenceTrait; use RecordTrait; protected $table = 'co_contratti'; @@ -223,4 +225,21 @@ class Contratto extends Document return $numero; } + + // Opzioni di riferimento + + public function getReferenceName() + { + return 'Contratto'; + } + + public function getReferenceNumber() + { + return $this->numero; + } + + public function getReferenceDate() + { + return $this->data_bozza; + } } diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index 2fb41506d..7ac4313fe 100755 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -315,8 +315,6 @@ switch (post('op')) { try { $ddt->delete(); - $dbo->query('DELETE FROM mg_movimenti WHERE idddt = '.prepare($id_record)); - flash()->info(tr('Ddt eliminato!')); } catch (InvalidArgumentException $e) { flash()->error(tr('Sono stati utilizzati alcuni serial number nel documento: impossibile procedere!')); diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php index 050d1f08e..38b9d5e75 100755 --- a/modules/ddt/bulk.php +++ b/modules/ddt/bulk.php @@ -104,9 +104,11 @@ switch (post('op')) { case 'delete-bulk': foreach ($id_records as $id) { - $dbo->query('DELETE FROM dt_ddt WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM dt_righe_ddt WHERE idddt='.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM mg_movimenti WHERE idddt='.prepare($id).Modules::getAdditionalsQuery($id_module)); + $documento = DDT::find($id); + try { + $documento->delete(); + } catch (InvalidArgumentException $e) { + } } flash()->info(tr('Ddt eliminati!')); diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index 5bea4c373..5a77ca0e9 100755 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -63,11 +63,9 @@ foreach ($righe as $riga) { } // Aggiunta dei riferimenti ai documenti - $ref = doc_references($r, $dir, ['idddt']); - - if (!empty($ref)) { + if ($riga->hasOriginal()) { echo ' -
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); +
'.reference($riga->getOriginal()->parent); } echo ' diff --git a/modules/ddt/src/Components/Articolo.php b/modules/ddt/src/Components/Articolo.php index 03ca86cc4..53be420ee 100755 --- a/modules/ddt/src/Components/Articolo.php +++ b/modules/ddt/src/Components/Articolo.php @@ -24,38 +24,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - $ddt = $this->ddt; - $tipo = $ddt->tipo; - - $numero = $ddt->numero_esterno ?: $ddt->numero; - $data = $ddt->data; - - $carico = ($tipo->dir == 'entrata') ? tr('Ripristino articolo da _TYPE_ numero _NUM_') : tr('Carico magazzino da _TYPE_ numero _NUM_'); - $scarico = ($tipo->dir == 'entrata') ? tr('Scarico magazzino per _TYPE_ numero _NUM_') : tr('Rimozione articolo da _TYPE_ numero _NUM_'); - - $qta = ($tipo->dir == 'uscita') ? -$qta : $qta; - $movimento = ($qta < 0) ? $carico : $scarico; - - $movimento = replace($movimento, [ - '_TYPE_' => $tipo->descrizione, - '_NUM_' => $numero, - ]); - - $partenza = $ddt->direzione == 'uscita' ? $ddt->idsede_destinazione : $ddt->idsede_partenza; - $arrivo = $ddt->direzione == 'uscita' ? $ddt->idsede_partenza : $ddt->idsede_destinazione; - - $this->articolo->movimenta(-$qta, $movimento, $data, false, [ - 'idddt' => $ddt->id, - 'idsede_azienda' => $partenza, - 'idsede_controparte' => $arrivo, - ]); - } - - public function getDirection() - { - return $this->ddt->tipo->dir; - } } diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php index 1685a23b4..64dfe9462 100755 --- a/modules/ddt/src/DDT.php +++ b/modules/ddt/src/DDT.php @@ -7,10 +7,12 @@ use Common\Components\Description; use Common\Document; use Modules\Anagrafiche\Anagrafica; use Traits\RecordTrait; +use Traits\ReferenceTrait; use Util\Generator; class DDT extends Document { + use ReferenceTrait; use RecordTrait; protected $table = 'dt_ddt'; @@ -205,4 +207,21 @@ class DDT extends Document return $numero; } + + // Opzioni di riferimento + + public function getReferenceName() + { + return $this->tipo->descrizione; + } + + public function getReferenceNumber() + { + return $this->numero_esterno ?: $this->numero; + } + + public function getReferenceDate() + { + return $this->data; + } } diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php index 8ace33dbd..f174ffbca 100755 --- a/modules/fatture/bulk.php +++ b/modules/fatture/bulk.php @@ -45,19 +45,6 @@ switch (post('op')) { break; - case 'delete-bulk': - - foreach ($id_records as $id) { - $dbo->query('DELETE FROM co_documenti WHERE id = '.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM co_righe_documenti WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); - $dbo->query('DELETE FROM mg_movimenti WHERE iddocumento='.prepare($id).Modules::getAdditionalsQuery($id_module)); - } - - flash()->info(tr('Fatture eliminate!')); - - break; - case 'genera-xml': $failed = []; $added = []; @@ -247,11 +234,23 @@ switch (post('op')) { flash()->info(tr('Fatture duplicate correttamente!')); break; + + case 'delete-bulk': + foreach ($id_records as $id) { + $documento = Fattura::find($id); + try { + $documento->delete(); + } catch (InvalidArgumentException $e) { + } + } + + flash()->info(tr('Fatture eliminate!')); + break; } if (App::debug()) { $operations = [ - 'delete-bulk' => ' '.tr('Elimina selezionati').'', + 'delete-bulk' => tr('Elimina selezionati'), ]; } diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 6ca652920..69cd1c358 100755 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -142,10 +142,10 @@ foreach ($righe as $riga) {
'.Modules::link($id_module, $record['ref_documento'], $text, $text); } - $ref = doc_references($r, $dir, ['iddocumento']); - if (!empty($ref)) { + // Aggiunta dei riferimenti ai documenti + if ($riga->hasOriginal()) { echo ' -
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); +
'.reference($riga->getOriginal()->parent); } echo ' diff --git a/modules/fatture/src/Components/Articolo.php b/modules/fatture/src/Components/Articolo.php index b1cd2a3ba..c41637ff0 100755 --- a/modules/fatture/src/Components/Articolo.php +++ b/modules/fatture/src/Components/Articolo.php @@ -24,38 +24,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - $fattura = $this->fattura; - $tipo = $fattura->tipo; - - $numero = $fattura->numero_esterno ?: $fattura->numero; - $data = $fattura->data; - - $carico = ($tipo->dir == 'entrata') ? tr('Ripristino articolo da _TYPE_ numero _NUM_') : tr('Carico magazzino da _TYPE_ numero _NUM_'); - $scarico = ($tipo->dir == 'entrata') ? tr('Scarico magazzino per _TYPE_ numero _NUM_') : tr('Rimozione articolo da _TYPE_ numero _NUM_'); - - $qta = ($tipo->dir == 'uscita') ? -$qta : $qta; - $movimento = ($qta < 0) ? $carico : $scarico; - - $movimento = replace($movimento, [ - '_TYPE_' => $tipo->descrizione, - '_NUM_' => $numero, - ]); - - $partenza = $fattura->direzione == 'uscita' ? $fattura->idsede_destinazione : $fattura->idsede_partenza; - $arrivo = $fattura->direzione == 'uscita' ? $fattura->idsede_partenza : $fattura->idsede_destinazione; - - $this->articolo->movimenta(-$qta, $movimento, $data, false, [ - 'iddocumento' => $fattura->id, - 'idsede_azienda' => $partenza, - 'idsede_controparte' => $arrivo, - ]); - } - - public function getDirection() - { - return $this->fattura->tipo->dir; - } } diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 490ce8a31..0941eda22 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -16,11 +16,13 @@ use Modules\Scadenzario\Scadenza; use Plugins\DichiarazioniIntento\Dichiarazione; use Plugins\ExportFE\FatturaElettronica; use Traits\RecordTrait; +use Traits\ReferenceTrait; use Util\Generator; class Fattura extends Document { use RecordTrait; + use ReferenceTrait; protected $table = 'co_documenti'; @@ -749,4 +751,21 @@ class Fattura extends Document return $numero; } + + // Opzioni di riferimento + + public function getReferenceName() + { + return $this->tipo->descrizione; + } + + public function getReferenceNumber() + { + return $this->numero_esterno ?: $this->numero; + } + + public function getReferenceDate() + { + return $this->data; + } } diff --git a/modules/interventi/src/Components/Articolo.php b/modules/interventi/src/Components/Articolo.php index 25c45ad57..34a475590 100755 --- a/modules/interventi/src/Components/Articolo.php +++ b/modules/interventi/src/Components/Articolo.php @@ -30,36 +30,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - $intervento = $this->intervento; - - $numero = $intervento->codice; - $data = database()->fetchOne('SELECT MAX(orario_fine) AS data FROM in_interventi_tecnici WHERE idintervento = :id_intervento', [ - ':id_intervento' => $intervento->id, - ])['data']; - - $data = $data ?: $intervento->data_richiesta; - - $descrizione = ($qta < 0) ? tr('Ripristino articolo da Attività numero _NUM_', [ - '_NUM_' => $numero, - ]) : tr('Scarico magazzino per intervento _NUM_', [ - '_NUM_' => $numero, - ]); - - $partenza = $intervento->idsede_partenza; - $arrivo = $intervento->idsede_destinazione; - - $this->articolo->movimenta(-$qta, $descrizione, $data, false, [ - 'idintervento' => $intervento->id, - 'idsede_azienda' => $partenza, - 'idsede_controparte' => $arrivo, - ]); - } - - public function getDirection() - { - return 'entrata'; - } } diff --git a/modules/interventi/src/Intervento.php b/modules/interventi/src/Intervento.php index 76698a180..0bf0e3d4e 100755 --- a/modules/interventi/src/Intervento.php +++ b/modules/interventi/src/Intervento.php @@ -8,10 +8,13 @@ use Modules\Contratti\Contratto; use Modules\Preventivi\Preventivo; use Modules\TipiIntervento\Tipo as TipoSessione; use Traits\RecordTrait; +use Traits\ReferenceTrait; use Util\Generator; class Intervento extends Document { + use ReferenceTrait; + use RecordTrait; protected $table = 'in_interventi'; @@ -90,6 +93,11 @@ class Intervento extends Document return 'Interventi'; } + public function getDirezioneAttribute() + { + return 'entrata'; + } + /** * Restituisce la collezione di righe e articoli con valori rilevanti per i conti. * @@ -198,4 +206,21 @@ class Intervento extends Document return $numero; } + + // Opzioni di riferimento + + public function getReferenceName() + { + return 'Attività'; + } + + public function getReferenceNumber() + { + return $this->codice; + } + + public function getReferenceDate() + { + return $this->data_richiesta; + } } diff --git a/modules/misure/actions.php b/modules/misure/actions.php index cf92f75a0..3f96411f7 100755 --- a/modules/misure/actions.php +++ b/modules/misure/actions.php @@ -16,7 +16,7 @@ switch (filter('op')) { ])); } } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio.')); + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); } break; @@ -43,7 +43,7 @@ switch (filter('op')) { ])); } } else { - flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio.')); + flash()->error(tr('Ci sono stati alcuni errori durante il salvataggio')); } break; diff --git a/modules/movimenti/actions.php b/modules/movimenti/actions.php index b4b72cf14..00776bb6e 100755 --- a/modules/movimenti/actions.php +++ b/modules/movimenti/actions.php @@ -8,9 +8,10 @@ switch (post('op')) { case 'add': $idsede_partenza = post('idsede_partenza'); $idsede_destinazione = post('idsede_destinazione'); - $qta = (post('direzione') == 'Carico manuale') ? post('qta') : -post('qta'); + $direzione = post('direzione'); - if (post('direzione') == 'Carico manuale') { + $qta = !empty($direzione) ? post('qta') : -post('qta'); + if (!empty($direzione)) { if ($idsede_partenza == 0 && $idsede_destinazione != 0) { $qta = -post('qta'); } elseif ($idsede_partenza != 0 && $idsede_destinazione == 0) { diff --git a/modules/movimenti/add.php b/modules/movimenti/add.php index 6068a584f..671a6cd9c 100755 --- a/modules/movimenti/add.php +++ b/modules/movimenti/add.php @@ -3,7 +3,7 @@ include_once __DIR__.'/../../core.php'; // Imposto come azienda l'azienda predefinita per selezionare le sedi a cui ho accesso -$_SESSION['superselect']['idanagrafica'] = get_var('Azienda predefinita'); +$_SESSION['superselect']['idanagrafica'] = setting('Azienda predefinita'); // Azzero le sedi selezionate unset($_SESSION['superselect']['idsede_partenza']); @@ -19,35 +19,37 @@ $_SESSION['superselect']['idsede_destinazione'] = 0;
- {["type":"select", "label":"", "name":"idarticolo", "ajax-source":"articoli", "value":"", "required":1]} + {["type": "select", "label": "", "name": "idarticolo", "ajax-source": "articoli", "value": "", "required": 1 ]}
- {["type":"number", "label":"", "name":"qta", "decimals":"2", "value":"1", "required":1]} + {["type": "number", "label": "", "name": "qta", "decimals": "2", "value": "1", "required": 1 ]}
- {["type":"date", "label":"", "name":"data", "value":"-now-", "required":1]} + {["type": "date", "label": "", "name": "data", "value": "-now-", "required": 1 ]}
- {["type":"select", "label":"", "name":"direzione", "values":"list=\"Carico manuale\":\"Carico\", \"Scarico manuale\":\"Scarico\" ", "value":"Carico manuale", "required":1]} + {["type": "select", "label": "", "name": "causale", "values": "query=SELECT id, nome as text, descrizione, movimento_carico FROM mg_causali_movimenti", "value": 1, "required": 1 ]} + +
- {["type":"textarea", "label":"", "name":"movimento", "required":1]} + {["type": "textarea", "label": "", "name": "movimento", "required": 1 ]}
- {[ "type": "select", "label": "", "name": "idsede_destinazione", "ajax-source": "sedi_azienda", "value": "0", "required":1 ]} + {[ "type": "select", "label": "", "name": "idsede_destinazione", "ajax-source": "sedi_azienda", "value": "0", "required": 1 ]}
- {[ "type": "select", "label": "", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "value": "0", "required":1 ]} + {[ "type": "select", "label": "", "name": "idsede_partenza", "ajax-source": "sedi_azienda", "value": "0", "required": 1 ]}
@@ -64,11 +66,15 @@ $_SESSION['superselect']['idsede_destinazione'] = 0; '; +hotkeys(\'f9\', \'carico\', function(event, handler){ + $("#modals > div #direzione").val(2).change(); +}); +hotkeys.setScope(\'carico\'); +'; } diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index 02a02f63f..b90717b6a 100755 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -63,11 +63,9 @@ foreach ($righe as $riga) { } // Aggiunta dei riferimenti ai documenti - $ref = doc_references($r, $dir, ['idordine']); - - if (!empty($ref)) { + if ($riga->hasOriginal()) { echo ' -
'.Modules::link($ref['module'], $ref['id'], $ref['description'], $ref['description']); +
'.reference($riga->getOriginal()->parent); } echo ' diff --git a/modules/ordini/src/Components/Articolo.php b/modules/ordini/src/Components/Articolo.php index 488c5f49a..22224cead 100755 --- a/modules/ordini/src/Components/Articolo.php +++ b/modules/ordini/src/Components/Articolo.php @@ -26,14 +26,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - return; - } - - public function getDirection() - { - return $this->ordine->tipo->dir; - } } diff --git a/modules/ordini/src/Ordine.php b/modules/ordini/src/Ordine.php index f5d08b120..c8f021946 100755 --- a/modules/ordini/src/Ordine.php +++ b/modules/ordini/src/Ordine.php @@ -7,10 +7,12 @@ use Common\Document; use Modules\Anagrafiche\Anagrafica; use Modules\DDT\DDT; use Traits\RecordTrait; +use Traits\ReferenceTrait; use Util\Generator; class Ordine extends Document { + use ReferenceTrait; use RecordTrait; protected $table = 'or_ordini'; @@ -200,4 +202,21 @@ class Ordine extends Document return $numero; } + + // Opzioni di riferimento + + public function getReferenceName() + { + return $this->tipo->descrizione; + } + + public function getReferenceNumber() + { + return $this->numero_esterno ?: $this->numero; + } + + public function getReferenceDate() + { + return $this->data; + } } diff --git a/modules/preventivi/src/Components/Articolo.php b/modules/preventivi/src/Components/Articolo.php index d5afe1c28..89f109d28 100755 --- a/modules/preventivi/src/Components/Articolo.php +++ b/modules/preventivi/src/Components/Articolo.php @@ -25,14 +25,4 @@ class Articolo extends Article return $model; } - - public function movimentaMagazzino($qta) - { - return; - } - - public function getDirection() - { - return $this->preventivo->tipo->dir; - } } diff --git a/modules/preventivi/src/Preventivo.php b/modules/preventivi/src/Preventivo.php index 2e5b25431..8f0b375a8 100755 --- a/modules/preventivi/src/Preventivo.php +++ b/modules/preventivi/src/Preventivo.php @@ -10,10 +10,12 @@ use Modules\Interventi\Intervento; use Modules\Ordini\Ordine; use Modules\TipiIntervento\Tipo as TipoSessione; use Traits\RecordTrait; +use Traits\ReferenceTrait; use Util\Generator; class Preventivo extends Document { + use ReferenceTrait; use RecordTrait; protected $table = 'co_preventivi'; @@ -245,4 +247,21 @@ class Preventivo extends Document return $numero; } + + // Opzioni di riferimento + + public function getReferenceName() + { + return 'Preventivo'; + } + + public function getReferenceNumber() + { + return $this->numero; + } + + public function getReferenceDate() + { + return $this->data_bozza; + } } diff --git a/modules/primanota/add.php b/modules/primanota/add.php index 56921e60d..aae7f7037 100755 --- a/modules/primanota/add.php +++ b/modules/primanota/add.php @@ -104,7 +104,7 @@ foreach ($id_documenti as $id_documento) { // Predisposizione prima riga $conto_field = 'idconto_'.($dir == 'entrata' ? 'vendite' : 'acquisti'); - $id_conto_aziendale = $fattura->pagamento[$conto_field] ?: get_var('Conto aziendale predefinito'); + $id_conto_aziendale = $fattura->pagamento[$conto_field] ?: setting('Conto aziendale predefinito'); // Predisposizione conto crediti clienti $conto_field = 'idconto_'.($dir == 'entrata' ? 'cliente' : 'fornitore'); @@ -334,7 +334,7 @@ include $structure->filepath('movimenti.php'); $('#modals > div table.scadenze > tbody').append( '
'.tr('Valore totale', [], ['upper' => true]).'