Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --****************************************
- --********VISTA MATERIALIZADA*************
- --****************************************
- DROP MATERIALIZED VIEW VISTA_IDES_ACTIVIDADES_VALIDAS;
- CREATE MATERIALIZED VIEW VISTA_IDES_ACTIVIDADES_VALIDAS
- PCTFREE 10
- STORAGE (
- INITIAL 65536
- MINEXTENTS 1
- MAXEXTENTS 2147483645
- BUFFER_POOL DEFAULT
- )
- TABLESPACE USERS
- LOGGING
- NOCOMPRESS
- NOPARALLEL
- NOCACHE
- USING
- INDEX
- REFRESH
- COMPLETE
- START WITH TO_DATE('10.14.2010 08:04:50', 'MM.DD.RRRR HH24:MI:SS')
- NEXT SYSDATE+1
- WITH PRIMARY KEY
- DISABLE
- QUERY REWRITE
- AS SELECT act.fldactividad_id
- FROM tbdsigspaactividad act,tbdsigspacronograma cro
- WHERE act.fldactividad_et IS NULL AND
- cro.fldcronograma_et IS NULL AND
- act.fldcronograma_codigo=cro.fldcronograma_id AND
- cro.fldcronograma_id NOT IN (
- SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tbdsigspaproyecto p
- WHERE p.fldproyecto_numero=c.fldproyecto_numero AND (p.fldproyecto_et IS NOT NULL OR p.fldproyecto_activo='F')
- ) AND
- cro.fldcronograma_id NOT IN (
- SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tblriesgo r
- WHERE r.fldriesgo_id=c.fldriesgo_id AND r.fldriesgo_et IS NOT NULL
- ) AND
- cro.fldcronograma_id NOT IN (
- SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tblproyecto p
- WHERE p.fldproyecto_id=c.fldauditoria_id AND (p.fldproyecto_et IS NOT NULL OR p.fldproyecto_estado<>'E')
- ) AND
- cro.fldcronograma_id NOT IN (
- SELECT c.fldcronograma_id FROM tbdsigspacronograma c,tblpiddmeta p
- WHERE p.fldpiddmeta_id=c.fldpiddmeta_id AND p.fldpiddmeta_et IS NOT NULL
- ) AND
- act.fldactividad_id NOT IN (
- SELECT a.fldactividad_codigo FROM tbdsigspaaccion a,tbdsigspaatencion ate
- WHERE a.fldatencion_id=ate.fldatencion_id AND (ate.fldatencion_et IS NOT NULL OR ate.fldatencion_estado IN ('a','e'))
- );
- COMMENT ON MATERIALIZED VIEW VISTA_IDES_ACTIVIDADES_VALIDAS IS 'snapshot table for snapshot SIG.VISTA_IDES_ACTIVIDADES_VALIDAS';
- --*************************************
- --*************VISTAS******************
- --*************************************
- CREATE OR REPLACE FORCE VIEW VISTA_USUARIO_EVALUACION
- (
- FLDPROYECTO_ID,
- FLDUSUARIO_ID,
- PORQUE
- )
- AS
- (
- --El usuario es superusuario (puede ver todas las evaluaciones), explicación: Super usuario
- SELECT e.fldproyecto_id, u.fldusuario_id, 'Super usuario' AS porque
- FROM tblproyecto e, tblusuario u
- WHERE u.fldusuario_essuperusuario = 'T' AND e.fldproyecto_et IS NULL
- UNION
- --El usuario está asiciado con un emisor de la evaluación, explicación: Emisor
- SELECT e.fldproyecto_id, eu.fldusuario_id, 'Emisor' AS porque
- FROM tblproyecto e, tblemisor_usuario eu
- WHERE e.fldemisor_id = eu.fldemisor_id AND e.fldproyecto_et IS NULL
- UNION
- --El usuario tiene algún rol en la evaluación, explicación: Rol
- SELECT e.fldproyecto_id, ru.fldusuario_id, 'Rol' AS porque
- FROM tblproyecto e, tblrolproyecto re, tblrolproyecto_usuario ru
- WHERE e.fldproyecto_id = re.fldproyecto_id AND re.fldrolproyecto_id = ru.fldrolproyecto_id AND e.fldproyecto_et IS NULL
- UNION
- --El usuario tiene actividades a su cargo en el cronograma asociado a la evaluación, explicación: Plan de trabajo
- SELECT e.fldproyecto_id, u.fldusuario_id, 'Plan de trabajo' AS porque
- FROM tblproyecto e, tblusuario u, tbdsigspacronograma c, tbdsigspaactividad a, tbdsigsparesponsableactividad ra
- WHERE c.fldauditoria_id=e.fldproyecto_id AND a.fldcronograma_codigo=c.fldcronograma_id
- AND UPPER(ra.flddatosbasicos_codepl)=UPPER(u.fldusuario_codigo) AND ra.fldactividad_codigo=a.fldactividad_id AND e.fldproyecto_et IS NULL
- UNION
- --El usuario tiene algún privilegio sobre la evaluación, explicación: Privilegio
- SELECT e.fldproyecto_id, u.fldusuario_id, 'Privilegio - '||LOWER(pa.fldprivilegioauditoria_nombre) AS porque
- FROM tblproyecto e, tblusuario u, tblinvitadoauditoria ia, tblprivilegioauditoria pa
- WHERE ia.fldauditoria_id=e.fldproyecto_id AND ia.fldusuario_id=u.fldusuario_id
- AND pa.fldprivilegioauditoria_codigo=ia.fldprivilegioauditoria_codigo AND e.fldproyecto_et IS NULL
- UNION
- --El usuario es responsable de la unidad auditable asociada a la evaluación
- SELECT p.fldproyecto_id, u.fldusuario_id, 'Evaluado' AS porque
- FROM tblproyecto p
- INNER JOIN tblproyecto_unidadauditable pu ON(p.fldproyecto_id = pu.fldproyecto_id)
- INNER JOIN tblunidadauditable ua ON(ua.fldunidadauditable_id = pu.fldunidadauditable_id)
- INNER JOIN tblunidadauditable uaa ON(uaa.fldunidadauditable_left >= ua.fldunidadauditable_left AND uaa.fldunidadauditable_right <= ua.fldunidadauditable_right)
- INNER JOIN tblusuario u ON(u.fldusuario_id = uaa.fldusuario_id)
- WHERE p.fldproyecto_et IS NULL
- );
- CREATE OR REPLACE FORCE VIEW VISTA_USUARIO_PROYECTO
- (
- FLDPROYECTO_NUMERO,
- FLDUSUARIO_ID,
- PORQUE
- )
- AS
- (
- --usuarios que son super usuario
- SELECT a.fldproyecto_numero, b.fldusuario_id, 'Super usuario' as porque
- FROM tbdsigspaproyecto a, tblusuario b
- WHERE fldusuario_essuperusuario = 'T'
- UNION
- (
- --usuario responsable al proyecto
- SELECT a.fldproyecto_numero, b.fldusuario_id, 'Responsable' as porque
- FROM tbdsigspaproyecto a, tblusuario b
- WHERE a.fldproyecto_usuarioresponsable = b.fldusuario_codigo
- UNION
- --usuario que pertenece a un cargo responsable del proyecto
- SELECT a.fldproyecto_numero,d.fldusuario_id, 'Responsable' as porque
- FROM tbdsigspaproyecto a, tblproyecto_rol b, tblcargo_rol c, tblcargo_usuario d
- WHERE a.fldproyecto_numero = b.fldproyecto_id AND
- b.fldrol_id = c.fldrol_id AND
- c.fldcargo_id = d.fldcargo_id
- )
- UNION
- (
- --usuario que tiene asignado privilegio al proyecto
- SELECT DISTINCT a.fldproyecto_numero, b.fldusuario_id, 'Privilegio' as porque
- FROM tbdsigspaproyecto a, tblinvitadoproyecto b
- WHERE a.fldproyecto_numero = b.fldproyecto_id AND b.fldusuario_id IS NOT NULL
- UNION
- --usuario que pertenece a un cargo que tiene asignado privilegio al proyecto
- SELECT DISTINCT a.fldproyecto_numero, c.fldusuario_id, 'Privilegio' as porque
- FROM tbdsigspaproyecto a, tblinvitadoproyecto b, tblcargo_usuario c
- WHERE a.fldproyecto_numero = b.fldproyecto_id AND
- c.fldcargo_id = b.fldcargo_id AND
- b.fldcargo_id IS NOT NULL
- UNION
- (
- --usuario que pertenece a un grupo de usuario que tiene asignado privilegio al proyecto
- SELECT DISTINCT a.fldproyecto_numero, c.fldusuario_id, 'Privilegio' as porque
- FROM tbdsigspaproyecto a, tblinvitadoproyecto b, tblmiembrosgrupo c
- WHERE a.fldproyecto_numero = b.fldproyecto_id AND
- c.fldgrupo_id = b.fldgrupo_id AND
- b.fldgrupo_id IS NOT NULL AND c.fldusuario_id IS NOT NULL
- UNION
- --usuario que pertenece a un cargo que pertenece a un grupo de usuario que tiene asignado privilegio al proyecto
- SELECT DISTINCT a.fldproyecto_numero, e.fldusuario_id, 'Privilegio' as porque
- FROM tbdsigspaproyecto a, tblinvitadoproyecto b, tblmiembrosgrupo c, tblcargo_rol d, tblcargo_usuario e
- WHERE a.fldproyecto_numero = b.fldproyecto_id AND
- c.fldgrupo_id = b.fldgrupo_id AND
- d.fldrol_id = c.fldrol_id AND
- e.fldcargo_id = d.fldcargo_id AND
- b.fldgrupo_id IS NOT NULL AND c.fldrol_id IS NOT NULL
- ))
- UNION
- (
- --usuario que es responsable de una actividad de los cronogramas del proyecto
- SELECT a.fldproyecto_numero, f.fldusuario_id, 'Area' as porque
- FROM tbdsigspaproyecto a, tbltipoproyecto b, tbdsigspacronograma c, tbdsigspaactividad d, tbdsigsparesponsableactividad e, tblusuario f
- WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
- c.fldproyecto_numero = a.fldproyecto_numero AND
- d.fldcronograma_codigo = c.fldcronograma_id AND
- e.fldactividad_codigo = d.fldactividad_id AND
- UPPER(f.fldusuario_codigo) = UPPER(e.flddatosbasicos_codepl) AND
- b.fldtipoproyecto_admon = 'A'
- UNION
- --usuario que responsable de un cronograma del proyecto
- SELECT a.fldproyecto_numero, d.fldusuario_id, 'Area' as porque
- FROM tbdsigspaproyecto a, tbltipoproyecto b, tbdsigspacronograma c, tblusuario d
- WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
- c.fldproyecto_numero = a.fldproyecto_numero AND
- d.fldusuario_codigo = c.fldcronograma_responsable AND
- b.fldtipoproyecto_admon = 'A'
- UNION
- --usuario responsable del area al cual pertenece el proyecto
- (SELECT a.fldproyecto_numero, d.fldusuario_id, 'Area' as porque
- FROM tbdsigspaproyecto a, tbltipoproyecto b, tblarea c, tblarea_usuario d
- WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
- c.fldarea_id = a.fldorganigrama_codigo AND
- d.fldarea_id = c.fldarea_id AND
- b.fldtipoproyecto_admon = 'A'
- UNION
- --usuario que pertenece a un cargo que es responsable del area al cual pertenece el proyecto
- SELECT a.fldproyecto_numero, e.fldusuario_id, 'Area' as porque
- FROM tbdsigspaproyecto a, tbltipoproyecto b, tblarea c, tblcargo d, tblcargo_usuario e
- WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
- c.fldarea_id = a.fldorganigrama_codigo AND
- d.fldarea_id = c.fldarea_id AND
- e.fldcargo_id = d.fldcargo_id AND
- b.fldtipoproyecto_admon = 'A'
- ))
- UNION
- (
- --usuario que tiene permisos sobre la dependencia a la cual pertenece el proyecto
- SELECT a.fldproyecto_numero, d.fldusuario_id, 'Proyecto' as porque
- FROM tbdsigspaproyecto a, tbltipoproyecto b, tblarea c, vista_usuario_cmi d
- WHERE b.fldtipoproyecto_id = a.fldtipoproyecto_id AND
- c.fldarea_id = a.fldorganigrama_codigo AND
- d.fldarea_id = c.fldarea_id AND
- d.fldarea_usuario_relacion = 'Privilegio' AND b.fldtipoproyecto_admon = 'C'
- ))
- UNION
- SELECT a.fldproyecto_numero, b.fldusuario_id, 'Registrador' AS porque
- FROM tbdsigspaproyecto a, tblusuario b
- WHERE a.fldusuario_temporal_id = b.fldusuario_id AND UPPER(a.fldproyecto_estado)IN ('REGISTRADO','PENDIENTE','EN VERIFICACION','RECHAZADO')
- UNION
- SELECT a.fldproyecto_numero, b.fldusuario_id, 'Gestor' AS porque
- FROM tbdsigspaproyecto a, tblusuario b
- WHERE a.fldusuario_gestor_id = b.fldusuario_id;
- /****************************
- *******PROCEDIMIENTOS********
- *****************************/
- CREATE OR REPLACE PROCEDURE copiar_cronograma_meta (cronograma_id integer, meta_id integer)
- AS
- --Función que copia un cronograma asociado a una metapidd
- --@author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
- --@fecha Junio 21 de 2010
- --
- --@param integer cronograma_id: ID del cronograma a ser copiado
- --@param integer meta_id: ID del meta a la cual se le debe asociar el cronograma
- --Modificaciones:
- --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
- --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
- --cursor con las actividades del cronograma
- CURSOR curactividades IS
- SELECT fldactividad_id FROM tbdsigspaactividad WHERE fldcronograma_codigo=cronograma_id AND fldactividad_et IS NULL;
- actividadid INTEGER;
- id INTEGER; --variable para ir llevando los ids de las actividades del cronograma
- tutorado_id INTEGER;
- cronogramanuevoid INTEGER; --variable donde se guarda el id del nuevo cronograma
- BEGIN
- --copiar cronograma
- INSERT INTO tbdsigspacronograma SELECT * FROM tbdsigspacronograma WHERE fldcronograma_id = cronograma_id;
- --obtener id del nuevo cronograma
- SELECT CRONOGRAMA_ID_SEQ.CURRVAL INTO cronogramanuevoid FROM DUAL;
- --Se actualiza el id de la metra asociada al cronograma y el st del cronograma
- UPDATE tbdsigspacronograma SET fldpiddmeta_id = meta_id, fldcronograma_st=systimestamp WHERE fldcronograma_id=cronogramanuevoid;
- --Se obtiene el tutorado del pidd de la meta
- SELECT fldpiddusuario_tutorado_id INTO tutorado_id FROM tblpidd WHERE fldpidd_id IN (SELECT fldpidd_id FROM tblpiddmeta WHERE fldpiddmeta_id=meta_id);
- --Se recorren las actiivdades para copiarlas
- OPEN curactividades;
- LOOP
- FETCH curactividades INTO actividadid;
- EXIT WHEN curactividades%NOTFOUND;
- --copiar registro
- INSERT INTO tbdsigspaactividad SELECT * FROM tbdsigspaactividad WHERE fldactividad_id = actividadid;
- --obtener id de la nueva actividad
- SELECT ACTIVIDAD_ID_SEQ.CURRVAL INTO id FROM DUAL;
- --Se actualiza el st, y el id del cronograma de la actividad
- UPDATE tbdsigspaactividad SET fldcronograma_codigo = cronogramanuevoid, fldactividad_st = systimestamp
- WHERE fldactividad_id = id;
- --Se agrega como responsable de la actividad copiada el tutorado del pidd al cual se encuentra asociado la meta
- INSERT INTO tbdsigsparesponsableactividad (fldactividad_codigo,fldusuario_id) VALUES(id,tutorado_id);
- END LOOP;
- CLOSE curactividades;
- END;
- /
- CREATE OR REPLACE PROCEDURE copiar_piddmeta (piddmeta_id integer, pidd_id integer)
- AS
- --Función que copia la una meta de un pidd
- --@author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
- --@fecha Junio 18 de 2010
- --
- --@param integer piddmeta_id: ID de la meta a ser copiada
- --@param integer pidd_id: ID del pidd al cual se le va a asociar la nueva meta
- --Modificaciones:
- --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- --cursor con las actividades del cronograma
- CURSOR curcronogramas IS
- SELECT fldcronograma_id FROM tbdsigspacronograma WHERE fldpiddmeta_id=piddmeta_id AND fldcronograma_et IS NULL;
- --cursor con los descriptores conductuales
- CURSOR curdescriptores IS
- SELECT fldcompindicadorconduc_id FROM tblpiddmeta_compindicador WHERE fldpiddmeta_id=piddmeta_id;
- --cursor con los niveles del piddmeta
- CURSOR curpiddniveles IS
- SELECT tblpiddmeta_nivel.* FROM tblpiddmeta_nivel WHERE fldpiddmeta_id=piddmeta_id;
- --cursor con los itemplan del piddmeta
- CURSOR curitemplan IS
- SELECT flditemplan_id FROM tblitemplan_piddmeta WHERE fldpiddmeta_id=piddmeta_id;
- regniveles tblpiddmeta_nivel%ROWTYPE;
- descriptorid INTEGER;
- cronogramaid INTEGER;
- itemplanid INTEGER;
- id INTEGER; --variable para ir llevando los ids de los cronogramas de la metapidd
- piddmetanuevaid INTEGER; --variable donde se guarda el id de la nueva metapidd
- tipometa VARCHAR2(5);
- BEGIN
- --copiar metapidd
- INSERT INTO tblpiddmeta SELECT * FROM tblpiddmeta WHERE fldpiddmeta_id = piddmeta_id;
- --obtener id de la nueva meta
- SELECT PIDDMETA_ID_SEQ.CURRVAL INTO piddmetanuevaid FROM DUAL;
- --Se actualiza el pidd_id y el st de la meta
- UPDATE tblpiddmeta SET fldpidd_id=pidd_id, fldpiddmeta_st=systimestamp WHERE fldpiddmeta_id=piddmetanuevaid;
- --se obtiene el tipo de la meta
- SELECT fldpiddmeta_tipo INTO tipometa FROM tblpiddmeta WHERE fldpiddmeta_id=piddmeta_id;
- --Si la meta es de desarrollo se copian las referencias de los descriptores
- IF tipometa='DLLO' THEN
- OPEN curdescriptores;
- LOOP
- FETCH curdescriptores INTO descriptorid;
- EXIT WHEN curdescriptores%NOTFOUND;
- --se copia el registro con el descriptor
- INSERT INTO tblpiddmeta_compindicador(fldpiddmeta_id,fldcompindicadorconduc_id)
- VALUES(piddmetanuevaid,descriptorid);
- END LOOP;
- CLOSE curdescriptores;
- END IF;
- --Se recorre y se copian los niveles
- OPEN curpiddniveles;
- LOOP
- FETCH curpiddniveles INTO regniveles;
- EXIT WHEN curpiddniveles%NOTFOUND;
- --se copia el registro con el nivel
- INSERT INTO tblpiddmeta_nivel(fldpiddmeta_id, fldpiddnivel_id, fldpiddmeta_nivel_prodentreg)
- VALUES(piddmetanuevaid,regniveles.fldpiddnivel_id,regniveles.fldpiddmeta_nivel_prodentreg);
- END LOOP;
- CLOSE curpiddniveles;
- --Se recorre y copian los itemplan
- OPEN curitemplan;
- LOOP
- FETCH curitemplan INTO itemplanid;
- EXIT WHEN curitemplan%NOTFOUND;
- --se copia el registro con el itemplan
- INSERT INTO tblitemplan_piddmeta(fldpiddmeta_id, flditemplan_id)
- VALUES(piddmetanuevaid,itemplanid);
- END LOOP;
- CLOSE curitemplan;
- --Se recorren y copian los cronogramas
- OPEN curcronogramas;
- LOOP
- FETCH curcronogramas INTO cronogramaid;
- EXIT WHEN curcronogramas%NOTFOUND;
- --copiar cronograma
- BEGIN
- copiar_cronograma_meta(cronogramaid,piddmetanuevaid);
- END;
- END LOOP;
- CLOSE curcronogramas;
- END;
- /
- /**********************
- *******FUNCIONES*******
- **********************/
- CREATE OR REPLACE FUNCTION cronograma_avanceponderado (cronograma_id IN number)
- RETURN number AS
- --Modificaciones:
- --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- avance float;
- BEGIN
- begin
- SELECT SUM(
- (
- (
- CASE
- WHEN a.fldactividad_estado='terminada' THEN 100
- WHEN a.fldactividad_estado='planeacion' THEN 0
- ELSE ( --Recoger el % del último avance
- SELECT fldavance_avance
- FROM (SELECT * FROM tbdsigspaactividadavance ORDER BY fldavance_fecha DESC,fldavance_avance DESC) av
- WHERE av.fldactividad_codigo=a.fldactividad_id AND av.fldavance_et IS NULL AND av.fldavance_avance IS NOT NULL AND ROWNUM=1)
- END
- )*a.fldactividad_peso)/100) INTO avance
- FROM tbdsigspacronograma c
- INNER JOIN tbdsigspaactividad a ON (a.fldcronograma_codigo=c.fldcronograma_id)
- WHERE c.fldcronograma_id=cronograma_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
- end;
- IF avance IS NULL THEN
- avance:=0;
- END IF;
- RETURN avance;
- END;
- /
- CREATE OR REPLACE FUNCTION cronograma_cumptoparcialobj (cronograma_id IN NUMBER)
- RETURN NUMBER
- AS
- --Modificaciones:
- --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- pesoobjetivo float;
- sumatoria float;
- valor float;
- medicion float;
- meta float;
- metamedicion float;
- metaindicador float;
- tipometa VARCHAR2(1);
- proposito VARCHAR2(10);
- peso float;
- 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
- m.fldindicador_periodicidad = i.fldindicador_periodicidad AND
- m.fldmedicion_et IS NULL AND
- 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
- m.fldindicador_periodicidad = i.fldindicador_periodicidad AND
- m.fldmedicion_et IS NULL AND
- m.fldmedicion_valor IS NOT NULL AND ROWNUM <= 1) meta,
- a.fldactividad_peso peso,
- i.fldindicador_metaperiodica,i.fldindicador_meta,i.fldindicador_proposito
- FROM tbdsigspaactividad a
- INNER JOIN tbdsigspacronograma c ON (a.fldcronograma_codigo=c.fldcronograma_id)
- INNER JOIN tblindicador_actividad b ON(a.fldactividad_id = b.fldactividad_id)
- INNER JOIN tblindicador i ON(b.fldindicador_id = i.fldindicador_id)
- WHERE a.fldcronograma_codigo = cronograma_id and i.fldindicador_eliminado = 'F' AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL
- ORDER BY i.fldindicador_codigo,UPPER(i.fldindicador_nombre) ASC;
- BEGIN
- --obtener el peso del objetivo dentro del plan
- begin
- SELECT fldcronograma_peso INTO pesoobjetivo
- FROM tbdsigspacronograma
- WHERE fldcronograma_id = cronograma_id;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- NULL;
- end;
- sumatoria := 0;
- OPEN indicadores;
- LOOP
- FETCH indicadores INTO valor,metamedicion,peso,tipometa,metaindicador,proposito;
- EXIT WHEN indicadores%NOTFOUND;
- --si el peso es nulo le asigna 0
- IF peso IS NULL THEN
- peso := 0;
- END IF;
- --si el valor de la medicion es nulo le asigna 0
- IF valor IS NULL THEN
- valor := 0;
- END IF;
- --si el tipo de meta es única se toma la meta del indicador
- --sino la meta de la medición
- IF tipometa = 'U' THEN
- IF metaindicador IS NULL THEN
- meta := 0;
- ELSE
- meta := metaindicador;
- END IF;
- ELSE
- IF metamedicion IS NULL THEN
- meta := 0;
- ELSE
- meta := metamedicion;
- END IF;
- END IF;
- --si la meta es cero asigna a la medición cero
- IF meta = 0 THEN
- medicion := 0;
- ELSE
- IF proposito = 'min' THEN
- medicion :=(meta*100)/valor;
- ELSE
- medicion :=(valor*100)/meta;
- END IF;
- END IF;
- sumatoria := sumatoria+(medicion*peso)/100;
- END LOOP;
- CLOSE indicadores;
- RETURN(sumatoria*pesoobjetivo)/100;
- END;
- /
- CREATE OR REPLACE FUNCTION proceso_consolidado (proceso_id IN NUMBER)
- RETURN NUMBER
- AS
- --Modificaciones:
- --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- cronogramaid NUMBER(10,0);
- sum1 float;
- CURSOR cronogramas IS
- SELECT fldcronograma_id
- FROM tbdsigspacronograma
- WHERE fldproyecto_numero = proceso_id and fldcronograma_et IS NULL
- ORDER BY fldcronograma_nombre ASC;
- BEGIN
- sum1 := 0;
- --obtener los cronogramas asociados al proceso
- OPEN cronogramas;
- LOOP
- FETCH cronogramas INTO cronogramaid;
- EXIT WHEN cronogramas%NOTFOUND;
- --obtener el cumplimiento parcial del objetivo
- sum1 := sum1 + cronograma_cumptoparcialobj(cronogramaid);
- END LOOP;
- CLOSE cronogramas;
- RETURN sum1;
- END;
- /
- CREATE OR REPLACE FUNCTION proyecto_totalcumptoparcialobj /*proyecto_totalcumptoparcialobj_5061112*/ (proyecto_id IN NUMBER)
- RETURN NUMBER
- AS
- --Modificaciones:
- --Por Jorge Ivan Franco - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- cronogramaid NUMBER(10,0);
- sum2 float;
- CURSOR cronogramas IS SELECT fldcronograma_id
- FROM tbdsigspacronograma
- WHERE fldproyecto_numero = proyecto_id and fldcronograma_et IS NULL
- ORDER BY fldcronograma_nombre ASC;
- BEGIN
- sum2 := 0;
- --obtener los cronogramas asociados al proyecto
- OPEN cronogramas;
- LOOP
- FETCH cronogramas INTO cronogramaid;
- EXIT WHEN cronogramas%NOTFOUND;
- --obtener el cumplimiento parcial del objetivo
- sum2 := sum2+cronograma_cumptoparcialobj(cronogramaid);
- END LOOP;
- CLOSE cronogramas;
- RETURN sum2;
- END;
- /
- CREATE OR REPLACE FUNCTION pyto_calporc_ejeplaneado /*pyto_calporc_ejeplaneado_5061113*/ (proyecto_id IN NUMBER)
- RETURN NUMBER
- AS
- --Modificaciones:
- --Por Jorge Ivan Franco H - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- avance float;
- BEGIN
- avance:=0;
- begin
- SELECT SUM(c.fldcronograma_peso*a.fldactividad_peso*(CASE
- WHEN a.fldactividad_fechafinp < SYSTIMESTAMP THEN 100
- ELSE 0
- END))/10000 INTO avance
- FROM tbdsigspacronograma c INNER JOIN tbdsigspaactividad a ON(c.fldcronograma_id = a.fldcronograma_codigo)
- WHERE c.fldproyecto_numero = proyecto_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- NULL;
- end;
- IF avance IS NULL THEN
- avance:=0;
- END IF;
- RETURN avance;
- END;
- /
- CREATE OR REPLACE FUNCTION pyto_calporc_ejereal /*pyto_calporc_ejereal_5061114*/ (proyecto_id IN NUMBER)
- RETURN NUMBER
- AS
- --Modificaciones:
- --Por Jorge Ivan Franco H - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- avance float;
- BEGIN
- begin
- SELECT SUM(c.fldcronograma_peso*a.fldactividad_peso*(CASE
- WHEN a.fldactividad_estado = 'terminada' THEN 100
- WHEN a.fldactividad_estado = 'planeacion' THEN 0
- 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)
- END))/10000 INTO avance
- FROM tbdsigspacronograma c INNER JOIN tbdsigspaactividad a ON(c.fldcronograma_id = a.fldcronograma_codigo)
- WHERE c.fldproyecto_numero = proyecto_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- NULL;
- end;
- IF avance IS NULL THEN
- avance:=0;
- END IF;
- RETURN avance;
- END;
- /
- create or replace
- FUNCTION pyto_calporc_ejereal_fecha /*pyto_calporc_ejereal_fecha_5061115*/ (proyecto_id IN NUMBER, fecha IN DATE)
- RETURN NUMBER
- AS
- --Modificaciones:
- --Por Jorge Ivan Franco H - jorgeun@gmail.com Octubre 13 de 2010
- --Se cambia fldcronograma_codigo por fldcronograma_id en la tabla tbdsigspacronograma
- avance float;
- BEGIN
- begin
- SELECT SUM(((CASE
- WHEN a.fldactividad_estado = 'terminada' AND a.fldactividad_fechafinr <= fecha THEN 100
- WHEN a.fldactividad_estado = 'planeacion' THEN 0
- 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)
- END)*a.fldactividad_peso*c.fldcronograma_peso)/100/100) INTO avance
- FROM tbdsigspaproyecto p inner join tbdsigspacronograma c ON(p.fldproyecto_numero = c.fldproyecto_numero)
- INNER JOIN tbdsigspaactividad a ON(a.fldcronograma_codigo = c.fldcronograma_id)
- WHERE p.fldproyecto_numero = proyecto_id AND a.fldactividad_et IS NULL AND c.fldcronograma_et IS NULL;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- NULL;
- end;
- RETURN avance;
- END;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement