177 lines
7.3 KiB
PHP
177 lines
7.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\SuperAdmin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Amministratore;
|
|
use App\Models\User;
|
|
use Spatie\Permission\Models\Role;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Validation\Rule;
|
|
use Illuminate\Support\Facades\Gate;
|
|
|
|
|
|
|
|
class AmministratoreController extends Controller
|
|
{
|
|
public function __construct()
|
|
{
|
|
// Proteggi le rotte con i permessi di Spatie
|
|
$this->middleware('permission:view-amministratori', ['only' => ['index']]); // Permesso per visualizzare la lista
|
|
$this->middleware('permission:manage-amministratori', ['except' => ['index']]); // Permesso per tutte le altre azioni CRUD
|
|
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index()
|
|
{
|
|
// Gate::authorize('view-amministratori'); // Il middleware nel costruttore è sufficiente
|
|
$amministratori = Amministratore::with('user')->paginate(10);
|
|
return view('superadmin.amministratori.index', compact('amministratori'));
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*/
|
|
public function create()
|
|
{
|
|
|
|
// Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente
|
|
$usersForSelect = User::doesntHave('amministratore')->get();
|
|
// In questo metodo, non c'è un $amministratore esistente, quindi non c'è un utente associato da includere.
|
|
return view('superadmin.amministratori.create', compact('usersForSelect'));
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
// Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente
|
|
$request->validate([
|
|
'name' => 'required|string|max:255',
|
|
'email' => 'required|string|email|max:255|unique:users,email',
|
|
'password' => 'required|string|min:8|confirmed',
|
|
'nome' => 'required|string|max:255',
|
|
'cognome' => 'required|string|max:255',
|
|
'denominazione_studio' => 'nullable|string|max:255',
|
|
'partita_iva' => 'nullable|string|max:20|unique:amministratori,partita_iva',
|
|
'codice_fiscale_studio' => 'nullable|string|max:20',
|
|
'indirizzo_studio' => 'nullable|string|max:255',
|
|
'cap_studio' => 'nullable|string|max:10',
|
|
'citta_studio' => 'nullable|string|max:60',
|
|
'provincia_studio' => 'nullable|string|max:2',
|
|
'telefono_studio' => 'nullable|string|max:20',
|
|
'email_studio' => 'nullable|string|email|max:255',
|
|
'pec_studio' => 'nullable|string|email|max:255',
|
|
]);
|
|
|
|
$user = User::create([
|
|
'name' => $request->name,
|
|
'email' => $request->email,
|
|
'password' => Hash::make($request->password),
|
|
'email_verified_at' => now(),
|
|
]);
|
|
$user->assignRole('admin'); // Assegna il ruolo 'admin' al nuovo utente per coerenza con le rotte
|
|
|
|
Amministratore::create([
|
|
'user_id' => $user->id,
|
|
'nome' => $request->nome,
|
|
'cognome' => $request->cognome,
|
|
'denominazione_studio' => $request->denominazione_studio,
|
|
'partita_iva' => $request->partita_iva,
|
|
'codice_fiscale_studio' => $request->codice_fiscale_studio,
|
|
'indirizzo_studio' => $request->indirizzo_studio,
|
|
'cap_studio' => $request->cap_studio,
|
|
'citta_studio' => $request->citta_studio,
|
|
'provincia_studio' => $request->provincia_studio,
|
|
'telefono_studio' => $request->telefono_studio,
|
|
'email_studio' => $request->email_studio,
|
|
'pec_studio' => $request->pec_studio,
|
|
]);
|
|
|
|
return redirect()->route('superadmin.amministratori.index')->with('success', 'Amministratore creato con successo.');
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*/
|
|
public function edit(Amministratore $amministratore) // Aggiunto metodo edit
|
|
{
|
|
// Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente
|
|
$usersForSelect = User::doesntHave('amministratore')->get();
|
|
|
|
// Includi l'utente attualmente collegato a questo amministratore nella lista, solo se esiste
|
|
if ($amministratore->user) {
|
|
$usersForSelect->push($amministratore->user);
|
|
}
|
|
return view('superadmin.amministratori.edit', compact('amministratore', 'usersForSelect'));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(Request $request, Amministratore $amministratore)
|
|
{
|
|
// Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente
|
|
// L'utente associato all'amministratore.
|
|
$user = $amministratore->user;
|
|
|
|
// Se per qualche motivo l'utente non esiste, non possiamo procedere.
|
|
if (!$user) {
|
|
return redirect()->route('superadmin.amministratori.index')->with('error', 'Errore: Impossibile modificare. Utente associato non trovato.');
|
|
|
|
}
|
|
|
|
$request->validate([
|
|
// Dati dell'utente associato
|
|
'name' => 'required|string|max:255',
|
|
'email' => ['required', 'string', 'email', 'max:255', Rule::unique('users')->ignore($user->id)],
|
|
|
|
// Dati del profilo amministratore
|
|
'user_id' => ['required', 'exists:users,id', Rule::unique('amministratori')->ignore($amministratore->id_amministratore, 'id_amministratore')],
|
|
'nome' => 'required|string|max:255',
|
|
'cognome' => 'required|string|max:255',
|
|
'denominazione_studio' => 'nullable|string|max:255',
|
|
'partita_iva' => ['nullable', 'string', 'max:20', Rule::unique('amministratori')->ignore($amministratore->id_amministratore, 'id_amministratore')],
|
|
'codice_fiscale_studio' => 'nullable|string|max:20',
|
|
'indirizzo_studio' => 'nullable|string|max:255',
|
|
'cap_studio' => 'nullable|string|max:10',
|
|
'citta_studio' => 'nullable|string|max:255',
|
|
'provincia_studio' => 'nullable|string|max:2',
|
|
'telefono_studio' => 'nullable|string|max:20',
|
|
'email_studio' => 'nullable|email|max:255',
|
|
'pec_studio' => 'nullable|email|max:255',
|
|
]);
|
|
|
|
// Aggiorna i dati dell'utente associato
|
|
$user->update([
|
|
'name' => $request->name,
|
|
'email' => $request->email,
|
|
]);
|
|
|
|
// Aggiorna i dati dell'amministratore, escludendo i campi dell'utente
|
|
$amministratore->update($request->except(['name', 'email', 'password']));
|
|
|
|
|
|
return redirect()->route('superadmin.amministratori.index')->with('success', 'Amministratore aggiornato con successo.');
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy(Amministratore $amministratore)
|
|
{
|
|
// Gate::authorize('manage-amministratori'); // Il middleware nel costruttore è sufficiente
|
|
// Elimina l'utente associato, solo se esiste
|
|
if ($amministratore->user) {
|
|
$amministratore->user->delete();
|
|
}
|
|
$amministratore->delete();
|
|
return redirect()->route('superadmin.amministratori.index')->with('success', 'Amministratore eliminato con successo.');
|
|
}
|
|
} |