first commit

This commit is contained in:
2026-01-10 23:14:51 -06:00
commit 389715b4b4
503 changed files with 98244 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
-- SQL para crear la tabla de asistencias de culto
-- PostgreSQL
CREATE TABLE IF NOT EXISTS asistencias_culto (
id BIGSERIAL PRIMARY KEY,
fecha_hora_inicio TIMESTAMP WITH TIME ZONE NOT NULL,
tipo_culto INTEGER NOT NULL,
tipo_conteo INTEGER NOT NULL,
-- Campos para TipoConteo.Detallado
hermanas_misioneras INTEGER,
hermanos_fraternidad INTEGER,
embajadores_cristo INTEGER,
ninos INTEGER,
visitas INTEGER,
amigos INTEGER,
-- Campos para TipoConteo.General
adultos_general INTEGER,
-- Campo para TipoConteo.Total
total_manual INTEGER,
-- Observaciones y auditoría
observaciones VARCHAR(500),
creado_por VARCHAR(100),
creado_en TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
actualizado_en TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);
-- Índices para mejorar rendimiento en búsquedas frecuentes
CREATE INDEX idx_asistencias_culto_fecha ON asistencias_culto(fecha_hora_inicio DESC);
CREATE INDEX idx_asistencias_culto_tipo_culto ON asistencias_culto(tipo_culto);
CREATE INDEX idx_asistencias_culto_tipo_conteo ON asistencias_culto(tipo_conteo);
-- Comentarios para documentación
COMMENT ON TABLE asistencias_culto IS 'Registro de asistencia de cultos y actividades eclesiásticas';
COMMENT ON COLUMN asistencias_culto.tipo_culto IS '1=Matutinos, 2=Dominicales, 3=Generales, 4=ConcilioMisionero, 5=Fraternidad, 6=Embajadores, 7=AccionDeGracias, 8=CampanasEvangelisticas, 9=CultosEspeciales, 10=Vigilias, 11=Velas';
COMMENT ON COLUMN asistencias_culto.tipo_conteo IS '1=Detallado, 2=General, 3=Total';
COMMENT ON COLUMN asistencias_culto.hermanas_misioneras IS 'Hermanas del Concilio Misionero Femenil (conteo detallado)';
COMMENT ON COLUMN asistencias_culto.hermanos_fraternidad IS 'Hermanos de Fraternidad de Varones (conteo detallado)';
COMMENT ON COLUMN asistencias_culto.embajadores_cristo IS 'Embajadores de Cristo (conteo detallado)';
COMMENT ON COLUMN asistencias_culto.ninos IS 'Niños (usado en detallado y general)';
COMMENT ON COLUMN asistencias_culto.visitas IS 'Visitas (conteo detallado)';
COMMENT ON COLUMN asistencias_culto.amigos IS 'Amigos (conteo detallado)';
COMMENT ON COLUMN asistencias_culto.adultos_general IS 'Adultos en general (conteo general)';
COMMENT ON COLUMN asistencias_culto.total_manual IS 'Total directo (conteo total)';
COMMENT ON COLUMN asistencias_culto.observaciones IS 'Observaciones adicionales sobre el culto';
COMMENT ON COLUMN asistencias_culto.creado_por IS 'Usuario que registró la asistencia';
-- Opcional: Crear una vista para facilitar consultas con total calculado
CREATE OR REPLACE VIEW vw_asistencias_culto AS
SELECT
id,
fecha_hora_inicio,
tipo_culto,
tipo_conteo,
hermanas_misioneras,
hermanos_fraternidad,
embajadores_cristo,
ninos,
visitas,
amigos,
adultos_general,
total_manual,
observaciones,
creado_por,
creado_en,
actualizado_en,
CASE tipo_conteo
WHEN 1 THEN -- Detallado
COALESCE(hermanas_misioneras, 0) +
COALESCE(hermanos_fraternidad, 0) +
COALESCE(embajadores_cristo, 0) +
COALESCE(ninos, 0) +
COALESCE(visitas, 0) +
COALESCE(amigos, 0)
WHEN 2 THEN -- General
COALESCE(adultos_general, 0) + COALESCE(ninos, 0)
WHEN 3 THEN -- Total
COALESCE(total_manual, 0)
ELSE 0
END AS total_calculado
FROM asistencias_culto;
COMMENT ON VIEW vw_asistencias_culto IS 'Vista de asistencias con total calculado automáticamente';

View File

