From b9184eac0ad914d486966842fd0f10c202f397ea Mon Sep 17 00:00:00 2001 From: MatteoPistorello Date: Fri, 16 Jun 2023 16:07:19 +0200 Subject: [PATCH] Gestione duplicazione multipla intervento --- modules/interventi/actions.php | 174 +++++++++++---------- modules/interventi/modals/duplicazione.php | 25 ++- 2 files changed, 112 insertions(+), 87 deletions(-) diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 7bb460ab3..d962e107d 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -949,102 +949,114 @@ switch (post('op')) { // Duplica intervento case 'copy': $id_stato = post('id_stato'); - $data_richiesta = post('data_richiesta'); + $ora_richiesta = post('ora_richiesta'); $copia_sessioni = post('copia_sessioni'); $copia_righe = post('copia_righe'); $copia_impianti = post('copia_impianti'); $copia_allegati = post('copia_allegati'); + $data_inizio = post('data_inizio'); + $data_fine = post('data_fine'); + $giorni = (array)post('giorni'); - $new = $intervento->replicate(); - $new->idstatointervento = $id_stato; + $period = CarbonPeriod::create($data_inizio, $data_fine); - // Calcolo del nuovo codice sulla base della data di richiesta - $new->codice = Intervento::getNextCodice($data_richiesta, $new->id_segment); - $new->data_richiesta = $data_richiesta; - $new->data_scadenza = post('data_scadenza'); - $new->firma_file = ''; - $new->firma_data = null; - $new->firma_nome = ''; + // Iterate over the period + foreach ($period as $date) { + $data_richiesta = $date->format('Y-m-d').' '.$ora_richiesta; + $giorno = $date->locale('IT')->dayName; + if (in_array($giorno, $giorni)) { + $new = $intervento->replicate(); + $new->idstatointervento = $id_stato; - $new->save(); + // Calcolo del nuovo codice sulla base della data di richiesta + $new->codice = Intervento::getNextCodice($data_richiesta, $new->id_segment); + $new->data_richiesta = $data_richiesta; + $new->data_scadenza = post('ora_scadenza') ? $date->format('Y-m-d').' '.post('ora_scadenza') : null; + $new->firma_file = ''; + $new->firma_data = null; + $new->firma_nome = ''; - $id_record = $new->id; + $new->save(); - // Copio le righe - if (!empty($copia_righe)) { - $righe = $intervento->getRighe(); - foreach ($righe as $riga) { - $new_riga = $riga->replicate(); - $new_riga->setDocument($new); + $id_record = $new->id; - $new_riga->qta_evasa = 0; - $new_riga->save(); + // Copio le righe + if (!empty($copia_righe)) { + $righe = $intervento->getRighe(); + foreach ($righe as $riga) { + $new_riga = $riga->replicate(); + $new_riga->setDocument($new); - if ($new_riga->isArticolo()) { - $new_riga->movimenta($new_riga->qta); + $new_riga->qta_evasa = 0; + $new_riga->save(); + + if ($new_riga->isArticolo()) { + $new_riga->movimenta($new_riga->qta); + } + } + } + + // Copia delle sessioni + $numero_sessione = 0; + if (!empty($copia_sessioni)) { + $sessioni = $intervento->sessioni; + foreach ($sessioni as $sessione) { + // Se è la prima sessione che copio importo la data con quella della richiesta + if ($numero_sessione == 0) { + $orario_inizio = date('Y-m-d', strtotime($data_richiesta)).' '.date('H:i:s', strtotime($sessione->orario_inizio)); + } else { + $diff = strtotime($sessione->orario_inizio) - strtotime($inizio_old); + $orario_inizio = date('Y-m-d H:i:s', (strtotime($new_sessione->orario_inizio) + $diff)); + } + + $diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio); + $orario_fine = date('Y-m-d H:i:s', (strtotime($orario_inizio) + $diff_fine)); + + $new_sessione = $sessione->replicate(); + $new_sessione->idintervento = $new->id; + + $new_sessione->orario_inizio = $orario_inizio; + $new_sessione->orario_fine = $orario_fine; + $new_sessione->save(); + + ++$numero_sessione; + $inizio_old = $sessione->orario_inizio; + } + } + + // Copia degli impianti + if (!empty($copia_impianti)) { + $impianti = $dbo->select('my_impianti_interventi', '*', ['idintervento' => $intervento->id]); + foreach ($impianti as $impianto) { + $dbo->insert('my_impianti_interventi', [ + 'idintervento' => $id_record, + 'idimpianto' => $impianto['idimpianto'] + ]); + } + + $componenti = $dbo->select('my_componenti_interventi', '*', ['id_intervento' => $intervento->id]); + foreach ($componenti as $componente) { + $dbo->insert('my_componenti_interventi', [ + 'id_intervento' => $id_record, + 'id_componente' => $componente['id_componente'] + ]); + } + } + + //copia allegati + if (!empty($copia_allegati)) { + $allegati = $intervento->uploads(); + foreach ($allegati as $allegato) { + $allegato->copia([ + 'id_module' => $new->getModule()->id, + 'id_record' => $new->id, + ]); + } } } } - // Copia delle sessioni - $numero_sessione = 0; - if (!empty($copia_sessioni)) { - $sessioni = $intervento->sessioni; - foreach ($sessioni as $sessione) { - // Se è la prima sessione che copio importo la data con quella della richiesta - if ($numero_sessione == 0) { - $orario_inizio = date('Y-m-d', strtotime($data_richiesta)).' '.date('H:i:s', strtotime($sessione->orario_inizio)); - } else { - $diff = strtotime($sessione->orario_inizio) - strtotime($inizio_old); - $orario_inizio = date('Y-m-d H:i:s', (strtotime($new_sessione->orario_inizio) + $diff)); - } - - $diff_fine = strtotime($sessione->orario_fine) - strtotime($sessione->orario_inizio); - $orario_fine = date('Y-m-d H:i:s', (strtotime($orario_inizio) + $diff_fine)); - - $new_sessione = $sessione->replicate(); - $new_sessione->idintervento = $new->id; - - $new_sessione->orario_inizio = $orario_inizio; - $new_sessione->orario_fine = $orario_fine; - $new_sessione->save(); - - ++$numero_sessione; - $inizio_old = $sessione->orario_inizio; - } - } - - // Copia degli impianti - if (!empty($copia_impianti)) { - $impianti = $dbo->select('my_impianti_interventi', '*', ['idintervento' => $intervento->id]); - foreach ($impianti as $impianto) { - $dbo->insert('my_impianti_interventi', [ - 'idintervento' => $id_record, - 'idimpianto' => $impianto['idimpianto'] - ]); - } - - $componenti = $dbo->select('my_componenti_interventi', '*', ['id_intervento' => $intervento->id]); - foreach ($componenti as $componente) { - $dbo->insert('my_componenti_interventi', [ - 'id_intervento' => $id_record, - 'id_componente' => $componente['id_componente'] - ]); - } - } - - //copia allegati - if (!empty($copia_allegati)) { - $allegati = $intervento->uploads(); - foreach ($allegati as $allegato) { - $allegato->copia([ - 'id_module' => $new->getModule()->id, - 'id_record' => $new->id, - ]); - } - } - - flash()->info(tr('Attività duplicata correttamente!')); + flash()->info(tr('Attività duplicate correttamente!')); break; diff --git a/modules/interventi/modals/duplicazione.php b/modules/interventi/modals/duplicazione.php index bc458f496..3805cc2d8 100644 --- a/modules/interventi/modals/duplicazione.php +++ b/modules/interventi/modals/duplicazione.php @@ -25,20 +25,34 @@ echo '
-
- {[ "type": "timestamp", "label": "'.tr('Data/ora richiesta').'", "name": "data_richiesta", "value": "-now-", "required":1 ]} +
+ {[ "type": "date", "label": "'.tr('Data inizio').'", "name": "data_inizio", "value": "-now-", "required":1 ]}
-
- {[ "type": "timestamp", "label": "'.tr('Data/ora scadenza').'", "name": "data_scadenza" ]} +
+ {[ "type": "date", "label": "'.tr('Data fine').'", "name": "data_fine", "value": "-now-", "required":1 ]} +
+ +
+ {[ "type": "time", "label": "'.tr('Ora richiesta').'", "name": "ora_richiesta", "value": "-now-", "required":1 ]} +
+ +
+ {[ "type": "time", "label": "'.tr('Ora scadenza').'", "name": "ora_scadenza" ]}
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione", "value": "" ]} + {[ "type": "select", "multiple":"1", "label": "'.tr('Giorni').'", "name": "giorni[]", "required": 0, "value": "'.strtolower(setting('Giorni lavorativi')).'", "values": "list=\"lunedì\":\"'.tr('Lunedì').'\", \"martedì\":\"'.tr('Martedì').'\", \"mercoledì\":\"'.tr('Mercoledì').'\", \"giovedì\":\"'.tr('Giovedì').'\", \"venerdì\":\"'.tr('Venerdì').'\", \"sabato\":\"'.tr('Sabato').'\", \"domenica\":\"'.tr('Domenica').'\"", "required":1 ]}
+
+ {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione", "value": "" ]} +
+
+ +
{["type": "checkbox", "label": "'.tr('Duplica righe').'", "name": "copia_righe", "help": "'.tr('Selezione per riportare anche le righe nella nuova attività').'" ]}
@@ -54,7 +68,6 @@ echo '
{["type": "checkbox", "label": "'.tr('Duplica allegati').'", "name": "copia_allegati", "help": "'.tr('Selezione per riportare anche gli allegati nella nuova attività').'", "value": 1 ]}
-