Procházet zdrojové kódy

Limita i CRUD admin all'attivita in sessione.

Così un operatore non legge o modifica dati di un'altra sagra.

Co-authored-by: Cursor <cursoragent@cursor.com>
marcofalabretti před 2 týdny
rodič
revize
fb76759f44
49 změnil soubory, kde provedl 643 přidání a 203 odebrání
  1. 91
    22
      app/DataTables/AttivitaDataTableEditor.php
  2. 6
    1
      app/DataTables/BachecaDataTable.php
  3. 13
    8
      app/DataTables/BachecaDataTableEditor.php
  4. 14
    8
      app/DataTables/CategoriacontabileDataTableEditor.php
  5. 6
    1
      app/DataTables/ChiusuraServizioDataTable.php
  6. 13
    5
      app/DataTables/ChiusuraServizioDataTableEditor.php
  7. 6
    1
      app/DataTables/ContenutoBachecaDataTable.php
  8. 21
    2
      app/DataTables/ContenutoBachecaDataTableEditor.php
  9. 9
    2
      app/DataTables/DispositivoDataTable.php
  10. 15
    12
      app/DataTables/DispositivoDataTableEditor.php
  11. 13
    8
      app/DataTables/FornitoreDataTableEditor.php
  12. 13
    9
      app/DataTables/ImpostazioniDataTableEditor.php
  13. 17
    12
      app/DataTables/MonitorDataTableEditor.php
  14. 2
    0
      app/DataTables/OperatoreDataTable.php
  15. 14
    9
      app/DataTables/OperatoreDataTableEditor.php
  16. 8
    1
      app/DataTables/PuntoOperatoreDataTable.php
  17. 17
    7
      app/DataTables/PuntoOperatoreDataTableEditor.php
  18. 19
    14
      app/DataTables/StampanteDataTableEditor.php
  19. 7
    4
      app/DataTables/TavoloDataTable.php
  20. 13
    10
      app/DataTables/TavoloDataTableEditor.php
  21. 13
    10
      app/DataTables/TestiDataTableEditor.php
  22. 10
    5
      app/DataTables/VariantePiattoDataTable.php
  23. 36
    9
      app/DataTables/VariantePiattoDataTableEditor.php
  24. 2
    0
      app/Http/Controllers/AllergeneController.php
  25. 9
    1
      app/Http/Controllers/BachecaController.php
  26. 14
    4
      app/Http/Controllers/BachecaHasContenutoController.php
  27. 2
    0
      app/Http/Controllers/CategoriaContabileController.php
  28. 3
    1
      app/Http/Controllers/ChiusuraServizioController.php
  29. 7
    0
      app/Http/Controllers/ContenutoBachecaController.php
  30. 14
    3
      app/Http/Controllers/Controller.php
  31. 4
    0
      app/Http/Controllers/DispositivoController.php
  32. 2
    0
      app/Http/Controllers/EventoFormController.php
  33. 6
    1
      app/Http/Controllers/FornitoreController.php
  34. 5
    1
      app/Http/Controllers/ImpostazioniController.php
  35. 5
    4
      app/Http/Controllers/ListinoPrezziController.php
  36. 25
    2
      app/Http/Controllers/MonitorController.php
  37. 3
    1
      app/Http/Controllers/RoleController.php
  38. 2
    0
      app/Http/Controllers/StampanteController.php
  39. 2
    0
      app/Http/Controllers/TavoloController.php
  40. 9
    2
      app/Http/Controllers/TestiController.php
  41. 8
    8
      app/Http/Controllers/TombolaController.php
  42. 3
    1
      app/Http/Controllers/UserController.php
  43. 9
    9
      app/Http/Controllers/VariantePiattoController.php
  44. 0
    0
      app/Models/AbstractModels/AbstractSaltacodaRigaOrdine.php
  45. 2
    2
      app/Models/AbstractModels/AbstractUser.php
  46. 66
    3
      app/Models/Attivita.php
  47. 0
    0
      app/Models/SaltacodaRigaOrdine.php
  48. 19
    0
      app/Observers/AttivitaObserver.php
  49. 46
    0
      app/Services/Attivita/AttivitaService.php

+ 91
- 22
app/DataTables/AttivitaDataTableEditor.php Zobrazit soubor

@@ -8,6 +8,8 @@ use Illuminate\Validation\Rule;
8 8
 use Yajra\DataTables\DataTablesEditor;
9 9
 use Illuminate\Http\Request;
10 10
 use Illuminate\Validation\ValidationException;
11
+use Illuminate\Http\UploadedFile;
12
+use Illuminate\Support\Facades\Auth;
11 13
 use Illuminate\Support\Facades\Storage;
12 14
 use Illuminate\Support\Str;
13 15
 use Illuminate\Http\JsonResponse;
@@ -83,40 +85,83 @@ class AttivitaDataTableEditor extends DataTablesEditor
83 85
 
84 86
   public function creating(Model $model, array $data): array
85 87
   {
86
-    // $model->roles()->sync([$data['ruolo_id']]);
87 88
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
89
+    $data['user_id'] = Auth::id();
90
+
88 91
     return $data;
89 92
   }
90 93
 
91 94
   public function updating(Model $model, array $data): array
92 95
   {
93
-    // dd($data['ruolo']);
94
-    // $model->roles()->sync([$data['ruolo_id']]);
96
+    $this->garantisciQuestaAttivita($model);
95 97
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
98
+    unset($data['user_id']);
99
+
96 100
     return $data;
97 101
   }
98 102
 
99
-  public function created(Model $model, array $data): Model
103
+  public function deleting(Model $model, array $data): array
100 104
   {
101
-    return $model;
105
+    $this->garantisciQuestaAttivita($model);
106
+
107
+    return $data;
108
+  }
109
+
110
+  private function garantisciQuestaAttivita(Model $model): void
111
+  {
112
+    $user = Auth::user();
113
+    if ($user?->hasRole('superadmin')) {
114
+      return;
115
+    }
116
+
117
+    if (! $model instanceof Attivita || (int) $model->user_id !== (int) $user?->id) {
118
+      abort(404);
119
+    }
120
+  }
121
+
122
+  public function uploadRules(): array
123
+  {
124
+    $image = ['required', 'file', 'image', 'mimes:jpeg,png,jpg,gif,webp', 'max:5120'];
125
+
126
+    return [
127
+      'path_logo' => $image,
128
+      'path_icon' => $image,
129
+      'path_image' => $image,
130
+    ];
102 131
   }
103 132
 
104 133
   public function upload(Request $request): JsonResponse
