66 lines
2.1 KiB
PHP
66 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class Ojal extends Model
|
|
{
|
|
protected $table = 'ojales';
|
|
|
|
protected $fillable = [
|
|
'proveedor_id',
|
|
'orden_produccion_id',
|
|
'tipo',
|
|
'fecha_envio',
|
|
'cantidad_enviada',
|
|
'fecha_recepcion',
|
|
'cantidad_recibida',
|
|
'perdidas',
|
|
'terminada',
|
|
'proveedor_tintoreria_id',
|
|
];
|
|
|
|
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([
|
|
'proveedor_id' => $registro->proveedor_tintoreria_id,
|
|
'orden_produccion_id' => $registro->orden_produccion_id,
|
|
'fecha_envio' => now(),
|
|
'cantidad_enviada' => $registro->cantidad_enviada,
|
|
'observaciones' => "Auto-enviado desde {$registro->tipo} (ID: {$registro->id})",
|
|
]);
|
|
}
|
|
});
|
|
}
|
|
}
|