Page tree
Skip to end of metadata
Go to start of metadata

DimoSecurity  BBDD- v1.0.1.0

AutorArturo Sosa
Fecha

 

Estado
  • PENDIENTE
  • IMPLEMENTADO
Ambiente
  • PRE-PRODUCCION
  • PRODUCCION

REGISTRO DE CAMBIOS

  1. Agregar el servicio de validar permiso para cambio de datos.
  2. Agregar el servicio para cerrar el permiso cuando el usuario cambia sus datos y cerrar la incidencia.

OBJETOS AFECTADOS

  1. BBDD BAPY@CREDITOPY (10.5.3.5:1521)

PRE-REQUISITOS

IMPLEMENTACION

  1. EJECUTAR EN LA BBDD DE BAPY@CREDITOPY (10.5.3.5:1521) EL SGTE QUERY:
INSERT PARA LAS VALIDACIONES
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES
(ID_API_SP, CATEGORIA, DESCRIPCION, API_PATH_GROUP, API_PATH_VERSION, API_PATH_NAME, PROCEDURE_DATABASE, PROCEDURE_SCHEMA, PROCEDURE_NAME, SIMPLIFICAR_RESPONSE_S_N, FECHA_HORA_INS, USUARIO_INS, FECHA_HORA_UPD, USUARIO_UPD)
VALUES(105, 'DIMO SECURITY', 'Verificar que el usuario tenga permisos para modificar los datos', 'security', 'v1', 'validarPermiso', 'BAPY', 'creditopy', 'PKG_DIMO_SECURITY.PR_VALIDAR_PERMISO_DATOS', 'S', sysdate, 'asosa', sysdate, 'asosa');

INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE)
VALUES(105, 1, 'documento', 'TEXTO', 'S', 'N', NULL);
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE)
VALUES(105, 2, 'codigo', 'TEXTO', 'S', 'N', NULL);

INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N)
VALUES(105, 1, 'validado', 'NUMERO', 'S');
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N)
VALUES(105, 2, 'descripcion', 'TEXTO', 'S');

INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES
(ID_API_SP, CATEGORIA, DESCRIPCION, API_PATH_GROUP, API_PATH_VERSION, API_PATH_NAME, PROCEDURE_DATABASE, PROCEDURE_SCHEMA, PROCEDURE_NAME, SIMPLIFICAR_RESPONSE_S_N, FECHA_HORA_INS, USUARIO_INS, FECHA_HORA_UPD, USUARIO_UPD)
VALUES(106, 'DIMO SECURITY', 'Sacar el permiso al usuario', 'security', 'v1', 'sacarPermiso', 'BAPY', 'creditopy', 'PKG_DIMO_SECURITY.PR_CERRAR_PERMISO_DATOS', 'S', sysdate, 'asosa', sysdate, 'asosa');

INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE)
VALUES(106, 1, 'documento', 'TEXTO', 'S', 'N', NULL);
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_IN
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, REQUERIDO_API_S_N, NULABLE_S_N, DEFAULT_VALUE)
VALUES(106, 2, 'codigo', 'TEXTO', 'S', 'N', NULL);

INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N)
VALUES(106, 1, 'validado', 'NUMERO', 'S');
INSERT INTO CREDITOPY.API_CEIBO_PROCEDURES_PRMS_OUT
(ID_API_SP, NRO_ORDEN, PARAM_NAME, TIPO_DATO, RETORNAR_API_S_N)
VALUES(106, 2, 'descripcion', 'TEXTO', 'S');

INSERT INTO DIMO_SICOOP.T_WEBSERVICE
(WEBSERVICE_ID, CODE, REFERENCE, URL, NAMESPACE, SERVICENAME, CONNECT_TIMEOUT, CALL_TIMEOUT, MAX_RETRY, ENABLED, LAST_USER, LAST_TIME, URL_ALT)
VALUES(112, 'WS_VALID_CAMBIO_DATO', 'Web service para validar permisos', 'http://10.5.1.30:8083/ws-tarjetahabiente/prmservices/v2/sprunner/security/v1/validarPermiso', 'espacio', 'service', 60000, 60000, NULL, 1, 'asosa', sysdate, NULL);

