get('year', now()->year); $monthName = $request->get('month'); // Obtener meses del usuario $months = $user->months() ->where('year', $year) ->get() ->keyBy('name'); // Si se especifica mes, mostrar ese mes if ($monthName) { $currentMonth = $months->get($monthName); } else { // Si no, buscar mes abierto o el último del año $currentMonth = $user->months() ->where('year', $year) ->orderByRaw("FIELD(name, 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre')") ->first(); } // Obtener ventas diarias del mes actual $dailySales = []; if ($currentMonth) { $sales = $currentMonth->dailySales()->get()->keyBy('date'); foreach ($sales as $sale) { $dailySales[$sale->date->format('Y-m-d')] = $sale; } } // Obtener gastos del mes $expenses = []; if ($currentMonth) { $expenseList = $currentMonth->expenses()->get(); foreach ($expenseList as $expense) { $expenses[$expense->date->format('Y-m-d')] = $expense; } } return view('calendar.index', compact('year', 'months', 'currentMonth', 'dailySales', 'expenses')); } /** * Obtener datos de un día específico (para AJAX) */ public function day(Request $request) { $user = Auth::user(); $date = $request->get('date'); if (!$date) { return response()->json(['error' => 'Fecha requerida'], 400); } // Buscar venta del día $sale = DailySale::whereHas('month', function ($query) use ($user) { $query->where('user_id', $user->id); }) ->where('date', $date) ->first(); // Buscar gastos del día $expenses = $user->expenses() ->where('date', $date) ->get(); return response()->json([ 'date' => $date, 'sale' => $sale, 'expenses' => $expenses, ]); } /** * Guardar venta y gasto del día (para AJAX) */ public function storeDay(Request $request) { $user = Auth::user(); $data = $request->all(); $monthId = $request->input('month_id'); $date = $request->input('date'); $userSales = floatval($request->input('user_sales', 0)); $systemSales = floatval($request->input('system_sales', 0)); $expenseAmount = floatval($request->input('expense_amount', 0)); if (!$monthId || !$date) { return response()->json(['success' => false, 'message' => 'Faltan datos requeridos']); } $month = Month::where('id', $monthId) ->where('user_id', $user->id) ->first(); if (!$month) { return response()->json(['success' => false, 'message' => 'Mes no encontrado']); } // Guardar o actualizar venta solo si hay datos if ($userSales > 0) { DailySale::updateOrCreate( [ 'month_id' => $month->id, 'date' => $date, ], [ 'user_id' => $user->id, 'user_sales' => $userSales, 'system_sales' => $systemSales, ] ); } // Guardar o actualizar gasto si hay monto $expenseType = $request->input('expense_type', 'q1'); if ($expenseAmount > 0) { \App\Models\Expense::updateOrCreate( [ 'month_id' => $month->id, 'date' => $date, ], [ 'user_id' => $user->id, 'description' => $request->input('expense_description', 'Gasto del día'), 'amount' => $expenseAmount, 'expense_type' => $expenseType, ] ); } return response()->json(['success' => true, 'message' => 'Datos guardados correctamente']); } }