Advertisement
Guest User

Untitled

a guest
Jun 20th, 2017
550
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.13 KB | None | 0 0
  1. --****************************************
  2. --********VISTA MATERIALIZADA*************
  3. --****************************************
  4. DROP MATERIALIZED VIEW VISTA_IDES_ACTIVIDADES_VALIDAS;
  5.  
  6. CREATE MATERIALIZED VIEW VISTA_IDES_ACTIVIDADES_VALIDAS
  7. PCTFREE 10
  8. STORAGE (
  9. INITIAL 65536
  10. MINEXTENTS 1
  11. MAXEXTENTS 2147483645
  12. BUFFER_POOL DEFAULT
  13. )
  14. TABLESPACE USERS
  15. LOGGING
  16. NOCOMPRESS
  17. NOPARALLEL
  18. NOCACHE
  19. USING
  20. INDEX
  21. REFRESH
  22. COMPLETE
  23. START WITH TO_DATE('10.14.2010 08:04:50', 'MM.DD.RRRR HH24:MI:SS')
  24. NEXT SYSDATE+1
  25. WITH PRIMARY KEY
  26. DISABLE
  27. QUERY REWRITE
  28. AS SELECT act.fldactividad_id
  29. FROM tbdsigspaactividad act,tbdsigspacronograma cro
  30. WHERE act.fldactividad_et IS NULL AND
  31. cro.fldcronograma_et IS NULL AND
  32. act.fldcronograma_codigo=cro.fldcronograma_id AND
  33. cro.fldcronograma_id NOT IN (
  34. SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tbdsigspaproyecto p
  35. WHERE p.fldproyecto_numero=c.fldproyecto_numero AND (p.fldproyecto_et IS NOT NULL OR p.fldproyecto_activo='F')
  36. ) AND
  37. cro.fldcronograma_id NOT IN (
  38. SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tblriesgo r
  39. WHERE r.fldriesgo_id=c.fldriesgo_id AND r.fldriesgo_et IS NOT NULL
  40. ) AND
  41. cro.fldcronograma_id NOT IN (
  42. SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tblproyecto p
  43. WHERE p.fldproyecto_id=c.fldauditoria_id AND (p.fldproyecto_et IS NOT NULL OR p.fldproyecto_estado<>'E')
  44. ) AND
  45. cro.fldcronograma_id NOT IN (
  46. SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tblpiddmeta p
  47. WHERE p.fldpiddmeta_id=c.fldpiddmeta_id AND p.fldpiddmeta_et IS NOT NULL
  48. ) AND
  49. act.fldactividad_id NOT IN (
  50. SELECT a.fldactividad_codigo FROM tbdsigspaaccion a,tbdsigspaatencion ate
  51. WHERE a.fldatencion_id=ate.fldatencion_id AND (ate.fldatencion_et IS NOT NULL OR ate.fldatencion_estado IN ('a','e'))
  52. );
  53.  
  54. COMMENT ON MATERIALIZED VIEW VISTA_IDES_ACTIVIDADES_VALIDAS IS 'snapshot table for snapshot SIG.VISTA_IDES_ACTIVIDADES_VALIDAS';
  55.  
  56.  
  57. --*************************************
  58. --*************VISTAS******************
  59. --*************************************
  60.  
  61. CREATE OR REPLACE FORCE VIEW VISTA_USUARIO_EVALUACION
  62. (
  63. FLDPROYECTO_ID,
  64. FLDUSUARIO_ID,
  65. PORQUE
  66. )
  67. AS
  68. (
  69. --El usuario es superusuario (puede ver todas las evaluaciones), explicación: Super usuario
  70. SELECT e.fldproyecto_id, u.fldusuario_id, 'Super usuario' AS porque
  71. FROM tblproyecto e, tblusuario u
  72. WHERE u.fldusuario_essuperusuario = 'T' AND e.fldproyecto_et IS NULL
  73.  
  74. UNION
  75. --El usuario está asiciado con un emisor de la evaluación, explicación: Emisor
  76. SELECT e.fldproyecto_id, eu.fldusuario_id, 'Emisor' AS porque
  77. FROM tblproyecto e, tblemisor_usuario eu
  78. WHERE e.fldemisor_id = eu.fldemisor_id AND e.fldproyecto_et IS NULL
  79.  
  80. UNION
  81. --El usuario tiene algún rol en la evaluación, explicación: Rol
  82. SELECT e.fldproyecto_id, ru.fldusuario_id, 'Rol' AS porque
  83. FROM tblproyecto e, tblrolproyecto re, tblrolproyecto_usuario ru
  84. WHERE e.fldproyecto_id = re.fldproyecto_id AND re.fldrolproyecto_id = ru.fldrolproyecto_id AND e.fldproyecto_et IS NULL
  85.  
  86. UNION
  87. --El usuario tiene actividades a su cargo en el cronograma asociado a la evaluación, explicación: Plan de trabajo
  88. SELECT e.fldproyecto_id, u.fldusuario_id, 'Plan de trabajo' AS porque
  89. FROM tblproyecto e, tblusuario u, tbdsigspacronograma c, tbdsigspaactividad a, tbdsigsparesponsableactividad ra
  90. WHERE c.fldauditoria_id=e.fldproyecto_id AND a.fldcronograma_codigo=c.fldcronograma_id
  91. AND UPPER(ra.flddatosbasicos_codepl)=UPPER(u.fldusuario_codigo) AND ra.fldactividad_codigo=a.fldactividad_id AND e.fldproyecto_et IS NULL
  92.  
  93. UNION
  94. --El usuario tiene algún privilegio sobre la evaluación, explicación: Privilegio
  95. SELECT e.fldproyecto_id, u.fldusuario_id, 'Privilegio - '||LOWER(pa.fldprivilegioauditoria_nombre) AS porque
  96. FROM tblproyecto e, tblusuario u, tblinvitadoauditoria ia, tblprivilegioauditoria pa
  97. WHERE ia.fldauditoria_id=e.fldproyecto_id AND ia.fldusuario_id=u.fldusuario_id
  98. AND pa.fldprivilegioauditoria_codigo=ia.fldprivilegioauditoria_codigo AND e.fldproyecto_et IS NULL
  99.  
  100. UNION
  101. --El usuario es responsable de la unidad auditable asociada a la evaluación
  102. SELECT p.fldproyecto_id, u.fldusuario_id, 'Evaluado' AS porque
  103. FROM tblproyecto p
  104. INNER JOIN tblproyecto_unidadauditable pu ON(p.fldproyecto_id = pu.fldproyecto_id)
  105. INNER JOIN tblunidadauditable ua ON(ua.fldunidadauditable_id = pu.fldunidadauditable_id)
  106. INNER JOIN tblunidadauditable uaa ON(uaa.fldunidadauditable_left >= ua.fldunidadauditable_left AND uaa.fldunidadauditable_right <= ua.fldunidadauditable_right)
  107. INNER JOIN tblusuario u ON(u.fldusuario_id = uaa.fldusuario_id)
  108. WHERE p.fldproyecto_et IS NULL
  109. );
  110.  
  111.  
  112. CREATE OR REPLACE FORCE VIEW VISTA_USUARIO_PROYECTO
  113. (
  114. FLDPROYECTO_NUMERO,
  115. FLDUSUARIO_ID,
  116. PORQUE
  117. )
  118. AS
  119. (
  120. --usuarios que son super usuario
  121. SELECT a.fldproyecto_numero, b.fldusuario_id, 'Super usuario' as porque
  122. FROM tbdsigspaproyecto a, tblusuario b
  123. WHERE fldusuario_essuperusuario = 'T'
  124.  
  125. UNION
  126.  
  127. (
  128. --usuario responsable al proyecto
  129. SELECT a.fldproyecto_numero, b.fldusuario_id, 'Responsable' as porque
  130. FROM tbdsigspaproyecto a, tblusuario b
  131. WHERE a.fldproyecto_usuarioresponsable = b.fldusuario_codigo
  132.  
  133. UNION
  134.  
  135. --usuario que pertenece a un cargo responsable del proyecto
  136. SELECT a.fldproyecto_numero,d.fldusuario_id, 'Responsable' as porque
  137. FROM tbdsigspaproyecto a, tblproyecto_rol b, tblcargo_rol c, tblcargo_usuario d
  138. WHERE a.fldproyecto_numero = b.fldproyecto_id AND
  139. b.fldrol_id = c.fldrol_id AND
  140. c.fldcargo_id = d.fldcargo_id
  141. )
  142.  
  143. UNION
  144.  
  145. (
  146. --usuario que tiene asignado privilegio al proyecto
  147. SELECT DISTINCT a.fldproyecto_numero, b.fldusuario_id, 'Privilegio' as porque
  148. FROM tbdsigspaproyecto a, tblinvitadoproyecto b
  149. WHERE a.fldproyecto_numero = b.fldproyecto_id AND b.fldusuario_id IS NOT NULL
  150.  
  151. UNION
  152.  
  153. --usuario que pertenece a un cargo que tiene asignado privilegio al proyecto
  154. SELECT DISTINCT a.fldproyecto_numero, c.fldusuario_id, 'Privilegio' as porque
  155. FROM tbdsigspaproyecto a, tblinvitadoproyecto b, tblcargo_usuario c
  156. WHERE a.fldproyecto_numero = b.fldproyecto_id AND
  157. c.fldcargo_id = b.fldcargo_id AND
  158. b.fldcargo_id IS NOT NULL
  159.  
  160. UNION
  161.  
  162. (
  163. --usuario que pertenece a un grupo de usuario que tiene asignado privilegio al proyecto
  164. SELECT DISTINCT a.fldproyecto_numero, c.fldusuario_id, 'Privilegio' as porque
  165. FROM tbdsigspaproyecto a, tblinvitadoproyecto b, tblmiembrosgrupo c
  166. WHERE a.fldproyecto_numero = b.fldproyecto_id AND
  167. c.fldgrupo_id = b.fldgrupo_id AND
  168. b.fldgrupo_id IS NOT NULL AND c.fldusuario_id IS NOT NULL
  169.  
  170. UNION
  171.  
  172. --usuario que pertenece a un cargo que pertenece a un grupo de usuario que tiene asignado privilegio al proyecto
  173. SELECT DISTINCT a.fldproyecto_numero, e.fldusuario_id, 'Privilegio' as porque
  174. FROM tbdsigspaproyecto a, tblinvitadoproyecto b, tblmiembrosgrupo c, tblcargo_rol d, tblcargo_usuario e
  175. WHERE a.fldproyecto_numero = b.fldproyecto_id AND
  176. c.fldgrupo_id = b.fldgrupo_id AND
  177. d.fldrol_id = c.fldrol_id AND
  178. e.fldcargo_id = d.fldcargo_id AND
  179. b.fldgrupo_id IS NOT NULL AND c.fldrol_id IS NOT NULL
  180. ))
  181.  
  182. UNION
  183.  
  184. (
  185. --usuario que es responsable de una actividad de los cronogramas del proyecto
  186. SELECT a.fldproyecto_numero, f.fldusuario_id, 'Area' as porque
  187. FROM tbdsigspaproyecto a, tbltipoproyecto b, tbdsigspacronograma c, tbdsigspaactividad d, tbdsigsparesponsableactividad e, tblusuario f
  188. WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
  189. c.fldproyecto_numero = a.fldproyecto_numero AND
  190. d.fldcronograma_codigo = c.fldcronograma_id AND
  191. e.fldactividad_codigo = d.fldactividad_id AND
  192. UPPER(f.fldusuario_codigo) = UPPER(e.flddatosbasicos_codepl) AND
  193. b.fldtipoproyecto_admon = 'A'
  194.  
  195. UNION
  196.  
  197. --usuario que responsable de un cronograma del proyecto
  198. SELECT a.fldproyecto_numero, d.fldusuario_id, 'Area' as porque
  199. FROM tbdsigspaproyecto a, tbltipoproyecto b, tbdsigspacronograma c, tblusuario d
  200. WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
  201. c.fldproyecto_numero = a.fldproyecto_numero AND
  202. d.fldusuario_codigo = c.fldcronograma_responsable AND
  203. b.fldtipoproyecto_admon = 'A'
  204.  
  205. UNION
  206.  
  207. --usuario responsable del area al cual pertenece el proyecto
  208. (SELECT a.fldproyecto_numero, d.fldusuario_id, 'Area' as porque
  209. FROM tbdsigspaproyecto a, tbltipoproyecto b, tblarea c, tblarea_usuario d
  210. WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
  211. c.fldarea_id = a.fldorganigrama_codigo AND
  212. d.fldarea_id = c.fldarea_id AND
  213. b.fldtipoproyecto_admon = 'A'
  214.  
  215. UNION
  216.  
  217. --usuario que pertenece a un cargo que es responsable del area al cual pertenece el proyecto
  218. SELECT a.fldproyecto_numero, e.fldusuario_id, 'Area' as porque
  219. FROM tbdsigspaproyecto a, tbltipoproyecto b, tblarea c, tblcargo d, tblcargo_usuario e
  220. WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
  221. c.fldarea_id = a.fldorganigrama_codigo AND
  222. d.fldarea_id = c.fldarea_id AND
  223. e.fldcargo_id = d.fldcargo_id AND
  224. b.fldtipoproyecto_admon = 'A'
  225. ))
  226.  
  227. UNION
  228.  
  229. (
  230. --usuario que tiene permisos sobre la dependencia a la cual pertenece el proyecto
  231. SELECT a.fldproyecto_numero, d.fldusuario_id, 'Proyecto' as porque
  232. FROM tbdsigspaproyecto a, tbltipoproyecto b, tblarea c, vista_usuario_cmi d
  233. WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
  234. c.fldarea_id = a.fldorganigrama_codigo AND
  235. d.fldarea_id = c.fldarea_id AND
  236. d.fldarea_usuario_relacion = 'Privilegio' AND b.fldtipoproyecto_admon = 'C'
  237. ))
  238.  
  239. UNION
  240. SELECT a.fldproyecto_numero, b.fldusuario_id, 'Registrador' AS porque
  241. FROM tbdsigspaproyecto a, tblusuario b
  242. WHERE a.fldusuario_temporal_id = b.fldusuario_id AND UPPER(a.fldproyecto_estado)IN ('REGISTRADO','PENDIENTE','EN VERIFICACION','RECHAZADO')
  243.  
  244. UNION
  245.  
  246. SELECT a.fldproyecto_numero, b.fldusuario_id, 'Gestor' AS porque
  247. FROM tbdsigspaproyecto a, tblusuario b
  248. WHERE a.fldusuario_gestor_id = b.fldusuario_id;
  249.  
  250.  
  251. /****************************
  252. *******PROCEDIMIENTOS********
  253. *****************************/
  254. CREATE OR REPLACE PROCEDURE copiar_cronograma_meta (cronograma_id integer, meta_id integer)
  255. AS
  256.  
  257. --Función que copia un cronograma asociado a una metapidd
  258. --@author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
  259. --@fecha Junio 21 de 2010
  260. --
  261. --@param integer cronograma_id: ID del cronograma a ser copiado
  262. --@param integer meta_id: ID del meta a la cual se le debe asociar el cronograma
  263.  
  264. --Modificaciones:
  265. --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
  266. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma, lo mismo que el llamado a la secuencia de CRONOGRAMA_CODIGO_SEQ.CURRVAL por CRONOGRAMA_ID_SEQ.CURRVAL
  267.  
  268. --cursor con las actividades del cronograma
  269. CURSOR curactividades IS
  270. SELECT fldactividad_id FROM tbdsigspaactividad WHERE fldcronograma_codigo=cronograma_id AND fldactividad_et IS NULL;
  271.  
  272. actividadid INTEGER;
  273. id INTEGER; --variable para ir llevando los ids de las actividades del cronograma
  274.  
  275. tutorado_id INTEGER;
  276. cronogramanuevoid INTEGER; --variable donde se guarda el id del nuevo cronograma
  277. BEGIN
  278.  
  279. --copiar cronograma
  280. INSERT INTO tbdsigspacronograma SELECT * FROM tbdsigspacronograma WHERE fldcronograma_id = cronograma_id;
  281.  
  282. --obtener id del nuevo cronograma
  283. SELECT CRONOGRAMA_ID_SEQ.CURRVAL INTO cronogramanuevoid FROM DUAL;
  284.  
  285. --Se actualiza el id de la metra asociada al cronograma y el st del cronograma
  286. UPDATE tbdsigspacronograma SET fldpiddmeta_id = meta_id, fldcronograma_st=systimestamp WHERE fldcronograma_id=cronogramanuevoid;
  287.  
  288. --Se obtiene el tutorado del pidd de la meta
  289. SELECT fldpiddusuario_tutorado_id INTO tutorado_id FROM tblpidd WHERE fldpidd_id IN (SELECT fldpidd_id FROM tblpiddmeta WHERE fldpiddmeta_id=meta_id);
  290.  
  291. --Se recorren las actiivdades para copiarlas
  292. OPEN curactividades;
  293. LOOP
  294. FETCH curactividades INTO actividadid;
  295. EXIT WHEN curactividades%NOTFOUND;
  296.  
  297. --copiar registro
  298. INSERT INTO tbdsigspaactividad SELECT * FROM tbdsigspaactividad WHERE fldactividad_id = actividadid;
  299.  
  300. --obtener id de la nueva actividad
  301. SELECT ACTIVIDAD_ID_SEQ.CURRVAL INTO id FROM DUAL;
  302. --Se actualiza el st, y el id del cronograma de la actividad
  303.  
  304. UPDATE tbdsigspaactividad SET fldcronograma_codigo = cronogramanuevoid, fldactividad_st = systimestamp
  305. WHERE fldactividad_id = id;
  306.  
  307. --Se agrega como responsable de la actividad copiada el tutorado del pidd al cual se encuentra asociado la meta
  308. INSERT INTO tbdsigsparesponsableactividad (fldactividad_codigo,fldusuario_id) VALUES(id,tutorado_id);
  309.  
  310. END LOOP;
  311. CLOSE curactividades;
  312.  
  313. END;
  314. /
  315.  
  316. CREATE OR REPLACE PROCEDURE copiar_piddmeta (piddmeta_id integer, pidd_id integer)
  317. AS
  318. --Función que copia la una meta de un pidd
  319. --@author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
  320. --@fecha Junio 18 de 2010
  321. --
  322. --@param integer piddmeta_id: ID de la meta a ser copiada
  323. --@param integer pidd_id: ID del pidd al cual se le va a asociar la nueva meta
  324.  
  325. --Modificaciones:
  326. --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
  327. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  328.  
  329. --cursor con las actividades del cronograma
  330. CURSOR curcronogramas IS
  331. SELECT fldcronograma_id FROM tbdsigspacronograma WHERE fldpiddmeta_id=piddmeta_id AND fldcronograma_et IS NULL;
  332.  
  333. --cursor con los descriptores conductuales
  334. CURSOR curdescriptores IS
  335. SELECT fldcompindicadorconduc_id FROM tblpiddmeta_compindicador WHERE fldpiddmeta_id=piddmeta_id;
  336.  
  337. --cursor con los niveles del piddmeta
  338. CURSOR curpiddniveles IS
  339. SELECT tblpiddmeta_nivel.* FROM tblpiddmeta_nivel WHERE fldpiddmeta_id=piddmeta_id;
  340.  
  341. --cursor con los itemplan del piddmeta
  342. CURSOR curitemplan IS
  343. SELECT flditemplan_id FROM tblitemplan_piddmeta WHERE fldpiddmeta_id=piddmeta_id;
  344.  
  345.  
  346. regniveles tblpiddmeta_nivel%ROWTYPE;
  347. descriptorid INTEGER;
  348. cronogramaid INTEGER;
  349. itemplanid INTEGER;
  350. id INTEGER; --variable para ir llevando los ids de los cronogramas de la metapidd
  351. piddmetanuevaid INTEGER; --variable donde se guarda el id de la nueva metapidd
  352.  
  353. tipometa VARCHAR2(5);
  354.  
  355. BEGIN
  356.  
  357. --copiar metapidd
  358. INSERT INTO tblpiddmeta SELECT * FROM tblpiddmeta WHERE fldpiddmeta_id = piddmeta_id;
  359.  
  360. --obtener id de la nueva meta
  361. SELECT PIDDMETA_ID_SEQ.CURRVAL INTO piddmetanuevaid FROM DUAL;
  362.  
  363. --Se actualiza el pidd_id y el st de la meta
  364. UPDATE tblpiddmeta SET fldpidd_id=pidd_id, fldpiddmeta_st=systimestamp WHERE fldpiddmeta_id=piddmetanuevaid;
  365.  
  366. --se obtiene el tipo de la meta
  367. SELECT fldpiddmeta_tipo INTO tipometa FROM tblpiddmeta WHERE fldpiddmeta_id=piddmeta_id;
  368.  
  369. --Si la meta es de desarrollo se copian las referencias de los descriptores
  370. IF tipometa='DLLO' THEN
  371. OPEN curdescriptores;
  372. LOOP
  373. FETCH curdescriptores INTO descriptorid;
  374. EXIT WHEN curdescriptores%NOTFOUND;
  375. --se copia el registro con el descriptor
  376. INSERT INTO tblpiddmeta_compindicador(fldpiddmeta_id,fldcompindicadorconduc_id)
  377. VALUES(piddmetanuevaid,descriptorid);
  378. END LOOP;
  379. CLOSE curdescriptores;
  380. END IF;
  381.  
  382. --Se recorre y se copian los niveles
  383. OPEN curpiddniveles;
  384. LOOP
  385. FETCH curpiddniveles INTO regniveles;
  386. EXIT WHEN curpiddniveles%NOTFOUND;
  387. --se copia el registro con el nivel
  388. INSERT INTO tblpiddmeta_nivel(fldpiddmeta_id, fldpiddnivel_id, fldpiddmeta_nivel_prodentreg)
  389. VALUES(piddmetanuevaid,regniveles.fldpiddnivel_id,regniveles.fldpiddmeta_nivel_prodentreg);
  390. END LOOP;
  391. CLOSE curpiddniveles;
  392.  
  393. --Se recorre y copian los itemplan
  394. OPEN curitemplan;
  395. LOOP
  396. FETCH curitemplan INTO itemplanid;
  397. EXIT WHEN curitemplan%NOTFOUND;
  398. --se copia el registro con el itemplan
  399. INSERT INTO tblitemplan_piddmeta(fldpiddmeta_id, flditemplan_id)
  400. VALUES(piddmetanuevaid,itemplanid);
  401. END LOOP;
  402. CLOSE curitemplan;
  403.  
  404. --Se recorren y copian los cronogramas
  405. OPEN curcronogramas;
  406. LOOP
  407. FETCH curcronogramas INTO cronogramaid;
  408. EXIT WHEN curcronogramas%NOTFOUND;
  409. --copiar cronograma
  410. BEGIN
  411. copiar_cronograma_meta(cronogramaid,piddmetanuevaid);
  412. END;
  413. END LOOP;
  414. CLOSE curcronogramas;
  415. END;
  416. /
  417.  
  418. /**********************
  419. *******FUNCIONES*******
  420. **********************/
  421.  
  422. CREATE OR REPLACE FUNCTION cronograma_avanceponderado (cronograma_id IN number)
  423. RETURN number AS
  424.  
  425. --Modificaciones:
  426. --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
  427. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  428.  
  429. avance float;
  430. BEGIN
  431. begin
  432. SELECT SUM(
  433. (
  434. (
  435. CASE
  436. WHEN a.fldactividad_estado='terminada' THEN 100
  437. WHEN a.fldactividad_estado='planeacion' THEN 0
  438. ELSE ( --Recoger el % del último avance
  439. SELECT fldavance_avance
  440. FROM (SELECT * FROM tbdsigspaactividadavance ORDER BY fldavance_fecha DESC,fldavance_avance DESC) av
  441. WHERE av.fldactividad_codigo=a.fldactividad_id AND av.fldavance_et IS NULL AND av.fldavance_avance IS NOT NULL AND ROWNUM=1)
  442. END
  443. )*a.fldactividad_peso)/100) INTO avance
  444. FROM tbdsigspacronograma c
  445. INNER JOIN tbdsigspaactividad a ON (a.fldcronograma_codigo=c.fldcronograma_id)
  446. WHERE c.fldcronograma_id=cronograma_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
  447. end;
  448. IF avance IS NULL THEN
  449. avance:=0;
  450. END IF;
  451. RETURN avance;
  452. END;
  453. /
  454.  
  455. CREATE OR REPLACE FUNCTION cronograma_cumptoparcialobj (cronograma_id IN NUMBER)
  456. RETURN NUMBER
  457. AS
  458.  
  459. --Modificaciones:
  460. --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
  461. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  462. pesoobjetivo float;
  463. sumatoria float;
  464. valor float;
  465. medicion float;
  466. meta float;
  467. metamedicion float;
  468. metaindicador float;
  469. tipometa VARCHAR2(1);
  470. proposito VARCHAR2(10);
  471. peso float;
  472. CURSOR indicadores IS SELECT(SELECT fldmedicion_valor FROM(SELECT * FROM tblmedicion ORDER BY fldmedicion_fechafinperiodo DESC) m WHERE m.fldindicador_id = i.fldindicador_id AND
  473. m.fldindicador_periodicidad = i.fldindicador_periodicidad AND
  474. m.fldmedicion_et IS NULL AND
  475. m.fldmedicion_valor IS NOT NULL AND ROWNUM <= 1) medicion,(SELECT m.fldmedicion_meta FROM(SELECT * FROM tblmedicion ORDER BY fldmedicion_fechafinperiodo DESC) m WHERE m.fldindicador_id = i.fldindicador_id AND
  476. m.fldindicador_periodicidad = i.fldindicador_periodicidad AND
  477. m.fldmedicion_et IS NULL AND
  478. m.fldmedicion_valor IS NOT NULL AND ROWNUM <= 1) meta,
  479. a.fldactividad_peso peso,
  480. i.fldindicador_metaperiodica,i.fldindicador_meta,i.fldindicador_proposito
  481. FROM tbdsigspaactividad a
  482. INNER JOIN tbdsigspacronograma c ON (a.fldcronograma_codigo=c.fldcronograma_id)
  483. INNER JOIN tblindicador_actividad b ON(a.fldactividad_id = b.fldactividad_id)
  484. INNER JOIN tblindicador i ON(b.fldindicador_id = i.fldindicador_id)
  485. WHERE a.fldcronograma_codigo = cronograma_id and i.fldindicador_eliminado = 'F' AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL
  486. ORDER BY i.fldindicador_codigo,UPPER(i.fldindicador_nombre) ASC;
  487. BEGIN
  488. --obtener el peso del objetivo dentro del plan
  489. begin
  490. SELECT fldcronograma_peso INTO pesoobjetivo
  491. FROM tbdsigspacronograma
  492. WHERE fldcronograma_id = cronograma_id;
  493. EXCEPTION
  494. WHEN NO_DATA_FOUND THEN
  495. NULL;
  496. end;
  497. sumatoria := 0;
  498. OPEN indicadores;
  499. LOOP
  500. FETCH indicadores INTO valor,metamedicion,peso,tipometa,metaindicador,proposito;
  501. EXIT WHEN indicadores%NOTFOUND;
  502. --si el peso es nulo le asigna 0
  503. IF peso IS NULL THEN
  504. peso := 0;
  505. END IF;
  506. --si el valor de la medicion es nulo le asigna 0
  507. IF valor IS NULL THEN
  508. valor := 0;
  509. END IF;
  510. --si el tipo de meta es única se toma la meta del indicador
  511. --sino la meta de la medición
  512. IF tipometa = 'U' THEN
  513. IF metaindicador IS NULL THEN
  514. meta := 0;
  515. ELSE
  516. meta := metaindicador;
  517. END IF;
  518. ELSE
  519. IF metamedicion IS NULL THEN
  520. meta := 0;
  521. ELSE
  522. meta := metamedicion;
  523. END IF;
  524. END IF;
  525. --si la meta es cero asigna a la medición cero
  526. IF meta = 0 THEN
  527. medicion := 0;
  528. ELSE
  529. IF proposito = 'min' THEN
  530. medicion :=(meta*100)/valor;
  531. ELSE
  532. medicion :=(valor*100)/meta;
  533. END IF;
  534. END IF;
  535. sumatoria := sumatoria+(medicion*peso)/100;
  536. END LOOP;
  537. CLOSE indicadores;
  538. RETURN(sumatoria*pesoobjetivo)/100;
  539. END;
  540. /
  541.  
  542.  
  543. CREATE OR REPLACE FUNCTION proceso_consolidado (proceso_id IN NUMBER)
  544. RETURN NUMBER
  545. AS
  546. --Modificaciones:
  547. --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
  548. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  549.  
  550. cronogramaid NUMBER(10,0);
  551. sum1 float;
  552. CURSOR cronogramas IS
  553. SELECT fldcronograma_id
  554. FROM tbdsigspacronograma
  555. WHERE fldproyecto_numero = proceso_id and fldcronograma_et IS NULL
  556. ORDER BY fldcronograma_nombre ASC;
  557.  
  558. BEGIN
  559.  
  560. sum1 := 0;
  561.  
  562. --obtener los cronogramas asociados al proceso
  563. OPEN cronogramas;
  564. LOOP
  565. FETCH cronogramas INTO cronogramaid;
  566. EXIT WHEN cronogramas%NOTFOUND;
  567. --obtener el cumplimiento parcial del objetivo
  568. sum1 := sum1 + cronograma_cumptoparcialobj(cronogramaid);
  569. END LOOP;
  570. CLOSE cronogramas;
  571.  
  572. RETURN sum1;
  573.  
  574. END;
  575. /
  576.  
  577.  
  578. CREATE OR REPLACE FUNCTION proyecto_totalcumptoparcialobj /*proyecto_totalcumptoparcialobj_5061112*/ (proyecto_id IN NUMBER)
  579. RETURN NUMBER
  580. AS
  581. --Modificaciones:
  582. --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
  583. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  584.  
  585. cronogramaid NUMBER(10,0);
  586. sum2 float;
  587. CURSOR cronogramas IS SELECT fldcronograma_id
  588. FROM tbdsigspacronograma
  589. WHERE fldproyecto_numero = proyecto_id and fldcronograma_et IS NULL
  590. ORDER BY fldcronograma_nombre ASC;
  591. BEGIN
  592. sum2 := 0;
  593. --obtener los cronogramas asociados al proyecto
  594. OPEN cronogramas;
  595. LOOP
  596. FETCH cronogramas INTO cronogramaid;
  597. EXIT WHEN cronogramas%NOTFOUND;
  598. --obtener el cumplimiento parcial del objetivo
  599. sum2 := sum2+cronograma_cumptoparcialobj(cronogramaid);
  600. END LOOP;
  601. CLOSE cronogramas;
  602. RETURN sum2;
  603. END;
  604. /
  605.  
  606. CREATE OR REPLACE FUNCTION pyto_calporc_ejeplaneado /*pyto_calporc_ejeplaneado_5061113*/ (proyecto_id IN NUMBER)
  607. RETURN NUMBER
  608. AS
  609. --Modificaciones:
  610. --Por Jorge Ivan Franco H - jorgeun@gmail.com Octubre 13 de 2010
  611. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  612.  
  613. avance float;
  614. BEGIN
  615. avance:=0;
  616. begin
  617. SELECT SUM(c.fldcronograma_peso*a.fldactividad_peso*(CASE
  618. WHEN a.fldactividad_fechafinp < SYSTIMESTAMP THEN 100
  619. ELSE 0
  620. END))/10000 INTO avance
  621. FROM tbdsigspacronograma c INNER JOIN tbdsigspaactividad a ON(c.fldcronograma_id = a.fldcronograma_codigo)
  622. WHERE c.fldproyecto_numero = proyecto_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
  623. EXCEPTION
  624. WHEN NO_DATA_FOUND THEN
  625. NULL;
  626. end;
  627. IF avance IS NULL THEN
  628. avance:=0;
  629. END IF;
  630. RETURN avance;
  631. END;
  632. /
  633.  
  634. CREATE OR REPLACE FUNCTION pyto_calporc_ejereal /*pyto_calporc_ejereal_5061114*/ (proyecto_id IN NUMBER)
  635. RETURN NUMBER
  636. AS
  637. --Modificaciones:
  638. --Por Jorge Ivan Franco H - jorgeun@gmail.com Octubre 13 de 2010
  639. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  640.  
  641. avance float;
  642. BEGIN
  643. begin
  644. SELECT SUM(c.fldcronograma_peso*a.fldactividad_peso*(CASE
  645. WHEN a.fldactividad_estado = 'terminada' THEN 100
  646. WHEN a.fldactividad_estado = 'planeacion' THEN 0
  647. ELSE(SELECT fldavance_avance FROM tbdsigspaactividadavance WHERE fldactividad_codigo = a.fldactividad_id AND fldavance_et IS NULL AND fldavance_avance IS NOT NULL AND ROWNUM <= 1)
  648. END))/10000 INTO avance
  649. FROM tbdsigspacronograma c INNER JOIN tbdsigspaactividad a ON(c.fldcronograma_id = a.fldcronograma_codigo)
  650. WHERE c.fldproyecto_numero = proyecto_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
  651. EXCEPTION
  652. WHEN NO_DATA_FOUND THEN
  653. NULL;
  654. end;
  655. IF avance IS NULL THEN
  656. avance:=0;
  657. END IF;
  658. RETURN avance;
  659. END;
  660. /
  661.  
  662. create or replace
  663. FUNCTION pyto_calporc_ejereal_fecha /*pyto_calporc_ejereal_fecha_5061115*/ (proyecto_id IN NUMBER, fecha IN DATE)
  664. RETURN NUMBER
  665. AS
  666. --Modificaciones:
  667. --Por Jorge Ivan Franco H - jorgeun@gmail.com Octubre 13 de 2010
  668. --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
  669.  
  670. avance float;
  671. BEGIN
  672. begin
  673. SELECT SUM(((CASE
  674. WHEN a.fldactividad_estado = 'terminada' AND a.fldactividad_fechafinr <= fecha THEN 100
  675. WHEN a.fldactividad_estado = 'planeacion' THEN 0
  676. ELSE(SELECT av.fldavance_avance FROM tbdsigspaactividadavance av WHERE av.fldactividad_codigo = a.fldactividad_id AND av.fldavance_et IS NULL AND av.fldavance_avance IS NOT NULL AND av.fldavance_fecha <= fecha AND ROWNUM <= 1)
  677. END)*a.fldactividad_peso*c.fldcronograma_peso)/100/100) INTO avance
  678. FROM tbdsigspaproyecto p inner join tbdsigspacronograma c ON(p.fldproyecto_numero = c.fldproyecto_numero)
  679. INNER JOIN tbdsigspaactividad a ON(a.fldcronograma_codigo = c.fldcronograma_id)
  680. WHERE p.fldproyecto_numero = proyecto_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
  681. EXCEPTION
  682. WHEN NO_DATA_FOUND THEN
  683. NULL;
  684. end;
  685. RETURN avance;
  686. END;
  687. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement