You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.4 KiB

<?php
namespace App\Http\Controllers;
use App\Models\Maintenance;
use App\Models\Vehicle;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class MaintenanceController extends Controller
{
public function index()
{
return view('maintenance.dashboard');
}
public function getMaintenanceHistory()
{
$maintenances = Maintenance::with('vehicle')
->orderBy('date', 'desc')
->get();
return response()->json($maintenances);
}
public function getPendingAlerts()
{
$alerts = Maintenance::with('vehicle')
->where('status', 'Pendiente')
->where('next_maintenance_date', '<=', now()->addDays(30))
->orderBy('next_maintenance_date', 'asc')
->get();
return response()->json($alerts);
}
public function store(Request $request)
{
$validated = $request->validate([
'vehicle_id' => 'required|exists:vehicles,id',
'maintenance_type' => 'required|string',
'date' => 'required|date',
'description' => 'required|string',
'cost' => 'required|numeric|min:0',
'status' => 'required|in:Pendiente,En Proceso,Completado',
'next_maintenance_date' => 'nullable|date'
]);
$maintenance = Maintenance::create($validated);
return response()->json([
'message' => 'Mantenimiento registrado exitosamente',
'maintenance' => $maintenance
], 201);
}
public function update(Request $request, Maintenance $maintenance)
{
$validated = $request->validate([
'vehicle_id' => 'required|exists:vehicles,id',
'maintenance_type' => 'required|string',
'date' => 'required|date',
'description' => 'required|string',
'cost' => 'required|numeric|min:0',
'status' => 'required|in:Pendiente,En Proceso,Completado',
'next_maintenance_date' => 'nullable|date'
]);
$maintenance->update($validated);
return response()->json([
'message' => 'Mantenimiento actualizado exitosamente',
'maintenance' => $maintenance
]);
}
public function getVehicles()
{
$vehicles = Vehicle::where('status', 'Activo')->get();
return response()->json($vehicles);
}
}