Agrego carpeta del source sql de la Base de Datos
This commit is contained in:
@@ -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$;
|
||||
Reference in New Issue
Block a user