Aggiunta possibilità di creare delle ricorrenze in fase di aggiunta intervento

This commit is contained in:
MatteoPistorello 2021-09-22 11:22:03 +02:00
parent 466322ba54
commit 4960995cd1
3 changed files with 176 additions and 1 deletions

View File

@ -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

View File

@ -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');

View File

@ -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>';