Skip to content

Commit e7140c6

Browse files
feat: aggiunta gestione pausa sessioni
1 parent 9f796d7 commit e7140c6

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

modules/interventi/actions.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,6 +1280,35 @@
12801280

12811281
break;
12821282

1283+
case 'split_sessione':
1284+
$id_sessione = post('id_sessione');
1285+
$sessione = Sessione::find($id_sessione);
1286+
1287+
$pausa_inizio = post('pausa_inizio');
1288+
$pausa_fine = post('pausa_fine');
1289+
$orario_fine = $sessione->orario_fine;
1290+
1291+
// Modifica la sessione originale: fine sessione = inizio pausa
1292+
$sessione->orario_fine = $pausa_inizio;
1293+
$sessione->save();
1294+
1295+
// Crea una nuova sessione: inizio = fine pausa, fine = fine sessione originale
1296+
$new_sessione = $sessione->replicate();
1297+
$new_sessione->orario_inizio = $pausa_fine;
1298+
$new_sessione->orario_fine = $orario_fine;
1299+
$new_sessione->km = 0;
1300+
$new_sessione->prezzo_dirittochiamata = 0;
1301+
$new_sessione->save();
1302+
1303+
// Trigger aggiornamento intervento
1304+
$intervento = $sessione->intervento;
1305+
$intervento->updated_at = date('Y-m-d H:i:s');
1306+
$intervento->save();
1307+
1308+
flash()->info(tr('Pausa inserita correttamente!'));
1309+
1310+
break;
1311+
12831312
// Duplica intervento
12841313
case 'copy':
12851314
$id_stato = post('id_stato');
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
/*
4+
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
5+
* Copyright (C) DevCode s.r.l.
6+
*
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU General Public License as published by
9+
* the Free Software Foundation, either version 3 of the License, or
10+
* (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Public License
18+
* along with this program. If not, see <https://www.gnu.org/licenses/>.
19+
*/
20+
21+
include_once __DIR__.'/../../../core.php';
22+
23+
$sessione = $dbo->fetchOne('SELECT in_interventi_tecnici.*, an_anagrafiche.ragione_sociale, an_anagrafiche.deleted_at, in_interventi_tecnici.tipo_scontokm AS tipo_sconto_km, in_interventi_tecnici.prezzo_ore_unitario, in_interventi_tecnici.prezzo_km_unitario, in_interventi_tecnici.prezzo_dirittochiamata FROM in_interventi_tecnici INNER JOIN an_anagrafiche ON in_interventi_tecnici.idtecnico = an_anagrafiche.idanagrafica WHERE in_interventi_tecnici.id = '.prepare(get('id_sessione')));
24+
25+
$op = 'split_sessione';
26+
$button = '<i class="fa fa-pause"></i> '.tr('Applica pausa');
27+
28+
// Calcola la probabile pausa pranzo (a metà tra inizio e fine)
29+
$inizio = strtotime($sessione['orario_inizio']);
30+
$fine = strtotime($sessione['orario_fine']);
31+
$meta = ($inizio + $fine) / 2;
32+
33+
// Calcola orario minimo per inizio pausa
34+
$pausa_inizio_min = date('Y-m-d H:i:s', $inizio + setting('Numero di minuti di avanzamento delle sessioni delle attività')*60);
35+
36+
// Calcola orario massimo per fine pausa
37+
$pausa_fine_max = date('Y-m-d H:i:s', $fine - setting('Numero di minuti di avanzamento delle sessioni delle attività')*60);
38+
39+
// Calcola la probabile pausa pranzo (1 ora a metà della sessione)
40+
$pausa_inizio_default = date('Y-m-d H:i:s', $meta - 1800);
41+
$pausa_fine_default = date('Y-m-d H:i:s', $meta + 1800);
42+
43+
// Assicurati che la pausa sia sempre minore rispetto alla sessione
44+
if ($pausa_inizio_default < $pausa_inizio_min) {
45+
$pausa_inizio_default = $pausa_inizio_min;
46+
}
47+
if ($pausa_fine_default > $pausa_fine_max) {
48+
$pausa_fine_default = $pausa_fine_max;
49+
}
50+
51+
echo '
52+
<form id="add_form" action="'.base_path_osm().'/editor.php?id_module='.$id_module.'&id_record='.get('id_record').'" method="post">
53+
<input type="hidden" name="op" value="'.$op.'">
54+
<input type="hidden" name="backto" value="record-edit">
55+
<input type="hidden" name="id_sessione" value="'.$sessione['id'].'">';
56+
57+
// Informazioni sessione
58+
echo '
59+
<div class="alert alert-info">
60+
<i class="fa fa-info-circle"></i> '.tr('Sessione corrente: _TECNICO_ dal _INIZIO_ al _FINE_', [
61+
'_TECNICO_' => '<strong>'.$sessione['ragione_sociale'].'</strong>',
62+
'_INIZIO_' => '<strong>'.Translator::timestampToLocale($sessione['orario_inizio']).'</strong>',
63+
'_FINE_' => '<strong>'.Translator::timestampToLocale($sessione['orario_fine']).'</strong>',
64+
]).'
65+
</div>';
66+
67+
// Orari pausa
68+
echo '
69+
<div class="row">
70+
<div class="col-md-6">
71+
{[ "type": "timestamp", "label": "'.tr('Inizio pausa').'", "name": "pausa_inizio", "required": 1, "min-date": "'.$pausa_inizio_min.'", "max-date": "'.$pausa_fine_max.'", "value": "'.$pausa_inizio_default.'" ]}
72+
</div>
73+
74+
<div class="col-md-6">
75+
{[ "type": "timestamp", "label": "'.tr('Fine pausa').'", "name": "pausa_fine", "required": 1, "min-date": "'.$pausa_inizio_min.'", "max-date": "'.$pausa_fine_max.'", "value": "'.$pausa_fine_default.'" ]}
76+
</div>
77+
</div>';
78+
79+
echo '
80+
<!-- PULSANTI -->
81+
<div class="row">
82+
<div class="col-md-12 text-right">
83+
<button type="submit" class="btn btn-primary">'.$button.'</button>
84+
</div>
85+
</div>
86+
</form>';

0 commit comments

Comments
 (0)