107 lines
5.2 KiB
SQL
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');
|