Aggiunta possibilità di creare delle ricorrenze in fase di aggiunta intervento
This commit is contained in:
parent
466322ba54
commit
4960995cd1
|
@ -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
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -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 '
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<!-- RICORRENZA -->
|
||||
<div class="box box-warning collapsable collapsed-box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">'.tr('Ricorrenza').'</h3>
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse">
|
||||
<i class="fa fa-plus"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "'.tr('Ricorsiva').'", "name": "ricorsiva", "value": "" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 ricorrenza">
|
||||
{[ "type": "timestamp", "label": "'.tr('Data/ora inizio').'", "name": "data_inizio_ricorrenza", "value": "'.($data_richiesta ?: '-now-').'" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4 ricorrenza">
|
||||
{[ "type": "number", "label": "'.tr('Periodicità').'", "name": "periodicita", "decimals": "0", "icon-after": "choice|period|months", "value": "1" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row ricorrenza">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Metodo fine ricorrenza').'", "name": "metodo_ricorrenza", "values": "list=\"data\":\"Data fine\",\"numero\":\"Numero ricorrenze\"" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "timestamp", "label": "'.tr('Data/ora fine').'", "name": "data_fine_ricorrenza" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "number", "label": "'.tr('Numero ricorrenze').'", "name": "numero_ricorrenze", "decimals": "0" ]}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row ricorrenza">
|
||||
<div class="col-md-4">
|
||||
{[ "type": "select", "label": "'.tr('Stato ricorrenze').'", "name": "idstatoricorrenze", "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL AND is_completato=0" ]}
|
||||
</div>
|
||||
|
||||
<div class="col-md-4">
|
||||
{[ "type": "checkbox", "label": "'.tr('Riporta sessioni di lavoro').'", "name": "riporta_sessioni", "value": "" ]}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- DETTAGLI CLIENTE -->
|
||||
<div class="box box-success collapsable collapsed-box">
|
||||
<div class="box-header with-border">
|
||||
|
@ -407,6 +459,9 @@ echo '
|
|||
location.reload();
|
||||
});
|
||||
}
|
||||
|
||||
// Ricorrenza
|
||||
$(".ricorrenza").addClass("hidden");
|
||||
});
|
||||
|
||||
input("idtecnico").change(function() {
|
||||
|
@ -597,4 +652,32 @@ if (filter('orario_fine') !== null) {
|
|||
function deassegnaTuttiTecnici() {
|
||||
input("tecnici_assegnati").getElement().selectReset();
|
||||
}
|
||||
|
||||
$("#ricorsiva").on("change", function(){
|
||||
if ($(this).is(":checked")) {
|
||||
$(".ricorrenza").removeClass("hidden");
|
||||
$("#data_inizio_ricorrenza").attr("required", true);
|
||||
$("#metodo_ricorrenza").attr("required", true);
|
||||
$("#idstatoricorrenze").attr("required", true);
|
||||
} else {
|
||||
$(".ricorrenza").addClass("hidden");
|
||||
$("#data_inizio_ricorrenza").attr("required", false);
|
||||
$("#metodo_ricorrenza").attr("required", false);
|
||||
$("#idstatoricorrenze").attr("required", false);
|
||||
}
|
||||
});
|
||||
|
||||
$("#metodo_ricorrenza").on("change", function(){
|
||||
if ($(this).val()=="data") {
|
||||
input("data_fine_ricorrenza").enable();
|
||||
$("#data_fine_ricorrenza").attr("required", true);
|
||||
input("numero_ricorrenze").disable();
|
||||
input("numero_ricorrenze").set("");
|
||||
} else {
|
||||
input("numero_ricorrenze").enable();
|
||||
input("data_fine_ricorrenza").disable();
|
||||
input("data_fine_ricorrenza").set("");
|
||||
$("#data_fine_ricorrenza").attr("required", false);
|
||||
}
|
||||
});
|
||||
</script>';
|
||||
|
|
Loading…
Reference in New Issue