Files
pos_heidiver/app/Models/Prensilla.php
T
2026-01-29 20:39:21 -05:00

62 lines
2.0 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Prensilla extends Model
{
protected $fillable = [
'proveedor_id',
'orden_produccion_id',
'tipo',
'fecha_envio',
'cantidad_enviada',
'fecha_recepcion',
'cantidad_recibida',
'perdidas',
'terminada',
];
protected $casts = [
'terminada' => 'boolean',
];
public function proveedor()
{
return $this->belongsTo(Proveedor::class);
}
public function ordenProduccion()
{
return $this->belongsTo(OrdenProduccion::class);
}
protected static function booted()
{
static::creating(function ($p) {
// Validar disponibilidad desde confecciones
$opId = $p->orden_produccion_id;
$totalProducido = \App\Models\Confeccion::where('orden_produccion_id', $opId)->sum('cantidad_recibida');
$yaAsignado = \App\Models\Prensilla::where('orden_produccion_id', $opId)->sum('cantidad_enviada')
+ \App\Models\Ojal::where('orden_produccion_id', $opId)->sum('cantidad_enviada');
if (($yaAsignado + ($p->cantidad_enviada ?? 0)) > $totalProducido) {
throw \Illuminate\Validation\ValidationException::withMessages(['cantidad_enviada' => 'No hay suficientes unidades disponibles desde confecciones para asignar.']);
}
});
static::saved(function ($registro) {
// Si se marca como terminada, crear traslado automático a tintororía
if ($registro->terminada && !$registro->getOriginal('terminada')) {
\App\Models\Tintoreria::create([
'orden_produccion_id' => $registro->orden_produccion_id,
'fecha_envio' => now(),
'cantidad_enviada' => $registro->cantidad_enviada,
'observaciones' => "Auto-enviado desde {$registro->tipo} (ID: {$registro->id})",
]);
}
});
}
}