You are on page 1of 3

CREATE PROCEDURE sp_trig_inc_insert (p_id_incidente like incidente.id_incidente, p_titulo like incidente.titulo_incidente, p_descripcion like incidente.

descri pcion, p_id_empleado like incidente.id_empleado, p_id_categoria like incidente.id_ca tegoria, p_id_severidad like incidente.id_severidad, p_id_area like incidente.id_area) DEFINE l_id_estado like estado.id_estado; DEFINE l_grado_avance integer; DEFINE l_fecha_alta like incidente.fecha_alta; -- No va el BEGIN WORK porque esta detro de un trigger -- Se setean las variables LET l_fecha_alta = TODAY; LET l_grado_avance = 0; SELECT id_estado INTO l_id_estado FROM estado WHERE descripcion = 'INGRESADO'; -- Se graban los campos faltantes UPDATE INCIDENTE SET fecha_alta = l_fecha_alta, grado_avance = l_grado_avance, id_estado = l_id_estado WHERE id_incidente = p_id_incidente; -- Se graban todos los campos en el log INSERT INTO log_incidente VALUES (p_id_incidente, p_titulo, p_descripcion, NULL, l_fecha_alta , l_grado _avance, NULL, p_id_severidad, l_id_estado, p_id_empleado, p_id_categoria, p_i d_area); -END PROCEDURE; / CREATE PROCEDURE sp_asig_cant_inc_sol () DEFINE l_id_tecnico like tecnico.id_empleado; DEFINE l_ranking integer; BEGIN WORK; LET l_ranking = 0; FOREACH -- Se listan los tecnicos de mayor a menor SELECT tecnico.id_empleado INTO l_id_tecnico FROM tecnico_asignado_incidente tai, tecnico, incidente, estado WHERE tai.id_incidente = incidente.id_incidente AND tai.id_empleado = tecnico.id_empleado AND incidente.id_estado = estado.id_estado AND (estado.descripcion = 'SOLUCIONADO' OR estado.descripcion = 'FINALIZADO') AND incidente.fecha_alta >= (SELECT TO_DATE(valor,'%d-%m-%Y') FROM parametro WHERE clave = 1) GROUP BY tecnico.id_empleado ORDER BY count(*) DESC -- Se suma 1 al ranking LET l_ranking = l_ranking + 1; -- Se graba en la tabla UPDATE ranking_tecnico SET ranking = l_ranking WHERE id_empleado = l_id_tecnico

AND id_criterio_asignacion = 1; END FOREACH; COMMIT WORK; END PROCEDURE; / CREATE PROCEDURE sp_asig_cant_inc_sol_sev () DEFINE l_id_tecnico like tecnico.id_empleado; DEFINE l_id_severidad like severidad.id_severidad; DEFINE l_ranking integer; BEGIN WORK; LET l_ranking = 0; FOREACH -- Se listan los tecnicos de mayor a menor SELECT tecnico.id_empleado, severidad.id_severidad INTO l_id_tecnico, l_id_severidad FROM tecnico_asignado_incidente tai, tecnico, incidente, estado, severidad WHERE tai.id_incidente = incidente.id_incidente AND tai.id_empleado = tecnico.id_empleado AND incidente.id_estado = estado.id_estado AND severidad.id_severidad = incidente.id_severidad AND (estado.descripcion = 'SOLUCIONADO' OR estado.descripcion = 'FINALIZADO') AND incidente.fecha_alta >= (SELECT TO_DATE(valor,'%d-%m-%Y') FROM parametro WHERE clave = 1) GROUP BY tecnico.id_empleado, severidad.id_severidad ORDER BY count(*) DESC -- Se suma 1 al ranking LET l_ranking = l_ranking + 1; -- Se graba en la tabla UPDATE ranking_tecnico SET ranking = l_ranking WHERE id_empleado = l_id_tecnico AND id_severidad = l_id_severidad AND id_criterio_asignacion = 2; END FOREACH; COMMIT WORK; END PROCEDURE; / CREATE PROCEDURE SP_asig_aut_tecnico(pid_incidente INTEGER, pid_severidad INTEGE R, pid_empleado INTEGER) DEFINE s_valor_criterio like severidad.valor_criterio; DEFINE p_valor_criterio like perfil.valor_criterio; DEFINE suma_val_criterio INTEGER; DEFINE p_id_criterio_asignacion like criterio_asignacion.id_criterio_asignac ion; DEFINE p_id_empleado like ranking_tecnico.id_empleado; DEFINE p_fecha_hoy DATE; LET p_fecha_hoy = TODAY; select valor_criterio into s_valor_criterio from severidad where id_severidad = pid_severidad; select p.valor_criterio into p_valor_criterio from perfil p, usuario u

where p.id_perfil = u.pid_perfil and u.id_empleado = pid_empleado; LET suma_val_criterio = s_valor_criterio + p_valor_criterio; select id_criterio_asignacion into p_id_criterio_asignacion from criterio_asignacion where suma_val_criterio between valor_criterio_desde and valor_criterio_hasta; select first 1 id_empleado into p_id_empleado from ranking_tecnico where id_criterio_asignacion = p_id_criterio_asignacion; --order by cantidad_incidencias_cola,ranking; insert into tecnico_asignado_incidente(id_grado_satisfaccion, fecha_asignacion , fecha_finalizacion, id_incidente, id_empleado) values(NULL, p_fecha_hoy, NULL, pid_incidente, p_id_empleado); COMMIT WORK; END PROCEDURE;

You might also like