diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index feec33c6f..4ba122436 100755 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -67,17 +67,15 @@ $_SESSION['superselect']['id_categoria'] = $record['id_categoria']; {[ "type": "number", "label": "", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]} +
{[ "type": "checkbox", "label": "", "name": "qta_manuale", "value": 0, "help": "", "placeholder": "", "extra": "" ]} -
diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index 52f6a6838..4dff6d254 100755 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -88,6 +88,8 @@ switch (post('op')) { 'idritenutaacconto' => $idritenutaacconto, 'n_colli' => post('n_colli'), + 'peso' => post('peso'), + 'volume' => post('volume'), 'bollo' => 0, 'rivalsainps' => 0, 'ritenutaacconto' => 0, diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index fb2f9a63d..5fd589f40 100755 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -173,7 +173,7 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = ($dir == 'uscita' ? true
{[ "type": "timestamp", "label": "", "name": "data_ora_trasporto", "required": 0, "value": "$data_ora_trasporto$" ]}
- +
+ +
+ {[ "type": "number", "label": "'.tr('Peso').'", "name": "peso", "value": "$peso$", "readonly": "'.intval(empty($record['peso'])).'", "help": "'.tr('Il valore del campo Peso viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]} +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Modifica peso').'", "name": "peso_manuale", "value": '.intval(!empty($record['peso'])).', "help": "'.tr('Seleziona per modificare manualmente il campo Peso').'", "placeholder": "'.tr('Modifica peso').'" ]} + + +
+ +
+ {[ "type": "number", "label": "'.tr('Volume').'", "name": "volume", "value": "$volume$", "readonly": "'.intval(empty($record['volume'])).'", "help": "'.tr('Il valore del campo Volume viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]} +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Modifica volume').'", "name": "volume_manuale", "value": '.intval(!empty($record['volume'])).', "help": "'.tr('Seleziona per modificare manualmente il campo Volume').'", "placeholder": "'.tr('Modifica volume').'" ]} + + +
+ '; +} + +?>
diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php index 78ca2e80d..80ab641dd 100755 --- a/modules/ddt/src/DDT.php +++ b/modules/ddt/src/DDT.php @@ -17,6 +17,12 @@ class DDT extends Document protected $table = 'dt_ddt'; + protected $casts = [ + 'bollo' => 'float', + 'peso' => 'float', + 'volume' => 'float', + ]; + protected $with = [ 'tipo', ]; @@ -100,6 +106,38 @@ class DDT extends Document return $this->tipo->dir; } + /** + * Restituisce il peso calcolato sulla base degli articoli del documento. + * + * @return float + */ + public function getPesoCalcolatoAttribute() + { + $righe = $this->getRighe(); + + $peso_lordo = $righe->sum(function ($item) { + return $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0; + }); + + return $peso_lordo; + } + + /** + * Restituisce il volume calcolato sulla base degli articoli del documento. + * + * @return float + */ + public function getVolumeCalcolatoAttribute() + { + $righe = $this->getRighe(); + + $volume = $righe->sum(function ($item) { + return $item->isArticolo() ? $item->articolo->volume * $item->qta : 0; + }); + + return $volume; + } + public function anagrafica() { return $this->belongsTo(Anagrafica::class, 'idanagrafica'); diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index f4681f54b..f83d698f4 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -85,6 +85,9 @@ switch (post('op')) { $fattura->n_colli = post('n_colli'); $fattura->tipo_resa = post('tipo_resa'); + $fattura->peso = post('peso'); + $fattura->volume = post('volume'); + $fattura->rivalsainps = 0; $fattura->ritenutaacconto = 0; $fattura->iva_rivalsainps = 0; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index dd2a18008..4fc7daf4e 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -534,9 +534,43 @@ if ($tipodoc == 'Fattura accompagnatoria di vendita') { echo '
- {[ "type": "select", "label": "'.tr('Tipo Resa').'", "name": "tipo_resa", "value":"$tipo_resa$", "values": '.json_encode($tipo_resa).', "readonly": '.intval($record['causale_desc'] != 'Reso').' ]} + {[ "type": "select", "label": "'.tr('Tipo Resa').'", "name": "tipo_resa", "value": "$tipo_resa$", "values": '.json_encode($tipo_resa).', "readonly": '.intval($record['causale_desc'] != 'Reso').' ]}
+
+
'; + echo ' +
+
+ {[ "type": "number", "label": "'.tr('Peso').'", "name": "peso", "value": "$peso$", "readonly": "'.intval(empty($record['peso'])).'", "help": "'.tr('Il valore del campo Peso viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]} +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Modifica peso').'", "name": "peso_manuale", "value": '.intval(!empty($record['peso'])).', "help": "'.tr('Seleziona per modificare manualmente il campo Peso').'", "placeholder": "'.tr('Modifica peso').'" ]} + + +
+ +
+ {[ "type": "number", "label": "'.tr('Volume').'", "name": "volume", "value": "$volume$", "readonly": "'.intval(empty($record['volume'])).'", "help": "'.tr('Il valore del campo Volume viene calcolato in automatico sulla base degli articoli inseriti nel documento, a meno dell\'impostazione di un valore manuale in questo punto').'" ]} +
+ +
+ {[ "type": "checkbox", "label": "'.tr('Modifica volume').'", "name": "volume_manuale", "value": '.intval(!empty($record['volume'])).', "help": "'.tr('Seleziona per modificare manualmente il campo Volume').'", "placeholder": "'.tr('Modifica volume').'" ]} + +
'; diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 67f254ea1..8cf629969 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -28,6 +28,8 @@ class Fattura extends Document protected $casts = [ 'bollo' => 'float', + 'peso' => 'float', + 'volume' => 'float', ]; protected $with = [ @@ -192,6 +194,38 @@ class Fattura extends Document return $this->tipo->dir; } + /** + * Restituisce il peso calcolato sulla base degli articoli del documento. + * + * @return float + */ + public function getPesoCalcolatoAttribute() + { + $righe = $this->getRighe(); + + $peso_lordo = $righe->sum(function ($item) { + return $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0; + }); + + return $peso_lordo; + } + + /** + * Restituisce il volume calcolato sulla base degli articoli del documento. + * + * @return float + */ + public function getVolumeCalcolatoAttribute() + { + $righe = $this->getRighe(); + + $volume = $righe->sum(function ($item) { + return $item->isArticolo() ? $item->articolo->volume * $item->qta : 0; + }); + + return $volume; + } + // Calcoli /** diff --git a/templates/ddt/footer.php b/templates/ddt/footer.php index bef6f6a15..b891bdfa4 100755 --- a/templates/ddt/footer.php +++ b/templates/ddt/footer.php @@ -11,12 +11,8 @@ $totale_imponibile = $documento->totale_imponibile; $totale_iva = $documento->iva; $totale = $documento->totale; -$volume = $righe->sum(function ($item) { - return $item->isArticolo() ? $item->articolo->volume * $item->qta : 0; -}); -$peso_lordo = $righe->sum(function ($item) { - return $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0; -}); +$volume = $documento->volume ?: $documento->volume_calcolato; +$peso_lordo = $documento->peso ?: $documento->peso_calcolato; // TABELLA PRINCIPALE echo ' diff --git a/templates/fatture/footer.php b/templates/fatture/footer.php index 9c226a894..2a47c55a5 100755 --- a/templates/fatture/footer.php +++ b/templates/fatture/footer.php @@ -14,12 +14,8 @@ $netto_a_pagare = abs($documento->netto); $show_sconto = $sconto > 0; -$volume = $righe->sum(function ($item) { - return $item->isArticolo() ? $item->articolo->volume * $item->qta : 0; -}); -$peso_lordo = $righe->sum(function ($item) { - return $item->isArticolo() ? $item->articolo->peso_lordo * $item->qta : 0; -}); +$volume = $documento->volume ?: $documento->volume_calcolato; +$peso_lordo = $documento->peso ?: $documento->peso_calcolato; $width = round(100 / ($show_sconto ? 5 : 3), 2); diff --git a/update/2_4_16.sql b/update/2_4_16.sql index ce6a548be..f42629a17 100644 --- a/update/2_4_16.sql +++ b/update/2_4_16.sql @@ -111,3 +111,7 @@ ALTER TABLE `mg_prodotti` ADD FOREIGN KEY (`id_riga_intervento`) REFERENCES `in_ -- Periodi di validità (Contratti e Preventivi) ALTER TABLE `co_contratti` ADD COLUMN `tipo_validita` ENUM('days', 'months', 'years') NULL DEFAULT NULL AFTER `validita`; ALTER TABLE `co_preventivi` ADD COLUMN `tipo_validita` ENUM('days', 'months', 'years') NULL DEFAULT NULL AFTER `validita`; + +-- Aggiunta campi Peso e Volume in DDT e Fatture accompagnatorie +ALTER TABLE `dt_ddt` ADD COLUMN `peso` decimal(12, 4) AFTER `n_colli`, ADD COLUMN `volume` decimal(12, 4) AFTER `peso`; +ALTER TABLE `co_documenti` ADD COLUMN `peso` decimal(12, 4) AFTER `n_colli`, ADD COLUMN `volume` decimal(12, 4) AFTER `peso`;