Update OrdenProduccion.php

This commit is contained in:
Lizandro Guarnizo
2026-01-29 22:50:43 -05:00
parent 73b3fd9f92
commit 30af893cac
+2 -61
View File
@@ -153,71 +153,12 @@ class OrdenProduccion extends Model
$orden->tela_reservada = true;
}
});
// Si la misma tela y cambiaron los metros, ajustar la diferencia
if ($originalTelaId == $newTelaId && $originalMetros != $newMetros && $newTelaId) {
$delta = $newMetros - $originalMetros;
$tela = \App\Models\Tela::find($newTelaId);
if ($tela) {
if ($delta > 0) {
if ($tela->metros_disponibles < $delta) {
throw \Illuminate\Validation\ValidationException::withMessages([
'metros_requeridos' => 'No hay suficientes metros disponibles para aumentar la reserva.',
]);
}
$tela->metros_disponibles = $tela->metros_disponibles - $delta;
} elseif ($delta < 0) {
$tela->metros_disponibles = $tela->metros_disponibles + abs($delta);
}
$tela->save();
}
}
$originalEstado = $orden->getOriginal('estado');
$nuevoEstado = $orden->estado;
// Reservar cuando pasamos a en_corte y no estaba reservado
if ($originalEstado !== 'en_corte' && $nuevoEstado === 'en_corte' && ! $orden->tela_reservada) {
if ($orden->tela_id && $orden->metros_requeridos > 0) {
$tela = \App\Models\Tela::find($orden->tela_id);
if (! $tela) {
throw \Illuminate\Validation\ValidationException::withMessages([
'tela_id' => 'No se encontró la tela asociada.',
]);
}
if ($tela->metros_disponibles < $orden->metros_requeridos) {
throw \Illuminate\Validation\ValidationException::withMessages([
'metros_requeridos' => 'No hay suficientes metros disponibles para reservar (' . $tela->metros_disponibles . ').',
]);
}
// Reservar: restar metros y marcar orden
$tela->metros_disponibles = $tela->metros_disponibles - $orden->metros_requeridos;
$tela->save();
$orden->tela_reservada = true;
}
}
// Si retrocede desde en_corte y ya estaba reservado, devolver la tela
if ($originalEstado === 'en_corte' && $nuevoEstado !== 'en_corte' && $orden->tela_reservada) {
if ($orden->tela_id && $orden->metros_requeridos > 0) {
$tela = \App\Models\Tela::find($orden->tela_id);
if ($tela) {
$tela->metros_disponibles = $tela->metros_disponibles + $orden->metros_requeridos;
$tela->save();
}
}
$orden->tela_reservada = false;
}
}); }
}
// Cantidad completada (desde procesos de acabados recibidos)
public function getRealizadoAttribute()
{
return (int) $this->procesosAcabado()->whereNotNull('fecha_recepcion')->sum('cantidad_recibida');
return (int) $this->procesosAcabado()->where('terminada', true)->sum('cantidad_enviada');
}
// Faltante para completar la OP