Files
pos_heidiver/app/Models/Tela.php
T
2026-01-29 23:08:32 -05:00

64 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Tela extends Model
{
protected $fillable = [
'codigo',
'tipo',
'color',
'proveedor_id',
'metros_comprados',
'fecha_compra',
'valor_total',
'costo_por_metro',
'observaciones',
];
protected $casts = [
'valor_total' => 'decimal:2',
'costo_por_metro' => 'decimal:2',
];
public function proveedor()
{
return $this->belongsTo(Proveedor::class);
}
public function ordenesProduccion()
{
return $this->hasMany(OrdenProduccion::class);
}
// Calcular metros disponibles dinámicamente
public function getMetrosDisponiblesAttribute()
{
$metrosComprados = (float) ($this->attributes['metros_comprados'] ?? 0);
$metrosUsados = (float) $this->ordenesProduccion()->sum('metros_requeridos');
return max(0, $metrosComprados - $metrosUsados);
}
protected static function booted()
{
static::saving(function ($tela) {
// Protección temporal: si la columna en la BD aún es integer, convertir a entero
try {
$type = \Illuminate\Support\Facades\Schema::getColumnType('telas', 'costo_por_metro');
if ($type === 'integer') {
$tela->costo_por_metro = (int) round($tela->costo_por_metro ?? 0);
}
$typeVal = \Illuminate\Support\Facades\Schema::getColumnType('telas', 'valor_total');
if ($typeVal === 'integer') {
$tela->valor_total = (int) round($tela->valor_total ?? 0);
}
} catch (\Exception $e) {
// Ignorar si no se puede determinar el tipo de columna (por ejemplo en pruebas antes de migraciones)
}
});
}
}