diff --git a/CHANGELOG.md b/CHANGELOG.md index fc8556528..a8d2aacab 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k ### Aggiunto (Added) - Aggiunto modal in fase di **Stampa Bilancio** per visualizzare o meno l'elenco analitico dei clienti e fornitori - Aggiunta scelta del tipo documento in fase di creazione fattura da un altro documento + - Aggiunta possibilità di creare delle ricorrenze per gli **Interventi** in fase di aggiunta. ### Modificato (Changed) ### Fixed diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 877028e7a..d10de4933 100644 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -214,6 +214,97 @@ switch (post('op')) { 'id_tecnico' => $tecnici_assegnati, ]); + if(!empty(post('ricorsiva'))){ + $periodicita = post('periodicita'); + $data = post('data_inizio_ricorrenza'); + $interval = post('tipo_periodicita')!='manual' ? post('tipo_periodicita') : 'days'; + $stato = Stato::find(post('idstatoricorrenze')); + + // Estraggo le date delle ricorrenze + if (post('metodo_ricorrenza')=='data') { + $data_fine = post('data_fine_ricorrenza'); + while(strtotime($data)<=strtotime($data_fine)){ + $data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data))); + $w = date('w', strtotime($data)); + //Escludo sabato e domenica + if($w=='6'){ + $data = date('Y-m-d', strtotime('+2 day', strtotime($data))); + }else if($w=='0'){ + $data = date('Y-m-d', strtotime('+1 day', strtotime($data))); + } + if ($data<=$data_fine) { + $date_ricorrenze[] = $data; + } + } + } else { + $ricorrenze = post('numero_ricorrenze'); + for($i=0; $i<$ricorrenze; $i++){ + $data = date('Y-m-d', strtotime('+'.$periodicita.' '.$interval.'', strtotime($data))); + $w = date('w', strtotime($data)); + //Escludo sabato e domenica + if($w=='6'){ + $data = date('Y-m-d', strtotime('+2 day', strtotime($data))); + }else if($w=='0'){ + $data = date('Y-m-d', strtotime('+1 day', strtotime($data))); + } + + $date_ricorrenze[] = $data; + } + } + + foreach($date_ricorrenze as $data_ricorrenza){ + $intervento = Intervento::find($id_record); + $new = $intervento->replicate(); + // Calcolo il nuovo codice + $new->codice = Intervento::getNextCodice($data_ricorrenza); + $new->data_richiesta = $data_ricorrenza; + $new->idstatointervento = $stato->idstatointervento; + $new->save(); + $idintervento = $new->id; + + // Inserimento sessioni + if (!empty(post('riporta_sessioni'))) { + $numero_sessione = 0; + $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_ricorrenza)).' '.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($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; + } + } + + // Assegnazione dei tecnici all'intervento + $tecnici_assegnati = (array) post('tecnici_assegnati'); + $dbo->sync('in_interventi_tecnici_assegnati', [ + 'id_intervento' => $new->id, + ], [ + 'id_tecnico' => $tecnici_assegnati, + ]); + + $n_ricorrenze++; + } + + flash()->info(tr('Aggiunte _NUM_ nuove ricorrenze!', [ + '_NUM_' => $n_ricorrenze, + ])); + } + if (post('ref') == 'dashboard') { flash()->clearMessage('info'); flash()->clearMessage('warning'); diff --git a/modules/interventi/add.php b/modules/interventi/add.php index c5ee52d7b..e5787af62 100755 --- a/modules/interventi/add.php +++ b/modules/interventi/add.php @@ -47,7 +47,7 @@ if ($user['gruppo'] == 'Tecnici' && !empty($user['idanagrafica'])) { } // Stato di default associato all'attivitò -$stato = $dbo->fetchArray("SELECT * FROM in_statiintervento WHERE descrizione = 'In programmazione'"); +$stato = $dbo->fetchArray("SELECT * FROM in_statiintervento WHERE codice = 'WIP'"); $id_stato = $stato['idstatointervento']; // Se è indicata un'anagrafica relativa, si carica il tipo di intervento di default impostato @@ -314,6 +314,58 @@ echo ' + +