Advertisement
Guest User

Untitled

a guest
Jan 12th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: esq_roles.fnc_login(character varying, character varying, character varying, character varying, character varying, character varying, character varying, integer, character varying)
  2.  
  3. -- DROP FUNCTION esq_roles.fnc_login(character varying, character varying, character varying, character varying, character varying, character varying, character varying, integer, character varying);
  4.  
  5. CREATE OR REPLACE FUNCTION esq_roles.fnc_login(
  6.     p_usuario character varying,
  7.     p_clave character varying,
  8.     p_terminal character varying,
  9.     p_sistema_operativo character varying,
  10.     p_puerto character varying,
  11.     p_direccion_ip character varying,
  12.     p_navegador character varying,
  13.     p_idsistema integer,
  14.     p_clave_moodle character varying DEFAULT ''::character varying)
  15.   RETURNS character varying AS
  16. $BODY$
  17. DECLARE
  18.     v_reg  bigint:=0;
  19.     d_fecha TIMESTAMP;
  20.     v_cedula VARCHAR;
  21.     v_habilitado VARCHAR(1);
  22.     v_password_changed VARCHAR(1);
  23.     v_idpersonal BIGINT:=0;
  24.     v_accesos_fallidos integer=0;
  25.     v_bloqueado VARCHAR(1);
  26.     v_clave_temp VARCHAR;
  27.     v_retorno VARCHAR(50);
  28.     v_dias_diff BIGINT:=0;
  29.     v_veces INTEGER;
  30.     v_msg varchar;
  31.     v_auditoria_detalle varchar;
  32.     v_equipo varchar;
  33.     v_aux_auditoria VARCHAR;
  34.     v_puede_loguear VARCHAR;
  35.     v_existe INTEGER;
  36.     V_TMP VARCHAR;
  37. BEGIN
  38.  if p_usuario is null then
  39.     RETURN 'Error:<p>El ingreso del usuario es obligatorio </p>';    
  40.     rollback;
  41.   end if;  
  42.  
  43.  
  44.  
  45.  
  46.   SELECT COALESCE(count(datos.idpersonal),0) into v_reg
  47.   FROM dblink(esq_roles.fnc_con_sga()::text,
  48.   'select p.idpersonal,p.correo_personal_institucional  from esq_datos_personales.personal p'::text) datos( idpersonal bigint,correo_personal_institucional character varying(100))
  49.   where correo_personal_institucional=trim(p_usuario) ;
  50.   if v_reg >1 then
  51.         RETURN 'Error:<p>Problemas al iniciar sesion con el usuario [<b>'|| p_usuario ||'</b>], solicite revision del mismo!</p>';        
  52.         rollback;
  53.   end if;
  54.   if v_reg =0 then
  55.         RETURN 'Error:<p>El usuario [<b>'|| p_usuario ||'</b>],No existe!</p>';        
  56.         rollback;
  57.   end if;
  58.   SELECT  datos.cedula,datos.idpersonal,datos.estado_usuario,datos.accesos_fallidos,datos.password_changed,datos.bloqueado
  59.   into v_cedula, v_idpersonal,v_habilitado, v_accesos_fallidos, v_password_changed,v_bloqueado
  60.   FROM dblink(esq_roles.fnc_con_sga()::text,
  61.   'select p.cedula,p.idpersonal,p.estado_usuario,accesos_fallidos,password_changed,bloqueado,correo_personal_institucional
  62.  from esq_datos_personales.personal p'::text)    
  63.   datos(cedula character varying(100)  , idpersonal bigint,estado_usuario character varying(1),accesos_fallidos integer,password_changed character varying(1),
  64.   bloqueado character varying(1),correo_personal_institucional character varying(100))
  65.   where correo_personal_institucional=trim(p_usuario);
  66.  
  67.     ---- VALIDACION DE ENCUESTA MOODLE ENFERMERIA
  68.   ---- 5-MAYO-2017
  69.   /*
  70.   select COALESCE(count(t.idpersonal),0) into v_reg from esq_configuraciones.tbl_validacion t
  71.   where t.idpersonal = v_idpersonal and t.id_tipo=1;
  72.  
  73.   if v_reg > 0 then
  74.  
  75.     SELECT COALESCE(count(datos.correo),0) into v_reg
  76.     FROM dblink(esq_roles.fnc_con_moodle()::text,
  77.     'SELECT mdl_user.username, mdl_feedback_completed.feedback
  78.     FROM
  79.       public.mdl_user
  80.       INNER JOIN public.mdl_feedback_completed ON (public.mdl_user.id = public.mdl_feedback_completed.userid)'::text)
  81.     datos( correo character varying(100), id_encuesta bigint)
  82.     where correo=trim(p_usuario) and id_encuesta = 344 ;
  83.     /*
  84.     if v_reg =0 then       
  85.           RETURN 'Error:<p>El usuario [<b>'|| p_usuario ||'</b>], Debe realizar la evaluación de la carrera de Enfermería.ingrese a www.evirtual.utm.edu.ec !</p>';        
  86.           rollback;
  87.     end if;
  88.     */
  89.   end if;  
  90.   ---- VALIDACION DE ENCUESTA MOODLE ENFERMERIA
  91.   ---- 5-MAYO-2017
  92.  
  93. */
  94.  
  95.   if (v_bloqueado='S') then
  96.     return 'Error:<p>Cuenta de usuario [<b>'|| p_usuario || '</b>] <br><br><b><font color = #FF001C>Bloqueada por disposicion de las autoridades</font></b>.</p>';    
  97.     ROLLBACK;
  98.   end if;  
  99.  
  100.   if (v_habilitado = 'N') then
  101.      return 'Error:<p>Cuenta de usuario [<b> '|| v_habilitado || '</b>] se encuentra <b><font color = #FF001C>deshabilitada</font></b>.</p><p>Si es estudiante solicite reinicio clave en la secretaria de su Escuela </p>';    
  102.      ROLLBACK;
  103.  end if;
  104.  if(v_accesos_fallidos >= 6) then
  105.      return 'Alerta: <p>Hemos detectado varios intentos de <b><font color = #FF001C>accesos fallidos</font></b> desde la cuenta de usuario [<b>'|| p_usuario || '</b>], debe cambiar su clave o si es estudiante tambien puede solicitar reinicio clave en la secretaria de su Escuela </p>';    
  106.      ROLLBACK;
  107.  end if;
  108.  
  109.  
  110.  select COUNT(c.id_personal) into v_veces from esq_roles.tbl_clave c where c.id_personal = v_idpersonal and c.estado = 'S';
  111.  if (v_veces = 0 ) then
  112.     SELECT esq_roles.fnc_regenera_clave(p_usuario, v_idpersonal, p_terminal, p_sistema_operativo, p_puerto, p_direccion_ip, p_navegador, p_idsistema) into v_msg  ;
  113.                     IF v_msg<> 'Ok.' THEN
  114.                     RETURN v_msg ;
  115.                     rollback;  
  116.                 end if;
  117.                 v_msg:='';    
  118.      RETURN 'Error:<p>Por inconvenientes con los datos de la cuenta de usuario [<b>'|| p_usuario|| '</b>] hemos reiniciado la clave de acceso al numero de cedula del usuario titular, ingrese nuevamente.</p>';    
  119.      ROLLBACK;
  120.  end if;
  121.  
  122.  
  123. select c.clave ,date(now())- date(c.fecha) into v_clave_temp,v_dias_diff  from esq_roles.tbl_clave c where c.id_personal = v_idpersonal and c.estado = 'S';
  124. if(v_clave_temp = (p_clave)) then
  125.         -- verificar que no este logueado en otro navegador
  126.         -- Patricio Toala 12-abril-2016
  127.      
  128.     /*  SELECT esq_roles.fnc_login_control(v_idpersonal, NULL) into v_puede_loguear;
  129.        
  130.         if(p_idsistema=5) then
  131.         if v_puede_loguear <> 'ok' then
  132.             return v_puede_loguear;
  133.             rollback;
  134.          end if;
  135.         end if;*/
  136.        
  137.             --  VERIFICA SI EXISTE EL USUARIO EN EL MOODLE
  138.                     -- SINO EXISTE LO CREA Y SIS EXISTE ACTUALIZA EL MAIL
  139.           -- Patricio Toala 18-septiembre-2017
  140.                     SELECT COALESCE(count(usuario_moodle.id_personal),0) into v_existe
  141.                         FROM dblink(esq_roles.fnc_con_sga()::text,
  142.                         'SELECT id_personal
  143.                         FROM
  144.                             esq_datos_personales.tbl_usuario_moodle'::text)
  145.                         usuario_moodle( id_personal bigint)
  146.                         where id_personal = v_idpersonal ;
  147.                        
  148.                     if (v_existe = 0) THEN                     
  149.                         --PERFORM dblink(esq_roles.fnc_con_sga(),'select esq_datos_personales.fnc_usuario_moodle ('|| v_idpersonal ||',''' || p_usuario || ''', ''' || p_clave_moodle || ''' )');  
  150.                         SELECT insertar_moodle.x into v_tmp
  151.                         FROM dblink(esq_roles.fnc_con_sga()::text,
  152.                         'select esq_datos_personales.fnc_usuario_moodle ('|| v_idpersonal ||',''' || p_usuario || ''', ''' || p_clave_moodle || ''' )'::text)
  153.                         insertar_moodle( x VARCHAR);
  154.                     ELSE
  155.                         PERFORM dblink(esq_roles.fnc_con_sga(),'update esq_datos_personales.tbl_usuario_moodle set mail = ''' || p_usuario || ''' where id_personal =' || v_idpersonal );          
  156.                     end if;
  157.        
  158.        
  159.        
  160.        
  161.           --verificar que no este logueado en otro navegador  
  162.          
  163.             -- actualiza la clave para el moodle en la tabla tbl_usuario_moodle  
  164.           if ( p_clave_moodle <> '' ) then                                      
  165.                 PERFORM dblink(esq_roles.fnc_con_sga(),'update esq_datos_personales.tbl_usuario_moodle set clave = ''' || p_clave_moodle || ''' where id_personal =' || v_idpersonal );            
  166.           end if;
  167.          
  168.            
  169.          
  170.           v_retorno := 'Ok.';
  171.           if (v_clave_temp = esq_roles.fnc_encripta_clave(v_cedula) or v_password_changed <> 'S') then
  172.             PERFORM dblink(esq_roles.fnc_con_sga(),'UPDATE esq_datos_personales.personal set accesos_fallidos=0 where idpersonal= ' || v_idpersonal);
  173.           else
  174.             PERFORM dblink(esq_roles.fnc_con_sga(),'UPDATE esq_datos_personales.personal set accesos_fallidos=0, logueado = 1, fecha_ultimo_ingreso = CURRENT_TIMESTAMP where idpersonal= ' || v_idpersonal);
  175.           end if;                  
  176.        
  177.           -- cambiar estado de personal.logueado de 0 a 1, y agregar la fecha y hora actual en fecha ultimo ingreso  
  178.           -- Patricio Toala 12-abril-2016
  179.    
  180.           --fin cambiar estado de personal.logueado de 0 a 1, y agregar la fecha y hora actual en fecha ultimo ingreso    
  181.        
  182.  else
  183.         v_retorno := 'no';
  184.         PERFORM dblink(esq_roles.fnc_con_sga(),'UPDATE esq_datos_personales.personal set accesos_fallidos='|| v_accesos_fallidos+1 ||' where idpersonal=' || v_idpersonal);
  185.  end if;
  186.  
  187. --se verifica el estado de la contraseña
  188.  if (v_clave_temp = esq_roles.fnc_encripta_clave(v_cedula) or v_password_changed <> 'S') then
  189.      
  190.    
  191.      
  192.      return 'Advertencia: <p>Debe <b>cambiar</b> la clave de acceso a la cuenta de usuario [<b>' || p_usuario || '</b>], acepte para abrir el formulario.</p>';
  193.      ROLLBACK;
  194.  end if;
  195.  
  196.  v_auditoria_detalle := '1 idpersonal:ND:' || v_idpersonal || ':S/O:S/F:|' ||                            
  197.                             '2 usuario:ND:' || p_usuario || ':S/O:S/F:|' ||' ' ;
  198.      -- *********** REGISTRAR AUDITORIA *****************
  199.     v_equipo:=p_terminal || ':' || p_sistema_operativo || ':' || p_puerto || ':' ||p_direccion_ip || ':' ||p_navegador ;
  200.  
  201.   /*   SELECT esq_auditorias.fnc_registra_auditoria(v_idpersonal, 1, 1, p_idsistema, v_equipo, v_auditoria_detalle) into v_aux_auditoria;  
  202.        
  203.      if v_aux_auditoria <>'Ok.' then
  204.         RAISE EXCEPTION 'ERROR AL GUARDAR VUELVA A INTENTAR.' ;
  205.         ROLLBACK;
  206.      end if;
  207. */
  208.  
  209.  RETURN v_retorno;
  210.  COMMIT;
  211.  
  212.  
  213.  
  214.  
  215. END;
  216. $BODY$
  217.   LANGUAGE plpgsql VOLATILE
  218.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement