Initial commit: Sistema de comisiones y gastos personales
This commit is contained in:
154
app/Http/Controllers/CalendarController.php
Executable file
154
app/Http/Controllers/CalendarController.php
Executable file
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\DailySale;
|
||||
use App\Models\Month;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class CalendarController extends Controller
|
||||
{
|
||||
/**
|
||||
* Mostrar calendario interactivo
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$year = $request->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']);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user