From 83343bacc3f301848ba4be55087ddfea3813c01a Mon Sep 17 00:00:00 2001
From: Maicol <maicolbattistini@live.it>
Date: Tue, 7 Jul 2020 17:15:47 +0200
Subject: [PATCH] =?UTF-8?q?Periodi=20di=20validit=C3=A0=20(#205=20e=20#806?=
 =?UTF-8?q?)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Periodi validità (Contratti, preventivi)
* Spostata la funzione validità nel file 2_4_16.sql
* Calcolo automatico della data di conclusione

Il calcolo viene effettuato in base alla data di accettazione e alla validità impostata

Co-authored-by: Thomas Zilio <Dasc3er@users.noreply.github.com>
---
 modules/contratti/actions.php           | 18 +++++++++++++++---
 modules/contratti/edit.php              |  6 +++---
 modules/ddt/modutil.php                 |  0
 modules/fatture/row-add.php             |  1 +
 modules/interventi/actions.php          |  0
 modules/preventivi/actions.php          | 18 +++++++++++++++---
 modules/preventivi/edit.php             |  5 ++---
 src/HTMLBuilder/Wrapper/HTMLWrapper.php | 15 +++++++++++++++
 templates/contratti/body.php            | 21 ++++++++++++++++++---
 templates/preventivi/body.php           | 17 ++++++++++++++++-
 update/2_4_16.sql                       |  4 ++++
 11 files changed, 89 insertions(+), 16 deletions(-)
 mode change 100755 => 100644 modules/ddt/modutil.php
 mode change 100755 => 100644 modules/interventi/actions.php

diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php
index 06d5d5fe4..6daf990ad 100644
--- a/modules/contratti/actions.php
+++ b/modules/contratti/actions.php
@@ -38,6 +38,17 @@ switch (post('op')) {
                 $budget = $rs[0]['budget'];
             }
 
+            // Calcolo della data di conclusione in base alla validità
+            $validita = post('validita');
+            $validita_periodo = post('tipo_validita');
+            $data_accettazione = post('data_accettazione');
+            $data_conclusione = post('data_conclusione');
+            if (!empty($validita) and !empty($data_accettazione)) {
+                $nuova_data = new DateTime($data_accettazione);
+                $nuova_data->add(new DateInterval(sprintf("P%d%s", $validita, strtoupper($validita_periodo))));
+                $data_conclusione = $nuova_data->format('Y-m-d');
+            }
+
             $contratto->idanagrafica = post('idanagrafica');
             $contratto->idsede = post('idsede');
             $contratto->idstato = post('idstato');