@@ -0,0 +1,138 @@
-- SQL para insertar módulo de Asistencia y permisos básicos
-- PostgreSQL
-- Ejecutar después de crear la tabla asistencias_culto
-- 1. Insertar módulo de Asistencia (si no existe)
INSERT INTO modulos (id, nombre, icono, orden, activo, creado_en, parent_id)
VALUES (
(SELECT COALESCE(MAX(id), 0) + 1 FROM modulos),
'Asistencia',
'bi-people',
(SELECT COALESCE(MAX(orden), 0) + 10 FROM modulos WHERE parent_id IS NULL),
true,
NOW(),
NULL
)
ON CONFLICT (nombre) DO NOTHING;
-- Obtener el ID del módulo insertado (o existente)
DO $$
DECLARE
modulo_asistencia_id INTEGER;
rol_admin_id INTEGER;
BEGIN
-- Obtener ID del módulo de Asistencia
SELECT id INTO modulo_asistencia_id FROM modulos WHERE nombre = 'Asistencia';
-- Obtener ID del rol Administrador (asumiendo que existe)
SELECT id INTO rol_admin_id FROM roles_sistema WHERE nombre = 'Administrador' LIMIT 1;
-- 2. Insertar permisos básicos para el módulo de Asistencia
-- Permiso: Ver asistencias
INSERT INTO permisos (modulo_id, codigo, nombre, descripcion, url, icono, orden, es_menu, creado_en)
VALUES (
modulo_asistencia_id,
'asistencia.ver',
'Ver Asistencias',
'Permite ver el listado de asistencias de cultos',
'/AsistenciaCulto',
'bi-eye',
1,
true,
NOW()
)
ON CONFLICT (codigo) DO NOTHING;
-- Permiso: Crear asistencias
INSERT INTO permisos (modulo_id, codigo, nombre, descripcion, url, icono, orden, es_menu, creado_en)
VALUES (
modulo_asistencia_id,
'asistencia.crear',
'Crear Asistencia',
'Permite registrar nueva asistencia de culto',
'/AsistenciaCulto/Create',
'bi-plus-circle',
2,
true,
NOW()
)
ON CONFLICT (codigo) DO NOTHING;
-- Permiso: Editar asistencias
INSERT INTO permisos (modulo_id, codigo, nombre, descripcion, url, icono, orden, es_menu, creado_en)
VALUES (
modulo_asistencia_id,
'asistencia.editar',
'Editar Asistencia',
'Permite editar registros de asistencia existentes',
'/AsistenciaCulto/Edit',
'bi-pencil',
3,
true,
NOW()
)
ON CONFLICT (codigo) DO NOTHING;
-- Permiso: Eliminar asistencias
INSERT INTO permisos (modulo_id, codigo, nombre, descripcion, url, icono, orden, es_menu, creado_en)
VALUES (
modulo_asistencia_id,
'asistencia.eliminar',
'Eliminar Asistencia',
'Permite eliminar registros de asistencia',
'/AsistenciaCulto/Delete',
'bi-trash',
4,
true,
NOW()
)
ON CONFLICT (codigo) DO NOTHING;
-- 3. Asignar permisos al rol Administrador (si existe)
IF rol_admin_id IS NOT NULL THEN
-- Asignar permiso: asistencia.ver
INSERT INTO roles_permisos (rol_id, permiso_id)
SELECT rol_admin_id, id
FROM permisos
WHERE codigo = 'asistencia.ver'
ON CONFLICT (rol_id, permiso_id) DO NOTHING;
-- Asignar permiso: asistencia.crear
INSERT INTO roles_permisos (rol_id, permiso_id)
SELECT rol_admin_id, id
FROM permisos
WHERE codigo = 'asistencia.crear'
ON CONFLICT (rol_id, permiso_id) DO NOTHING;
-- Asignar permiso: asistencia.editar
INSERT INTO roles_permisos (rol_id, permiso_id)
SELECT rol_admin_id, id
FROM permisos
WHERE codigo = 'asistencia.editar'
ON CONFLICT (rol_id, permiso_id) DO NOTHING;
-- Asignar permiso: asistencia.eliminar
INSERT INTO roles_permisos (rol_id, permiso_id)
SELECT rol_admin_id, id
FROM permisos
WHERE codigo = 'asistencia.eliminar'
ON CONFLICT (rol_id, permiso_id) DO NOTHING;
RAISE NOTICE 'Permisos de Asistencia asignados al rol Administrador (ID: %)', rol_admin_id;
ELSE
RAISE NOTICE 'Rol Administrador no encontrado. Los permisos deben asignarse manualmente.';
END IF;
RAISE NOTICE 'Módulo de Asistencia y permisos configurados correctamente.';
END $$;
-- Verificación final
SELECT
m.nombre as modulo,
p.codigo as permiso,
p.nombre as nombre_permiso,
p.url
FROM modulos m
JOIN permisos p ON m.id = p.modulo_id
WHERE m.nombre = 'Asistencia'
ORDER BY p.orden;