vinDecoderService = $vinDecoderService; } public function mount(Vehicle $vehicle) { $this->vehicle = $vehicle; $this->customer_id = $vehicle->customer_id; $this->vin = $vehicle->vin; $this->make = $vehicle->make; $this->model = $vehicle->model; $this->year = $vehicle->year; $this->color = $vehicle->color; $this->license_plate = $vehicle->license_plate; $this->engine_type = $vehicle->engine_type; $this->transmission = $vehicle->transmission; $this->mileage = $vehicle->mileage; $this->notes = $vehicle->notes; $this->status = $vehicle->status; } public function decodeVin() { // Clear previous messages $this->vinDecodeError = ''; $this->vinDecodeSuccess = ''; // Validate VIN format first if (strlen(trim($this->vin)) !== 17) { $this->vinDecodeError = 'VIN must be exactly 17 characters long.'; return; } $this->isDecodingVin = true; try { $result = $this->vinDecoderService->decodeVin($this->vin); if ($result['success']) { $data = $result['data']; // Ask user before overwriting existing data $updatedFields = []; if (!empty($data['make']) && $data['make'] !== $this->make) { $this->make = $data['make']; $updatedFields[] = 'Make'; } if (!empty($data['model']) && $data['model'] !== $this->model) { $this->model = $data['model']; $updatedFields[] = 'Model'; } if (!empty($data['year']) && $data['year'] != $this->year) { $this->year = $data['year']; $updatedFields[] = 'Year'; } if (!empty($data['engine_type']) && $data['engine_type'] !== $this->engine_type) { $this->engine_type = $data['engine_type']; $updatedFields[] = 'Engine'; } if (!empty($data['transmission']) && $data['transmission'] !== $this->transmission) { $this->transmission = $data['transmission']; $updatedFields[] = 'Transmission'; } // Show success message if (!empty($updatedFields)) { $this->vinDecodeSuccess = 'VIN decoded successfully! Updated: ' . implode(', ', $updatedFields); } else { $this->vinDecodeSuccess = 'VIN decoded successfully! No changes needed - current data matches VIN.'; } // Show error codes if any if (!empty($data['error_codes'])) { $this->vinDecodeError = 'VIN decoded with warnings: ' . implode(', ', array_slice($data['error_codes'], 0, 2)); } } else { $this->vinDecodeError = $result['error']; } } catch (\Exception $e) { $this->vinDecodeError = 'An unexpected error occurred while decoding the VIN.'; } finally { $this->isDecodingVin = false; } } public function updateVehicle() { // Update validation rules to exclude current vehicle's unique fields $this->validate([ 'customer_id' => 'required|exists:customers,id', 'vin' => 'required|string|size:17|unique:vehicles,vin,' . $this->vehicle->id, 'make' => 'required|string|max:255', 'model' => 'required|string|max:255', 'year' => 'required|integer|min:1900|max:2030', 'color' => 'required|string|max:255', 'license_plate' => 'required|string|max:20|unique:vehicles,license_plate,' . $this->vehicle->id, 'engine_type' => 'nullable|string|max:255', 'transmission' => 'nullable|string|max:255', 'mileage' => 'required|integer|min:0|max:999999', 'notes' => 'nullable|string|max:1000', 'status' => 'required|in:active,inactive,sold', 'vehicle_image' => 'nullable|image|max:2048', ]); // Handle vehicle image upload $updateData = [ 'customer_id' => $this->customer_id, 'vin' => strtoupper($this->vin), 'make' => $this->make, 'model' => $this->model, 'year' => $this->year, 'color' => $this->color, 'license_plate' => strtoupper($this->license_plate), 'engine_type' => $this->engine_type, 'transmission' => $this->transmission, 'mileage' => $this->mileage, 'notes' => $this->notes, 'status' => $this->status, ]; if ($this->vehicle_image) { // Delete old image if exists if ($this->vehicle->vehicle_image) { \Storage::disk('public')->delete($this->vehicle->vehicle_image); } // Store new image $updateData['vehicle_image'] = $this->vehicle_image->store('vehicles', 'public'); } $this->vehicle->update($updateData); session()->flash('success', 'Vehicle updated successfully!'); return $this->redirect('/vehicles/' . $this->vehicle->id, navigate: true); } public function render() { $customers = Customer::where('status', 'active')->orderBy('first_name')->get(); return view('livewire.vehicles.edit', [ 'customers' => $customers, ]); } }