Quellcode durchsuchen

fix categoria datatable, bacheca e contenuto bacheca

marcofalabretti vor 1 Tag
Ursprung
Commit
f0593a8787

+ 27
- 0
app/DataTables/AttivitaDataTableEditor.php Datei anzeigen

@@ -94,6 +94,33 @@ class AttivitaDataTableEditor extends DataTablesEditor
94 94
     $data['is_attiva'] = isset($data['is_attiva']) ? true : false;
95 95
     return $data;
96 96
   }
97
+
98
+  public function created(Model $model, array $data): Model
99
+  {
100
+    $model->categorie_contabili()->create([
101
+      'nome' => 'Vendita',
102
+      'descrizione' => 'Vendita di prodotti e servizi',
103
+      'colore' => '#61db0f',
104
+    ]);
105
+    $model->categorie_contabili()->create([
106
+      'nome' => 'Acquisto',
107
+      'descrizione' => 'Acquisto di prodotti e servizi',
108
+      'colore' => '#dc3545',
109
+    ]);
110
+    $model->categorie_contabili()->create([
111
+      'nome' => 'Spese generali',
112
+      'descrizione' => 'Spese generali',
113
+      'colore' => '#dc3545',
114
+    ]);
115
+    $model->categorie_contabili()->create([
116
+      'nome' => 'Utenze',
117
+      'descrizione' => 'Spese per utenze (Luce, Acqua, Gas, Telefono)',
118
+      'colore' => '#dc3545',
119
+    ]);
120
+
121
+    return $model;
122
+  }
123
+
97 124
   public function messages(): array
