diff --git a/modules/interventi/bulk.php b/modules/interventi/bulk.php
index e2cd4aca1..f61259fac 100755
--- a/modules/interventi/bulk.php
+++ b/modules/interventi/bulk.php
@@ -238,6 +238,67 @@
break;
+ case 'change_date':
+ $campo_data = post('date_field');
+ $nuova_data = post('new_date');
+
+ $campi_disponibili = [
+ 'request' => 'data_richiesta',
+ 'deadline' => 'data_scadenza',
+ ];
+
+ $data = DateTime::createFromFormat('Y-m-d', (string) $nuova_data);
+ if (!isset($campi_disponibili[$campo_data]) || empty($nuova_data) || $data === false || $data->format('Y-m-d') !== $nuova_data) {
+ flash()->error(tr('Seleziona un campo e una data validi.'));
+ break;
+ }
+
+ $campo = $campi_disponibili[$campo_data];
+ $aggiornate = 0;
+ $ignorate_stato = 0;
+ $ignorate_scadenza = 0;
+
+ foreach ($id_records as $id) {
+ $intervento = Intervento::find($id);
+
+ if (empty($intervento) || empty($intervento->stato) || $intervento->stato->codice !== 'TODO') {
+ ++$ignorate_stato;
+ continue;
+ }
+
+ if ($campo === 'data_scadenza' && !empty($intervento->data_richiesta) && $nuova_data < $intervento->data_richiesta->format('Y-m-d')) {
+ ++$ignorate_scadenza;
+ continue;
+ }
+
+ $intervento->{$campo} = $nuova_data;
+ $intervento->save();
+
+ ++$aggiornate;
+ }
+
+ if ($aggiornate > 0) {
+ flash()->info(tr('_NUM_ attività aggiornate correttamente.', [
+ '_NUM_' => $aggiornate,
+ ]));
+ } else {
+ flash()->warning(tr('Nessuna attività aggiornata.'));
+ }
+
+ if ($ignorate_stato > 0) {
+ flash()->warning(tr('_NUM_ attività ignorate perché non erano nello stato Da programmare.', [
+ '_NUM_' => $ignorate_stato,
+ ]));
+ }
+
+ if ($ignorate_scadenza > 0) {
+ flash()->warning(tr('_NUM_ attività ignorate perché la nuova data di scadenza precede la data richiesta.', [
+ '_NUM_' => $ignorate_scadenza,
+ ]));
+ }
+
+ break;
+
case 'copy_bulk':
$id_stato = post('id_stato');
$data_richiesta = post('data_richiesta');
@@ -457,6 +518,22 @@
],
];
+$operations['change_date'] = [
+ 'text' => ' '.tr('Cambia data').'',
+ 'data' => [
+ 'title' => tr('Cambiare la data delle attività selezionate?'),
+ 'msg' => tr('La modifica sarà applicata solamente alle attività nello stato Da programmare.').'
+ {[ "type": "select", "label": "'.tr('Campo da modificare').'", "name": "date_field", "required": 1, "values": "list=\"request\":\"'.tr('Data richiesta').'\",\"deadline\":\"'.tr('Data scadenza').'\"", "value": "request" ]}
+