feat(phone): split phone number components into separate fields and update related models and resources

This commit is contained in:
2026-09-30 13:39:24 -03:00
parent 77dd0e2715
commit f3e226130f
6 changed files with 201 additions and 2 deletions

View File

@@ -11,6 +11,9 @@ class AdminAppContextService
{
$tenant = $user->tenant()
->with([
'socialMedia',
'addresses',
'phoneNumbers',
'menues' => fn ($query) => $query
->whereHas(
'roles',

View File

@@ -8,7 +8,27 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany;
class PhoneNumber extends Model
{
protected $fillable = ['label', 'number'];
protected $attributes = ['country_code' => '+54', 'mobile_prefix' => '9'];
protected $fillable = ['label', 'country_code', 'mobile_prefix', 'area_code', 'local_number'];
public function getNumberAttribute(?string $legacyNumber): string
{
if ($this->local_number === null) {
return $legacyNumber ?? '';
}
$areaCode = $this->mobile_prefix && $this->area_code
? '('.$this->area_code.')'
: $this->area_code;
return implode(' ', array_filter([
$this->country_code,
$this->mobile_prefix,
$areaCode,
$this->local_number,
], fn ($part): bool => $part !== null && $part !== ''));
}
public static function dialableNumber(string $number): string
{
@@ -17,7 +37,18 @@ class PhoneNumber extends Model
public function telUrl(): string
{
return 'tel:'.self::dialableNumber($this->number);
if ($this->country_code === null || $this->local_number === null) {
return 'tel:'.self::dialableNumber($this->number);
}
$areaCode = $this->area_code ?? '';
if ($this->country_code === '+54') {
$areaCode = ltrim($areaCode, '0');
}
return 'tel:'.self::dialableNumber(
$this->country_code.($this->mobile_prefix ?? '').$areaCode.$this->local_number
);
}
public function tenants(): BelongsToMany

View File

@@ -12,6 +12,10 @@ class PhoneNumberResource extends JsonResource
return [
'id' => $this->id,
'label' => $this->label,
'country_code' => $this->country_code,
'mobile_prefix' => $this->mobile_prefix,
'area_code' => $this->area_code,
'local_number' => $this->local_number,
'number' => $this->number,
'tel_url' => $this->resource->telUrl(),
'is_main' => $this->whenPivotLoaded('tenant_phone_numbers', fn () => (bool) $this->pivot->is_main),