172 lines
4.8 KiB
PHP
Executable File
172 lines
4.8 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\DailySale;
|
|
use App\Models\Month;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class SaleController extends Controller
|
|
{
|
|
/**
|
|
* Listar todas las ventas del mes actual
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$user = Auth::user();
|
|
|
|
// Obtener mes seleccionado
|
|
$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.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.');
|
|
}
|
|
} |