Initial commit: Sistema de comisiones y gastos personales
This commit is contained in:
152
app/Http/Controllers/ExpenseController.php
Executable file
152
app/Http/Controllers/ExpenseController.php
Executable file
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Expense;
|
||||
use App\Models\Month;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class ExpenseController extends Controller
|
||||
{
|
||||
/**
|
||||
* Listar todos los gastos
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$monthId = $request->get('month_id');
|
||||
|
||||
if ($monthId) {
|
||||
$month = $user->months()->findOrFail($monthId);
|
||||
$expenses = $month->expenses()
|
||||
->orderBy('date', 'desc')
|
||||
->paginate(30);
|
||||
} else {
|
||||
$month = null;
|
||||
$expenses = $user->expenses()
|
||||
->orderBy('date', 'desc')
|
||||
->paginate(30);
|
||||
}
|
||||
|
||||
$months = $user->months()
|
||||
->orderBy('year', 'desc')
|
||||
->orderByRaw("FIELD(name, 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre') DESC")
|
||||
->get();
|
||||
|
||||
return view('expenses.index', compact('expenses', 'month', 'months'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Mostrar formulario para crear gasto
|
||||
*/
|
||||
public function create(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$monthId = $request->get('month_id');
|
||||
|
||||
if ($monthId) {
|
||||
$month = $user->months()->findOrFail($monthId);
|
||||
} else {
|
||||
$month = $user->getCurrentMonth();
|
||||
|
||||
if (!$month) {
|
||||
$month = $user->months()->latest()->first();
|
||||
}
|
||||
}
|
||||
|
||||
if (!$month) {
|
||||
return redirect()->route('months.index')->with('info', 'Necesitas un mes de trabajo primero.');
|
||||
}
|
||||
|
||||
return view('expenses.create', compact('month'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Guardar nuevo gasto
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$validated = $request->validate([
|
||||
'month_id' => ['required', 'exists:months,id'],
|
||||
'description' => ['required', 'string', 'max:255'],
|
||||
'amount' => ['required', 'numeric', 'min:0.01'],
|
||||
'date' => ['required', 'date'],
|
||||
'expense_type' => ['required', 'in:q1,q2,mensual'],
|
||||
]);
|
||||
|
||||
// Verificar que el mes pertenece al usuario
|
||||
$month = $user->months()->findOrFail($validated['month_id']);
|
||||
|
||||
$month->expenses()->create([
|
||||
'user_id' => $user->id,
|
||||
'description' => $validated['description'],
|
||||
'amount' => $validated['amount'],
|
||||
'date' => $validated['date'],
|
||||
'expense_type' => $validated['expense_type'],
|
||||
]);
|
||||
|
||||
return redirect()->route('expenses.index', ['month_id' => $month->id])
|
||||
->with('success', 'Gasto registrado correctamente.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Mostrar formulario de edición
|
||||
*/
|
||||
public function edit(Expense $expense)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
if ($expense->user_id !== $user->id) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
return view('expenses.edit', compact('expense'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Actualizar gasto
|
||||
*/
|
||||
public function update(Request $request, Expense $expense)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
if ($expense->user_id !== $user->id) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$validated = $request->validate([
|
||||
'description' => ['required', 'string', 'max:255'],
|
||||
'amount' => ['required', 'numeric', 'min:0.01'],
|
||||
'date' => ['required', 'date'],
|
||||
'expense_type' => ['required', 'in:q1,q2,mensual'],
|
||||
]);
|
||||
|
||||
$expense->update($validated);
|
||||
|
||||
return redirect()->route('expenses.index', ['month_id' => $expense->month_id])
|
||||
->with('success', 'Gasto actualizado correctamente.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar gasto
|
||||
*/
|
||||
public function destroy(Expense $expense)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
if ($expense->user_id !== $user->id) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
$monthId = $expense->month_id;
|
||||
$expense->delete();
|
||||
|
||||
return redirect()->route('expenses.index', ['month_id' => $monthId])
|
||||
->with('success', 'Gasto eliminado correctamente.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user