'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); 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() ]); } // Notificación de éxito \Filament\Notifications\Notification::make() ->title('Registros creados exitosamente') ->body("Se crearon {$cantidadRegistros} registro(s) de {$tipo} para {$sumaDistribucion} unidades.") ->success() ->send(); // Retornar el primer registro para que Filament no falle return $primerRegistro; } protected function getRedirectUrl(): string { return static::getResource()::getUrl('index'); } }