partner_id) { $this->redirect(route('dashboard'), navigate: true); return; } $role = $user->roles->first(); if ($role) { $this->roleIcon = $role->icon ?? 'shield-check'; $this->roleName = $role->display_name ?? $role->name; } $this->partner = Partner::with('users')->findOrFail($user->partner_id); $this->partnerType = $this->partner->type?->value ?? ''; // Vorausfüllen: Partner-Daten $this->companyName = $this->partner->company_name ?? ''; $this->displayName = $this->partner->display_name ?? ''; $this->salutation = $this->partner->salutation ?? ''; $this->firstName = $this->partner->first_name ?? ''; $this->lastName = $this->partner->last_name ?? ''; $this->description = $this->partner->description ?? ''; $this->street = $this->partner->street ?? ''; $this->houseNumber = $this->partner->house_number ?? ''; $this->zip = $this->partner->zip ?? ''; $this->city = $this->partner->city ?? ''; $this->country = $this->partner->country ?? 'Deutschland'; $this->phone = $this->partner->phone ?? ''; $this->website = $this->partner->website ?? ''; $this->deliveryRadius = $this->partner->delivery_radius_km; $this->assemblyRadius = $this->partner->assembly_radius_km; // Ersetze Platzhalter wie "roles.broker M10000004" durch Übersetzung + ID if(strpos($this->companyName, 'roles.') !== false) { $parts = explode(' ', $this->companyName, 2); $translatedRole = isset($parts[0]) ? __($parts[0]) : $this->companyName; $partnerId = isset($parts[1]) ? ' ' . $parts[1] : ''; $this->companyName = $translatedRole . $partnerId; } // Namen aus User übernehmen, falls Partner-Felder leer sind if (empty($this->firstName) && empty($this->lastName)) { $nameParts = explode(' ', $user->name, 2); $this->firstName = $nameParts[0] ?? ''; $this->lastName = $nameParts[1] ?? ''; } // Marke laden für Manufacturer if (strtolower(str_replace('-', '', $this->partnerType)) === 'manufacturer') { $brand = Brand::where('partner_id', $this->partner->id)->first(); if ($brand) { $this->brandName = $brand->name; $this->brandDescription = $brand->description ?? ''; } } } public function saveData(): void { $normalizedType = strtolower(str_replace('-', '', $this->partnerType)); $isCustomer = $normalizedType === 'customer'; $isBroker = $normalizedType === 'broker' || $normalizedType === 'estateagent'; $isRetailer = $normalizedType === 'retailer'; $isManufacturer = $normalizedType === 'manufacturer'; $rules = [ 'salutation' => 'required|in:Herr,Frau,Divers', 'firstName' => 'required|string|max:255', 'lastName' => 'required|string|max:255', 'street' => 'required|string|max:255', 'houseNumber' => 'required|string|max:20', 'zip' => 'required|string|max:10', 'city' => 'required|string|max:255', 'country' => 'required|string|max:255', 'phone' => 'nullable|string|max:50', ]; if (!$isCustomer) { $rules['companyName'] = 'required|string|max:255'; $rules['description'] = 'nullable|string|max:1000'; $rules['website'] = 'nullable|url|max:255'; } if ($isBroker) { $rules['displayName'] = 'required|string|max:255'; } if ($isRetailer) { $rules['deliveryRadius'] = 'required|integer|min:1|max:500'; $rules['assemblyRadius'] = 'required|integer|min:1|max:500'; } if ($isManufacturer) { $rules['brandName'] = 'required|string|max:255'; $rules['brandDescription'] = 'nullable|string|max:1000'; } $this->validate($rules, [ 'salutation.required' => __('Bitte wählen Sie eine Anrede.'), 'firstName.required' => __('Bitte geben Sie einen Vornamen ein.'), 'lastName.required' => __('Bitte geben Sie einen Nachnamen ein.'), 'companyName.required' => __('Bitte geben Sie einen Firmennamen ein.'), 'displayName.required' => __('Bitte geben Sie einen Anzeigenamen ein.'), 'street.required' => __('Bitte geben Sie eine Straße ein.'), 'houseNumber.required' => __('Bitte geben Sie eine Hausnummer ein.'), 'zip.required' => __('Bitte geben Sie eine Postleitzahl ein.'), 'city.required' => __('Bitte geben Sie eine Stadt ein.'), 'country.required' => __('Bitte wählen Sie ein Land.'), 'website.url' => __('Bitte geben Sie eine gültige URL ein.'), 'deliveryRadius.required' => __('Bitte geben Sie einen Lieferradius ein.'), 'deliveryRadius.min' => __('Der Lieferradius muss mindestens 1 km betragen.'), 'assemblyRadius.required' => __('Bitte geben Sie einen Montageradius ein.'), 'assemblyRadius.min' => __('Der Montageradius muss mindestens 1 km betragen.'), 'brandName.required' => __('Bitte geben Sie einen Markennamen ein.'), ]); // Update Partner $updateData = [ 'salutation' => $this->salutation, 'first_name' => $this->firstName, 'last_name' => $this->lastName, 'street' => $this->street, 'house_number' => $this->houseNumber, 'zip' => $this->zip, 'city' => $this->city, 'country' => $this->country, 'phone' => $this->phone, ]; if (!$isCustomer) { $updateData['company_name'] = $this->companyName; $updateData['description'] = $this->description; $updateData['website'] = $this->website; } if ($isBroker) { $updateData['display_name'] = $this->displayName; } if ($isRetailer) { $updateData['delivery_radius_km'] = $this->deliveryRadius; $updateData['assembly_radius_km'] = $this->assemblyRadius; } $this->partner->update($updateData); // Für Manufacturer: Marke aktualisieren oder erstellen if ($isManufacturer) { Brand::updateOrCreate( ['partner_id' => $this->partner->id], [ 'name' => $this->brandName, 'slug' => Str::slug($this->brandName), 'description' => $this->brandDescription, 'is_active' => true, ] ); } session()->flash('message', __('Ihre Daten wurden erfolgreich aktualisiert.')); } }; ?>