diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index f3624f187..b7ecd6e2a 100755 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -36,7 +36,7 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = true;
- {[ "type": "date", "label": "", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "" ]} + {[ "type": "date", "label": "", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "isDataConclusioneAutomatica() ? '1", "help": "'.tr('La Data di conclusione è calcolata in automatico in base al valore del campo Validità') : '0'; ?>" ]}
@@ -93,7 +93,7 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = true;
- {[ "type": "number", "label": "", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|", "help": "" ]} + {[ "type": "number", "label": "", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|", "help": "" ]}
diff --git a/modules/contratti/src/Contratto.php b/modules/contratti/src/Contratto.php index 629305d34..bcf439dad 100755 --- a/modules/contratti/src/Contratto.php +++ b/modules/contratti/src/Contratto.php @@ -98,6 +98,21 @@ class Contratto extends Document } } + public function setTipoValiditaAttribute($value) + { + $this->attributes['tipo_validita'] = $value == 'manual' ? null : $value; + } + + /** + * Controlla se la data di conclusione del documento deve essere calcolata in modo automatico. + * + * @return bool + */ + public function isDataConclusioneAutomatica() + { + return !empty($this->validita) && !empty($this->tipo_validita) && !empty($this->data_accettazione); + } + /** * Restituisce il nome del modulo a cui l'oggetto è collegato. * @@ -166,7 +181,7 @@ class Contratto extends Document public function fixDataConclusione() { // Calcolo della data di conclusione in base alla validità - if (!empty($this->validita) && !empty($this->data_accettazione)) { + if ($this->isDataConclusioneAutomatica()) { $intervallo = CarbonInterval::make($this->validita.' '.$this->tipo_validita); $this->data_conclusione = Carbon::make($this->data_accettazione)->add($intervallo); } diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php index 7a098f361..c0b11eb8f 100755 --- a/modules/preventivi/edit.php +++ b/modules/preventivi/edit.php @@ -48,7 +48,7 @@ if (count($preventivo->revisioni) > 1) {
- {[ "type": "date", "label": "", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "" ]} + {[ "type": "date", "label": "", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "isDataConclusioneAutomatica() ? '1", "help": "'.tr('La Data di conclusione è calcolata in automatico in base al valore del campo Validità') : 0; ?>" ]}
@@ -105,7 +105,7 @@ if (count($preventivo->revisioni) > 1) {
- {[ "type": "number", "label": "", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|", "help": "" ]} + {[ "type": "number", "label": "", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|", "help": "" ]}
diff --git a/modules/preventivi/src/Preventivo.php b/modules/preventivi/src/Preventivo.php index 03259ceab..118478012 100755 --- a/modules/preventivi/src/Preventivo.php +++ b/modules/preventivi/src/Preventivo.php @@ -105,6 +105,21 @@ class Preventivo extends Document return $this->info['ore_interventi']; } + public function setTipoValiditaAttribute($value) + { + $this->attributes['tipo_validita'] = $value == 'manual' ? null : $value; + } + + /** + * Controlla se la data di conclusione del documento deve essere calcolata in modo automatico. + * + * @return bool + */ + public function isDataConclusioneAutomatica() + { + return !empty($this->validita) && !empty($this->tipo_validita) && !empty($this->data_accettazione); + } + /** * Restituisce il nome del modulo a cui l'oggetto è collegato. * @@ -168,7 +183,7 @@ class Preventivo extends Document public function fixDataConclusione() { // Calcolo della data di conclusione in base alla validità - if (!empty($this->validita) && !empty($this->data_accettazione)) { + if ($this->isDataConclusioneAutomatica()) { $intervallo = CarbonInterval::make($this->validita.' '.$this->tipo_validita); $this->data_conclusione = Carbon::make($this->data_accettazione)->add($intervallo); } diff --git a/src/HTMLBuilder/Wrapper/HTMLWrapper.php b/src/HTMLBuilder/Wrapper/HTMLWrapper.php index 91533c57d..8ff492399 100755 --- a/src/HTMLBuilder/Wrapper/HTMLWrapper.php +++ b/src/HTMLBuilder/Wrapper/HTMLWrapper.php @@ -235,6 +235,10 @@ class HTMLWrapper implements WrapperInterface ]; } elseif ($type == 'period') { $choices = [ + [ + 'id' => 'manual', + 'descrizione' => tr('giorno/i (manuale)'), + ], [ 'id' => 'days', 'descrizione' => tr('giorno/i'), diff --git a/src/Translator.php b/src/Translator.php index 6843515ca..11f7f1b4c 100755 --- a/src/Translator.php +++ b/src/Translator.php @@ -1,6 +1,7 @@ '; - if (!empty($documento['validita'])) { - $periodi = [ - 'd' => [ - 'singular' => tr('giorno'), - 'plural' => tr('giorni'), - ], - 'm' => [ - 'singular' => tr('mese'), - 'plural' => tr('mesi'), - ], - 'y' => [ - 'singular' => tr('anno'), - 'plural' => tr('anni'), - ], - ]; - echo' - '.tr('_TOT_ _PERIOD_', [ - '_TOT_' => $documento['validita'], - '_PERIOD_' => $periodi[$documento['tipo_validita']][$documento['validita'] == 1 ? 'singular' : 'plural'], - ]); + if (!empty($documento->validita) && !empty($documento->tipo_validita)) { + $intervallo = CarbonInterval::make($documento->validita.' '.$documento->tipo_validita); + + echo $intervallo->forHumans(); + } elseif (!empty($documento->validita)) { + echo tr('_TOT_ giorni', [ + '_TOT_' => $documento->validita, + ]); } else { echo '-'; } diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php index db2303d7e..1d80c629c 100755 --- a/templates/preventivi/body.php +++ b/templates/preventivi/body.php @@ -1,5 +1,7 @@ '; - if (!empty($documento['validita'])) { - $periodi = [ - 'd' => [ - 'singular' => tr('giorno'), - 'plural' => tr('giorni'), - ], - 'm' => [ - 'singular' => tr('mese'), - 'plural' => tr('mesi'), - ], - 'y' => [ - 'singular' => tr('anno'), - 'plural' => tr('anni'), - ], - ]; - echo' - '.tr('_TOT_ _PERIOD_', [ - '_TOT_' => $documento['validita'], - '_PERIOD_' => $periodi[$documento['tipo_validita']][$documento['validita'] == 1 ? 'singular' : 'plural'], + if (!empty($documento->validita) && !empty($documento->tipo_validita)) { + $intervallo = CarbonInterval::make($documento->validita.' '.$documento->tipo_validita); + + echo $intervallo->forHumans(); + } elseif (!empty($documento->validita)) { + echo tr('_TOT_ giorni', [ + '_TOT_' => $documento->validita, ]); } else { echo '-'; diff --git a/update/2_4_16.sql b/update/2_4_16.sql index b9ada3ab1..ce6a548be 100644 --- a/update/2_4_16.sql +++ b/update/2_4_16.sql @@ -109,5 +109,5 @@ UPDATE mg_prodotti SET mg_prodotti.id_riga_intervento = (SELECT id FROM in_righe ALTER TABLE `mg_prodotti` ADD FOREIGN KEY (`id_riga_intervento`) REFERENCES `in_righe_interventi`(`id`) ON DELETE CASCADE; -- Periodi di validità (Contratti e Preventivi) -ALTER TABLE `co_contratti` ADD COLUMN `tipo_validita` ENUM('days', 'months', 'years') NOT NULL DEFAULT 'days' AFTER `validita`; -ALTER TABLE `co_preventivi` ADD COLUMN `tipo_validita` ENUM('days', 'months', 'years') NOT NULL DEFAULT 'days' AFTER `validita`; +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`;