-- Seleccionar base de datos
USE seg_nexapps;
GO


-- ******************************** TARJETAS
-- insert_update_modulos
-- insert_update_usuarios_roles
-- insert_update_modulos_permisos
-- insert_update_roles_permisos_asignaciones
-- insert_update_menus
-- insert_update_menus_roles

DECLARE @TABLE_PERMISOS TABLE (super_user INT, admin_empresa INT, user_regular INT, codigo VARCHAR(50));
DECLARE
    @TABLE_PERMISOS__CODIGO VARCHAR(50),
    @CODIGO_EMPRESA VARCHAR(50),
    @CODIGO_PROPIO VARCHAR(50),
    @TABLE_PERMISOS__SUPER_USER INT,
    @TABLE_PERMISOS__ADMIN_EMPRESA INT,
    @TABLE_PERMISOS__USER_REGULAR INT
    ;

DECLARE @TABLE_MENUS TABLE (super_user INT, admin_empresa INT, user_regular INT, codigo_menu VARCHAR(50));
DECLARE
    @TABLE_MENUS__CODIGO_MENU VARCHAR(50),
    @TABLE_MENUS__SUPER_USER INT,
    @TABLE_MENUS__ADMIN_EMPRESA INT,
    @TABLE_MENUS__USER_REGULAR INT
    ;

DECLARE
    @ID_MODULO INT,
    @ID_ROL_SUPER_USER INT,
    @ID_ROL_ADMIN_EMPRESA INT,
    @ID_ROL_USER_REGULAR INT,
    @ID_MENU INT,
    @ID_PERMISO INT
    ;


-- 1: INSERTAR MODULO TARJETAS
EXEC dbo.insert_update_modulos
    @varPkModulo = @ID_MODULO OUTPUT,
    @varModulo = 'CONTROL DE TARJETAS',
    @varUsuario = 'SERGICAST02',
    @varOpc = 1;


-- 2: INSERTAR ROLES
EXEC dbo.insert_update_usuarios_roles
    @varPkRol = @ID_ROL_SUPER_USER OUTPUT,
    @varRol = 'SUPER USER',
    @varIdModulo = @ID_MODULO,
    @varUsuario = 'SERGICAST02',
    @varOpc = 1;

EXEC dbo.insert_update_usuarios_roles
    @varPkRol = @ID_ROL_ADMIN_EMPRESA OUTPUT,
    @varRol = 'ADMIN EMPRESA',
    @varIdModulo = @ID_MODULO,
    @varUsuario = 'SERGICAST02',
    @varOpc = 1;

EXEC dbo.insert_update_usuarios_roles
    @varPkRol = @ID_ROL_USER_REGULAR OUTPUT,
    @varRol = 'OPERADOR',
    @varIdModulo = @ID_MODULO,
    @varUsuario = 'SERGICAST02',
    @varOpc = 1;


