orderBy('created_at', 'desc') ->paginate(15); return view('admin.dati-bancari.index', compact('datiBancari')); } /** * Display a listing of the resource for a specific stabile. */ public function indexByStabile(Stabile $stabile) { $datiBancari = $stabile->datiBancari() ->with('contatto') ->orderBy('created_at', 'desc') ->get(); $contattiRubrica = RubricaUniversale::categoria('banca') ->attivi() ->orderBy('nome_completo') ->get(); return response()->json([ 'success' => true, 'data' => $datiBancari, 'contatti' => $contattiRubrica ]); } /** * Show the form for creating a new resource. */ public function create() { $stabili = Stabile::orderBy('denominazione')->get(); $contattiBanca = RubricaUniversale::categoria('banca') ->attivi() ->orderBy('nome_completo') ->get(); return view('admin.dati-bancari.create', compact('stabili', 'contattiBanca')); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validated = $request->validate([ 'stabile_id' => 'required|exists:stabili,id', 'contatto_id' => 'nullable|exists:rubrica_universale,id', 'tipo_conto' => 'required|in:corrente,deposito,risparmio', 'denominazione_banca' => 'required|string|max:255', 'numero_conto' => 'nullable|string|max:50', 'iban' => 'required|string|max:34', 'abi' => 'nullable|string|max:5', 'cab' => 'nullable|string|max:5', 'cin' => 'nullable|string|max:1', 'bic_swift' => 'nullable|string|max:11', 'intestazione_conto' => 'required|string|max:255', 'data_saldo_iniziale' => 'required|date', 'saldo_iniziale' => 'required|numeric', 'valuta' => 'required|string|max:3', 'stato_conto' => 'required|in:attivo,chiuso,sospeso', 'note' => 'nullable|string' ]); $validated['creato_da'] = Auth::id(); $datoBancario = DatiBancari::create($validated); return redirect() ->route('admin.dati-bancari.show', $datoBancario) ->with('success', 'Dati bancari creati con successo.'); } /** * Store a newly created resource for a specific stabile. */ public function storeForStabile(Request $request, Stabile $stabile) { $validated = $request->validate([ 'contatto_id' => 'nullable|exists:rubrica_universale,id', 'tipo_conto' => 'required|in:corrente,deposito,risparmio', 'denominazione_banca' => 'required|string|max:255', 'numero_conto' => 'nullable|string|max:50', 'iban' => 'required|string|max:34', 'abi' => 'nullable|string|max:5', 'cab' => 'nullable|string|max:5', 'cin' => 'nullable|string|max:1', 'bic_swift' => 'nullable|string|max:11', 'intestazione_conto' => 'required|string|max:255', 'data_saldo_iniziale' => 'required|date', 'saldo_iniziale' => 'required|numeric', 'valuta' => 'required|string|max:3', 'stato_conto' => 'required|in:attivo,chiuso,sospeso', 'note' => 'nullable|string' ]); $validated['stabile_id'] = $stabile->id; $validated['creato_da'] = Auth::id(); $datoBancario = DatiBancari::create($validated); return response()->json([ 'success' => true, 'message' => 'Dati bancari creati con successo.', 'data' => $datoBancario->load('contatto') ]); } /** * Display the specified resource. */ public function show(DatiBancari $datiBancari) { $datiBancari->load(['stabile', 'contatto', 'createdBy', 'updatedBy']); return view('admin.dati-bancari.show', compact('datiBancari')); } /** * Show the form for editing the specified resource. */ public function edit(DatiBancari $datiBancari) { $stabili = Stabile::orderBy('denominazione')->get(); $contattiBanca = RubricaUniversale::categoria('banca') ->attivi() ->orderBy('nome_completo') ->get(); return view('admin.dati-bancari.edit', compact('datiBancari', 'stabili', 'contattiBanca')); } /** * Update the specified resource in storage. */ public function update(Request $request, DatiBancari $datiBancari) { $validated = $request->validate([ 'contatto_id' => 'nullable|exists:rubrica_universale,id', 'tipo_conto' => 'required|in:corrente,deposito,risparmio', 'denominazione_banca' => 'required|string|max:255', 'numero_conto' => 'nullable|string|max:50', 'iban' => 'required|string|max:34', 'abi' => 'nullable|string|max:5', 'cab' => 'nullable|string|max:5', 'cin' => 'nullable|string|max:1', 'bic_swift' => 'nullable|string|max:11', 'intestazione_conto' => 'required|string|max:255', 'data_saldo_iniziale' => 'required|date', 'saldo_iniziale' => 'required|numeric', 'valuta' => 'required|string|max:3', 'stato_conto' => 'required|in:attivo,chiuso,sospeso', 'note' => 'nullable|string' ]); $validated['modificato_da'] = Auth::id(); $datiBancari->update($validated); return redirect() ->route('admin.dati-bancari.show', $datiBancari) ->with('success', 'Dati bancari aggiornati con successo.'); } /** * Remove the specified resource from storage. */ public function destroy(DatiBancari $datiBancari) { $stabileId = $datiBancari->stabile_id; $datiBancari->delete(); return redirect() ->route('admin.stabili.show', $stabileId) ->with('success', 'Dati bancari eliminati con successo.'); } /** * Get current balance for a specific account (API). */ public function getSaldoAttuale(DatiBancari $conto) { // Qui implementeremmo il calcolo del saldo attuale // basato sui movimenti contabili - per ora restituiamo il saldo iniziale return response()->json([ 'success' => true, 'saldo_iniziale' => $conto->saldo_iniziale, 'saldo_attuale' => $conto->saldo_iniziale, // TODO: Calcolo movimenti 'ultimo_aggiornamento' => $conto->updated_at->format('d/m/Y H:i') ]); } }