From 30b843b4020f0f1f21fd24def86419808b3062a1 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:52:07 -0500 Subject: [PATCH] up --- .../Pages/CreateOjalPresilla.php | 79 ++++++------------- .../Pages/ListOjalPresillas.php | 13 +++ 2 files changed, 35 insertions(+), 57 deletions(-) diff --git a/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php b/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php index 135af5c..d859fda 100644 --- a/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php +++ b/app/Filament/Resources/OjalPresillaResource/Pages/CreateOjalPresilla.php @@ -13,71 +13,36 @@ class CreateOjalPresilla extends CreateRecord protected function handleRecordCreation(array $data): \Illuminate\Database\Eloquent\Model { - $distribuciones = $data['distribuciones'] ?? []; - $tipo = $data['tipo'] ?? 'accesorio'; - $ordenProduccionId = $data['orden_produccion_id']; - $cantidadTotal = $data['cantidad_enviada']; - $terminada = $data['terminada'] ?? false; - - // Validar que haya al menos una distribución - if (empty($distribuciones)) { - throw \Illuminate\Validation\ValidationException::withMessages([ - 'distribuciones' => 'Debes agregar al menos un proveedor con su cantidad.' - ]); - } - - // Validar que las distribuciones no excedan la cantidad total - $sumaDistribucion = array_sum(array_column($distribuciones, 'cantidad')); - if ($sumaDistribucion > $cantidadTotal) { - throw \Illuminate\Validation\ValidationException::withMessages([ - 'distribuciones' => "La suma de las distribuciones ({$sumaDistribucion}) excede la cantidad total disponible ({$cantidadTotal})." - ]); - } - - // Advertir si no se distribuye todo (pero permitirlo) - if ($sumaDistribucion < $cantidadTotal) { - $diferencia = $cantidadTotal - $sumaDistribucion; - \Filament\Notifications\Notification::make() - ->warning() - ->title('Distribución parcial') - ->body("Se distribuirán {$sumaDistribucion} de {$cantidadTotal} unidades. Quedarán {$diferencia} sin asignar.") - ->send(); - } - - // Crear un registro por cada proveedor - $primerRegistro = null; - $cantidadRegistros = count($distribuciones); + $tipo = $data['tipo']; - try { - foreach ($distribuciones as $distribucion) { - $registro = \App\Models\Ojal::create([ - 'proveedor_id' => $distribucion['proveedor_id'], - 'orden_produccion_id' => $ordenProduccionId, - 'tipo' => $tipo, - 'fecha_envio' => now(), - 'cantidad_enviada' => $distribucion['cantidad'], - 'terminada' => $terminada, - ]); - - if (!$primerRegistro) { - $primerRegistro = $registro; - } - } - } catch (\Exception $e) { - throw \Illuminate\Validation\ValidationException::withMessages([ - 'distribuciones' => 'Error al crear registros: ' . $e->getMessage() + // Determinar en qué tabla guardar según el tipo + if ($tipo === 'Ojal') { + $registro = \App\Models\Ojal::create([ + 'proveedor_id' => $data['proveedor_id'], + 'orden_produccion_id' => $data['orden_produccion_id'], + 'tipo' => $tipo, + 'fecha_envio' => now(), + 'cantidad_enviada' => $data['cantidad_enviada'], + 'terminada' => $data['terminada'] ?? false, + ]); + } else { + $registro = \App\Models\Prensilla::create([ + 'proveedor_id' => $data['proveedor_id'], + 'orden_produccion_id' => $data['orden_produccion_id'], + 'tipo' => $tipo, + 'fecha_envio' => now(), + 'cantidad_enviada' => $data['cantidad_enviada'], + 'terminada' => $data['terminada'] ?? false, ]); } - // Notificación de éxito \Filament\Notifications\Notification::make() - ->title('Registros creados exitosamente') - ->body("Se crearon {$cantidadRegistros} registro(s) de {$tipo} para {$sumaDistribucion} unidades.") + ->title('Registro creado exitosamente') + ->body("Se creó el registro de {$tipo}") ->success() ->send(); - // Retornar el primer registro para que Filament no falle - return $primerRegistro; + return $registro; } protected function getRedirectUrl(): string diff --git a/app/Filament/Resources/OjalPresillaResource/Pages/ListOjalPresillas.php b/app/Filament/Resources/OjalPresillaResource/Pages/ListOjalPresillas.php index 0261177..b061246 100644 --- a/app/Filament/Resources/OjalPresillaResource/Pages/ListOjalPresillas.php +++ b/app/Filament/Resources/OjalPresillaResource/Pages/ListOjalPresillas.php @@ -17,4 +17,17 @@ class ListOjalPresillas extends ListRecords ->label('Crear'), ]; } + + protected function getTableQuery(): ?\Illuminate\Database\Eloquent\Builder + { + // Combinar registros de ojales y prensillas + $ojales = \App\Models\Ojal::query() + ->selectRaw("id, 'ojales' as table_name, proveedor_id, orden_produccion_id, tipo, fecha_envio, cantidad_enviada, fecha_recepcion, cantidad_recibida, terminada, created_at, updated_at"); + + $prensillas = \App\Models\Prensilla::query() + ->selectRaw("id, 'prensillas' as table_name, proveedor_id, orden_produccion_id, tipo, fecha_envio, cantidad_enviada, fecha_recepcion, cantidad_recibida, terminada, created_at, updated_at"); + + // Unir ambas queries y ordenar por fecha de creación + return $ojales->union($prensillas)->orderByDesc('created_at'); + } }