@@ -47,11 +58,12 @@ switch (post('op')) {
             $contratto->numero = post('numero');
             $contratto->budget = $budget;
             $contratto->idreferente = post('idreferente');
-            $contratto->validita = post('validita');
+            $contratto->validita = $validita;
+            $contratto->validita_periodo = $validita_periodo;
             $contratto->data_bozza = post('data_bozza');
-            $contratto->data_accettazione = post('data_accettazione');
+            $contratto->data_accettazione = $data_accettazione;
             $contratto->data_rifiuto = post('data_rifiuto');
-            $contratto->data_conclusione = post('data_conclusione');
+            $contratto->data_conclusione = $data_conclusione;
             $contratto->rinnovabile = post('rinnovabile');
             $contratto->giorni_preavviso_rinnovo = post('giorni_preavviso_rinnovo');
             $contratto->ore_preavviso_rinnovo = post('ore_preavviso_rinnovo');
diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php
index 439a63335..31618be2b 100755
--- a/modules/contratti/edit.php
+++ b/modules/contratti/edit.php
@@ -36,7 +36,7 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = true;
                 </div>
 
                 <div class="col-md-2">
-                    {[ "type": "date", "label": "<?php echo tr('Data conclusione'); ?>", "name": "data_conclusione", "value": "$data_conclusione$" ]}
+                    {[ "type": "date", "label": "<?php echo tr('Data conclusione'); ?>", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "<?php echo !empty($record['validita']) ? '1", "help": "' . tr("La data di conclusione è calcolata in automatico in base al valore del campo Validità") : 0 ?>" ]}
                 </div>
 
                 <div class="col-md-2">
@@ -93,7 +93,7 @@ $_SESSION['superselect']['permetti_movimento_a_zero'] = true;
 			<div class="row">
 
 				<div class="col-md-3">
-					{[ "type": "number", "label": "<?php echo tr('Validità offerta'); ?>", "name": "validita", "decimals": "2", "value": "$validita$", "icon-after": "giorni" ]}
+					{[ "type": "number", "label": "<?php echo tr('Validità offerta'); ?>", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|<?php echo $record['validita_periodo']; ?>", "help": "<?php echo tr("Il campo validità viene utilizzato solo nelle stampe, non è incluso nel calcolo della fine del contratto. Si può inserire questo valore nel campo Data conclusione") ?>" ]}
 				</div>
 
 				<div class="col-md-3">
@@ -463,4 +463,4 @@ $('#rinnovabile').on('change', function(){
         $('#giorni_preavviso_rinnovo').prop('disabled', true);
     }
 });
-</script>
\ No newline at end of file
+</script>
diff --git a/modules/ddt/modutil.php b/modules/ddt/modutil.php
old mode 100755
new mode 100644
diff --git a/modules/fatture/row-add.php b/modules/fatture/row-add.php
index 11f1205d8..34f7feaed 100755
--- a/modules/fatture/row-add.php
+++ b/modules/fatture/row-add.php
@@ -29,6 +29,7 @@ $result = [
     'qta' => 1,
     'um' => '',
     'prezzo' => 0,
+    'prezzo_acquisto' => 0,
     'sconto_unitario' => 0,
     'tipo_sconto' => '',
     'idiva' => '',
diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php
old mode 100755
new mode 100644
diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php
index 5c5270460..e57c9de3e 100755
--- a/modules/preventivi/actions.php
+++ b/modules/preventivi/actions.php
@@ -34,6 +34,17 @@ switch (post('op')) {
 
     case 'update':
         if (isset($id_record)) {
+            // Calcolo della data di conclusione in base alla validità
+            $validita = post('validita');
+            $validita_periodo = post('tipo_validita');
+            $data_accettazione = post('data_accettazione');
+            $data_conclusione = post('data_conclusione');
+            if (!empty($validita) and !empty($data_accettazione)) {
+                $nuova_data = new DateTime($data_accettazione);
+                $nuova_data->add(new DateInterval(sprintf("P%d%s", $validita, strtoupper($validita_periodo))));
+                $data_conclusione = $nuova_data->format('Y-m-d');
+            }
+
             $preventivo->idstato = post('idstato');
             $preventivo->nome = post('nome');
             $preventivo->idanagrafica = post('idanagrafica');
@@ -45,16 +56,17 @@ switch (post('op')) {
             $preventivo->tempi_consegna = post('tempi_consegna');
             $preventivo->numero = post('numero');
             $preventivo->data_bozza = post('data_bozza');
-            $preventivo->data_accettazione = post('data_accettazione');
+            $preventivo->data_accettazione = $data_accettazione;
             $preventivo->data_rifiuto = post('data_rifiuto');
-            $preventivo->data_conclusione = post('data_conclusione');
+            $preventivo->data_conclusione = $data_conclusione;
             $preventivo->esclusioni = post('esclusioni');
             $preventivo->descrizione = post('descrizione');
             $preventivo->id_documento_fe = post('id_documento_fe');
             $preventivo->num_item = post('num_item');
             $preventivo->codice_cig = post('codice_cig');
             $preventivo->codice_cup = post('codice_cup');
-            $preventivo->validita = post('validita');
+            $preventivo->validita = $validita;
+            $preventivo->validita_periodo = $validita_periodo;
             $preventivo->idtipointervento = post('idtipointervento');
             $preventivo->idiva = post('idiva');
 
diff --git a/modules/preventivi/edit.php b/modules/preventivi/edit.php
index f9fad97d8..431778ef4 100755
--- a/modules/preventivi/edit.php
+++ b/modules/preventivi/edit.php
@@ -48,7 +48,7 @@ if (count($preventivo->revisioni) > 1) {
                 </div>
 
                 <div class="col-md-2">
-                    {[ "type": "date", "label": "<?php echo tr('Data conclusione'); ?>", "name": "data_conclusione", "value": "$data_conclusione$" ]}
+                    {[ "type": "date", "label": "<?php echo tr('Data conclusione'); ?>", "name": "data_conclusione", "value": "$data_conclusione$", "disabled": "<?php echo !empty($record['validita']) ? '1", "help": "' . tr("La data di conclusione è calcolata in automatico in base al valore del campo Validità") : 0 ?>" ]}
                 </div>
 
                 <div class="col-md-2">
@@ -105,8 +105,7 @@ if (count($preventivo->revisioni) > 1) {
 
 			<div class="row">
 				<div class="col-md-3">
-					{[ "type": "number", "label": "<?php echo tr('Validità offerta'); ?>", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "giorni" ]}
-
+                    {[ "type": "number", "label": "<?php echo tr('Validità offerta'); ?>", "name": "validita", "decimals": "0", "value": "$validita$", "icon-after": "choice|period|<?php echo $record['validita_periodo']; ?>", "help": "<?php echo tr("Il campo validità viene utilizzato solo nelle stampe, non è incluso nel calcolo della fine del preventivo. Si può inserire questo valore nel campo Data conclusione") ?>" ]}
 				</div>
 
 				<div class="col-md-3">
diff --git a/src/HTMLBuilder/Wrapper/HTMLWrapper.php b/src/HTMLBuilder/Wrapper/HTMLWrapper.php
index 5332a0b3c..8d09a9f1e 100755
--- a/src/HTMLBuilder/Wrapper/HTMLWrapper.php
+++ b/src/HTMLBuilder/Wrapper/HTMLWrapper.php
@@ -233,6 +233,21 @@ class HTMLWrapper implements WrapperInterface
                     'descrizione' => tr('CCN'),
                 ],
             ];
+        } elseif ($type == 'period') {
+            $choices = [
+                [
+                    'id' => 'd',
+                    'descrizione' => tr('giorno/i')
+                ],
+                [
+                    'id' => 'm',
+                    'descrizione' => tr('mese/i')
+                ],
+                [
+                    'id' => 'y',
+                    'descrizione' => tr('anno/i')
+                ]
+            ];
         }
 
         $value = (empty($pieces[2]) || !in_array($pieces[2], array_column($choices, 'id'))) ? $choices[0]['id'] : $pieces[2];
diff --git a/templates/contratti/body.php b/templates/contratti/body.php
index e4b6de70b..38f562f60 100755
--- a/templates/contratti/body.php
+++ b/templates/contratti/body.php
@@ -272,10 +272,25 @@ echo '
         <td>';
 
         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_ giorni', [
-                '_TOT_' => $documento['validita'],
-            ]);
+            '.tr('_TOT_ _PERIOD_', [
+                    '_TOT_' => $documento['validita'],
+                    '_PERIOD_' => $periodi[$documento['validita_periodo']][$documento['validita'] == 1 ? 'singular' : 'plural']
+                ]);
         } else {
             echo '-';
         }
