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.create')->with('info', 'Primero debes crear un mes de trabajo.'); } $sales = $month->dailySales() ->orderBy('date', 'desc') ->paginate(31); $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('sales.index', compact('sales', 'month', 'months')); } /** * Mostrar formulario para crear venta */ 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('sales.create', compact('month')); } /** * Guardar nueva venta */ public function store(Request $request) { $user = Auth::user(); $validated = $request->validate([ 'month_id' => ['required', 'exists:months,id'], 'date' => ['required', 'date'], 'user_sales' => ['required', 'numeric', 'min:0'], 'system_sales' => ['nullable', 'numeric', 'min:0'], ]); // Verificar que el mes pertenece al usuario $month = $user->months()->findOrFail($validated['month_id']); // Verificar si ya existe una venta para esa fecha $existingSale = $month->dailySales()->where('date', $validated['date'])->first(); if ($existingSale) { // Actualizar venta existente $existingSale->update([ 'user_sales' => $validated['user_sales'], 'system_sales' => $validated['system_sales'] ?? $existingSale->system_sales, ]); return redirect()->route('sales.index', ['month_id' => $month->id]) ->with('success', 'Venta actualizada correctamente.'); } // Crear nueva venta $month->dailySales()->create([ 'user_id' => $user->id, 'date' => $validated['date'], 'user_sales' => $validated['user_sales'], 'system_sales' => $validated['system_sales'] ?? 0, ]); return redirect()->route('sales.index', ['month_id' => $month->id]) ->with('success', 'Venta registrada correctamente.'); } /** * Mostrar formulario de edición */ public function edit(DailySale $sale) { $user = Auth::user(); // Verificar que la venta pertenece al usuario if ($sale->user_id !== $user->id) { abort(403); } return view('sales.edit', compact('sale')); } /** * Actualizar venta */ public function update(Request $request, DailySale $sale) { $user = Auth::user(); if ($sale->user_id !== $user->id) { abort(403); } $validated = $request->validate([ 'date' => ['required', 'date'], 'user_sales' => ['required', 'numeric', 'min:0'], 'system_sales' => ['nullable', 'numeric', 'min:0'], ]); $sale->update($validated); return redirect()->route('sales.index', ['month_id' => $sale->month_id]) ->with('success', 'Venta actualizada correctamente.'); } /** * Eliminar venta */ public function destroy(DailySale $sale) { $user = Auth::user(); if ($sale->user_id !== $user->id) { abort(403); } $monthId = $sale->month_id; $sale->delete(); return redirect()->route('sales.index', ['month_id' => $monthId]) ->with('success', 'Venta eliminada correctamente.'); } }