Agrego carpeta del source sql de la Base de Datos

This commit is contained in:
Pablo
2026-08-22 19:10:49 -03:00
parent 11e36bd6c2
commit 88d724fbcf
94 changed files with 7820 additions and 0 deletions
@@ -0,0 +1,96 @@
-- ============================================================================
-- fc_modificar_metodos_pago
-- ============================================================================
-- PROPÓSITO
-- Modifica los campos editables de un método de pago existente. Semántica
-- PATCH: sólo se actualizan las claves presentes en p_datos.
--
-- DOMINIO
-- Mantenimiento de los métodos de pago como configuración del módulo.
-- No crea ni elimina; el alta lógica/baja lógica se maneja con el flag
-- `activo` del propio método.
--
-- PARÁMETROS
-- p_datos JSONB con:
-- id INTEGER (obligatorio) ID del método a modificar.
-- descripcion TEXT (opcional) nuevo nombre / etiqueta.
-- activo BOOLEAN (opcional) baja lógica (false) o reactivación
-- (true).
-- icono TEXT (opcional) identificador del ícono asociado.
-- p_token UUID sesión del actor.
--
-- AUTORIZACIÓN
-- Requiere permiso 'modificar_metodos_pago'.
--
-- ERRORES (RAISE EXCEPTION)
-- - 'Debe indicar el ID del tipo de cuota a modificar.'
-- (NOTA: el mensaje refiere a "tipo de cuota" por un error histórico;
-- en realidad valida que se pase el ID del método de pago.)
-- - 'El método de pago con ID X no existe.'
--
-- RETORNA
-- JSONB con la fila completa del método de pago tras la modificación.
--
-- EFECTOS SECUNDARIOS
-- UPDATE sobre metodos_pago. No genera evento.
-- ============================================================================
CREATE OR REPLACE FUNCTION fc_modificar_metodos_pago(
p_datos JSONB,
p_token UUID
)
RETURNS JSONB
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
VOLATILE -- Checklist #2: Modifica datos
AS $function$
DECLARE
v_resultado JSONB;
v_id INTEGER;
BEGIN
-- -----------------------------------------------------------
-- Checklist #3: Validar permisos
-- -----------------------------------------------------------
PERFORM internal.validate_permission(p_token, 'modificar_metodos_pago');
-- 3. Validar que venga el ID para saber qué modificar
IF NOT p_datos ? 'id' OR p_datos->>'id' IS NULL THEN
RAISE EXCEPTION 'Debe indicar el ID del tipo de cuota a modificar.';
END IF;
v_id := (p_datos->>'id')::INTEGER;
-- -----------------------------------------------------------
-- 1. UPDATE Dinámico y Seguro
-- -----------------------------------------------------------
UPDATE metodos_pago
SET
descripcion = CASE
WHEN p_datos ? 'descripcion' THEN p_datos->>'descripcion'
ELSE descripcion
END,
activo = CASE
WHEN p_datos ? 'activo' THEN (p_datos->>'activo')::BOOL
ELSE activo
END,
-- BUG CORREGIDO: Ahora si no viene el icono, no lo tocamos.
icono = CASE
WHEN p_datos ? 'icono' THEN p_datos->>'icono'
ELSE icono
END
WHERE id = v_id
RETURNING to_jsonb(metodos_pago.*) INTO v_resultado; -- Retorno atómico
-- -----------------------------------------------------------
-- 2. Verificar si se actualizó algo
-- -----------------------------------------------------------
IF v_resultado IS NULL THEN
RAISE EXCEPTION 'El método de pago con ID % no existe.', v_id;
END IF;
RETURN v_resultado;
END;
$function$;
@@ -0,0 +1,55 @@
-- ============================================================================
-- fc_obtener_metodos_pago
-- ============================================================================
-- PROPÓSITO
-- Devuelve todos los métodos de pago configurados (activos e inactivos).
--
-- DOMINIO
-- Los métodos de pago (efectivo, transferencia, billetera digital, etc.)
-- son entidades de configuración del módulo de pagos. Se consultan al
-- registrar o corregir un pago para que el responsable elija cómo se cobró
-- (Documentation/DominioPagos.md §5.1).
--
-- PARÁMETROS
-- p_token UUID sesión del actor.
--
-- AUTORIZACIÓN
-- Requiere permiso 'ver_metodos_pago'.
--
-- ERRORES (RAISE EXCEPTION)
-- Ninguno propio (sólo los del validador de permiso).
--
-- RETORNA
-- JSONB array de filas completas de metodos_pago, ordenadas por id.
-- Cada ítem: id, descripcion, activo, icono. Array vacío si no hay
-- registros.
--
-- EFECTOS SECUNDARIOS
-- Ninguno (STABLE).
-- ============================================================================
CREATE OR REPLACE FUNCTION fc_obtener_metodos_pago(p_token UUID)
RETURNS JSONB
LANGUAGE plpgsql
SECURITY DEFINER
SET search_path = public
STABLE
AS $function$
DECLARE
-- No necesitamos variables extra si usamos internal.validate_permission
BEGIN
-- 1. Validar permisos (Checklist #3)
-- Asumimos acción 'ver_configuracion' o 'ver_metodos_pago'
-- Esto te permite mañana darle permiso al 'cliente' sin tocar este código.
PERFORM internal.validate_permission(p_token, 'ver_metodos_pago');
-- 2. Retorno directo y sin vueltas
RETURN (
SELECT COALESCE(
jsonb_agg(to_jsonb(mp) ORDER BY mp.id),
'[]'::jsonb
)
FROM public.metodos_pago mp
);
END;
$function$;