* * @version 1.0.0 */ class Inventory extends Model { protected $fillable = [ 'category_id', 'name', 'sku', 'barcode', 'stock', 'is_active', ]; protected $casts = [ 'is_active' => 'boolean', ]; protected $appends = ['has_serials']; public function category() { return $this->belongsTo(Category::class); } public function price() { return $this->hasOne(Price::class); } public function serials() { return $this->hasMany(InventorySerial::class); } /** * Obtener seriales disponibles */ public function availableSerials() { return $this->hasMany(InventorySerial::class) ->where('status', 'disponible'); } /** * Calcular stock basado en seriales disponibles */ public function getAvailableStockAttribute(): int { return $this->availableSerials()->count(); } /** * Sincronizar el campo stock con los seriales disponibles */ public function syncStock(): void { $this->update(['stock' => $this->getAvailableStockAttribute()]); } public function getHasSerialsAttribute(): bool { return isset($this->attributes['serials_count']) && $this->attributes['serials_count'] > 0; } }