first commit
This commit is contained in:
102
Models/ContactableAddress.php
Normal file
102
Models/ContactableAddress.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
|
||||
namespace Koneko\VuexyAdmin\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ContactableAddress extends Model
|
||||
{
|
||||
protected $table = 'contactable_addresses';
|
||||
|
||||
protected $fillable = [
|
||||
'contactable_id',
|
||||
'contactable_type',
|
||||
'type',
|
||||
'c_pais',
|
||||
'c_codigo_postal',
|
||||
'c_estado',
|
||||
'c_localidad',
|
||||
'c_municipio',
|
||||
'c_colonia',
|
||||
'direccion',
|
||||
'num_ext',
|
||||
'num_int',
|
||||
'referencia',
|
||||
'lat',
|
||||
'lng',
|
||||
'preference_level',
|
||||
'notes'
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
'lat' => 'decimal:6',
|
||||
'lng' => 'decimal:6',
|
||||
'preference_level' => 'integer',
|
||||
];
|
||||
|
||||
/**
|
||||
* Relación polimórfica con cualquier modelo (User, Empresa, etc.)
|
||||
*/
|
||||
public function contactable()
|
||||
{
|
||||
return $this->morphTo();
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene el país de la dirección basado en el catálogo SAT
|
||||
*/
|
||||
public function country()
|
||||
{
|
||||
return $this->belongsTo(SatPais::class, 'c_pais', 'c_pais');
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene el estado basado en el catálogo SAT
|
||||
*/
|
||||
public function state()
|
||||
{
|
||||
return $this->belongsTo(SatEstado::class, ['c_estado', 'c_pais'], ['c_estado', 'c_pais']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene el municipio basado en el catálogo SAT
|
||||
*/
|
||||
public function municipality()
|
||||
{
|
||||
return $this->belongsTo(SatMunicipio::class, ['c_municipio', 'c_estado'], ['c_municipio', 'c_estado']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene la localidad basada en el catálogo SAT
|
||||
*/
|
||||
public function locality()
|
||||
{
|
||||
return $this->belongsTo(SatLocalidad::class, ['c_localidad', 'c_estado'], ['c_localidad', 'c_estado']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Obtiene la colonia basada en el catálogo SAT
|
||||
*/
|
||||
public function neighborhood()
|
||||
{
|
||||
return $this->belongsTo(SatColonia::class, ['c_colonia', 'c_codigo_postal'], ['c_colonia', 'c_codigo_postal']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define si la dirección es preferida
|
||||
*/
|
||||
public function isPreferred()
|
||||
{
|
||||
return $this->preference_level === 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve la dirección en formato legible
|
||||
*/
|
||||
public function getFullAddressAttribute()
|
||||
{
|
||||
return "{$this->direccion}, {$this->num_ext}" .
|
||||
($this->num_int ? " Int. {$this->num_int}" : '') .
|
||||
", {$this->neighborhood->nombre ?? ''}, {$this->municipality->nombre ?? ''}, {$this->state->nombre ?? ''}, {$this->country->nombre ?? ''}";
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user