Files
WMS/Modules/Company/Http/Controllers/CompanyAddressController.php
2026-09-21 10:14:57 +01:00

64 lines
2.5 KiB
PHP
Executable File

<?php
namespace Modules\Company\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Validation\Rule;
use Modules\Company\Models\Company;
use Modules\Company\Models\CompanyDivision;
use Modules\Warehouse\app\Models\Warehouse;
class CompanyAddressController extends Controller
{
private const MAX_STRING = 'max:255';
public function updateCompany(Request $request, Company $company)
{
$this->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', self::MAX_STRING],
'line_1' => ['required', 'string', self::MAX_STRING],
'line_2' => ['nullable', 'string', self::MAX_STRING],
'line_3' => ['nullable', 'string', self::MAX_STRING],
'locality' => ['required', 'string', self::MAX_STRING],
'administrative_area' => ['nullable', 'string', self::MAX_STRING],
'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);
}
}