-- 3: INSERTAR PERMISOS Y MENUS DEL MODULO TARJETAS
-- PERMISOS
-- 1: todos, 2: empresa, 3: propio
INSERT INTO @TABLE_PERMISOS (super_user, admin_empresa, user_regular, codigo)
VALUES
    (1, 2, 3, 'get_tarjetas_propietarios_tipos'),
    -- (1, 2, 3, 'get_tarjetas_propietarios'),
    (1, 1, 1, 'get_tarjetas_tipos'),
    (1, 1, 1, 'get_bancos'),
    (1, 1, 1, 'get_catalogo_tarjetas_gastos_categorias'),
    (1, 2, 3, 'get_tarjetas'),
    (1, 2, 3, 'get_empresas_empleados'),
    (1, 2, 3, 'get_empresas_departamentos'),
    (1, 2, 3, 'get_tarjetas_beneficios'),
    (1, 2, 3, 'get_tarjetas_intereses'),
    (1, 2, 3, 'get_cuentas'),
    (1, 2, 3, 'get_tarjetas_gastos_categorias'),
    (1, 2, 3, 'get_tarjetas_gastos'),
    (1, 2, 3, 'get_cuentas_gastos_asignaciones'),
    (1, 2, 3, 'get_tarjetas_pagos'),
    (1, 2, 3, 'get_presupuestos_recipientes_tipos'),
    (1, 2, 3, 'get_presupuestos'),
    (1, 2, 3, 'get_backups'),
    (1, 2, 3, 'get_audit_log'),
    (1, 2, 3, 'get_aichat_mensajes'),
    (1, 2, 3, 'get_usuarios'),
    (1, 2, 3, 'get_empresas'),
    (1, 2, 3, 'get_comercios'),
    (1, 2, 3, 'get_comercios_productos'),

    (1, 2, 3, 'save_tarjetas_propietarios_tipos'),
    -- (1, 2, 3, 'save_tarjetas_propietarios'),
    (1, 2, 3, 'save_tarjetas_tipos'),
    (1, 2, 3, 'save_bancos'),
    (1, 2, 3, 'save_tarjetas'),
    (1, 2, 3, 'save_empresas_empleados'),
    (1, 2, 3, 'save_empresas_departamentos'),
    (1, 2, 3, 'save_tarjetas_beneficios'),
    (1, 2, 3, 'save_tarjetas_intereses'),
    (1, 2, 3, 'save_cuentas'),
    (1, 2, 3, 'save_tarjetas_gastos_categorias'),
    (1, 2, 3, 'save_tarjetas_gastos'),
    (1, 2, 3, 'save_cuentas_gastos_asignaciones'),
    (1, 2, 3, 'save_tarjetas_pagos'),
    (1, 2, 3, 'save_presupuestos_recipientes_tipos'),
    (1, 2, 3, 'save_presupuestos'),
    (1, 2, 3, 'save_backups'),
    (1, 2, 3, 'save_audit_log'),
    (1, 2, 3, 'save_aichat_mensajes'),
    (1, 2, 3, 'save_comercios'),
    (1, 2, 3, 'save_comercios_productos'),

    (1, 2, 3, 'delete_tarjetas_propietarios_tipos'),
    -- (1, 2, 3, 'delete_tarjetas_propietarios'),
    (1, 2, 3, 'delete_tarjetas_tipos'),
    (1, 2, 3, 'delete_bancos'),
    (1, 2, 3, 'delete_tarjetas'),
    (1, 2, 3, 'delete_empresas_empleados'),
    (1, 2, 3, 'delete_empresas_departamentos'),
    (1, 2, 3, 'delete_tarjetas_beneficios'),
    (1, 2, 3, 'delete_tarjetas_intereses'),
    (1, 2, 3, 'delete_cuentas'),
    (1, 2, 3, 'delete_tarjetas_gastos_categorias'),
    (1, 2, 3, 'delete_tarjetas_gastos'),
    (1, 2, 3, 'delete_cuentas_gastos_asignaciones'),
    (1, 2, 3, 'delete_tarjetas_pagos'),
    (1, 2, 3, 'delete_presupuestos_recipientes_tipos'),
    (1, 2, 3, 'delete_presupuestos'),
    (1, 2, 3, 'delete_backups'),
    -- (1, 2, 3, 'delete_audit_log'),
    (1, 2, 3, 'delete_aichat_mensajes'),
    (1, 2, 3, 'delete_comercios'),
    (1, 2, 3, 'delete_comercios_productos')
    ;
    
WHILE EXISTS (SELECT 1 FROM @TABLE_PERMISOS)
BEGIN
    SELECT TOP 1
        @TABLE_PERMISOS__CODIGO = codigo,
        @TABLE_PERMISOS__SUPER_USER = super_user,
        @TABLE_PERMISOS__ADMIN_EMPRESA = admin_empresa,
        @TABLE_PERMISOS__USER_REGULAR = user_regular
    FROM @TABLE_PERMISOS;

    SET @CODIGO_EMPRESA = CONCAT(@TABLE_PERMISOS__CODIGO, '__empresa');
    SET @CODIGO_PROPIO = CONCAT(@TABLE_PERMISOS__CODIGO, '__propio');

    -- TODOS
    EXEC dbo.insert_update_modulos_permisos 
        @varPkPermiso = @ID_PERMISO OUTPUT,
        @varCodigo = @TABLE_PERMISOS__CODIGO,
        @varNombre = NULL,
        @varDescripcion = NULL,
        @varIdModulo = @ID_MODULO,
        @varUsuario = 'SERGICAST02',
        @varOpc = 1;

    IF @TABLE_PERMISOS__SUPER_USER = 1
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_SUPER_USER,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    IF @TABLE_PERMISOS__ADMIN_EMPRESA = 1
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_ADMIN_EMPRESA,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    IF @TABLE_PERMISOS__USER_REGULAR = 1
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_USER_REGULAR,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    -- EMPRESA
    EXEC dbo.insert_update_modulos_permisos 
        @varPkPermiso = @ID_PERMISO OUTPUT,
        @varCodigo = @CODIGO_EMPRESA,
        @varNombre = NULL,
        @varDescripcion = NULL,
        @varIdModulo = @ID_MODULO,
        @varUsuario = 'SERGICAST02',
        @varOpc = 1;

    IF @TABLE_PERMISOS__SUPER_USER = 2
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_SUPER_USER,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    IF @TABLE_PERMISOS__ADMIN_EMPRESA = 2
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_ADMIN_EMPRESA,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    IF @TABLE_PERMISOS__USER_REGULAR = 2
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_USER_REGULAR,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    -- PROPIO
    EXEC dbo.insert_update_modulos_permisos 
        @varPkPermiso = @ID_PERMISO OUTPUT,
        @varCodigo = @CODIGO_PROPIO,
        @varNombre = NULL,
        @varDescripcion = NULL,
        @varIdModulo = @ID_MODULO,
        @varUsuario = 'SERGICAST02',
        @varOpc = 1;

    IF @TABLE_PERMISOS__SUPER_USER = 3
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_SUPER_USER,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    IF @TABLE_PERMISOS__ADMIN_EMPRESA = 3
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_ADMIN_EMPRESA,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    IF @TABLE_PERMISOS__USER_REGULAR = 3
    BEGIN
        EXEC dbo.insert_update_roles_permisos_asignaciones
            @varPkAsignacion = NULL,
            @varIdRol = @ID_ROL_USER_REGULAR,
            @varIdPermiso = @ID_PERMISO,
            @varUsuario = 'SERGICAST02',
            @varOpc = 1;
    END;

    DELETE FROM @TABLE_PERMISOS WHERE codigo = @TABLE_PERMISOS__CODIGO;