98 125
   {
99 126
     return $this->messages;

+ 3
- 4
app/DataTables/BachecaDataTable.php Datei anzeigen

@@ -43,7 +43,7 @@ class BachecaDataTable extends DataTable
43 43
      */
44 44
     public function query(Bacheca $model): QueryBuilder
45 45
     {
46
-        return $model->newQuery()->where('attivita_id', session()->get('attivita_attuale'));
46
+        return $model->newQuery()->where('attivita_id', $this->attivita_id);
47 47
     }
48 48
 
49 49
     /**
@@ -76,9 +76,8 @@ class BachecaDataTable extends DataTable
76 76
                     ->editor(
77 77
                         Editor::make()
78 78
                             ->fields([
79
-                                Fields\Select2::make('attivita_id')->label('Attività')
80
-                                ->options(Attivita::all()->pluck('id', 'nome'))
81
-                                ->default(session()->get('attivita_attuale')),
79
+                                Fields\Hidden::make('attivita_id')->label('Attività')
80
+                                ->default($this->attivita_id),
82 81
                                 Fields\Text::make('nome')->label('Nome'),
83 82
                                 Fields\Text::make('descrizione')->label('Descrizione'),
84 83
                                 Fields\Image::make('immagine')->label('Immagine'),

+ 12
- 2
app/DataTables/CategoriacontabileDataTableEditor.php Datei anzeigen

@@ -21,6 +21,7 @@ class CategoriacontabileDataTableEditor extends DataTablesEditor
21 21
     'nome.required' => 'Il nome è richiesto',
22 22
     'descrizione.required' => 'La descrizione è richiesta',
23 23
     'is_attiva.required' => 'Indicare una delle due opzioni',
24
+    'nome.unique' => 'Categoria già esistente',
24 25
   ];
25 26
 
26 27
   /**
@@ -31,7 +32,11 @@ class CategoriacontabileDataTableEditor extends DataTablesEditor
31 32
   public function createRules(): array
32 33
   {
33 34
     return [
34
-      'nome'  => 'required|unique:categoria_contabile,nome',
35
+      'nome'  => [
36
+        'required',
37
+        Rule::unique('categoria_contabile', 'nome')
38
+            ->where('attivita_id', $data['attivita_id'] ?? null),
39
+      ],
35 40
       'descrizione' => 'nullable',
36 41
       'is_attiva' => 'boolean',
37 42
     ];
@@ -50,7 +55,12 @@ class CategoriacontabileDataTableEditor extends DataTablesEditor
50 55
   public function editRules(Model $model): array
51 56
   {
52 57
     return [
53
-      'nome'  => 'required|unique:categoria_contabile,nome,'.$model->id,
58
+      'nome' => [
59
+        'required',
60
+        Rule::unique('categoria_contabile', 'nome')
61
+        ->where('attivita_id', $model->attivita_id)
62
+        ->ignore($model->id),
63
+      ],
54 64
       'descrizione' => 'nullable',
55 65
       'is_attiva' => 'boolean',
56 66
     ];

+ 5
- 2
app/DataTables/ContenutoBachecaDataTable.php Datei anzeigen

@@ -46,10 +46,11 @@ 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 50
         if($this->bacheca_id){
50
-            return $model->newQuery()->join('bacheca_has_contenuto', 'contenuto_bacheca.id', '=', 'bacheca_has_contenuto.contenuto_id')->where('bacheca_has_contenuto.bacheca_id', $this->bacheca_id);
51
+            return $model->join('bacheca_has_contenuto', 'contenuto_bacheca.id', '=', 'bacheca_has_contenuto.contenuto_id')->where('bacheca_has_contenuto.bacheca_id', $this->bacheca_id);
51 52
         }
52
-        return $model->newQuery();
53
+        return $model;
53 54
     }
54 55
 
55 56
     /**
@@ -78,6 +79,8 @@ class ContenutoBachecaDataTable extends DataTable
78 79
                     ->editor(
79 80
                         Editor::make()
80 81
                             ->fields([
82
+                                Fields\Hidden::make('attivita_id')->label('Attività')
83
+                                ->default($this->attivita_id?? Session::get('attivita_attuale')),
81 84
                                 Fields\Text::make('nome')->label('Nome'),
82 85
                                 Fields\Text::make('descrizione')->label('Descrizione'),
83 86
                                 Fields\File::make('immagine')->label('Immagine'),

+ 6
- 2
app/DataTables/MonitorDataTable.php Datei anzeigen

@@ -52,7 +52,11 @@ class MonitorDataTable extends DataTable
52 52
      */
53 53
     public function query(Dispositivo $model): QueryBuilder
54 54
     {
55
-        return $model->newQuery()->where('tipo', Dispositivo::MONITOR);
55
+        if($this->attivita_id){
56
+            return $model->newQuery()->where('tipo', Dispositivo::MONITOR)->where('attivita_id', $this->attivita_id);
57
+        }else{
58
+            return $model->newQuery()->whereRaw('1 = 0');
59
+        }
56 60
     }
57 61
 
58 62
     /**
@@ -78,10 +82,10 @@ class MonitorDataTable extends DataTable
78 82
                     ->editor(
79 83
                         Editor::make()
80 84
                             ->fields([
85
+                                Fields\Hidden::make('attivita_id')->label('Attività')->default($this->attivita_id),
81 86
                                 Fields\Text::make('nome')->label('Nome'),
82 87
                                 Fields\Boolean::make('is_attivo')->label('Attivo')->default(true),
83 88
                                 Fields\Hidden::make('tipo')->label('Tipo')->default(Dispositivo::MONITOR),
84
-                                Fields\Select2::make('attivita_id')->label('Attività')->options(Attivita::where('is_attiva', true)->pluck('id', 'nome')),
85 89
                                 Fields\Text::make('licenza')->label('Licenza'),
86 90
                                 Fields\Text::make('ubicazione')->label('Ubicazione'),
87 91
                                 Fields\Text::make('note')->label('Note'),

+ 2
- 0
app/Http/Controllers/BachecaController.php Datei anzeigen

@@ -8,6 +8,7 @@ use App\DataTables\BachecaDataTable;
8 8
 use App\DataTables\BachecaDataTableEditor;
9 9
 use Illuminate\Support\Facades\Auth;
10 10
 use App\DataTables\ContenutoBachecaDataTable;
11
+use Illuminate\Support\Facades\Session;
11 12
 
12 13
 class BachecaController extends Controller
13 14
 {
@@ -29,6 +30,7 @@ class BachecaController extends Controller
29 30
     
30 31
     public function index(BachecaDataTable $dataTable)
31 32
     {
33
+        $dataTable->attivita_id = Session::get('attivita_attuale');
32 34
         return $dataTable->render('bacheca.index');
33 35
     }
34 36
     

+ 1
- 0
app/Http/Controllers/ContenutoBachecaController.php Datei anzeigen

@@ -29,6 +29,7 @@ class ContenutoBachecaController extends Controller
29 29
     
30 30
     public function index(ContenutoBachecaDataTable $dataTable)
31 31
     {
32
+        $dataTable->attivita_id = Session::get('attivita_attuale');
32 33
         return $dataTable->render('contenuto_bacheca.index');
33 34
     }
34 35
     

+ 2
- 0
app/Http/Controllers/MonitorController.php Datei anzeigen

@@ -10,6 +10,7 @@ use App\DataTables\MonitorDataTable;
10 10
 use App\DataTables\MonitorDataTableEditor;
11 11
 use Illuminate\Support\Facades\Auth;
12 12
 use Carbon\Carbon;
13
+use Illuminate\Support\Facades\Session;
13 14
 
14 15
 
15 16
 class MonitorController extends Controller
@@ -32,6 +33,7 @@ class MonitorController extends Controller
32 33
     
33 34
     public function index(MonitorDataTable $dataTable)
34 35
     {
36
+        $dataTable->attivita_id = Session::get('attivita_attuale');
35 37
         return $dataTable->render('monitor.index');
36 38
     }
37 39
     public function store(MonitorDataTableEditor $editor)

+ 5
- 0
app/Models/AbstractModels/AbstractAttivita.php Datei anzeigen

@@ -131,4 +131,9 @@ abstract class AbstractAttivita extends \Illuminate\Foundation\Auth\User
131 131
     {
132 132
         return $this->hasMany('\App\Models\MetodoPagamento', 'attivita_id', 'id');
133 133
     }
134
+
135
+    public function categorie_contabili()
136
+    {
137
+        return $this->hasMany('\App\Models\Categoriacontabile', 'attivita_id', 'id');
138
+    }
134 139
 }

+ 2
- 0
app/Models/AbstractModels/AbstractCategoriacontabile.php Datei anzeigen

@@ -41,6 +41,7 @@ abstract class AbstractCategoriacontabile extends \Illuminate\Foundation\Auth\Us
41 41
         'is_attiva' => 'boolean',
42 42
         'colore' => 'string',
43 43
         'info' => 'json',
44
+        'attivita_id' => 'integer',
44 45
         'created_at' => 'datetime',
45 46
         'updated_at' => 'datetime'
46 47
     ];
@@ -57,6 +58,7 @@ abstract class AbstractCategoriacontabile extends \Illuminate\Foundation\Auth\Us
57 58
         'is_attiva',
58 59
         'colore',
59 60
         'info',
61
+        'attivita_id',
60 62
         'created_at',
61 63
         'updated_at'
62 64
     ];

+ 15
- 1
app/Models/AbstractModels/AbstractContenutoBacheca.php Datei anzeigen

@@ -39,6 +39,7 @@ abstract class AbstractContenutoBacheca extends \Illuminate\Foundation\Auth\User
39 39
         'nome' => 'string',
40 40
         'descrizione' => 'string',
41 41
         'immagine' => 'string',
42
+        'attivita_id' => 'integer',
42 43
         'created_at' => 'datetime',
43 44
         'updated_at' => 'datetime'
44 45
     ];  
@@ -52,8 +53,21 @@ abstract class AbstractContenutoBacheca extends \Illuminate\Foundation\Auth\User
52 53
         'nome',
53 54
         'descrizione',
54 55
         'immagine',
56
+        'attivita_id',
55 57
         'created_at',
56 58
         'updated_at'
57 59
     ];
58
-    
60
+
61
+    public function attivita()
62
+    {
63
+        return $this->belongsTo('\App\Models\Attivita', 'attivita_id', 'id');
64
+    }
65
+    public function bacheca_has_contenuto()
66
+    {
67
+        return $this->hasMany('\App\Models\BachecaHasContenuto', 'contenuto_id', 'id');
68
+    }
69
+    public function bacheche()
70
+    {
71
+        return $this->belongsToMany('\App\Models\Bacheca', 'bacheca_has_contenuto', 'contenuto_id', 'bacheca_id');
72
+    }
59 73
 }

+ 30
- 0
database/migrations/2026_06_17_201520_fix_categoria_contabiles.php Datei anzeigen

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::table('categoria_contabile', function (Blueprint $table) {
15
+            $table->dropUnique(['nome']);
16
+            $table->unique(['attivita_id', 'nome']);
17
+        });
18
+    }
19
+
20
+    /**
21
+     * Reverse the migrations.
22
+     */
23
+    public function down(): void
24
+    {
25
+        Schema::table('categoria_contabile', function (Blueprint $table) {
26
+            $table->dropUnique(['attivita_id', 'nome']);
27
+            $table->unique(['nome']);
28
+        });
29
+    }
30
+};

