Initial commit: Sistema de comisiones y gastos personales
This commit is contained in:
172
app/Http/Controllers/SaleController.php
Executable file
172
app/Http/Controllers/SaleController.php
Executable file
@@ -0,0 +1,172 @@
|
||||
<?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.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user