END;

-- MENUS
INSERT INTO @TABLE_MENUS (super_user, admin_empresa, user_regular, codigo_menu)
VALUES
    (1, 1, 1, 'screen_dashboard'),
    (1, 1, 1, 'screen_reporte_1'),
    (1, 1, 1, 'screen_reporte_2'),
    (1, 1, 1, 'screen_reporte_3'),
    (1, 1, 1, 'screen_reporte_4'),
    (1, 1, 1, 'screen_reporte_5'),
    (1, 1, 1, 'screen_reporte_6'),
    (1, 1, 1, 'screen_reporte_7'),
    (1, 0, 0, 'screen_tarjetas_propietarios_tipos'),
    -- (1, 1, 0, 'screen_tarjetas_propietarios'),
    (1, 0, 0, 'screen_tarjetas_tipos'),
    (1, 0, 0, 'screen_bancos'),
    (1, 1, 1, 'screen_tarjetas'),
    (1, 1, 0, 'screen_empresas_empleados'),
    (1, 1, 0, 'screen_empresas_departamentos'),
    (1, 1, 1, 'screen_tarjetas_beneficios'),
    (1, 1, 1, 'screen_tarjetas_intereses'),
    (1, 1, 1, 'screen_cuentas'),
    (1, 1, 1, 'screen_tarjetas_gastos_categorias'),
    (1, 1, 1, 'screen_tarjetas_gastos'),
    (1, 1, 1, 'screen_cuentas_gastos_asignaciones'),
    (1, 1, 1, 'screen_tarjetas_pagos'),
    (1, 0, 0, 'screen_presupuestos_recipientes_tipos'),
    (1, 1, 1, 'screen_presupuestos'),
    -- (1, 1, 1, 'screen_backups_tipos'),
    (1, 0, 0, 'screen_backups'),
    (1, 1, 0, 'screen_audit_log'),
    (1, 1, 1, 'screen_aichat'),
    (1, 1, 1, 'screen_comercios'),
    (1, 1, 1, 'screen_comercios_productos')
    ;

WHILE EXISTS (SELECT 1 FROM @TABLE_MENUS)
BEGIN
    SELECT TOP 1
        @TABLE_MENUS__CODIGO_MENU = codigo_menu,
        @TABLE_MENUS__SUPER_USER = super_user,
        @TABLE_MENUS__ADMIN_EMPRESA = admin_empresa,
        @TABLE_MENUS__USER_REGULAR = user_regular
    FROM @TABLE_MENUS;

    EXEC dbo.insert_update_menus 
        @varPkMenu = @ID_MENU OUTPUT,
        @varCodigoMenu = @TABLE_MENUS__CODIGO_MENU,
        @varMenu = NULL,
        @varDescripcion = NULL,
        @varIdModulo = @ID_MODULO,
        @varOpc = 1;

    IF @TABLE_MENUS__SUPER_USER = 1
    BEGIN
        EXEC dbo.insert_update_menus_roles
            @varPkSecuencia = NULL,
            @varIdRol = @ID_ROL_SUPER_USER,
            @varIdMenu = @ID_MENU,
            @varOpc = 1
    END;

    IF @TABLE_MENUS__ADMIN_EMPRESA = 1
    BEGIN
        EXEC dbo.insert_update_menus_roles
            @varPkSecuencia = NULL,
            @varIdRol = @ID_ROL_ADMIN_EMPRESA,
            @varIdMenu = @ID_MENU,
            @varOpc = 1
    END;

    IF @TABLE_MENUS__USER_REGULAR = 1
    BEGIN
        EXEC dbo.insert_update_menus_roles
            @varPkSecuencia = NULL,
            @varIdRol = @ID_ROL_USER_REGULAR,
            @varIdMenu = @ID_MENU,
            @varOpc = 1
    END;

    DELETE FROM @TABLE_MENUS WHERE codigo_menu = @TABLE_MENUS__CODIGO_MENU;
END;