<?php namespace Koneko\VuexyWarehouse\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Koneko\VuexyStoreManager\Models\Currency; use Koneko\SatCatalogs\Models\ClaveUnidad; use Koneko\SatCatalogs\Models\ClaveProdServ; use Koneko\VuexyAdmin\Models\User; class Product extends Model { use HasFactory; protected $table = 'products'; protected $primaryKey = 'id'; public $incrementing = false; protected $keyType = 'mediumint'; protected $fillable = [ 'type', 'category_id', 'descripcion', 'descripcion_completa', 'no_identificacion', 'slug', 'available_in_pos', 'available_in_purchases', 'available_in_ecommerce', 'available_in_purchases', 'available_in_maanufacturing', 'available_in_quality', 'available_in_assets', 'c_clave_unidad', 'c_clave_prod_serv', 'ean_code', 'costo', 'c_moneda', 'c_objeto_imp', 'impuestos', 'traslados', 'retenciones', 'data_lot_enable', 'data_lot_require', 'data_series_enable', 'data_series_require', 'data_expiration_enable', 'data_expiration_require', 'data_warranty_enable', 'warranty', 'data_best_before_enable', 'data_best_before_require', 'data_observations_enable', 'minimum_unit', 'affects_inventory', 'alert_minimum_stock', 'alert_maximum_stock', 'minimum_stock', 'maximum_stock', 'status', 'created_by' ]; protected $casts = [ 'available_in_pos', 'available_in_purchases' => 'boolean', 'available_in_ecommerce' => 'boolean', 'available_in_purchases' => 'boolean', 'available_in_maanufacturing' => 'boolean', 'available_in_quality' => 'boolean', 'available_in_assets' => 'boolean', 'costo' => 'decimal:2', 'traslados' => 'decimal:6', 'retenciones' => 'decimal:6', 'minimum_unit' => 'decimal:6', 'minimum_stock' => 'decimal:6', 'maximum_stock' => 'decimal:6', 'data_lot_enable' => 'boolean', 'data_lot_require' => 'boolean', 'data_series_enable' => 'boolean', 'data_series_require' => 'boolean', 'data_expiration_enable' => 'boolean', 'data_expiration_require' => 'boolean', 'data_warranty_enable' => 'boolean', 'data_best_before_enable' => 'boolean', 'data_best_before_require' => 'boolean', 'data_observations_enable' => 'boolean', 'affects_inventory' => 'boolean', 'alert_minimum_stock' => 'boolean', 'alert_maximum_stock' => 'boolean', ]; /** * Relación con la categoría del producto. */ public function category(): BelongsTo { return $this->belongsTo(ProductCategory::class, 'category_id'); } /** * Relación con la moneda. */ public function currency(): BelongsTo { return $this->belongsTo(Currency::class, 'c_moneda', 'c_currency'); } /** * Relación con la clave unidad SAT. */ public function claveUnidad(): BelongsTo { return $this->belongsTo(ClaveUnidad::class, 'c_clave_unidad', 'c_clave_unidad'); } /** * Relación con la clave de producto/servicio SAT. */ public function claveProdServ(): BelongsTo { return $this->belongsTo(ClaveProdServ::class, 'c_clave_prod_serv', 'c_clave_prod_serv'); } /** * Relación con el usuario que creó el producto. */ public function createdBy(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); } }