62 lines
2.4 KiB
PHP
62 lines
2.4 KiB
PHP
<?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
|
|
{
|
|
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', '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);
|
|
}
|
|
}
|