fleet_number)) { $prefix = 'FL-'; $latest = Vehicle::where('fleet_number', 'like', $prefix . '%') ->orderBy('fleet_number', 'desc') ->first(); $number = 1; if ($latest) { $parts = explode('-', $latest->fleet_number); $number = intval(end($parts)) + 1; } $vehicle->fleet_number = $prefix . str_pad($number, 4, '0', STR_PAD_LEFT); } } /** * Handle the Vehicle "created" event. */ public function created(Vehicle $vehicle): void { // Create default maintenance schedules $this->createDefaultMaintenanceSchedules($vehicle); } /** * Handle the Vehicle "updated" event. */ public function updated(Vehicle $vehicle) { // If mileage updated, check maintenance schedules if ($vehicle->isDirty('mileage')) { $this->checkMaintenanceSchedules($vehicle); } } /** * Create default maintenance schedules for a new vehicle. */ protected function createDefaultMaintenanceSchedules(Vehicle $vehicle) { // Oil change schedule (every 5,000 miles or 6 months) MaintenanceSchedule::create([ 'vehicle_id' => $vehicle->id, 'name' => 'Oil Change', 'description' => 'Regular oil and filter change', 'mileage_interval' => 5000, 'day_interval' => 180, 'last_performed' => null, 'last_mileage' => $vehicle->mileage, 'next_due_mileage' => $vehicle->mileage + 5000, 'next_due_date' => Carbon::now()->addDays(180), 'is_active' => true, ]); // Tire rotation (every 10,000 miles) MaintenanceSchedule::create([ 'vehicle_id' => $vehicle->id, 'name' => 'Tire Rotation', 'description' => 'Rotate tires to ensure even wear', 'mileage_interval' => 10000, 'day_interval' => null, 'last_performed' => null, 'last_mileage' => $vehicle->mileage, 'next_due_mileage' => $vehicle->mileage + 10000, 'next_due_date' => null, 'is_active' => true, ]); // Full service (every 30,000 miles or yearly) MaintenanceSchedule::create([ 'vehicle_id' => $vehicle->id, 'name' => 'Full Service', 'description' => 'Complete vehicle inspection and service', 'mileage_interval' => 30000, 'day_interval' => 365, 'last_performed' => null, 'last_mileage' => $vehicle->mileage, 'next_due_mileage' => $vehicle->mileage + 30000, 'next_due_date' => Carbon::now()->addDays(365), 'is_active' => true, ]); } /** * Check and update maintenance schedules. */ protected function checkMaintenanceSchedules(Vehicle $vehicle) { $schedules = MaintenanceSchedule::where('vehicle_id', $vehicle->id) ->where('is_active', true) ->get(); foreach ($schedules as $schedule) { // If current mileage exceeds next due mileage, flag for maintenance if ($schedule->next_due_mileage && $vehicle->mileage >= $schedule->next_due_mileage) { // Could trigger notifications here } } } }