-- Seleccionar base de datos
USE data_nexapps;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_propietarios_tipos;
GO
CREATE PROCEDURE TJT.delete_tarjetas_propietarios_tipos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_propietarios_tipos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON t.creado_por = U.usuario
    WHERE T.id_tarjeta_propietario_tipo = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_propietarios_tipos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_propietarios_tipos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_propietario_tipo = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_propietarios_tipos
        WHERE id_tarjeta_propietario_tipo = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_tipos;
GO
CREATE PROCEDURE TJT.delete_tarjetas_tipos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_tipos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_tarjeta_tipo = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_tipos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_tipos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_tipo = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_tipos
        WHERE id_tarjeta_tipo = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_bancos;
GO
CREATE PROCEDURE TJT.delete_bancos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.bancos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_banco = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_bancos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.bancos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_banco = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.bancos
        WHERE id_banco = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas;
GO
CREATE PROCEDURE TJT.delete_tarjetas
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_tarjeta = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas
        WHERE id_tarjeta = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_empresas_empleados;
GO
CREATE PROCEDURE TJT.delete_empresas_empleados
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.empresas_empleados T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_empresa_empleado = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_empresas_empleados', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.empresas_empleados
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_empresa_empleado = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.empresas_empleados
        WHERE id_empresa_empleado = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_empresas_departamentos;
GO
CREATE PROCEDURE TJT.delete_empresas_departamentos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.empresas_departamentos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_empresa_departamento = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_empresas_departamentos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.empresas_departamentos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_empresa_departamento = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.empresas_departamentos
        WHERE id_empresa_departamento = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_beneficios;
GO
CREATE PROCEDURE TJT.delete_tarjetas_beneficios
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_beneficios T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_tarjeta_beneficio = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_beneficios', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_beneficios
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_beneficio = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_beneficios
        WHERE id_tarjeta_beneficio = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_intereses;
GO
CREATE PROCEDURE TJT.delete_tarjetas_intereses
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_intereses T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_tarjeta_interes = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_intereses', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_intereses
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_interes = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_intereses
        WHERE id_tarjeta_interes = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_cuentas;
GO
CREATE PROCEDURE TJT.delete_cuentas
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.cuentas T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_cuenta = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_cuentas', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.cuentas
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_cuenta = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.cuentas
        WHERE id_cuenta = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_gastos_categorias;
GO
CREATE PROCEDURE TJT.delete_tarjetas_gastos_categorias
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_gastos_categorias T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON T.creado_por = U.usuario
    WHERE T.id_tarjeta_gasto_categoria = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_gastos_categorias', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_gastos_categorias
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_gasto_categoria = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_gastos_categorias
        WHERE id_tarjeta_gasto_categoria = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_gastos;
GO
CREATE PROCEDURE TJT.delete_tarjetas_gastos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_gastos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON t.creado_por = U.usuario
    WHERE T.id_tarjeta_gasto = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_gastos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_gastos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_gasto = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_gastos
        WHERE id_tarjeta_gasto = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_cuentas_gastos_asignaciones;
GO
CREATE PROCEDURE TJT.delete_cuentas_gastos_asignaciones
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.cuentas_gastos_asignaciones T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON t.creado_por = U.usuario
    WHERE T.id_cuenta_gasto_asignacion = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_cuentas_gastos_asignaciones', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.cuentas_gastos_asignaciones
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_cuenta_gasto_asignacion = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.cuentas_gastos_asignaciones
        WHERE id_cuenta_gasto_asignacion = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_tarjetas_pagos;
GO
CREATE PROCEDURE TJT.delete_tarjetas_pagos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.tarjetas_pagos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON t.creado_por = U.usuario
    WHERE T.id_tarjeta_pago = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_tarjetas_pagos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.tarjetas_pagos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_tarjeta_pago = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.tarjetas_pagos
        WHERE id_tarjeta_pago = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_presupuestos_recipientes_tipos;
GO
CREATE PROCEDURE TJT.delete_presupuestos_recipientes_tipos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.presupuestos_recipientes_tipos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON t.creado_por = U.usuario
    WHERE T.id_presupuesto_recipiente_tipo = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_presupuestos_recipientes_tipos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.presupuestos_recipientes_tipos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_presupuesto_recipiente_tipo = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.presupuestos_recipientes_tipos
        WHERE id_presupuesto_recipiente_tipo = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





DROP PROCEDURE IF EXISTS TJT.delete_presupuestos;
GO
CREATE PROCEDURE TJT.delete_presupuestos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;
    
    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = T.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.presupuestos T
    LEFT JOIN seg_nexapps.dbo.usuarios U ON t.creado_por = U.usuario
    WHERE T.id_presupuesto = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_presupuestos', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.presupuestos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_presupuesto = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.presupuestos
        WHERE id_presupuesto = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO

