-- ============================================= -- 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');