upsertAddress($request, $company); return redirect()->route('platform.companies.show', $company)->with('status', 'Company address updated.'); } public function updateDivision(Request $request, Company $company, CompanyDivision $division) { abort_unless($division->company_id === $company->id, 404); $this->upsertAddress($request, $division, 'Operating address'); return redirect()->route('platform.companies.show', $company)->with('status', 'Division address updated.'); } public function updateWarehouse(Request $request, Company $company, Warehouse $warehouse) { abort_unless($warehouse->company_id === $company->id, 404); $this->upsertAddress($request, $warehouse, 'Warehouse address'); return redirect()->route('platform.companies.show', $company)->with('status', 'Warehouse address updated.'); } private function upsertAddress(Request $request, object $owner, string $defaultLabel = 'Registered office'): void { $data = $request->validate([ 'label' => ['nullable', 'string', 'max:80'], 'attention' => ['nullable', 'string', 'max:255'], 'line_1' => ['required', 'string', 'max:255'], 'line_2' => ['nullable', 'string', 'max:255'], 'line_3' => ['nullable', 'string', 'max:255'], 'locality' => ['required', 'string', 'max:255'], 'administrative_area' => ['nullable', 'string', 'max:255'], 'postal_code' => ['nullable', 'string', 'max:32'], 'country_id' => ['required', Rule::exists('countries', 'id')->where('is_active', true)], 'country_subdivision_id' => ['nullable', 'exists:country_subdivisions,id'], 'latitude' => ['nullable', 'numeric', 'between:-90,90'], 'longitude' => ['nullable', 'numeric', 'between:-180,180'], ]); $data['label'] = $data['label'] ?: $defaultLabel; $data['is_primary'] = true; $owner->address()->updateOrCreate([], $data); } }