105 134
   {
106 135
     $this->action = 'upload';
107 136
 
108
-    $field   = $request->input('uploadField');
109
-    $storage = Storage::disk($this->disk);
137
+    $field = $request->input('uploadField');
138
+    if (! $field || ! is_string($field)) {
139
+      $field = 'file';
140
+    }
110 141
 
111 142
     try {
112
-      $rules      = $this->uploadRules();
113
-      $fieldRules = ['upload' => data_get($rules, $field, [])];
143
+      $storage = Storage::disk($this->disk);
144
+      $rules = $this->uploadRules();
145
+      $fieldRules = ['upload' => $rules[$field] ?? $rules['path_image']];
114 146
 
115 147
       $this->validate($request, $fieldRules, $this->messages(), $this->attributes());
116 148
 
117 149
       $uploadedFile = $request->file('upload');
118
-      $filename     = $this->getUploadedFilename($field, $uploadedFile);
119
-      $id           = $storage->putFileAs($request->id, $uploadedFile, $filename);
150
+      if (! $uploadedFile instanceof UploadedFile) {
151
+        throw ValidationException::withMessages([
152
+          'upload' => 'File non valido.',
153
+        ]);
154
+      }
155
+
156
+      $directory = $this->resolveUploadDirectory($request);
157
+      $filename = $this->getUploadedFilename($field, $uploadedFile);
158
+      $id = $storage->putFileAs($directory, $uploadedFile, $filename);
159
+
160
+      if (! is_string($id)) {
161
+        throw ValidationException::withMessages([
162
+          'upload' => 'Impossibile salvare il file caricato.',
163
+        ]);
164
+      }
120 165
 
121 166
       if (method_exists($this, 'uploaded')) {
122 167
         $id = $this->uploaded($id);
@@ -124,16 +169,16 @@ class AttivitaDataTableEditor extends DataTablesEditor
124 169
 
125 170
       return response()->json([
126 171
         'action' => $this->action,
127
-        'data'   => [],
128
-        'files'  => [
172
+        'data' => [],
173
+        'files' => [
129 174
           'files' => [
130 175
             $id => [
131
-              'filename'      => $id,
176
+              'filename' => $id,
132 177
               'original_name' => $uploadedFile->getClientOriginalName(),
133
-              'size'          => $uploadedFile->getSize(),
134
-              'directory'     => $request->id,
135
-              'disk'          => $this->disk,
136
-              'url'           => $storage->url($id),
178
+              'size' => $uploadedFile->getSize(),
179
+              'directory' => $directory,
180
+              'disk' => $this->disk,
181
+              'url' => $storage->url($id),
137 182
             ],
138 183
           ],
139 184
         ],
@@ -143,18 +188,42 @@ class AttivitaDataTableEditor extends DataTablesEditor
143 188
       ]);
144 189
     } catch (ValidationException $exception) {
145 190
       return response()->json([
146
-        'action'      => $this->action,
147
-        'data'        => [],
191
+        'action' => $this->action,
192
+        'data' => [],
148 193
         'fieldErrors' => [
149 194
           [
150
-            'name'   => $field,
151
-            'status' => str_replace('upload', $field, $exception->errors()['upload'][0]),
195
+            'name' => $field,
196
+            'status' => str_replace('upload', $field, (string) ($exception->errors()['upload'][0] ?? 'Errore di validazione')),
152 197
           ],
153 198
         ],
154 199
       ]);
155 200
     }
156 201
   }
157 202
 
203
+  protected function resolveUploadDirectory(Request $request): string
204
+  {
205
+    $id = $request->input('id');
206
+    if ($id === null || $id === '' || ! is_numeric($id)) {
207
+      return 'tmp';
208
+    }
209
+
210
+    $attivita = Attivita::find((int) $id);
211
+    if (! $attivita) {
212
+      abort(404);
213
+    }
214
+
215
+    $this->garantisciQuestaAttivita($attivita);
216
+
217
+    return (string) $attivita->id;
218
+  }
219
+
220
+  protected function getUploadedFilename(string $field, UploadedFile $uploadedFile): string
221
+  {
222
+    $ext = $uploadedFile->getClientOriginalExtension();
223
+
224
+    return $field.'_'.time().'_'.Str::random(4).($ext !== '' ? '.'.$ext : '');
225
+  }
226
+
158 227
   public function messages(): array
159 228
   {
160 229
     return $this->messages;

+ 6
- 1
app/DataTables/BachecaDataTable.php Zobrazit soubor

@@ -43,7 +43,12 @@ class BachecaDataTable extends DataTable
43 43
      */
44 44
     public function query(Bacheca $model): QueryBuilder
45 45
     {
46
-        return $model->newQuery()->where('attivita_id', $this->attivita_id);
46
+        $attivitaId = (int) $this->attivita_id;
47
+        if ($attivitaId <= 0) {
48
+            return $model->newQuery()->whereRaw('1 = 0');
49
+        }
50
+
51
+        return $model->newQuery()->where('attivita_id', $attivitaId);
47 52
     }
48 53
 
49 54
     /**

+ 13
- 8
app/DataTables/BachecaDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Bacheca;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class BachecaDataTableEditor extends DataTablesEditor
15 12
 {
@@ -76,18 +73,26 @@ class BachecaDataTableEditor extends DataTablesEditor
76 73
 
77 74
   public function creating(Model $model, array $data): array
78 75
   {
79
-    // $model->roles()->sync([$data['ruolo_id']]);
76
+    $data['attivita_id'] = Session::get('attivita_attuale');
77
+    AttivitaService::garantisciAttivita($data['attivita_id']);
80 78
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
81 79
     return $data;
82 80
   }
83 81
 
84 82
   public function updating(Model $model, array $data): array
85 83
   {
86
-    // dd($data['ruolo']);
87
-    // $model->roles()->sync([$data['ruolo_id']]);
84
+    AttivitaService::garantisciAttivita($model->attivita_id);
85
+    unset($data['attivita_id']);
88 86
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
89 87
     return $data;
90 88
   }
89
+
90
+  public function deleting(Model $model, array $data): array
91
+  {
92
+    AttivitaService::garantisciAttivita($model->attivita_id);
93
+
94
+    return $data;
95
+  }
91 96
   public function messages(): array
92 97
   {
93 98
     return $this->messages;

+ 14
- 8
app/DataTables/CategoriacontabileDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,11 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Categoriacontabile;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
8
+use Illuminate\Support\Facades\Session;
7 9
 use Illuminate\Validation\Rule;
8 10
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 11
 
14 12
 class CategoriacontabileDataTableEditor extends DataTablesEditor
15 13
 {
@@ -35,7 +33,7 @@ class CategoriacontabileDataTableEditor extends DataTablesEditor
35 33
       'nome'  => [
36 34
         'required',
37 35
         Rule::unique('categoria_contabile', 'nome')
38
-            ->where('attivita_id', $data['attivita_id'] ?? null),
36
+            ->where('attivita_id', Session::get('attivita_attuale')),
39 37
       ],
40 38
       'descrizione' => 'nullable',
41 39
       'is_attiva' => 'boolean',
@@ -83,18 +81,26 @@ class CategoriacontabileDataTableEditor extends DataTablesEditor
83 81
 
84 82
   public function creating(Model $model, array $data): array
85 83
   {
86
-    // $model->roles()->sync([$data['ruolo_id']]);
84
+    $data['attivita_id'] = Session::get('attivita_attuale');
85
+    AttivitaService::garantisciAttivita($data['attivita_id']);
87 86
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
88 87
     return $data;
89 88
   }
90 89
 
91 90
   public function updating(Model $model, array $data): array
92 91
   {
93
-    // dd($data['ruolo']);
94
-    // $model->roles()->sync([$data['ruolo_id']]);
92
+    AttivitaService::garantisciAttivita($model->attivita_id);
93
+    unset($data['attivita_id']);
95 94
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
96 95
     return $data;
97 96
   }
97
+
98
+  public function deleting(Model $model, array $data): array
99
+  {
100
+    AttivitaService::garantisciAttivita($model->attivita_id);
101
+
102
+    return $data;
103
+  }
98 104
   public function messages(): array
99 105
   {
100 106
     return $this->messages;

+ 6
- 1
app/DataTables/ChiusuraServizioDataTable.php Zobrazit soubor

@@ -54,7 +54,12 @@ class ChiusuraServizioDataTable extends DataTable
54 54
      */
55 55
     public function query(ChiusuraServizio $model): QueryBuilder
56 56
     {
57
-        return $model->newQuery()->where('attivita_id', $this->attivita_id)->orderBy('chiusura_at', 'desc');
57
+        $attivitaId = (int) $this->attivita_id;
58
+        if ($attivitaId <= 0) {
59
+            return $model->newQuery()->whereRaw('1 = 0');
60
+        }
61
+
62
+        return $model->newQuery()->where('attivita_id', $attivitaId)->orderBy('chiusura_at', 'desc');
58 63
     }
59 64
 
60 65
     /**

+ 13
- 5
app/DataTables/ChiusuraServizioDataTableEditor.php Zobrazit soubor

@@ -3,11 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\ChiusuraServizio;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11 10
 
12 11
 
13 12
 class ChiusuraServizioDataTableEditor extends DataTablesEditor
@@ -29,7 +28,6 @@ class ChiusuraServizioDataTableEditor extends DataTablesEditor
29 28
   public function createRules(): array
30 29
   {
31 30
     return [
32
-      'attivita_id'  => 'required',
33 31
       'chiusura_at' => 'required|date',
34 32
       'user_id' => 'required',
35 33
       'note' => 'nullable',
@@ -49,7 +47,6 @@ class ChiusuraServizioDataTableEditor extends DataTablesEditor
49 47
   public function editRules(Model $model): array
50 48
   {
51 49
     return [
52
-      'attivita_id'  => 'required',
53 50
       'chiusura_at' => 'required|date',
54 51
       'note' => 'nullable',
55 52
       'info' => 'nullable',
@@ -73,11 +70,22 @@ class ChiusuraServizioDataTableEditor extends DataTablesEditor
73 70
 
74 71
   public function creating(Model $model, array $data): array
75 72
   {
73
+    $data['attivita_id'] = Session::get('attivita_attuale');
74
+    AttivitaService::garantisciAttivita($data['attivita_id']);
76 75
     return $data;
77 76
   }
78 77
 
79 78
   public function updating(Model $model, array $data): array
80 79
   {
80
+    AttivitaService::garantisciAttivita($model->attivita_id);
81
+    unset($data['attivita_id']);
82
+    return $data;
83
+  }
84
+
85
+  public function deleting(Model $model, array $data): array
86
+  {
87
+    AttivitaService::garantisciAttivita($model->attivita_id);
88
+
81 89
     return $data;
82 90
   }
83 91
   public function messages(): array

+ 6
- 1
app/DataTables/ContenutoBachecaDataTable.php Zobrazit soubor

@@ -46,7 +46,12 @@ class ContenutoBachecaDataTable extends DataTable
46 46
      */
47 47
     public function query(ContenutoBacheca $model): QueryBuilder
48 48
     {
49
-        $model = $model->newQuery()->where('attivita_id', $this->attivita_id);
49
+        $attivitaId = (int) $this->attivita_id;
50
+        if ($attivitaId <= 0) {
51
+            return $model->newQuery()->whereRaw('1 = 0');
52
+        }
53
+
54
+        $model = $model->newQuery()->where('attivita_id', $attivitaId);
50 55
         if($this->bacheca_id){
51 56
             return $model->join('bacheca_has_contenuto', 'contenuto_bacheca.id', '=', 'bacheca_has_contenuto.contenuto_id')->where('bacheca_has_contenuto.bacheca_id', $this->bacheca_id);
52 57
         }

+ 21
- 2
app/DataTables/ContenutoBachecaDataTableEditor.php Zobrazit soubor

@@ -3,8 +3,9 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\ContenutoBacheca;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9 10
 use Illuminate\Http\Request;
10 11
 use Illuminate\Validation\ValidationException;
@@ -79,11 +80,21 @@ class ContenutoBachecaDataTableEditor extends DataTablesEditor
79 80
 
80 81
   public function creating(Model $model, array $data): array
81 82
   {
83
+    $data['attivita_id'] = Session::get('attivita_attuale');
84
+    AttivitaService::garantisciAttivita($data['attivita_id']);
82 85
     return $data;
83 86
   }
84 87
 
85 88
   public function updating(Model $model, array $data): array
86 89
   {
90
+    AttivitaService::garantisciAttivita($model->attivita_id);
91
+    unset($data['attivita_id']);
92
+    return $data;
93
+  }
94
+
95
+  public function deleting(Model $model, array $data): array
96
+  {
97
+    AttivitaService::garantisciAttivita($model->attivita_id);
87 98
 
88 99
     return $data;
89 100
   }
@@ -107,7 +118,15 @@ class ContenutoBachecaDataTableEditor extends DataTablesEditor
107 118
 
108 119
       $uploadedFile = $request->file('upload');
109 120
       $filename     = $this->getUploadedFilename($field, $uploadedFile);
110
-      $id           = $storage->putFileAs($request->id, $uploadedFile, $filename);
121
+      $rowId        = $request->id;
122
+      if ($rowId !== null && $rowId !== '' && is_numeric($rowId)) {
123
+        $contenuto = ContenutoBacheca::find((int) $rowId);
124
+        if (! $contenuto) {
125
+          abort(404);
126
+        }
127
+        AttivitaService::garantisciAttivita($contenuto->attivita_id);
128
+      }
129
+      $id           = $storage->putFileAs($rowId, $uploadedFile, $filename);
111 130
 
112 131
       if (method_exists($this, 'uploaded')) {
113 132
         $id = $this->uploaded($id);

+ 9
- 2
app/DataTables/DispositivoDataTable.php Zobrazit soubor

@@ -16,6 +16,8 @@ use Illuminate\Support\Facades\Auth;
16 16
 
17 17
 class DispositivoDataTable extends DataTable
18 18
 {
19
+    public ?int $attivita_id = null;
20
+
19 21
     public function __construct()
20 22
     {
21 23
         $this->dataTableVariable = 'dataTable_dispositivo';
@@ -47,7 +49,12 @@ class DispositivoDataTable extends DataTable
47 49
      */
48 50
     public function query(Dispositivo $model): QueryBuilder
49 51
     {
50
-        return $model->newQuery();
52
+        $attivitaId = (int) $this->attivita_id;
53
+        if ($attivitaId <= 0) {
54
+            return $model->newQuery()->whereRaw('1 = 0');
55
+        }
56
+
57
+        return $model->newQuery()->where('attivita_id', $attivitaId);
51 58
     }
52 59
 
53 60
     /**
@@ -74,7 +81,7 @@ class DispositivoDataTable extends DataTable
74 81
                     ->editor(
75 82
                         Editor::make()
76 83
                             ->fields([
77
-                                Fields\Hidden::make('attivita_id')->label('Attività')->default($this->attivita_id),
84
+                                Fields\Hidden::make('attivita_id')->label('Attività')->default((int) $this->attivita_id),
78 85
                                 Fields\Hidden::make('endpoint_id')->label('Endpoint ID'),
79 86
                                 Fields\Text::make('nome')->label('Nome'),
80 87
                                 Fields\Select2::make('tipo')->label('Tipo')->options(Dispositivo::getTipoDispositivo()->pluck('value', 'label')),

+ 15
- 12
app/DataTables/DispositivoDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Dispositivo;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class DispositivoDataTableEditor extends DataTablesEditor
15 12
 {
@@ -50,7 +47,6 @@ class DispositivoDataTableEditor extends DataTablesEditor
50 47
     return [
51 48
       'nome'  => 'required',
52 49
       'tipo' => 'required',
53
-      'attivita_id' => 'required|exists:attivita,id',
54 50
       'licenza' => 'nullable',
55 51
       'url_stampante' => 'nullable',
56 52
       'ubicazione' => 'nullable',
@@ -77,7 +73,6 @@ class DispositivoDataTableEditor extends DataTablesEditor
77 73
     return [
78 74
       'nome'  => 'required',
79 75
       'tipo' => 'required',
80
-      'attivita_id' => 'required|exists:attivita,id',
81 76
       'licenza' => 'nullable',
82 77
       'url_stampante' => 'nullable',
83 78
       'ubicazione' => 'nullable',
@@ -106,16 +101,24 @@ class DispositivoDataTableEditor extends DataTablesEditor
106 101
 
107 102
   public function creating(Model $model, array $data): array
108 103
   {
109
-    // $model->roles()->sync([$data['ruolo_id']]);
110
-    $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
104
+    $data['attivita_id'] = Session::get('attivita_attuale');
105
+    AttivitaService::garantisciAttivita($data['attivita_id']);
106
+    $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
111 107
     return $data;
112 108
   }
113 109
 
114 110
   public function updating(Model $model, array $data): array
115 111
   {
116
-    // dd($data['ruolo']);
117
-    // $model->roles()->sync([$data['ruolo_id']]);
118
-    $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
112
+    AttivitaService::garantisciAttivita($model->attivita_id);
113
+    unset($data['attivita_id']);
114
+    $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
115
+    return $data;
116
+  }
117
+
118
+  public function deleting(Model $model, array $data): array
119
+  {
120
+    AttivitaService::garantisciAttivita($model->attivita_id);
121
+
119 122
     return $data;
120 123
   }
121 124
   public function messages(): array

+ 13
- 8
app/DataTables/FornitoreDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Fornitore;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class FornitoreDataTableEditor extends DataTablesEditor
15 12
 {
@@ -88,14 +85,22 @@ class FornitoreDataTableEditor extends DataTablesEditor
88 85
 
89 86
   public function creating(Model $model, array $data): array
90 87
   {
91
-    // $model->roles()->sync([$data['ruolo_id']]);
88
+    $data['attivita_id'] = Session::get('attivita_attuale');
89
+    AttivitaService::garantisciAttivita($data['attivita_id']);
92 90
     return $data;
93 91
   }
94 92
 
95 93
   public function updating(Model $model, array $data): array
96 94
   {
97
-    // dd($data['ruolo']);
98
-    // $model->roles()->sync([$data['ruolo_id']]);
95
+    AttivitaService::garantisciAttivita($model->attivita_id);
96
+    unset($data['attivita_id']);
97
+    return $data;
98
+  }
99
+
100
+  public function deleting(Model $model, array $data): array
101
+  {
102
+    AttivitaService::garantisciAttivita($model->attivita_id);
103
+
99 104
     return $data;
100 105
   }
101 106
   public function messages(): array

+ 13
- 9
app/DataTables/ImpostazioniDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Impostazioni;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class ImpostazioniDataTableEditor extends DataTablesEditor
15 12
 {
@@ -114,15 +111,22 @@ class ImpostazioniDataTableEditor extends DataTablesEditor
114 111
 
115 112
   public function creating(Model $model, array $data): array
116 113
   {
117
-    // $model->roles()->sync([$data['ruolo_id']]);
114
+    $data['attivita_id'] = Session::get('attivita_attuale');
115
+    AttivitaService::garantisciAttivita($data['attivita_id']);
118 116
     return $data;
119 117
   }
120 118
 
121 119
   public function updating(Model $model, array $data): array
122 120
   {
123
-    // $data['valore'] = $data['valore'] == 'true' ? true : false;
124
-    // dd($data['ruolo']);
125
-    // $model->roles()->sync([$data['ruolo_id']]);
121
+    AttivitaService::garantisciAttivita($model->attivita_id);
122
+    unset($data['attivita_id']);
123
+    return $data;
124
+  }
125
+
126
+  public function deleting(Model $model, array $data): array
127
+  {
128
+    AttivitaService::garantisciAttivita($model->attivita_id);
129
+
126 130
     return $data;
127 131
   }
128 132
   public function messages(): array

+ 17
- 12
app/DataTables/MonitorDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Dispositivo;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class MonitorDataTableEditor extends DataTablesEditor
15 12
 {
@@ -50,7 +47,6 @@ class MonitorDataTableEditor extends DataTablesEditor
50 47
     return [
51 48
       'nome'  => 'required',
52 49
       'tipo' => 'required|in:'.Dispositivo::MONITOR,
53
-      'attivita_id' => 'required|exists:attivita,id',
54 50
       'licenza' => 'nullable',
55 51
       'url_stampante' => 'nullable',
56 52
       'ubicazione' => 'nullable',
@@ -77,7 +73,6 @@ class MonitorDataTableEditor extends DataTablesEditor
77 73
     return [
78 74
       'nome'  => 'required',
79 75
       'tipo' => 'required|in:'.Dispositivo::MONITOR,
80
-      'attivita_id' => 'required|exists:attivita,id',
81 76
       'licenza' => 'nullable',
82 77
       'url_stampante' => 'nullable',
83 78
       'ubicazione' => 'nullable',
@@ -106,16 +101,26 @@ class MonitorDataTableEditor extends DataTablesEditor
106 101
 
107 102
   public function creating(Model $model, array $data): array
108 103
   {
109
-    // $model->roles()->sync([$data['ruolo_id']]);
110
-    $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
104
+    $data['attivita_id'] = Session::get('attivita_attuale');
105
+    AttivitaService::garantisciAttivita($data['attivita_id']);
106
+    $data['tipo'] = Dispositivo::MONITOR;
107
+    $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
111 108
     return $data;
112 109
   }
113 110
 
114 111
   public function updating(Model $model, array $data): array
115 112
   {
116
-    // dd($data['ruolo']);
117
-    // $model->roles()->sync([$data['ruolo_id']]);
118
-    $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
113
+    AttivitaService::garantisciAttivita($model->attivita_id);
114
+    unset($data['attivita_id']);
115
+    $data['tipo'] = Dispositivo::MONITOR;
116
+    $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
117
+    return $data;
118
+  }
119
+
120
+  public function deleting(Model $model, array $data): array
121
+  {
122
+    AttivitaService::garantisciAttivita($model->attivita_id);
123
+
119 124
     return $data;
120 125
   }
121 126
   public function messages(): array

+ 2
- 0
app/DataTables/OperatoreDataTable.php Zobrazit soubor

@@ -15,6 +15,8 @@ use Illuminate\Support\Facades\Auth;
15 15
 
16 16
 class OperatoreDataTable extends DataTable
17 17
 {
18
+    public ?int $attivita_id = null;
19
+
18 20
     public function __construct()
19 21
     {
20 22
         $this->dataTableVariable = 'dataTable_operatore';

+ 14
- 9
app/DataTables/OperatoreDataTableEditor.php Zobrazit soubor

@@ -3,14 +3,11 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Operatore;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
-use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
8
+use Illuminate\Support\Facades\Session;
12 9
 use Illuminate\Support\Str;
13
-use Illuminate\Support\Facades\Hash;
10
+use Yajra\DataTables\DataTablesEditor;
14 11
 
15 12
 class OperatoreDataTableEditor extends DataTablesEditor
16 13
 {
@@ -84,7 +81,8 @@ class OperatoreDataTableEditor extends DataTablesEditor
84 81
 
85 82
   public function creating(Model $model, array $data): array
86 83
   {
87
-    // $model->roles()->sync([$data['ruolo_id']]);
84
+    $data['attivita_id'] = Session::get('attivita_attuale');
85
+    AttivitaService::garantisciAttivita($data['attivita_id']);
88 86
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
89 87
     if(!isset($data['password'])){
90 88
       $data['password'] = Str::random(8);
@@ -95,12 +93,19 @@ class OperatoreDataTableEditor extends DataTablesEditor
95 93
 
96 94
   public function updating(Model $model, array $data): array
97 95
   {
98
-    // dd($data['ruolo']);
99
-    // $model->roles()->sync([$data['ruolo_id']]);
96
+    AttivitaService::garantisciAttivita($model->attivita_id);
97
+    unset($data['attivita_id']);
100 98
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
101 99
     $data['username'] = $this->createUsername($data);
102 100
     return $data;
103 101
   }
102
+
103
+  public function deleting(Model $model, array $data): array
104
+  {
105
+    AttivitaService::garantisciAttivita($model->attivita_id);
106
+
107
+    return $data;
108
+  }
104 109
   public function messages(): array
105 110
   {
106 111
     return $this->messages;

+ 8
- 1
app/DataTables/PuntoOperatoreDataTable.php Zobrazit soubor

@@ -17,6 +17,8 @@ use Illuminate\Support\Facades\Auth;
17 17
 
18 18
 class PuntoOperatoreDataTable extends DataTable
19 19
 {
20
+    public ?int $attivita_id = null;
21
+
20 22
     public function __construct()
21 23
     {
22 24
         $this->dataTableVariable = 'dataTable_punto_operatore';
@@ -45,9 +47,14 @@ class PuntoOperatoreDataTable extends DataTable
45 47
      */
46 48
     public function query(Dispositivo $model): QueryBuilder
47 49
     {
50
+        $attivitaId = (int) $this->attivita_id;
51
+        if ($attivitaId <= 0) {
52
+            return $model->newQuery()->whereRaw('1 = 0');
53
+        }
54
+
48 55
         return $model->newQuery()
49 56
         ->where('tipo', Dispositivo::OPERATORE)
50
-        ->where('attivita_id', $this->attivita_id);
57
+        ->where('attivita_id', $attivitaId);
51 58
     }
52 59
 
53 60
     /**

+ 17
- 7
app/DataTables/PuntoOperatoreDataTableEditor.php Zobrazit soubor

@@ -3,9 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Dispositivo;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
8
+use Illuminate\Support\Facades\Session;
7 9
 use Yajra\DataTables\DataTablesEditor;
8
-use Auth;
9 10
 
10 11
 class PuntoOperatoreDataTableEditor extends DataTablesEditor
11 12
 {
@@ -33,8 +34,7 @@ class PuntoOperatoreDataTableEditor extends DataTablesEditor
33 34
   {
34 35
     return [
35 36
       'nome'  => 'required',
36
-      'attivita_id' => 'required|exists:attivita,id',
37
-      'tipo' => 'required',
37
+      'tipo' => 'required|in:'.Dispositivo::OPERATORE,
38 38
       'licenza' => 'nullable',
39 39
       'url_stampante' => 'nullable',
40 40
       'ubicazione' => 'nullable',
@@ -60,8 +60,7 @@ class PuntoOperatoreDataTableEditor extends DataTablesEditor
60 60
   {
61 61
     return [
62 62
       'nome'  => 'required',
63
-      'attivita_id' => 'required|exists:attivita,id',
64
-      'tipo' => 'required',
63
+      'tipo' => 'required|in:'.Dispositivo::OPERATORE,
65 64
       'licenza' => 'nullable',
66 65
       'url_stampante' => 'nullable',
67 66
       'ubicazione' => 'nullable',
@@ -90,18 +89,29 @@ class PuntoOperatoreDataTableEditor extends DataTablesEditor
90 89
 
91 90
   public function creating(Model $model, array $data): array
92 91
   {
93
-    // L'Editor manda `allergeni` come array di ID selezionati:
94
-    // salviamo la relazione nella pivot `piatto_allergene`, non nella colonna `piatto.allergeni`.
92
+    $data['attivita_id'] = Session::get('attivita_attuale');
93
+    AttivitaService::garantisciAttivita($data['attivita_id']);
94
+    $data['tipo'] = Dispositivo::OPERATORE;
95 95
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
96 96
     return $data;
97 97
   }
98 98
 
99 99
   public function updating(Model $model, array $data): array
100 100
   {
101
+    AttivitaService::garantisciAttivita($model->attivita_id);
102
+    unset($data['attivita_id']);
103
+    $data['tipo'] = Dispositivo::OPERATORE;
101 104
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
102 105
     return $data;
103 106
   }
104 107
 
108
+  public function deleting(Model $model, array $data): array
109
+  {
110
+    AttivitaService::garantisciAttivita($model->attivita_id);
111
+
112
+    return $data;
113
+  }
114
+
105 115
   public function saved(Model $model, array $data): Model
106 116
   {
107 117
     return $model;

+ 19
- 14
app/DataTables/StampanteDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Dispositivo;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class StampanteDataTableEditor extends DataTablesEditor
15 12
 {
@@ -49,8 +46,7 @@ class StampanteDataTableEditor extends DataTablesEditor
49 46
   {
50 47
     return [
51 48
       'nome'  => 'required',
52
-      'tipo' => 'required',
53
-      'attivita_id' => 'required|exists:attivita,id',
49
+      'tipo' => 'required|in:'.Dispositivo::STAMPANTE,
54 50
       'licenza' => 'nullable',
55 51
       'url_stampante' => 'nullable',
56 52
       'ubicazione' => 'nullable',
@@ -76,8 +72,7 @@ class StampanteDataTableEditor extends DataTablesEditor
76 72
   {
77 73
     return [
78 74
       'nome'  => 'required',
79
-      'tipo' => 'required',
80
-      'attivita_id' => 'required|exists:attivita,id',
75
+      'tipo' => 'required|in:'.Dispositivo::STAMPANTE,
81 76
       'licenza' => 'nullable',
82 77
       'url_stampante' => 'nullable',
83 78
       'ubicazione' => 'nullable',
@@ -106,16 +101,26 @@ class StampanteDataTableEditor extends DataTablesEditor
106 101
 
107 102
   public function creating(Model $model, array $data): array
108 103
   {
109
-    // $model->roles()->sync([$data['ruolo_id']]);
110
-    $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
104
+    $data['attivita_id'] = Session::get('attivita_attuale');
105
+    AttivitaService::garantisciAttivita($data['attivita_id']);
106
+    $data['tipo'] = Dispositivo::STAMPANTE;
107
+    $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
111 108
     return $data;
112 109
   }
113 110
 
114 111
   public function updating(Model $model, array $data): array
115 112
   {
116
-    // dd($data['ruolo']);
117
-    // $model->roles()->sync([$data['ruolo_id']]);
118
-    $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
113
+    AttivitaService::garantisciAttivita($model->attivita_id);
114
+    unset($data['attivita_id']);
115
+    $data['tipo'] = Dispositivo::STAMPANTE;
116
+    $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
117
+    return $data;
118
+  }
119
+
120
+  public function deleting(Model $model, array $data): array
121
+  {
122
+    AttivitaService::garantisciAttivita($model->attivita_id);
123
+
119 124
     return $data;
120 125
   }
121 126
   public function messages(): array

+ 7
- 4
app/DataTables/TavoloDataTable.php Zobrazit soubor

@@ -15,6 +15,8 @@ use Illuminate\Support\Facades\Auth;
15 15
 
16 16
 class TavoloDataTable extends DataTable
17 17
 {
18
+    public ?int $attivita_id = null;
19
+
18 20
     public function __construct(){
19 21
         $this->dataTableVariable = 'dataTable_tavolo';
20 22
     }
@@ -42,11 +44,12 @@ class TavoloDataTable extends DataTable
42 44
      */
43 45
     public function query(Tavolo $model): QueryBuilder
44 46
     {
45
-        if($this->attivita_id){
46
-            return $model->newQuery()->where('attivita_id', $this->attivita_id);
47
-        }else{
47
+        $attivitaId = (int) $this->attivita_id;
48
+        if ($attivitaId <= 0) {
48 49
             return $model->newQuery()->whereRaw('1 = 0');
49 50
         }
51
+
52
+        return $model->newQuery()->where('attivita_id', $attivitaId);
50 53
     }
51 54
 
52 55
     /**
@@ -81,7 +84,7 @@ class TavoloDataTable extends DataTable
81 84
                     ->editor(
82 85
                         Editor::make()
83 86
                             ->fields([
84
-                                Fields\Hidden::make('attivita_id')->label('Attività')->default($this->attivita_id),
87
+                                Fields\Hidden::make('attivita_id')->label('Attività')->default((int) $this->attivita_id),
85 88
                                 Fields\Text::make('label')->label('Label'),
86 89
                                 Fields\Text::make('posti')->label('Posti'),
87 90
                                 Fields\Text::make('ubicazione')->label('Ubicazione'),

+ 13
- 10
app/DataTables/TavoloDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Tavolo;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8 8
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
9
+use Illuminate\Support\Facades\Session;
13 10
 
14 11
 class TavoloDataTableEditor extends DataTablesEditor
15 12
 {
@@ -33,7 +30,6 @@ class TavoloDataTableEditor extends DataTablesEditor
33 30
   {
34 31
     return [
35 32
       'label'  => 'required',
36
-      'attivita_id' => 'required|exists:attivita,id',
37 33
       'posti' => 'nullable|numeric|min:0',
38 34
       'ubicazione' => 'nullable',
39 35
       'is_attivo' => 'boolean',
@@ -54,7 +50,6 @@ class TavoloDataTableEditor extends DataTablesEditor
54 50
   {
55 51
     return [
56 52
       'label'  => 'required',
57
-      'attivita_id' => 'required|exists:attivita,id',
58 53
       'posti' => 'nullable|numeric|min:0',
59 54
       'ubicazione' => 'nullable',
60 55
       'is_attivo' => 'boolean',
@@ -78,18 +73,26 @@ class TavoloDataTableEditor extends DataTablesEditor
78 73
 
79 74
   public function creating(Model $model, array $data): array
80 75
   {
81
-    // $model->roles()->sync([$data['ruolo_id']]);
76
+    $data['attivita_id'] = Session::get('attivita_attuale');
77
+    AttivitaService::garantisciAttivita($data['attivita_id']);
82 78
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
83 79
     return $data;
84 80
   }
85 81
 
86 82
   public function updating(Model $model, array $data): array
87 83
   {
88
-    // dd($data['ruolo']);
89
-    // $model->roles()->sync([$data['ruolo_id']]);
84
+    AttivitaService::garantisciAttivita($model->attivita_id);
85
+    unset($data['attivita_id']);
90 86
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
91 87
     return $data;
92 88
   }
89
+
90
+  public function deleting(Model $model, array $data): array
91
+  {
92
+    AttivitaService::garantisciAttivita($model->attivita_id);
93
+
94
+    return $data;
95
+  }
93 96
   public function messages(): array
94 97
   {
95 98
     return $this->messages;

+ 13
- 10
app/DataTables/TestiDataTableEditor.php Zobrazit soubor

@@ -3,13 +3,10 @@
3 3
 namespace App\DataTables;
4 4
 
5 5
 use App\Models\Testi;
6
+use App\Services\Attivita\AttivitaService;
6 7
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8
+use Illuminate\Support\Facades\Session;
8 9
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
13 10
 
14 11
 class TestiDataTableEditor extends DataTablesEditor
15 12
 {
@@ -35,7 +32,6 @@ class TestiDataTableEditor extends DataTablesEditor
35 32
   {
36 33
     return [
37 34
       'titolo'  => 'required',
38
-      'attivita_id' => 'required|exists:attivita,id',
39 35
       'descrizione' => 'nullable',
40 36
       'testo' => 'nullable',
41 37
       'ambiente' => 'nullable',
@@ -58,7 +54,6 @@ class TestiDataTableEditor extends DataTablesEditor
58 54
   {
59 55
     return [
60 56
       'titolo'  => 'required',
61
-      'attivita_id' => 'required|exists:attivita,id',
62 57
       'descrizione' => 'nullable',
63 58
       'testo' => 'nullable',
64 59
       'ambiente' => 'nullable',
@@ -84,18 +79,26 @@ class TestiDataTableEditor extends DataTablesEditor
84 79
 
85 80
   public function creating(Model $model, array $data): array
86 81
   {
87
-    // $model->roles()->sync([$data['ruolo_id']]);
82
+    $data['attivita_id'] = Session::get('attivita_attuale');
83
+    AttivitaService::garantisciAttivita($data['attivita_id']);
88 84
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
89 85
     return $data;
90 86
   }
91 87
 
92 88
   public function updating(Model $model, array $data): array
93 89
   {
94
-    // dd($data['ruolo']);
95
-    // $model->roles()->sync([$data['ruolo_id']]);
90
+    AttivitaService::garantisciAttivita($model->attivita_id);
91
+    unset($data['attivita_id']);
96 92
     $data['is_attivo'] = isset($data['is_attivo']) ? true : false;
97 93
     return $data;
98 94
   }
95
+
96
+  public function deleting(Model $model, array $data): array
97
+  {
98
+    AttivitaService::garantisciAttivita($model->attivita_id);
99
+
100
+    return $data;
101
+  }
99 102
   public function messages(): array
100 103
   {
101 104
     return $this->messages;

+ 10
- 5
app/DataTables/VariantePiattoDataTable.php Zobrazit soubor

@@ -58,7 +58,12 @@ class VariantePiattoDataTable extends DataTable
58 58
      */
59 59
     public function query(VariantePiatto $model): QueryBuilder
60 60
     {
61
-        $query = $model->newQuery()->where('attivita_id', $this->attivita_id);
61
+        $attivitaId = (int) $this->attivita_id;
62
+        if ($attivitaId <= 0) {
63
+            return $model->newQuery()->whereRaw('1 = 0');
64
+        }
65
+
66
+        $query = $model->newQuery()->where('attivita_id', $attivitaId);
62 67
         if (isset($this->cucina_id)) {
63 68
             $query->where('cucina_id', $this->cucina_id);
64 69
         }
@@ -92,12 +97,12 @@ class VariantePiattoDataTable extends DataTable
92 97
                     ->editor(Editor::make()
93 98
                         ->ajax(route('variante-piatto.store'))
94 99
                         ->fields([
95
-                            Fields\Hidden::make('attivita_id')->label('Attività')->default($this->attivita_id),
100
+                            Fields\Hidden::make('attivita_id')->label('Attività')->default((int) $this->attivita_id),
96 101
                             Fields\Text::make('label')->label('Nome'),
97 102
                             Fields\Text::make('prezzo')->label('Prezzo'),
98
-                            Fields\Select2::make('piatto_id')->label('Associa al Piatto')->options(Piatto::where('attivita_id', $this->attivita_id)->pluck('id', 'nome')),
99
-                            Fields\Select2::make('cucina_id')->label('Associa alla Cucina')->options(Cucina::where('attivita_id', $this->attivita_id)->pluck('id', 'nome'))->default($this->cucina_id),
100
-                            Fields\Checkbox::make('is_attivo')->label('Attiva')->default(true),
103
+                            Fields\Select2::make('piatto_id')->label('Associa al Piatto')->options(Piatto::where('attivita_id', (int) $this->attivita_id)->pluck('id', 'nome')),
104
+                            Fields\Select2::make('cucina_id')->label('Associa alla Cucina')->options(Cucina::where('attivita_id', (int) $this->attivita_id)->pluck('id', 'nome'))->default($this->cucina_id),
105
+                            Fields\Boolean::make('is_attivo')->label('Attiva')->default(true),
101 106
                         ])
102 107
                     )
103 108
                     ->language(asset('assets/Italian.json'))

+ 36
- 9
app/DataTables/VariantePiattoDataTableEditor.php Zobrazit soubor

@@ -2,14 +2,13 @@
2 2
 
3 3
 namespace App\DataTables;
4 4
 
5
+use App\Models\Cucina;
6
+use App\Models\Piatto;
5 7
 use App\Models\VariantePiatto;
8
+use App\Services\Attivita\AttivitaService;
6 9
 use Illuminate\Database\Eloquent\Model;
7
-use Illuminate\Validation\Rule;
8 10
 use Yajra\DataTables\DataTablesEditor;
9
-use Illuminate\Http\Request;
10
-use Illuminate\Validation\ValidationException;
11
-use Storage;
12
-use Illuminate\Support\Str;
11
+use Illuminate\Support\Facades\Session;
13 12
 
14 13
 class VariantePiattoDataTableEditor extends DataTablesEditor
15 14
 {
@@ -38,9 +37,7 @@ class VariantePiattoDataTableEditor extends DataTablesEditor
38 37
   {
39 38
     return [
40 39
       'label'  => 'required',
41
-      'attivita_id' => 'required|exists:attivita,id',
42 40
       'prezzo' => 'required',
43
-      'is_attivo' => 'boolean',
44 41
       'piatto_id' => 'nullable|exists:piatto,id',
45 42
       'cucina_id' => 'required|exists:cucina,id',
46 43
     ];
@@ -60,9 +57,7 @@ class VariantePiattoDataTableEditor extends DataTablesEditor
60 57
   {
61 58
     return [
62 59
       'label'  => 'required',
63
-      'attivita_id' => 'required|exists:attivita,id',
64 60
       'prezzo' => 'required',
65
-      'is_attivo' => 'boolean',
66 61
       'piatto_id' => 'nullable|exists:piatto,id',
67 62
       'cucina_id' => 'required|exists:cucina,id',
68 63
     ];
@@ -86,6 +81,10 @@ class VariantePiattoDataTableEditor extends DataTablesEditor
86 81
 
87 82
   public function creating(Model $model, array $data): array
88 83
   {
84
+    $data['attivita_id'] = Session::get('attivita_attuale');
85
+    AttivitaService::garantisciAttivita($data['attivita_id']);
86
+    $this->garantisciRelazioniDiQuestaAttivita($data, $data['attivita_id']);
87
+
89 88
     $data['is_attivo'] = array_key_exists('is_attivo', $data)
90 89
       ? filter_var($data['is_attivo'], FILTER_VALIDATE_BOOLEAN)
91 90
       : true;
@@ -94,11 +93,39 @@ class VariantePiattoDataTableEditor extends DataTablesEditor
94 93
 
95 94
   public function updating(Model $model, array $data): array
96 95
   {
96
+    AttivitaService::garantisciAttivita($model->attivita_id);
97
+    unset($data['attivita_id']);
98
+    $this->garantisciRelazioniDiQuestaAttivita($data, $model->attivita_id, $model);
99
+
97 100
     if (array_key_exists('is_attivo', $data)) {
98 101
       $data['is_attivo'] = filter_var($data['is_attivo'], FILTER_VALIDATE_BOOLEAN);
99 102
     }
100 103
     return $data;
101 104
   }
105
+
106
+  public function deleting(Model $model, array $data): array
107
+  {
108
+    AttivitaService::garantisciAttivita($model->attivita_id);
109
+
110
+    return $data;
111
+  }
112
+
113
+  private function garantisciRelazioniDiQuestaAttivita(array $data, $attivitaId, ?Model $model = null): void
114
+  {
115
+    $cucinaId = $data['cucina_id'] ?? $model?->cucina_id;
116
+    $cucina = Cucina::find($cucinaId);
117
+    if (! $cucina || (int) $cucina->attivita_id !== (int) $attivitaId) {
118
+      abort(404);
119
+    }
120
+
121
+    $piattoId = $data['piatto_id'] ?? $model?->piatto_id;
122
+    if ($piattoId) {
123
+      $piatto = Piatto::find($piattoId);
124
+      if (! $piatto || (int) $piatto->attivita_id !== (int) $attivitaId) {
125
+        abort(404);
126
+      }
127
+    }
128
+  }
102 129
   public function messages(): array
103 130
   {
104 131
     return $this->messages;

+ 2
- 0
app/Http/Controllers/AllergeneController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Allergene;
7 9
 use App\DataTables\AllergeneDataTable;

+ 9
- 1
app/Http/Controllers/BachecaController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Bacheca;
7 9
 use App\DataTables\BachecaDataTable;
@@ -9,6 +11,7 @@ use App\DataTables\BachecaDataTableEditor;
9 11
 use Illuminate\Support\Facades\Auth;
10 12
 use App\DataTables\ContenutoBachecaDataTable;
11 13
 use Illuminate\Support\Facades\Session;
14
+use App\Services\Attivita\AttivitaService;
12 15
 
13 16
 class BachecaController extends Controller
14 17
 {
@@ -23,7 +26,7 @@ class BachecaController extends Controller
23 26
     public static function middleware(): array
24 27
     {
25 28
         return [
26
-            new Middleware('permission:view-bacheca', only: ['index']),
29
+            new Middleware('permission:view-bacheca', only: ['index', 'show']),
27 30
             new Middleware('permission:create-bacheca|edit-bacheca|delete-bacheca', only: ['store', 'update', 'destroy']),
28 31
         ];
29 32
     }
@@ -57,6 +60,11 @@ class BachecaController extends Controller
57 60
     public function show(ContenutoBachecaDataTable $datatable, Request $request)
58 61
     {
59 62
         $bacheca = Bacheca::find($request->get('bacheca_id'));
63
+        if (! $bacheca) {
64
+            abort(404);
65
+        }
66
+        AttivitaService::garantisciAttivita($bacheca->attivita_id);
67
+        $datatable->attivita_id = Session::get('attivita_attuale');
60 68
         $datatable->bacheca_id = $bacheca->id;
61 69
         return $datatable->render('bacheca.show', ['bacheca' => $bacheca]);
62 70
     }

+ 14
- 4
app/Http/Controllers/BachecaHasContenutoController.php Zobrazit soubor

@@ -2,12 +2,15 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\BachecaHasContenuto;
7 9
 use App\Models\Bacheca;
8 10
 use App\Models\ContenutoBacheca;
9 11
 use Illuminate\Support\Facades\Auth;
10 12
 use Illuminate\Support\Facades\Session;
13
+use App\Services\Attivita\AttivitaService;
11 14
 
12 15
 class BachecaHasContenutoController extends Controller
13 16
 {
@@ -22,8 +25,8 @@ class BachecaHasContenutoController extends Controller
22 25
     public static function middleware(): array
23 26
     {
24 27
         return [
25
-            new Middleware('permission:view-bacheca_has_contenuto', only: ['index']),
26
-            new Middleware('permission:create-bacheca_has_contenuto|edit-bacheca_has_contenuto|delete-bacheca_has_contenuto', only: ['store', 'update', 'destroy']),
28
+            new Middleware('permission:view-bacheca_has_contenuto', only: ['index', 'associa_contenuto']),
29
+            new Middleware('permission:create-bacheca_has_contenuto|edit-bacheca_has_contenuto|delete-bacheca_has_contenuto', only: ['store', 'update', 'destroy', 'associa_contenuto_bacheca']),
27 30
         ];
28 31
     }
29 32
     
@@ -34,7 +37,9 @@ class BachecaHasContenutoController extends Controller
34 37
 
35 38
     public function associa_contenuto(Request $request)
36 39
     {
37
-        $contenuti = ContenutoBacheca::all();
40
+        $attivitaId = Session::get('attivita_attuale');
41
+        AttivitaService::garantisciAttivita($attivitaId);
42
+        $contenuti = ContenutoBacheca::query()->where('attivita_id', $attivitaId)->get();
38 43
         return view('contenuto_bacheca.associa_contenuto', ['contenuti' => $contenuti]);
39 44
     }
40 45
 
@@ -47,7 +52,12 @@ class BachecaHasContenutoController extends Controller
47 52
         
48 53
         $bacheca = Bacheca::find($request->bacheca_id);
49 54
         $contenuto = ContenutoBacheca::find($request->contenuto_id);
50
-        
55
+        if (! $bacheca || ! $contenuto) {
56
+            abort(404);
57
+        }
58
+        AttivitaService::garantisciAttivita($bacheca->attivita_id);
59
+        AttivitaService::garantisciAttivita($contenuto->attivita_id);
60
+
51 61
         $bacheca->contenuti()->attach($contenuto);
52 62
         
53 63
         return response()->json(['message' => 'Contenuto associato con successo']);

+ 2
- 0
app/Http/Controllers/CategoriaContabileController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Categoriacontabile;
7 9
 use App\DataTables\CategoriacontabileDataTable;

+ 3
- 1
app/Http/Controllers/ChiusuraServizioController.php Zobrazit soubor

@@ -12,6 +12,7 @@ use Carbon\Carbon;
12 12
 use Illuminate\Routing\Controllers\Middleware;
13 13
 use Illuminate\Support\Facades\Auth;
14 14
 use Illuminate\Support\Facades\Session;
15
+use App\Services\Attivita\AttivitaService;
15 16
 
16 17
 class ChiusuraServizioController extends Controller
17 18
 {
@@ -101,7 +102,8 @@ class ChiusuraServizioController extends Controller
101 102
       return redirect()->back()->with('error', 'Non autorizzato');
102 103
     }
103 104
 
104
-    $attivitaId = (int) ($request->input('attivita_id') ?: Session::get('attivita_attuale'));
105
+    $attivitaId = (int) Session::get('attivita_attuale');
106
+    AttivitaService::garantisciAttivita($attivitaId);
105 107
     $attivita = Attivita::find($attivitaId);
106 108
     if (!$attivita) {
107 109
       return redirect()->back()->with('error', 'Attività non trovata');

+ 7
- 0
app/Http/Controllers/ContenutoBachecaController.php Zobrazit soubor

@@ -2,12 +2,15 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\ContenutoBacheca;
7 9
 use App\DataTables\ContenutoBachecaDataTable;
8 10
 use App\DataTables\ContenutoBachecaDataTableEditor;
9 11
 use Illuminate\Support\Facades\Auth;
10 12
 use Illuminate\Support\Facades\Session;
13
+use App\Services\Attivita\AttivitaService;
11 14
 
12 15
 class ContenutoBachecaController extends Controller
13 16
 {
@@ -56,6 +59,10 @@ class ContenutoBachecaController extends Controller
56 59
     public function show(Request $request)
57 60
     {
58 61
         $contenuto_bacheca = ContenutoBacheca::find($request->get('contenuto_bacheca_id'));
62
+        if (! $contenuto_bacheca) {
63
+            abort(404);
64
+        }
65
+        AttivitaService::garantisciAttivita($contenuto_bacheca->attivita_id);
59 66
         return view('contenuto_bacheca.show', ['contenuto_bacheca' => $contenuto_bacheca]);
60 67
     }
61 68
     

+ 14
- 3
app/Http/Controllers/Controller.php Zobrazit soubor

@@ -2,7 +2,18 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
-abstract class Controller
5
+use Illuminate\Routing\Controllers\HasMiddleware;
6
+
7
+abstract class Controller implements HasMiddleware
6 8
 {
7
-  //
8
-}
9
+    /**
10
+     * Laravel 12 applica il middleware dei controller solo se la classe
11
+     * implementa HasMiddleware. I figli possono sovrascrivere questo metodo.
12
+     *
13
+     * @return array<int, \Illuminate\Routing\Controllers\Middleware|\Closure|string>
14
+     */
15
+    public static function middleware(): array
16
+    {
17
+        return [];
18
+    }
19
+}

+ 4
- 0
app/Http/Controllers/DispositivoController.php Zobrazit soubor

@@ -2,11 +2,14 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Dispositivo;
7 9
 use App\DataTables\DispositivoDataTable;
8 10
 use App\DataTables\DispositivoDataTableEditor;
9 11
 use Illuminate\Support\Facades\Auth;
12
+use Illuminate\Support\Facades\Session;
10 13
 
11 14
 
12 15
 class DispositivoController extends Controller
@@ -29,6 +32,7 @@ class DispositivoController extends Controller
29 32
     
30 33
     public function index(DispositivoDataTable $dataTable)
31 34
     {
35
+        $dataTable->attivita_id = Session::get('attivita_attuale');
32 36
         return $dataTable->render('dispositivo.index');
33 37
     }
34 38
     public function store(DispositivoDataTableEditor $editor)

+ 2
- 0
app/Http/Controllers/EventoFormController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\EventoForm;
7 9
 use App\Models\Evento;

+ 6
- 1
app/Http/Controllers/FornitoreController.php Zobrazit soubor

@@ -2,11 +2,14 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Fornitore;
7 9
 use App\DataTables\FornitoreDataTable;
8 10
 use App\DataTables\FornitoreDataTableEditor;
9 11
 use Illuminate\Support\Facades\Auth;
12
+use App\Services\Attivita\AttivitaService;
10 13
 
11 14
 class FornitoreController extends Controller
12 15
 {
@@ -21,7 +24,7 @@ class FornitoreController extends Controller
21 24
     public static function middleware(): array
22 25
     {
23 26
         return [
24
-            new Middleware('permission:view-fornitore', only: ['index', 'show']),
27
+            new Middleware('permission:view-fornitore', only: ['index', 'show', 'show_modal']),
25 28
             new Middleware('permission:create-fornitore|edit-fornitore|delete-fornitore', only: ['store', 'update', 'destroy']),
26 29
         ];
27 30
     }
@@ -56,6 +59,7 @@ class FornitoreController extends Controller
56 59
     {
57 60
         $fornitore = Fornitore::find($request->get('fornitore_id'));
58 61
         if(!$fornitore) return redirect()->route('fornitore.index')->with('error', 'Fornitore non trovato');
62
+        AttivitaService::garantisciAttivita($fornitore->attivita_id);
59 63
         if(!Auth::user()->can('view-fornitore')) return abort(403, 'Non hai permesso di vedere questo fornitore');
60 64
         return view('fornitore.show_modal', ['fornitore' => $fornitore]);
61 65
     }
@@ -64,6 +68,7 @@ class FornitoreController extends Controller
64 68
     {
65 69
         $fornitore = Fornitore::find($request->get('fornitore_id'));
66 70
         if(!$fornitore) return redirect()->route('fornitore.index')->with('error', 'Fornitore non trovato');
71
+        AttivitaService::garantisciAttivita($fornitore->attivita_id);
67 72
         if(!Auth::user()->can('view-fornitore')) return abort(403, 'Non hai permesso di vedere questo fornitore');
68 73
         return view('fornitore.show', ['fornitore' => $fornitore]);
69 74
     }

+ 5
- 1
app/Http/Controllers/ImpostazioniController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use App\Models\Attivita;
6 8
 use Illuminate\Http\Request;
7 9
 use App\Models\Impostazioni;
@@ -9,6 +11,7 @@ use Illuminate\Support\Facades\Auth;
9 11
 use Illuminate\Support\Facades\Session;
10 12
 use App\DataTables\ImpostazioniDataTable;
11 13
 use App\DataTables\ImpostazioniDataTableEditor;
14
+use App\Services\Attivita\AttivitaService;
12 15
 
13 16
 class ImpostazioniController extends Controller
14 17
 {
@@ -24,7 +27,7 @@ class ImpostazioniController extends Controller
24 27
     {
25 28
         return [
26 29
             new Middleware('permission:view-impostazioni', only: ['index']),
27
-            new Middleware('permission:create-impostazioni|edit-impostazioni|delete-impostazioni', only: ['store']),
30
+            new Middleware('permission:create-impostazioni|edit-impostazioni|delete-impostazioni', only: ['store', 'edit']),
28 31
         ];
29 32
     }
30 33
     
@@ -69,6 +72,7 @@ class ImpostazioniController extends Controller
69 72
     {
70 73
         $impostazione = Impostazioni::find($impostazione_id);
71 74
         if(!$impostazione) return redirect()->route('impostazioni.index')->with('error', 'Impostazione non trovata');
75
+        AttivitaService::garantisciAttivita($impostazione->attivita_id);
72 76
         return view('impostazioni.edit', compact('impostazione'));
73 77
     }
74 78
 }

+ 5
- 4
app/Http/Controllers/ListinoPrezziController.php Zobrazit soubor

@@ -3,6 +3,7 @@
3 3
 namespace App\Http\Controllers;
4 4
 
5 5
 use Illuminate\Http\Request;
6
+use Illuminate\Routing\Controllers\Middleware;
6 7
 use App\Models\ListinoPrezzi;
7 8
 use Illuminate\Support\Facades\Auth;
8 9
 use Illuminate\Support\Facades\Validator;
@@ -22,10 +23,10 @@ class ListinoPrezziController extends Controller
22 23
     
23 24
     public static function middleware(): array
24 25
     {
25
-        return  [
26
-                    new Middleware('role:superadmin', ['only' => ['index', 'store']]),
27
-                    new Middleware('role:amministratore', ['only' => ['show_listino_cliente']]),
28
-                ];
26
+        return [
27
+            new Middleware('role:superadmin', only: ['index', 'store']),
28
+            new Middleware('role:amministratore', only: ['show_listino_cliente']),
29
+        ];
29 30
     }
30 31
 
31 32
     public function index(ListinoPrezziDataTable $dataTable)

+ 25
- 2
app/Http/Controllers/MonitorController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Dispositivo;
7 9
 use App\Models\MonitorHasContenuto;
@@ -11,6 +13,7 @@ use App\DataTables\MonitorDataTableEditor;
11 13
 use Illuminate\Support\Facades\Auth;
12 14
 use Carbon\Carbon;
13 15
 use Illuminate\Support\Facades\Session;
16
+use App\Services\Attivita\AttivitaService;
14 17
 
15 18
 
16 19
 class MonitorController extends Controller
@@ -26,8 +29,8 @@ class MonitorController extends Controller
26 29
     public static function middleware(): array
27 30
     {
28 31
         return [
29
-            new Middleware('permission:view-monitor', only: ['index']),
30
-            new Middleware('permission:create-monitor|edit-monitor|delete-monitor', only: ['store', 'update', 'destroy']),
32
+            new Middleware('permission:view-monitor', only: ['index', 'show']),
33
+            new Middleware('permission:create-monitor|edit-monitor|delete-monitor', only: ['store', 'update', 'destroy', 'gestisci_contenuto_monitor', 'gestisci_contenuto_store']),
31 34
         ];
32 35
     }
33 36
     
@@ -61,6 +64,7 @@ class MonitorController extends Controller
61 64
         if($monitor == null){
62 65
             return redirect()->route('monitor.index')->with('error', 'Dispositivo monitor non trovato');
63 66
         }
67
+        AttivitaService::garantisciAttivita($monitor->attivita_id);
64 68
 
65 69
         $monitor_has_contenuto = MonitorHasContenuto::with(['cucina', 'contenuto_bacheca', 'bacheca.contenuti'])
66 70
             ->where('monitor_id', $monitor->id)
@@ -102,6 +106,7 @@ class MonitorController extends Controller
102 106
         if($monitor == null){
103 107
             abort(404, 'Dispositivo monitor non trovato');
104 108
         }
109
+        AttivitaService::garantisciAttivita($monitor->attivita_id);
105 110
         $monitor_has_contenuto = MonitorHasContenuto::where('monitor_id', $monitor->id)->first();
106 111
 
107 112
         $bacheche = Bacheca::query()
@@ -146,6 +151,24 @@ class MonitorController extends Controller
146 151
 
147 152
         $isBacheca = (bool) $request->boolean('is_bacheca');
148 153
 
154
+        $monitor = Dispositivo::find($request->get('monitor_id'));
155
+        if (! $monitor) {
156
+            abort(404);
157
+        }
158
+        AttivitaService::garantisciAttivita($monitor->attivita_id);
159
+
160
+        if ($isBacheca) {
161
+            $bacheca = Bacheca::find($request->get('bacheca_id'));
162
+            if (! $bacheca || (int) $bacheca->attivita_id !== (int) $monitor->attivita_id) {
163
+                abort(404);
164
+            }
165
+        } else {
166
+            $cucina = \App\Models\Cucina::find($request->get('cucina_id'));
167
+            if (! $cucina || (int) $cucina->attivita_id !== (int) $monitor->attivita_id) {
168
+                abort(404);
169
+            }
170
+        }
171
+
149 172
         MonitorHasContenuto::updateOrCreate([
150 173
             'monitor_id' => $request->get('monitor_id'),
151 174
         ], [

+ 3
- 1
app/Http/Controllers/RoleController.php Zobrazit soubor

@@ -33,7 +33,9 @@ class RoleController extends Controller implements HasMiddleware
33 33
   public static function middleware(): array
34 34
   {
35 35
     return [
36
-      new Middleware('permission:view-role', only: ['index']),
36
+      new Middleware('permission:view-role', only: ['index', 'showEdit', 'showNew', 'getPermissions']),
37
+      new Middleware('permission:create-role', only: ['createRole']),
38
+      new Middleware('permission:edit-role', only: ['updatePermission']),
37 39
       new Middleware('permission:create-role|edit-role|remove-role', only: ['store']),
38 40
     ];
39 41
   }

+ 2
- 0
app/Http/Controllers/StampanteController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\Dispositivo;
7 9
 use App\DataTables\StampanteDataTable;

+ 2
- 0
app/Http/Controllers/TavoloController.php Zobrazit soubor

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use App\Models\Tavolo;
6 8
 use App\DataTables\TavoloDataTable;
7 9
 use App\DataTables\TavoloDataTableEditor;

+ 9
- 2
app/Http/Controllers/TestiController.php Zobrazit soubor

@@ -3,6 +3,7 @@
3 3
 namespace App\Http\Controllers;
4 4
 
5 5
 use Illuminate\Http\Request;
6
+use Illuminate\Routing\Controllers\Middleware;
6 7
 use App\Models\Testi;
7 8
 use App\DataTables\TestiDataTable;
8 9
 use App\DataTables\TestiDataTableEditor;
@@ -24,7 +25,6 @@ class TestiController extends Controller
24 25
         return [
25 26
             new Middleware('permission:view-testi', only: ['index']),
26 27
             new Middleware('permission:create-testi|edit-testi|delete-testi', only: ['store', 'update', 'destroy']),
27
-            new Middleware('permission:show-testi-cliente', only: ['show_cliente']),
28 28
         ];
29 29
     }
30 30
 
@@ -57,14 +57,21 @@ class TestiController extends Controller
57 57
     {
58 58
         switch($request->get('oggetto')){
59 59
             case 'privacy':
60
+                $attivitaId = (int) ($request->get('attivita_id') ?: Session::get('attivita_attuale'));
61
+                if ($attivitaId <= 0) {
62
+                    abort(404);
63
+                }
60 64
                 $testi = Testi::where('ambiente', 'cliente')
61 65
                 ->where('tipo', 'privacy')
62 66
                 ->where('is_attivo', true)
67
+                ->where('attivita_id', $attivitaId)
63 68
                 ->orderBy('created_at', 'desc')
64 69
                 ->first();
65 70
                 break;
66 71
             default:
67
-                $testi = Testi::find($request->get('testi_id'));
72
+                $testi = Testi::query()
73
+                    ->where('is_attivo', true)
74
+                    ->find($request->get('testi_id'));
68 75
                 break;
69 76
         }
70 77
 

+ 8
- 8
app/Http/Controllers/TombolaController.php Zobrazit soubor

@@ -3,10 +3,12 @@
3 3
 namespace App\Http\Controllers;
4 4
 
5 5
 use Illuminate\Http\Request;
6
+use Illuminate\Routing\Controllers\Middleware;
6 7
 use App\Models\Tombola;
7 8
 use Illuminate\Support\Facades\Session;
8 9
 use Illuminate\Support\Facades\Auth;
9 10
 use App\Models\Attivita;
11
+use App\Services\Attivita\AttivitaService;
10 12
 
11 13
 class TombolaController extends Controller
12 14
 {
@@ -21,8 +23,8 @@ class TombolaController extends Controller
21 23
     public static function middleware(): array
22 24
     {
23 25
         return [
24
-            new Middleware('permission:view-tombola', only: ['index']),
25
-            new Middleware('permission:create-tombola|edit-tombola|delete-tombola', only: ['getTabellone', 'estrai', 'azzera', 'estratti']),
26
+            new Middleware('permission:view-tombola', only: ['index', 'tabellone']),
27
+            new Middleware('permission:create-tombola|edit-tombola|delete-tombola', only: ['getTabellone', 'estrai', 'azzera']),
26 28
         ];
27 29
     }
28 30
     public function getTabellone(Request $request, $attivita_id){
@@ -30,6 +32,7 @@ class TombolaController extends Controller
30 32
         if(!$attivita){
31 33
             return redirect()->route('tombola.index')->with('error', 'Attivita non trovata.');
32 34
         }
35
+        AttivitaService::garantisciAttivita($attivita->id);
33 36
         if(!Auth::user()->can('create-tombola')){
34 37
             return redirect()->route('tombola.index')->with('error', 'Non hai permesso di creare il tabellone.');
35 38
         }
@@ -73,13 +76,12 @@ class TombolaController extends Controller
73 76
     public function tabellone(Request $request, $attivita_id){
74 77
         if(!Auth::user()->can('view-tombola')){
75 78
             return redirect()->route('tombola.index')->with('error', 'Non hai permesso di vedere il tabellone.');
76
-        }elseif(!Attivita::find($attivita_id)->user_id == Auth::user()->id){
77
-            return redirect()->route('tombola.index')->with('error', 'Non sei autorizzato a vedere il tabellone di questa attività.');
78 79
         }
79 80
         $attivita = Attivita::find($attivita_id);
80 81
         if(!$attivita){
81 82
             return redirect()->route('tombola.index')->with('error', 'Attivita non trovata.');
82 83
         }
84
+        AttivitaService::garantisciAttivita($attivita->id);
83 85
         return view('tombola.tabellone', [
84 86
             'attivita' => $attivita,
85 87
         ]);
@@ -90,10 +92,9 @@ class TombolaController extends Controller
90 92
         if(!$attivita){
91 93
             return redirect()->route('tombola.index')->with('error', 'Attivita non trovata.');
92 94
         }
95
+        AttivitaService::garantisciAttivita($attivita->id);
93 96
         if(!Auth::user()->can('view-tombola')){
94 97
             return redirect()->route('tombola.index')->with('error', 'Non hai permesso di estrarre numeri.');
95
-        }elseif($attivita->user_id != Auth::user()->id){
96
-            return redirect()->route('tombola.index')->with('error', 'Non sei autorizzato a estrarre numeri da questa attività.');
97 98
         }
98 99
         $tabellone = Tombola::where('attivita_id', $attivita_id);
99 100
         $tombola = $tabellone->where('estratto', false)->inRandomOrder()->first();
@@ -165,10 +166,9 @@ class TombolaController extends Controller
165 166
         if(!$attivita){
166 167
             return redirect()->route('tombola.index')->with('error', 'Attivita non trovata.');
167 168
         }
169
+        AttivitaService::garantisciAttivita($attivita->id);
168 170
         if(!Auth::user()->can('delete-tombola')){
169 171
             return redirect()->route('tombola.index')->with('error', 'Non hai permesso di azzerare la tombola.');
170
-        }elseif($attivita->user_id != Auth::user()->id){
171
-            return redirect()->route('tombola.index')->with('error', 'Non sei autorizzato a azzerare la tombola di questa attività.');
172 172
         }
173 173
 
174 174
         Tombola::where('attivita_id', $attivita_id)->update([

+ 3
- 1
app/Http/Controllers/UserController.php Zobrazit soubor

@@ -50,7 +50,9 @@ class UserController extends Controller implements HasMiddleware
50 50
   public static function middleware(): array
51 51
   {
52 52
     return [
53
-      new Middleware('permission:view-user', only: ['index']),
53
+      new Middleware('permission:view-user', only: ['index', 'admin_list']),
54
+      new Middleware('permission:create-user', only: ['create']),
55
+      new Middleware('permission:edit-user', only: ['edit_profilo', 'updateProfile', 'upload_foto_profilo', 'showCropImage', 'cropImage']),
54 56
       new Middleware('permission:create-user|edit-user|remove-user', only: ['store', 'admin_aggiorna']),
55 57
       new Middleware('role:superadmin', only: ['superadmin_impersonate']),
56 58
     ];

+ 9
- 9
app/Http/Controllers/VariantePiattoController.php Zobrazit soubor

@@ -2,12 +2,15 @@
2 2
 
3 3
 namespace App\Http\Controllers;
4 4
 
5
+
6
+use Illuminate\Routing\Controllers\Middleware;
5 7
 use Illuminate\Http\Request;
6 8
 use App\Models\VariantePiatto;
7 9
 use App\DataTables\VariantePiattoDataTable;
8 10
 use App\DataTables\VariantePiattoDataTableEditor;
9 11
 use Illuminate\Support\Facades\Session;
10 12
 use Illuminate\Support\Facades\Auth;
13
+use App\Services\Attivita\AttivitaService;
11 14
 
12 15
 class VariantePiattoController extends Controller
13 16
 {
@@ -22,7 +25,7 @@ class VariantePiattoController extends Controller
22 25
     public static function middleware(): array
23 26
     {
24 27
         return [
25
-            new Middleware('permission:view-variante-piatto', only: ['index']),
28
+            new Middleware('permission:view-variante-piatto', only: ['index', 'datatable', 'list']),
26 29
             new Middleware('permission:create-variante-piatto|edit-variante-piatto|delete-variante-piatto', only: ['store', 'update', 'destroy']),
27 30
         ];
28 31
     }
@@ -76,20 +79,17 @@ class VariantePiattoController extends Controller
76 79
       }
77 80
 
78 81
     public function list(Request $request){
79
-        $attivita = \App\Models\Attivita::find(Session::get('attivita_attuale'));
82
+        $attivitaId = Session::get('attivita_attuale');
83
+        AttivitaService::garantisciAttivita($attivitaId);
84
+        $attivita = \App\Models\Attivita::find($attivitaId);
80 85
         if(!$attivita){
81 86
           return response()->json([
82 87
             'success' => false,
83 88
             'message' => 'Attività non trovata',
84 89
           ]);
85 90
         }
86
-        $rigaOrdine = \App\Models\RigaOrdine::find($request->riga_ordine_id);
87
-        if(!$rigaOrdine){
88
-          return response()->json([
89
-            'success' => false,
90
-            'message' => 'Riga ordine non trovata',
91
-          ]);
92
-        }
91
+        $rigaOrdine = app(\App\Services\Carrello\CarrelloService::class)
92
+            ->rigaDiQuestaCassa((int) $request->riga_ordine_id);
93 93
     
94 94
       $variantiCucina = VariantePiatto::query()
95 95
       ->where('attivita_id', $attivita->id)

app/Models/AbstractModels/AbstractSaltacodaRigaordine.php → app/Models/AbstractModels/AbstractSaltacodaRigaOrdine.php Zobrazit soubor


+ 2
- 2
app/Models/AbstractModels/AbstractUser.php Zobrazit soubor

@@ -85,9 +85,9 @@ abstract class AbstractUser extends \Illuminate\Foundation\Auth\User
85 85
     {
86 86
         return $this->hasMany('\App\Models\Attivita', 'user_id', 'id');
87 87
     }
88
-    public function fatturazione()
88
+    public function fattura()
89 89
     {
90
-        return $this->hasMany('\App\Models\Fatturazione', 'user_id', 'id');
90
+        return $this->hasMany('\App\Models\Fattura', 'user_id', 'id');
91 91
     }
92 92
     
93 93
 }

+ 66
- 3
app/Models/Attivita.php Zobrazit soubor

@@ -19,9 +19,55 @@ class Attivita extends \App\Models\AbstractModels\AbstractAttivita
19 19
             return null;
20 20
         }
21 21
 
22
-        return str_starts_with($this->path_logo, 'http')
23
-            ? $this->path_logo
24
-            : asset($this->path_logo);
22
+        if (str_starts_with($this->path_logo, 'http')) {
23
+            return $this->path_logo;
24
+        }
25
+
26
+        if (str_starts_with($this->path_logo, 'assets/')) {
27
+            return asset($this->path_logo);
28
+        }
29
+
30
+        $disk = Storage::disk('copertinaAttivita');
31
+        if ($disk->exists($this->path_logo)) {
32
+            return $disk->url($this->path_logo);
33
+        }
34
+
35
+        return asset($this->path_logo);
36
+    }
37
+
38
+    /**
39
+     * Path filesystem assoluto del logo (per DomPDF).
40
+     */
41
+    public function logoLocalPath(): ?string
42
+    {
43
+        if (empty($this->path_logo)) {
44
+            return null;
45
+        }
46
+
47
+        $raw = (string) $this->path_logo;
48
+        if (str_starts_with($raw, 'http://') || str_starts_with($raw, 'https://')) {
49
+            return $raw;
50
+        }
51
+
52
+        if (str_starts_with($raw, 'assets/')) {
53
+            $candidate = public_path($raw);
54
+
55
+            return is_file($candidate) ? $candidate : null;
56
+        }
57
+
58
+        $candidate = storage_path('app/public/copertinaAttivita/'.ltrim($raw, '/'));
59
+        if (is_file($candidate)) {
60
+            return $candidate;
61
+        }
62
+
63
+        $candidate = public_path(ltrim($raw, '/'));
64
+        if (is_file($candidate)) {
65
+            return $candidate;
66
+        }
67
+
68
+        $candidate = public_path('storage/'.ltrim($raw, '/'));
69
+
70
+        return is_file($candidate) ? $candidate : null;
25 71
     }
26 72
 
27 73
     public static function defaultLogoUrl(): string
@@ -81,6 +127,23 @@ class Attivita extends \App\Models\AbstractModels\AbstractAttivita
81 127
         return mb_strtoupper(mb_substr($parts[0], 0, 1) . mb_substr($parts[1], 0, 1));
82 128
     }
83 129
 
130
+    /**
131
+     * Slug pubblico (fallback se mancante in DB).
132
+     */
133
+    public function publicSlug(): string
134
+    {
135
+        if (filled($this->slug)) {
136
+            return (string) $this->slug;
137
+        }
138
+
139
+        return \Illuminate\Support\Str::slug((string) $this->nome) ?: 'attivita-'.$this->id;
140
+    }
141
+
142
+    public function publicUrl(): string
143
+    {
144
+        return route('cliente.attivita.show', ['slug' => $this->publicSlug()]);
145
+    }
146
+
84 147
     public static function E_Mia($attivita_id)
85 148
     {
86 149
         return self::where('id', $attivita_id)->where('user_id', Auth::user()->id)->exists();

app/Models/SaltacodaRigaordine.php → app/Models/SaltacodaRigaOrdine.php Zobrazit soubor


+ 19
- 0
app/Observers/AttivitaObserver.php Zobrazit soubor

@@ -7,9 +7,27 @@ use App\Models\Categoriacontabile;
7 7
 use App\Models\Impostazioni;
8 8
 use App\Models\Saltacoda;
9 9
 use App\Models\Asporto;
10
+use Illuminate\Support\Str;
10 11
 
11 12
 class AttivitaObserver
12 13
 {
14
+    /**
15
+     * Default slug prima del salvataggio.
16
+     */
17
+    public function creating(Attivita $attivita): void
18
+    {
19
+        if (! filled($attivita->slug)) {
20
+            $base = Str::slug((string) $attivita->nome) ?: 'attivita';
21
+            $slug = $base;
22
+            $i = 2;
23
+            while (Attivita::where('slug', $slug)->exists()) {
24
+                $slug = $base.'-'.$i;
25
+                $i++;
26
+            }
27
+            $attivita->slug = $slug;
28
+        }
29
+    }
30
+
13 31
     /**
14 32
      * Handle the Attivita "created" event.
15 33
      */
@@ -27,6 +45,7 @@ class AttivitaObserver
27 45
             'sito_web' => '',
28 46
             'note' => '',
29 47
         ]);
48
+        $attivita->saveQuietly();
30 49
 
31 50
         //crea saltacoda
32 51
         Saltacoda::create([

+ 46
- 0
app/Services/Attivita/AttivitaService.php Zobrazit soubor

@@ -0,0 +1,46 @@
1
+<?php
2
+
3
+namespace App\Services\Attivita;
4
+
5
+use App\Models\Evento;
6
+use App\Models\Attivita;
7
+
8
+class AttivitaService
9
+{
10
+
11
+    public static function garantisciEventoDiQuestaAttivita(?Evento $evento)
12
+    {
13
+        if (auth()->user()?->hasRole('superadmin')) {
14
+            return;
15
+        }
16
+
17
+        $attuale = (int) session('attivita_attuale');
18
+        if (! $evento || $attuale <= 0 || (int) $evento->attivita_id !== $attuale) {
19
+            abort(404);
20
+        }
21
+    }
22
+
23
+    public static function garantisciAttivita($attivita_id)
24
+    {
25
+        if (auth()->user()?->hasRole('superadmin')) {
26
+            return;
27
+        }
28
+
29
+        $attuale = (int) session('attivita_attuale');
30
+        if (! $attivita_id || $attuale <= 0 || (int) $attivita_id !== $attuale) {
31
+            abort(404);
32
+        }
33
+    }
34
+
35
+    public static function api_garantisciAttivita($attivita_id)
36
+    {
37
+        if (auth()->user()?->hasRole('superadmin')) {
38
+            return;
39
+        }
40
+        //Se non c'è o non è mia return 404
41
+        if (! $attivita_id || ! Attivita::E_Mia($attivita_id)) {
42
+            abort(404);
43
+        }
44
+    }
45
+
46
+}

Loading…
Zrušit
Uložit