Files
RS_System/RS_system/sql_ofrendas.sql
2026-01-10 23:14:51 -06:00

107 lines
5.2 KiB
SQL

-- =============================================
-- Módulo de Ofrendas - Script SQL
-- =============================================
-- Tabla: registros_culto
-- Almacena los registros de ofrendas por culto
CREATE TABLE IF NOT EXISTS public.registros_culto
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
fecha date NOT NULL,
observaciones character varying(500) COLLATE pg_catalog."default",
creado_por character varying(100) COLLATE pg_catalog."default",
creado_en timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
actualizado_en timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP,
eliminado boolean NOT NULL DEFAULT false,
CONSTRAINT registros_culto_pkey PRIMARY KEY (id)
);
COMMENT ON TABLE public.registros_culto IS 'Registros de ofrendas por culto';
-- Índice para búsqueda por fecha
CREATE INDEX IF NOT EXISTS idx_registros_culto_fecha ON public.registros_culto(fecha);
CREATE INDEX IF NOT EXISTS idx_registros_culto_eliminado ON public.registros_culto(eliminado);
-- =============================================
-- Tabla: ofrendas
-- Almacena las ofrendas individuales de cada registro
CREATE TABLE IF NOT EXISTS public.ofrendas
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
registro_culto_id bigint NOT NULL,
monto numeric(10,2) NOT NULL CHECK (monto > 0),
concepto character varying(200) COLLATE pg_catalog."default" NOT NULL,
eliminado boolean NOT NULL DEFAULT false,
CONSTRAINT ofrendas_pkey PRIMARY KEY (id),
CONSTRAINT fk_ofrendas_registro_culto FOREIGN KEY (registro_culto_id)
REFERENCES public.registros_culto (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
);
COMMENT ON TABLE public.ofrendas IS 'Ofrendas individuales de cada registro de culto';
-- Índices
CREATE INDEX IF NOT EXISTS idx_ofrendas_registro_culto_id ON public.ofrendas(registro_culto_id);
CREATE INDEX IF NOT EXISTS idx_ofrendas_eliminado ON public.ofrendas(eliminado);
-- =============================================
-- Tabla: descuentos_ofrenda
-- Almacena los descuentos aplicados a cada ofrenda
CREATE TABLE IF NOT EXISTS public.descuentos_ofrenda
(
id bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 9223372036854775807 CACHE 1 ),
ofrenda_id bigint NOT NULL,
monto numeric(10,2) NOT NULL CHECK (monto > 0),
concepto character varying(200) COLLATE pg_catalog."default" NOT NULL,
eliminado boolean NOT NULL DEFAULT false,
CONSTRAINT descuentos_ofrenda_pkey PRIMARY KEY (id),
CONSTRAINT fk_descuentos_ofrenda_ofrenda FOREIGN KEY (ofrenda_id)
REFERENCES public.ofrendas (id) MATCH SIMPLE
ON UPDATE CASCADE
ON DELETE CASCADE
);
COMMENT ON TABLE public.descuentos_ofrenda IS 'Descuentos aplicados a las ofrendas (diezmo, asignaciones, etc.)';
-- Índices
CREATE INDEX IF NOT EXISTS idx_descuentos_ofrenda_ofrenda_id ON public.descuentos_ofrenda(ofrenda_id);
CREATE INDEX IF NOT EXISTS idx_descuentos_ofrenda_eliminado ON public.descuentos_ofrenda(eliminado);
-- =============================================
-- Permisos para el módulo
-- =============================================
-- Primero crear el módulo si no existe
INSERT INTO public.modulos (nombre, descripcion, icono, orden, activo)
SELECT 'Secretaría', 'Módulo de secretaría de la iglesia', 'bi bi-journal-bookmark', 40, true
WHERE NOT EXISTS (SELECT 1 FROM public.modulos WHERE nombre = 'Secretaría');
-- Crear permisos para el controlador Ofrenda
INSERT INTO public.permisos (codigo, nombre, descripcion, modulo_id, activo)
SELECT 'Ofrenda.Index', 'Ver Ofrendas', 'Permite ver el listado de registros de ofrendas',
(SELECT id FROM public.modulos WHERE nombre = 'Secretaría'), true
WHERE NOT EXISTS (SELECT 1 FROM public.permisos WHERE codigo = 'Ofrenda.Index');
INSERT INTO public.permisos (codigo, nombre, descripcion, modulo_id, activo)
SELECT 'Ofrenda.Create', 'Crear Ofrenda', 'Permite crear nuevos registros de ofrendas',
(SELECT id FROM public.modulos WHERE nombre = 'Secretaría'), true
WHERE NOT EXISTS (SELECT 1 FROM public.permisos WHERE codigo = 'Ofrenda.Create');
INSERT INTO public.permisos (codigo, nombre, descripcion, modulo_id, activo)
SELECT 'Ofrenda.Edit', 'Editar Ofrenda', 'Permite editar registros de ofrendas',
(SELECT id FROM public.modulos WHERE nombre = 'Secretaría'), true
WHERE NOT EXISTS (SELECT 1 FROM public.permisos WHERE codigo = 'Ofrenda.Edit');
INSERT INTO public.permisos (codigo, nombre, descripcion, modulo_id, activo)
SELECT 'Ofrenda.Delete', 'Eliminar Ofrenda', 'Permite eliminar registros de ofrendas',
(SELECT id FROM public.modulos WHERE nombre = 'Secretaría'), true
WHERE NOT EXISTS (SELECT 1 FROM public.permisos WHERE codigo = 'Ofrenda.Delete');
INSERT INTO public.permisos (codigo, nombre, descripcion, modulo_id, activo)
SELECT 'Ofrenda.Details', 'Ver Detalle Ofrenda', 'Permite ver el detalle de un registro de ofrendas',
(SELECT id FROM public.modulos WHERE nombre = 'Secretaría'), true
WHERE NOT EXISTS (SELECT 1 FROM public.permisos WHERE codigo = 'Ofrenda.Details');