INSERT INTO DIMO_SICOOP.T_WEBSERVICE
(WEBSERVICE_ID, CODE, REFERENCE, URL, NAMESPACE, SERVICENAME, CONNECT_TIMEOUT, CALL_TIMEOUT, MAX_RETRY, ENABLED, LAST_USER, LAST_TIME, URL_ALT)
VALUES(113, 'WS_CERRAR_CAMBIO_DATO', 'Web service para validar permisos', 'http://10.5.1.30:8083/ws-tarjetahabiente/prmservices/v2/sprunner/security/v1/sacarPermiso', 'espacio', 'service', 60000, 60000, NULL, 1, 'asosa', sysdate, NULL);
CREAR EL PAQUETE
/*					MODIFICACION DE LA CABECERA	(ESPECIFICACION DEL PACKAGE)				*/
CREATE OR REPLACE PACKAGE CREDITOPY.PKG_DIMO_SECURITY IS
	-- AUTOR: MANU BAEZ
	-- Fecha Creación: 07/10/2024
  PROCEDURE PR_VALIDAR_TOKEN_TARJ (
    P_NUM_TARJ IN NUMBER,
    P_AFINIDAD OUT NUMBER,
    P_EMISOR OUT NUMBER,
    P_VINCULADO OUT NUMBER,
    P_DOCUMENTO OUT VARCHAR2,
    P_VINC_DESC OUT VARCHAR2
  );

 	-- AUTOR: ARTURO SOSA
	-- Fecha Creación: 08/10/2024
  PROCEDURE PR_VALIDAR_PERMISO_DATOS (
    CP_documento IN VARCHAR2,
    CP_codigo IN VARCHAR2,
    NP_validado OUT NUMBER,
    CP_descripcion OUT VARCHAR2
  );
 
  	-- AUTOR: ARTURO SOSA
	-- Fecha Creación: 08/10/2024
  PROCEDURE PR_CERRAR_PERMISO_DATOS (
    CP_documento IN VARCHAR2,
    CP_codigo IN VARCHAR2,
    NP_validado OUT NUMBER,
    CP_descripcion OUT VARCHAR2
  );

END PKG_DIMO_SECURITY;




