first commit

This commit is contained in:
2025-03-05 20:43:35 -06:00
commit aa938a3cab
47 changed files with 4388 additions and 0 deletions

40
Models/Currency.php Normal file
View File

@ -0,0 +1,40 @@
<?php
namespace Koneko\VuexyStoreManager\Models;
use Illuminate\Database\Eloquent\Model;
class Currency extends Model
{
const STATUS_ENABLED = 10;
const STATUS_DISABLED = 1;
const STATUS_REMOVED = 0;
protected $fillable = [
'c_currency',
'symbol',
'used_in_purchases',
'used_in_sales',
'used_in_ecommerce',
'main_currency',
'auto_update_exchange_rates',
'update_interval',
'status'
];
protected $casts = [
'used_in_purchases' => 'boolean',
'used_in_sales' => 'boolean',
'used_in_ecommerce' => 'boolean',
'main_currency' => 'boolean',
'auto_update_exchange_rates' => 'boolean',
'update_interval' => 'integer',
'status' => 'integer',
];
// Relación con el historial de tipos de cambio
public function exchangeRates()
{
return $this->hasMany(CurrencyExchangeRate::class, 'c_currency', 'c_currency');
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace Koneko\VuexyStoreManager\Models;
use Illuminate\Database\Eloquent\Model;
use Koneko\VuexyAdmin\Models\User;
class CurrencyExchangeRate extends Model
{
protected $table = 'currency_exchange_rates';
protected $fillable = [
'c_currency',
'exchange_rate',
'exchange_date',
'source',
'updated_by',
'comments',
];
protected $casts = [
'exchange_rate' => 'decimal:6',
'exchange_date' => 'date',
'source' => 'string',
'updated_by' => 'integer',
];
// Relación con la moneda
public function currency()
{
return $this->belongsTo(Currency::class, 'c_currency', 'c_currency');
}
// Relación con el usuario que actualizó el tipo de cambio
public function updatedByUser()
{
return $this->belongsTo(User::class, 'updated_by');
}
}

View File

@ -0,0 +1,61 @@
<?php
namespace Koneko\VuexyStoreManager\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Koneko\VuexyAdmin\Models\User;
class EmailTransaction extends Model
{
use HasFactory;
protected $table = 'email_transactions';
protected $primaryKey = 'id';
public $incrementing = false;
protected $keyType = 'mediumint';
protected $fillable = [
'emailable_id',
'emailable_type',
'email_provider',
'smtp_server',
'smtp_port',
'smtp_username',
'subject',
'body',
'recipient',
'cc',
'bcc',
'reply_to',
'sender_name',
'sender_email',
'status',
'error_message',
'created_by',
];
protected $casts = [
'cc' => 'array',
'bcc' => 'array',
'status' => 'integer',
];
/**
* Relación polimórfica con modelos como pedidos, facturas, etc.
*/
public function emailable(): MorphTo
{
return $this->morphTo();
}
/**
* Relación con el usuario que creó el registro.
*/
public function createdBy(): BelongsTo
{
return $this->belongsTo(User::class, 'created_by');
}
}

160
Models/Store.php Normal file
View File

@ -0,0 +1,160 @@
<?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}";
}
}

16
Models/StoreUser.php Normal file
View File

@ -0,0 +1,16 @@
<?php
namespace Koneko\VuexyStoreManager\Models;
use Koneko\VuexyAdmin\Models\User;
use Koneko\VuexyStoreManager\Traits\HasUsersRelations;
class StoreUser extends User
{
use HasUsersRelations;
protected $fillable = [
...parent::FILLABLE,
'store_id',
];
}

View File

@ -0,0 +1,73 @@
<?php
namespace Koneko\VuexyStoreManager\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Koneko\VuexyAdmin\Models\User;
class StoreWorkCenter extends Model
{
protected $fillable = [
'store_id',
'code',
'name',
'description',
'manager_id',
'tel',
'tel2',
'lat',
'lng',
'status',
];
protected $casts = [
'lat' => 'decimal:6',
'lng' => 'decimal:6',
'status' => 'integer',
];
/**
* Nombre de la etiqueta para generar Componentes
*
* @var string
*/
public $tagName = 'WorkCenter';
/**
* Nombre de la columna que contiee el nombre del registro
*
* @var string
*/
public $columnNameLabel = 'name';
/**
* Nombre singular del registro.
*
* @var string
*/
public $singularName = 'centro de trabajo';
/**
* Nombre plural del registro.
*
* @var string
*/
public $pluralName = 'centros de trabajo';
/**
* Relación con la sucursal a la que pertenece el centro de trabajo.
*/
public function store(): BelongsTo
{
return $this->belongsTo(Store::class, 'store_id');
}
/**
* Relación con el usuario que gestiona el centro de trabajo.
*/
public function manager(): BelongsTo
{
return $this->belongsTo(User::class, 'manager_id');
}
}