+ 30
- 0
database/migrations/2026_06_17_204059_fix_contenuto_bacheca.php Datei anzeigen

@@ -0,0 +1,30 @@
1
+<?php
2
+
3
+use Illuminate\Database\Migrations\Migration;
4
+use Illuminate\Database\Schema\Blueprint;
5
+use Illuminate\Support\Facades\Schema;
6
+
7
+return new class extends Migration
8
+{
9
+    /**
10
+     * Run the migrations.
11
+     */
12
+    public function up(): void
13
+    {
14
+        Schema::table('contenuto_bacheca', function (Blueprint $table) {
15
+            $table->bigInteger('attivita_id')->unsigned()->nullable()->after('id');
16
+            $table->foreign('attivita_id')->references('id')->on('attivita')->onDelete('cascade');
17
+        });
18
+    }
19
+
20
+    /**
21
+     * Reverse the migrations.
22
+     */
23
+    public function down(): void
24
+    {
25
+        Schema::table('contenuto_bacheca', function (Blueprint $table) {
26
+            $table->dropForeign(['attivita_id']);
27
+            $table->dropColumn('attivita_id');
28
+        });
29
+    }
30
+};

+ 1
- 0
database/seeders/DatabaseSeeder.php Datei anzeigen

@@ -19,6 +19,7 @@ class DatabaseSeeder extends Seeder
19 19
     $this->call(AllergeneSeed::class);
20 20
     $this->call(TombolaSeed::class);
21 21
     $this->call(MetodoPagamentoSeed::class);
22
+    $this->call(CategoriaContabileSeed::class);
22 23
     // Per ogni attività: cucine seed + almeno 9 piatti per cucina (anche cucine già esistenti con stessa attività).
23 24
     $this->call(AttivitaCucinaPiattiSeeder::class);
24 25
 

+ 1
- 1
resources/menu/verticalMenu.json Datei anzeigen

@@ -239,7 +239,7 @@
239 239
       "icon": "menu-icon icon-base bx bx-cog",
240 240
       "slug": "configurazione.index",
241 241
       "url": "admin/configurazione",
242
-      "can": "permission:view-configurazione | role:amministratore",
242
+      "can": "permission:view-configurazione | role:amministratore | role:superadmin",
243 243
       "submenu": [
244 244
         {
245 245
           "name": "Allergeni",

Laden…
Abbrechen
Speichern