store_procedures.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. create or replace PROCEDURE pc_create_up_scorecard(p_provider_id IN INTEGER,
  2. p_year IN INTEGER,
  3. p_month IN INTEGER)
  4. IS
  5. CURSOR cur_score_cate (p_provider_id IN scorecard_PROVIDER.PROVEEDORES_ID%TYPE,
  6. p_month IN SCORECARD_PROVIDER_MONTH.MONTH%TYPE,
  7. p_year IN scorecard_PROVIDER.YEAR%TYPE) is
  8. SELECT to_number(EXTRACT(MONTH FROM ed.mes), 99) mes,
  9. to_number(EXTRACT(YEAR FROM ed.mes), 9999) YEAR,
  10. p.NOMBRE,a.NOMBRE,c.NOMBRE,
  11. p.id,
  12. a.ID,c.id,
  13. avg(ed.CALIFICACION_ACTUAL) promedio_area
  14. FROM EVALUACION_DET ed
  15. JOIN EVALUACION e ON ed.EVALUACION_ID = e.id
  16. JOIN areas a ON e.AREAS_ID = a.id
  17. JOIN categorias c ON ed.CATEGORIAS_ID = c.id
  18. JOIN kpi k ON a.KPI_ID = k.id
  19. JOIN PROVEEDORES P on e.PROVEEDORES_ID = P.ID
  20. WHERE p.id = p_provider_id
  21. AND to_number(EXTRACT(MONTH FROM ed.mes), 99) = p_month
  22. AND to_number(EXTRACT(year FROM ed.mes), 9999) = p_year
  23. GROUP BY to_number(EXTRACT(MONTH FROM ed.mes), 99),
  24. to_number(EXTRACT(YEAR FROM ed.mes), 9999),
  25. p.NOMBRE,a.NOMBRE,c.NOMBRE,
  26. p.id,
  27. a.ID,c.id
  28. order by mes;
  29. CURSOR cur_score_area (
  30. p_provider_id scorecard_PROVIDER.PROVEEDORES_ID%TYPE,
  31. p_month SCORECARD_PROVIDER_MONTH.MONTH%TYPE,
  32. p_year scorecard_PROVIDER.YEAR%TYPE,
  33. p_area_id IN scorecard_PROVIDER.YEAR%TYPE) is
  34. SELECT avg(ed.CALIFICACION_ACTUAL)
  35. FROM EVALUACION_DET ed
  36. JOIN EVALUACION e ON ed.EVALUACION_ID = e.id
  37. JOIN areas a ON e.AREAS_ID = a.id
  38. JOIN categorias c ON ed.CATEGORIAS_ID = c.id
  39. JOIN PROVEEDORES P on e.PROVEEDORES_ID = P.ID
  40. WHERE p.id = p_provider_id
  41. AND to_number(EXTRACT(MONTH FROM ed.mes), 99) = p_month
  42. AND to_number(EXTRACT(year FROM ed.mes), 9999) = p_year
  43. and a.id = p_area_id;
  44. CURSOR cur_score_global (p_provider_id scorecard_PROVIDER.PROVEEDORES_ID%TYPE,
  45. p_month SCORECARD_PROVIDER_MONTH.MONTH%TYPE,
  46. p_year scorecard_PROVIDER.YEAR%TYPE) is
  47. select avg(promedio_categoria),NOMBRE
  48. from (SELECT e.id eval_id,
  49. c.id categoria_id,
  50. to_number(EXTRACT(MONTH FROM ed.mes), 99) mes,
  51. to_number(EXTRACT(YEAR FROM ed.mes), 9999) YEAR,
  52. p.NOMBRE,
  53. p.id provedorId,
  54. avg(ed.CALIFICACION_ACTUAL) promedio_categoria
  55. FROM EVALUACION_DET ed
  56. JOIN EVALUACION e ON ed.EVALUACION_ID = e.id
  57. JOIN categorias c ON ed.CATEGORIAS_ID = c.id
  58. JOIN PROVEEDORES P on e.PROVEEDORES_ID = P.ID
  59. where p.id = p_provider_id
  60. and to_number(EXTRACT(MONTH FROM ed.mes), 99) = p_month
  61. AND to_number(EXTRACT(year FROM ed.mes), 9999) = p_year
  62. GROUP BY e.id, c.id, p.nombre, p.id, to_number(EXTRACT(MONTH FROM ed.mes), 99),
  63. to_number(EXTRACT(YEAR FROM ed.mes), 9999))
  64. group by YEAR, NOMBRE, provedorId; --mes,
  65. CURSOR cur_score_year (
  66. p_provider_id scorecard_PROVIDER.PROVEEDORES_ID%TYPE,
  67. p_month IN SCORECARD_PROVIDER_MONTH.MONTH%TYPE,
  68. p_year scorecard_PROVIDER.YEAR%TYPE) is
  69. select p.id, p.LAST_SCORE
  70. from SCORECARD_PROVIDER p
  71. where p.PROVEEDORES_ID = p_provider_id
  72. and p.YEAR = p_year
  73. and p.MONTH = p_month;
  74. CURSOR cur_quiz_comments
  75. (p_provider_id scorecard_PROVIDER.PROVEEDORES_ID%TYPE,
  76. p_month SCORECARD_PROVIDER_MONTH.MONTH%TYPE,
  77. p_year scorecard_PROVIDER.YEAR%TYPE)
  78. is
  79. select d.id,d.comentario,d.CREATED_DATE,d.CREATED_BY
  80. from EVALUACION_DET_COMMENTARIOS d
  81. join evaluacion_det e on e.id =d.EVALUACION_DET_ID
  82. join evaluacion x on x.id = e.EVALUACION_ID
  83. and x.PROVEEDORES_ID = p_provider_id
  84. and to_number(EXTRACT(MONTH FROM e.mes), 99) = p_month
  85. AND to_number(EXTRACT(year FROM e.mes), 9999) = p_year;
  86. L_NAME scorecard_PROVIDER.NAME%TYPE;
  87. L_LAST_SCORE_AREA SCORECARD_PROVIDER_MONTH.SCORE%TYPE;
  88. L_LAST_SCORE scorecard_PROVIDER.LAST_SCORE%TYPE; -- CATGORIAS
  89. L_BEFORE_SCORE scorecard_PROVIDER.BEFORE_SCORE%TYPE;
  90. L_TOTAL_AVG scorecard_PROVIDER.TOTAL_AVG%TYPE;
  91. L_TARGET scorecard_PROVIDER.TARGET%TYPE:=5;
  92. L_YEAR scorecard_PROVIDER.YEAR%TYPE:=p_year;
  93. L_CREATED_DATE scorecard_PROVIDER.CREATED_DATE%TYPE;
  94. L_PROVEEDORES_ID scorecard_PROVIDER.PROVEEDORES_ID%TYPE:=p_provider_id;
  95. L_SCORECARD_PROVIDER SCORECARD_PROVIDER.PROVEEDORES_ID%TYPE;
  96. L_MONTH SCORECARD_PROVIDER_MONTH.MONTH%TYPE:=p_month;
  97. L_SCORECARD_PROVIDER_ID SCORECARD_PROVIDER.ID%TYPE;
  98. L_NOMBRE_AREA scorecard_PROVIDER_MONTH.NOMBRE_AREA%TYPE;
  99. L_NOMBRE_CATEGORIA scorecard_PROVIDER_MONTH.NOMBRE_CATEGORIA%TYPE;
  100. L_ID_AREA AREAS.ID%TYPE;
  101. L_ID_CATEGORIA CATEGORIAS.ID%TYPE;
  102. L_COMMENT EVALUACION_DET_COMMENTARIOS.COMENTARIO%TYPE;
  103. L_COMMENT_ID EVALUACION_DET_COMMENTARIOS.ID%TYPE;
  104. L_COMMENT_CREATED_DATE EVALUACION_DET_COMMENTARIOS.CREATED_DATE%TYPE;
  105. L_CREATED_BY EVALUACION_DET_COMMENTARIOS.CREATED_BY%TYPE;
  106. BEGIN
  107. OPEN cur_score_global(p_provider_id,p_month,p_year);
  108. FETCH cur_score_global INTO L_TOTAL_AVG,L_NAME;
  109. CLOSE cur_score_global;
  110. OPEN cur_score_year (p_provider_id,p_month,p_year);
  111. FETCH cur_score_year INTO L_SCORECARD_PROVIDER_ID, L_LAST_SCORE;
  112. CLOSE cur_score_year;
  113. if L_SCORECARD_PROVIDER_ID > 0
  114. then
  115. UPDATE SCORECARD_PROVIDER
  116. SET NAME = L_NAME,
  117. LAST_SCORE = L_TOTAL_AVG,
  118. BEFORE_SCORE = L_BEFORE_SCORE,
  119. TOTAL_AVG = L_TOTAL_AVG,
  120. TARGET = L_TARGET,
  121. YEAR = L_YEAR,
  122. UPDATED_DATE = CURRENT_DATE
  123. WHERE ID = L_SCORECARD_PROVIDER_ID;
  124. else
  125. L_SCORECARD_PROVIDER_ID := scorecard_provider_seq.nextval;
  126. INSERT INTO SCORECARD_PROVIDER (ID,
  127. NAME,
  128. LAST_SCORE,
  129. BEFORE_SCORE,
  130. TOTAL_AVG,
  131. TARGET,
  132. YEAR,
  133. CREATED_DATE,
  134. PROVEEDORES_ID,
  135. STATUS,
  136. MONTH)
  137. values( L_SCORECARD_PROVIDER_ID,
  138. L_NAME,
  139. L_TOTAL_AVG,
  140. 0,
  141. L_TOTAL_AVG,--L_LAST_SCORE,
  142. L_TARGET,--L_BEFORE_SCORE,
  143. p_year,
  144. CURRENT_DATE,
  145. p_provider_id,
  146. 'NO INICIADO',
  147. p_month)
  148. ;
  149. end if;
  150. delete SCORECARD_PROVIDER_MONTH where SCORECARD_PROVIDER_ID = L_SCORECARD_PROVIDER_ID;
  151. OPEN cur_score_cate(p_provider_id, p_month, p_year);
  152. LOOP
  153. FETCH cur_score_cate INTO L_MONTH,L_YEAR,
  154. L_NAME,L_NOMBRE_AREA,L_NOMBRE_CATEGORIA,L_PROVEEDORES_ID,L_ID_AREA,L_ID_CATEGORIA,
  155. L_LAST_SCORE;
  156. EXIT WHEN cur_score_cate%NOTFOUND OR cur_score_cate%NOTFOUND IS NULL;
  157. open cur_score_area(p_provider_id, p_month, p_year,L_ID_AREA);--nota agrupada de las categorias al area
  158. FETCH cur_score_area INTO L_LAST_SCORE_AREA;
  159. CLOSE cur_score_area;
  160. INSERT INTO SCORECARD_PROVIDER_MONTH (ID,
  161. MONTH,
  162. SCORE,
  163. BEFORE_SCORE,
  164. SCORE_CATEGORY,
  165. BEFORE_SCORE_CATEGORY,
  166. CREATED_DATE,
  167. SCORECARD_PROVIDER_ID,
  168. ESTADO,
  169. NOMBRE_AREA,
  170. NOMBRE_CATEGORIA,
  171. ID_AREA,ID_CATEGORIA)
  172. VALUES (scorecard_provider_month_seq.nextval,
  173. L_MONTH,
  174. L_LAST_SCORE_AREA,
  175. L_LAST_SCORE_AREA,
  176. L_LAST_SCORE,
  177. L_LAST_SCORE,
  178. CURRENT_DATE,
  179. L_SCORECARD_PROVIDER_ID,
  180. 'NO INICIADO',
  181. L_NOMBRE_AREA,
  182. L_NOMBRE_CATEGORIA,
  183. L_ID_AREA,L_ID_CATEGORIA);
  184. END LOOP;
  185. close cur_score_cate;
  186. delete SCORECARD_PROVIDER_COMMENTS where SCORECARD_PROVIDER_ID = L_SCORECARD_PROVIDER_ID;
  187. OPEN cur_quiz_comments (p_provider_id,p_month,p_year);
  188. LOOP
  189. FETCH cur_quiz_comments INTO L_COMMENT_ID,L_COMMENT,L_COMMENT_CREATED_DATE,L_CREATED_BY;
  190. EXIT WHEN cur_quiz_comments%NOTFOUND OR cur_quiz_comments%NOTFOUND IS NULL;
  191. INSERT INTO SCORECARD_PROVIDER_COMMENTS (ID,
  192. COMMENTS,
  193. CREATED_DATE,
  194. CREATED_USER,
  195. SCORECARD_PROVIDER_ID)
  196. VALUES (L_COMMENT_ID,
  197. L_COMMENT,
  198. L_COMMENT_CREATED_DATE,
  199. L_CREATED_BY,
  200. L_SCORECARD_PROVIDER_ID
  201. );
  202. END LOOP ;
  203. CLOSE cur_quiz_comments;
  204. END pc_create_up_scorecard;
  205. ;