2025-03-05 20:43:35 -06:00

161 lines
3.7 KiB
PHP

<?php
namespace Koneko\VuexyStoreManager\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Koneko\VuexyAdmin\Models\User;
use Koneko\SatCatalogs\Models\CodigoPostal;
use Koneko\SatCatalogs\Models\Colonia;
use Koneko\SatCatalogs\Models\Estado;
use Koneko\SatCatalogs\Models\Municipio;
use Koneko\SatCatalogs\Models\RegimenFiscal;
class Store extends Model
{
use HasFactory;
// Valores GPS por defecto
const LATITUDE_DEFAULT = 19.0436;
const LONGITUDE_DEFAULT = -98.1980;
protected $fillable = [
'code',
'name',
'description',
'manager_id',
'c_pais',
'c_codigo_postal',
'c_estado',
'c_municipio',
'c_localidad',
'c_colonia',
'direccion',
'num_ext',
'num_int',
'lat',
'lng',
'email',
'tel',
'tel2',
'rfc',
'nombre_fiscal',
'c_regimen_fiscal',
'domicilio_fiscal',
'show_on_website',
'enable_ecommerce',
'status',
];
protected $casts = [
'show_on_website' => 'boolean',
'enable_ecommerce' => 'boolean',
'status' => 'boolean',
];
/**
* Nombre de la etiqueta para generar Componentes
*
* @var string
*/
public $tagName = 'Store';
/**
* Nombre de la columna que contiee el nombre del registro
*
* @var string
*/
public $columnNameLabel = 'name';
/**
* Nombre singular del registro.
*
* @var string
*/
public $singularName = 'sucursal';
/**
* Nombre plural del registro.
*
* @var string
*/
public $pluralName = 'sucursales';
/**
* Relación con el catálogo de códigos postales SAT.
*/
public function codigoPostal(): BelongsTo
{
return $this->belongsTo(CodigoPostal::class, 'c_codigo_postal', 'c_codigo_postal');
}
/**
* Relación con el catálogo de estados SAT.
*/
public function estado(): BelongsTo
{
return $this->belongsTo(Estado::class, 'c_estado', 'c_estado');
}
/**
* Relación con el catálogo de municipios SAT.
*/
public function municipio(): BelongsTo
{
return $this->belongsTo(Municipio::class, 'c_municipio', 'c_municipio');
}
/**
* Relación con el catálogo de colonias SAT.
*/
public function colonia(): BelongsTo
{
return $this->belongsTo(Colonia::class, 'c_colonia', 'c_colonia');
}
/**
* Relación con el régimen fiscal SAT.
*/
public function regimenFiscal(): BelongsTo
{
return $this->belongsTo(RegimenFiscal::class, 'c_regimen_fiscal', 'c_regimen_fiscal');
}
/**
* Relación con el domicilio fiscal (Código Postal SAT).
*/
public function domicilioFiscal(): BelongsTo
{
return $this->belongsTo(CodigoPostal::class, 'domicilio_fiscal', 'c_codigo_postal');
}
public function workCenters(): HasMany
{
return $this->hasMany(StoreWorkCenter::class);
}
public function warehouses(): HasMany
{
return $this->hasMany(Warehouses::class);
}
public function manager(): BelongsTo
{
return $this->belongsTo(User::class, 'manager_id');
}
public function scopeActive($query)
{
return $query->where('status', true);
}
public function getFullAddressAttribute()
{
return "{$this->direccion}, {$this->num_ext}, {$this->num_int}, {$this->c_colonia}, {$this->c_municipio}, {$this->c_estado}, {$this->c_pais}";
}
}