diff --git a/app/Models/OrdenProduccion.php b/app/Models/OrdenProduccion.php index d9f1fc6..ba18750 100644 --- a/app/Models/OrdenProduccion.php +++ b/app/Models/OrdenProduccion.php @@ -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