-- USE data_nexapps;
DROP PROCEDURE IF EXISTS TJT.delete_comercios;
GO
CREATE PROCEDURE TJT.delete_comercios
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1=Borrado lógico, 2=Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    SELECT @registro_existe = 1, @usuario_propietario = C.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.comercios C
    LEFT JOIN seg_nexapps.dbo.usuarios U ON C.creado_por = U.usuario
    WHERE C.id_comercio = @varPk;

    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_comercios', @varIdModulo = 3, 
         @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;


    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.comercios
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_comercio = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.comercios WHERE id_comercio = @varPk;
        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO

-- USE data_nexapps;
DROP PROCEDURE IF EXISTS TJT.delete_comercios_productos;
GO
CREATE PROCEDURE TJT.delete_comercios_productos
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1=Borrado lógico, 2=Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    SELECT @registro_existe = 1, @usuario_propietario = CP.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.comercios_productos CP
    LEFT JOIN seg_nexapps.dbo.usuarios U ON CP.creado_por = U.usuario
    WHERE CP.id_comercio_producto = @varPk;

    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    EXEC seg_nexapps.dbo.obtain_permisos_usuario @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_comercios_productos', @varIdModulo = 3, 
         @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.comercios_productos
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_comercio_producto = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END
    ELSE IF @varOpc = 2
    BEGIN
        DELETE FROM TJT.comercios_productos WHERE id_comercio_producto = @varPk;
        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO











DROP PROCEDURE IF EXISTS TJT.delete_backups;
GO
CREATE PROCEDURE TJT.delete_backups
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = B.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.backups B
    LEFT JOIN seg_nexapps.dbo.usuarios U ON B.creado_por = U.usuario
    WHERE B.id_backup = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_backups', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.backups
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_backup = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2 -- Borrado físico
    BEGIN
        DELETE FROM TJT.backups
        WHERE id_backup = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO





-- NO HAY TJT.delete_audit_log





DROP PROCEDURE IF EXISTS TJT.delete_aichat_mensajes;
GO
CREATE PROCEDURE TJT.delete_aichat_mensajes
    @varPk INT,
    @varUsuario VARCHAR(100),
    @varOpc INT -- 1 Borrado lógico, 2 Borrado físico
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @result NVARCHAR(200), @save INT = 0;
    DECLARE @acceso_todos INT, @acceso_empresa INT, @acceso_propio INT, @id_usuario INT, @id_empresa INT;
    DECLARE @usuario_propietario VARCHAR(100), @empresa_propietario INT, @registro_existe INT = 0;

    -- Obtener si el registro existe y capturar usuario y empresa propietaria
    SELECT @registro_existe = 1, @usuario_propietario = A.creado_por, @empresa_propietario = U.id_empresa
    FROM TJT.aichat_mensajes A
    LEFT JOIN seg_nexapps.dbo.usuarios U ON A.creado_por = U.usuario
    WHERE A.id_mensaje = @varPk;

    -- Si el registro no existe, retornar error
    IF @registro_existe = 0
    BEGIN
        SET @result = 'El registro no existe o ya fue eliminado';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Obtener permisos del usuario
    EXEC seg_nexapps.dbo.obtain_permisos_usuario
        @varUsuario = @varUsuario, @varCodigoPermiso = 'delete_aichat_mensajes', @varIdModulo = 3, @id_usuario = @id_usuario OUTPUT, @id_empresa = @id_empresa OUTPUT, @acceso_todos = @acceso_todos OUTPUT, @acceso_empresa = @acceso_empresa OUTPUT, @acceso_propio = @acceso_propio OUTPUT;

    -- Verificar permisos para el registro específico
    IF NOT (
        @acceso_todos = 1
        OR (@acceso_empresa = 1 AND @empresa_propietario = @id_empresa)
        OR (@acceso_propio = 1 AND @usuario_propietario = @varUsuario)
    )
    BEGIN
        SET @result = 'No tiene permisos para eliminar este registro';
        SELECT @save AS 'save', @result AS result;
        RETURN;
    END;

    -- Proceder con la eliminación según permisos
    IF @varOpc = 1 -- Borrado lógico
    BEGIN
        UPDATE TJT.aichat_mensajes
        SET estado = 3,
            modificado_por = @varUsuario
        WHERE id_mensaje = @varPk;

        SET @save = 1;
        SET @result = 'Borrado lógico realizado correctamente';
    END;
    ELSE IF @varOpc = 2 -- Borrado físico
    BEGIN
        DELETE FROM TJT.aichat_mensajes
        WHERE id_mensaje = @varPk;

        SET @save = 1;
        SET @result = 'Borrado físico realizado correctamente';
    END;
    ELSE
    BEGIN
        SET @result = 'Opción no válida';
    END;

    SELECT @save AS 'save', @result AS result;
END;
GO