diff --git a/templates/preventivi/body.php b/templates/preventivi/body.php
index 9a49a6c50..0d383821f 100755
--- a/templates/preventivi/body.php
+++ b/templates/preventivi/body.php
@@ -326,9 +326,24 @@ echo '
         <td>';
 
         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_ giorni', [
+            '.tr('_TOT_ _PERIOD_', [
                 '_TOT_' => $documento['validita'],
+                '_PERIOD_' => $periodi[$documento['validita_periodo']][$documento['validita'] == 1 ? 'singular' : 'plural']
             ]);
         } else {
             echo '-';
diff --git a/update/2_4_16.sql b/update/2_4_16.sql
index 3b36d22d7..92e1a5538 100644
--- a/update/2_4_16.sql
+++ b/update/2_4_16.sql
@@ -107,3 +107,7 @@ ALTER TABLE `mg_prodotti` DROP FOREIGN KEY `mg_prodotti_ibfk_4`;
 UPDATE mg_prodotti SET mg_prodotti.id_riga_intervento = NULL WHERE mg_prodotti.id_riga_intervento NOT IN (SELECT old_id FROM in_righe_interventi);
 UPDATE mg_prodotti SET mg_prodotti.id_riga_intervento = (SELECT id FROM in_righe_interventi WHERE mg_prodotti.id_riga_intervento = in_righe_interventi.old_id);
 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 `validita_periodo` ENUM('d','m','y') NOT NULL DEFAULT 'd' AFTER `validita`;
+ALTER TABLE `co_preventivi` ADD COLUMN `validita_periodo` ENUM('d','m','y') NOT NULL DEFAULT 'd' AFTER `validita`;