/*					MODIFICACION DEL BODY (PACKAGE BODY)					*/
CREATE OR REPLACE PACKAGE BODY CREDITOPY.PKG_DIMO_SECURITY IS
 /*			VALIDAR PERMISOS DEL USUARIO PARA CAMBIAR LOS DATOS DE SU CUENTA			*/
 /*
	AUTOR: MANUEL BAEZ
	FECHA CREACION: 07/10/2024
	DESCRIPCION: 
	
	
	FECHA MODIFICACION: 
	DESCRIPCION DE CAMBIOS: 
 */
   PROCEDURE PR_VALIDAR_TOKEN_TARJ (
    P_NUM_TARJ IN NUMBER,
    P_AFINIDAD OUT NUMBER,
    P_EMISOR OUT NUMBER,
    P_VINCULADO OUT NUMBER,
    P_DOCUMENTO OUT VARCHAR2,
    P_VINC_DESC OUT VARCHAR2
  ) IS
    V_VALIDAR NUMBER;
    P_TARJ_ENCRI VARCHAR2(100); -- Declarar la variable que faltaba
  BEGIN
    
    SELECT CREDITOPY.FC_PAN2CRIPTO(P_NUM_TARJ)
    INTO P_TARJ_ENCRI
    FROM DUAL;
    
    
    -- Primera consulta corregida (remover la coma antes de INTO)
    SELECT T.EMISOR,
           T.DOCUMENTO,
           T.GRUPO_AFINIDAD
    INTO P_EMISOR, P_DOCUMENTO, P_AFINIDAD
    FROM CREDITOPY.TARJETAS T
    WHERE T.TARJETA = P_TARJ_ENCRI;

    P_DOCUMENTO := TO_CHAR(TO_NUMBER(SUBSTR(P_DOCUMENTO, 4)));
    
    BEGIN
    -- Tercera consulta
       SELECT ESTADO
       INTO V_VALIDAR
       FROM CREDITOPY.DIMO_TC_VINC_PROCESO dtvp
       WHERE dtvp.DOCUMENTO = P_DOCUMENTO
        AND dtvp.TARJETA = P_TARJ_ENCRI
        AND ROWNUM = 1
        ORDER BY dtvp.fecha_hora_ins DESC;
    EXCEPTION
        WHEN NO_DATA_FOUND THEN
            V_VALIDAR := 3;  -- Si no se encuentra ninguna fila, asigna el valor 3
    END;

    -- Estructura condicional IF en lugar de CASE
  CASE V_VALIDAR
      WHEN 0 THEN
          P_VINCULADO := 0;
          P_VINC_DESC := 'EL USUARIO NO COMPLETO EL INTENTO';
      WHEN 1 THEN
          P_VINCULADO := 1;
          P_VINC_DESC := 'EL USUARIO VINCULO CORRECTAMENTE';
      WHEN 2 THEN
          P_VINCULADO := 0;
          P_VINC_DESC := 'EL USUARIO FALLO EN RESPONDER LAS PREGUNTAS DE SEGURIDAD';
      ELSE
          P_VINCULADO := 0;
          P_VINC_DESC := 'EL USUARIO AUN NO INTENTO VINCULAR';
  END CASE;
    
  END PR_VALIDAR_TOKEN_TARJ;
  
 /*			VALIDAR PERMISOS DEL USUARIO PARA CAMBIAR LOS DATOS DE SU CUENTA			*/
 /*
	AUTOR: ARTURO SOSA
	FECHA CREACION: 08/10/2024
	DESCRIPCION: Este procedimiento recibe el documento del usuario y debe controlar:
		1. Que el documento pertenezca a un usario.
		2. Si el usuario está validado por ATC (FLAG DIMO_SICOOP.D_CLIENTE@SICOOP => FLAG_VALIDADO_ATC).
		3. Si tiene abierto la incidencia para cambio de ese dato ().
		4. Si el usuario tiene permiso para cambiar ese dato (DIMO_SICOOP.D_FUNCIONALIDAD => ).
		Solo si cumple esos requisitos, debe devolver validado = true
		
	DEUDA TECNICA:El MACHEO DE CODIGO BACKEND e ID_TIPO_INCIDENCIA "está en duro" (no es critico, por que coinciden en ambos ambientes)
	
	FECHA MODIFICACION: 
	DESCRIPCION DE CAMBIOS: 
  */
  PROCEDURE PR_VALIDAR_PERMISO_DATOS (
    CP_documento IN VARCHAR2,
    CP_codigo IN VARCHAR2,
    NP_validado OUT NUMBER,
    CP_descripcion OUT VARCHAR2
  ) IS
	V_CLIENTE_ID NUMBER;
	V_FLAG_VALIDADO_ATC NUMBER;
	V_TIPO_INCIDENCIA_ID NUMBER;
	V_CLIENTE_INCIDENCIA_ID NUMBER;
	V_VALIDADO NUMBER;
  BEGIN
	  
    --VALIDAR QUE EL DOCUMENTO SEA USUARIO Y ESTÉ VALIDADO POR ATC
	BEGIN
		SELECT dc.CLIENTE_ID, dc.FLAG_VALIDADO_ATC
		INTO V_CLIENTE_ID, V_FLAG_VALIDADO_ATC
		FROM DIMO_SICOOP.D_CLIENTE@SICOOP dc
		WHERE dc.CI = CP_documento;
		EXCEPTION
        	WHEN OTHERS THEN
            	V_CLIENTE_ID := 0;
            	CP_descripcion := 'Error inesperado: ' || SQLERRM;
	END;

   --SI ES USUARIO DIMO
	IF V_CLIENTE_ID != 0 THEN
		--SI ES USUARIO DIMO y SI ESTÄ HABILITADO POR ATC
		IF V_FLAG_VALIDADO_ATC = 1 THEN
			--VERIFICACION PARA OBTENER EL TIPO_INCIDENCIA_ID.
			CASE CP_codigo
			    WHEN 'PERFILMOD_CELLPHONE' THEN
			        V_TIPO_INCIDENCIA_ID := 20;
			    WHEN 'PERFILMOD_EMAIL' THEN
			        V_TIPO_INCIDENCIA_ID := 19;
			    WHEN 'PERFILMOD_DATA' THEN
			        V_TIPO_INCIDENCIA_ID := 18;
				ELSE
			        V_TIPO_INCIDENCIA_ID := 0;
			END CASE;
		
			--SI ES UN TIPO DE INCIDENCIA VALIDO
			IF V_TIPO_INCIDENCIA_ID != 0 THEN
			
				--OBTENER EL ID DE LA INCIDENICA Y EL ESTADO
				BEGIN
					SELECT dci.CLIENTE_INCIDENCIA_ID
					INTO V_CLIENTE_INCIDENCIA_ID
					FROM DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
					WHERE dci.CLIENTE_ID = V_CLIENTE_ID AND dci.TIPO_INCIDENCIA_ID = V_TIPO_INCIDENCIA_ID AND dci.ESTADO = 1
					AND ROWNUM = 1;
					EXCEPTION
			        	WHEN OTHERS THEN
			            	V_CLIENTE_INCIDENCIA_ID := 0;
				END;
			
				--SI TIENE LA INCIDENCIA
				IF V_CLIENTE_INCIDENCIA_ID != 0 THEN
					--VERIFICAR SI TIENE EL PERMISO HABILITADO
					BEGIN
						SELECT dfd.ACTIVO INTO V_VALIDADO
						FROM DIMO_SICOOP.D_FUNCIONALIDAD_DOC@SICOOP dfd
						WHERE dfd.DOCUMENTO = CP_documento AND dfd.ACTIVO = 1
						AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = CP_codigo);						
						EXCEPTION
						   WHEN OTHERS THEN
						       V_VALIDADO := 0;
						     /*BEGIN
			                   dbms_output.put_line('documento:'||CP_documento); 
			                   dbms_output.put_line('codigo:'||CP_codigo); 
			                   dbms_output.put_line(sqlerrm);
						     END;*/
					END;
				
					IF V_VALIDADO = 1 THEN
						NP_validado := 1;
						CP_descripcion := 'El usuario tiene los permisos para cambiar el dato';
					ELSE
						NP_validado := 0;
						CP_descripcion := 'El usuario no tiene permiso de ATC para cambiar el dato';
					END IF;

				--EL DOCUMENTO NO TIENE LA INCIDENCIA
				ELSE
					NP_validado := 0;
					CP_descripcion := 'No existe la incidencia valida para ese documento';
				END IF;			
			ELSE
				NP_validado := 0;
				CP_descripcion := 'No corresponde el tipo de incidencia';
			END IF;
		--NO ESTÁ HABILITADO POR ATC
		ELSE
			NP_validado := 0;
			CP_descripcion := 'El usuario no está habilitado por ATC';
		END IF;
	
   --NO ES USUARIO DIMO
	ELSE
		NP_validado := 0;
		CP_descripcion := 'El documento ingresado no pertenece a ningún usuario';
	END IF;

  END PR_VALIDAR_PERMISO_DATOS;
 
 /*			CERRAR LOS PERMISOS DEL USUARIO AL CAMBIAR LOS DATOS DE SU CUENTA			*/
 /*
	AUTOR: ARTURO SOSA
	FECHA CREACION: 08/10/2024
	DESCRIPCION: Este procedimiento debe:
		1. Debe verificar que el usuario tenga habilitado ese permiso.
		2. Sacarle el permiso al usuario de modificar sus datos.
		3. Cerrar la incidencia.
		4. Dejar el registro del detalle de la incidencia.
		
	DEUDA TECNICA:El MACHEO DE CODIGO BACKEND e ID_TIPO_INCIDENCIA "está en duro" (no es critico, por que coinciden en ambos ambientes)
	
	FECHA MODIFICACION: 
	DESCRIPCION DE CAMBIOS: 
  */
  PROCEDURE PR_CERRAR_PERMISO_DATOS (
    CP_documento IN VARCHAR2,
    CP_codigo IN VARCHAR2,
    NP_validado OUT NUMBER,
    CP_descripcion OUT VARCHAR2
  ) IS
	V_VALIDADO NUMBER;
	V_VALIDADO_DESC VARCHAR2(100);
	V_TIPO_INCIDENCIA_ID NUMBER;
	V_CLIENTE_INCIDENCIA_ID NUMBER;
	V_ID_DETALLE NUMBER;

  BEGIN
	  
	 --VERIFICAR QUE EL USUARIO TENGA EL PERMISO PARA CAMBIAR EL DATO
	BEGIN
		V_VALIDADO_DESC := 'Sin validar';
		CREDITOPY.PKG_DIMO_SECURITY.PR_VALIDAR_PERMISO_DATOS(CP_documento, CP_codigo, V_VALIDADO, V_VALIDADO_DESC);
	END;

	--USUARIO VALIDADO PARA CAMBIAR EL DATO
	IF V_VALIDADO = 1 THEN
		--SACARLE EL PERMISO AL USUARIO	
		UPDATE DIMO_SICOOP.D_FUNCIONALIDAD_DOC@SICOOP dfd
		SET dfd.ACTIVO = 0
		WHERE dfd.DOCUMENTO = CP_documento AND dfd.ACTIVO = 1
		AND dfd.FUNCIONALIDAD_ID = (SELECT df.FUNCIONALIDAD_ID FROM DIMO_SICOOP.D_FUNCIONALIDAD@SICOOP df WHERE df.CODIGO = CP_codigo);

		--CERRAR LA INCIDENCIA
		CASE CP_codigo
		    WHEN 'PERFILMOD_CELLPHONE' THEN
		        V_TIPO_INCIDENCIA_ID := 20;
		    WHEN 'PERFILMOD_EMAIL' THEN
		        V_TIPO_INCIDENCIA_ID := 19;
		    WHEN 'PERFILMOD_DATA' THEN
		        V_TIPO_INCIDENCIA_ID := 18;
			ELSE
		        V_TIPO_INCIDENCIA_ID := 0;
		END CASE;
		--RECUPERAR ID DE LA INCIDENCIA
		BEGIN
			SELECT dci.CLIENTE_INCIDENCIA_ID
			INTO V_CLIENTE_INCIDENCIA_ID
			FROM DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
			WHERE dci.TIPO_INCIDENCIA_ID = V_TIPO_INCIDENCIA_ID AND dci.ESTADO = 1
			AND dci.CLIENTE_ID = (SELECT dc.CLIENTE_ID FROM DIMO_SICOOP.D_CLIENTE@SICOOP dc WHERE dc.CI = CP_documento);
			EXCEPTION
	        	WHEN NO_DATA_FOUND THEN
	            	V_CLIENTE_INCIDENCIA_ID := 0;
		END;
		
		IF V_CLIENTE_INCIDENCIA_ID != 0 THEN
			--ACTUALIZAR CABECERA
			UPDATE DIMO_SICOOP.D_CLIENTE_INCIDENCIA@SICOOP dci
			SET dci.ESTADO = 2
			WHERE dci.CLIENTE_INCIDENCIA_ID = V_CLIENTE_INCIDENCIA_ID;
		
			 SELECT DIMO_SICOOP.S_D_CLIENTE_INCIDENCIA_DETALLE.nextval@SICOOP INTO V_ID_DETALLE FROM dual;
			
			--INSERTAR DETALLE
			INSERT INTO DIMO_SICOOP.D_CLIENTE_INCIDENCIA_DETALLE@SICOOP
			(CLIENTE_INCIDENCIA_DETALLE_ID, CLIENTE_INCIDENCIA_ID, USUARIO_CRM, FECHA, CAMBIO_ESTADO, DESCRIPCION)
			VALUES(V_ID_DETALLE, V_CLIENTE_INCIDENCIA_ID, 'BACKEND', sysdate, '2', 'SE SACA EL PERMISO');

			NP_validado := 1;
			CP_descripcion := 'Se Cerraron las incidencias y se saco el permiso al usuario';
		
		ELSE
			NP_validado := 0;
			CP_descripcion := 'No se encontró una incidencia válida para el usuario';
		END IF;
	
	--EL USUARIO NO PUEDE CAMBIAR EL DATO
	ELSE
		NP_validado := 0;
		CP_descripcion := V_VALIDADO_DESC;
	END IF;
  END PR_CERRAR_PERMISO_DATOS;
 
END PKG_DIMO_SECURITY;


ROLLBACK

  1. NO POSEE ROLLBACK



  • No labels