· 8 years ago · Mar 05, 2018, 08:42 PM
1--Julio 26 de 2017 ACTUALIZACION SGI Build c29c5ed249bb372805caed23390c62f3f5560500
2DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
3
4INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
5VALUES ('_FECHA_ULT_ACTUALIZACION','2017-07-26 (Chokis) c29c5ed249bb372805caed23390c62f3f5560500','T');
6
7UPDATE tblparametro SET fldparametro_valor='c29c5ed249bb372805caed23390c62f3f5560500' WHERE fldparametro_nombre='_NUMERO_BUILD';
8
9--Julio 25 de 2017
10--Se crean campos para orÃgenes de riesgo (Néstor)(Issue#3401)
11ALTER TABLE tblorigenriesgo ADD fldorigenriesgo_descripcion TEXT,
12ADD fldorigenriesgo_imagen CHARACTER VARYING,
13ADD fldorigenriesgo_colorletra CHARACTER VARYING,
14ADD fldorigenriesgo_colorfondo CHARACTER VARYING;
15
16COMMENT ON COLUMN tblorigenriesgo.fldorigenriesgo_descripcion IS 'Descripción del origen de riesgo';
17COMMENT ON COLUMN tblorigenriesgo.fldorigenriesgo_imagen IS 'Imagen asociada al origen de riesgo';
18COMMENT ON COLUMN tblorigenriesgo.fldorigenriesgo_colorletra IS 'Color de letra del origen de riesgo';
19COMMENT ON COLUMN tblorigenriesgo.fldorigenriesgo_colorfondo IS 'Color de fondo del origen de riesgo';
20
21--Julio 26 de 2017
22--Se modifica servicios WS para indicadores (Diego)
23ALTER TABLE tblserviciows ADD fldserviciows_empaquetarjson CHAR(1) DEFAULT 'T' NOT NULL;
24ALTER TABLE tblserviciows ADD fldserviciows_campomediciones character varying DEFAULT 'mediciones';
25ALTER TABLE tblserviciows ADD fldserviciows_campofechainicio character varying DEFAULT 'fechaInicio';
26COMMENT ON COLUMN tblserviciows.fldserviciows_empaquetarjson IS 'Indica si no se debe concatenar al body la parte "json"';
27COMMENT ON COLUMN tblserviciows.fldserviciows_campomediciones IS 'Indica el nombre del campo en el json de respuesta que trae la info de las mediciones';
28COMMENT ON COLUMN tblserviciows.fldserviciows_campofechainicio IS 'Indica el nombre del campo en las mediciones que indica la fecha de inicio de la medición';
29ALTER TABLE tblindicador ADD fldindicador_campovalorauto character varying DEFAULT 'valor';
30COMMENT ON COLUMN tblindicador.fldindicador_campovalorauto IS 'Indica el nombre del campo de las mediciones que se debe leer como el valor de la medición';
31ALTER TABLE tblserviciows ADD fldserviciows_frecuenciaconsum integer DEFAULT 1 NOT NULL;
32COMMENT ON COLUMN tblserviciows.fldserviciows_frecuenciaconsum IS 'Indica la frecuencia (Minutos) con la que se debe consumir el servicio';
33ALTER TABLE tblserviciows ADD fldserviciows_categoria character varying;
34COMMENT ON COLUMN tblserviciows.fldserviciows_categoria IS 'Indica si la respuesta del servicio se debe tener en cuenta una categorÃa';
35
36--Julio 29 de 2017 ACTUALIZACION SGI Build 80e85447d89fd1289b0fcf1447295585eaf74e5c
37DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
38
39INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
40VALUES ('_FECHA_ULT_ACTUALIZACION','2017-07-29 (Chokis II) 80e85447d89fd1289b0fcf1447295585eaf74e5c','T');
41
42UPDATE tblparametro SET fldparametro_valor='80e85447d89fd1289b0fcf1447295585eaf74e5c' WHERE fldparametro_nombre='_NUMERO_BUILD';
43
44--Julio 27 de 2017
45--Se cambia nombre de campo en tblpriopasistema (Néstor)(Issue#3477)
46ALTER TABLE tblpriopasistema RENAME COLUMN fldpriopasistema_aplicariesgo TO fldpriopasistema_aplicaevento;
47
48--Julio 29 de 2017
49--Constante para convertir a docx con libreoffice (Diego)
50INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
51VALUES ('_TRAMITE_CONVERTIR_DOCX', 'true', 'T');
52
53
54--Agosto 11 de 2017 ACTUALIZACION SGI Build 826ef8c857260c07605ef4c200b7179f99a73103
55DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
56
57INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
58VALUES ('_FECHA_ULT_ACTUALIZACION','2017-08-11 (Silent Hill) 826ef8c857260c07605ef4c200b7179f99a73103','T');
59
60UPDATE tblparametro SET fldparametro_valor='826ef8c857260c07605ef4c200b7179f99a73103' WHERE fldparametro_nombre='_NUMERO_BUILD';
61
62--Julio 31 de 2017
63--Columna para jefe del ruta (Diego#3482)
64ALTER TABLE tblgttransicion ADD fldgttransicion_enrutarjeferut CHAR(1) DEFAULT 'F' NOT NULL;
65COMMENT ON COLUMN tblgttransicion.fldgttransicion_enrutarjeferut IS 'Indica si se debe enrutar/notificar al jefe de la ruta actual del trámite';
66
67--Se crea nuevo evento de bitácora (Néstor)(Issue#3490)
68INSERT INTO tbleventobitacora (fldeventobitacora_codigo, fldeventobitacora_actividad, fldeventobitacoranivel_id) VALUES ('COP-PRV-01', 'Se realizó copia de privilegios de un usuario a otro', 1);
69
70--Agosto 01 de 2017
71--Se crean tablas y constante para campos adicionales en cargos (Néstor)(Issue#3516)
72INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
73VALUES ('_CARGO_CAMPOSADICIONALES', 'false', 'T');
74
75CREATE SEQUENCE campovlrdate_cargo_id_seq
76START WITH 1
77INCREMENT BY 1;
78CREATE TABLE tblcampovlrdate_cargo(
79 fldcampovlrdate_cargo_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlrdate_cargo_id_seq'),
80 fldcampoadicional_id INTEGER NOT NULL,
81 fldcargo_id INTEGER NOT NULL,
82 fldcampovlrdate_cargo_valor date,
83 CONSTRAINT campovlrdate_cargo_pk PRIMARY KEY (fldcampovlrdate_cargo_id),
84 CONSTRAINT campovlrdate_cargo_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
85 CONSTRAINT campovlrdate_cargo_id_fk2 FOREIGN KEY (fldcargo_id) REFERENCES tblcargo (fldcargo_id)
86);
87COMMENT ON TABLE tblcampovlrdate_cargo IS 'Tabla para registrar los valores de campos adicionales de tipo date para cargos';
88COMMENT ON COLUMN tblcampovlrdate_cargo.fldcampovlrdate_cargo_id IS 'Identificador del registro';
89COMMENT ON COLUMN tblcampovlrdate_cargo.fldcampoadicional_id IS 'Identificador del campo adicional al que corresponde el valor';
90COMMENT ON COLUMN tblcampovlrdate_cargo.fldcargo_id IS 'Identificador del cargo';
91COMMENT ON COLUMN tblcampovlrdate_cargo.fldcampovlrdate_cargo_valor IS 'Valor del campo en el cargo';
92
93CREATE SEQUENCE campovlritem_cargo_id_seq
94START WITH 1
95INCREMENT BY 1;
96CREATE TABLE tblcampovlritem_cargo(
97 fldcampovlritem_cargo_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlritem_cargo_id_seq'),
98 fldcampoadicional_id INTEGER NOT NULL,
99 fldcargo_id INTEGER NOT NULL,
100 fldcampoadicionalitem_id INTEGER,
101 CONSTRAINT campovlritem_cargo_id_pk PRIMARY KEY (fldcampovlritem_cargo_id),
102 CONSTRAINT campovlritem_cargo_id_fk2 FOREIGN KEY (fldcargo_id) REFERENCES tblcargo (fldcargo_id),
103 CONSTRAINT campovlritem_cargo_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
104 CONSTRAINT campovlritem_cargo_id_fk3 FOREIGN KEY (fldcampoadicionalitem_id) REFERENCES tblcampoadicionalitem (fldcampoadicionalitem_id)
105);
106COMMENT ON TABLE tblcampovlritem_cargo IS 'Tabla para registrar los valores de campos adicionales de tipo smu-smm para cargos';
107COMMENT ON COLUMN tblcampovlritem_cargo.fldcampovlritem_cargo_id IS 'Identificador del registro';
108COMMENT ON COLUMN tblcampovlritem_cargo.fldcampoadicional_id IS 'Identificador del campo adicional al que corresponde el valor';
109COMMENT ON COLUMN tblcampovlritem_cargo.fldcargo_id IS 'Identificador del cargo';
110COMMENT ON COLUMN tblcampovlritem_cargo.fldcampoadicionalitem_id IS 'Identificador del item seleccionado';
111
112CREATE SEQUENCE campovlrstring_cargo_id_seq
113START WITH 1
114INCREMENT BY 1;
115CREATE TABLE tblcampovlrstring_cargo(
116 fldcampovlrstring_cargo_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlrstring_cargo_id_seq'),
117 fldcampoadicional_id INTEGER NOT NULL,
118 fldcargo_id INTEGER NOT NULL,
119 fldcampovlrstring_cargo_valor CHARACTER VARYING,
120 CONSTRAINT campovlrstring_cargo_id_pk PRIMARY KEY (fldcampovlrstring_cargo_id),
121 CONSTRAINT campovlrstring_cargo_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
122 CONSTRAINT campovlrstring_cargo_id_fk2 FOREIGN KEY (fldcargo_id) REFERENCES tblcargo (fldcargo_id)
123);
124COMMENT ON TABLE tblcampovlrstring_cargo IS 'Tabla usada para almacenar los valores de campos adicionales de tipo string para cargos';
125COMMENT ON COLUMN tblcampovlrstring_cargo.fldcampovlrstring_cargo_id IS 'Identificador del registro';
126COMMENT ON COLUMN tblcampovlrstring_cargo.fldcampoadicional_id IS 'Identificador del campo adicional';
127COMMENT ON COLUMN tblcampovlrstring_cargo.fldcargo_id IS 'Identificador del cargo';
128COMMENT ON COLUMN tblcampovlrstring_cargo.fldcampovlrstring_cargo_valor IS 'Valor del campo adicional en el cargo';
129
130CREATE SEQUENCE campovlrtext_cargo_id_seq
131START WITH 1
132INCREMENT BY 1;
133CREATE TABLE tblcampovlrtext_cargo(
134 fldcampovlrtext_cargo_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlrtext_cargo_id_seq'),
135 fldcampoadicional_id INTEGER NOT NULL,
136 fldcargo_id INTEGER NOT NULL,
137 fldcampovlrtext_cargo_valor CHARACTER VARYING,
138 CONSTRAINT campovlrtext_cargo_id_pk PRIMARY KEY (fldcampovlrtext_cargo_id),
139 CONSTRAINT campovlrtext_cargo_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
140 CONSTRAINT campovlrtext_cargo_id_fk2 FOREIGN KEY (fldcargo_id) REFERENCES tblcargo (fldcargo_id)
141);
142COMMENT ON TABLE tblcampovlrtext_cargo IS 'Tabla usada para almacenar los valores de campos adicionales de tipo text para cargos';
143COMMENT ON COLUMN tblcampovlrtext_cargo.fldcampovlrtext_cargo_id IS 'Identificador del registro';
144COMMENT ON COLUMN tblcampovlrtext_cargo.fldcampoadicional_id IS 'Identificador del campo adicional';
145COMMENT ON COLUMN tblcampovlrtext_cargo.fldcargo_id IS 'Identificador del cargo';
146COMMENT ON COLUMN tblcampovlrtext_cargo.fldcampovlrtext_cargo_valor IS 'Valor del campo adicional en el cargo';
147
148--Agosto 02 de 2017
149--Nuevo parámetro para descripciones de nivel de valoración al ver PIDD (Jhonatan #3533)
150INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
151VALUES ('_PIDD_MOSTRAR_DESC_NVL_VALORACION', 'FALSE', 'T');
152
153--Se agrega columna para correos vistos (Diego)
154ALTER TABLE tblcorreo ADD fldcorreo_fuevisto timestamp without time zone;
155COMMENT ON COLUMN tblcorreo.fldcorreo_fuevisto IS 'Fecha y hora a la que fue visto el correo';
156
157--Agosto 03 de 2017
158--Se aumenta tamaño de campo nombre para auditorias (Yesid)
159ALTER TABLE tblproyecto ALTER COLUMN fldproyecto_nombre TYPE CHARACTER VARYING(200);
160
161--Migración de campos nativos a campos adicionales globales en cargos (Néstor)(Issue#3538)
162INSERT INTO tblcampoadicionalgrupo (fldcampoadicionalgrupo_codigo, fldcampoadicionalgrupo_nombre, fldcampoadicionalgrupo_clase, fldcampoadicionalgrupo_claseid, fldcampoadicionalgrupo_ubica)
163SELECT fldcampocargo_codigo, fldcampocargo_nombre||'|'||fldcampocargo_id, 'cargo', 1,
164 CASE WHEN fldcampocargo_tipo = 'C' THEN 'competencias'
165 WHEN fldcampocargo_tipo = 'A' THEN 'aspecto_ocupacional'
166 WHEN fldcampocargo_tipo = 'G' THEN 'general'
167 ELSE 'general'
168 END
169FROM tblcampocargo c WHERE EXISTS (SELECT * FROM tblcampocargo WHERE fldcampocargo_padre_id = c.fldcampocargo_id);
170
171INSERT INTO tblcampoadicionalgrupo (fldcampoadicionalgrupo_codigo, fldcampoadicionalgrupo_nombre, fldcampoadicionalgrupo_clase, fldcampoadicionalgrupo_claseid, fldcampoadicionalgrupo_ubica)
172VALUES (1, 'Información', 'cargo', 1, 'general');
173
174INSERT INTO tblcampoadicional (fldcampoadicional_nombre, fldcampoadicional_codigo, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_tipodato, fldcampoadicionalgrupo_id, fldcampoadicional_valordefault, fldcampoadicional_clasif)
175SELECT c.fldcampocargo_nombre||'|'||c.fldcampocargo_id, c.fldcampocargo_codigo, 'cargo', 1, 'text', g.fldcampoadicionalgrupo_id, fldcampocargo_vlrdefecto,
176 CASE WHEN fldcampocargo_tipo = 'C' THEN 'competencias'
177 WHEN fldcampocargo_tipo = 'A' THEN 'aspecto_ocupacional'
178 WHEN fldcampocargo_tipo = 'G' THEN 'general'
179 ELSE 'general'
180 END
181FROM tblcampocargo c
182INNER JOIN tblcampoadicionalgrupo g ON split_part(g.fldcampoadicionalgrupo_nombre, '|', 2)::integer = c.fldcampocargo_padre_id
183WHERE fldcampocargo_padre_id IS NOT NULL
184AND g.fldcampoadicionalgrupo_clase = 'cargo'
185AND g.fldcampoadicionalgrupo_nombre != 'Información'
186
187UNION
188
189SELECT c.fldcampocargo_nombre||'|'||c.fldcampocargo_id, c.fldcampocargo_codigo, 'cargo', 1, 'text', (SELECT fldcampoadicionalgrupo_id FROM tblcampoadicionalgrupo WHERE fldcampoadicionalgrupo_nombre = 'Información' AND fldcampoadicionalgrupo_clase = 'cargo'),
190 fldcampocargo_vlrdefecto,
191 CASE WHEN fldcampocargo_tipo = 'C' THEN 'competencias'
192 WHEN fldcampocargo_tipo = 'A' THEN 'aspecto_ocupacional'
193 WHEN fldcampocargo_tipo = 'G' THEN 'general'
194 ELSE 'general'
195 END
196FROM tblcampocargo c
197WHERE NOT EXISTS (SELECT * FROM tblcampocargo WHERE fldcampocargo_padre_id = c.fldcampocargo_id)
198AND c.fldcampocargo_padre_id IS NULL;
199
200INSERT INTO tblcampovlrtext_cargo (fldcampoadicional_id, fldcargo_id, fldcampovlrtext_cargo_valor)
201SELECT c.fldcampoadicional_id, cc.fldcargo_id, cc.fldcargo_campocargo_vlr
202FROM tblcargo_campocargo cc
203INNER JOIN tblcampoadicional c ON cc.fldcampocargo_id = split_part(c.fldcampoadicional_nombre, '|', 2)::integer
204WHERE c.fldcampoadicional_padre = 'cargo';
205
206UPDATE tblcampoadicionalgrupo SET fldcampoadicionalgrupo_nombre = split_part(fldcampoadicionalgrupo_nombre, '|', 1)
207WHERE fldcampoadicionalgrupo_clase = 'cargo';
208
209UPDATE tblcampoadicional SET fldcampoadicional_nombre = split_part(fldcampoadicional_nombre, '|', 1)
210WHERE fldcampoadicional_padre = 'cargo';
211
212--Nuevo parámetro para notificaciones automaticas al crear autovaloraciones (Jhonatan #3456)
213INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
214VALUES ('_PIDD_NOTIFICAR_AUTOVALORACION', 'FALSE', 'T');
215
216
217--Agosto 04 de 2017
218--Ajustes en terceros (Néstor)(Issue#3574)
219UPDATE tblgttercero SET fldgttercerotipodocumento_id = (SELECT fldgttercerotipodocumento_id FROM tblgttercerotipodocumento WHERE fldgttercerotipodocumento_nombre = 'NIT')
220WHERE fldgttercerotipodocumento_id IS NULL;
221
222ALTER TABLE tblgttercero ALTER COLUMN fldgttercerotipodocumento_id SET NOT NULL;
223
224ALTER TABLE tblgttercero RENAME fldgttercero_nit TO fldgttercero_numero;
225COMMENT ON COLUMN tblgttercero.fldgttercero_numero IS 'Número de documento del tercero';
226
227DELETE FROM tblgttipotercampoconfig WHERE fldgttipotercampoconfig_codigo = 'NIT';
228
229--COnstante para screen shot (Diego#3558)
230INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
231VALUES ('_SGI_SCREEN_SHOT', 'PHANTOM', 'T');
232
233--Nuevo campo en tipos de documento para terceros (Néstor)(Issue#3556)
234ALTER TABLE tblgttercerotipodocumento ADD fldgttercerotipodocumento_codigo CHARACTER VARYING;
235COMMENT ON COLUMN tblgttercerotipodocumento.fldgttercerotipodocumento_codigo IS 'Código del tipo de documento';
236
237--Se modifica tabla de remision (Diego)
238ALTER TABLE tblgtremision RENAME COLUMN fldgtremision_terceronit TO fldgtremision_terceronumero;
239ALTER TABLE tblgtremision ADD fldgttercerotipodocumento_id integer;
240COMMENT ON COLUMN tblgtremision.fldgttercerotipodocumento_id IS 'Id del tipo de documento';
241UPDATE tblgtremision SET fldgttercerotipodocumento_id=(
242 SELECT fldgttercerotipodocumento_id FROM tblgttercerotipodocumento WHERE UPPER(unaccent(fldgttercerotipodocumento_nombre))='CEDULA'
243) WHERE fldgtremision_tercerocedula <> '';
244UPDATE tblgtremision SET fldgttercerotipodocumento_id=(
245 SELECT fldgttercerotipodocumento_id FROM tblgttercerotipodocumento WHERE UPPER(unaccent(fldgttercerotipodocumento_nombre))='NIT'
246) WHERE fldgtremision_terceronumero <> '';
247UPDATE tblgtcampoconfig SET fldgtcampoconfig_codigo='NDC' WHERE fldgtcampoconfig_codigo='NIT';
248
249--Agosto 05 de 2017
250--Insert para tipo de documento en remision (Diego)
251INSERT INTO tblgtcampoconfig (fldgttipo_id, fldgtcampoconfig_codigo, fldgtcampoconfig_etiqueta, fldgtcampoconfig_requerido,
252fldgtcampoconfig_tipo, fldgtcampoconfig_esclave, fldgtcampoconfig_vistaprevia, fldgtcampoconfig_esbusqueda)
253SELECT fldgttipo_id, 'TDC', 'Tipo de documento', 'F', 'E', 'F', 'T', 'F'
254FROM tblgttipo WHERE fldgttipo_radicacion='T';
255UPDATE tblgttipotercampoconfig SET fldgttipotercampoconfig_codigo='NDC' WHERE fldgttipotercampoconfig_codigo='NIT';
256
257--Agosto 08 de 2017
258--Creación de Ãndices faltantes (Néstor)(Issue#3549)
259CREATE INDEX campovlrdate_atencion_idx ON tblcampovlrdate_atencion (fldcampoadicional_id, fldatencion_id);
260CREATE INDEX campovlrdate_atntecnica_idx ON tblcampovlrdate_atntecnica (fldcampoadicional_id, fldatnanalisis_id);
261CREATE INDEX campovlrdate_audit_idx ON tblcampovlrdate_audit (fldcampoadicional_id, fldproyecto_id);
262CREATE INDEX campovlrdate_cargo_idx ON tblcampovlrdate_cargo (fldcampoadicional_id, fldcargo_id);
263CREATE INDEX campovlrdate_contrato_idx ON tblcampovlrdate_contrato (fldcampoadicional_id, fldcontrato_id);
264CREATE INDEX campovlrdate_evsasignacion_idx ON tblcampovlrdate_evsasignacion (fldcampoadicional_id, fldevsanalisis_id);
265CREATE INDEX campovlrdate_evtocom_idx ON tblcampovlrdate_evtocom (fldcampoadicional_id, fldevsevento_comp_id);
266CREATE INDEX campovlrdate_gttercerocomponente_idx ON tblcampovlrdate_gttercerocomponente (fldcampoadicional_id, fldgttercerocomponente_id);
267CREATE INDEX campovlrdate_gttipotercero_idx ON tblcampovlrdate_gttipotercero (fldcampoadicional_id, fldgttercero_id);
268CREATE INDEX campovlrdate_interes_idx ON tblcampovlrdate_interes (fldcampoadicional_id, fldpyinteresado_id);
269CREATE INDEX campovlrdate_leccion_idx ON tblcampovlrdate_leccion (fldcampoadicional_id, fldleccion_id);
270CREATE INDEX campovlrdate_planitem_idx ON tblcampovlrdate_planitem (fldcampoadicional_id, fldplanitem_codigo);
271CREATE INDEX campovlrdate_respeva_idx ON tblcampovlrdate_respeva (fldcampoadicional_id, fldrespuestaevaluacion_id);
272CREATE INDEX campovlrdate_tcapa_idx ON tblcampovlrdate_tcapa (fldcampoadicional_id, fldcaevento_id);
273CREATE INDEX campovlrdate_tcontrato_idx ON tblcampovlrdate_tcontrato (fldcampoadicional_id, fldcontrato_id);
274CREATE INDEX campovlrdate_uniaudi_idx ON tblcampovlrdate_uniaudi (fldcampoadicional_id, fldunidadauditable_id);
275
276CREATE INDEX campovlrdouble_evenrsg_idx ON tblcampovlrdouble_evenrsg (fldcampoadicional_id, fldeventoriesgo_id);
277CREATE INDEX campovlrdouble_evsasignacion_idx ON tblcampovlrdouble_evsasignacion (fldcampoadicional_id, fldevsanalisis_id);
278CREATE INDEX campovlrdouble_evtocom_idx ON tblcampovlrdouble_evtocom (fldcampoadicional_id, fldevsevento_comp_id);
279CREATE INDEX campovlrdouble_proyecto_idx ON tblcampovlrdouble_proyecto (fldcampoadicional_id, fldproyecto_id);
280
281CREATE INDEX campovlritem_atencion_idx ON tblcampovlritem_atencion (fldcampoadicional_id, fldatencion_id);
282CREATE INDEX campovlritem_atntecnica_idx ON tblcampovlritem_atntecnica (fldcampoadicional_id, fldatnanalisis_id);
283CREATE INDEX campovlritem_audit_idx ON tblcampovlritem_audit (fldcampoadicional_id, fldproyecto_id);
284CREATE INDEX campovlritem_cargo_idx ON tblcampovlritem_cargo (fldcampoadicional_id, fldcargo_id);
285CREATE INDEX campovlritem_contrato_idx ON tblcampovlritem_contrato (fldcampoadicional_id, fldcontrato_id);
286CREATE INDEX campovlritem_evsasignacion_idx ON tblcampovlritem_evsasignacion (fldcampoadicional_id, fldevsanalisis_id);
287CREATE INDEX campovlritem_evtocom_idx ON tblcampovlritem_evtocom (fldcampoadicional_id, fldevsevento_comp_id);
288CREATE INDEX campovlritem_gttercerocomponente_idx ON tblcampovlritem_gttercerocomponente (fldcampoadicional_id, fldgttercerocomponente_id);
289CREATE INDEX campovlritem_gttipotercero_idx ON tblcampovlritem_gttipotercero (fldcampoadicional_id, fldgttercero_id);
290CREATE INDEX campovlritem_interes_idx ON tblcampovlritem_interes (fldcampoadicional_id, fldpyinteresado_id);
291CREATE INDEX campovlritem_leccion_idx ON tblcampovlritem_leccion (fldcampoadicional_id, fldleccion_id);
292CREATE INDEX campovlritem_planitem_idx ON tblcampovlritem_planitem (fldcampoadicional_id, fldplanitem_codigo);
293CREATE INDEX campovlritem_respeva_idx ON tblcampovlritem_respeva (fldcampoadicional_id, fldrespuestaevaluacion_id);
294CREATE INDEX campovlritem_tcapa_idx ON tblcampovlritem_tcapa (fldcampoadicional_id, fldcaevento_id);
295CREATE INDEX campovlritem_tcontrato_idx ON tblcampovlritem_tcontrato (fldcampoadicional_id, fldcontrato_id);
296CREATE INDEX campovlritem_uniaudi_idx ON tblcampovlritem_uniaudi (fldcampoadicional_id, fldunidadauditable_id);
297
298CREATE INDEX campovlrstring_atencion_idx ON tblcampovlrstring_atencion (fldcampoadicional_id, fldatencion_id);
299CREATE INDEX campovlrstring_atntecnica_idx ON tblcampovlrstring_atntecnica (fldcampoadicional_id, fldatnanalisis_id);
300CREATE INDEX campovlrstring_audit_idx ON tblcampovlrstring_audit (fldcampoadicional_id, fldproyecto_id);
301CREATE INDEX campovlrstring_cargo_idx ON tblcampovlrstring_cargo (fldcampoadicional_id, fldcargo_id);
302CREATE INDEX campovlrstring_contrato_idx ON tblcampovlrstring_contrato (fldcampoadicional_id, fldcontrato_id);
303CREATE INDEX campovlrstring_evsasignacion_idx ON tblcampovlrstring_evsasignacion (fldcampoadicional_id, fldevsanalisis_id);
304CREATE INDEX campovlrstring_evtocom_idx ON tblcampovlrstring_evtocom (fldcampoadicional_id, fldevsevento_comp_id);
305CREATE INDEX campovlrstring_gttercerocomponente_idx ON tblcampovlrstring_gttercerocomponente (fldcampoadicional_id, fldgttercerocomponente_id);
306CREATE INDEX campovlrstring_gttipotercero_idx ON tblcampovlrstring_gttipotercero (fldcampoadicional_id, fldgttercero_id);
307CREATE INDEX campovlrstring_interes_idx ON tblcampovlrstring_interes (fldcampoadicional_id, fldpyinteresado_id);
308CREATE INDEX campovlrstring_leccion_idx ON tblcampovlrstring_leccion (fldcampoadicional_id, fldleccion_id);
309CREATE INDEX campovlrstring_planitem_idx ON tblcampovlrstring_planitem (fldcampoadicional_id, fldplanitem_codigo);
310CREATE INDEX campovlrstring_respeva_idx ON tblcampovlrstring_respeva (fldcampoadicional_id, fldrespuestaevaluacion_id);
311CREATE INDEX campovlrstring_tcapa_idx ON tblcampovlrstring_tcapa (fldcampoadicional_id, fldcaevento_id);
312CREATE INDEX campovlrstring_tcontrato_idx ON tblcampovlrstring_tcontrato (fldcampoadicional_id, fldcontrato_id);
313CREATE INDEX campovlrstring_uniaudi_idx ON tblcampovlrstring_uniaudi (fldcampoadicional_id, fldunidadauditable_id);
314
315CREATE INDEX campovlrtext_atencion_idx ON tblcampovlrtext_atencion (fldcampoadicional_id, fldatencion_id);
316CREATE INDEX campovlrtext_atntecnica_idx ON tblcampovlrtext_atntecnica (fldcampoadicional_id, fldatnanalisis_id);
317CREATE INDEX campovlrtext_audit_idx ON tblcampovlrtext_audit (fldcampoadicional_id, fldproyecto_id);
318CREATE INDEX campovlrtext_cargo_idx ON tblcampovlrtext_cargo (fldcampoadicional_id, fldcargo_id);
319CREATE INDEX campovlrtext_contrato_idx ON tblcampovlrtext_contrato (fldcampoadicional_id, fldcontrato_id);
320CREATE INDEX campovlrtext_evsasignacion_idx ON tblcampovlrtext_evsasignacion (fldcampoadicional_id, fldevsanalisis_id);
321CREATE INDEX campovlrtext_evtocom_idx ON tblcampovlrtext_evtocom (fldcampoadicional_id, fldevsevento_comp_id);
322CREATE INDEX campovlrtext_gttercerocomponente_idx ON tblcampovlrtext_gttercerocomponente (fldcampoadicional_id, fldgttercerocomponente_id);
323CREATE INDEX campovlrtext_gttipotercero_idx ON tblcampovlrtext_gttipotercero (fldcampoadicional_id, fldgttercero_id);
324CREATE INDEX campovlrtext_interes_idx ON tblcampovlrtext_interes (fldcampoadicional_id, fldpyinteresado_id);
325CREATE INDEX campovlrtext_leccion_idx ON tblcampovlrtext_leccion (fldcampoadicional_id, fldleccion_id);
326CREATE INDEX campovlrtext_planitem_idx ON tblcampovlrtext_planitem (fldcampoadicional_id, fldplanitem_codigo);
327CREATE INDEX campovlrtext_respeva_idx ON tblcampovlrtext_respeva (fldcampoadicional_id, fldrespuestaevaluacion_id);
328CREATE INDEX campovlrtext_tcapa_idx ON tblcampovlrtext_tcapa (fldcampoadicional_id, fldcaevento_id);
329CREATE INDEX campovlrtext_tcontrato_idx ON tblcampovlrtext_tcontrato (fldcampoadicional_id, fldcontrato_id);
330CREATE INDEX campovlrtext_uniaudi_idx ON tblcampovlrtext_uniaudi (fldcampoadicional_id, fldunidadauditable_id);
331
332--Constante demonio para consumir terceros (Diego)
333INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
334VALUES ('_DAEMON_TRAMITES_TERCEROS', 'false', 'T');
335
336--Agosto 09 de 2017
337--Se crea constante y tabla para tipos de punto de atención (Néstor)(Issue#3571)
338INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
339VALUES ('_MOD_PLANES_TIPOSPUNTOSATENCION', 'false', 'T');
340
341CREATE SEQUENCE atenciontipo_id_seq
342START WITH 1
343INCREMENT BY 1;
344
345CREATE TABLE tblatenciontipo(
346 fldatenciontipo_id INTEGER NOT NULL DEFAULT nextval('atenciontipo_id_seq'),
347 fldatenciontipo_orden INTEGER NOT NULL,
348 fldatenciontipo_nombre CHARACTER VARYING NOT NULL,
349 fldatenciontipo_icono CHARACTER VARYING NOT NULL,
350 CONSTRAINT atenciontipo_id_pk PRIMARY KEY (fldatenciontipo_id)
351);
352COMMENT ON TABLE tblatenciontipo IS 'Tabla usada para administrar los tipos de punto de atención';
353COMMENT ON COLUMN tblatenciontipo.fldatenciontipo_id IS 'Identificador del registro';
354COMMENT ON COLUMN tblatenciontipo.fldatenciontipo_orden IS 'Orden de aparición del tipo';
355COMMENT ON COLUMN tblatenciontipo.fldatenciontipo_nombre IS 'Nombre del tipo';
356COMMENT ON COLUMN tblatenciontipo.fldatenciontipo_icono IS 'Icono que representa al tipo';
357
358--Referencia tipo punto de atención a sigspaatencion
359ALTER TABLE tbdsigspaatencion ADD fldatenciontipo_id INTEGER,
360ADD CONSTRAINT atencion_atenciontipo_id_fk FOREIGN KEY (fldatenciontipo_id) REFERENCES tblatenciontipo (fldatenciontipo_id);
361COMMENT ON COLUMN tbdsigspaatencion.fldatenciontipo_id IS 'Tipo de punto de atención';
362
363--Alters para campos en trámites y REST (Diego)
364ALTER TABLE tblgtcampo DROP COLUMN fldrestmetodo_id;
365ALTER TABLE tblgtcampo ADD fldrestmetodo_id integer CONSTRAINT gtcampo_restmetodo_fk REFERENCES tblrestmetodo (fldrestmetodo_id);
366COMMENT ON COLUMN tblgtcampo.fldrestmetodo_id IS 'Id del método ó servicio a consumir via REST';
367
368--Agosto 10 de 2017
369--Se depura API v1 (Diego)
370DELETE FROM tblparametro WHERE fldparametro_nombre='_HABILITAR_API';
371DELETE FROM tblparametro WHERE fldparametro_nombre='_APIKEY_API';
372DROP TABLE tblwsparametro;
373
374--Nuevas constantes (Néstor)(Issue#3573)
375INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
376SELECT '_RIETIQUETA_PROBABILIDADRIESGO', fldsistemariesgo_etqprobabil, 'T' FROM tblsistemariesgo WHERE fldsistemariesgo_defecto_proc = 'T' LIMIT 1;
377
378INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
379SELECT '_RIETIQUETA_IMPACTORIESGO', fldsistemariesgo_etqimpacto, 'T' FROM tblsistemariesgo WHERE fldsistemariesgo_defecto_proc = 'T' LIMIT 1;
380
381INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
382SELECT '_RIETIQUETA_NIVELRIESGO', fldsistemariesgo_etqnvlriesgo, 'T' FROM tblsistemariesgo WHERE fldsistemariesgo_defecto_proc = 'T' LIMIT 1;
383
384--Se crea tabla para carga de plantillas de indicadores (Jhonatan #3497)
385CREATE SEQUENCE plantillacarga_id_seq
386 INCREMENT 1
387 START 1;
388
389CREATE TABLE tblplantillacarga(
390 fldplantillacarga_id INTEGER DEFAULT nextval('plantillacarga_id_seq') NOT NULL,
391 fldindicadorplantilla_id INTEGER NOT NULL,
392 fldplantillacarga_st TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT now(),
393 fldusuario_id INTEGER NOT NULL,
394 CONSTRAINT plantillacarga_id_pk PRIMARY KEY(fldplantillacarga_id)
395);
396COMMENT ON TABLE tblplantillacarga IS 'Tabla para el historial de cargas que se han realizado';
397COMMENT ON COLUMN tblplantillacarga.fldplantillacarga_id IS 'Identificador unico de los registros';
398COMMENT ON COLUMN tblplantillacarga.fldindicadorplantilla_id IS 'Id de la plantilla que se cargo';
399COMMENT ON COLUMN tblplantillacarga.fldplantillacarga_st IS 'Fecha y hora de creacion ';
400COMMENT ON COLUMN tblplantillacarga.fldusuario_id IS 'Id del usuario que realiza la carga';
401
402--Constante para borradores en trámites (Diego#3570)
403INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
404VALUES ('_TRAMITE_MOSTRAR_BORRADORES', 'false', 'T');
405
406--Se desactiva tipo documento en tipos (Diego)
407UPDATE tblgtcampoconfig SET fldgtcampoconfig_tipo='N' WHERE fldgtcampoconfig_codigo='TDC';
408
409--Agosto 11 de 2017
410--Se crean tablas para campos adicionales globales en puntos de atención (Néstor)(Issue#3577)
411CREATE SEQUENCE campovlrdate_atn_id_seq
412START WITH 1
413INCREMENT BY 1;
414CREATE TABLE tblcampovlrdate_atn(
415 fldcampovlrdate_atn_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlrdate_atn_id_seq'),
416 fldcampoadicional_id INTEGER NOT NULL,
417 fldatencion_id INTEGER NOT NULL,
418 fldcampovlrdate_atn_valor date,
419 CONSTRAINT campovlrdate_atn_pk PRIMARY KEY (fldcampovlrdate_atn_id),
420 CONSTRAINT campovlrdate_atn_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
421 CONSTRAINT campovlrdate_atn_id_fk2 FOREIGN KEY (fldatencion_id) REFERENCES tbdsigspaatencion (fldatencion_id)
422);
423COMMENT ON TABLE tblcampovlrdate_atn IS 'Tabla para registrar los valores de campos adicionales de tipo date para puntos de atención';
424COMMENT ON COLUMN tblcampovlrdate_atn.fldcampovlrdate_atn_id IS 'Identificador del registro';
425COMMENT ON COLUMN tblcampovlrdate_atn.fldcampoadicional_id IS 'Identificador del campo adicional al que corresponde el valor';
426COMMENT ON COLUMN tblcampovlrdate_atn.fldatencion_id IS 'Identificador del punto de atención';
427COMMENT ON COLUMN tblcampovlrdate_atn.fldcampovlrdate_atn_valor IS 'Valor del campo en el punto de atención';
428
429CREATE INDEX campovlrdate_atn_idx ON tblcampovlrdate_atn (fldcampoadicional_id, fldatencion_id);
430
431
432CREATE SEQUENCE campovlritem_atn_id_seq
433START WITH 1
434INCREMENT BY 1;
435CREATE TABLE tblcampovlritem_atn(
436 fldcampovlritem_atn_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlritem_atn_id_seq'),
437 fldcampoadicional_id INTEGER NOT NULL,
438 fldatencion_id INTEGER NOT NULL,
439 fldcampoadicionalitem_id INTEGER,
440 CONSTRAINT campovlritem_atn_id_pk PRIMARY KEY (fldcampovlritem_atn_id),
441 CONSTRAINT campovlritem_atn_id_fk2 FOREIGN KEY (fldatencion_id) REFERENCES tbdsigspaatencion (fldatencion_id),
442 CONSTRAINT campovlritem_atn_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
443 CONSTRAINT campovlritem_atn_id_fk3 FOREIGN KEY (fldcampoadicionalitem_id) REFERENCES tblcampoadicionalitem (fldcampoadicionalitem_id)
444);
445COMMENT ON TABLE tblcampovlritem_atn IS 'Tabla para registrar los valores de campos adicionales de tipo smu-smm para puntos de atención';
446COMMENT ON COLUMN tblcampovlritem_atn.fldcampovlritem_atn_id IS 'Identificador del registro';
447COMMENT ON COLUMN tblcampovlritem_atn.fldcampoadicional_id IS 'Identificador del campo adicional al que corresponde el valor';
448COMMENT ON COLUMN tblcampovlritem_atn.fldatencion_id IS 'Identificador del punto de atención';
449COMMENT ON COLUMN tblcampovlritem_atn.fldcampoadicionalitem_id IS 'Identificador del item seleccionado';
450
451CREATE INDEX campovlritem_atn_idx ON tblcampovlritem_atn (fldcampoadicional_id, fldatencion_id);
452
453
454CREATE SEQUENCE campovlrstring_atn_id_seq
455START WITH 1
456INCREMENT BY 1;
457CREATE TABLE tblcampovlrstring_atn(
458 fldcampovlrstring_atn_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlrstring_atn_id_seq'),
459 fldcampoadicional_id INTEGER NOT NULL,
460 fldatencion_id INTEGER NOT NULL,
461 fldcampovlrstring_atn_valor CHARACTER VARYING,
462 CONSTRAINT campovlrstring_atn_id_pk PRIMARY KEY (fldcampovlrstring_atn_id),
463 CONSTRAINT campovlrstring_atn_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
464 CONSTRAINT campovlrstring_atn_id_fk2 FOREIGN KEY (fldatencion_id) REFERENCES tbdsigspaatencion (fldatencion_id)
465);
466COMMENT ON TABLE tblcampovlrstring_atn IS 'Tabla usada para almacenar los valores de campos adicionales de tipo string para puntos de atención';
467COMMENT ON COLUMN tblcampovlrstring_atn.fldcampovlrstring_atn_id IS 'Identificador del registro';
468COMMENT ON COLUMN tblcampovlrstring_atn.fldcampoadicional_id IS 'Identificador del campo adicional';
469COMMENT ON COLUMN tblcampovlrstring_atn.fldatencion_id IS 'Identificador del punto de atención';
470COMMENT ON COLUMN tblcampovlrstring_atn.fldcampovlrstring_atn_valor IS 'Valor del campo adicional en el punto de atención';
471
472CREATE INDEX campovlrstring_atn_idx ON tblcampovlrstring_atn (fldcampoadicional_id, fldatencion_id);
473
474
475CREATE SEQUENCE campovlrtext_atn_id_seq
476START WITH 1
477INCREMENT BY 1;
478CREATE TABLE tblcampovlrtext_atn(
479 fldcampovlrtext_atn_id INTEGER NOT NULL DEFAULT NEXTVAL('campovlrtext_atn_id_seq'),
480 fldcampoadicional_id INTEGER NOT NULL,
481 fldatencion_id INTEGER NOT NULL,
482 fldcampovlrtext_atn_valor CHARACTER VARYING,
483 CONSTRAINT campovlrtext_atn_id_pk PRIMARY KEY (fldcampovlrtext_atn_id),
484 CONSTRAINT campovlrtext_atn_id_fk1 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id),
485 CONSTRAINT campovlrtext_atn_id_fk2 FOREIGN KEY (fldatencion_id) REFERENCES tbdsigspaatencion (fldatencion_id)
486);
487COMMENT ON TABLE tblcampovlrtext_atn IS 'Tabla usada para almacenar los valores de campos adicionales de tipo text para puntos de atención';
488COMMENT ON COLUMN tblcampovlrtext_atn.fldcampovlrtext_atn_id IS 'Identificador del registro';
489COMMENT ON COLUMN tblcampovlrtext_atn.fldcampoadicional_id IS 'Identificador del campo adicional';
490COMMENT ON COLUMN tblcampovlrtext_atn.fldatencion_id IS 'Identificador del punto de atención';
491COMMENT ON COLUMN tblcampovlrtext_atn.fldcampovlrtext_atn_valor IS 'Valor del campo adicional en el punto de atención';
492
493CREATE INDEX campovlrtext_atn_idx ON tblcampovlrtext_atn (fldcampoadicional_id, fldatencion_id);
494
495--Tabla para almacenar relación entre campos adicionales globales y tipos de punto de atención
496CREATE TABLE tblatenciontipo_campo(
497 fldatenciontipo_id INTEGER NOT NULL,
498 fldcampoadicional_id INTEGER NOT NULL,
499 CONSTRAINT atenciontipo_campo_id_pk PRIMARY KEY (fldatenciontipo_id, fldcampoadicional_id),
500 CONSTRAINT atenciontipo_campo_id_fk1 FOREIGN KEY (fldatenciontipo_id) REFERENCES tblatenciontipo (fldatenciontipo_id),
501 CONSTRAINT atenciontipo_campo_id_fk2 FOREIGN KEY (fldcampoadicional_id) REFERENCES tblcampoadicional (fldcampoadicional_id)
502);
503COMMENT ON TABLE tblatenciontipo_campo IS 'Tabla usada para almacenar la relación entre campos adicionales globales y tipos de punto de atención';
504COMMENT ON COLUMN tblatenciontipo_campo.fldatenciontipo_id IS 'Tipo de punto de atención';
505COMMENT ON COLUMN tblatenciontipo_campo.fldcampoadicional_id IS 'Campo adicional';
506
507
508--Presentar logo en menú lateral (#3587) (Yesid)
509INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
510VALUES ('_SGI_MOSTRAR_LOGO_MENU','false','T');
511
512--Insert para activar login por web service (Diego)
513INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
514VALUES ('_LOGIN_WEB_SERVICE', 'false', 'T');
515
516ALTER TABLE tbldominio ADD flddominio_webservice CHAR(1) DEFAULT 'F' NOT NULL;
517ALTER TABLE tbldominio ADD fldrestmetodo_id integer CONSTRAINT dominio_restmetodo_fk REFERENCES tblrestmetodo (fldrestmetodo_id);
518COMMENT ON COLUMN tbldominio.flddominio_webservice IS 'Indica si el dominio hace uso de un web service para el login';
519COMMENT ON COLUMN tbldominio.fldrestmetodo_id IS 'Id del servicio web que se desea consumir para el login de los usuario';
520
521
522--Agosto 03 de 2017
523--Se actualiza función (Diego)
524CREATE OR REPLACE FUNCTION gt_generar_copia_tramite(
525 tramite_origen_id integer,
526 tipo_id integer,
527 tramite_copia_id integer)
528 RETURNS void AS
529$BODY$
530/**
531* Función para copiar los valores de los campos de un trámite a otro
532* @author Diego Anderson Quintero Diaz <diegoquinterodiaz@gmail.com>
533* @param tramite_origen_id Id del trámite del cual se van a copiar los valores
534* @param tipo_id Id del tipo de trámite
535* @param tramite_copia_id Id del trámite al cual se van a asociar los valores
536*/
537DECLARE
538campo record;
539tmp record;
540BEGIN
541 --Seleccionamos los campos del estado inicial del tipo de trámite
542 --que no tengan padre
543 FOR campo IN SELECT c.* FROM tblgtcampo c
544 INNER JOIN tblgtcampo_gtestado ce ON ce.fldgtcampo_id=c.fldgtcampo_id
545 INNER JOIN tblgttipo t ON t.fldgtestadoi_id=ce.fldgtestado_id
546 WHERE t.fldgttipo_id=tipo_id
547 LOOP
548 --Se tiene que realizar el INTO tmp por errores de postres
549 SELECT gt_generar_copia_campo(campo.fldgtcampo_id, tramite_origen_id, tramite_copia_id) INTO tmp;
550 END LOOP;
551
552 --Copiamos la remision
553 INSERT INTO tblgtremision (fldgtremision_id, fldgtremision_origen, fldgtremision_terceronombre, fldgtremision_tercerocargo, fldgtremision_tercerocedula, fldgtremision_terceroinst, fldgtremision_terceronit, fldpqrmunicipio_id,
554 fldgtremision_tercerodir, fldgtremision_tercerotel, fldgtremision_terceroemail, fldgtremision_tercerocodigopt, fldgttercero_id, fldgtremision_forma, fldgtempmensajeria_id,
555 fldgtremision_numeroguia, fldgtremision_asunto, fldgtremision_fechadocumento, fldgttramite_id, fldgtclasificacion_id, fldgtremision_tipo, fldgtremision_eps, fldgtremision_arl,
556 fldgtremision_fondopensiones)
557 SELECT nextval('gtremision_id_seq'), fldgtremision_origen, fldgtremision_terceronombre, fldgtremision_tercerocargo, fldgtremision_tercerocedula, fldgtremision_terceroinst, fldgtremision_terceronit, fldpqrmunicipio_id,
558 fldgtremision_tercerodir, fldgtremision_tercerotel, fldgtremision_terceroemail, fldgtremision_tercerocodigopt, fldgttercero_id, fldgtremision_forma, fldgtempmensajeria_id,
559 fldgtremision_numeroguia, fldgtremision_asunto, fldgtremision_fechadocumento, tramite_copia_id, fldgtclasificacion_id, fldgtremision_tipo, fldgtremision_eps, fldgtremision_arl,
560 fldgtremision_fondopensiones FROM tblgtremision WHERE fldgttramite_id=tramite_origen_id;
561END;
562$BODY$
563 LANGUAGE plpgsql VOLATILE
564 COST 100;
565ALTER FUNCTION gt_generar_copia_tramite(integer, integer, integer)
566 OWNER TO sig;
567
568 --Agosto 04 de 2017
569--Se actualiza función (Diego)
570CREATE OR REPLACE FUNCTION gt_generar_json_remision(tramite_id integer)
571 RETURNS text AS
572$BODY$
573DECLARE
574cadena text;
575info record;
576tmp record;
577empresa_mensajeria text;
578clasificacion_nombre text;
579BEGIN
580 cadena:='';
581 FOR info IN SELECT * FROM tblgtremision WHERE fldgttramite_id=tramite_id
582 LOOP
583 IF info.fldgtremision_terceronombre <> '' THEN cadena:=CONCAT('"nombre":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_terceronombre), '[^[:print:]]', ''), '"'); END IF;
584
585 IF info.fldgtremision_tercerocargo <> '' THEN
586 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
587 cadena:=CONCAT(cadena, '"cargo":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_tercerocargo), '[^[:print:]]+', '', 'g'), '"');
588 END IF;
589 IF info.fldgtremision_tercerocedula <> '' THEN
590 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
591 cadena:=CONCAT(cadena, '"cedula":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_tercerocedula), '[^[:print:]]+', '', 'g'), '"');
592 END IF;
593 IF info.fldgtremision_terceroinst <> '' THEN
594 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
595 cadena:=CONCAT(cadena, '"instituto":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_terceroinst), '[^[:print:]]+', '', 'g'), '"');
596 END IF;
597 IF info.fldgtremision_terceronumero <> '' THEN
598 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
599 cadena:=CONCAT(cadena, '"numero":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_terceronumero), '[^[:print:]]+', '', 'g'), '"');
600 END IF;
601 IF info.fldpqrmunicipio_id IS NOT NULL THEN
602 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
603 FOR tmp IN SELECT * FROM tblpqrmunicipio WHERE fldpqrmunicipio_id=info.fldpqrmunicipio_id
604 LOOP
605 cadena:=CONCAT(cadena, '"municipio":"', REGEXP_REPLACE(strip_tags(tmp.fldpqrmunicipio_nombre), '[^[:print:]]+', '', 'g'), '",');
606 END LOOP;
607 FOR tmp IN SELECT * FROM tblpqrdepartamento WHERE fldpqrdepartamento_id=tmp.fldpqrdepartamento_id
608 LOOP
609 cadena:=CONCAT(cadena, '"departamento":"', REGEXP_REPLACE(strip_tags(tmp.fldpqrdepartamento_nombre), '[^[:print:]]+', '', 'g'), '",');
610 END LOOP;
611 FOR tmp IN SELECT * FROM tblpqrpais WHERE fldpqrpais_id=tmp.fldpqrpais_id
612 LOOP
613 cadena:=CONCAT(cadena, '"pais":"', REGEXP_REPLACE(strip_tags(tmp.fldpqrpais_nombre), '[^[:print:]]+', '', 'g'), '"');
614 END LOOP;
615 END IF;
616 IF info.fldgtremision_tercerodir <> '' THEN
617 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
618 cadena:=CONCAT(cadena, '"direccion":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_tercerodir),'[^[:print:]]+', '', 'g'), '"');
619 END IF;
620 IF info.fldgtremision_tercerotel <> '' THEN
621 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
622 cadena:=CONCAT(cadena, '"telefono":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_tercerotel), '[^[:print:]]+', '', 'g'), '"');
623 END IF;
624 IF info.fldgtremision_terceroemail <> '' THEN
625 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
626 cadena:=CONCAT(cadena, '"email":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_terceroemail), '[^[:print:]]+', '', 'g'), '"');
627 END IF;
628 IF info.fldgtremision_tercerocodigopt <> '' THEN
629 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
630 cadena:=CONCAT(cadena, '"codigo_postal":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_tercerocodigopt), '[^[:print:]]+', '', 'g'), '"');
631 END IF;
632 IF info.fldgtempmensajeria_id IS NOT NULL THEN
633 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
634 SELECT strip_tags(fldgtempmensajeria_nombre) INTO empresa_mensajeria FROM tblgtempmensajeria WHERE fldgtempmensajeria_id=info.fldgtempmensajeria_id;
635 cadena:=CONCAT(cadena, '"empresa_mensajeria":"', empresa_mensajeria, '"');
636 END IF;
637 IF info.fldgtremision_numeroguia <> '' THEN
638 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
639 cadena:=CONCAT(cadena, '"numero_guia":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_numeroguia), '[^[:print:]]+', '', 'g'), '"');
640 END IF;
641 IF info.fldgtremision_asunto <> '' THEN
642 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
643 cadena:=CONCAT(cadena, '"asunto":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_asunto), '[^[:print:]]+', '', 'g'), '"');
644 END IF;
645 IF info.fldgtclasificacion_id IS NOT NULL THEN
646 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
647 SELECT strip_tags(fldgtclasificacion_nombre) INTO clasificacion_nombre FROM tblgtclasificacion WHERE fldgtclasificacion_id=info.fldgtclasificacion_id;
648 cadena:=CONCAT(cadena, '"clasificacion":"', clasificacion_nombre, '"');
649 END IF;
650 IF info.fldgtremision_eps <> '' THEN
651 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
652 cadena:=CONCAT(cadena, '"eps":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_eps), '[^[:print:]]+', '', 'g'), '"');
653 END IF;
654 IF info.fldgtremision_arl <> '' THEN
655 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
656 cadena:=CONCAT(cadena, '"arl":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_arl), '[^[:print:]]+', '', 'g'), '"');
657 END IF;
658 IF info.fldgtremision_fondopensiones <> '' THEN
659 IF cadena <> '' THEN cadena:=CONCAT(cadena, ','); END IF;
660 cadena:=CONCAT(cadena, '"fondo_pensiones":"', REGEXP_REPLACE(strip_tags(info.fldgtremision_fondopensiones), '[^[:print:]]+', '', 'g'), '"');
661 END IF;
662
663 END LOOP;
664 IF cadena <> '' THEN cadena:=CONCAT('{', cadena,'}'); END IF;
665
666 RETURN cadena;
667END;
668$BODY$
669 LANGUAGE plpgsql VOLATILE
670 COST 100;
671ALTER FUNCTION gt_generar_json_remision(integer)
672 OWNER TO sig;
673
674 --Agosto 08 de 2017
675--Se actualiza función para calculo en metricas (Diego)
676CREATE OR REPLACE FUNCTION gt_tramite_intervalo_metrica(
677 tramite_id integer,
678 metrica_id integer)
679 RETURNS interval AS
680$BODY$
681/**
682* Función para calcular el intervalo entre dos fechas
683* según una métrica
684* @author Diego Anderson Quintero Diaz <diegoquinterodiaz@gmail.com>
685* @date Marzo 23 de 2017
686* @param Integer tramite_id
687* @param Integer metrica_id
688*/
689DECLARE
690intervalo interval;
691intervalo_excluidos interval;
692intervalo_tmp interval;
693tramite record;
694metrica record;
695fecha_inicio timestamp without time zone;
696fecha_fin timestamp without time zone;
697estados_excluidos tblgtestado%ROWTYPE;
698intervalo_suspensiones interval;
699cantidad_festivos integer;
700BEGIN
701intervalo:=NULL;
702intervalo_excluidos:=NULL;
703intervalo_suspensiones:=NULL;
704
705SELECT * INTO tramite FROM tblgttramite WHERE fldgttramite_id=tramite_id;
706SELECT * INTO metrica FROM tblgttipometrica WHERE fldgttipometrica_id=metrica_id;
707
708
709
710IF metrica.fldgtestado_id_inicial IS NULL THEN
711 fecha_inicio:=tramite.fldgttramite_fecha;
712ELSE
713 SELECT fldgttransiciontramite_st INTO fecha_inicio FROM tblgttransiciontramite
714 WHERE fldgttramite_id=tramite.fldgttramite_id AND fldgtestadof_id=metrica.fldgtestado_id_inicial
715 ORDER BY fldgttransiciontramite_st LIMIT 1;
716END IF;
717IF metrica.fldgtestado_id_final IS NULL THEN
718 fecha_fin:=tramite.fldgttramite_fecharespuesta;
719ELSE
720 SELECT fldgttransiciontramite_st INTO fecha_fin FROM tblgttransiciontramite
721 WHERE fldgttramite_id=tramite.fldgttramite_id AND fldgtestadof_id=metrica.fldgtestado_id_final
722 ORDER BY fldgttransiciontramite_st DESC LIMIT 1;
723END IF;
724
725SELECT count(*) into cantidad_festivos FROM tbldiasfestivos WHERE flddiasfestivos_fecha>=fecha_inicio::date
726AND flddiasfestivos_fecha <= fecha_fin::date;
727
728
729fecha_fin:=fecha_fin-(CONCAT(cantidad_festivos, ' day'))::interval;
730
731FOR estados_excluidos IN SELECT e.* FROM tblgtestado e
732 WHERE e.fldgtestado_id NOT IN (
733 SELECT fldgtestado_id FROM tblgttipometrica_estado WHERE fldgttipometrica_id=metrica_id
734 ) AND e.fldgttipo_id=tramite.fldgttipo_id
735LOOP
736 SELECT SUM(fldgttransiciontramite_salida-fldgttransiciontramite_st) into intervalo_tmp FROM tblgttransiciontramite
737 WHERE fldgtestadof_id=estados_excluidos.fldgtestado_id AND fldgttramite_id=tramite_id;
738 IF intervalo_excluidos IS NULL THEN
739 intervalo_excluidos:=intervalo_tmp;
740 ELSE
741 intervalo_excluidos:=intervalo_excluidos+intervalo_tmp;
742 END IF;
743END LOOP;
744
745SELECT SUM(fldgtsuspension_fechafin-fldgtsuspension_fechainicio) into intervalo_suspensiones
746FROM tblgtsuspension WHERE fldgttramite_id=tramite_id
747AND fldgtsuspension_fechafin IS NOT NULL AND fldgtsuspension_et IS NULL;
748
749IF intervalo_suspensiones IS NOT NULL THEN
750 --intervalo:=intervalo-intervalo_suspensiones;
751 fecha_inicio:=fecha_inicio+intervalo_suspensiones;
752END IF;
753
754IF intervalo_excluidos IS NOT NULL THEN
755 --intervalo:=intervalo-intervalo_excluidos;
756 fecha_inicio:=fecha_inicio+intervalo_excluidos;
757END IF;
758
759intervalo:=fecha_fin-fecha_inicio;
760
761IF intervalo < interval '0' THEN
762 intervalo:=NULL;
763END IF;
764
765RETURN intervalo;
766END;
767$BODY$
768 LANGUAGE plpgsql VOLATILE
769 COST 100;
770ALTER FUNCTION gt_tramite_intervalo_metrica(integer, integer)
771 OWNER TO sig;
772
773 --Agosto 10 de 2017
774--Ajuste en procedure para regla de indicadores (Jhonatan #3341)
775CREATE OR REPLACE FUNCTION ind_calcularregla(indicador_id integer, fecha date, fecha_corte date, anio integer)
776 RETURNS double precision AS
777$BODY$
778
779-- Función que calcula la calificación de un itemplan según los Ãtems e indicadores dependientes
780-- @author Jhonatan Chiquito - jchiquito@almeraim.com
781-- @fecha Julio 05 de 2017
782--
783-- @param integer indicador_id: ID del indicador del que se desea obtener la calificación
784-- @param date fecha: Fecha para la que se debe obtener la calificación para el itemplan (opcional)
785-- @param date fecha_corte: Fecha corte para obtener el valor y la meta acumulada (opcional)
786-- @param date anio: Cuando el plan estrategico es por años (opcional)
787-- @return float valor_regla: Calificación del indicador
788
789DECLARE
790 tipo_meta CHAR(1); --Variable para determinar el tipo de meta: Unica, estacional,...
791 meta FLOAT; --Variable para almacenar el valor de la meta
792 nro_reglas INTEGER; --Variable para determinar si el indicador de los cursores tiene reglas definidas
793 fila_regla RECORD; --Variable para la fila de la regla de indicadores
794 consulta character varying;
795 fechamedicion date;
796 fecha_acumula date;
797
798 valor_regla FLOAT;
799 valoracumulado FLOAT;
800 valoracumuladometa FLOAT;
801 valormedicion FLOAT;
802 metaindicador FLOAT;
803 metamedicion FLOAT;
804 metaestacional FLOAT;
805 metaeperiodo FLOAT;
806
807BEGIN
808
809 -- Validacion de las reglas
810 SELECT COUNT(*) INTO nro_reglas FROM tblindicadorregla WHERE fldindicador_id = indicador_id;
811
812 IF nro_reglas > 0
813 THEN
814 fechamedicion := fecha;
815 IF fecha IS NULL THEN
816
817 IF anio IS NOT NULL THEN
818 -- Se establece la fechamedicion con la última medicion realizada en el año indicado(anio)
819 SELECT m.fldmedicion_fechainicioperiodo INTO fechamedicion
820 FROM tblmedicion m
821 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
822 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
823 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL AND EXTRACT(YEAR FROM m.fldmedicion_fechafinperiodo) = anio
824 ORDER BY fldmedicion_fechafinperiodo DESC
825 LIMIT 1;
826
827 -- Si no se encuentra una medicion se establece la fecha al 31 de Diciembre del año indicado
828 IF fechamedicion IS NULL THEN
829 fechamedicion := anio ||'-12-31';
830 END IF;
831
832 ELSE
833 -- Se establece la fechamedicion con la última medicion realizada
834 SELECT m.fldmedicion_fechainicioperiodo INTO fechamedicion
835 FROM tblmedicion m
836 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
837 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
838 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL
839 ORDER BY fldmedicion_fechafinperiodo DESC
840 LIMIT 1;
841
842 END IF;
843 END IF;
844
845
846 fecha_acumula := fecha_corte;
847 IF fecha_corte IS NULL THEN
848 fecha_acumula := EXTRACT(year from fechamedicion)||'-12-31';
849 END IF;
850
851 RAISE NOTICE 'Fecha: % || Fecha acumulada: %', fechamedicion, fecha_acumula;
852
853 -- Se obtiene la medición, medición acumulada, meta y la meta acumulada
854 SELECT i.fldindicador_metaperiodica AS tipo_meta, i.fldindicador_meta,
855 ind_obteneracumuladofecha(i.fldindicador_id, TO_CHAR(fecha_acumula, 'YYYY-MM-DD'), 'F') AS valoracumulado,
856 ind_obteneracumuladometafecha(i.fldindicador_id, TO_CHAR(fecha_acumula, 'YYYY-MM-DD'), 'F') AS valoracumuladometa,
857 ind_obtenermedicionfecha(i.fldindicador_id, 'valor', fechamedicion, 'F') AS valormedicion,
858 ind_obtenermedicionfecha(i.fldindicador_id, 'meta', fechamedicion, 'F') AS metamedicion,
859 --Meta estacional
860 ( SELECT fldindicadormeta_valor FROM tblindicadormeta
861 WHERE fldindicador_id=i.fldindicador_id AND fechamedicion BETWEEN fldindicadormeta_fi AND fldindicadormeta_ff
862 ) AS metaestacional,
863 --Meta del periodo (cuatrenio por ejemplo)
864 ( SELECT ind_obteneracumuladometae(fldindicadormeta_id) FROM tblindicadormeta
865 WHERE fldindicador_id=i.fldindicador_id AND fldindicadormeta_fi=(SELECT max(fldindicadormeta_fi) FROM tblindicadormeta WHERE fldindicador_id=i.fldindicador_id)
866 ) AS metaeperiodo
867 INTO tipo_meta, metaindicador, valoracumulado, valoracumuladometa, valormedicion, metamedicion, metaestacional, metaeperiodo
868 FROM tblindicador i
869 WHERE i.fldindicador_id = indicador_id;
870
871 valor_regla := null;
872
873 FOR fila_regla IN SELECT *FROM tblindicadorregla WHERE fldindicador_id = indicador_id ORDER BY fldindicadorregla_orden
874 LOOP
875 valor_regla := null;
876 IF fila_regla.fldindicadorregla_variable = 'A' THEN
877 valormedicion = valoracumulado;
878 END IF;
879
880 IF fila_regla.fldindicadorregla_dato = 'META' THEN
881 meta := null;
882 --Se determina qué meta se usa
883 IF tipo_meta = 'U' THEN
884 meta := metaindicador;
885 --El indicador tiene metas estacionales
886 ELSIF tipo_meta = 'E' THEN
887 meta := metaestacional;
888 ELSIF tipo_meta = 'P' THEN --El indicador tiene seleccionado 'Sin meta'
889 meta := metaeperiodo; --Se utiliza la meta del periodo (ej: meta del cuatrenio)
890 END IF;
891
892 ELSIF fila_regla.fldindicadorregla_dato = 'METAACUMULADA' THEN
893 meta = valoracumuladometa;
894 ELSE
895 meta = fila_regla.fldindicadorregla_dato;
896 END IF;
897
898 IF valormedicion IS NOT NULL AND meta IS NOT NULL THEN
899 consulta := 'SELECT CASE WHEN '|| valormedicion ||' '|| fila_regla.fldindicadorregla_operador ||' '|| meta ||' THEN '|| fila_regla.fldindicadorregla_resultado ||' ELSE NULL END';
900
901 RAISE NOTICE 'Id: % Operador: "%" Consulta: %', fila_regla.fldindicadorregla_id, fila_regla.fldindicadorregla_operador, consulta;
902 EXECUTE consulta INTO valor_regla;
903
904 IF valor_regla IS NOT NULL THEN
905 EXIT; -- exit loop; Retorna el valor de la primera regla que cumple
906 END IF;
907 END IF;
908
909 END LOOP;
910
911 IF valor_regla IS NOT NULL THEN
912 return ROUND(CAST(valor_regla as numeric), 2);
913 END IF;
914
915 END IF;
916
917 RETURN valor_regla; --retornar la calificacion del indicador
918END;
919
920$BODY$
921 LANGUAGE plpgsql VOLATILE
922 COST 100;
923ALTER FUNCTION ind_calcularregla(integer, date, date, integer)
924 OWNER TO sig;
925
926
927--Agosto 11 de 2017 ACTUALIZACION SGI Build 0f5d5c87e418c44e2ef730e8860a39ab021f0139
928DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
929
930INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
931VALUES ('_FECHA_ULT_ACTUALIZACION','2017-08-20 (Corcholatas) 0f5d5c87e418c44e2ef730e8860a39ab021f0139','T');
932
933UPDATE tblparametro SET fldparametro_valor='0f5d5c87e418c44e2ef730e8860a39ab021f0139' WHERE fldparametro_nombre='_NUMERO_BUILD';
934
935--Agosto 12 de 2017
936--Depurar constante - Campos adicionales sobre cargos (#3600) (Yesid)
937DELETE FROM tblparametro WHERE fldparametro_nombre='_CARGO_CAMPOSADICIONALES';
938
939--Constante para demonio (Diego#2720)
940INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
941VALUES ('_DAEMON_TRAMITES_USUARIO_ADMIN', 'false', 'T');
942
943--Agosto 14 de 2017
944--Insert para nuevo atributo en tipos trámites (Diego#2720)
945INSERT INTO tblgttipoconfig (fldgttipo_id, fldgttipoconfig_nombre, fldgttipoconfig_valor)
946SELECT fldgttipo_id, 'INCLUIR_REPORTE_DEMONIO_ATRASADOS', 'F' FROM tblgttipo;
947
948--Migración puntos atención (Néstor)(Issue#3604)
949--Tipos de punto de atención
950INSERT INTO tblatenciontipo (fldatenciontipo_orden, fldatenciontipo_nombre, fldatenciontipo_icono)
951SELECT 1, fldparametro_valor, 'shield.png' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_BTNACCION_PREVENTIVA';
952
953INSERT INTO tblatenciontipo (fldatenciontipo_orden, fldatenciontipo_nombre, fldatenciontipo_icono)
954SELECT 2, fldparametro_valor, 'stop.png' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_BTNACCION_CORRECTIVA';
955
956INSERT INTO tblatenciontipo (fldatenciontipo_orden, fldatenciontipo_nombre, fldatenciontipo_icono)
957SELECT 3, fldparametro_valor, 'arrow_turn_up.png' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_BTNACCION_MEJORA';
958
959INSERT INTO tblatenciontipo (fldatenciontipo_orden, fldatenciontipo_nombre, fldatenciontipo_icono)
960SELECT 4, fldparametro_valor, 'cross.png' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_BTN_CORRECCION';
961
962--Creación de campos adicionales
963INSERT INTO tblcampoadicional (fldcampoadicional_nombre, fldcampoadicional_codigo, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_clasif, fldcampoadicional_tipodato)
964SELECT fldparametro_valor, 1, 'puntoAtencion', 1, '', 'text' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA';
965
966INSERT INTO tblcampoadicional (fldcampoadicional_nombre, fldcampoadicional_codigo, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_clasif, fldcampoadicional_tipodato)
967SELECT fldparametro_valor, 2, 'puntoAtencion', 1, '', 'text' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION';
968
969INSERT INTO tblcampoadicional (fldcampoadicional_nombre, fldcampoadicional_codigo, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_clasif, fldcampoadicional_tipodato)
970SELECT fldparametro_valor, 2, 'puntoAtencion', 1, '', 'text' FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_JUSTIFICACION';
971
972--Poblar fldatenciontipo_id
973UPDATE tbdsigspaatencion SET fldatenciontipo_id = (SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'shield.png') WHERE fldatencion_tipo = 'P';
974UPDATE tbdsigspaatencion SET fldatenciontipo_id = (SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'stop.png') WHERE fldatencion_tipo = 'C';
975UPDATE tbdsigspaatencion SET fldatenciontipo_id = (SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'arrow_turn_up.png') WHERE fldatencion_tipo = 'M';
976UPDATE tbdsigspaatencion SET fldatenciontipo_id = (SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'cross.png') WHERE fldatencion_tipo = 'R';
977
978--Poblar tblcampovlrtext_atn
979INSERT INTO tblcampovlrtext_atn (fldcampoadicional_id, fldatencion_id, fldcampovlrtext_atn_valor)
980SELECT (
981 SELECT fldcampoadicional_id
982 FROM tblcampoadicional
983 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA')
984 AND fldcampoadicional_padre = 'puntoAtencion'
985), fldatencion_id, fldatencion_causa FROM tbdsigspaatencion
986WHERE (SELECT (
987 SELECT fldcampoadicional_id
988 FROM tblcampoadicional
989 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA')
990 AND fldcampoadicional_padre = 'puntoAtencion'
991) IS NOT NULL);
992
993INSERT INTO tblcampovlrtext_atn (fldcampoadicional_id, fldatencion_id, fldcampovlrtext_atn_valor)
994SELECT (
995 SELECT fldcampoadicional_id
996 FROM tblcampoadicional
997 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION')
998 AND fldcampoadicional_padre = 'puntoAtencion'
999), fldatencion_id, fldatencion_correccion FROM tbdsigspaatencion
1000WHERE (SELECT (
1001 SELECT fldcampoadicional_id
1002 FROM tblcampoadicional
1003 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION')
1004 AND fldcampoadicional_padre = 'puntoAtencion'
1005) IS NOT NULL);
1006
1007INSERT INTO tblcampovlrtext_atn (fldcampoadicional_id, fldatencion_id, fldcampovlrtext_atn_valor)
1008SELECT (
1009 SELECT fldcampoadicional_id
1010 FROM tblcampoadicional
1011 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_JUSTIFICACION')
1012 AND fldcampoadicional_padre = 'puntoAtencion'
1013), fldatencion_id, fldatencion_causa FROM tbdsigspaatencion
1014WHERE (SELECT (
1015 SELECT fldcampoadicional_id
1016 FROM tblcampoadicional
1017 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_JUSTIFICACION')
1018 AND fldcampoadicional_padre = 'puntoAtencion'
1019) IS NOT NULL);
1020
1021--Insert acción preventiva
1022INSERT INTO tblatenciontipo_campo (fldatenciontipo_id, fldcampoadicional_id)
1023SELECT (
1024 SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'shield.png'
1025), (
1026 SELECT fldcampoadicional_id FROM tblcampoadicional
1027 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA')
1028 AND fldcampoadicional_padre = 'puntoAtencion'
1029)
1030WHERE (
1031 SELECT fldcampoadicional_id FROM tblcampoadicional
1032 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA')
1033 AND fldcampoadicional_padre = 'puntoAtencion'
1034) IS NOT NULL;
1035
1036--Insert acción correctiva
1037INSERT INTO tblatenciontipo_campo (fldatenciontipo_id, fldcampoadicional_id)
1038SELECT (
1039 SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'stop.png'
1040), (
1041 SELECT fldcampoadicional_id FROM tblcampoadicional
1042 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA')
1043 AND fldcampoadicional_padre = 'puntoAtencion'
1044)
1045WHERE (
1046 SELECT fldcampoadicional_id FROM tblcampoadicional
1047 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CAUSA')
1048 AND fldcampoadicional_padre = 'puntoAtencion'
1049) IS NOT NULL;
1050
1051INSERT INTO tblatenciontipo_campo (fldatenciontipo_id, fldcampoadicional_id)
1052SELECT (
1053 SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'stop.png'
1054), (
1055 SELECT fldcampoadicional_id FROM tblcampoadicional
1056 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION')
1057 AND fldcampoadicional_padre = 'puntoAtencion'
1058)
1059WHERE (
1060 SELECT fldcampoadicional_id FROM tblcampoadicional
1061 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION')
1062 AND fldcampoadicional_padre = 'puntoAtencion'
1063) IS NOT NULL;
1064
1065--Insert acción de mejora
1066INSERT INTO tblatenciontipo_campo (fldatenciontipo_id, fldcampoadicional_id)
1067SELECT (
1068 SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'arrow_turn_up.png'
1069), (
1070 SELECT fldcampoadicional_id FROM tblcampoadicional
1071 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_JUSTIFICACION')
1072 AND fldcampoadicional_padre = 'puntoAtencion'
1073)
1074WHERE (
1075 SELECT fldcampoadicional_id FROM tblcampoadicional
1076 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_JUSTIFICACION')
1077 AND fldcampoadicional_padre = 'puntoAtencion'
1078) IS NOT NULL;
1079
1080--Insert corrección
1081INSERT INTO tblatenciontipo_campo (fldatenciontipo_id, fldcampoadicional_id)
1082SELECT (
1083 SELECT fldatenciontipo_id FROM tblatenciontipo WHERE fldatenciontipo_icono = 'cross.png'
1084), (
1085 SELECT fldcampoadicional_id FROM tblcampoadicional
1086 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION')
1087 AND fldcampoadicional_padre = 'puntoAtencion'
1088)
1089WHERE (
1090 SELECT fldcampoadicional_id FROM tblcampoadicional
1091 WHERE fldcampoadicional_nombre = (SELECT fldparametro_valor FROM tblparametro WHERE fldparametro_nombre = '_PMETIQUETA_CORRECCION')
1092 AND fldcampoadicional_padre = 'puntoAtencion'
1093) IS NOT NULL;
1094
1095--Eliminar constantes
1096DELETE FROM tblparametro WHERE fldparametro_nombre IN (
1097 '_PMETIQUETA_BTNACCION_PREVENTIVA',
1098 '_PMETIQUETA_BTNACCION_CORRECTIVA',
1099 '_PMETIQUETA_BTNACCION_MEJORA',
1100 '_PMETIQUETA_BTN_CORRECCION',
1101 '_PM_ACCION_PREVENTIVA',
1102 '_PM_ACCION_CORRECTIVA',
1103 '_PM_ACCION_MEJORA',
1104 '_PM_CORRECCION',
1105 '_MOD_PLANES_TIPOSPUNTOSATENCION'
1106);
1107
1108--Nueva tabla para roles de proceso (Jhonatan #3588)
1109CREATE SEQUENCE procesorol_id_seq
1110 INCREMENT 1
1111 START 1;
1112
1113CREATE TABLE tblprocesorol(
1114 fldprocesorol_id INTEGER DEFAULT nextval('procesorol_id_seq') NOT NULL,
1115 fldtipodocumento_id INTEGER NOT NULL,
1116 fldprocesorol_orden INTEGER NOT NULL,
1117 fldprocesorol_nombre character varying,
1118 fldprocesorol_descripcion text,
1119 CONSTRAINT procesorol_id_pk PRIMARY KEY(fldprocesorol_id),
1120 CONSTRAINT procesorol_tipodocumento_fk FOREIGN KEY(fldtipodocumento_id) REFERENCES tbltipodocumento(fldtipodocumento_id)
1121);
1122COMMENT ON TABLE tblprocesorol IS 'Tabla para definir los roles de procesos';
1123COMMENT ON COLUMN tblprocesorol.fldprocesorol_id IS 'Identificador unico de los registros';
1124COMMENT ON COLUMN tblprocesorol.fldtipodocumento_id IS 'Id del tipo de documento asociado';
1125COMMENT ON COLUMN tblprocesorol.fldprocesorol_orden IS 'Orden de los roles, usado para ordenar';
1126COMMENT ON COLUMN tblprocesorol.fldprocesorol_nombre IS 'Nombre del rol';
1127COMMENT ON COLUMN tblprocesorol.fldprocesorol_descripcion IS 'Descripción del rol';
1128
1129ALTER TABLE tblproceso_cargo
1130 ADD COLUMN fldprocesorol_id INTEGER,
1131 ADD CONSTRAINT proceso_cargo_rol_fk FOREIGN KEY(fldprocesorol_id) REFERENCES tblprocesorol(fldprocesorol_id);
1132COMMENT ON COLUMN tblproceso_cargo.fldprocesorol_id IS 'Id del rol proceso al cual se asocia el cargo';
1133
1134--Nueva parámetro de sistema (Jhonatan #3592)
1135INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
1136VALUES ('_CARGOS_NVLS_COMPETENCIAS', 'TRUE', 'T');
1137
1138--Indices (Diego#3618)
1139CREATE INDEX procedimientogrupocargo_pr_idx ON tblprocedimiento_grupocargo (fldprocedimiento_id);
1140CREATE INDEX archivoconfig_archivo_idx ON tblarchivoconfig (fldarchivo_id);
1141CREATE INDEX sigsparesponsableact_usr_idx ON tbdsigsparesponsableactividad (fldusuario_id);
1142CREATE INDEX gtcampoconfig_tipo_codigo_idx ON tblgtcampoconfig (fldgttipo_id, fldgtcampoconfig_codigo);
1143
1144--Agosto 15 de 2017
1145--Nuevo campo en tipo de punto de atención (Néstor)(Issue#3629)
1146ALTER TABLE tblatenciontipo ADD fldatenciontipo_reqacciones CHAR(1) DEFAULT 'T' NOT NULL;
1147COMMENT ON COLUMN tblatenciontipo.fldatenciontipo_reqacciones IS 'Determina si el tipo de punto de atención requiere acciones';
1148UPDATE tblatenciontipo SET fldatenciontipo_reqacciones = 'F' WHERE fldatenciontipo_icono = 'cross.png';
1149
1150--Creación de index y depuración de tbdsigspaatencion (Néstor)(Issue#3629)
1151CREATE INDEX sigspaatencion_tipoatn_idx ON tbdsigspaatencion(fldatenciontipo_id);
1152ALTER TABLE tbdsigspaatencion DROP COLUMN fldatencion_tipo;
1153ALTER TABLE tbdsigspaatencion DROP COLUMN fldatencion_correccion;
1154ALTER TABLE tbdsigspaatencion DROP COLUMN fldatencion_causa;
1155ALTER TABLE tbdsigspaatencion DROP COLUMN fldatencion_oportunidadmejora;
1156
1157--Agosto 16 de 2017
1158--Creación de constante, tablas y campos (Néstor)(Issue#3635)
1159INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
1160VALUES ('_RIEVENTOS_NIVELRIESGO_CALCULADO', 'false', 'T');
1161
1162ALTER TABLE tblsistemariesgo ADD fldsistemariesgo_calcularnr CHAR(1) DEFAULT 'F' NOT NULL;
1163COMMENT ON COLUMN tblsistemariesgo.fldsistemariesgo_calcularnr IS 'Determina si se debe calcular el nivel de riesgo';
1164
1165CREATE SEQUENCE riesgocriterio_id_seq
1166START WITH 1
1167INCREMENT BY 1;
1168
1169CREATE TABLE tblriesgocriterio(
1170 fldriesgocriterio_id INTEGER NOT NULL DEFAULT nextval('riesgocriterio_id_seq'),
1171 fldsistemariesgo_id INTEGER NOT NULL,
1172 fldriesgocriterio_orden INTEGER NOT NULL,
1173 fldriesgocriterio_nombre CHARACTER VARYING,
1174 fldriesgocriterio_descripcion TEXT,
1175 CONSTRAINT riesgocriterio_id_pk PRIMARY KEY (fldriesgocriterio_id),
1176 CONSTRAINT riesgocriterio_id_fk1 FOREIGN KEY (fldsistemariesgo_id) REFERENCES tblsistemariesgo (fldsistemariesgo_id)
1177);
1178COMMENT ON TABLE tblriesgocriterio IS 'Tabla usada para administrar criterios de riesgo';
1179COMMENT ON COLUMN tblriesgocriterio.fldriesgocriterio_id IS 'Identificador del criterio';
1180COMMENT ON COLUMN tblriesgocriterio.fldsistemariesgo_id IS 'Identificador del sistema de riesgo';
1181COMMENT ON COLUMN tblriesgocriterio.fldriesgocriterio_orden IS 'Orden del criterio';
1182COMMENT ON COLUMN tblriesgocriterio.fldriesgocriterio_nombre IS 'Nombre del criterio';
1183COMMENT ON COLUMN tblriesgocriterio.fldriesgocriterio_descripcion IS 'Descripción del criterio';
1184
1185CREATE SEQUENCE riesgocriterionivel_id_seq
1186START WITH 1
1187INCREMENT BY 1;
1188
1189CREATE TABLE riesgocriterionivel(
1190 fldriesgocriterionivel_id INTEGER NOT NULL DEFAULT nextval('riesgocriterionivel_id_seq'),
1191 fldriesgocriterio_id INTEGER NOT NULL,
1192 fldriesgocriterionivel_codigo INTEGER NOT NULL,
1193 fldriesgocriterionivel_nombre CHARACTER VARYING,
1194 fldriesgocriterionivel_desc TEXT,
1195 fldriesgocriterionivel_peso FLOAT,
1196 CONSTRAINT riesgocriterionivel_id_pk PRIMARY KEY (fldriesgocriterionivel_id),
1197 CONSTRAINT riesgocriterionivel_id_fk1 FOREIGN KEY (fldriesgocriterio_id) REFERENCES tblriesgocriterio (fldriesgocriterio_id)
1198);
1199COMMENT ON TABLE riesgocriterionivel IS 'Tabla usada para administrar niveles para criterios de riesgo';
1200COMMENT ON COLUMN riesgocriterionivel.fldriesgocriterionivel_id IS 'Identificador del nivel';
1201COMMENT ON COLUMN riesgocriterionivel.fldriesgocriterio_id IS 'Identificador del criterio de riesgo';
1202COMMENT ON COLUMN riesgocriterionivel.fldriesgocriterionivel_codigo IS 'Código del nivel';
1203COMMENT ON COLUMN riesgocriterionivel.fldriesgocriterionivel_nombre IS 'Nombre del nivel';
1204COMMENT ON COLUMN riesgocriterionivel.fldriesgocriterionivel_desc IS 'Descripción del nivel';
1205COMMENT ON COLUMN riesgocriterionivel.fldriesgocriterionivel_peso IS 'Peso del nivel';
1206
1207ALTER TABLE tblnivelriesgo ADD fldnivelriesgo_desde FLOAT,
1208ADD fldnivelriesgo_hasta FLOAT;
1209COMMENT ON COLUMN tblnivelriesgo.fldnivelriesgo_desde IS 'valor limite mÃnimo cuando el nivel de riesgo es calculado';
1210COMMENT ON COLUMN tblnivelriesgo.fldnivelriesgo_hasta IS 'valor limite máximo cuando el nivel de riesgo es calculado';
1211
1212--Diego
1213ALTER TABLE tblcorreo ADD fldcorreo_ipvisto character varying;
1214ALTER TABLE tblcorreo ADD fldcorreo_agentvisto character varying;
1215COMMENT ON COLUMN tblcorreo.fldcorreo_ipvisto IS 'IP del usuario que visualiza el correo';
1216COMMENT ON COLUMN tblcorreo.fldcorreo_agentvisto IS 'Info del navegador del usuario que visualiza el correo';
1217
1218--Agosto 17 de 2017
1219--Se crea tabla mal nombrada (Néstor)(Issue#3646)
1220DROP TABLE riesgocriterionivel;
1221CREATE TABLE tblriesgocriterionivel(
1222 fldriesgocriterionivel_id INTEGER NOT NULL DEFAULT nextval('riesgocriterionivel_id_seq'),
1223 fldriesgocriterio_id INTEGER NOT NULL,
1224 fldriesgocriterionivel_codigo INTEGER NOT NULL,
1225 fldriesgocriterionivel_nombre CHARACTER VARYING,
1226 fldriesgocriterionivel_desc TEXT,
1227 fldriesgocriterionivel_peso FLOAT,
1228 CONSTRAINT riesgocriterionivel_id_pk PRIMARY KEY (fldriesgocriterionivel_id),
1229 CONSTRAINT riesgocriterionivel_id_fk1 FOREIGN KEY (fldriesgocriterio_id) REFERENCES tblriesgocriterio (fldriesgocriterio_id)
1230);
1231COMMENT ON TABLE tblriesgocriterionivel IS 'Tabla usada para administrar niveles para criterios de riesgo';
1232COMMENT ON COLUMN tblriesgocriterionivel.fldriesgocriterionivel_id IS 'Identificador del nivel';
1233COMMENT ON COLUMN tblriesgocriterionivel.fldriesgocriterio_id IS 'Identificador del criterio de riesgo';
1234COMMENT ON COLUMN tblriesgocriterionivel.fldriesgocriterionivel_codigo IS 'Código del nivel';
1235COMMENT ON COLUMN tblriesgocriterionivel.fldriesgocriterionivel_nombre IS 'Nombre del nivel';
1236COMMENT ON COLUMN tblriesgocriterionivel.fldriesgocriterionivel_desc IS 'Descripción del nivel';
1237COMMENT ON COLUMN tblriesgocriterionivel.fldriesgocriterionivel_peso IS 'Peso del nivel';
1238
1239--Tabla para almacenar valoracion de riesgos asociada a criterios (Néstor)(Issue#3646)
1240CREATE TABLE tblriesgo_criterio(
1241 fldriesgo_id INTEGER NOT NULL,
1242 fldriesgocriterio_id INTEGER NOT NULL,
1243 fldriesgocriterionivel_id INTEGER,
1244 fldriesgo_criterio_matriz CHAR(1) NOT NULL,
1245 CONSTRAINT riesgo_criterio_matriz_pk PRIMARY KEY (fldriesgo_id, fldriesgocriterio_id, fldriesgocriterionivel_id, fldriesgo_criterio_matriz),
1246 CONSTRAINT riesgo_criterio_matriz_fk1 FOREIGN KEY (fldriesgo_id) REFERENCES tblriesgo (fldriesgo_id),
1247 CONSTRAINT riesgo_criterio_matriz_fk2 FOREIGN KEY (fldriesgocriterio_id) REFERENCES tblriesgocriterio (fldriesgocriterio_id),
1248 CONSTRAINT riesgo_criterio_matriz_fk3 FOREIGN KEY (fldriesgocriterionivel_id) REFERENCES tblriesgocriterionivel (fldriesgocriterionivel_id)
1249);
1250COMMENT ON TABLE tblriesgo_criterio IS 'Tabla usada para almacenar la valoración de riesgos asociada a criterios';
1251COMMENT ON COLUMN tblriesgo_criterio.fldriesgo_id IS 'Identificador del riesgo';
1252COMMENT ON COLUMN tblriesgo_criterio.fldriesgocriterionivel_id IS 'Identificador del criterio';
1253COMMENT ON COLUMN tblriesgo_criterio.fldriesgocriterionivel_id IS 'Identificador del nivel';
1254COMMENT ON COLUMN tblriesgo_criterio.fldriesgo_criterio_matriz IS 'Matriz a la cual se asocia la valoración';
1255
1256
1257--Nuevo campo en seguimientos formales de sistemas PIDD (Jhonatan #3631)
1258ALTER TABLE tblpiddsistemaseguim ADD COLUMN fldpiddsistemaseguim_aplicara CHARACTER(1) DEFAULT('A');
1259COMMENT ON COLUMN tblpiddsistemaseguim.fldpiddsistemaseguim_aplicara IS 'Campo que permite definir quienes podrán registrar seguimientos formales. (T: tutorados, J: Jefes, A: Ambos)';
1260
1261--Agosto 18 de 2017
1262--Nuevos parámetros de configuración en tipos de evento (Jhonatan #3647)
1263INSERT INTO tbltipoeventoconfig (fldeventotipo_id, fldtipoeventoconfig_nombre, fldtipoeventoconfig_valor)
1264SELECT fldeventotipo_id, 'OCULTAR_FECHA_REPORTE', 'false' FROM tbleventotipo;
1265
1266INSERT INTO tbltipoeventoconfig (fldeventotipo_id, fldtipoeventoconfig_nombre, fldtipoeventoconfig_valor)
1267SELECT fldeventotipo_id, 'OCULTAR_FECHA_EVENTO', 'false' FROM tbleventotipo;
1268
1269--Migración multiples plantillas (Diego#3652)
1270CREATE TABLE tblgttransicion_gtplantilla(
1271 fldgttransicion_id integer NOT NULL,
1272 fldgtplantilla_id integer NOT NULL,
1273 CONSTRAINT gttransicion_gtplantilla_pk PRIMARY KEY (fldgttransicion_id, fldgtplantilla_id),
1274 CONSTRAINT gttransicion_gtplantilla_fk1 FOREIGN KEY (fldgttransicion_id) REFERENCES tblgttransicion (fldgttransicion_id),
1275 CONSTRAINT gttransicion_gtplantilla_fk2 FOREIGN KEY (fldgtplantilla_id) REFERENCES tblgtplantilla (fldgtplantilla_id)
1276);
1277ALTER TABLE tblgttransicion_gtplantilla OWNER TO sig;
1278COMMENT ON TABLE tblgttransicion_gtplantilla IS 'Tabla para relacionar transiciones detalladas y plantillas';
1279COMMENT ON COLUMN tblgttransicion_gtplantilla.fldgttransicion_id IS 'Id de la transición';
1280COMMENT ON COLUMN tblgttransicion_gtplantilla.fldgtplantilla_id IS 'Id de la plantilla';
1281
1282INSERT INTO tblgttransicion_gtplantilla (fldgttransicion_id, fldgtplantilla_id)
1283SELECT fldgttransicion_id, fldgtplantilla_id FROM tblgttransicion
1284WHERE fldgtplantilla_id IS NOT NULL;
1285
1286ALTER TABLE tblgttransicion DROP COLUMN fldgtplantilla_id;
1287
1288--Agosto 19 de 2017
1289--Insert's para CSS personalizados (Diego#3666)
1290INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
1291VALUES ('_CSS_PERSONALIZADO', 'false', 'T');
1292INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
1293VALUES ('_CONTENIDO_CSS_PERSONALIZADO', '', 'F');
1294
1295--Agosto 18 de 2017
1296--Se actualiza función (Diego)
1297CREATE OR REPLACE FUNCTION gttipo_eliminar()
1298 RETURNS trigger AS
1299$BODY$
1300DECLARE
1301 cantidad_tramites integer;
1302BEGIN
1303 SELECT count(*) into cantidad_tramites FROM tblgttramite WHERE fldgttipo_id=OLD.fldgttipo_id;
1304 --Si no existe trámites del tipo
1305 IF (cantidad_tramites = 0) THEN
1306 --Se elimina de la tabla de parametricas
1307 DELETE FROM tblgttipometrica_estado WHERE fldgttipometrica_id IN (
1308 SELECT fldgttipometrica_id FROM tblgttipometrica WHERE fldgttipo_id=OLD.fldgttipo_id
1309 )
1310 OR fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id);
1311
1312 DELETE FROM tblgttipometrica WHERE fldgttipo_id=OLD.fldgttipo_id;
1313
1314 --Se actualiza a NULL la relación entre transiciones y campos
1315 UPDATE tblgttransicion SET fldgtcampo_id=NULL WHERE fldgttipo_id=OLD.fldgttipo_id;
1316
1317 --Se elimina la relación con campos para notificar transiciones
1318 DELETE FROM tblgttransicion_campo WHERE fldgttransicion_id IN (
1319 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1320 );
1321
1322 --Se elimina la relación entre transiciones y cargos
1323 DELETE FROM tblgttransicion_cargo WHERE fldgttransicion_id IN (
1324 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1325 );
1326
1327 --Se elimina la relación entre transiciones e informes
1328 DELETE FROM tblgttransicion_informe WHERE fldgttransicion_id IN (
1329 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1330 );
1331
1332 --Se elimina la relacion entre transiciones y contratos
1333 DELETE FROM tblgttransicion_contrato WHERE fldgttransicion_id IN (
1334 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1335 );
1336
1337 UPDATE tblcontrato SET fldgttransicion_id=NULL WHERE fldgttransicion_id IN (
1338 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1339 );
1340
1341 --Se elimina relación por portal de publicación
1342 DELETE FROM tblportalpublicacion_gtestado WHERE fldgtestado_id IN (
1343 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1344 );
1345
1346 DELETE FROM tblportalpublicacion_gtcampoit WHERE fldgtcampoitem_id IN(
1347 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN(
1348 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (
1349 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1350 )
1351 OR
1352 fldgttransicion_id IN (
1353 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1354 )
1355
1356 )
1357 );
1358
1359 DELETE FROM tblportalpublicacion_campo WHERE fldportalpublicacion_id IN (
1360 SELECT fldportalpublicacion_id FROM tblportalpublicacion WHERE fldgttipo_id=OLD.fldgttipo_id
1361 );
1362
1363 DELETE FROM tblportalpublicacion_gtcampo WHERE fldgtcampo_id IN (
1364 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (
1365 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1366 )
1367 OR
1368 fldgttransicion_id IN (
1369 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1370 )
1371 );
1372
1373 DELETE FROM tblportalpublicacion_gtinforme WHERE fldportalpublicacion_id IN (
1374 SELECT fldportalpublicacion_id FROM tblportalpublicacion WHERE fldgttipo_id=OLD.fldgttipo_id
1375 );
1376
1377 DELETE FROM tblportalpublicacion WHERE fldgttipo_id=OLD.fldgttipo_id;
1378
1379 --Se eliminan los agrupadores
1380 DELETE FROM tblgtcampoagrupador_campoitem WHERE fldgtcampoagrupador_id IN (
1381 SELECT fldgtcampoagrupador_id FROM tblgtcampoagrupador WHERE
1382 fldgtestado_id IN (
1383 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1384 )
1385 OR
1386 fldgttransicion_id IN(
1387 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1388 )
1389 );
1390
1391 --Eliminamos los estado en los que era editable el campo
1392 DELETE FROM tblgtcampo_gtestado WHERE fldgtcampo_id IN (
1393 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1394 );
1395
1396 --Antes de eliminar los valores procedemos a eliminar las alertas
1397 DELETE FROM tblgtalerta_campo WHERE fldgtcampo_id IN (
1398 SELECT c.fldgtcampo_id FROM tblgtcampo c
1399 LEFT OUTER JOIN tblgtestado e ON (c.fldgtestado_id=e.fldgtestado_id AND e.fldgttipo_id=OLD.fldgttipo_id)
1400 LEFT OUTER JOIN tblgttransicion t ON (c.fldgttransicion_id=t.fldgttransicion_id AND t.fldgttipo_id=OLD.fldgttipo_id)
1401 );
1402
1403 DELETE FROM tblgtalerta_estado WHERE fldgtestado_id IN (
1404 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1405 );
1406
1407 DELETE FROM tblgtalerta_tipo WHERE fldgttipo_id=OLD.fldgttipo_id;
1408
1409 --Eliminamos los valores de los items
1410 DELETE FROM tblgtcampovalor_item WHERE fldgtcampoitem_id IN (
1411 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1412 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1413 )
1414 )
1415 OR
1416 fldgtcampoitem_id IN (
1417 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1418 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1419 )
1420 );
1421
1422 DELETE FROM tblgtcampovalor_item WHERE fldgtcampo_id IN (SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1423 )
1424 OR
1425 fldgtcampo_id IN (SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1426 );
1427
1428 --Eliminamos los valores de items tipo árbol
1429 DELETE FROM tblgtcampovalor_item_arbol WHERE fldgtcampo_id IN(
1430 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1431 );
1432
1433 --Ahora procedemos a eliminar los items tipo árbol
1434 DELETE FROM tblgtcampoitemarbol WHERE fldgtcampo_id IN (
1435 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1436 );
1437
1438 --Eliminamos los de tipo string
1439 DELETE FROM tblgtcampovalor_string WHERE
1440 (fldgtcampo_id IN (
1441 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1442 )
1443 OR
1444 fldgtcampo_id IN (
1445 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1446 )
1447 );
1448
1449 --Eliminamos los de tipo text
1450 DELETE FROM tblgtcampovalor_text WHERE
1451 (fldgtcampo_id IN (
1452 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1453 )
1454 OR
1455 fldgtcampo_id IN (
1456 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1457 )
1458 );
1459
1460 --Eliminamos los de tipo date
1461 DELETE FROM tblgtcampovalor_date WHERE
1462 fldgtcampo_id IN (
1463 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1464 )
1465 OR
1466 fldgtcampo_id IN (
1467 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1468 );
1469
1470 --Eliminamos los de tipo float
1471 DELETE FROM tblgtcampovalor_float WHERE
1472 fldgtcampo_id IN (
1473 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1474 )
1475 OR
1476 fldgtcampo_id IN (
1477 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1478 );
1479
1480 --Eliminamos los de tipo time
1481 DELETE FROM tblgtcampovalor_time WHERE
1482 fldgtcampo_id IN (
1483 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1484 )
1485 OR
1486 fldgtcampo_id IN (
1487 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1488 );
1489
1490 --Eliminamos los de tipo check
1491 DELETE FROM tblgtcampovalor_check WHERE
1492 fldgtcampo_id IN (
1493 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1494 )
1495 OR
1496 fldgtcampo_id IN (
1497 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1498 );
1499
1500 --Eliminamos las relaciones entre items y niveles
1501 DELETE FROM tblgtcampovalor_item_nivel WHERE fldgttramite_id IN (
1502 SELECT fldgttramite_id FROM tblgttramite WHERE fldgttipo_id=OLD.fldgttipo_id
1503 );
1504
1505 --Eliminamos los niveles de campos
1506 DELETE FROM tblgtcamponivel WHERE fldgtcampo_id IN (
1507 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1508 )
1509 OR fldgtcampo_id IN(
1510 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1511 );
1512
1513 --Eliminamos de la tabla de vencimientos con estados
1514 DELETE FROM tblgtestado_campoitem WHERE fldgtestado_id IN (
1515 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1516 );
1517
1518 --Eliminamos los cargos x privilegios en el estado
1519 DELETE FROM tblgtestado_cargo WHERE fldgtestado_id IN (
1520 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1521 );
1522
1523 --Eliminamos los usuarios x privilegios en el estado
1524 DELETE FROM tblgtestado_usuario WHERE fldgtestado_id IN (
1525 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1526 );
1527
1528 --Eliminamos los usuarios x privilegios en el estado
1529 DELETE FROM tblgtestado_usuario WHERE fldgtestado_id IN (
1530 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1531 );
1532
1533 --Eliminamos la relación entre items y reglas
1534 DELETE FROM tblgtregla_campoitem WHERE fldgtcampoitem_id IN (
1535 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1536 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1537 )
1538 OR fldgtcampo_id IN(
1539 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1540 )
1541 );
1542
1543 --Eliminamos la relación entre campos y reglas
1544 DELETE FROM tblgtregla_campo WHERE fldgtcampo_id IN (
1545 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1546 )
1547 OR fldgtcampo_id IN(
1548 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1549 );
1550
1551 --Eliminamos las plantillas con restricciones
1552 DELETE FROM tblgtplantilla_restriccion WHERE fldgtcampoitem_id IN (
1553 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1554 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1555 )
1556 );
1557
1558 --Eliminamos las restricciones de los informes y los items
1559 DELETE FROM tblgtinforme_campoitem WHERE fldgtcampoitem_id IN (
1560 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1561 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1562 )
1563 );
1564 DELETE FROM tblgtinforme_campo WHERE fldgtcampo_id IN (
1565 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1566 );
1567
1568 --Eliminamos las dependencias entre items
1569 DELETE FROM tblgtcampoitem_dependiente WHERE fldgtcampoitem_id IN(
1570 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1571 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1572 )
1573 OR fldgtcampo_id IN (
1574 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1575 )
1576 );
1577 DELETE FROM tblgtcampoitem_dependiente WHERE fldgtcampoitem_padre IN(
1578 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1579 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1580 )
1581 OR fldgtcampo_id IN (
1582 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1583 )
1584 );
1585
1586 --Eliminamos las restricciones de items
1587 DELETE FROM tblgtcampoitem_usuario WHERE fldgtcampoitem_id IN (
1588 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1589 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1590 AND fldgtcampo_tipo='smu'
1591 UNION
1592 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1593 AND fldgtcampo_tipo='smu'
1594 )
1595 );
1596 DELETE FROM tblgtcampoitem_cargo WHERE fldgtcampoitem_id IN (
1597 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1598 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1599 AND fldgtcampo_tipo='smu'
1600 UNION
1601 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1602 AND fldgtcampo_tipo='smu'
1603 )
1604 );
1605
1606 --Eliminamos dependencia entre items
1607 DELETE FROM tblgtcampoitem_dependiente WHERE fldgtcampoitem_id IN (
1608 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1609 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1610 UNION
1611 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1612 )
1613 )
1614 OR
1615 fldgtcampoitem_padre IN (
1616 SELECT fldgtcampoitem_id FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1617 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1618 UNION
1619 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1620 )
1621 );
1622
1623 --Eliminamos los items
1624 DELETE FROM tblgtcampoitem WHERE fldgtcampo_id IN (
1625 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1626 )
1627 OR fldgtcampo_id IN (
1628 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1629 );
1630
1631 --Se procede a eliminar los valores de los campos adicionales
1632 --Campos de tipo DATE
1633 DELETE FROM tblcampovlrdate_gttipo WHERE fldgttipo_id=OLD.fldgttipo_id;
1634
1635 --Campos de tipo ITEM
1636 DELETE FROM tblcampovlritem_gttipo WHERE fldgttipo_id=OLD.fldgttipo_id;
1637
1638 --Campos de tipo STRING
1639 DELETE FROM tblcampovlrstring_gttipo WHERE fldgttipo_id=OLD.fldgttipo_id;
1640
1641 --Campos de tipo TEXT
1642 DELETE FROM tblcampovlrtext_gttipo WHERE fldgttipo_id=OLD.fldgttipo_id;
1643
1644 --Las relaciones con contratos
1645 DELETE FROM tblgttransicion_contrato WHERE fldgtcampo_id IN (
1646 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1647 )
1648 OR fldgtcampo_id IN (
1649 SELECT fldgtcampo_id FROM tblgtcampo WHERE fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id)
1650 );
1651
1652 --Eliminamos los campos que son hijos
1653 DELETE FROM tblgtcampo hijos WHERE hijos.fldgtcampo_padre IN (
1654 SELECT padre.fldgtcampo_id FROM tblgtcampo padre WHERE padre.fldgtcampo_padre IS NULL AND padre.fldgtestado_id IN
1655 (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1656 )
1657 OR
1658 hijos.fldgtcampo_padre IN (
1659 SELECT padre.fldgtcampo_id FROM tblgtcampo padre WHERE padre.fldgtcampo_padre IS NULL AND padre.fldgttransicion_id IN
1660 (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id));
1661
1662 --Se eliminan los campos que no tienen padre
1663 DELETE FROM tblgtcampo WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1664 OR fldgttransicion_id IN
1665 (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id);
1666
1667 --Se eliminan los agrupadores
1668 DELETE FROM tblgtcampoagrupador WHERE fldgtestado_id IN (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1669 OR fldgttransicion_id IN (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id) ;
1670
1671 --Eliminamos la relacion entre transiciones y usuarios
1672 DELETE FROM tblgttransicion_usuario WHERE fldgttransicion_id IN (
1673 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1674 );
1675
1676 --Eliminamos la relacion entre transicion y estado inicial
1677 DELETE FROM tblgttransicion_estadoi estadoi WHERE estadoi.fldgtestado_id IN
1678 (SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id)
1679 AND estadoi.fldgttransicion_id IN
1680 (SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id);
1681
1682 /*****BLOQUE PARA ELIMINAR REGLAS***/
1683 --USuarios
1684 DELETE FROM tblgtregla_usuario WHERE fldgtregla_id IN (
1685 SELECT fldgtregla_id FROM tblgtregla WHERE fldgttransicion_id IN (
1686 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1687 )
1688 );
1689
1690 --Cargo
1691 DELETE FROM tblgtregla_cargo WHERE fldgtregla_id IN (
1692 SELECT fldgtregla_id FROM tblgtregla WHERE fldgttransicion_id IN (
1693 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1694 )
1695 );
1696
1697 --Campo item
1698 DELETE FROM tblgtregla_campoitem WHERE fldgtregla_id IN (
1699 SELECT fldgtregla_id FROM tblgtregla WHERE fldgttransicion_id IN (
1700 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1701 )
1702 );
1703
1704 --Campo
1705 DELETE FROM tblgtregla_campo WHERE fldgtregla_id IN (
1706 SELECT fldgtregla_id FROM tblgtregla WHERE fldgttransicion_id IN (
1707 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1708 )
1709 );
1710
1711 --Regla
1712 DELETE FROM tblgtregla WHERE fldgttransicion_id IN (
1713 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1714 );
1715 /*****FIN BLOQUE ELIMINAR REGLAS****/
1716
1717 --Relación entre transiciones y grupos
1718 DELETE FROM tblgttransicion_grupo WHERE fldgttransicion_id IN (
1719 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1720 );
1721 DELETE FROM tblgttransicion_grupocargo WHERE fldgttransicion_id IN (
1722 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1723 );
1724
1725 --Eliminamos las plantillas asociadas a las transiciones
1726 DELETE FROM tblgttransicion_gtplantilla WHERE fldgttransicion_id IN (
1727 SELECT fldgttransicion_id FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id
1728 );
1729
1730 --Eliminamos las transiciones
1731 DELETE FROM tblgttransicion WHERE fldgttipo_id=OLD.fldgttipo_id;
1732
1733 --Se eliminan las restricciones de las plantillas
1734 DELETE FROM tblgtplantilla_restriccion WHERE fldgtplantilla_id IN (
1735 SELECT fldgtplantilla_id FROM tblgtplantilla WHERE fldgttipo_id=OLD.fldgttipo_id
1736 );
1737
1738 --Se eliminan las plantillas asociadas a estados para asignaciones
1739 UPDATE tblgtestado SET fldgtplantilla_id=NULL WHERE fldgtplantilla_id IN (
1740 SELECT fldgtplantilla_id FROM tblgtplantilla WHERE fldgttipo_id=OLD.fldgttipo_id
1741 );
1742
1743 --Se elimina relación de plantillas con difusiones
1744 UPDATE tblgtdifusion SET fldgtplantilla_id=NULL WHERE fldgtplantilla_id IN (
1745 SELECT fldgtplantilla_id FROM tblgtplantilla WHERE fldgttipo_id=OLD.fldgttipo_id
1746 );
1747
1748 --Se eliminan las plantillas, se hace aquà porque tiene relación con las transiciones
1749 DELETE FROM tblgtplantilla WHERE fldgttipo_id=OLD.fldgttipo_id;
1750
1751 --Eliminamos relación entre estados y grupos
1752 DELETE FROM tblgtestado_grupo WHERE fldgtestado_id IN (
1753 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1754 );
1755 DELETE FROM tblgtestado_grupocargo WHERE fldgtestado_id IN (
1756 SELECT fldgtestado_id FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id
1757 );
1758
1759 --Eliminamos el estado
1760 DELETE FROM tblgtestado WHERE fldgttipo_id=OLD.fldgttipo_id;
1761
1762 --Eliminamos los reportes asociados
1763 DELETE FROM tblgttiporeporte WHERE fldgttipo_id=OLD.fldgttipo_id;
1764 DELETE FROM tblreportenotificacion WHERE fldreporte_id IN (
1765 SELECT fldreporte_id FROM tblreporte WHERE fldgttipo_id=OLD.fldgttipo_id
1766 );
1767 DELETE FROM tblreportecolumna WHERE fldreporte_id IN (
1768 SELECT fldreporte_id FROM tblreporte WHERE fldgttipo_id=OLD.fldgttipo_id
1769 );
1770 DELETE FROM tblreporte_grupo WHERE fldreporte_id IN (
1771 SELECT fldreporte_id FROM tblreporte WHERE fldgttipo_id=OLD.fldgttipo_id
1772 );
1773 DELETE FROM tblreporte WHERE fldgttipo_id=OLD.fldgttipo_id;
1774
1775 --Eliminamos privilegios
1776 DELETE FROM tblgttipo_areausuario WHERE fldgttipo_id=OLD.fldgttipo_id;
1777
1778 --Eliminar info de organizaciones
1779 DELETE FROM tblgtorganizacion_usuario WHERE fldgtorganizacion_id IN (
1780 SELECT fldgtorganizacion_id FROM tblgtorganizacion WHERE fldgttipo_id=OLD.fldgttipo_id
1781 );
1782 DELETE FROM tblgtorganizacion_campo WHERE fldgtorganizacion_id IN (
1783 SELECT fldgtorganizacion_id FROM tblgtorganizacion WHERE fldgttipo_id=OLD.fldgttipo_id
1784 );
1785 DELETE FROM tblgtorganizacion WHERE fldgttipo_id=OLD.fldgttipo_id;
1786
1787 DELETE FROM tblgtorgcampo WHERE fldgttipo_id=OLD.fldgttipo_id;
1788
1789 DELETE FROM tblgttipopestanacom WHERE fldgttipo_id=OLD.fldgttipo_id;
1790
1791 DELETE FROM tblgttipopestana WHERE fldgttipo_id=OLD.fldgttipo_id;
1792
1793 RETURN OLD;
1794 ELSE
1795 RETURN NULL;
1796 END IF;
1797END;
1798$BODY$
1799 LANGUAGE plpgsql VOLATILE
1800 COST 100;
1801ALTER FUNCTION gttipo_eliminar()
1802 OWNER TO sig;
1803
1804
1805 --Agosto 15 de 2017
1806--Se actualliza función (Diego)
1807CREATE OR REPLACE FUNCTION gt_generar_copia_tramite(
1808 tramite_origen_id integer,
1809 tipo_id integer,
1810 tramite_copia_id integer)
1811 RETURNS void AS
1812$BODY$
1813/**
1814* Función para copiar los valores de los campos de un trámite a otro
1815* @author Diego Anderson Quintero Diaz <diegoquinterodiaz@gmail.com>
1816* @param tramite_origen_id Id del trámite del cual se van a copiar los valores
1817* @param tipo_id Id del tipo de trámite
1818* @param tramite_copia_id Id del trámite al cual se van a asociar los valores
1819*/
1820DECLARE
1821campo record;
1822tmp record;
1823BEGIN
1824 --Seleccionamos los campos del estado inicial del tipo de trámite
1825 --que no tengan padre
1826 FOR campo IN SELECT c.* FROM tblgtcampo c
1827 INNER JOIN tblgtcampo_gtestado ce ON ce.fldgtcampo_id=c.fldgtcampo_id
1828 INNER JOIN tblgttipo t ON t.fldgtestadoi_id=ce.fldgtestado_id
1829 WHERE t.fldgttipo_id=tipo_id
1830 LOOP
1831 --Se tiene que realizar el INTO tmp por errores de postres
1832 SELECT gt_generar_copia_campo(campo.fldgtcampo_id, tramite_origen_id, tramite_copia_id) INTO tmp;
1833 END LOOP;
1834
1835 --Copiamos la remision
1836 INSERT INTO tblgtremision (fldgtremision_id, fldgtremision_origen, fldgtremision_terceronombre, fldgtremision_tercerocargo, fldgtremision_tercerocedula, fldgtremision_terceroinst, fldgtremision_terceronumero, fldpqrmunicipio_id,
1837 fldgtremision_tercerodir, fldgtremision_tercerotel, fldgtremision_terceroemail, fldgtremision_tercerocodigopt, fldgttercero_id, fldgtremision_forma, fldgtempmensajeria_id,
1838 fldgtremision_numeroguia, fldgtremision_asunto, fldgtremision_fechadocumento, fldgttramite_id, fldgtclasificacion_id, fldgtremision_tipo, fldgtremision_eps, fldgtremision_arl,
1839 fldgtremision_fondopensiones, fldgtremision_regimen, fldgttercerotipodocumento_id)
1840 SELECT nextval('gtremision_id_seq'), fldgtremision_origen, fldgtremision_terceronombre, fldgtremision_tercerocargo, fldgtremision_tercerocedula, fldgtremision_terceroinst, fldgtremision_terceronumero, fldpqrmunicipio_id,
1841 fldgtremision_tercerodir, fldgtremision_tercerotel, fldgtremision_terceroemail, fldgtremision_tercerocodigopt, fldgttercero_id, fldgtremision_forma, fldgtempmensajeria_id,
1842 fldgtremision_numeroguia, fldgtremision_asunto, fldgtremision_fechadocumento, tramite_copia_id, fldgtclasificacion_id, fldgtremision_tipo, fldgtremision_eps, fldgtremision_arl,
1843 fldgtremision_fondopensiones, fldgtremision_regimen, fldgttercerotipodocumento_id FROM tblgtremision WHERE fldgttramite_id=tramite_origen_id;
1844END;
1845$BODY$
1846 LANGUAGE plpgsql VOLATILE
1847 COST 100;
1848ALTER FUNCTION gt_generar_copia_tramite(integer, integer, integer)
1849 OWNER TO sig;
1850
1851--Ajuste en función atn_calcularcalificacion (Néstor)
1852-- Function: atn_calcularcalificacion(integer)
1853
1854-- DROP FUNCTION atn_calcularcalificacion(integer);
1855
1856CREATE OR REPLACE FUNCTION atn_calcularcalificacion(atencionid integer)
1857 RETURNS double precision AS
1858$BODY$
1859
1860/**
1861* Función para calcular la calificación de un punto de atención según su estado
1862* y la ejecución de sus actividades
1863*
1864* Consideraciones:
1865* - Si el estado en que se encuentra la atención tiene calificación implÃcita, se retorna ésta
1866* - Cuando el punto de atención es de tipo "Corrección" y está aprobado o verificado, la calificación es 3
1867* - null para puntos de atención en estados "Enviado" "Plan rechazado" o "Reenviado" que aún tienen plazo para empezar a ejecutarse
1868* - 0 para puntos de atención en estados "Enviado" "Plan rechazado" o "Reenviado" y ya se venció su plazo
1869* - 1 para puntos de atención que ya se aprobaron pero que las acciones definidas tienen atraso en su terminación (ya deberÃan haber terminado). Basta con que 1 actividad este atrasada
1870* - 2 la totalidad de las acciones definidas se estan ejecutando dentro del tiempo establecido (sin importar si están terminadas o no)
1871* - 3 la totalidad de las acciones definidas terminaron dentro del tiempo establecido
1872*
1873* Modificaciones:
1874* - Junio 02 de 2011 por Cristian Gómez Alvarez <cristianpark@gmail.com>
1875* Se implementan los cambios para que el procedimiento funcione según los criterios definidos
1876* - Mayo 08 de 2012 por Cristian Gómez Alvarez <cristianpark@gmail.com>
1877* Se cambia tipo de retorno de la función y se agregan instrucciones para retornar null cuando aún está a tiempo
1878* - Noviembre 02 de 2012 por Cristian Gómez Alvarez <cristianpark@gmail.com>
1879* Se cambia el comportamiento del método para obtener estados
1880*/
1881
1882DECLARE
1883 curactividades CURSOR FOR
1884 SELECT tbdsigspaactividad.*
1885 FROM tbdsigspaaccion
1886 RIGHT OUTER JOIN tbdsigspaactividad ON tbdsigspaactividad.fldactividad_id = tbdsigspaaccion.fldactividad_codigo
1887 WHERE tbdsigspaaccion.fldatencion_id=$1 AND tbdsigspaactividad.fldactividad_et IS NULL
1888 ORDER BY tbdsigspaactividad.fldactividad_identificacion,tbdsigspaactividad.fldactividad_fechainiciop;
1889
1890 calificacion double precision;
1891 fechaIP DATE;
1892 fechaFP DATE;
1893 fechaIR DATE;
1894 fechaFR DATE;
1895 regatencion tbdsigspaatencion%ROWTYPE;
1896 regestado tblatnestado%ROWTYPE;
1897 regactividad tbdsigspaactividad%ROWTYPE;
1898
1899 --Variables para determinar el estado de las actividades
1900 fechaActual DATE;
1901 terminadasATiempo char(1);
1902 ejecutadasATiempo char(1);
1903BEGIN
1904
1905calificacion:=null;
1906
1907--Valores por defecto para las variables del estado de las actividades
1908terminadasATiempo:='T';
1909ejecutadasATiempo:='T';
1910
1911fechaActual:=now(); --Obtener la fecha actual para determinar si una actividad está atrasada
1912
1913--Obtener atencion
1914SELECT * INTO regatencion FROM tbdsigspaatencion WHERE fldatencion_id = $1;
1915
1916--Obtener el registro del estado en que se encuentra la atención
1917SELECT * INTO regestado FROM tblatnestado WHERE fldatnestado_id=regatencion.fldatnestado_id;
1918
1919--Si el estado de la atención tiene calificación implÃcita, se retorna esta
1920IF regestado.fldatnestado_calificacioni='T' THEN
1921 RAISE NOTICE 'El estado % tiene calificación implÃcita', regestado.fldatnestado_nombre;
1922 return regestado.fldatnestado_calificacion;
1923END IF;
1924
1925--Si el estado de la atención es "Enviado" "Plan rechazado" "Reenviado"
1926IF UPPER(regestado.fldatnestado_codigo) IN ('ENV', 'RCP', 'RNV') THEN
1927 IF fechaActual>regatencion.fldatencion_fechalimite THEN
1928 RAISE NOTICE 'El punto de atención % está Enviado, Plan rechazado o Reenviado y está retrasado', regatencion.fldatencion_id;
1929 return 0;
1930 ELSE
1931 RAISE NOTICE 'El punto de atención % está Enviado, Plan rechazado o Reenviado pero aún está dentro del lÃmite para definir acciones', regatencion.fldatencion_id;
1932 return null;
1933 END IF;
1934END IF;
1935
1936--Determinar la calificación por el avance de las actividades
1937OPEN curactividades;
1938 LOOP
1939 FETCH curactividades INTO regactividad;
1940 EXIT WHEN NOT FOUND;
1941 fechaIP:=regactividad.fldactividad_fechainiciop; --fecha inicio planeada
1942 fechaFP:=regactividad.fldactividad_fechafinp; --fecha fin planeada
1943
1944 --si la actividad esta en estado terminada
1945 IF regactividad.fldactividad_estado = 'terminada' THEN
1946 fechaFR:=regactividad.fldactividad_fechafinr;
1947
1948 --Si la fecha real es mayor que la fecha planeada (terminó tarde)
1949 IF fechaFR > fechaFP THEN
1950 RAISE NOTICE 'La actividad % del PA % terminó tarde', regactividad.fldactividad_id, regatencion.fldatencion_id;
1951 terminadasATiempo:='F'; --No terminaron a tiempo todas las actividades
1952 END IF;
1953 ELSE
1954 terminadasATiempo:='F'; --No terminaron a tiempo todas las actividades
1955
1956 --Si la actividad está
1957 IF regactividad.fldactividad_estado = 'ejecucion' THEN
1958 IF fechaActual > fechaFP THEN
1959 RAISE NOTICE 'La actividad % del PA % está en ejecución pero ya deberÃa haber terminado', regactividad.fldactividad_id, regatencion.fldatencion_id;
1960 ejecutadasATiempo:='F'; --Hay una actividad atrasada
1961 END IF;
1962 ELSE
1963 --Si la actividad no está en ejecución se verifica si ya deberÃa haber iniciado
1964 IF fechaActual > fechaIP THEN
1965 RAISE NOTICE 'La actividad % del PA % no está en ejecución y ya deberÃa haber empezado a ejecutarse', regactividad.fldactividad_id, regatencion.fldatencion_id;
1966 ejecutadasATiempo:='F'; --Hay una actividad atrasada
1967 END IF;
1968 END IF; --Fin else (la actividad no se está ejecutando)
1969 END IF; --Fin else (la actividad no ha terminado)
1970 END LOOP;
1971CLOSE curactividades;
1972
1973IF atencionid IS NOT NULL THEN
1974 IF terminadasATiempo='T' THEN --Todas las actividades terminaron a tiempo, se retorna 3
1975 RAISE NOTICE 'Todas las actividades del PA % terminaron a tiempo', regatencion.fldatencion_id;
1976 calificacion:=3;
1977 ELSE
1978 IF ejecutadasATiempo='T' THEN --Todas las actividades se están ejecutando a tiempo, se retorna 2
1979 RAISE NOTICE 'Todas las actividades del PA % se están ejecutando a tiempo', regatencion.fldatencion_id;
1980 calificacion:=2;
1981 ELSE --Hay alguna actividad atrasada (para su inicio de ejecución o para su finalización)
1982 RAISE NOTICE 'Una o más actividades del PA % no han terminado a tiempo o deberÃan estar ejecutándose', regatencion.fldatencion_id;
1983 calificacion:=1;
1984 END IF;
1985 END IF;
1986END IF;
1987
1988RETURN calificacion;
1989
1990END;$BODY$
1991 LANGUAGE plpgsql VOLATILE
1992 COST 100;
1993ALTER FUNCTION atn_calcularcalificacion(integer)
1994 OWNER TO sig;
1995
1996--Agosto 14 de 2017
1997-- Ajuste en procedure copiar_proceso (Jhonatan #3588)
1998CREATE OR REPLACE FUNCTION copiar_proceso(procesoid integer, copia character)
1999 RETURNS integer AS
2000$BODY$
2001
2002--Función que copia la información asociada a un proceso
2003--
2004--@param integer procesoid: ID del proceso que se desea copiar
2005--@param char copia: Indica si se debe actualizar el et del documento asociado
2006--@return integer procesonuevoid: ID del proceso que se generó como copia del proceso actual
2007--
2008-- Modificaciones:
2009-- - Abril 01 de 2017 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
2010-- Se ajusta para que el st de copia de los procedimientos(proceso) se actualice en el for
2011--
2012
2013
2014DECLARE
2015 --cursor con los cargos del proceso
2016 curcargos CURSOR FOR
2017 SELECT * FROM tblproceso_cargo
2018 WHERE fldproceso_id = $1;
2019 --cursor con los grupos responsables del proceso
2020 curgrupos CURSOR FOR
2021 SELECT * FROM tblproceso_grupo
2022 WHERE fldproceso_id = $1;
2023 --cursor con los agrupadores
2024 curagrupadores CURSOR FOR
2025 SELECT * FROM tblagrupadorproceso
2026 WHERE fldproceso_id = $1 AND fldagrupadorproceso_et IS NULL;
2027 --Cursor con las categorÃas
2028 curcategorias CURSOR FOR
2029 SELECT fldprocesocat_id FROM tblproceso_procesocat
2030 WHERE fldproceso_id=$1;
2031 --cursor con las partes interesadas
2032 curpartesinteresadas CURSOR FOR
2033 SELECT * FROM tblparteinteresada
2034 WHERE fldproceso_id = $1 AND fldparteinteresada_et IS NULL AND fldparteinteresada_eliminado = 'F';
2035 --cursor con los ciclos PHVA
2036 curciclos CURSOR FOR
2037 SELECT * FROM tblproceso_ciclo
2038 WHERE fldproceso_id = $1;
2039 --cursor con las comunicaciones
2040 curcomunicaciones CURSOR FOR
2041 SELECT * FROM tblcomunicacion
2042 WHERE fldproceso_id = $1;
2043 --cursor con los archivos
2044 curarchivos CURSOR FOR
2045 SELECT * FROM tblarchivo
2046 WHERE fldarchivo_clase = 'proceso' AND fldarchivo_clase_id = $1 AND fldarchivo_eliminado = 'F';
2047 --cursor con los indicadores
2048 curindicadores CURSOR FOR
2049 SELECT b.*
2050 FROM tblindicador a
2051 INNER JOIN tblindicador_proceso b ON (a.fldindicador_id = b.fldindicador_id) AND b.fldproceso_id = $1
2052 WHERE a.fldindicador_temporal = 'F' AND a.fldindicador_eliminado='F';
2053 --cursos con los recursos
2054 currecursos CURSOR FOR
2055 SELECT pr.*
2056 FROM tblproceso_recurso pr
2057 INNER JOIN tblrecurso r ON(r.fldrecurso_id = pr.fldrecurso_id)
2058 WHERE pr.fldproceso_id = $1 AND r.fldrecurso_eliminado = 'F' ;
2059 --cursor con los procedimientos
2060 curprocedimientos CURSOR FOR
2061 SELECT p.*
2062 FROM tblproceso p
2063 JOIN tbldocumento d ON(d.flddocumento_id = p.flddocumento_origen_id)
2064 JOIN tblestadotipo e ON(e.fldestadotipo_id = d.fldestadotipo_id)
2065 WHERE p.fldproceso_tieneprocedimiento = 'T' AND
2066 p.fldproceso_eliminado = 'F' AND
2067 p.fldproceso_esactividad='F' AND
2068 e.fldestadotipo_anulado = 'F' AND
2069 (d.flddocumento_et IS NULL OR (d.flddocumento_et IS NOT NULL AND d.flddocumento_edicion = 'T')) AND
2070 fldproceso_padre = $1;
2071--cursor requisitos aplicables
2072 currequisitos CURSOR FOR
2073 SELECT * FROM tblproceso_nodomodelo
2074 WHERE fldproceso_id = $1 AND fldproceso_nodomodelo_et IS NULL;
2075 --cursor soportes normativos
2076 cursoportes CURSOR FOR
2077 SELECT DISTINCT doc.*
2078 FROM vista_documentos_relacionados vista
2079 JOIN tbldocumento doc ON(doc.flddocumento_id = vista.flddocumento_id)
2080 JOIN tblestadotipo et ON(et.fldestadotipo_id = doc.fldestadotipo_id)
2081 WHERE vista.soporte = 'T' AND vista.fldproceso_id = $1 AND et.fldestadotipo_anulado = 'F' AND vista.obsoleto = 'F' AND (doc.flddocumento_et IS NULL OR (doc.flddocumento_et IS NOT NULL AND doc.flddocumento_edicion = 'T'))
2082 ORDER BY doc.flddocumento_nombre ASC;
2083 --cursor documentos relacionados
2084 curdocumentos CURSOR FOR
2085 SELECT DISTINCT doc.*
2086 FROM vista_documentos_relacionados vista
2087 JOIN tbldocumento doc ON(doc.flddocumento_id = vista.flddocumento_id)
2088 JOIN tblestadotipo et ON(et.fldestadotipo_id = doc.fldestadotipo_id)
2089 WHERE vista.fldproceso_id = $1 AND vista.soporte = 'F' AND vista.obsoleto = 'F'
2090 AND et.fldestadotipo_anulado = 'F' AND (doc.flddocumento_et IS NULL OR (doc.flddocumento_et IS NOT NULL AND doc.flddocumento_edicion = 'T'))
2091 ORDER BY doc.flddocumento_nombre ASC;
2092 --cursor registros
2093 curregistros CURSOR FOR
2094 SELECT rp.* FROM tblregistro_proceso rp
2095 INNER JOIN tblregistro r ON(r.fldregistro_id = rp.fldregistro_id)
2096 WHERE fldproceso_id = $1 AND r.fldregistro_eliminado = 'F';
2097 --cursor terminos
2098 curterminos CURSOR FOR
2099 SELECT pt.* FROM tblproceso_termino pt
2100 INNER JOIN tblterminoglosario t ON(t.fldterminoglosario_id = pt.fldterminoglosario_id)
2101 WHERE pt.fldproceso_id = $1 AND t.fldterminoglosario_eliminado = 'F' AND fldproceso_termino_et IS NULL;
2102 --cursor procesos hijos
2103 curhijos CURSOR FOR
2104 SELECT p.*
2105 FROM tblproceso p
2106 INNER JOIN tbldocumento d ON p.flddocumento_origen_id=d.flddocumento_id
2107 INNER JOIN tblestadotipo e ON e.fldestadotipo_id=d.fldestadotipo_id
2108 WHERE fldproceso_padre = $1 AND
2109 e.fldestadotipo_publicado='T' AND
2110 e.fldestadotipo_anulado = 'F' AND
2111 p.fldproceso_eliminado='F' AND
2112 p.fldproceso_tieneprocedimiento = 'F' AND
2113 p.fldproceso_et IS NULL --AND
2114 --fldproceso_st = ( SELECT MAX(fldproceso_st) FROM tblproceso WHERE fldproceso_origen_id=p.fldproceso_origen_id AND fldproceso_padre = $1 AND fldproceso_eliminado='F' )
2115 ORDER BY p.fldproceso_orden,p.fldproceso_codigo;
2116
2117
2118 regcargo tblproceso_cargo%ROWTYPE;
2119 reggrupo tblproceso_grupo%ROWTYPE;
2120 regagrupador tblagrupadorproceso%ROWTYPE;
2121 regparteinteresada tblparteinteresada%ROWTYPE;
2122 regciclo tblproceso_ciclo%ROWTYPE;
2123 regcomunicacion tblcomunicacion%ROWTYPE;
2124 regarchivo tblarchivo%ROWTYPE;
2125 regindicador tblindicador_proceso%ROWTYPE;
2126 regrecurso tblproceso_recurso%ROWTYPE;
2127 regproceso tblproceso%ROWTYPE;
2128 regrequisito tblproceso_nodomodelo%ROWTYPE;
2129 regdocumento tbldocumento%ROWTYPE;
2130 regproc_doc tblproceso_documento%ROWTYPE;
2131 regregistro tblregistro_proceso%ROWTYPE;
2132 regtermino tblproceso_termino%ROWTYPE;
2133 regtipodocumento tbltipodocumento%ROWTYPE;
2134 regcampo tblcampoadicional%ROWTYPE;
2135 item RECORD;
2136 regarchivoarea tblarchivoarea%ROWTYPE;
2137 consultacampo character varying; --Usada para formar la consulta de campos adicionales
2138 tabla character varying; --Usada para formar la consulta de campos adicionales
2139 campo character varying; --Usado para formar la consulta de campos adicionales
2140
2141
2142 arrayid int2[]; --almacenar los id de los procedimientos a copiar
2143 arrayhijoid int2[]; --almacenar los id de los procesos hijos
2144 arrayagrupadorid int2[]; --almacenar los id de los agrupadores
2145 procesonuevoid integer;
2146 id integer;
2147 num integer;
2148 x integer;
2149 y integer;
2150 z integer;
2151 counter integer;
2152 estadoid integer;
2153 categoriaid integer; --ID de una categorÃa del cursor
2154 data_uri character varying;
2155BEGIN
2156
2157
2158--obtener tipo de documento del proceso
2159SELECT t.* INTO regtipodocumento
2160FROM tbltipodocumento t
2161INNER JOIN tbldocumento d ON (t.fldtipodocumento_id=d.fldtipodocumento_id)
2162INNER JOIN tblproceso p ON (p.flddocumento_origen_id=d.flddocumento_id)
2163WHERE p.fldproceso_id = $1;
2164
2165
2166--obtener documento asociado al proceso
2167SELECT d.* INTO regdocumento
2168FROM tbldocumento d
2169INNER JOIN tblproceso p ON (d.flddocumento_id=p.flddocumento_origen_id)
2170WHERE p.fldproceso_id=$1;
2171
2172
2173--copiar proceso
2174INSERT INTO tblproceso SELECT * FROM tblproceso WHERE fldproceso_id = $1;
2175--obtener id del nuevo proceso
2176procesonuevoid = currval('proceso_id_seq');
2177
2178
2179--copiar documento asociado
2180INSERT INTO tbldocumento SELECT * FROM tbldocumento WHERE flddocumento_id = regdocumento.flddocumento_id;
2181--obtener id del documento asociado
2182id = currval('documento_id_seq');
2183
2184
2185--actualizar et y documento origen del proceso en edición
2186UPDATE tblproceso SET fldproceso_et = now(), flddocumento_origen_id = id
2187WHERE fldproceso_id = procesonuevoid;
2188
2189
2190--RAISE NOTICE 'fldprocedimiento_id Parametro: (%) fecha %', fldproceso_id, now();
2191
2192--actualizar st del proceso actual
2193UPDATE tblproceso SET fldproceso_st = now()
2194WHERE fldproceso_id = $1;
2195
2196
2197IF $2 = 'T' THEN
2198 --actualizar et del documento asociado al proceso en edición
2199 UPDATE tbldocumento SET flddocumento_et = now(), flddocumento_edicion = 'T'
2200 WHERE flddocumento_id = id;
2201ELSE
2202 --obtener estado inicial del tipo de documento
2203 SELECT fldestadotipo_inicial_id INTO estadoid
2204 FROM tbltipodocumento
2205 WHERE fldtipodocumento_id = regtipodocumento.fldtipodocumento_id;
2206
2207
2208 --actualizar et, edicion y estado del documento asociado al proceso en edición
2209 UPDATE tbldocumento SET flddocumento_et = now(), flddocumento_edicion = 'T', fldestadotipo_id = estadoid
2210 WHERE flddocumento_id = id;
2211END IF;
2212
2213
2214--Responsables
2215
2216
2217--copiar cargos
2218OPEN curcargos;
2219 LOOP
2220 FETCH curcargos INTO regcargo;
2221 EXIT WHEN NOT FOUND;
2222 --copiar registro
2223 INSERT INTO tblproceso_cargo (fldproceso_id, fldcargo_id, fldprocesorol_id)
2224 VALUES(procesonuevoid, regcargo.fldcargo_id, regcargo.fldprocesorol_id);
2225 END LOOP;
2226CLOSE curcargos;
2227
2228
2229--copiar grupos
2230OPEN curgrupos;
2231 LOOP
2232 FETCH curgrupos INTO reggrupo;
2233 EXIT WHEN NOT FOUND;
2234 --copiar registro
2235 INSERT INTO tblproceso_grupo(fldproceso_id,fldgrupocargo_id)
2236 VALUES(procesonuevoid,reggrupo.fldgrupocargo_id);
2237
2238
2239 END LOOP;
2240CLOSE curgrupos;
2241
2242
2243--copiar agrupadores
2244OPEN curagrupadores;
2245 LOOP
2246 FETCH curagrupadores INTO regagrupador;
2247 EXIT WHEN NOT FOUND;
2248 --copiar registro
2249 INSERT INTO tblagrupadorproceso SELECT * FROM tblagrupadorproceso WHERE fldagrupadorproceso_id = regagrupador.fldagrupadorproceso_id;
2250
2251
2252 --obtener id del nuevo agrupador
2253 id = currval('agrupadorproceso_id_seq');
2254
2255
2256 --actualizar st del agrupador actual
2257 UPDATE tblagrupadorproceso SET fldagrupadorproceso_st = now()
2258 WHERE fldagrupadorproceso_id = regagrupador.fldagrupadorproceso_id;
2259
2260
2261 --actualizar padre del agrupador y et del agrupador en edición
2262 UPDATE tblagrupadorproceso SET fldagrupadorproceso_et = now(), fldproceso_id = procesonuevoid
2263 WHERE fldagrupadorproceso_id = id;
2264
2265
2266 --almacenar los nuevos agrupadores adicionados
2267 arrayagrupadorid[regagrupador.fldagrupadorproceso_id] = id;
2268
2269
2270 END LOOP;
2271CLOSE curagrupadores;
2272
2273
2274--Copiar categorÃas (en actividad)
2275OPEN curcategorias;
2276 LOOP
2277 FETCH curcategorias INTO categoriaid;
2278 EXIT WHEN NOT FOUND;
2279 --Copiar registro
2280 INSERT INTO tblproceso_procesocat(fldproceso_id, fldprocesocat_id)
2281 VALUES(procesonuevoid, categoriaid);
2282
2283
2284 END LOOP;
2285CLOSE curcategorias;
2286
2287
2288--copiar partes interesadas
2289OPEN curpartesinteresadas;
2290 LOOP
2291 FETCH curpartesinteresadas INTO regparteinteresada;
2292 EXIT WHEN NOT FOUND;
2293 --copiar registro
2294 INSERT INTO tblparteinteresada SELECT * FROM tblparteinteresada WHERE fldparteinteresada_id = regparteinteresada.fldparteinteresada_id;
2295
2296
2297 --obtener id de la nueva parte interesada
2298 id = currval('parteinteresada_id_seq');
2299
2300
2301 --actualizar st de la parte interesada actual
2302 UPDATE tblparteinteresada SET fldparteinteresada_st = now()
2303 WHERE fldparteinteresada_id = regparteinteresada.fldparteinteresada_id;
2304
2305
2306 --actualizar padre y et de la parte interesada en edición
2307 UPDATE tblparteinteresada SET fldparteinteresada_et = now(), fldproceso_id = procesonuevoid
2308 WHERE fldparteinteresada_id = id;
2309 END LOOP;
2310CLOSE curpartesinteresadas;
2311
2312
2313--copiar ciclos PHVA
2314OPEN curciclos;
2315 LOOP
2316 FETCH curciclos INTO regciclo;
2317 EXIT WHEN NOT FOUND;
2318 --copiar registro
2319 INSERT INTO tblproceso_ciclo(fldproceso_id,fldciclo_id)
2320 VALUES(procesonuevoid,regciclo.fldciclo_id);
2321
2322
2323 END LOOP;
2324CLOSE curciclos;
2325
2326
2327--copiar comunicaciones
2328OPEN curcomunicaciones;
2329 LOOP
2330 FETCH curcomunicaciones INTO regcomunicacion;
2331 EXIT WHEN NOT FOUND;
2332 --copiar registro
2333 INSERT INTO tblcomunicacion SELECT * FROM tblcomunicacion WHERE fldcomunicacion_id = regcomunicacion.fldcomunicacion_id;
2334
2335
2336 --obtener id de la nueva comunicacion
2337 id = currval('comunicacion_id_seq');
2338
2339
2340 --actualizar st del proceso obsoleto
2341 UPDATE tblcomunicacion SET fldcomunicacion_st = now()
2342 WHERE fldcomunicacion_id = regcomunicacion.fldcomunicacion_id;
2343
2344
2345 --actualizar padre y et de la comunicacion en edición
2346 UPDATE tblcomunicacion SET fldproceso_id = procesonuevoid
2347 WHERE fldcomunicacion_id = id;
2348
2349
2350 END LOOP;
2351CLOSE curcomunicaciones;
2352
2353
2354--copiar archivos
2355OPEN curarchivos;
2356 LOOP
2357 FETCH curarchivos INTO regarchivo;
2358 EXIT WHEN NOT FOUND;
2359 --copiar registro
2360 INSERT INTO tblarchivo SELECT * FROM tblarchivo WHERE fldarchivo_id = regarchivo.fldarchivo_id;
2361
2362
2363 --obtener id del nuevo archivo
2364 id = currval('archivo_id_seq');
2365
2366
2367 --actualizar padre del archivo nuevo
2368 UPDATE tblarchivo SET fldarchivo_clase_id = procesonuevoid
2369 WHERE fldarchivo_id = id;
2370
2371
2372 --se agregan las áres al archivo
2373 FOR regarchivoarea IN SELECT *
2374 FROM tblarchivoarea
2375 WHERE fldarchivo_id=regarchivo.fldarchivo_id
2376 LOOP
2377 --Se copian las áreas al nuevo archivo
2378 INSERT INTO tblarchivoarea (fldarchivo_id,fldarchivoarea_nombre,fldarchivoarea_ejex,fldarchivoarea_ejey,fldarchivoarea_ejex2,fldarchivoarea_ejey2,fldarchivoarea_url,fldarchivoarea_target)
2379 VALUES
2380 (id,regarchivoarea.fldarchivoarea_nombre,regarchivoarea.fldarchivoarea_ejex,regarchivoarea.fldarchivoarea_ejey,regarchivoarea.fldarchivoarea_ejex2,regarchivoarea.fldarchivoarea_ejey2,regarchivoarea.fldarchivoarea_url,regarchivoarea.fldarchivoarea_target);
2381 END LOOP;--Fin cursor áreas de archivo
2382
2383
2384 END LOOP;
2385CLOSE curarchivos;
2386
2387
2388--Copiar campos adicionales
2389FOR regcampo IN SELECT *
2390 FROM tblcampoadicional
2391 WHERE fldcampoadicional_padre_id = regtipodocumento.fldtipodocumento_id AND fldcampoadicional_padre='tipoDocumento'
2392LOOP
2393 --Determinar la tabla y el campo de valor a utilizar en la consulta
2394 IF TRIM(UPPER(regcampo.fldcampoadicional_tipodato))='SMM' THEN
2395 FOR item IN SELECT * FROM tblcampovlritem_proceso
2396 WHERE fldproceso_id=procesoid AND fldcampoadicional_id=regcampo.fldcampoadicional_id
2397 LOOP
2398 INSERT INTO tblcampovlritem_proceso (fldcampoadicional_id, fldproceso_id, fldcampoadicionalitem_id)
2399 VALUES (regcampo.fldcampoadicional_id, procesonuevoid, item.fldcampoadicionalitem_id);
2400 END LOOP;
2401 ELSE
2402 IF TRIM(UPPER(regcampo.fldcampoadicional_tipodato))='SMU' THEN
2403 tabla:='tblcampovlritem_proceso';
2404 campo:='fldcampoadicionalitem_id';
2405 ELSE
2406 tabla:='tblcampovlr'||TRIM(regcampo.fldcampoadicional_tipodato)||'_proceso';
2407 campo:='fldcampovlr'||TRIM(regcampo.fldcampoadicional_tipodato)||'_proc_valor';
2408 END IF;
2409
2410
2411 --Asociar el valor en el campo adicional para el nuevo proceso
2412 consultacampo:='INSERT INTO '||tabla||' (fldproceso_id, fldcampoadicional_id, '||campo||')
2413 VALUES ($1, $2, (SELECT ' ||campo||' FROM '||tabla||' WHERE fldproceso_id=$3 AND fldcampoadicional_id=$4))';
2414
2415
2416 --Ejecutar la consulta
2417 EXECUTE consultacampo USING procesonuevoid, regcampo.fldcampoadicional_id, procesoid, regcampo.fldcampoadicional_id;
2418 END IF;
2419END LOOP;
2420
2421
2422--copiar indicadores
2423OPEN curindicadores;
2424 LOOP
2425 FETCH curindicadores INTO regindicador;
2426 EXIT WHEN NOT FOUND;
2427 --copiar registro
2428 INSERT INTO tblindicador_proceso(fldindicador_id,fldproceso_id,fldindicador_proceso_peso)
2429 VALUES(regindicador.fldindicador_id,procesonuevoid,regindicador.fldindicador_proceso_peso);
2430 END LOOP;
2431CLOSE curindicadores;
2432
2433
2434--copiar recursos
2435OPEN currecursos;
2436 LOOP
2437 FETCH currecursos INTO regrecurso;
2438 EXIT WHEN NOT FOUND;
2439 --copiar registro
2440 INSERT INTO tblproceso_recurso(fldproceso_id,fldrecurso_id,fldproceso_recurso_tipo)
2441 VALUES(procesonuevoid,regrecurso.fldrecurso_id,regrecurso.fldproceso_recurso_tipo);
2442
2443
2444 END LOOP;
2445CLOSE currecursos;
2446
2447
2448--copiar procedimientos
2449x = 0;
2450OPEN curprocedimientos;
2451 LOOP
2452 FETCH curprocedimientos INTO regproceso;
2453 EXIT WHEN NOT FOUND;
2454 --guardar el id de los procedimientos que se van a copiar
2455 arrayid[x] = regproceso.fldproceso_id;
2456
2457
2458 x = x + 1;
2459 END LOOP;
2460CLOSE curprocedimientos;
2461
2462
2463IF x>0 THEN
2464 FOR y IN 0 .. x LOOP
2465 --copiar proceso
2466 id = CAST(copiar_proceso(arrayid[y],'T') AS integer);
2467 --copiar procedimiento
2468 num = copiar_procedimiento(CAST(arrayid[y] AS integer),id);
2469
2470
2471 --asociar el procedimiento al proceso nuevo
2472 UPDATE tblproceso SET fldproceso_padre = procesonuevoid, fldproceso_st=now()
2473 WHERE fldproceso_id = id;
2474 END LOOP;
2475END IF;
2476
2477
2478--copiar requisitos aplicables
2479OPEN currequisitos;
2480 LOOP
2481 FETCH currequisitos INTO regrequisito;
2482 EXIT WHEN NOT FOUND;
2483 --copiar registro
2484 INSERT INTO tblproceso_nodomodelo(fldproceso_id,fldnodomodelo_id,fldproceso_origen_id,fldnodomodelo_origen_id,fldproceso_nodomodelo_st,fldproceso_nodomodelo_et)
2485 VALUES(procesonuevoid,regrequisito.fldnodomodelo_id,regrequisito.fldproceso_origen_id,regrequisito.fldnodomodelo_origen_id,regrequisito.fldproceso_nodomodelo_st,now());
2486
2487
2488 --actualizar st del requisito actual
2489 UPDATE tblproceso_nodomodelo SET fldproceso_nodomodelo_st = now()
2490 WHERE fldproceso_id = regrequisito.fldproceso_id AND fldnodomodelo_id = regrequisito.fldnodomodelo_id;
2491
2492
2493 END LOOP;
2494CLOSE currequisitos;
2495
2496
2497--copiar soportes legales
2498OPEN cursoportes;
2499 LOOP
2500 FETCH cursoportes INTO regdocumento;
2501 EXIT WHEN NOT FOUND;
2502 --consultar relacion con la tabla n - n
2503 SELECT * INTO regproc_doc FROM tblproceso_documento WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
2504
2505
2506 --copiar registro
2507 INSERT INTO tblproceso_documento(fldproceso_id,flddocumento_id,fldproceso_documento_relacion,fldproceso_origen_id,flddocumento_origen_id,fldproceso_documento_st,fldproceso_documento_et)
2508 VALUES(procesonuevoid,regproc_doc.flddocumento_id,regproc_doc.fldproceso_documento_relacion,regproc_doc.fldproceso_origen_id,regproc_doc.flddocumento_origen_id,regproc_doc.fldproceso_documento_st,now());
2509
2510
2511 --actualizar st del documento actual
2512 UPDATE tblproceso_documento SET fldproceso_documento_st = now()
2513 WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
2514
2515
2516 END LOOP;
2517CLOSE cursoportes;
2518
2519
2520--copiar documentos relacionados
2521OPEN curdocumentos;
2522 LOOP
2523 FETCH curdocumentos INTO regdocumento;
2524 EXIT WHEN NOT FOUND;
2525 --consultar relacion con la tabla n - n
2526 SELECT * INTO regproc_doc FROM tblproceso_documento WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
2527
2528
2529 --copiar registro
2530 INSERT INTO tblproceso_documento(fldproceso_id,flddocumento_id,fldproceso_documento_relacion,fldproceso_origen_id,flddocumento_origen_id,fldproceso_documento_st,fldproceso_documento_et)
2531 VALUES(procesonuevoid,regproc_doc.flddocumento_id,regproc_doc.fldproceso_documento_relacion,regproc_doc.fldproceso_origen_id,regproc_doc.flddocumento_origen_id,regproc_doc.fldproceso_documento_st,now());
2532
2533
2534 --actualizar st del documento actual
2535 UPDATE tblproceso_documento SET fldproceso_documento_st = now()
2536 WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
2537
2538
2539 END LOOP;
2540CLOSE curdocumentos;
2541
2542
2543--copiar registros
2544OPEN curregistros;
2545 LOOP
2546 FETCH curregistros INTO regregistro;
2547 EXIT WHEN NOT FOUND;
2548 --copiar registro
2549 id = copiar_registro(regregistro.fldregistro_id);
2550
2551
2552 --copiar relacion
2553 INSERT INTO tblregistro_proceso (fldregistro_id, fldproceso_id) VALUES (id, procesonuevoid);
2554 END LOOP;
2555CLOSE curregistros;
2556
2557
2558--copiar terminos glosario
2559OPEN curterminos;
2560 LOOP
2561 FETCH curterminos INTO regtermino;
2562 EXIT WHEN NOT FOUND;
2563 --copiar registro
2564 INSERT INTO tblproceso_termino(fldproceso_id,fldterminoglosario_id,fldproceso_origen_id,fldterminoglosario_origen_id,fldproceso_termino_st,fldproceso_termino_et)
2565 VALUES(procesonuevoid,regtermino.fldterminoglosario_id,regtermino.fldproceso_origen_id,regtermino.fldterminoglosario_origen_id,regtermino.fldproceso_termino_st,now());
2566
2567
2568 --actualizar st del termino actual
2569 UPDATE tblproceso_termino SET fldproceso_termino_st = now()
2570 WHERE fldproceso_id = regtermino.fldproceso_id AND fldterminoglosario_id = regtermino.fldterminoglosario_id;
2571
2572
2573 END LOOP;
2574CLOSE curterminos;
2575
2576
2577--Copiar las entradas y salidas del proceso
2578PERFORM copiar_entradas_salidas($1, procesonuevoid);
2579
2580
2581-- Copiar el padre e hijo de la tabla: tblproceso_proceso
2582INSERT INTO tblproceso_proceso (fldproceso_padre_id, fldproceso_hijo_id)
2583SELECT procesonuevoid, fldproceso_hijo_id FROM tblproceso_proceso WHERE fldproceso_padre_id = procesoid;
2584
2585
2586INSERT INTO tblproceso_proceso (fldproceso_padre_id, fldproceso_hijo_id)
2587SELECT fldproceso_padre_id, procesonuevoid FROM tblproceso_proceso WHERE fldproceso_hijo_id = procesoid;
2588
2589
2590--copia de los hijos
2591z = 0;
2592OPEN curhijos;
2593 LOOP
2594 FETCH curhijos INTO regproceso;
2595 EXIT WHEN NOT FOUND;
2596 --guardar el id de los procesos hijos que se van a copiar
2597 arrayhijoid[z] = regproceso.fldproceso_id;
2598
2599
2600 z = z + 1;
2601 END LOOP;
2602CLOSE curhijos;
2603
2604
2605IF z>0 THEN
2606 FOR y IN 0 .. z-1 LOOP
2607 --copiar proceso
2608 id = copiar_proceso(CAST(arrayhijoid[y] AS integer),'T');
2609 --actualizar padre del proceso
2610 UPDATE tblproceso SET fldproceso_padre = procesonuevoid
2611 WHERE fldproceso_id = id;
2612 END LOOP;
2613END IF;
2614
2615
2616--actualizar los agrupadores de las actividades nuevas
2617FOR regproceso IN SELECT p.*
2618 FROM tblproceso p
2619 INNER JOIN tbldocumento d ON p.flddocumento_origen_id=d.flddocumento_id
2620 INNER JOIN tblestadotipo e ON e.fldestadotipo_id=d.fldestadotipo_id
2621 INNER JOIN tbltipodocumento t ON(t.fldtipodocumento_id = d.fldtipodocumento_id)
2622 WHERE fldproceso_padre=procesonuevoid AND e.fldestadotipo_publicado='T' AND e.fldestadotipo_anulado = 'F'
2623 AND p.fldproceso_eliminado='F' AND t.fldtipodocumento_esactividad = 'T'
2624 --AND fldproceso_st = (SELECT MAX(fldproceso_st) FROM tblproceso WHERE fldproceso_origen_id=p.fldproceso_origen_id AND fldproceso_padre=procesonuevoid AND fldproceso_eliminado='F')
2625 ORDER BY p.fldproceso_orden ASC
2626LOOP
2627 IF regproceso.fldagrupadorproceso_id IS NOT NULL THEN
2628 --actualizar agrupador
2629 UPDATE tblproceso SET fldagrupadorproceso_id = arrayagrupadorid[regproceso.fldagrupadorproceso_id]
2630 WHERE fldproceso_id = regproceso.fldproceso_id;
2631 END IF;
2632END LOOP;
2633
2634
2635--Se copian los diagramas con drawio
2636INSERT INTO tblproceso_drawio (fldproceso_id, fldproceso_drawio_src, fldproceso_drawioorden, fldusuario_id)
2637 SELECT procesonuevoid, fldproceso_drawio_src, fldproceso_drawioorden, fldusuario_id
2638 FROM tblproceso_drawio WHERE fldproceso_id=procesoid AND fldproceso_drawio_et IS NULL;
2639
2640RETURN procesonuevoid;
2641
2642
2643END;$BODY$
2644 LANGUAGE plpgsql VOLATILE
2645 COST 100;
2646ALTER FUNCTION copiar_proceso(integer, character)
2647 OWNER TO sig;
2648
2649--Agosto 23 de 2017 ACTUALIZACION SGI Build 45d6974b59ae9d601676fbfa4dbd1c29548a4e31
2650DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
2651
2652INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
2653VALUES ('_FECHA_ULT_ACTUALIZACION','2017-08-23 (El sonidito) 45d6974b59ae9d601676fbfa4dbd1c29548a4e31','T');
2654
2655UPDATE tblparametro SET fldparametro_valor='45d6974b59ae9d601676fbfa4dbd1c29548a4e31' WHERE fldparametro_nombre='_NUMERO_BUILD';
2656
2657--Agosto 22 de 2017
2658--Se crea constante para controlar editor de rtf en campos adicionales de cargos (Néstor)(Issue#3662)
2659INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2660VALUES ('_CARGO_ACTIVAR_RTFTEXTO', 'false', 'T');
2661INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2662VALUES ('_CARGO_ACTIVAR_RTFIMAGEN', 'false', 'T');
2663INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2664VALUES ('_CARGO_ACTIVAR_RTFTABLA', 'false', 'T');
2665
2666--Se elimina constante sin uso (Diego)
2667DELETE FROM tblparametro WHERE fldparametro_nombre='_CLIENTE_CSS';
2668
2669--Agosto 23 de 2017
2670--Nueva constante (Néstor)(Issue#3679)
2671INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2672VALUES ('_RIETIQUETA_NIVELRIESGOCALCULADO', 'RPN', 'T');
2673
2674--Constante para editar grid en dialogo (Diego#2892)
2675INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2676VALUES ('_TRAMITES_GRID_DIALOGO', 'false', 'T');
2677ALTER TABLE tblgtcampo ADD fldgtcampo_edicionendialogo CHAR(1) DEFAULT 'F' NOT NULL;
2678COMMENT ON COLUMN tblgtcampo.fldgtcampo_edicionendialogo IS 'Indica si un campo de tipo GRID se debe editar en un dialogo';
2679
2680
2681--Parámetros de configuración en tipos de evento (Jhonatan #3680)
2682INSERT INTO tbltipoeventoconfig (fldeventotipo_id, fldtipoeventoconfig_nombre, fldtipoeventoconfig_valor)
2683SELECT fldeventotipo_id, 'OCULTAR_DESCRIPCION_EVENTO', 'false' FROM tbleventotipo;
2684
2685INSERT INTO tbltipoeventoconfig (fldeventotipo_id, fldtipoeventoconfig_nombre, fldtipoeventoconfig_valor)
2686SELECT fldeventotipo_id, 'REQUIERE_DESCRIPCION_EVENTO', 'false' FROM tbleventotipo;
2687
2688--Agosto 26 de 2017 ACTUALIZACION SGI Build df1a13f173a82946bfb256c0844af12fc587dfb1
2689DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
2690
2691INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
2692VALUES ('_FECHA_ULT_ACTUALIZACION','2017-08-26 (El sonidito II) df1a13f173a82946bfb256c0844af12fc587dfb1','T');
2693
2694UPDATE tblparametro SET fldparametro_valor='df1a13f173a82946bfb256c0844af12fc587dfb1' WHERE fldparametro_nombre='_NUMERO_BUILD';
2695
2696--Agosto 24 de 2017
2697--Se agrega campo a sistemas de referencia para riesgos (Néstor)(Issue#3708)
2698ALTER TABLE tblsistemariesgo ADD fldsistemariesgo_tienematriz CHAR(1) DEFAULT 'T' NOT NULL;
2699COMMENT ON COLUMN tblsistemariesgo.fldsistemariesgo_tienematriz IS 'Determina si los riesgos del sistema de referencia tendrán matriz';
2700
2701--Agosto 25 de 2017
2702--Ajuste en mecanismos de integración (#3717) (Yesid)
2703INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2704VALUES ('_MIEXPORTAR_BLOQUE','false','T');
2705
2706--Secciones adicionales en nodos de modelos de gestión (Yesid) (#3722)
2707INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2708VALUES ('_SGI_VINCULARNODOS_SECCIONES','false','T');
2709
2710--Depurar nodos en modelos de gestión (Yesid)(#3156)
2711ALTER TABLE tblnodomodelo DROP fldnodomodelo_peso;
2712
2713--Se actualiza nombre de constante (Néstor)
2714UPDATE tblparametro SET fldparametro_nombre = '_RIESGOS_NIVELRIESGO_CALCULADO' WHERE fldparametro_nombre = '_RIEVENTOS_NIVELRIESGO_CALCULADO';
2715
2716--Agosto 25 de 2017
2717--Función para obtener el identificador del nivel de riesgo (Néstor)(Issue#3679)
2718CREATE OR REPLACE FUNCTION riesgo_obtener_nombre_nivel(valor float, sistemaid integer)
2719RETURNS INTEGER AS
2720$BODY$
2721 --Función que obtiene el nivel del riesgo
2722 --@author Néstor Duque <nduque@almeraim.com>
2723 --@fecha Agosto 23 de 2017
2724 --
2725 --@param float valor: Valor usado para obtener el nivel de riesgo
2726 --@param integer sistemaid: Identificador del sistema de referencia en el cual se van a buscar los niveles de riesgo
2727 --@return Integer: Identificador del nivel de riesgo
2728
2729DECLARE
2730idNivelRiesgo INTEGER;
2731BEGIN
2732 SELECT rniv.fldnivelriesgo_id INTO idNivelRiesgo
2733 FROM tblsistemariesgo sr
2734 INNER JOIN tblriesgocriterio rcri ON rcri.fldsistemariesgo_id = sr.fldsistemariesgo_id
2735 INNER JOIN tblnivelriesgo rniv ON rniv.fldsistemariesgo_id = rcri.fldsistemariesgo_id
2736 WHERE sr.fldsistemariesgo_id = sistemaid
2737 AND rniv.fldnivelriesgo_desde IS NOT NULL
2738 AND rniv.fldnivelriesgo_hasta IS NOT NULL
2739 AND (rniv.fldnivelriesgo_desde <= (valor) AND rniv.fldnivelriesgo_hasta >= (valor));
2740
2741 return idNivelRiesgo;
2742END;
2743
2744$BODY$
2745LANGUAGE plpgsql VOLATILE
2746 COST 100;
2747ALTER FUNCTION riesgo_obtener_nombre_nivel(float, integer)
2748 OWNER TO sig;
2749
2750
2751--Función para obtener el valor calculado del nivel de riesgo (Néstor)(Issue#3679)
2752CREATE OR REPLACE FUNCTION riesgo_calcular_nivel(riesgoid integer, matriz character varying)
2753RETURNS float AS
2754$BODY$
2755 --Función que calcula el nivel del riesgo
2756 --@author Néstor Duque <nduque@almeraim.com>
2757 --@fecha Agosto 23 de 2017
2758 --
2759 --@param integer riesgoid: ID del riesgo
2760 --@param character varying matriz: Matriz en la cual se va a calcular el nivel
2761 --@return float resultado: Resultado de la operación
2762
2763DECLARE
2764resultado FLOAT;
2765valorCriterio INTEGER;
2766acumuladorCriterios INTEGER;
2767nivelRiesgo INTEGER;
2768sistemaId INTEGER;
2769
2770--Obtener los criterios asociados al sistema de riesgo al cual pertenece el riesgo
2771cursor_criterios CURSOR FOR SELECT * FROM tblriesgocriterio rc
2772INNER JOIN tblriesgo r ON r.fldsistemariesgo_id = rc.fldsistemariesgo_id
2773WHERE r.fldriesgo_id = riesgoid;
2774crt record; -- Criterios
2775
2776BEGIN
2777 resultado := 0;
2778 acumuladorCriterios := -1;
2779 nivelRiesgo := 0;
2780
2781 SELECT fldsistemariesgo_id INTO sistemaId FROM tblriesgo WHERE fldriesgo_id = riesgoid;
2782
2783 FOR crt IN cursor_criterios LOOP
2784 SELECT (
2785 SELECT COALESCE(rcrin.fldriesgocriterionivel_peso, 0)
2786 FROM tblriesgocriterionivel rcrin
2787 INNER JOIN tblriesgocriterio rcrit ON (rcrit.fldriesgocriterio_id = rcrin.fldriesgocriterio_id AND rcrit.fldsistemariesgo_id=sistemaId)
2788 LEFT OUTER JOIN tblriesgo_criterio rcri ON (rcri.fldriesgocriterionivel_id = rcrin.fldriesgocriterionivel_id)
2789 WHERE rcri.fldriesgo_id = riesgoid
2790 AND rcri.fldriesgocriterio_id = crt.fldriesgocriterio_id
2791 AND rcri.fldriesgo_criterio_matriz = matriz
2792 ) INTO valorCriterio;
2793
2794 IF (acumuladorCriterios = -1) THEN
2795 acumuladorCriterios := valorCriterio;
2796 ELSE
2797 acumuladorCriterios := acumuladorCriterios * valorCriterio;
2798 END IF;
2799
2800 --RAISE NOTICE 'Criterio %', valorCriterio;
2801 END LOOP;
2802
2803 --RAISE NOTICE 'Acumulado %', acumuladorCriterios;
2804
2805 SELECT ( --Se obtiene la probabilidad de riesgo
2806 (
2807 SELECT COALESCE(prp.fldprobabilidadriesgo_peso, 0) FROM tblprobabilidadriesgo prp
2808 WHERE prp.fldsistemariesgo_id = r.fldsistemariesgo_id
2809 AND prp.fldprobabilidadriesgo_id = CASE WHEN matriz = 'A' THEN vr.fldvlracionriesgo_probabslta WHEN matriz = 'R' THEN vr.fldvlracionriesgo_probctrlda WHEN matriz = 'T' THEN vr.fldvlracionriesgo_probtratada END
2810 )
2811 *
2812 --Se obtiene el impacto de riesgo
2813 (
2814 SELECT COALESCE(rimp.fldimpactoriesgo_peso, 0) FROM tblimpactoriesgo rimp
2815 WHERE rimp.fldsistemariesgo_id = r.fldsistemariesgo_id
2816 AND rimp.fldimpactoriesgo_id = CASE WHEN matriz = 'A' THEN vr.fldvlracionriesgo_imptoabslto WHEN matriz = 'R' THEN vr.fldvlracionriesgo_imptoctrldo WHEN matriz = 'T' THEN vr.fldvlracionriesgo_imptotratado END
2817 )
2818 * acumuladorCriterios
2819 ) INTO nivelRiesgo
2820 FROM tblriesgounidad u
2821 INNER JOIN tblriesgo r ON u.fldriesgounidad_id = r.fldriesgounidad_id
2822 INNER JOIN tblriesgo_objetoimpacto ro ON r.fldriesgo_id = ro.fldriesgo_id
2823 INNER JOIN tblriesgoobjetoimpacto oimp ON oimp.fldriesgoobjetoimpacto_id = ro.fldriesgoobjetoimpacto_id
2824 LEFT OUTER JOIN tblmatrizriesgo matr ON matr.fldsistemariesgo_id = r.fldsistemariesgo_id
2825 LEFT OUTER JOIN tblnivelriesgo rniv ON rniv.fldnivelriesgo_id = matr.fldnivelriesgo_id
2826 LEFT OUTER JOIN tblvlracionriesgo vr ON ( vr.fldriesgo_id = ro.fldriesgo_id AND vr.fldriesgoobjetoimpacto_id = ro.fldriesgoobjetoimpacto_id )
2827 WHERE rniv.fldsistemariesgo_id = r.fldsistemariesgo_id
2828 AND matr.fldprobabilidadriesgo_id = CASE WHEN matriz = 'A' THEN vr.fldvlracionriesgo_probabslta WHEN matriz = 'R' THEN vr.fldvlracionriesgo_probctrlda WHEN matriz = 'T' THEN vr.fldvlracionriesgo_probtratada END
2829 AND matr.fldimpactoriesgo_id = CASE WHEN matriz = 'A' THEN vr.fldvlracionriesgo_imptoabslto WHEN matriz = 'R' THEN vr.fldvlracionriesgo_imptoctrldo WHEN matriz = 'T' THEN vr.fldvlracionriesgo_imptotratado END
2830 AND r.fldriesgo_id = riesgoid;
2831 --LIMIT 1;
2832
2833 RETURN nivelRiesgo;
2834
2835END;
2836
2837$BODY$
2838LANGUAGE plpgsql VOLATILE
2839 COST 100;
2840ALTER FUNCTION riesgo_calcular_nivel(integer, character varying)
2841 OWNER TO sig;
2842
2843--Agosto 28 de 2017 ACTUALIZACION SGI Build a4ced2447f463cf60be4ccc45b6aba1edada9615
2844DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
2845
2846INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
2847VALUES ('_FECHA_ULT_ACTUALIZACION','2017-08-28 (El sonidito III) a4ced2447f463cf60be4ccc45b6aba1edada9615','T');
2848
2849UPDATE tblparametro SET fldparametro_valor='a4ced2447f463cf60be4ccc45b6aba1edada9615' WHERE fldparametro_nombre='_NUMERO_BUILD';
2850
2851--Agosto 28 de 2017
2852--Constante para ejecutable de Python para Google (Robinson)(#3749)
2853INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2854VALUES ('_RUTA_PYTHON_GOOGLE', 'python', 'T');
2855
2856--Se crea nuevo index (Néstor)(Issue#3721)
2857CREATE INDEX bitacora_ip_idx ON tblbitacora(fldbitacora_ip);
2858
2859--Se ajustan estados en eventos (Néstor)(Issue#3743)
2860ALTER TABLE tblevsestado ALTER COLUMN fldeventotipo_mostrar_menu SET DEFAULT 'T';
2861
2862--Se crea nuevo campo en tipos de punto de atención (Néstor)(Issue#3706)
2863ALTER TABLE tblatenciontipo ADD fldatenciontipo_activo CHAR(1) DEFAULT 'T' NOT NULL;
2864COMMENT ON COLUMN tblatenciontipo.fldatenciontipo_activo IS 'Determina el estado del tipo de punto de atención';
2865
2866--Agosto 29 de 2017 ACTUALIZACION SGI Build d8bb226844515d23e622575e8acc4929602973e5
2867DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
2868
2869INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
2870VALUES ('_FECHA_ULT_ACTUALIZACION','2017-08-29 (El sonidito IV) d8bb226844515d23e622575e8acc4929602973e5','T');
2871
2872UPDATE tblparametro SET fldparametro_valor='d8bb226844515d23e622575e8acc4929602973e5' WHERE fldparametro_nombre='_NUMERO_BUILD';
2873
2874--Agosto 29 de 2017
2875--Se ajusta tipo de dato para nombre en riesgos (Néstor)(Issue#3632)
2876ALTER TABLE tblriesgo ALTER COLUMN fldriesgo_nombre SET DATA TYPE CHARACTER VARYING;
2877
2878--Depuración de sección obsoleta
2879DELETE FROM tblseccion_usuario WHERE fldseccion_id IN (SELECT fldseccion_id FROM tblseccion WHERE fldseccion_include like '%actividades/index.inc.php%');
2880DELETE FROM tblseccion WHERE fldseccion_include like '%actividades/index.inc.php%';
2881
2882--Depuración en clasificaciones de controles (Néstor)(Issue#3747)
2883ALTER TABLE tblcalcontrol DROP COLUMN fldcalcontrol_actual;
2884ALTER TABLE tblcalcontrol DROP COLUMN fldcalcontrol_propuesto;
2885
2886--Se crea evento al exportar volúmenes (Diego#3752)
2887INSERT INTO tbleventobitacora (fldeventobitacora_codigo, fldeventobitacora_actividad, fldeventobitacoranivel_id)
2888VALUES ('TRA-EVL-01', 'Exportó volúmen de trámite', 1);
2889
2890
2891--Septiembre 14 de 2017 ACTUALIZACION SGI Build f92f9008cca05112a0e44319c84a3cb9c0ff04ce
2892DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
2893
2894INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
2895VALUES ('_FECHA_ULT_ACTUALIZACION','2017-09-14 (Last Samurai) f92f9008cca05112a0e44319c84a3cb9c0ff04ce','T');
2896
2897UPDATE tblparametro SET fldparametro_valor='f92f9008cca05112a0e44319c84a3cb9c0ff04ce' WHERE fldparametro_nombre='_NUMERO_BUILD';
2898
2899--Agosto 31 de 2017
2900--Insert de constante para tipos de trámite (Diego#3649)
2901DELETE FROM tblparametro WHERE fldparametro_nombre='_TRAMITE_CREAR_TIPOS_TRA';
2902INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2903VALUES ('_TRAMITE_CREAR_TIPOS_TRA', 'false', 'T');
2904
2905--Agosto 30 de 2017
2906--Depuración de mediciones (Yesid)
2907DELETE FROM tblmedicion
2908WHERE fldmedicion_valor IS NULL and fldmedicion_meta IS NULL
2909AND fldmedicion_et IS NULL
2910AND fldmedicion_tienemedicion='T';
2911
2912--Septiembre 01 de 2017
2913--Se agrega campo a configuración de tipos de evento (Néstor)(Issue#3665)
2914INSERT INTO tbltipoeventoconfig (fldeventotipo_id, fldtipoeventoconfig_nombre, fldtipoeventoconfig_valor)
2915SELECT fldeventotipo_id, 'REQUIERE_LOCALIZACION_EVENTO', 'false' FROM tbleventotipo;
2916
2917--Opciones dependientes en campos SMU I (Néstor)(Issue#3753)
2918INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2919VALUES ('_CAMPOADICIONAL_OPCIONESDEPENDIENTES', 'false', 'T');
2920
2921ALTER TABLE tblcampoadicional ADD fldcampoadicional_cpadre_id INTEGER;
2922ALTER TABLE tblcampoadicional ADD CONSTRAINT campoadicional_cpadre_id_fk FOREIGN KEY (fldcampoadicional_cpadre_id) REFERENCES tblcampoadicional (fldcampoadicional_id);
2923COMMENT ON COLUMN tblcampoadicional.fldcampoadicional_cpadre_id IS 'Identificador del campo adicional padre';
2924
2925CREATE TABLE tblcampoadicionalitem_padre (
2926 fldcampoadicionalitempadre_id INTEGER NOT NULL,
2927 fldcampoadicionalitemhijo_id INTEGER NOT NULL,
2928 CONSTRAINT campoadicionalitem_padre_pk PRIMARY KEY (fldcampoadicionalitempadre_id, fldcampoadicionalitemhijo_id),
2929 CONSTRAINT campoadicionalitem_padre_fk1 FOREIGN KEY (fldcampoadicionalitempadre_id) REFERENCES tblcampoadicionalitem (fldcampoadicionalitem_id),
2930 CONSTRAINT campoadicionalitem_padre_fk2 FOREIGN KEY (fldcampoadicionalitemhijo_id) REFERENCES tblcampoadicionalitem (fldcampoadicionalitem_id)
2931);
2932COMMENT ON TABLE tblcampoadicionalitem_padre IS 'Tabla para almacenar la relación entre items';
2933COMMENT ON COLUMN tblcampoadicionalitem_padre.fldcampoadicionalitempadre_id IS 'Identificador del item padre';
2934COMMENT ON COLUMN tblcampoadicionalitem_padre.fldcampoadicionalitemhijo_id IS 'Identificaor del item hijo';
2935
2936--Tabla para registrar dispositivos de user (Diego)
2937CREATE SEQUENCE usuariodispositivo_id_seq
2938START WITH 1 INCREMENT BY 1;
2939
2940CREATE TABLE tblusuariodispositivo(
2941 fldusuariodispositivo_id integer NOT NULL DEFAULT nextval('usuariodispositivo_id_seq'),
2942 fldusuariodispositivo_token character varying NOT NULL,
2943 fldusuariodispositivo_st timestamp without time zone NOT NULL DEFAULT now(),
2944 fldusuariodispositivo_fecha timestamp without time zone,
2945 fldusuariodispositivo_os character varying NOT NULL,
2946 fldusuariodispositivo_device character varying NOT NULL,
2947 fldusuariodispositivo_browser character varying NOT NULL,
2948 fldusuariodispositivo_ip character varying NOT NULL,
2949 fldusuario_id integer NOT NULL,
2950 CONSTRAINT usuariodispositivo_pk PRIMARY KEY (fldusuariodispositivo_id),
2951 CONSTRAINT usuariodispositivo_usuario_fk FOREIGN KEY (fldusuario_id) REFERENCES tblusuario (fldusuario_id)
2952);
2953--ALTER TABLE tblusuariodispositivo OWNER TO sig;
2954COMMENT ON TABLE tblusuariodispositivo IS 'Tabla para registrar los dispositivos desde los que se conectan los usuarios';
2955COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_id IS 'ID de registro';
2956COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_token IS 'Token generado para el usuario';
2957COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_st IS 'Fecha de registro';
2958COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_fecha IS 'Última fecha que se ha logueado el usuario';
2959COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_os IS 'Sistema operativo del dispositivo';
2960COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_device IS 'Dispositivo';
2961COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_browser IS 'Nombre del navegador';
2962COMMENT ON COLUMN tblusuariodispositivo.fldusuariodispositivo_ip IS 'IP';
2963COMMENT ON COLUMN tblusuariodispositivo.fldusuario_id IS 'Id del usuario al que pertenece el dispositivo';
2964
2965--Indice en bitacora fecha (#3781) (Yesid)
2966CREATE INDEX bitacora_fecha_idx ON tblbitacora (fldbitacora_fecha);
2967
2968--Septiembre 04 de 2017
2969--Se crea tabla para pagos en contratos (Jhonatan #1807)
2970CREATE TABLE tblcontrato_ftefinanejec (
2971 fldcontrato_id INTEGER NOT NULL,
2972 fldcontratoseguimiento_id INTEGER NOT NULL,
2973 fldftefinanciacion_id INTEGER NOT NULL,
2974 fldproyecto_id_act INTEGER NOT NULL,
2975 fldcontrato_ftefinanejec DOUBLE PRECISION,
2976 CONSTRAINT contrato_ftefinanejec_pk PRIMARY KEY(fldcontrato_id, fldcontratoseguimiento_id, fldftefinanciacion_id, fldproyecto_id_act),
2977 CONSTRAINT contrato_ftefinanejec_fk FOREIGN KEY(fldcontrato_id) REFERENCES tblcontrato(fldcontrato_id),
2978 CONSTRAINT contrato_ftefinanejec_fk2 FOREIGN KEY(fldftefinanciacion_id) REFERENCES tblftefinanciacion(fldftefinanciacion_id),
2979 CONSTRAINT contrato_ftefinanejec_fk3 FOREIGN KEY(fldproyecto_id_act) REFERENCES tbdsigspaproyecto(fldproyecto_numero),
2980 CONSTRAINT contrato_ftefinanejec_fk4 FOREIGN KEY(fldcontratoseguimiento_id) REFERENCES tblcontratoseguimiento(fldcontratoseguimiento_id)
2981);
2982COMMENT ON TABLE tblcontrato_ftefinanejec IS 'Tabla para registrar los pagos en las entidades que manejan presupuesto por fuentes y proyectos hijos (actividades POAI)';
2983COMMENT ON COLUMN tblcontrato_ftefinanejec.fldcontrato_id IS 'Id del contrato asociado';
2984COMMENT ON COLUMN tblcontrato_ftefinanejec.fldcontratoseguimiento_id IS 'Id del seguimiento asociado';
2985COMMENT ON COLUMN tblcontrato_ftefinanejec.fldftefinanciacion_id IS 'Id de la fuente en la que se va a generar el pago';
2986COMMENT ON COLUMN tblcontrato_ftefinanejec.fldproyecto_id_act IS 'Id del proyecto que representa una actividad POAI';
2987COMMENT ON COLUMN tblcontrato_ftefinanejec.fldcontrato_ftefinanejec IS 'Valor del pago';
2988
2989--Se crea nueva columna en los estados del contrato (Jhonatan #3531)
2990ALTER TABLE tblcontratoestado ADD COLUMN fldcontratoestado_datosctto CHAR DEFAULT 'F' NOT NULL;
2991COMMENT ON COLUMN tblcontratoestado.fldcontratoestado_datosctto IS 'Determina si se muestra botón para agregar los datos del contrato desde un dialog(Número, CDP y registro presupuestal)';
2992
2993--Ajuste en nombre de actividades (#3792) (Yesid)
2994ALTER TABLE tbldocumento ALTER COLUMN flddocumento_nombre TYPE CHARACTER VARYING (4000);
2995ALTER TABLE tblproceso ALTER COLUMN fldproceso_nombre TYPE CHARACTER VARYING (4000);
2996
2997--Ajuste en formulario de administración de proceso (#3794) (Yesid)
2998INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
2999VALUES ('_PROCESO_MOSTRAR_CONFIGURACION','false','T');
3000
3001UPDATE tblparametro SET fldparametro_valor='true'
3002WHERE fldparametro_nombre='_PROCESO_MOSTRAR_CONFIGURACION' AND
3003 (SELECT 'x' FROM tblproceso WHERE LENGTH(fldproceso_configuracion)>5
3004 UNION
3005 SELECT 'x' FROM tblproceso WHERE LENGTH(fldproceso_url)>5
3006 ) IS NOT NULL;
3007
3008--Script para migrar campos nativos de eventos riesgo a campos adicionales (Jhonatan #3692)
3009DO language plpgsql $$
3010DECLARE
3011 -- Script que registre un campo adicional de ubicacion Identificación en aquellos tipos de evento que tengan el atributo "Tiene lugar" activo
3012
3013 tipo tbleventotipo%ROWTYPE;
3014 grupo_id INTEGER;
3015 grupo_codigo INTEGER;
3016 clase tbleventoclaseacc%ROWTYPE;
3017 agente tbleventoagenteacc%ROWTYPE;
3018 tipoacc tbleventotipoacc%ROWTYPE;
3019 tiene_opciones BOOLEAN;
3020 campo_id INTEGER;
3021 campo_orden INTEGER;
3022 campo_codigo CHARACTER VARYING;
3023 -- Almacena la relacion entre los id de las clases(tambien agentes y tipos) de accidentes y los campos adicionales
3024 vec_clases INT2[];
3025 vec_agentes INT2[];
3026 vec_tiposacc INT2[];
3027
3028BEGIN
3029 -- Obtiene los tipos de evento a los cuales se les va crear el campo adicional
3030 FOR tipo IN
3031 SELECT et.* FROM tbleventotipo et
3032 WHERE EXISTS (
3033 SELECT 'X' FROM tbleventoriesgo er
3034 WHERE er.fldeventotipo_id = et.fldeventotipo_id AND er.fldeventoriesgo_et IS NULL
3035 AND (er.fldeventoclaseacc_id IS NOT NULL OR er.fldeventoagenteacc_id IS NOT NULL OR er.fldeventotipoacc_id IS NOT NULL)
3036 )
3037 LOOP
3038
3039 SELECT COALESCE(MAX(fldcampoadicionalgrupo_codigo), 0) + 1 INTO grupo_codigo
3040 FROM tblcampoadicionalgrupo WHERE fldcampoadicionalgrupo_clase = 'eventoRiesgoTipo' AND fldcampoadicionalgrupo_claseid = tipo.fldeventotipo_id;
3041
3042 -- Se crea el nuevo agrupador
3043 INSERT INTO tblcampoadicionalgrupo(fldcampoadicionalgrupo_codigo, fldcampoadicionalgrupo_nombre, fldcampoadicionalgrupo_clase, fldcampoadicionalgrupo_claseid, fldcampoadicionalgrupo_ubica)
3044 VALUES (grupo_codigo, 'Información del accidente', 'eventoRiesgoTipo', tipo.fldeventotipo_id, 'evento');
3045
3046 grupo_id = currval('campoadicionalgrupo_id_seq');
3047
3048 /*
3049 * Se crean los tres campos adicionales tipo SMU. Si tienen opciones registradas.
3050 */
3051
3052 -- CLASES
3053 tiene_opciones = true;
3054 campo_orden = 1;
3055 FOR clase IN SELECT * FROM tbleventoclaseacc WHERE fldeventotipo_id = tipo.fldeventotipo_id
3056 LOOP
3057 -- El insert SOLO se realiza en la primera iteracion
3058 IF tiene_opciones THEN
3059 INSERT INTO tblcampoadicional(fldcampoadicional_codigo, fldcampoadicional_nombre, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_ubicacion, fldcampoadicional_tipodato, fldcampoadicionalgrupo_id)
3060 VALUES ('1', 'Clase', 'eventoRiesgoTipo', tipo.fldeventotipo_id, 'evento', 'smu', grupo_id);
3061 campo_id = currval('campoadicional_id_seq');
3062 tiene_opciones = false;
3063 END IF;
3064
3065 -- Como el codigo del item es obligatorio se debe generar uno en caso de no estar definido
3066 campo_codigo = clase.fldeventoclaseacc_codigo;
3067 IF clase.fldeventoclaseacc_codigo IS NULL THEN
3068 campo_codigo = campo_id ||'_'|| campo_orden;
3069 END IF;
3070
3071 INSERT INTO tblcampoadicionalitem (fldcampoadicionalitem_nombre, fldcampoadicionalitem_codigo, fldcampoadicionalitem_orden, fldcampoadicional_id)
3072 VALUES (clase.fldeventoclaseacc_nombre, campo_codigo, campo_orden, campo_id);
3073
3074 vec_clases[clase.fldeventoclaseacc_id] = currval('campoadicionalitem_id_seq');
3075 campo_orden = campo_orden + 1;
3076
3077 END LOOP;
3078
3079 -- Si tiene_opciones es 'false' es porque si tenia clases de accidentes
3080 IF (NOT tiene_opciones) THEN
3081 INSERT INTO tblcampovlritem_evenrsg(fldcampoadicional_id, fldeventoriesgo_id, fldcampoadicionalitem_id)
3082 SELECT campo_id, er.fldeventoriesgo_id, vec_clases[er.fldeventoclaseacc_id] FROM tbleventoriesgo er
3083 WHERE er.fldeventotipo_id = tipo.fldeventotipo_id AND er.fldeventoriesgo_et IS NULL AND er.fldeventoclaseacc_id IS NOT NULL;
3084 END IF;
3085 -- FIN CLASES
3086
3087
3088 -- AGENTES
3089 tiene_opciones = true;
3090 campo_orden = 1;
3091 FOR agente IN SELECT * FROM tbleventoagenteacc WHERE fldeventotipo_id = tipo.fldeventotipo_id
3092 LOOP
3093 -- El insert SOLO se realiza en la primera iteracion
3094 IF tiene_opciones THEN
3095 INSERT INTO tblcampoadicional(fldcampoadicional_codigo, fldcampoadicional_nombre, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_ubicacion, fldcampoadicional_tipodato, fldcampoadicionalgrupo_id)
3096 VALUES ('2', 'Agente', 'eventoRiesgoTipo', tipo.fldeventotipo_id, 'evento', 'smu', grupo_id);
3097 campo_id = currval('campoadicional_id_seq');
3098 tiene_opciones = false;
3099 END IF;
3100
3101 -- Como el codigo del item es obligatorio se debe generar uno en caso de no estar definido
3102 campo_codigo = agente.fldeventoagenteacc_codigo;
3103 IF agente.fldeventoagenteacc_codigo IS NULL THEN
3104 campo_codigo = campo_id ||'_'|| campo_orden;
3105 END IF;
3106
3107 INSERT INTO tblcampoadicionalitem (fldcampoadicionalitem_nombre, fldcampoadicionalitem_codigo, fldcampoadicionalitem_orden, fldcampoadicional_id)
3108 VALUES (agente.fldeventoagenteacc_nombre, campo_codigo, campo_orden, campo_id);
3109
3110 vec_agentes[agente.fldeventoagenteacc_id] = currval('campoadicionalitem_id_seq');
3111 campo_orden = campo_orden + 1;
3112
3113 END LOOP;
3114
3115 -- Si tiene_opciones es 'false' es porque si tenia agentes de accidentes
3116 IF (NOT tiene_opciones) THEN
3117 INSERT INTO tblcampovlritem_evenrsg(fldcampoadicional_id, fldeventoriesgo_id, fldcampoadicionalitem_id)
3118 SELECT campo_id, er.fldeventoriesgo_id, vec_agentes[er.fldeventoagenteacc_id] FROM tbleventoriesgo er
3119 WHERE er.fldeventotipo_id = tipo.fldeventotipo_id AND er.fldeventoriesgo_et IS NULL AND er.fldeventoagenteacc_id IS NOT NULL;
3120 END IF;
3121 -- FIN AGENTES
3122
3123
3124 -- TIPOS
3125 tiene_opciones = true;
3126 campo_orden = 1;
3127 FOR tipoacc IN SELECT * FROM tbleventotipoacc WHERE fldeventotipo_id = tipo.fldeventotipo_id
3128 LOOP
3129 -- El insert SOLO se realiza en la primera iteracion
3130 IF tiene_opciones THEN
3131 INSERT INTO tblcampoadicional(fldcampoadicional_codigo, fldcampoadicional_nombre, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_ubicacion, fldcampoadicional_tipodato, fldcampoadicionalgrupo_id)
3132 VALUES ('3','Tipo', 'eventoRiesgoTipo', tipo.fldeventotipo_id, 'evento', 'smu', grupo_id);
3133 campo_id = currval('campoadicional_id_seq');
3134 tiene_opciones = false;
3135 END IF;
3136
3137 -- Como el codigo del item es obligatorio se debe generar uno en caso de no estar definido
3138 campo_codigo = tipoacc.fldeventotipoacc_codigo;
3139 IF tipoacc.fldeventotipoacc_codigo IS NULL THEN
3140 campo_codigo = campo_id ||'_'|| campo_orden;
3141 END IF;
3142
3143 INSERT INTO tblcampoadicionalitem (fldcampoadicionalitem_nombre, fldcampoadicionalitem_codigo, fldcampoadicionalitem_orden, fldcampoadicional_id)
3144 VALUES (tipoacc.fldeventotipoacc_nombre, campo_codigo, campo_orden, campo_id);
3145
3146 vec_tiposacc[tipoacc.fldeventotipoacc_id] = currval('campoadicionalitem_id_seq');
3147 campo_orden = campo_orden + 1;
3148
3149 END LOOP;
3150
3151 -- Si tiene_opciones es 'false' es porque si tenia tipos de accidentes
3152 IF (NOT tiene_opciones) THEN
3153 INSERT INTO tblcampovlritem_evenrsg(fldcampoadicional_id, fldeventoriesgo_id, fldcampoadicionalitem_id)
3154 SELECT campo_id, er.fldeventoriesgo_id, vec_tiposacc[er.fldeventotipoacc_id] FROM tbleventoriesgo er
3155 WHERE er.fldeventotipo_id = tipo.fldeventotipo_id AND er.fldeventoriesgo_et IS NULL AND er.fldeventotipoacc_id IS NOT NULL;
3156 END IF;
3157 -- FIN TIPOS
3158
3159 END LOOP;
3160END;$$;
3161
3162
3163--Septiembre 06 de 2017
3164--Ajuste en campo Codigo para eventos (#3810) (Yesid)
3165ALTER TABLE tbleventoriesgo ALTER fldeventoriesgo_codigo TYPE character varying(1000);
3166
3167--Se agrega columna en usuarios (Diego)
3168ALTER TABLE tblusuario ADD fldusuario_autenticacionmfa CHAR(1) DEFAULT 'F' NOT NULL;
3169COMMENT ON COLUMN tblusuario.fldusuario_autenticacionmfa IS 'Activa la opción de autenticación MFA para el usuario';
3170ALTER TABLE tblusuario ADD fldusuario_secretauthenticator character varying;
3171COMMENT ON COLUMN tblusuario.fldusuario_secretauthenticator IS 'Clave secreta para comparar ante authenticator';
3172
3173--Nuevo atributo en tipos de evento (Jhonatan #3776)
3174INSERT INTO tbltipoeventoconfig (fldeventotipo_id, fldtipoeventoconfig_nombre, fldtipoeventoconfig_valor)
3175SELECT fldeventotipo_id, 'CALCULAR_EDAD', 'false' FROM tbleventotipo;
3176
3177
3178--Septiembre 05 de 2017
3179--Constante autenticación multifactor (Diego#3778)
3180INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante) VALUES
3181('_AUTENTICACION_MULTIFACTOR', 'false', 'T');
3182ALTER TABLE tblusuariodispositivo ALTER COLUMN fldusuariodispositivo_ip DROP NOT NULL;
3183INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante) VALUES
3184('_AUTENTICACION_MULTIFACTOR_SMS', 'false', 'T');
3185
3186--Septiembre 07 de 2017
3187--Depuración en tipos de eventos (Jhonatan #3808)
3188
3189--Código para bitacora de MFA (Diego)
3190INSERT INTO tbleventobitacora (fldeventobitacora_codigo, fldeventobitacora_actividad, fldeventobitacoranivel_id)
3191VALUES ('SGI-MFA-01', 'Registro exitoso mediante MFA', 1);
3192
3193--Septiembre 08 de 2017
3194--Campos adicionales dependientes (Néstor)(Issue#3774)
3195ALTER TABLE tblcampoadicional ADD fldcampoadicional_tienehijos CHAR(1) DEFAULT 'F' NOT NULL;
3196COMMENT ON COLUMN tblcampoadicional.fldcampoadicional_tienehijos IS 'Determina si el campo adicional tiene hijos';
3197
3198UPDATE tblcampoadicional SET fldcampoadicional_ubicacion = 'reunion' WHERE fldcampoadicional_padre = 'tipoReunion'
3199 AND fldcampoadicional_clasif = 'reunion'
3200 AND (fldcampoadicional_ubicacion IS NULL OR fldcampoadicional_ubicacion='');
3201
3202--Actualización actividad bitacora (Diego)
3203UPDATE tbleventobitacora SET fldeventobitacora_actividad='Login mediante MFA' WHERE fldeventobitacora_codigo='SGI-MFA-01';
3204
3205--Depuración de campos adicionales asociados a tipos de evento no existentes (Néstor)(Issue#3791)
3206DELETE FROM tblcampovlrdate_evenrsg WHERE fldcampoadicional_id IN(
3207 SELECT ca.fldcampoadicional_id
3208 FROM tblcampoadicional ca
3209 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3210 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3211 AND et.fldeventotipo_id IS NULL
3212);
3213
3214DELETE FROM tblcampovlrdate_evsasignacion WHERE fldcampoadicional_id IN(
3215 SELECT ca.fldcampoadicional_id
3216 FROM tblcampoadicional ca
3217 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3218 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3219 AND et.fldeventotipo_id IS NULL
3220);
3221
3222DELETE FROM tblcampovlrdate_evtocom WHERE fldcampoadicional_id IN(
3223 SELECT ca.fldcampoadicional_id
3224 FROM tblcampoadicional ca
3225 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3226 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3227 AND et.fldeventotipo_id IS NULL
3228);
3229
3230
3231DELETE FROM tblcampovlrdouble_evenrsg WHERE fldcampoadicional_id IN(
3232 SELECT ca.fldcampoadicional_id
3233 FROM tblcampoadicional ca
3234 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3235 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3236 AND et.fldeventotipo_id IS NULL
3237);
3238
3239DELETE FROM tblcampovlrdouble_evsasignacion WHERE fldcampoadicional_id IN(
3240 SELECT ca.fldcampoadicional_id
3241 FROM tblcampoadicional ca
3242 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3243 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3244 AND et.fldeventotipo_id IS NULL
3245);
3246
3247DELETE FROM tblcampovlrdouble_evtocom WHERE fldcampoadicional_id IN(
3248 SELECT ca.fldcampoadicional_id
3249 FROM tblcampoadicional ca
3250 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3251 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3252 AND et.fldeventotipo_id IS NULL
3253);
3254
3255
3256DELETE FROM tblcampovlritem_evenrsg WHERE fldcampoadicional_id IN(
3257 SELECT ca.fldcampoadicional_id
3258 FROM tblcampoadicional ca
3259 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3260 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3261 AND et.fldeventotipo_id IS NULL
3262);
3263
3264DELETE FROM tblcampovlritem_evsasignacion WHERE fldcampoadicional_id IN(
3265 SELECT ca.fldcampoadicional_id
3266 FROM tblcampoadicional ca
3267 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3268 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3269 AND et.fldeventotipo_id IS NULL
3270);
3271
3272DELETE FROM tblcampovlritem_evtocom WHERE fldcampoadicional_id IN(
3273 SELECT ca.fldcampoadicional_id
3274 FROM tblcampoadicional ca
3275 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3276 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3277 AND et.fldeventotipo_id IS NULL
3278);
3279
3280
3281DELETE FROM tblcampovlrstring_evenrsg WHERE fldcampoadicional_id IN(
3282 SELECT ca.fldcampoadicional_id
3283 FROM tblcampoadicional ca
3284 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3285 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3286 AND et.fldeventotipo_id IS NULL
3287);
3288
3289DELETE FROM tblcampovlrstring_evsasignacion WHERE fldcampoadicional_id IN(
3290 SELECT ca.fldcampoadicional_id
3291 FROM tblcampoadicional ca
3292 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3293 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3294 AND et.fldeventotipo_id IS NULL
3295);
3296
3297DELETE FROM tblcampovlrstring_evtocom WHERE fldcampoadicional_id IN(
3298 SELECT ca.fldcampoadicional_id
3299 FROM tblcampoadicional ca
3300 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3301 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3302 AND et.fldeventotipo_id IS NULL
3303);
3304
3305
3306DELETE FROM tblcampovlrtext_evenrsg WHERE fldcampoadicional_id IN(
3307 SELECT ca.fldcampoadicional_id
3308 FROM tblcampoadicional ca
3309 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3310 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3311 AND et.fldeventotipo_id IS NULL
3312);
3313
3314DELETE FROM tblcampovlrtext_evsasignacion WHERE fldcampoadicional_id IN(
3315 SELECT ca.fldcampoadicional_id
3316 FROM tblcampoadicional ca
3317 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3318 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3319 AND et.fldeventotipo_id IS NULL
3320);
3321
3322DELETE FROM tblcampovlrtext_evtocom WHERE fldcampoadicional_id IN(
3323 SELECT ca.fldcampoadicional_id
3324 FROM tblcampoadicional ca
3325 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3326 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3327 AND et.fldeventotipo_id IS NULL
3328);
3329
3330DELETE FROM tblcampoadicionalitem_padre WHERE fldcampoadicionalitempadre_id IN (
3331 SELECT fldcampoadicionalitem_id FROM tblcampoadicionalitem WHERE fldcampoadicional_id IN (
3332 SELECT ca.fldcampoadicional_id
3333 FROM tblcampoadicional ca
3334 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3335 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3336 AND et.fldeventotipo_id IS NULL
3337 )
3338)
3339OR fldcampoadicionalitemhijo_id IN (
3340 SELECT fldcampoadicionalitem_id FROM tblcampoadicionalitem WHERE fldcampoadicional_id IN (
3341 SELECT ca.fldcampoadicional_id
3342 FROM tblcampoadicional ca
3343 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3344 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3345 AND et.fldeventotipo_id IS NULL
3346 )
3347);
3348
3349DELETE FROM tblcampoadicionalitem WHERE fldcampoadicional_id IN(
3350 SELECT ca.fldcampoadicional_id
3351 FROM tblcampoadicional ca
3352 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3353 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3354 AND et.fldeventotipo_id IS NULL
3355);
3356
3357DELETE FROM tblcampoadicional WHERE fldcampoadicional_id IN(
3358 SELECT ca.fldcampoadicional_id
3359 FROM tblcampoadicional ca
3360 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = ca.fldcampoadicional_padre_id
3361 WHERE ca.fldcampoadicional_padre = 'eventoRiesgoTipo'
3362 AND et.fldeventotipo_id IS NULL
3363);
3364
3365DELETE FROM tblcampoadicionalgrupo WHERE fldcampoadicionalgrupo_id IN (
3366 SELECT cg.fldcampoadicionalgrupo_id
3367 FROM tblcampoadicionalgrupo cg
3368 LEFT OUTER JOIN tbleventotipo et ON et.fldeventotipo_id = cg.fldcampoadicionalgrupo_claseid
3369 WHERE cg.fldcampoadicionalgrupo_clase = 'eventoRiesgoTipo'
3370 AND et.fldeventotipo_id IS NULL
3371);
3372
3373-- Se adiciona columna en documentos para fecha de vencimiento (Jhonatan #3808)
3374INSERT INTO tbltipodocumentoconfig (fldtipodocumento_id, fldtipodocumentoconfig_nombre, fldtipodocumentoconfig_valor)
3375(SELECT DISTINCT t.fldtipodocumento_id, 'DIAS_VENCIMIENTO', NULL FROM tbltipodocumentoconfig c
3376INNER JOIN tbltipodocumento t ON t.fldtipodocumento_id=c.fldtipodocumento_id
3377WHERE t.fldtipodocumento_manejador = 'DOC');
3378
3379INSERT INTO tbltipodocumentoconfig (fldtipodocumento_id, fldtipodocumentoconfig_nombre, fldtipodocumentoconfig_valor)
3380(SELECT DISTINCT t.fldtipodocumento_id, 'DIAS_VENCIMIENTO', NULL FROM tbltipodocumentoconfig c
3381INNER JOIN tbltipodocumento t ON t.fldtipodocumento_id=c.fldtipodocumento_id
3382WHERE t.fldtipodocumento_manejador = 'PRO');
3383
3384ALTER TABLE tblclasedocumento ADD fldclasedocumento_dias_vencto INTEGER;
3385COMMENT ON COLUMN tblclasedocumento.fldclasedocumento_dias_vencto IS 'Cantidad de dÃas para el vencimiento de los documentos asociados';
3386
3387ALTER TABLE tbldocumento ADD flddocumento_fecha_vencimiento DATE;
3388COMMENT ON COLUMN tbldocumento.flddocumento_fecha_vencimiento IS 'Fecha de vencimiento del documento';
3389
3390
3391--Septiembre 11 de 2017
3392--Migración de calificación de controlesRiesgo a campos adicionale (Jhonatan #3827)
3393DO language plpgsql $$
3394DECLARE
3395
3396 -- Script que registre un campo adicional de ubicación Identificación en aquellos tipos de evento que tengan el atributo "Tiene lugar" activo
3397
3398 tipo tblsistemariesgo%ROWTYPE;
3399 calificacion tblcalcontrol%ROWTYPE;
3400 grupo_id INTEGER;
3401 campo_id INTEGER;
3402 tiene_items BOOLEAN;
3403 campo_orden INTEGER;
3404 campo_codigo CHARACTER VARYING;
3405 -- Almacena la relacion entre los id de las calificaciones y los items de los campos adicionales
3406 vec_calificaciones INT2[];
3407
3408BEGIN
3409 -- Obtiene los tipos de evento a los cuales se les va crear el campo adicional
3410 FOR tipo IN
3411 SELECT * FROM tblsistemariesgo WHERE fldsistemariesgo_ctrltcalifs = 'T'
3412 LOOP
3413
3414 -- Se obtiene el Id del ultimo grupo
3415 SELECT fldcampoadicionalgrupo_id INTO grupo_id FROM tblcampoadicionalgrupo
3416 WHERE fldcampoadicionalgrupo_clase = 'sistemaRiesgo' AND fldcampoadicionalgrupo_claseid = tipo.fldsistemariesgo_id AND fldcampoadicionalgrupo_ubica = 'riesgoControl'
3417 ORDER BY fldcampoadicionalgrupo_codigo DESC LIMIT 1;
3418
3419 -- Se crea el campo de tipo SMU
3420 INSERT INTO tblcampoadicional(fldcampoadicional_codigo, fldcampoadicional_nombre, fldcampoadicional_padre, fldcampoadicional_padre_id, fldcampoadicional_clasif, fldcampoadicional_tipodato, fldcampoadicionalgrupo_id)
3421 VALUES ('33', 'Calificación', 'sistemaRiesgo', tipo.fldsistemariesgo_id, 'riesgoControl', 'smu', grupo_id);
3422 campo_id = currval('campoadicional_id_seq');
3423
3424 /*
3425 * Se crean los tres campos adicionales tipo SMU. Si tienen opciones registradas.
3426 */
3427
3428 -- CALIFICACIONES
3429 tiene_items = false;
3430 campo_orden = 1;
3431 FOR calificacion IN SELECT * FROM tblcalcontrol ORDER BY fldcalcontrol_codigo ASC
3432 LOOP
3433
3434 tiene_items = true;
3435 -- Como el codigo del item es obligatorio se debe generar uno en caso de no estar definido
3436 campo_codigo = calificacion.fldcalcontrol_codigo;
3437 IF calificacion.fldcalcontrol_codigo IS NULL THEN
3438 campo_codigo = campo_id ||'_'|| campo_orden;
3439 END IF;
3440
3441 INSERT INTO tblcampoadicionalitem (fldcampoadicionalitem_nombre, fldcampoadicionalitem_codigo, fldcampoadicionalitem_orden, fldcampoadicional_id)
3442 VALUES (calificacion.fldcalcontrol_nombre, campo_codigo, campo_orden, campo_id);
3443
3444 vec_calificaciones[calificacion.fldcalcontrol_id] = currval('campoadicionalitem_id_seq');
3445 campo_orden = campo_orden + 1;
3446
3447 END LOOP;
3448
3449 -- Si tiene_opciones es 'false' es porque si tenia clases de accidentes
3450 IF tiene_items THEN
3451 INSERT INTO tblcampovlritem_riesgoctrl(fldcampoadicional_id, fldriesgocontrol_id, fldcampoadicionalitem_id)
3452 SELECT campo_id, c.fldriesgocontrol_id, vec_calificaciones[c.fldcalcontrol_id] FROM tblriesgocontrol c
3453 WHERE c.fldcalcontrol_id IS NOT NULL AND c.fldsistemariesgo_id = tipo.fldsistemariesgo_id;
3454 END IF;
3455 -- FIN CALIFICACIONES
3456
3457 END LOOP;
3458END;$$;
3459
3460--
3461ALTER TABLE tblriesgocontrol DROP COLUMN fldcalcontrol_id;
3462ALTER TABLE tblsistemariesgo DROP COLUMN fldsistemariesgo_ctrltcalifs;
3463
3464DROP TABLE tblcalcontrol;
3465DELETE FROM tblparametro WHERE fldparametro_nombre = '_RIETIQUETA_CALIFICACION_CONTROL';
3466
3467--Septiembre 12 de 2017
3468--Nueva constante de configuración de indicadores (Jhonatan #3833)
3469INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
3470VALUES ('_INDICADOR_CALCULAR_METAS', 'FALSE', 'T');
3471
3472--Constante y campos para análisis de eventos (Néstor)(Issue#3861)
3473INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
3474VALUES ('_EVENTOS_HABILITAR_TECNICAS', 'false', 'T');
3475
3476ALTER TABLE tbleventotipo ADD fdleventotipo_habiltartecnicas CHAR(1) DEFAULT 'F' NOT NULL;
3477COMMENT ON COLUMN tbleventotipo.fdleventotipo_habiltartecnicas IS 'Determina si se habilitará el análisis en eventos';
3478
3479ALTER TABLE tbleventoriesgo ADD fldatntecnica_id INTEGER;
3480ALTER TABLE tbleventoriesgo ADD CONSTRAINT eventoriesgo_tecnica_fk FOREIGN KEY (fldatntecnica_id) REFERENCES tblatntecnica (fldatntecnica_id);
3481COMMENT ON COLUMN tbleventoriesgo.fldatntecnica_id IS 'Técnica de análisis asociada al evento';
3482
3483
3484--Septiembre 14 de 2017
3485--Constante y campos para análisis en riesgos (Néstor)(Issue#3883)
3486INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
3487VALUES ('_RIESGOS_HABILITAR_TECNICAS', 'false', 'T');
3488
3489ALTER TABLE tblatntecnica ADD fldatntecnica_aplicariesgos CHAR(1) DEFAULT 'T' NOT NULL;
3490COMMENT ON COLUMN tblatntecnica.fldatntecnica_aplicariesgos IS 'Determina si la técnica de análisis aplica para riesgos';
3491
3492ALTER TABLE tblsistemariesgo ADD fldsistemariesgo_htecnicas CHAR(1) DEFAULT 'F' NOT NULL;
3493COMMENT ON COLUMN tblsistemariesgo.fldsistemariesgo_htecnicas IS 'Determina si se habilitará el análisis de riesgos';
3494
3495ALTER TABLE tblriesgo ADD fldatntecnica_id INTEGER;
3496ALTER TABLE tblriesgo ADD CONSTRAINT riesgo_tecnica_fk FOREIGN KEY (fldatntecnica_id) REFERENCES tblatntecnica (fldatntecnica_id);
3497COMMENT ON COLUMN tblriesgo.fldatntecnica_id IS 'Técnica de análisis asociada al riesgo';
3498
3499-- Septiembre 06 de 2017
3500-- Ajuste en funciones de avance de indicadores e item plan (Jhonatan #3757)
3501DROP FUNCTION IF EXISTS ind_obtenermedicionfecha(integer, character, date, character);
3502
3503CREATE OR REPLACE FUNCTION ind_obtenermedicionfecha(indicador_id integer, atributo character, fecha date, estricto character, forzar_continuo character)
3504 RETURNS double precision AS
3505$BODY$
3506
3507--
3508--Función para obtener el valor/meta de una medición de un indicador en una fecha determinada
3509-- @author Cristian Gómez Alvarez <cristianpark@gmail.com>
3510-- @fecha Agosto 22 de 2012
3511--
3512-- @param integer indicador_id: ID del indicador para el que se obtiene el dato de la medición
3513-- @param char(5) atributo: Atributo a obtener (valor, meta)
3514-- @param date fecha: Fecha para la que se obtiene el dato de la medición
3515-- @param char(1) estricto: Determina si se debe obtener la medición estrictamente para la fecha
3516-- @return double precision valor: Valor que tiene el atributo en la medición de la fecha
3517--
3518-- Modificaciones:
3519-- - Enero 19 de 2016 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
3520-- Se ajusta para que se obtenga la meta cuando en la medición no hay valor y el semáforo se calcula con el valor acumulado
3521--
3522
3523DECLARE
3524 valor double precision; --Valor/meta de la medición obtenida
3525 continuo char(1); --Determina si el indicador es continuo o no
3526 tiposemaforovalor char(2); --Tipo de semaforo
3527BEGIN
3528 valor:=null;
3529
3530 --Determinar si el indicador es continuo o no
3531 SELECT fldindicador_continuo, fldindicador_vlrsemaforo INTO continuo, tiposemaforovalor FROM tblindicador
3532 WHERE fldindicador_id=indicador_id;
3533
3534 IF atributo='valor' THEN --Se obtiene el valor de la medición
3535 SELECT m.fldmedicion_valor INTO valor
3536 FROM tblmedicion m
3537 INNER JOIN tblindicador i ON (m.fldindicador_id=i.fldindicador_id)
3538 WHERE i.fldindicador_id=indicador_id AND
3539 m.fldindicador_periodicidad=i.fldindicador_periodicidad AND
3540 m.fldmedicion_et IS NULL AND
3541 m.fldmedicion_valor IS NOT NULL
3542 AND (m.fldmedicion_fechainicioperiodo<=fecha
3543 AND m.fldmedicion_fechafinperiodo>=fecha);
3544
3545 --Si no habÃa valor y se permite buscar en mediciones pasadas, se obtiene el valor inmediatamente anterior
3546 IF valor IS NULL AND (forzar_continuo='T' OR (estricto='F' AND continuo='T')) THEN
3547 SELECT m.fldmedicion_valor INTO valor
3548 FROM tblmedicion m
3549 INNER JOIN tblindicador i ON (m.fldindicador_id=i.fldindicador_id)
3550 WHERE i.fldindicador_id=indicador_id AND
3551 m.fldindicador_periodicidad=i.fldindicador_periodicidad AND
3552 m.fldmedicion_et IS NULL AND
3553 m.fldmedicion_valor IS NOT NULL
3554 AND m.fldmedicion_fechainicioperiodo<=fecha
3555 ORDER BY m.fldmedicion_fechainicioperiodo DESC
3556 LIMIT 1;
3557 END IF;
3558 ELSE --Se obtiene la meta de la medición
3559 SELECT m.fldmedicion_meta INTO valor
3560 FROM tblmedicion m
3561 INNER JOIN tblindicador i ON (m.fldindicador_id=i.fldindicador_id)
3562 WHERE i.fldindicador_id=indicador_id AND
3563 m.fldindicador_periodicidad=i.fldindicador_periodicidad AND
3564 m.fldmedicion_et IS NULL AND
3565 m.fldmedicion_valor IS NOT NULL
3566 AND (m.fldmedicion_fechainicioperiodo<=fecha
3567 AND m.fldmedicion_fechafinperiodo>=fecha);
3568
3569 --Si no se tiene valor y para el semáforo se tiene el valor acumulado, se obtiene la meta para la fecha
3570 IF valor IS NULL AND tiposemaforovalor='VA' THEN
3571 SELECT m.fldmedicion_meta INTO valor
3572 FROM tblmedicion m
3573 INNER JOIN tblindicador i ON (m.fldindicador_id=i.fldindicador_id)
3574 WHERE i.fldindicador_id=indicador_id AND
3575 m.fldindicador_periodicidad=i.fldindicador_periodicidad AND
3576 m.fldmedicion_et IS NULL
3577 AND (m.fldmedicion_fechainicioperiodo<=fecha
3578 AND m.fldmedicion_fechafinperiodo>=fecha);
3579 END IF;
3580
3581 --Si no habÃa valor y se permite buscar en mediciones pasadas, se obtiene el valor inmediatamente anterior
3582 IF valor IS NULL AND estricto='F' AND continuo='T' THEN
3583 SELECT m.fldmedicion_meta INTO valor
3584 FROM tblmedicion m
3585 INNER JOIN tblindicador i ON (m.fldindicador_id=i.fldindicador_id)
3586 WHERE i.fldindicador_id=indicador_id AND
3587 m.fldindicador_periodicidad=i.fldindicador_periodicidad AND
3588 m.fldmedicion_et IS NULL AND
3589 m.fldmedicion_valor IS NOT NULL
3590 AND m.fldmedicion_fechainicioperiodo<=fecha
3591 ORDER BY m.fldmedicion_fechainicioperiodo DESC
3592 LIMIT 1;
3593 END IF;
3594
3595 --Si no habÃa valor y se permite buscar en mediciones pasadas, se obtiene el valor inmediatamente anterior
3596 IF valor IS NULL AND (forzar_continuo='T' OR (estricto='F' AND continuo='T')) THEN
3597 SELECT m.fldmedicion_meta INTO valor
3598 FROM tblmedicion m
3599 INNER JOIN tblindicador i ON (m.fldindicador_id=i.fldindicador_id)
3600 WHERE i.fldindicador_id=indicador_id AND
3601 m.fldindicador_periodicidad=i.fldindicador_periodicidad AND
3602 m.fldmedicion_et IS NULL AND
3603 m.fldmedicion_valor IS NOT NULL
3604 AND m.fldmedicion_fechainicioperiodo<=fecha
3605 ORDER BY m.fldmedicion_fechainicioperiodo DESC
3606 LIMIT 1;
3607 END IF;
3608 END IF;
3609RETURN valor; --Retornar el valor o meta
3610
3611END;$BODY$
3612 LANGUAGE plpgsql VOLATILE
3613 COST 100;
3614
3615--------------------------------------------------------------------------------------------
3616
3617
3618CREATE OR REPLACE FUNCTION ind_calcularcalificacion(indicador_id integer, fecha date, acumular_valores character, estricto character, itemplan_id integer, anio integer)
3619 RETURNS double precision AS
3620$BODY$
3621
3622--Función que calcula el avance de un indicador con base a su meta y última medición
3623-- @author Jorge Ivan Franco Hoyos - jorgeun@gmail.com
3624-- @fecha Junio 06 de 2013
3625-- @param integer indicador_id: ID del indicador del que se desea obtener la calificación
3626-- @param date fecha: Fecha para la que se debe obtener la calificación para el indicador
3627-- @param char(1) acumular_valores: Define cómo se deben acumular los valores. N: No aplica (se usan valores de semaforización)
3628-- A: Acumular por año (se acumulan los valores por año)
3629-- P: Acumular por periodo (se acumulan los valores por periodo definido, si hay metas estacionales)
3630-- @param char(1) estricto: Determina si se debe obtener la medición estrictamente para la fecha (si llega)
3631-- @param integer itemplan_id: Id del item plan
3632-- Modificaciones:
3633-- - Septiembre 25 de 2014 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
3634-- Se agrega verificación para que la calificación no supere el tope definido para el indicador
3635--
3636-- Modificaciones:
3637-- - Mayo 03 de 2016 por Jhonatan Chiquito <jchiquito@almeraim.com>
3638-- Se eliminan los llamados a la columna fldindicador_tope de tblindicador
3639
3640DECLARE
3641 calificacion FLOAT;
3642 semrojo FLOAT;
3643 semamarillo FLOAT;
3644 tipometa CHAR(1);
3645 proposito CHAR(10);
3646 acumulacion CHAR(3);
3647 valor FLOAT;
3648 valoracumulado FLOAT;
3649 valoracumuladometa FLOAT;
3650 valormedicion FLOAT;
3651 fechamedicion date;
3652 fecha_acumula date;
3653 metaindicador FLOAT;
3654 metamedicion FLOAT;
3655 metaestacional FLOAT;
3656 metaeperiodo FLOAT;
3657 meta FLOAT;
3658 tope FLOAT;
3659 topeXAnios INTEGER;
3660
3661 vlrsemaforo CHAR(2);
3662 metasemaforo CHAR(2);
3663
3664 regmedicion tblmedicion%ROWTYPE;
3665 todos_periodos CHAR(1); --Determina si se deben acumular valores de todos los periodos
3666 valor_regla FLOAT;
3667BEGIN
3668
3669RAISE NOTICE 'IndicadorId: % Fecha: % AcumularValores: % Estricto: % ItemPlanId: % Anio: %', indicador_id, fecha, acumular_valores, estricto, itemplan_id, anio;
3670
3671SELECT ind_calcularregla(indicador_id, fecha, null, anio) INTO valor_regla;
3672IF valor_regla IS NOT NULL THEN
3673 return valor_regla;
3674END IF;
3675
3676calificacion:=null;
3677todos_periodos:='F';
3678IF acumular_valores='P' THEN --Si se acumulan los valores del periodo, el valor de todos_periodos es 'T'
3679 todos_periodos:='T';
3680END IF;
3681
3682
3683
3684--Se obtienen los datos del indicador a una fecha determinada o con la última medición
3685IF fecha IS NULL THEN
3686 valormedicion:=null;
3687 metamedicion:=null;
3688 fechamedicion:=now();
3689
3690 IF anio IS NOT NULL THEN
3691 fechamedicion := anio ||'-12-31';
3692
3693 --Se obtiene el registro de la última medición del indicador
3694 SELECT m.* INTO regmedicion
3695 FROM tblmedicion m
3696 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
3697 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
3698 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL AND EXTRACT(YEAR FROM m.fldmedicion_fechainicioperiodo) = anio
3699 ORDER BY fldmedicion_fechafinperiodo DESC
3700 LIMIT 1;
3701
3702 ELSE
3703 --Se obtiene el registro de la última medición del indicador
3704 SELECT m.* INTO regmedicion
3705 FROM tblmedicion m
3706 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
3707 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
3708 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL
3709 ORDER BY fldmedicion_fechafinperiodo DESC
3710 LIMIT 1;
3711 END IF;
3712
3713
3714 IF regmedicion.fldmedicion_id IS NOT NULL THEN
3715 valormedicion:=regmedicion.fldmedicion_valor;
3716 metamedicion:=regmedicion.fldmedicion_meta;
3717 fechamedicion:=regmedicion.fldmedicion_fechainicioperiodo;
3718 END IF;
3719
3720 --Obtener los datos adicionales del indicador
3721 SELECT i.fldindicador_semafororojo, i.fldindicador_semaforoamarillo, i.fldindicador_metaperiodica, UPPER(i.fldindicador_proposito),
3722 i.fldindicador_acumulacion, i.fldindicador_meta, i.fldindicador_vlrsemaforo, i.fldindicador_metasemaforo,
3723 ind_obteneracumuladofecha(i.fldindicador_id, TO_CHAR(fechamedicion, 'YYYY-MM-DD'), todos_periodos) as valoracumulado,
3724 ind_obteneracumuladometafecha(i.fldindicador_id, TO_CHAR(fechamedicion, 'YYYY-MM-DD'), todos_periodos) as valoracumuladometa,
3725 --Meta estacional
3726 (SELECT fldindicadormeta_valor
3727 FROM tblindicadormeta
3728 WHERE fldindicador_id=i.fldindicador_id
3729 AND fechamedicion BETWEEN fldindicadormeta_fi AND fldindicadormeta_ff
3730 ) as metaestacional,
3731 --Meta del periodo (cuatrenio por ejemplo)
3732 (SELECT ind_obteneracumuladometae(fldindicadormeta_id)
3733 FROM tblindicadormeta
3734 WHERE fldindicador_id=i.fldindicador_id AND fldindicadormeta_fi=(SELECT max(fldindicadormeta_fi) FROM tblindicadormeta WHERE fldindicador_id=i.fldindicador_id)
3735 ) as metaeperiodo
3736 INTO semrojo, semamarillo, tipometa, proposito, acumulacion, metaindicador, vlrsemaforo, metasemaforo, valoracumulado, valoracumuladometa, metaestacional, metaeperiodo
3737 FROM tblindicador i
3738 WHERE i.fldindicador_id=indicador_id;
3739ELSE
3740
3741 SELECT i.fldindicador_semafororojo, i.fldindicador_semaforoamarillo, i.fldindicador_metaperiodica, UPPER(i.fldindicador_proposito),
3742 i.fldindicador_acumulacion, i.fldindicador_meta, i.fldindicador_vlrsemaforo, i.fldindicador_metasemaforo,
3743 ind_obteneracumuladofecha(i.fldindicador_id, TO_CHAR(fecha, 'YYYY-MM-DD'), todos_periodos) as valoracumulado,
3744 ind_obteneracumuladometafecha(i.fldindicador_id, TO_CHAR(fecha, 'YYYY-MM-DD'), todos_periodos) as valoracumuladometa,
3745 (SELECT ind_obtenermedicionfecha(i.fldindicador_id, 'valor', fecha, estricto, 'T')) as valormedicion,
3746 (SELECT ind_obtenermedicionfecha(i.fldindicador_id, 'meta', fecha, estricto, 'T')) as metamedicion,
3747 --Meta estacional
3748 (SELECT fldindicadormeta_valor
3749 FROM tblindicadormeta
3750 WHERE fldindicador_id=i.fldindicador_id
3751 AND fecha BETWEEN fldindicadormeta_fi AND fldindicadormeta_ff
3752 ) as metaestacional,
3753 --Meta del periodo (cuatrenio por ejemplo)
3754 (SELECT ind_obteneracumuladometae(fldindicadormeta_id)
3755 FROM tblindicadormeta
3756 WHERE fldindicador_id=i.fldindicador_id AND fldindicadormeta_fi=(SELECT max(fldindicadormeta_fi) FROM tblindicadormeta WHERE fldindicador_id=i.fldindicador_id)
3757 ) as metaeperiodo
3758 INTO semrojo, semamarillo, tipometa, proposito, acumulacion, metaindicador, vlrsemaforo, metasemaforo, valoracumulado, valoracumuladometa, valormedicion, metamedicion, metaestacional, metaeperiodo
3759 FROM tblindicador i
3760 WHERE i.fldindicador_id=indicador_id;
3761END IF;
3762
3763RAISE NOTICE 'valormedicion % valoracumulado % valoracumuladometa % metaeperiodo % metaestacional % metamedicion %',valormedicion, valoracumulado,valoracumuladometa, metaeperiodo, metaestacional, metamedicion;
3764
3765--Valores por defecto
3766valor:=valormedicion;
3767meta:=null;
3768
3769--Se determina si se usa el valor acumulado o el de la medición
3770--si fldindicador_vlrsemaforo es V se toma el valor de la medición, si es VA se toma el valor acumulado,
3771--si fldindicador_metasemaforo esta en M se toma el valor de la meta, si es MA se toma el valor acumulado.
3772
3773--Se toma el acumulado si el indicador tiene método de acumulación definido y el valor de semáforo es acumultivo o el parámeto de acumular_valores es P o A
3774IF UPPER(acumulacion)!='NAC' AND (vlrsemaforo='VA' OR acumular_valores!='N') THEN
3775 valor:=valoracumulado;
3776END IF;
3777
3778
3779--Se determina qué meta se usa
3780IF tipometa = 'U' THEN
3781 IF metaindicador IS NOT NULL THEN
3782 meta:=metaindicador;
3783 END IF;
3784ELSIF tipometa='E' THEN --El indicador tiene metas estacionales
3785 IF todos_periodos='T' AND metaeperiodo IS NOT NULL THEN
3786 meta:=metaeperiodo; --Se utiliza la meta del periodo (ej: meta del cuatrenio)
3787 ELSIF metaestacional IS NOT NULL THEN
3788 meta:=metaestacional;
3789 END IF;
3790ELSIF tipometa='N' THEN --El indicador tiene seleccionado 'Sin meta'
3791 meta:=null;
3792ELSE
3793 IF todos_periodos='T' OR metasemaforo='MA' THEN --Si la personalización de la meta es acumulada se toma el acumulado de la meta
3794 meta:=valoracumuladometa;
3795 ELSE
3796 IF tipometa='P' AND acumular_valores='P' THEN
3797 meta:=metamedicion;
3798 ELSE
3799 IF metamedicion IS NOT NULL THEN
3800 meta:=metamedicion;
3801 END IF;
3802 END IF;
3803 END IF;
3804END IF;
3805
3806RAISE NOTICE 'Valor: % || valorMeta: %', valor, meta;
3807
3808/*
3809 La calificación del indicador se calcula dependiendo el propósito, la meta y el valor
3810 - CONSERVAR RANGO
3811
3812 semrojo<=X<=semamarillo => 100
3813 X<semrojo | X>semamarillo => 0
3814
3815 - MAX
3816 X<0 => 0
3817 meta=0 X>=0 => 0
3818
3819 X>=0 => 100
3820 meta<0 X<0 => (meta*100/X)
3821
3822 X<=0 => 0
3823 meta>0 X>0 => (X*100/meta)
3824
3825 - MIN
3826 X<=0 => 100
3827 meta=0 X>0 => 0
3828
3829 X>=0 => 0
3830 meta<0 X<0 => (X*100/meta)
3831
3832 X<=0 => 100
3833 meta>0 X>0 => (meta*100/X)
3834*/
3835
3836IF meta IS NOT NULL AND valor IS NOT NULL THEN
3837 IF proposito='CON' THEN --Conservar rango
3838 IF semrojo<=valor AND valor<=semamarillo THEN
3839 calificacion:=100;
3840 ELSE
3841 calificacion:=0;
3842 END IF;
3843 ELSE
3844 IF proposito='MAX' THEN --Maximizar
3845 IF meta=0 THEN
3846 IF valor<0 THEN
3847 calificacion:=0;
3848 ELSE
3849 calificacion:=100;
3850 END IF;
3851 ELSE
3852 IF meta<0 THEN
3853 IF valor>=0 THEN
3854 calificacion:=100;
3855 ELSE --Valor y meta son <0, se calcula porcentaje con fórmula invertida
3856 calificacion:=(meta*100)/valor;
3857 END IF;
3858 ELSE
3859 IF valor<=0 THEN --meta>0
3860 calificacion:=0;
3861 ELSE --Valor y meta son >0, se calcula porcentaje con fórmula normal
3862 calificacion:=(valor*100)/meta;
3863 END IF;
3864 END IF;
3865 END IF;
3866 ELSE --Minimizar
3867 IF meta=0 THEN
3868 IF valor<=0 THEN
3869 calificacion:=100;
3870 ELSE
3871 calificacion:=0;
3872 END IF;
3873 ELSE
3874 IF meta<0 THEN
3875 IF valor>=0 THEN
3876 calificacion:=0;
3877 ELSE --Valor y meta son <0, se calcula porcentaje con fórmula normal
3878 calificacion:=(valor*100)/meta;
3879 END IF;
3880 ELSE
3881 IF valor<=0 THEN --meta>0
3882 calificacion:=100;
3883 ELSE --Valor y meta son >0, se calcula porcentaje con fórmula invertida
3884 calificacion:=(meta*100)/valor;
3885 END IF;
3886 END IF;
3887 END IF;
3888 END IF; --Minimizar
3889 END IF; --Evaluar propósito
3890END IF; --La meta y valor no son nulos
3891
3892-- Obtener el tope para indicador, item y año
3893IF itemplan_id IS NULL THEN
3894 SELECT fldindicador_tope INTO tope FROM tblindicador WHERE fldindicador_id = indicador_id;
3895
3896ELSE
3897 SELECT COUNT(*) INTO topeXAnios
3898 FROM (
3899 SELECT 'X'
3900 FROM tblindicador_tope t
3901 WHERE t.fldindicador_id = indicador_id AND t.flditemplan_id = itemplan_id AND t.fldindicadortope_valor IS NOT NULL
3902 ) TMP;
3903
3904 -- Tiene topes por años
3905 IF topeXAnios > 0 THEN
3906 SELECT t.fldindicadortope_valor INTO tope
3907 FROM tblindicador_tope t
3908 WHERE t.fldindicador_id = indicador_id AND t.flditemplan_id = itemplan_id
3909 AND t.fldindicadortope_anio = (CASE WHEN anio IS NOT NULL THEN anio ELSE EXTRACT(YEAR FROM fecha) END);
3910
3911 ELSE
3912 SELECT fldindicador_tope INTO tope FROM tblindicador WHERE fldindicador_id = indicador_id;
3913
3914 END IF;
3915END IF;
3916
3917--Si se tiene un tope se verifica que el indicador no supere el tope, de superarlo se retorna el tope
3918IF tope IS NOT NULL THEN
3919 IF calificacion > tope THEN
3920 calificacion:=tope;
3921 END IF;
3922END IF;
3923
3924
3925RETURN ROUND(CAST(calificacion as numeric), 2); --retornar la calificacion
3926
3927END;$BODY$
3928 LANGUAGE plpgsql VOLATILE
3929 COST 100;
3930
3931--------------------------------------------------------------------------------------------
3932
3933
3934CREATE OR REPLACE FUNCTION ind_calcularregla(indicador_id integer, fecha date, fecha_corte date, anio integer)
3935 RETURNS double precision AS
3936$BODY$
3937
3938-- Función que calcula la calificación de un itemplan según los Ãtems e indicadores dependientes
3939-- @author Jhonatan Chiquito - jchiquito@almeraim.com
3940-- @fecha Julio 05 de 2017
3941--
3942-- @param integer indicador_id: ID del indicador del que se desea obtener la calificación
3943-- @param date fecha: Fecha para la que se debe obtener la calificación para el itemplan (opcional)
3944-- @param date fecha_corte: Fecha corte para obtener el valor y la meta acumulada (opcional)
3945-- @param date anio: Cuando el plan estrategico es por años (opcional)
3946-- @return float valor_regla: Calificación del indicador
3947
3948DECLARE
3949 tipo_meta CHAR(1); --Variable para determinar el tipo de meta: Unica, estacional,...
3950 meta FLOAT; --Variable para almacenar el valor de la meta
3951 nro_reglas INTEGER; --Variable para determinar si el indicador de los cursores tiene reglas definidas
3952 fila_regla RECORD; --Variable para la fila de la regla de indicadores
3953 consulta character varying;
3954 fechamedicion date;
3955 fecha_acumula date;
3956
3957 valor_regla FLOAT;
3958 valoracumulado FLOAT;
3959 valoracumuladometa FLOAT;
3960 valormedicion FLOAT;
3961 metaindicador FLOAT;
3962 metamedicion FLOAT;
3963 metaestacional FLOAT;
3964 metaeperiodo FLOAT;
3965
3966BEGIN
3967
3968 -- Validacion de las reglas
3969 SELECT COUNT(*) INTO nro_reglas FROM tblindicadorregla WHERE fldindicador_id = indicador_id;
3970
3971 IF nro_reglas > 0
3972 THEN
3973 fechamedicion := fecha;
3974 IF fecha IS NULL THEN
3975
3976 IF anio IS NOT NULL THEN
3977 -- Se establece la fechamedicion con la última medicion realizada en el año indicado(anio)
3978 SELECT m.fldmedicion_fechainicioperiodo INTO fechamedicion
3979 FROM tblmedicion m
3980 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
3981 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
3982 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL AND EXTRACT(YEAR FROM m.fldmedicion_fechafinperiodo) = anio
3983 ORDER BY fldmedicion_fechafinperiodo DESC
3984 LIMIT 1;
3985
3986 -- Si no se encuentra una medicion se establece la fecha al 31 de Diciembre del año indicado
3987 IF fechamedicion IS NULL THEN
3988 fechamedicion := anio ||'-12-31';
3989 END IF;
3990
3991 ELSE
3992 -- Se establece la fechamedicion con la última medicion realizada
3993 SELECT m.fldmedicion_fechainicioperiodo INTO fechamedicion
3994 FROM tblmedicion m
3995 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
3996 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
3997 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL
3998 ORDER BY fldmedicion_fechafinperiodo DESC
3999 LIMIT 1;
4000
4001 END IF;
4002 END IF;
4003
4004
4005 fecha_acumula := fecha_corte;
4006 IF fecha_corte IS NULL THEN
4007 fecha_acumula := EXTRACT(year from fechamedicion)||'-12-31';
4008 END IF;
4009
4010 RAISE NOTICE 'Fecha: % || Fecha acumulada: %', fechamedicion, fecha_acumula;
4011
4012 -- Se obtiene la medición, medición acumulada, meta y la meta acumulada
4013 SELECT i.fldindicador_metaperiodica AS tipo_meta, i.fldindicador_meta,
4014 ind_obteneracumuladofecha(i.fldindicador_id, TO_CHAR(fecha_acumula, 'YYYY-MM-DD'), 'F') AS valoracumulado,
4015 ind_obteneracumuladometafecha(i.fldindicador_id, TO_CHAR(fecha_acumula, 'YYYY-MM-DD'), 'F') AS valoracumuladometa,
4016 ind_obtenermedicionfecha(i.fldindicador_id, 'valor', fechamedicion, 'F', 'F') AS valormedicion,
4017 ind_obtenermedicionfecha(i.fldindicador_id, 'meta', fechamedicion, 'F', 'F') AS metamedicion,
4018 --Meta estacional
4019 ( SELECT fldindicadormeta_valor FROM tblindicadormeta
4020 WHERE fldindicador_id=i.fldindicador_id AND fechamedicion BETWEEN fldindicadormeta_fi AND fldindicadormeta_ff
4021 ) AS metaestacional,
4022 --Meta del periodo (cuatrenio por ejemplo)
4023 ( SELECT ind_obteneracumuladometae(fldindicadormeta_id) FROM tblindicadormeta
4024 WHERE fldindicador_id=i.fldindicador_id AND fldindicadormeta_fi=(SELECT max(fldindicadormeta_fi) FROM tblindicadormeta WHERE fldindicador_id=i.fldindicador_id)
4025 ) AS metaeperiodo
4026 INTO tipo_meta, metaindicador, valoracumulado, valoracumuladometa, valormedicion, metamedicion, metaestacional, metaeperiodo
4027 FROM tblindicador i
4028 WHERE i.fldindicador_id = indicador_id;
4029
4030 valor_regla := null;
4031
4032 FOR fila_regla IN SELECT *FROM tblindicadorregla WHERE fldindicador_id = indicador_id ORDER BY fldindicadorregla_orden
4033 LOOP
4034 valor_regla := null;
4035 IF fila_regla.fldindicadorregla_variable = 'A' THEN
4036 valormedicion = valoracumulado;
4037 END IF;
4038
4039 IF fila_regla.fldindicadorregla_dato = 'META' THEN
4040 meta := null;
4041 --Se determina qué meta se usa
4042 IF tipo_meta = 'U' THEN
4043 meta := metaindicador;
4044 --El indicador tiene metas estacionales
4045 ELSIF tipo_meta = 'E' THEN
4046 meta := metaestacional;
4047 ELSIF tipo_meta = 'P' THEN --El indicador tiene seleccionado 'Sin meta'
4048 meta := metaeperiodo; --Se utiliza la meta del periodo (ej: meta del cuatrenio)
4049 END IF;
4050
4051 ELSIF fila_regla.fldindicadorregla_dato = 'METAACUMULADA' THEN
4052 meta = valoracumuladometa;
4053 ELSE
4054 meta = fila_regla.fldindicadorregla_dato;
4055 END IF;
4056
4057 IF valormedicion IS NOT NULL AND meta IS NOT NULL THEN
4058 consulta := 'SELECT CASE WHEN '|| valormedicion ||' '|| fila_regla.fldindicadorregla_operador ||' '|| meta ||' THEN '|| fila_regla.fldindicadorregla_resultado ||' ELSE NULL END';
4059
4060 RAISE NOTICE 'Id: % Operador: "%" Consulta: %', fila_regla.fldindicadorregla_id, fila_regla.fldindicadorregla_operador, consulta;
4061 EXECUTE consulta INTO valor_regla;
4062
4063 IF valor_regla IS NOT NULL THEN
4064 EXIT; -- exit loop; Retorna el valor de la primera regla que cumple
4065 END IF;
4066 END IF;
4067
4068 END LOOP;
4069
4070 IF valor_regla IS NOT NULL THEN
4071 return ROUND(CAST(valor_regla as numeric), 2);
4072 END IF;
4073
4074 END IF;
4075
4076 RETURN valor_regla; --retornar la calificacion del indicador
4077END;
4078
4079$BODY$
4080 LANGUAGE plpgsql VOLATILE
4081 COST 100;
4082
4083
4084 --Septiembre 07 de 2017
4085--Depuración en tipos de eventos (Jhonatan #3808)
4086CREATE OR REPLACE FUNCTION eventotipo_eliminar()
4087 RETURNS trigger AS
4088$BODY$
4089DECLARE
4090 cantidad_riesgos integer;
4091BEGIN
4092 --Se valida primero que no existan riegos del tipo a eliminar
4093 SELECT count(*) into cantidad_riesgos FROM tbleventoriesgo WHERE fldeventotipo_id=OLD.fldeventotipo_id;
4094 IF (cantidad_riesgos=0) THEN
4095 --Eliminamos primero los registros del tipo y usuarios
4096 DELETE FROM tbleventotipo_usuario WHERE fldeventotipo_id=OLD.fldeventotipo_id;
4097
4098 --Eliminamos de la tabla de estados y transiciones
4099 DELETE FROM tblevstranstipo_estadoi WHERE fldevstranstipo_id IN(
4100 SELECT fldevstranstipo_id FROM tblevstranstipo WHERE fldeventotipo_id=OLD.fldeventotipo_id);
4101
4102 --Eliminamos las transiciones del tipo de evento
4103 DELETE FROM tblevstranstipo WHERE fldeventotipo_id=OLD.fldeventotipo_id;
4104
4105 --Eliminamos los estados
4106 DELETE FROM tblevsestado WHERE fldeventotipo_id=OLD.fldeventotipo_id;
4107 RETURN OLD;
4108 ELSE
4109 RETURN NULL;
4110 END IF;
4111
4112END;
4113$BODY$
4114 LANGUAGE plpgsql VOLATILE
4115 COST 100;
4116
4117
4118 --Septiembre 08 de 2017
4119--Campos adicionales dependientes (Néstor)(Issue#3774)
4120CREATE OR REPLACE FUNCTION upd_campoadicional_padre()
4121 RETURNS trigger AS
4122$BODY$
4123 --Función para actualizar el campo 'fldcampoadicional_tienehijos' en tblcampoadicional
4124 --@author Néstor Duque <nduque@almeraim.com>
4125 --@fecha Septiembre 04 de 2017
4126 --
4127
4128 DECLARE
4129 total integer;
4130 campoId integer;
4131 padre CHARACTER VARYING;
4132 padreId integer;
4133
4134 BEGIN
4135
4136 IF TG_OP = 'DELETE' OR (TG_OP='INSERT' AND NEW.fldcampoadicional_cpadre_id IS NOT NULL) OR (TG_OP='UPDATE' AND COALESCE(NEW.fldcampoadicional_cpadre_id, 0) <> COALESCE(OLD.fldcampoadicional_cpadre_id, 0)) THEN
4137 IF(TG_OP='INSERT') THEN
4138 campoId = NEW.fldcampoadicional_id;
4139 padreId = NEW.fldcampoadicional_cpadre_id;
4140 padre = NEW.fldcampoadicional_padre;
4141 ELSE
4142 IF(TG_OP='UPDATE' AND COALESCE(NEW.fldcampoadicional_cpadre_id, 0) <> COALESCE(OLD.fldcampoadicional_cpadre_id, 0)) THEN
4143 campoId = NEW.fldcampoadicional_id;
4144 padre = NEW.fldcampoadicional_padre;
4145 padreId = NEW.fldcampoadicional_cpadre_id;
4146 UPDATE tblcampoadicional SET fldcampoadicional_tienehijos = 'F' WHERE fldcampoadicional_id = padreId AND fldcampoadicional_padre = padre;
4147 ELSE
4148 campoId = OLD.fldcampoadicional_id;
4149 padre = OLD.fldcampoadicional_padre;
4150 padreId = OLD.fldcampoadicional_cpadre_id;
4151 END IF;
4152 END IF;
4153
4154 UPDATE tblcampoadicional SET fldcampoadicional_tienehijos = 'F' WHERE fldcampoadicional_id = padreId AND fldcampoadicional_padre = padre;
4155
4156 SELECT COUNT(*) INTO total FROM tblcampoadicional WHERE fldcampoadicional_cpadre_id = padreId;
4157
4158 IF (total > 0) THEN
4159 UPDATE tblcampoadicional SET fldcampoadicional_tienehijos = 'T' WHERE fldcampoadicional_id = padreId;
4160 END IF;
4161 END IF;
4162
4163
4164 RETURN NULL;
4165 END;
4166$BODY$
4167 LANGUAGE plpgsql VOLATILE
4168 COST 100;
4169
4170CREATE TRIGGER upd_campoadicional_padre
4171 AFTER INSERT OR UPDATE OR DELETE ON tblcampoadicional
4172 FOR EACH ROW
4173EXECUTE PROCEDURE upd_campoadicional_padre();
4174
4175
4176--Septiembre 11 de 2017
4177--Migración de calificación de controlesRiesgo a campos adicionales (Jhonatan #3827)
4178CREATE OR REPLACE FUNCTION copiar_riesgocontrol(control_id integer, riesgo_id integer, arrayctrlfrecid integer[], arrayclasificid integer[], arraycausasriesgoid integer[])
4179 RETURNS void AS
4180$BODY$
4181DECLARE
4182
4183-- Función que copia toda la información de un control
4184-- @author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
4185-- @fecha Julio 27 de 2013
4186--
4187-- @param
4188-- @param integer control_id:id: ID del control que va a ser copiado
4189-- @param integer riesgo_id: ID del riesgo al cual se va a asociar
4190--
4191-- Modificaciones:
4192-- - Agosto 23 de 2014 por Jorge Ivan Franco Hoyos<jorgeun@gmail.com>
4193-- Se agrega el campo fldsistemariesgo_id en el control
4194--
4195
4196 regcampoadicional tblcampoadicional%ROWTYPE;
4197 regclase tblriesgocontrol_clase%ROWTYPE;
4198 regcargo tblriesgoctrol_cargo%ROWTYPE;
4199 regciclo tblcontrol_claciclonormativo%ROWTYPE;
4200 regcausa tblriesgocontrol_causa%ROWTYPE;
4201 regmodelo tblriesgocontrolmp%ROWTYPE;
4202 regproyecto tblriesgocontrol_proyecto%ROWTYPE;
4203 regdocumento tblriesgocontrol_documento%ROWTYPE;
4204 regequivalencia tblriesgocontrol_equiv%ROWTYPE;
4205 regriesgocontrol tblriesgocontrol%ROWTYPE;
4206
4207 control_nuevo_id INTEGER;
4208 campo_id INTEGER;
4209 consultacampo character varying; --Usada para formar la consulta de campos adicionales
4210 tabla character varying; --Usada para formar la consulta de campos adicionales
4211 campo character varying; --Usado para formar la consulta de campos adicionales
4212 sistemariesgo_id INTEGER;
4213 sistemariesgocontrol_id INTEGER; --Id del sistema de riesgo al cual pertenece el control que estoy copiando
4214
4215 frecuencia_id_aplic INTEGER;
4216 frecuencia_id_rev INTEGER;
4217 clasificacion_id INTEGER;
4218 riesgocausa_id INTEGER;
4219
4220 regriesgocausa tblriesgocausa%ROWTYPE;
4221
4222 --Cursores
4223
4224 --Campos adicionales
4225 curcampoadicional CURSOR FOR
4226 SELECT * FROM tblcampoadicional
4227 WHERE fldcampoadicional_padre='sistemaRiesgo' AND fldcampoadicional_clasif='riesgoControl'
4228 AND fldcampoadicional_padre_id=sistemariesgo_id;
4229
4230 --Clases del control
4231 curclases CURSOR FOR
4232 SELECT * FROM tblriesgocontrol_clase
4233 WHERE fldriesgocontrol_id=control_id;
4234
4235 --Cargos responsables
4236 curcargos CURSOR FOR
4237 SELECT * FROM tblriesgoctrol_cargo
4238 WHERE fldriesgocontrol_id=control_id;
4239
4240 --Ciclo normativo
4241 curciclos CURSOR FOR
4242 SELECT * FROM tblcontrol_claciclonormativo
4243 WHERE fldriesgocontrol_id = control_id;
4244
4245 --Causas
4246 curcausas CURSOR FOR
4247 SELECT rcau.* FROM tblriesgocontrol_causa rcau
4248 INNER JOIN tblriesgocausa cau ON cau.fldriesgocausa_id=rcau.fldriesgocausa_id
4249 WHERE rcau.fldriesgocontrol_id = control_id AND cau.fldriesgo_id=(select fldriesgo_id from tblriesgocontrol where fldriesgocontrol_id= control_id);
4250
4251 --Modelo procedimental
4252 curmodelos CURSOR FOR
4253 SELECT * FROM tblriesgocontrolmp
4254 WHERE fldriesgocontrol_id = control_id;
4255
4256 --Proyectos asociados
4257 curproyectos CURSOR FOR
4258 SELECT * FROM tblriesgocontrol_proyecto
4259 WHERE fldriesgocontrol_id=control_id;
4260
4261 --Documentos
4262 curdocumentos CURSOR FOR
4263 SELECT * FROM tblriesgocontrol_documento
4264 WHERE fldriesgocontrol_id=control_id;
4265
4266 --Equivalencias
4267 curequivalencias CURSOR FOR
4268 SELECT * FROM tblriesgocontrol_equiv
4269 WHERE fldriesgocontrol_id=control_id;
4270BEGIN
4271
4272frecuencia_id_aplic:=null;
4273frecuencia_id_rev:=null;
4274clasificacion_id:=null;
4275
4276--Se copia primero el control
4277INSERT INTO tblriesgocontrol SELECT * FROM tblriesgocontrol WHERE fldriesgocontrol_id = control_id;
4278
4279--Obtener ID del nuevo control
4280control_nuevo_id = currval('riesgocontrol_id_seq');
4281
4282--Obtener el id del sistema de referencia
4283SELECT fldsistemariesgo_id INTO sistemariesgo_id FROM tblriesgo WHERE fldriesgo_id=riesgo_id;
4284
4285--Se obtiene el control que va a ser copiado
4286SELECT * INTO regriesgocontrol FROM tblriesgocontrol WHERE fldriesgocontrol_id=control_id;
4287
4288--Se obtiene el equivalente de la frecuencia aplic en el SdR del nuevo control y se asocia
4289IF regriesgocontrol.fldcontrolfrecuencia_id_aplic IS NOT NULL
4290THEN
4291 frecuencia_id_aplic = arrayctrlfrecid[regriesgocontrol.fldcontrolfrecuencia_id_aplic];
4292END IF;
4293
4294--Se obtiene el equivalente de la frecuencia rev en el SdR del nuevo control y se asocia
4295IF regriesgocontrol.fldcontrolfrecuencia_id_rev IS NOT NULL
4296THEN
4297 frecuencia_id_rev = arrayctrlfrecid[regriesgocontrol.fldcontrolfrecuencia_id_rev];
4298END IF;
4299
4300--Se obtiene el equivalente de la clasificación en el SdR del nuevo control y se asocia
4301IF regriesgocontrol.fldclacontrol_id IS NOT NULL
4302THEN
4303 clasificacion_id = arrayclasificid[regriesgocontrol.fldclacontrol_id];
4304END IF;
4305
4306--Se actualizan los campos del nuevo control con los ids respectivos
4307UPDATE tblriesgocontrol SET fldriesgo_id=riesgo_id,
4308 fldcontrolfrecuencia_id_aplic = frecuencia_id_aplic,
4309 fldcontrolfrecuencia_id_rev = frecuencia_id_rev,
4310 fldclacontrol_id = clasificacion_id,
4311 fldriesgocontrol_st = now(),
4312 fldsistemariesgo_id = sistemariesgo_id
4313WHERE fldriesgocontrol_id= control_nuevo_id;
4314
4315-- Se asocia un nuevo cronograma al control
4316INSERT INTO tbdsigspacronograma (fldcronograma_nombre, fldriesgocontrol_id) VALUES(regriesgocontrol.fldriesgocontrol_nombre, control_nuevo_id);
4317
4318--Se obtiene el sistema de riesgo al cual esta asociado el control que se copio
4319SELECT r.fldsistemariesgo_id INTO sistemariesgocontrol_id FROM tblriesgocontrol rc
4320INNER JOIN tblriesgo r ON r.fldriesgo_id=rc.fldriesgo_id
4321WHERE rc.fldriesgocontrol_id=control_id;
4322
4323--Si el sistema de referencia del control que se copio es diferente al copiado se crea la equivalencia entre los controles
4324IF sistemariesgocontrol_id <> sistemariesgo_id THEN
4325
4326 INSERT INTO tblriesgocontrol_equiv(fldriesgocontrol_id, fldriesgocontrol_equiv_id)
4327 VALUES (control_id, control_nuevo_id);
4328
4329END IF;
4330
4331--Se crea la relación en la tabla riesgo_riesgocontrol
4332INSERT INTO tblriesgo_riesgocontrol (fldriesgo_id,fldriesgocontrol_id) VALUES (riesgo_id,control_nuevo_id);
4333
4334--Se copian los campos adicionales
4335OPEN curcampoadicional;
4336 LOOP
4337 FETCH curcampoadicional INTO regcampoadicional;
4338 EXIT WHEN NOT FOUND;
4339 --Determinar la tabla y el campo de valor a utilizar en la consulta
4340 IF TRIM(UPPER(regcampoadicional.fldcampoadicional_tipodato))='SMU' OR TRIM(UPPER(regcampoadicional.fldcampoadicional_tipodato))='SMM' THEN
4341 --Asociar el valor en el campo adicional para el nuevo riesgo
4342
4343 --Asociar el valor en el campo adicional para el nuevo riesgo
4344 INSERT INTO tblcampovlritem_riesgoctrl (fldriesgocontrol_id, fldcampoadicional_id, fldcampoadicionalitem_id)
4345
4346 SELECT control_nuevo_id, regcampoadicional.fldcampoadicional_id, cnew.fldcampoadicionalitem_id FROM tblcampovlritem_riesgoctrl crold
4347 INNER JOIN tblcampoadicionalitem cold ON cold.fldcampoadicionalitem_id = crold.fldcampoadicionalitem_id
4348 INNER JOIN tblcampoadicionalitem cnew ON cnew.fldcampoadicionalitem_codigo = cold.fldcampoadicionalitem_codigo AND cnew.fldcampoadicional_id=regcampoadicional.fldcampoadicional_id
4349 WHERE fldriesgocontrol_id = control_id AND cold.fldcampoadicional_id IN
4350 (SELECT ca.fldcampoadicional_id FROM tblcampoadicional ca
4351 WHERE fldcampoadicional_padre_id = (SELECT fldsistemariesgo_id FROM tblriesgocontrol WHERE fldriesgocontrol_id=control_id) AND
4352 fldcampoadicional_padre='sistemaRiesgo' AND fldcampoadicional_clasif='riesgoControl' AND fldcampoadicional_codigo=regcampoadicional.fldcampoadicional_codigo);
4353 /*
4354select * from tblcampoadicional where fldcampoadicional_id=61
4355 RAISE NOTICE 'CONTROL_ID %',control_id;
4356 INSERT INTO tblcampovlritem_riesgoctrl (fldriesgocontrol_id, fldcampoadicional_id, fldcampoadicionalitem_id)
4357 VALUES (control_nuevo_id, regcampoadicional.fldcampoadicional_id,
4358 (SELECT fldcampoadicionalitem_id FROM tblcampoadicionalitem WHERE fldcampoadicional_id=regcampoadicional.fldcampoadicional_id
4359 AND fldcampoadicionalitem_codigo=(SELECT ci.fldcampoadicionalitem_codigo FROM tblcampovlritem_riesgoctrl cr
4360 INNER JOIN tblcampoadicionalitem ci ON (ci.fldcampoadicionalitem_id=cr.fldcampoadicionalitem_id)
4361 WHERE cr.fldriesgocontrol_id=control_id AND cr.fldcampoadicional_id=(
4362 SELECT fldcampoadicional_id FROM tblcampoadicional
4363 WHERE fldcampoadicional_padre='sistemaRiesgo'
4364 AND fldcampoadicional_clasif='riesgoControl'
4365 AND fldcampoadicional_padre_id=sistemariesgocontrol_id
4366 AND fldcampoadicional_codigo=regcampoadicional.fldcampoadicional_codigo)
4367 )
4368 )
4369 );*/
4370 ELSE
4371 tabla:='tblcampovlr'||TRIM(regcampoadicional.fldcampoadicional_tipodato)||'_riesgoctrl';
4372 campo:='fldcampovlr'||TRIM(regcampoadicional.fldcampoadicional_tipodato)||'_rsgc_val';
4373
4374 --Asociar el valor en el campo adicional para el nuevo control
4375 consultacampo:='INSERT INTO '||tabla||' (fldriesgocontrol_id, fldcampoadicional_id, '||campo||')
4376 VALUES ($1, $2, (SELECT ' ||campo||' FROM '||tabla||' WHERE fldriesgocontrol_id=$3 AND fldcampoadicional_id IN (
4377 SELECT fldcampoadicional_id FROM tblcampoadicional
4378 WHERE fldcampoadicional_padre=''sistemaRiesgo''
4379 AND fldcampoadicional_clasif=''riesgoControl''
4380 AND fldcampoadicional_padre_id=$4
4381 AND fldcampoadicional_codigo=$5))
4382 )';
4383
4384 --Ejecutar la consulta con parámetros bind
4385 EXECUTE consultacampo
4386 USING control_nuevo_id, regcampoadicional.fldcampoadicional_id, control_id, sistemariesgocontrol_id, regcampoadicional.fldcampoadicional_codigo;
4387 END IF;
4388 END LOOP;
4389CLOSE curcampoadicional;
4390
4391--Se copian las clases
4392OPEN curclases;
4393 LOOP
4394 FETCH curclases INTO regclase;
4395 EXIT WHEN NOT FOUND;
4396
4397 --Se asocia la clase al nuevo control
4398 INSERT INTO tblriesgocontrol_clase(fldriesgocontrol_id, fldclasecontrol_id)
4399 VALUES (control_nuevo_id, regclase.fldclasecontrol_id);
4400
4401 END LOOP;
4402CLOSE curclases;
4403
4404--Se copian los cargos responsables
4405OPEN curcargos;
4406 LOOP
4407 FETCH curcargos INTO regcargo;
4408 EXIT WHEN NOT FOUND;
4409
4410 --Se asocia el cargo al nuevo control
4411 INSERT INTO tblriesgoctrol_cargo(fldriesgocontrol_id, fldcargo_id, fldriesgoctrol_cargo_tipo)
4412 VALUES (control_nuevo_id, regcargo.fldcargo_id, regcargo.fldriesgoctrol_cargo_tipo);
4413
4414 END LOOP;
4415CLOSE curcargos;
4416
4417--Se copian los ciclos normativos
4418OPEN curciclos;
4419 LOOP
4420 FETCH curciclos INTO regciclo;
4421 EXIT WHEN NOT FOUND;
4422
4423 --Se asocia el ciclo al nuevo control
4424 INSERT INTO tblcontrol_claciclonormativo(fldriesgocontrol_id, fldclaciclonormativo_id, fldcontrol_claciclonormdesc)
4425 VALUES (control_nuevo_id, regciclo.fldclaciclonormativo_id, regciclo.fldcontrol_claciclonormdesc);
4426
4427 END LOOP;
4428CLOSE curciclos;
4429
4430--Causas
4431OPEN curcausas;
4432 LOOP
4433 FETCH curcausas INTO regcausa;
4434 EXIT WHEN NOT FOUND;
4435
4436 --Obtener el id de la causa
4437 riesgocausa_id = arraycausasriesgoid[regcausa.fldriesgocausa_id];
4438
4439 INSERT INTO tblriesgocontrol_causa(fldriesgocontrol_id, fldriesgocausa_id)
4440 VALUES (control_nuevo_id, riesgocausa_id);
4441
4442 END LOOP;
4443CLOSE curcausas;
4444
4445--Modelo procedimental
4446OPEN curmodelos;
4447 LOOP
4448 FETCH curmodelos INTO regmodelo;
4449 EXIT WHEN NOT FOUND;
4450
4451 --Se asocia el modelo al nuevo control
4452 INSERT INTO tblriesgocontrolmp(fldriesgocontrolmp_nombre, fldriesgocontrolmp_orden, fldusuario_id, fldriesgocontrol_id)
4453 VALUES (regmodelo.fldriesgocontrolmp_nombre, regmodelo.fldriesgocontrolmp_orden, regmodelo.fldusuario_id, control_nuevo_id);
4454
4455 END LOOP;
4456CLOSE curmodelos;
4457
4458--Se copian los proyectos
4459OPEN curproyectos;
4460 LOOP
4461 FETCH curproyectos INTO regproyecto;
4462 EXIT WHEN NOT FOUND;
4463
4464 --Se asocia el proyecto al nuevo control
4465 INSERT INTO tblriesgocontrol_proyecto (fldriesgocontrol_id, fldproyecto_id)
4466 VALUES ( control_nuevo_id, regproyecto.fldproyecto_id);
4467
4468 END LOOP;
4469CLOSE curproyectos;
4470
4471--Se copian los documetos
4472OPEN curdocumentos;
4473 LOOP
4474 FETCH curdocumentos INTO regdocumento;
4475 EXIT WHEN NOT FOUND;
4476
4477 --Se asocia el proyecto al nuevo control
4478 INSERT INTO tblriesgocontrol_documento (fldriesgocontrol_id, flddocumento_origen_id)
4479 VALUES ( control_nuevo_id, regdocumento.flddocumento_origen_id);
4480
4481 END LOOP;
4482CLOSE curdocumentos;
4483
4484RAISE NOTICE 'control_id %', control_nuevo_id;
4485
4486END;$BODY$
4487 LANGUAGE plpgsql VOLATILE
4488 COST 100;
4489
4490----
4491CREATE OR REPLACE FUNCTION copiar_riesgo(riesgo_id integer, sistemariesgo_id integer, arrayorigenesid integer[], arrayclasifid integer[], arrayobjimpactoid integer[], arrayimpactoid integer[], arrayprobimpactoid integer[], arraymanejoid integer[], arrayctrlfrecid integer[], arrayclasificid integer[], arrayunidades integer[])
4492 RETURNS void AS
4493$BODY$
4494DECLARE
4495
4496--Función que copia toda la información de un riesgo
4497--@author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
4498--@fecha Julio 27 de 2013
4499--
4500--@param integer riesgo:id: ID del riesgo que va a ser copiado
4501--@param integer sistemariesgo_id: ID del sistema al cual se va a asociar el riesgo copiado
4502--@param int[] arrayorigenesid: Relacion del ID de origen del sistema viejo con el sistema nuevo
4503--@param int[] arrayclasifid: Relacion del ID de las clasificaciones de riesgo del sistema viejo con el sistema nuevo
4504--
4505-- Modificaciones:
4506-- - Diciembre 09 de 2014 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
4507-- Cambios en tblvlracionriesgo
4508-- Se agregan las columnas fldriesgomanejo_ctrldo_id,fldriesgomanejo_tratado_id
4509-- Se ajusta el nombre de la columna fldriesgomanejo_id por fldriesgomanejo_abslto_id
4510
4511 regriesgo tblriesgo%ROWTYPE;
4512 regcampoadicional tblcampoadicional%ROWTYPE;
4513 regorigenriesgo tblriesgo_origenriesgo%ROWTYPE;
4514 regclasificacion tblriesgo_clariesgo%ROWTYPE;
4515 regobjetoimpacto tblriesgo_objetoimpacto%ROWTYPE;
4516 regriesgocausa tblriesgocausa%ROWTYPE;
4517 regvaloracion tblvlracionriesgo%ROWTYPE;
4518 regcontrolpropio tblriesgocontrol%ROWTYPE; -- Relacionados directamente (propios)
4519 regriesgo_control tblriesgo_riesgocontrol%ROWTYPE; -- Controles no propios del riesgo
4520 regcausacontrol tblriesgocontrol_causa%ROWTYPE; -- Causas de los controles no propios del riesgo viejo
4521
4522 riesgo_nuevo_id INTEGER;
4523 riesgounidad_id INTEGER;
4524 sismtemaold_id INTEGER; --ID del sistema de riesgo anterior (el que se copió)
4525 campo_id INTEGER;
4526 objetoimpacto_id INTEGER;
4527 origenriesgo_id INTEGER;
4528 clariesgo_id INTEGER;
4529 controlequiv_id INTEGER;
4530 riesgocausa_id INTEGER;
4531 consultacampo character varying; --Usada para formar la consulta de campos adicionales
4532 tabla character varying; --Usada para formar la consulta de campos adicionales
4533 campo character varying; --Usado para formar la consulta de campos adicionales
4534
4535 --Variables para la valoración del riesgo
4536 imptoabslto INTEGER;
4537 imptoctrldo INTEGER;
4538 probabslta INTEGER;
4539 probctrlda INTEGER;
4540 imptotratado INTEGER;
4541 probtratada INTEGER;
4542 objetoimpacto INTEGER;
4543 riesgomanejo_abslto INTEGER;
4544 riesgomanejo_ctrldo INTEGER;
4545 riesgomanejo_tratado INTEGER;
4546 arraycausasriesgoid int2[]; --almacenar los id de las causas de riesgo
4547 bandera char;
4548
4549 --Cursores
4550
4551 --Campos adicionales
4552 curcampoadicional CURSOR FOR
4553 SELECT * FROM tblcampoadicional
4554 WHERE fldcampoadicional_padre='sistemaRiesgo' AND fldcampoadicional_clasif='riesgo' AND fldcampoadicional_padre_id=sistemariesgo_id;
4555
4556 --Origenes
4557 curorigenriesgo CURSOR FOR
4558 SELECT * FROM tblriesgo_origenriesgo
4559 WHERE fldriesgo_id = riesgo_id;
4560
4561 --Clasificaciones
4562 curclasificaciones CURSOR FOR
4563 SELECT * FROM tblriesgo_clariesgo
4564 WHERE fldriesgo_id = riesgo_id ;
4565
4566 --Objetos impacto
4567 curobjetosimpacto CURSOR FOR
4568 SELECT * FROM tblriesgo_objetoimpacto
4569 WHERE fldriesgo_id = riesgo_id;
4570
4571 --Causas
4572 curcausas CURSOR FOR
4573 SELECT * FROM tblriesgocausa
4574 WHERE fldriesgo_id=riesgo_id;
4575
4576 --Valoraciones
4577 curvaloraciones CURSOR FOR
4578 SELECT * FROM tblvlracionriesgo
4579 WHERE fldriesgo_id=riesgo_id;
4580
4581
4582 --Controles propios
4583 curcontrolespropios CURSOR FOR
4584 SELECT * FROM tblriesgocontrol
4585 WHERE fldriesgocontrol_et IS NULL AND fldriesgo_id=riesgo_id;
4586
4587BEGIN
4588
4589 imptoabslto = null;
4590 imptoctrldo = null;
4591 probabslta = null;
4592 probctrlda = null;
4593 imptotratado = null;
4594 probtratada = null;
4595 objetoimpacto = null;
4596 riesgomanejo_abslto = null;
4597 riesgomanejo_ctrldo = null;
4598 riesgomanejo_tratado = null;
4599
4600--RAISE NOTICE 'Clasificaciones Parametro: (%)', arrayclasifid;
4601
4602--Se copia primero el riesgo
4603INSERT INTO tblriesgo SELECT * FROM tblriesgo WHERE fldriesgo_id = riesgo_id;
4604
4605--Obtener ID del nuevo riesgo
4606riesgo_nuevo_id=currval('riesgo_id_seq');
4607
4608--regriesgo
4609SELECT * INTO regriesgo FROM tblriesgo WHERE fldriesgo_id = riesgo_id;
4610
4611--ID el sistema de riesgo anterior (el que se copió)
4612SELECT fldsistemariesgo_id INTO sismtemaold_id FROM tblriesgo WHERE fldriesgo_id = riesgo_id;
4613
4614--Se obtiene el id de la unidad de riesgo que le corresponde al nuevo riesgo
4615riesgounidad_id = arrayunidades[regriesgo.fldriesgounidad_id];
4616
4617--Se le actualiza el sistema de riesgo y la unidad de riesgo al nuevo riesgo
4618UPDATE tblriesgo SET fldsistemariesgo_id=sistemariesgo_id,
4619 fldriesgounidad_id=riesgounidad_id,
4620 fldriesgo_st = now(),
4621 fldriesgo_padre=riesgo_id
4622WHERE fldriesgo_id=riesgo_nuevo_id;
4623
4624-- Se asocia un nuevo cronograma al riesgo
4625INSERT INTO tbdsigspacronograma (fldcronograma_nombre, fldriesgo_id) VALUES(regriesgo.fldriesgo_nombre, riesgo_nuevo_id);
4626
4627--Se copian los campos adicionales
4628OPEN curcampoadicional;
4629 LOOP
4630 FETCH curcampoadicional INTO regcampoadicional;
4631 EXIT WHEN NOT FOUND;
4632 --Determinar la tabla y el campo de valor a utilizar en la consulta
4633 IF TRIM(UPPER(regcampoadicional.fldcampoadicional_tipodato))='SMU' OR TRIM(UPPER(regcampoadicional.fldcampoadicional_tipodato))='SMM' THEN
4634 INSERT INTO tblcampovlritem_riesgo (fldriesgo_id, fldcampoadicional_id, fldcampoadicionalitem_id)
4635 --Asociar el valor en el campo adicional para el nuevo riesgo
4636 SELECT riesgo_nuevo_id, regcampoadicional.fldcampoadicional_id, cnew.fldcampoadicionalitem_id FROM tblcampovlritem_riesgo crold
4637 INNER JOIN tblcampoadicionalitem cold ON cold.fldcampoadicionalitem_id = crold.fldcampoadicionalitem_id
4638 INNER JOIN tblcampoadicionalitem cnew ON cnew.fldcampoadicionalitem_codigo = cold.fldcampoadicionalitem_codigo AND cnew.fldcampoadicional_id=regcampoadicional.fldcampoadicional_id
4639 WHERE fldriesgo_id = riesgo_id AND cold.fldcampoadicional_id IN
4640 (SELECT ca.fldcampoadicional_id FROM tblcampoadicional ca
4641 WHERE fldcampoadicional_padre_id IN (SELECT fldsistemariesgo_id FROM tblriesgo WHERE fldriesgo_id=riesgo_id) AND
4642 fldcampoadicional_padre='sistemaRiesgo' AND fldcampoadicional_clasif='riesgo' AND fldcampoadicional_codigo=regcampoadicional.fldcampoadicional_codigo);
4643
4644
4645 ELSE
4646 tabla='tblcampovlr'||TRIM(regcampoadicional.fldcampoadicional_tipodato)||'_riesgo';
4647 campo='fldcampovlr'||TRIM(regcampoadicional.fldcampoadicional_tipodato)||'_riesgo_val';
4648
4649 RAISE NOTICE 'riesgoId: % sistemaOldId: % codigo: %', riesgo_id, sismtemaold_id, regcampoadicional.fldcampoadicional_codigo;
4650
4651 --Asociar el valor en el campo adicional para el nuevo riesgo
4652 consultacampo='INSERT INTO '||tabla||' (fldriesgo_id, fldcampoadicional_id, '||campo||')
4653 VALUES ($1, $2, (SELECT ' ||campo||' FROM '||tabla||' WHERE fldriesgo_id=$3 AND fldcampoadicional_id IN (
4654 SELECT fldcampoadicional_id FROM tblcampoadicional
4655 WHERE fldcampoadicional_padre=''sistemaRiesgo''
4656 AND fldcampoadicional_clasif=''riesgo''
4657 AND fldcampoadicional_padre_id=$4
4658 AND fldcampoadicional_codigo=$5))
4659 )';
4660
4661 --Ejecutar la consulta
4662 EXECUTE consultacampo USING riesgo_nuevo_id, regcampoadicional.fldcampoadicional_id, riesgo_id, sismtemaold_id, regcampoadicional.fldcampoadicional_codigo;
4663 END IF;
4664 END LOOP;
4665CLOSE curcampoadicional;
4666
4667--Se copian los origenes del riesgo
4668OPEN curorigenriesgo;
4669 LOOP
4670 FETCH curorigenriesgo INTO regorigenriesgo;
4671 EXIT WHEN NOT FOUND;
4672
4673 --Se obtiene id del origen de riesgo que se creo para el nuevo sistema de riesgo
4674 origenriesgo_id = arrayorigenesid[regorigenriesgo.fldorigenriesgo_id];
4675
4676 --Se agrega el origen de riesgo al nuevo riesgo
4677 INSERT INTO tblriesgo_origenriesgo (fldriesgo_id, fldorigenriesgo_id) VALUES ( riesgo_nuevo_id, origenriesgo_id);
4678
4679 END LOOP;
4680CLOSE curorigenriesgo;
4681
4682--Se copian las clasificaciones del riesgo
4683OPEN curclasificaciones;
4684 LOOP
4685 FETCH curclasificaciones INTO regclasificacion;
4686 EXIT WHEN NOT FOUND;
4687
4688 --Se obtiene id de la clasificación de riesgo que se creo para el nuevo sistema de riesgo
4689 clariesgo_id = arrayclasifid[regclasificacion.fldclariesgo_id];
4690 --RAISE NOTICE 'Clariesgo_id: % -- Nuevo clariesgo_id: %', regclasificacion.fldclariesgo_id, clariesgo_id;
4691
4692 --Se agrega la clasificación de riesgo al nuevo riesgo
4693 INSERT INTO tblriesgo_clariesgo(fldriesgo_id, fldclariesgo_id) VALUES (riesgo_nuevo_id, clariesgo_id);
4694
4695 END LOOP;
4696CLOSE curclasificaciones;
4697
4698--Se copian los objetos de impacto
4699OPEN curobjetosimpacto;
4700 LOOP
4701 FETCH curobjetosimpacto INTO regobjetoimpacto;
4702 EXIT WHEN NOT FOUND;
4703
4704 --Se obtiene id del objetoimpacto que se creo para el nuevo sistema de riesgo
4705 objetoimpacto_id = arrayobjimpactoid[regobjetoimpacto.fldriesgoobjetoimpacto_id];
4706
4707 --Se agrega el objeto impacto al nuevo riesgo
4708 INSERT INTO tblriesgo_objetoimpacto (fldriesgo_id, fldriesgoobjetoimpacto_id)
4709 VALUES ( riesgo_nuevo_id, objetoimpacto_id);
4710
4711 END LOOP;
4712CLOSE curobjetosimpacto;
4713
4714--Se copian las causas
4715OPEN curcausas;
4716 LOOP
4717 FETCH curcausas INTO regriesgocausa;
4718 EXIT WHEN NOT FOUND;
4719
4720 --Se crean las causas para el nuevo riesgo
4721 INSERT INTO tblriesgocausa (fldriesgocausa_nombre, fldriesgo_id, fldriesgocausa_codigo)
4722 VALUES (regriesgocausa.fldriesgocausa_nombre, riesgo_nuevo_id, regriesgocausa.fldriesgocausa_codigo);
4723
4724 arraycausasriesgoid[regriesgocausa.fldriesgocausa_id] = currval('riesgocausa_id_seq');
4725
4726 END LOOP;
4727CLOSE curcausas;
4728
4729--Se copian las valoraciones del riesgo
4730OPEN curvaloraciones;
4731 LOOP
4732 FETCH curvaloraciones INTO regvaloracion;
4733 EXIT WHEN NOT FOUND;
4734
4735 --Se obtiene id del impacto absoluto
4736 IF regvaloracion.fldvlracionriesgo_imptoabslto IS NOT NULL
4737 THEN
4738 imptoabslto = arrayimpactoid[regvaloracion.fldvlracionriesgo_imptoabslto];
4739 END IF;
4740
4741 --Se obtiene id del impacto controlado
4742 IF regvaloracion.fldvlracionriesgo_imptoctrldo IS NOT NULL
4743 THEN
4744 imptoabslto = arrayimpactoid[regvaloracion.fldvlracionriesgo_imptoctrldo];
4745 END IF;
4746
4747 --Se obtiene id del impacto tratado
4748 IF regvaloracion.fldvlracionriesgo_imptotratado IS NOT NULL
4749 THEN
4750 imptoabslto = arrayimpactoid[regvaloracion.fldvlracionriesgo_imptotratado];
4751 END IF;
4752
4753 --Se obtiene id de la probabilidad absoluta
4754 IF regvaloracion.fldvlracionriesgo_probabslta IS NOT NULL
4755 THEN
4756 probabslta = arrayprobimpactoid[regvaloracion.fldvlracionriesgo_probabslta];
4757 END IF;
4758
4759 --Se obtiene id de la probabilidad controlada
4760 IF regvaloracion.fldvlracionriesgo_probctrlda IS NOT NULL
4761 THEN
4762 probctrlda = arrayprobimpactoid[regvaloracion.fldvlracionriesgo_probctrlda];
4763 END IF;
4764
4765 --Se obtiene id de la probabilidad tratada
4766 IF regvaloracion.fldvlracionriesgo_probtratada IS NOT NULL
4767 THEN
4768 probtratada = COALESCE(arrayprobimpactoid[regvaloracion.fldvlracionriesgo_probtratada],null);
4769 END IF;
4770
4771 --Se obtiene id del objetoimpacto que se creo para el nuevo sistema de riesgo
4772 IF regvaloracion.fldriesgoobjetoimpacto_id IS NOT NULL
4773 THEN
4774 objetoimpacto = arrayobjimpactoid[regvaloracion.fldriesgoobjetoimpacto_id];
4775 END IF;
4776
4777
4778 --Se obtiene id del manejo que se le da a la valoración absoluta
4779 IF regvaloracion.fldriesgomanejo_abslto_id IS NOT NULL
4780 THEN
4781 riesgomanejo_abslto = arraymanejoid[regvaloracion.fldriesgomanejo_abslto_id];
4782 END IF;
4783
4784 --Se obtiene id del manejo que se le da a la valoración controlada
4785 IF regvaloracion.fldriesgomanejo_ctrldo_id IS NOT NULL
4786 THEN
4787 riesgomanejo_ctrldo = arraymanejoid[regvaloracion.fldriesgomanejo_ctrldo_id];
4788 END IF;
4789
4790 --Se obtiene id del manejo que se le da a la valoración tratada
4791 IF regvaloracion.fldriesgomanejo_tratado_id IS NOT NULL
4792 THEN
4793 riesgomanejo_tratado = arraymanejoid[regvaloracion.fldriesgomanejo_tratado_id];
4794 END IF;
4795
4796 --Se agrega la valoración
4797 INSERT INTO tblvlracionriesgo(fldriesgo_id, fldvlracionriesgo_imptoabslto, fldvlracionriesgo_imptoctrldo,
4798 fldvlracionriesgo_probabslta, fldvlracionriesgo_probctrlda, fldvlracionriesgo_ctoabslto, fldvlracionriesgo_ctoctrldo,
4799 fldvlracionriesgo_imptotratado,
4800 fldvlracionriesgo_probtratada, fldriesgoobjetoimpacto_id, fldvlracionriesgo_ctotratado,
4801 fldriesgomanejo_abslto_id,fldriesgomanejo_ctrldo_id,fldriesgomanejo_tratado_id)
4802 VALUES (riesgo_nuevo_id, imptoabslto, imptoctrldo,
4803 probabslta, probctrlda, regvaloracion.fldvlracionriesgo_ctoabslto, regvaloracion.fldvlracionriesgo_ctoctrldo,
4804 imptotratado,
4805 probtratada, objetoimpacto, regvaloracion.fldvlracionriesgo_ctotratado, riesgomanejo_abslto,riesgomanejo_ctrldo,riesgomanejo_tratado);
4806
4807 END LOOP;
4808CLOSE curvaloraciones;
4809
4810--Se copian los controles propios (a estos se les copia todo)
4811OPEN curcontrolespropios;
4812 LOOP
4813 FETCH curcontrolespropios INTO regcontrolpropio;
4814 EXIT WHEN NOT FOUND;
4815
4816 --Se copia el control
4817 PERFORM copiar_riesgocontrol(regcontrolpropio.fldriesgocontrol_id,riesgo_nuevo_id,arrayctrlfrecid,arrayclasificid,arraycausasriesgoid);
4818
4819 END LOOP;
4820CLOSE curcontrolespropios;
4821
4822
4823--
4824-- Se copian los controles transversales de los riesgos viejos al nuevo riesgo
4825
4826--Se obtienen los controles no propios del riesgo
4827FOR regriesgo_control IN (
4828 SELECT * FROM tblriesgo_riesgocontrol rc
4829 INNER JOIN tblriesgocontrol c ON c.fldriesgocontrol_id = rc.fldriesgocontrol_id AND c.fldriesgocontrol_et IS NULL
4830 WHERE rc.fldriesgo_id=riesgo_id AND rc.fldriesgocontrol_id NOT IN (SELECT fldriesgocontrol_id FROM tblriesgocontrol WHERE fldriesgo_id = riesgo_id))
4831LOOP
4832
4833 --Se obtiene el equivalente del control en el nuevo SdR
4834 SELECT fldriesgocontrol_id INTO controlequiv_id
4835 FROM (
4836 SELECT fldriesgocontrol_id FROM tblriesgocontrol_equiv
4837 WHERE fldriesgocontrol_equiv_id = regriesgo_control.fldriesgocontrol_id
4838 AND fldriesgocontrol_id IN (SELECT c.fldriesgocontrol_id FROM tblriesgocontrol c
4839 WHERE c.fldriesgocontrol_id=fldriesgocontrol_id AND fldriesgocontrol_et IS NULL AND c.fldriesgo_id=riesgo_id)
4840 UNION
4841 SELECT fldriesgocontrol_equiv_id FROM tblriesgocontrol_equiv
4842 WHERE fldriesgocontrol_id = regriesgo_control.fldriesgocontrol_id
4843 AND fldriesgocontrol_equiv_id IN (
4844 SELECT c.fldriesgocontrol_id FROM tblriesgocontrol c WHERE c.fldriesgocontrol_id=fldriesgocontrol_equiv_id AND fldriesgocontrol_et IS NULL AND c.fldriesgo_id=riesgo_id)
4845 ) t1;
4846
4847 IF riesgo_nuevo_id IS NOT NULL AND controlequiv_id IS NOT NULL
4848 THEN
4849 --Se agrega el nuevo control no propio al nuevo riesgo
4850 INSERT INTO tblriesgo_riesgocontrol (fldriesgo_id,fldriesgocontrol_id) VALUES (riesgo_nuevo_id,controlequiv_id);
4851 END IF;
4852
4853 --Se obtienen las causas de los controles no propios del riesgo viejo
4854 FOR regcausacontrol IN (SELECT rcau.* FROM tblriesgocontrol_causa rcau
4855 INNER JOIN tblriesgocausa cau ON cau.fldriesgocausa_id = rcau.fldriesgocausa_id
4856 WHERE cau.fldriesgo_id=riesgo_id
4857 AND rcau.fldriesgocontrol_id NOT IN (SELECT fldriesgocontrol_id FROM tblriesgocontrol WHERE fldriesgo_id = riesgo_id))
4858 LOOP
4859
4860 --Obtener el id de la nueva causa
4861 riesgocausa_id = arraycausasriesgoid[regcausacontrol.fldriesgocausa_id];
4862
4863 --Se eliminan las relaciones inconsistentes (Causas asociadas a controles no propÃos de otro SdR)
4864 DELETE FROM tblriesgocontrol_causa WHERE fldriesgocontrol_id = regriesgo_control.fldriesgocontrol_id AND fldriesgocausa_id = riesgocausa_id;
4865
4866 --Se verifica si la relación existe
4867 SELECT 'X' INTO bandera FROM tblriesgocontrol_causa WHERE fldriesgocontrol_id = controlequiv_id AND fldriesgocausa_id=riesgocausa_id;
4868
4869 --Si no existe se inserta
4870 IF bandera IS NULL AND controlequiv_id IS NOT NULL AND riesgocausa_id IS NOT NULL THEN
4871 --Se inserta la relación entre la causa nueva y el control nuevo (no propio)
4872 INSERT INTO tblriesgocontrol_causa(fldriesgocontrol_id, fldriesgocausa_id) VALUES (controlequiv_id, riesgocausa_id);
4873
4874 END IF;
4875
4876 END LOOP;
4877
4878END LOOP;
4879
4880
4881RAISE NOTICE 'riesgo_id %',riesgo_nuevo_id;
4882
4883END;$BODY$
4884 LANGUAGE plpgsql VOLATILE
4885 COST 100;
4886
4887
4888 --Septiembre 12 de 2017
4889--Ajuste en función de reglas de indicadores (Jhonatan #3862)
4890CREATE OR REPLACE FUNCTION ind_calcularregla(indicador_id integer, fecha date, fecha_corte date, anio integer)
4891 RETURNS double precision AS
4892$BODY$
4893
4894-- Función que calcula la calificación de un itemplan según los Ãtems e indicadores dependientes
4895-- @author Jhonatan Chiquito - jchiquito@almeraim.com
4896-- @fecha Julio 05 de 2017
4897--
4898-- @param integer indicador_id: ID del indicador del que se desea obtener la calificación
4899-- @param date fecha: Fecha para la que se debe obtener la calificación para el itemplan (opcional)
4900-- @param date fecha_corte: Fecha corte para obtener el valor y la meta acumulada (opcional)
4901-- @param date anio: Cuando el plan estrategico es por años (opcional)
4902-- @return float valor_regla: Calificación del indicador
4903
4904DECLARE
4905 tipo_meta CHAR(1); --Variable para determinar el tipo de meta: Unica, estacional,...
4906 meta FLOAT; --Variable para almacenar el valor de la meta
4907 nro_reglas INTEGER; --Variable para determinar si el indicador de los cursores tiene reglas definidas
4908 fila_regla RECORD; --Variable para la fila de la regla de indicadores
4909 consulta character varying;
4910 fechamedicion date;
4911 fecha_acumula date;
4912
4913 valor_regla FLOAT;
4914 valoracumulado FLOAT;
4915 valoracumuladometa FLOAT;
4916 valormedicion FLOAT;
4917 metaindicador FLOAT;
4918 metamedicion FLOAT;
4919 metaestacional FLOAT;
4920 metaeperiodo FLOAT;
4921
4922BEGIN
4923
4924 -- Validacion de las reglas
4925 SELECT COUNT(*) INTO nro_reglas FROM tblindicadorregla WHERE fldindicador_id = indicador_id;
4926
4927 IF nro_reglas > 0
4928 THEN
4929 fechamedicion := fecha;
4930 IF fecha IS NULL THEN
4931
4932 IF anio IS NOT NULL THEN
4933 -- Se establece la fechamedicion con la última medicion realizada en el año indicado(anio)
4934 SELECT m.fldmedicion_fechainicioperiodo INTO fechamedicion
4935 FROM tblmedicion m
4936 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
4937 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
4938 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL AND EXTRACT(YEAR FROM m.fldmedicion_fechafinperiodo) = anio
4939 ORDER BY fldmedicion_fechafinperiodo DESC
4940 LIMIT 1;
4941
4942 -- Si no se encuentra una medicion se establece la fecha al 31 de Diciembre del año indicado
4943 IF fechamedicion IS NULL THEN
4944 fechamedicion := anio ||'-12-31';
4945 END IF;
4946
4947 ELSE
4948 -- Se establece la fechamedicion con la última medicion realizada
4949 SELECT m.fldmedicion_fechainicioperiodo INTO fechamedicion
4950 FROM tblmedicion m
4951 INNER JOIN tblindicador i ON i.fldindicador_id = m.fldindicador_id
4952 WHERE i.fldindicador_id = indicador_id AND m.fldindicador_periodicidad = i.fldindicador_periodicidad
4953 AND m.fldmedicion_et IS NULL AND m.fldmedicion_valor IS NOT NULL
4954 ORDER BY fldmedicion_fechafinperiodo DESC
4955 LIMIT 1;
4956
4957 END IF;
4958 END IF;
4959
4960
4961 fecha_acumula := fecha_corte;
4962 IF fecha_corte IS NULL THEN
4963 fecha_acumula := EXTRACT(year from fechamedicion)||'-12-31';
4964 END IF;
4965
4966 RAISE NOTICE 'Fecha: % || Fecha acumulada: %', fechamedicion, fecha_acumula;
4967
4968 -- Se obtiene la medición, medición acumulada, meta y la meta acumulada
4969 SELECT i.fldindicador_metaperiodica AS tipo_meta, i.fldindicador_meta,
4970 ind_obteneracumuladofecha(i.fldindicador_id, TO_CHAR(fecha_acumula, 'YYYY-MM-DD'), 'F') AS valoracumulado,
4971 ind_obteneracumuladometafecha(i.fldindicador_id, TO_CHAR(fecha_acumula, 'YYYY-MM-DD'), 'F') AS valoracumuladometa,
4972 ind_obtenermedicionfecha(i.fldindicador_id, 'valor', fechamedicion, 'F', 'F') AS valormedicion,
4973 ind_obtenermedicionfecha(i.fldindicador_id, 'meta', fechamedicion, 'F', 'F') AS metamedicion,
4974 --Meta estacional
4975 ( SELECT fldindicadormeta_valor FROM tblindicadormeta
4976 WHERE fldindicador_id=i.fldindicador_id AND fechamedicion BETWEEN fldindicadormeta_fi AND fldindicadormeta_ff
4977 ) AS metaestacional,
4978 --Meta del periodo (cuatrenio por ejemplo)
4979 ( SELECT ind_obteneracumuladometae(fldindicadormeta_id) FROM tblindicadormeta
4980 WHERE fldindicador_id=i.fldindicador_id AND fldindicadormeta_fi=(SELECT max(fldindicadormeta_fi) FROM tblindicadormeta WHERE fldindicador_id=i.fldindicador_id)
4981 ) AS metaeperiodo
4982 INTO tipo_meta, metaindicador, valoracumulado, valoracumuladometa, valormedicion, metamedicion, metaestacional, metaeperiodo
4983 FROM tblindicador i
4984 WHERE i.fldindicador_id = indicador_id;
4985
4986 valor_regla := null;
4987
4988 FOR fila_regla IN SELECT *FROM tblindicadorregla WHERE fldindicador_id = indicador_id ORDER BY fldindicadorregla_orden
4989 LOOP
4990 valor_regla := null;
4991 IF fila_regla.fldindicadorregla_variable = 'A' THEN
4992 valormedicion = valoracumulado;
4993 END IF;
4994
4995 IF fila_regla.fldindicadorregla_dato = 'META' THEN
4996 meta := null;
4997 --Se determina qué meta se usa
4998 IF tipo_meta = 'U' THEN
4999 meta := metaindicador;
5000 --El indicador tiene metas estacionales
5001 ELSIF tipo_meta = 'E' THEN
5002 meta := metaestacional;
5003 ELSIF tipo_meta = 'P' THEN --El indicador tiene seleccionado 'Sin meta'
5004 meta := metamedicion; --Se utiliza la meta del periodo (ej: meta del cuatrenio)
5005 END IF;
5006
5007 ELSIF fila_regla.fldindicadorregla_dato = 'METAACUMULADA' THEN
5008 meta = valoracumuladometa;
5009 ELSE
5010 meta = fila_regla.fldindicadorregla_dato;
5011 END IF;
5012
5013 RAISE NOTICE 'ValorMedicion: % **Meta: %', valormedicion, meta;
5014
5015 IF valormedicion IS NOT NULL AND meta IS NOT NULL THEN
5016 consulta := 'SELECT CASE WHEN '|| valormedicion ||' '|| fila_regla.fldindicadorregla_operador ||' '|| meta ||' THEN '|| fila_regla.fldindicadorregla_resultado ||' ELSE NULL END';
5017
5018 RAISE NOTICE 'Id: % Operador: "%" Consulta: %', fila_regla.fldindicadorregla_id, fila_regla.fldindicadorregla_operador, consulta;
5019 EXECUTE consulta INTO valor_regla;
5020
5021 IF valor_regla IS NOT NULL THEN
5022 EXIT; -- exit loop; Retorna el valor de la primera regla que cumple
5023 END IF;
5024 END IF;
5025
5026 END LOOP;
5027
5028 IF valor_regla IS NOT NULL THEN
5029 return ROUND(CAST(valor_regla as numeric), 2);
5030 END IF;
5031
5032 END IF;
5033
5034 RETURN valor_regla; --retornar la calificacion del indicador
5035END;
5036
5037$BODY$
5038 LANGUAGE plpgsql VOLATILE
5039 COST 100;
5040
5041
5042 --Septiembre 14 de 2017
5043--Ajuste menor en función ind_obteneracumuladometafecha (Jhonatan #3869)
5044CREATE OR REPLACE FUNCTION ind_obteneracumuladometafecha(indicador_id integer, fecha character, todos_periodos character)
5045 RETURNS double precision AS
5046$BODY$
5047
5048--Función para obtener el valor acumulado de un indicador para la meta en una fecha determinada
5049-- @author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
5050-- @fecha Enero 15 de 2014
5051--
5052-- @param integer indicador_id: ID del indicador para el que se obtiene el dato de la medición
5053-- @param char(10) fecha: Fecha para la que se obtiene el dato del acumulado
5054-- @param char(1) todos_periodos: Define si se acumula la meta de todos los periodos
5055-- @return double precision valor: Acumulado del indicador para la meta a la fecha
5056--
5057-- Modificaciones:
5058-- - Enero 20 de 2016 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
5059-- Se agrega validación para que se incluya en el acumulado las metas las mediciones que no tiene valor cuando el semáforo para se calcula la acumulación de la meta.
5060--
5061
5062
5063DECLARE
5064 valor double precision;
5065 tipo_meta char(1);
5066 meta_indicador double precision;
5067
5068 acumulacion char(3);
5069 periodicidad char(5);
5070 decimales int;
5071 metae_id integer;
5072 anio char(4);
5073 fechaI char(10);
5074 continuo char(1);
5075 funcion character varying;
5076 parentesis character varying;
5077 subconsulta character varying;
5078 consulta character varying;
5079 tiposemaforovalor char(2); --Tipo de semaforo para el valor
5080 tiposemaforometa char(2); --Tipo de semaforo para la fecha
5081
5082
5083BEGIN
5084 valor:=null;
5085 fechaI:=null;
5086 decimales:=0;
5087 metae_id:=null;
5088 funcion:='SUM';
5089 parentesis:='';
5090 subconsulta:='';
5091
5092 --Obtener tipo de meta, el tipo de acumulación, periodicidad y meta unica del indicador
5093 SELECT i.fldindicador_metaperiodica, i.fldindicador_acumulacion, i.fldindicador_periodicidad, i.fldindicador_meta, um.fldunidadmedida_decimales, i.fldindicador_continuo, fldindicador_vlrsemaforo, fldindicador_metasemaforo
5094 INTO tipo_meta, acumulacion, periodicidad, meta_indicador, decimales, continuo, tiposemaforovalor, tiposemaforometa
5095 FROM tblindicador i
5096 INNER JOIN tblunidadmedida um ON (um.fldunidadmedida_id=i.fldunidadmedida_id)
5097 WHERE i.fldindicador_id=indicador_id;
5098
5099 --Si el tipo es "Sin Meta" el acumulado es null
5100 IF tipo_meta = 'N' THEN
5101 return null;
5102 END IF;
5103
5104 --Si la meta es unica se retorna el valor ingresado en el indicador
5105 IF tipo_meta='U' THEN
5106 return meta_indicador;
5107 END IF;
5108
5109 --Si la meta es estacional el acumulado es el valor de la estación
5110 IF tipo_meta='E' THEN
5111 IF todos_periodos='F' THEN
5112 SELECT fldindicadormeta_valor INTO valor FROM tblindicadormeta WHERE fldindicador_id=indicador_id AND
5113 fecha BETWEEN TO_CHAR(fldindicadormeta_fi, 'YYYY-MM-DD') AND TO_CHAR(fldindicadormeta_ff, 'YYYY-MM-DD');
5114 return valor;
5115 ELSE
5116 --Obtener el ID de la meta estacional según la fecha
5117 IF todos_periodos='A' THEN
5118 SELECT fldindicadormeta_id INTO metae_id FROM tblindicadormeta WHERE fldindicador_id=indicador_id AND
5119 fecha BETWEEN TO_CHAR(fldindicadormeta_fi, 'YYYY-MM-DD') AND TO_CHAR(fldindicadormeta_ff, 'YYYY-MM-DD')
5120 AND EXTRACT(YEAR FROM fecha::date)=EXTRACT(YEAR FROM fldindicadormeta_ff);
5121 ELSE
5122 SELECT fldindicadormeta_id INTO metae_id FROM tblindicadormeta WHERE fldindicador_id=indicador_id AND
5123 fecha BETWEEN TO_CHAR(fldindicadormeta_fi, 'YYYY-MM-DD') AND TO_CHAR(fldindicadormeta_ff, 'YYYY-MM-DD');
5124 END IF;
5125 IF metae_id IS NOT NULL THEN
5126 return ind_obteneracumuladometae(metae_id);
5127 END IF;
5128 END IF;
5129 END IF;
5130
5131 --Se determina la fecha de inicio
5132 anio:=SUBSTRING(fecha for POSITION('-' IN fecha)-1);
5133
5134 --La fecha de inicio es el primer dÃa del primer mes del año de la medición
5135 fechaI:=anio||'-01-01';
5136
5137 --Ahora para las metas periodicas y la acumulación si la acumulación es diferente de no aplica NAC
5138 IF acumulacion!='NAC' AND fechaI IS NOT NULL THEN
5139 IF acumulacion = 'PRO' THEN
5140 funcion:='AVG';
5141 ELSIF acumulacion <> 'SUM' THEN
5142 funcion:='EXP(AVG(LN';
5143 parentesis:='))';
5144
5145 subconsulta:=' AND NOT EXISTS (SELECT ''x''
5146 FROM tblmedicion m
5147 INNER JOIN tblindicador i ON (i.fldindicador_id=m.fldindicador_id)
5148 INNER JOIN tblunidadmedida u ON (u.fldunidadmedida_id=i.fldunidadmedida_id)
5149 WHERE m.fldmedicion_et IS NULL AND
5150 m.fldindicador_id='||indicador_id||' AND
5151 m.fldindicador_periodicidad='''||periodicidad||'''
5152 AND m.fldmedicion_valor<=0 AND
5153 TO_CHAR(m.fldmedicion_fechainicioperiodo, ''YYYY-MM-DD'') BETWEEN '''||fechaI||''' AND '''||fecha||'''
5154 )';
5155 END IF;
5156
5157 --Se forma la consulta para obtener el acumulado hasta la fecha
5158 consulta:='SELECT ROUND(CAST('||funcion||'(m.fldmedicion_meta)'||parentesis||' as numeric), '||decimales||')
5159 FROM tblmedicion m
5160 INNER JOIN tblindicador i ON (i.fldindicador_id=m.fldindicador_id)
5161 INNER JOIN tblunidadmedida u ON (u.fldunidadmedida_id=i.fldunidadmedida_id)
5162 WHERE m.fldmedicion_et IS NULL AND
5163 m.fldindicador_id='||indicador_id||' AND
5164 m.fldindicador_periodicidad='''||periodicidad||''' AND
5165 m.fldmedicion_valor IS NOT NULL AND
5166 TO_CHAR(m.fldmedicion_fechainicioperiodo, ''YYYY-MM-DD'') BETWEEN '''||fechaI||''' AND '''||fecha||''''||subconsulta;
5167
5168 --Si se tiene acumulación y el calculo se hace con los valores acumulados se obtiene la meta acumualda
5169 IF tiposemaforometa='MA'
5170 THEN
5171 --Se forma la consulta para obtener el acumulado hasta la fecha
5172 consulta:='SELECT ROUND(CAST('||funcion||'(m.fldmedicion_meta)'||parentesis||' as numeric), '||decimales||')
5173 FROM tblmedicion m
5174 INNER JOIN tblindicador i ON (i.fldindicador_id=m.fldindicador_id)
5175 INNER JOIN tblunidadmedida u ON (u.fldunidadmedida_id=i.fldunidadmedida_id)
5176 WHERE m.fldmedicion_et IS NULL AND
5177 m.fldindicador_id='||indicador_id||' AND
5178 m.fldindicador_periodicidad='''||periodicidad||''' AND
5179 m.fldmedicion_valor IS NOT NULL AND
5180 TO_CHAR(m.fldmedicion_fechainicioperiodo, ''YYYY-MM-DD'') BETWEEN '''||fechaI||''' AND '''||fecha||''''||subconsulta;
5181 END IF;
5182
5183 EXECUTE consulta INTO valor;
5184 ELSE
5185 --Si no tiene acumulación se retorna la medición de la fecha indicada
5186 SELECT ROUND(CAST(m.fldmedicion_meta AS NUMERIC),2) INTO valor
5187 FROM tblmedicion m
5188 INNER JOIN tblindicador i ON i.fldindicador_id=m.fldindicador_id
5189 WHERE fldmedicion_et IS NULL AND m.fldindicador_periodicidad=i.fldindicador_periodicidad
5190 AND m.fldindicador_id = indicador_id AND (fecha::date BETWEEN m.fldmedicion_fechainicioperiodo AND m.fldmedicion_fechafinperiodo);
5191
5192 IF valor IS NULL THEN
5193 IF continuo <> 'F' THEN
5194 IF continuo = 'A' THEN
5195 SELECT ROUND(CAST(m.fldmedicion_meta AS NUMERIC),2) INTO valor
5196 FROM tblmedicion m
5197 INNER JOIN tblindicador i ON i.fldindicador_id=m.fldindicador_id
5198 WHERE m.fldindicador_id = indicador_id
5199 AND fldmedicion_et IS NULL
5200 AND m.fldindicador_periodicidad=i.fldindicador_periodicidad
5201 AND m.fldmedicion_valor IS NOT NULL
5202 AND EXTRACT(YEAR FROM m.fldmedicion_fechafinperiodo::date)=EXTRACT(YEAR FROM fecha::date);
5203 ELSE
5204 SELECT ROUND(CAST(m.fldmedicion_meta AS NUMERIC),2) INTO valor
5205 FROM tblmedicion m
5206 INNER JOIN tblindicador i ON i.fldindicador_id=m.fldindicador_id
5207 WHERE m.fldindicador_id = indicador_id
5208 AND fldmedicion_et IS NULL
5209 AND m.fldindicador_periodicidad=i.fldindicador_periodicidad
5210 AND m.fldmedicion_valor IS NOT NULL
5211 AND m.fldmedicion_fechainicioperiodo::date < fecha::date;
5212 END IF;
5213 END IF;
5214 END IF;
5215 END IF;
5216RETURN valor; --Retornar el valor acumulado
5217
5218END;$BODY$
5219 LANGUAGE plpgsql VOLATILE
5220 COST 100;
5221
5222--Posteriores
5223ALTER TABLE tbleventoriesgo RENAME fldeventoclaseacc_id TO obsoleto_claseacc_id;
5224ALTER TABLE tbleventoriesgo RENAME fldeventoagenteacc_id TO obsoleto_agenteacc_id;
5225ALTER TABLE tbleventoriesgo RENAME fldeventotipoacc_id TO obsoleto_tipoacc_id;
5226
5227DELETE FROM tblparametro
5228WHERE fldparametro_nombre IN ('_EVENTOS_INFORMACION_ACCIDENTE', '_EVENTOS_AGENTE_ACCIDENTE_TAB', '_EVENTOS_CLASE_ACCIDENTE_TAB', '_EVENTOS_TIPO_ACCIDENTE_TAB');
5229
5230ALTER TABLE tbleventoriesgo DROP COLUMN obsoleto_claseacc_id;
5231ALTER TABLE tbleventoriesgo DROP COLUMN obsoleto_agenteacc_id;
5232ALTER TABLE tbleventoriesgo DROP COLUMN obsoleto_tipoacc_id;
5233
5234DROP TABLE tbleventoagenteacc;
5235DROP TABLE tbleventoclaseacc;
5236DROP TABLE tbleventotipoacc;
5237
5238--Septiembre 17 de 2017 ACTUALIZACION SGI Build 7c2ce419b0cc2d0f7f3e9bb3e923746aa8363fc6
5239DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
5240
5241INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
5242VALUES ('_FECHA_ULT_ACTUALIZACION','2017-09-17 (Spy) 7c2ce419b0cc2d0f7f3e9bb3e923746aa8363fc6','T');
5243
5244UPDATE tblparametro SET fldparametro_valor='7c2ce419b0cc2d0f7f3e9bb3e923746aa8363fc6' WHERE fldparametro_nombre='_NUMERO_BUILD';
5245
5246--Septiembre 15 de 2017
5247--Depuración base de datos (Néstor)(Issue#3888)
5248DROP SEQUENCE IF EXISTS tblcompao_tipo_fldcompaotipo_id_seq;
5249
5250--Septiembre 15 de 2017
5251--Error al publicar procesos (#3897) (Jhonatan) (Falta en Oracle)
5252
5253CREATE OR REPLACE FUNCTION copiar_proceso(
5254 procesoid integer,
5255 copia character)
5256 RETURNS integer AS
5257$BODY$
5258
5259
5260--Función que copia la información asociada a un proceso
5261--
5262--@param integer procesoid: ID del proceso que se desea copiar
5263--@param char copia: Indica si se debe actualizar el et del documento asociado
5264--@return integer procesonuevoid: ID del proceso que se generó como copia del proceso actual
5265--
5266-- Modificaciones:
5267-- - Abril 01 de 2017 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
5268-- Se ajusta para que el st de copia de los procedimientos(proceso) se actualice en el for
5269--
5270
5271
5272DECLARE
5273 --cursor con los cargos del proceso
5274 curcargos CURSOR FOR
5275 SELECT * FROM tblproceso_cargo
5276 WHERE fldproceso_id = $1;
5277 --cursor con los grupos responsables del proceso
5278 curgrupos CURSOR FOR
5279 SELECT * FROM tblproceso_grupo
5280 WHERE fldproceso_id = $1;
5281 --cursor con los agrupadores
5282 curagrupadores CURSOR FOR
5283 SELECT * FROM tblagrupadorproceso
5284 WHERE fldproceso_id = $1 AND fldagrupadorproceso_et IS NULL;
5285 --Cursor con las categorÃas
5286 curcategorias CURSOR FOR
5287 SELECT fldprocesocat_id FROM tblproceso_procesocat
5288 WHERE fldproceso_id=$1;
5289 --cursor con las partes interesadas
5290 curpartesinteresadas CURSOR FOR
5291 SELECT * FROM tblparteinteresada
5292 WHERE fldproceso_id = $1 AND fldparteinteresada_et IS NULL AND fldparteinteresada_eliminado = 'F';
5293 --cursor con los ciclos PHVA
5294 curciclos CURSOR FOR
5295 SELECT * FROM tblproceso_ciclo
5296 WHERE fldproceso_id = $1;
5297 --cursor con las comunicaciones
5298 curcomunicaciones CURSOR FOR
5299 SELECT * FROM tblcomunicacion
5300 WHERE fldproceso_id = $1;
5301 --cursor con los archivos
5302 curarchivos CURSOR FOR
5303 SELECT * FROM tblarchivo
5304 WHERE fldarchivo_clase = 'proceso' AND fldarchivo_clase_id = $1 AND fldarchivo_eliminado = 'F';
5305 --cursor con los indicadores
5306 curindicadores CURSOR FOR
5307 SELECT b.*
5308 FROM tblindicador a
5309 INNER JOIN tblindicador_proceso b ON (a.fldindicador_id = b.fldindicador_id) AND b.fldproceso_id = $1
5310 WHERE a.fldindicador_temporal = 'F' AND a.fldindicador_eliminado='F';
5311 --cursos con los recursos
5312 currecursos CURSOR FOR
5313 SELECT pr.*
5314 FROM tblproceso_recurso pr
5315 INNER JOIN tblrecurso r ON(r.fldrecurso_id = pr.fldrecurso_id)
5316 WHERE pr.fldproceso_id = $1 AND r.fldrecurso_eliminado = 'F' ;
5317 --cursor con los procedimientos
5318 curprocedimientos CURSOR FOR
5319 SELECT p.*
5320 FROM tblproceso p
5321 JOIN tbldocumento d ON(d.flddocumento_id = p.flddocumento_origen_id)
5322 JOIN tblestadotipo e ON(e.fldestadotipo_id = d.fldestadotipo_id)
5323 WHERE p.fldproceso_tieneprocedimiento = 'T' AND
5324 p.fldproceso_eliminado = 'F' AND
5325 p.fldproceso_esactividad='F' AND
5326 e.fldestadotipo_anulado = 'F' AND
5327 (d.flddocumento_et IS NULL OR (d.flddocumento_et IS NOT NULL AND d.flddocumento_edicion = 'T')) AND
5328 fldproceso_padre = $1;
5329--cursor requisitos aplicables
5330 currequisitos CURSOR FOR
5331 SELECT * FROM tblproceso_nodomodelo
5332 WHERE fldproceso_id = $1 AND fldproceso_nodomodelo_et IS NULL;
5333 --cursor soportes normativos
5334 cursoportes CURSOR FOR
5335 SELECT DISTINCT doc.*
5336 FROM vista_documentos_relacionados vista
5337 JOIN tbldocumento doc ON(doc.flddocumento_id = vista.flddocumento_id)
5338 JOIN tblestadotipo et ON(et.fldestadotipo_id = doc.fldestadotipo_id)
5339 WHERE vista.soporte = 'T' AND vista.fldproceso_id = $1 AND et.fldestadotipo_anulado = 'F' AND vista.obsoleto = 'F' AND (doc.flddocumento_et IS NULL OR (doc.flddocumento_et IS NOT NULL AND doc.flddocumento_edicion = 'T'))
5340 ORDER BY doc.flddocumento_nombre ASC;
5341 --cursor documentos relacionados
5342 curdocumentos CURSOR FOR
5343 SELECT DISTINCT doc.*
5344 FROM vista_documentos_relacionados vista
5345 JOIN tbldocumento doc ON(doc.flddocumento_id = vista.flddocumento_id)
5346 JOIN tblestadotipo et ON(et.fldestadotipo_id = doc.fldestadotipo_id)
5347 WHERE vista.fldproceso_id = $1 AND vista.soporte = 'F' AND vista.obsoleto = 'F'
5348 AND et.fldestadotipo_anulado = 'F' AND (doc.flddocumento_et IS NULL OR (doc.flddocumento_et IS NOT NULL AND doc.flddocumento_edicion = 'T'))
5349 ORDER BY doc.flddocumento_nombre ASC;
5350 --cursor registros
5351 curregistros CURSOR FOR
5352 SELECT rp.* FROM tblregistro_proceso rp
5353 INNER JOIN tblregistro r ON(r.fldregistro_id = rp.fldregistro_id)
5354 WHERE fldproceso_id = $1 AND r.fldregistro_eliminado = 'F';
5355 --cursor terminos
5356 curterminos CURSOR FOR
5357 SELECT pt.* FROM tblproceso_termino pt
5358 INNER JOIN tblterminoglosario t ON(t.fldterminoglosario_id = pt.fldterminoglosario_id)
5359 WHERE pt.fldproceso_id = $1 AND t.fldterminoglosario_eliminado = 'F' AND fldproceso_termino_et IS NULL;
5360 --cursor procesos hijos
5361 curhijos CURSOR FOR
5362 SELECT p.*
5363 FROM tblproceso p
5364 INNER JOIN tbldocumento d ON p.flddocumento_origen_id=d.flddocumento_id
5365 INNER JOIN tblestadotipo e ON e.fldestadotipo_id=d.fldestadotipo_id
5366 WHERE fldproceso_padre = $1 AND
5367 e.fldestadotipo_publicado='T' AND
5368 e.fldestadotipo_anulado = 'F' AND
5369 p.fldproceso_eliminado='F' AND
5370 p.fldproceso_tieneprocedimiento = 'F' AND
5371 p.fldproceso_et IS NULL --AND
5372 --fldproceso_st = ( SELECT MAX(fldproceso_st) FROM tblproceso WHERE fldproceso_origen_id=p.fldproceso_origen_id AND fldproceso_padre = $1 AND fldproceso_eliminado='F' )
5373 ORDER BY p.fldproceso_orden,p.fldproceso_codigo;
5374
5375
5376 regcargo tblproceso_cargo%ROWTYPE;
5377 reggrupo tblproceso_grupo%ROWTYPE;
5378 regagrupador tblagrupadorproceso%ROWTYPE;
5379 regparteinteresada tblparteinteresada%ROWTYPE;
5380 regciclo tblproceso_ciclo%ROWTYPE;
5381 regcomunicacion tblcomunicacion%ROWTYPE;
5382 regarchivo tblarchivo%ROWTYPE;
5383 regindicador tblindicador_proceso%ROWTYPE;
5384 regrecurso tblproceso_recurso%ROWTYPE;
5385 regproceso tblproceso%ROWTYPE;
5386 regrequisito tblproceso_nodomodelo%ROWTYPE;
5387 regdocumento tbldocumento%ROWTYPE;
5388 regproc_doc tblproceso_documento%ROWTYPE;
5389 regregistro tblregistro_proceso%ROWTYPE;
5390 regtermino tblproceso_termino%ROWTYPE;
5391 regtipodocumento tbltipodocumento%ROWTYPE;
5392 regcampo tblcampoadicional%ROWTYPE;
5393 item RECORD;
5394 regarchivoarea tblarchivoarea%ROWTYPE;
5395 consultacampo character varying; --Usada para formar la consulta de campos adicionales
5396 tabla character varying; --Usada para formar la consulta de campos adicionales
5397 campo character varying; --Usado para formar la consulta de campos adicionales
5398
5399
5400 arrayid int2[]; --almacenar los id de los procedimientos a copiar
5401 arrayhijoid int2[]; --almacenar los id de los procesos hijos
5402 arrayagrupadorid int2[]; --almacenar los id de los agrupadores
5403 procesonuevoid integer;
5404 id integer;
5405 num integer;
5406 x integer;
5407 y integer;
5408 z integer;
5409 counter integer;
5410 estadoid integer;
5411 categoriaid integer; --ID de una categorÃa del cursor
5412 data_uri character varying;
5413BEGIN
5414
5415
5416--obtener tipo de documento del proceso
5417SELECT t.* INTO regtipodocumento
5418FROM tbltipodocumento t
5419INNER JOIN tbldocumento d ON (t.fldtipodocumento_id=d.fldtipodocumento_id)
5420INNER JOIN tblproceso p ON (p.flddocumento_origen_id=d.flddocumento_id)
5421WHERE p.fldproceso_id = $1;
5422
5423
5424--obtener documento asociado al proceso
5425SELECT d.* INTO regdocumento
5426FROM tbldocumento d
5427INNER JOIN tblproceso p ON (d.flddocumento_id=p.flddocumento_origen_id)
5428WHERE p.fldproceso_id=$1;
5429
5430
5431--copiar proceso
5432INSERT INTO tblproceso SELECT * FROM tblproceso WHERE fldproceso_id = $1;
5433--obtener id del nuevo proceso
5434procesonuevoid = currval('proceso_id_seq');
5435
5436
5437--copiar documento asociado
5438INSERT INTO tbldocumento SELECT * FROM tbldocumento WHERE flddocumento_id = regdocumento.flddocumento_id;
5439--obtener id del documento asociado
5440id = currval('documento_id_seq');
5441
5442
5443--actualizar et y documento origen del proceso en edición
5444UPDATE tblproceso SET fldproceso_et = now(), flddocumento_origen_id = id
5445WHERE fldproceso_id = procesonuevoid;
5446
5447
5448--RAISE NOTICE 'fldprocedimiento_id Parametro: (%) fecha %', fldproceso_id, now();
5449
5450--actualizar st del proceso actual
5451UPDATE tblproceso SET fldproceso_st = now()
5452WHERE fldproceso_id = $1;
5453
5454
5455IF $2 = 'T' THEN
5456 --actualizar et del documento asociado al proceso en edición
5457 UPDATE tbldocumento SET flddocumento_et = now(), flddocumento_edicion = 'T'
5458 WHERE flddocumento_id = id;
5459ELSE
5460 --obtener estado inicial del tipo de documento
5461 SELECT fldestadotipo_inicial_id INTO estadoid
5462 FROM tbltipodocumento
5463 WHERE fldtipodocumento_id = regtipodocumento.fldtipodocumento_id;
5464
5465
5466 --actualizar et, edicion y estado del documento asociado al proceso en edición
5467 UPDATE tbldocumento SET flddocumento_et = now(), flddocumento_edicion = 'T', fldestadotipo_id = estadoid
5468 WHERE flddocumento_id = id;
5469END IF;
5470
5471
5472--Responsables
5473
5474
5475--copiar cargos
5476OPEN curcargos;
5477 LOOP
5478 FETCH curcargos INTO regcargo;
5479 EXIT WHEN NOT FOUND;
5480 --copiar registro
5481 INSERT INTO tblproceso_cargo (fldproceso_id, fldcargo_id, fldprocesorol_id)
5482 VALUES(procesonuevoid, regcargo.fldcargo_id, regcargo.fldprocesorol_id);
5483 END LOOP;
5484CLOSE curcargos;
5485
5486
5487--copiar grupos
5488OPEN curgrupos;
5489 LOOP
5490 FETCH curgrupos INTO reggrupo;
5491 EXIT WHEN NOT FOUND;
5492 --copiar registro
5493 INSERT INTO tblproceso_grupo(fldproceso_id,fldgrupocargo_id)
5494 VALUES(procesonuevoid,reggrupo.fldgrupocargo_id);
5495
5496
5497 END LOOP;
5498CLOSE curgrupos;
5499
5500
5501--copiar agrupadores
5502OPEN curagrupadores;
5503 LOOP
5504 FETCH curagrupadores INTO regagrupador;
5505 EXIT WHEN NOT FOUND;
5506 --copiar registro
5507 INSERT INTO tblagrupadorproceso SELECT * FROM tblagrupadorproceso WHERE fldagrupadorproceso_id = regagrupador.fldagrupadorproceso_id;
5508
5509
5510 --obtener id del nuevo agrupador
5511 id = currval('agrupadorproceso_id_seq');
5512
5513
5514 --actualizar st del agrupador actual
5515 UPDATE tblagrupadorproceso SET fldagrupadorproceso_st = now()
5516 WHERE fldagrupadorproceso_id = regagrupador.fldagrupadorproceso_id;
5517
5518
5519 --actualizar padre del agrupador y et del agrupador en edición
5520 UPDATE tblagrupadorproceso SET fldagrupadorproceso_et = now(), fldproceso_id = procesonuevoid
5521 WHERE fldagrupadorproceso_id = id;
5522
5523
5524 --almacenar los nuevos agrupadores adicionados
5525 arrayagrupadorid[regagrupador.fldagrupadorproceso_id] = id;
5526
5527
5528 END LOOP;
5529CLOSE curagrupadores;
5530
5531
5532--Copiar categorÃas (en actividad)
5533OPEN curcategorias;
5534 LOOP
5535 FETCH curcategorias INTO categoriaid;
5536 EXIT WHEN NOT FOUND;
5537 --Copiar registro
5538 INSERT INTO tblproceso_procesocat(fldproceso_id, fldprocesocat_id)
5539 VALUES(procesonuevoid, categoriaid);
5540
5541
5542 END LOOP;
5543CLOSE curcategorias;
5544
5545
5546--copiar partes interesadas
5547OPEN curpartesinteresadas;
5548 LOOP
5549 FETCH curpartesinteresadas INTO regparteinteresada;
5550 EXIT WHEN NOT FOUND;
5551 --copiar registro
5552 INSERT INTO tblparteinteresada SELECT * FROM tblparteinteresada WHERE fldparteinteresada_id = regparteinteresada.fldparteinteresada_id;
5553
5554
5555 --obtener id de la nueva parte interesada
5556 id = currval('parteinteresada_id_seq');
5557
5558
5559 --actualizar st de la parte interesada actual
5560 UPDATE tblparteinteresada SET fldparteinteresada_st = now()
5561 WHERE fldparteinteresada_id = regparteinteresada.fldparteinteresada_id;
5562
5563
5564 --actualizar padre y et de la parte interesada en edición
5565 UPDATE tblparteinteresada SET fldparteinteresada_et = now(), fldproceso_id = procesonuevoid
5566 WHERE fldparteinteresada_id = id;
5567 END LOOP;
5568CLOSE curpartesinteresadas;
5569
5570
5571--copiar ciclos PHVA
5572OPEN curciclos;
5573 LOOP
5574 FETCH curciclos INTO regciclo;
5575 EXIT WHEN NOT FOUND;
5576 --copiar registro
5577 INSERT INTO tblproceso_ciclo(fldproceso_id,fldciclo_id)
5578 VALUES(procesonuevoid,regciclo.fldciclo_id);
5579
5580
5581 END LOOP;
5582CLOSE curciclos;
5583
5584
5585--copiar comunicaciones
5586OPEN curcomunicaciones;
5587 LOOP
5588 FETCH curcomunicaciones INTO regcomunicacion;
5589 EXIT WHEN NOT FOUND;
5590 --copiar registro
5591 INSERT INTO tblcomunicacion SELECT * FROM tblcomunicacion WHERE fldcomunicacion_id = regcomunicacion.fldcomunicacion_id;
5592
5593
5594 --obtener id de la nueva comunicacion
5595 id = currval('comunicacion_id_seq');
5596
5597
5598 --actualizar st del proceso obsoleto
5599 UPDATE tblcomunicacion SET fldcomunicacion_st = now()
5600 WHERE fldcomunicacion_id = regcomunicacion.fldcomunicacion_id;
5601
5602
5603 --actualizar padre y et de la comunicacion en edición
5604 UPDATE tblcomunicacion SET fldproceso_id = procesonuevoid
5605 WHERE fldcomunicacion_id = id;
5606
5607
5608 END LOOP;
5609CLOSE curcomunicaciones;
5610
5611
5612--copiar archivos
5613OPEN curarchivos;
5614 LOOP
5615 FETCH curarchivos INTO regarchivo;
5616 EXIT WHEN NOT FOUND;
5617 --copiar registro
5618 INSERT INTO tblarchivo SELECT * FROM tblarchivo WHERE fldarchivo_id = regarchivo.fldarchivo_id;
5619
5620
5621 --obtener id del nuevo archivo
5622 id = currval('archivo_id_seq');
5623
5624
5625 --actualizar padre del archivo nuevo
5626 UPDATE tblarchivo SET fldarchivo_clase_id = procesonuevoid
5627 WHERE fldarchivo_id = id;
5628
5629
5630 --se agregan las áres al archivo
5631 FOR regarchivoarea IN SELECT *
5632 FROM tblarchivoarea
5633 WHERE fldarchivo_id=regarchivo.fldarchivo_id
5634 LOOP
5635 --Se copian las áreas al nuevo archivo
5636 INSERT INTO tblarchivoarea (fldarchivo_id,fldarchivoarea_nombre,fldarchivoarea_ejex,fldarchivoarea_ejey,fldarchivoarea_ejex2,fldarchivoarea_ejey2,fldarchivoarea_url,fldarchivoarea_target)
5637 VALUES
5638 (id,regarchivoarea.fldarchivoarea_nombre,regarchivoarea.fldarchivoarea_ejex,regarchivoarea.fldarchivoarea_ejey,regarchivoarea.fldarchivoarea_ejex2,regarchivoarea.fldarchivoarea_ejey2,regarchivoarea.fldarchivoarea_url,regarchivoarea.fldarchivoarea_target);
5639 END LOOP;--Fin cursor áreas de archivo
5640
5641
5642 END LOOP;
5643CLOSE curarchivos;
5644
5645
5646--Copiar campos adicionales
5647FOR regcampo IN SELECT *
5648 FROM tblcampoadicional
5649 WHERE fldcampoadicional_padre_id = regtipodocumento.fldtipodocumento_id AND fldcampoadicional_padre='tipoDocumento'
5650LOOP
5651 --Determinar la tabla y el campo de valor a utilizar en la consulta
5652 IF TRIM(UPPER(regcampo.fldcampoadicional_tipodato))='SMM' THEN
5653 FOR item IN SELECT * FROM tblcampovlritem_proceso
5654 WHERE fldproceso_id=procesoid AND fldcampoadicional_id=regcampo.fldcampoadicional_id
5655 LOOP
5656 INSERT INTO tblcampovlritem_proceso (fldcampoadicional_id, fldproceso_id, fldcampoadicionalitem_id)
5657 VALUES (regcampo.fldcampoadicional_id, procesonuevoid, item.fldcampoadicionalitem_id);
5658 END LOOP;
5659 ELSE
5660 IF TRIM(UPPER(regcampo.fldcampoadicional_tipodato))='SMU' THEN
5661 tabla:='tblcampovlritem_proceso';
5662 campo:='fldcampoadicionalitem_id';
5663 ELSE
5664 tabla:='tblcampovlr'||TRIM(regcampo.fldcampoadicional_tipodato)||'_proceso';
5665 campo:='fldcampovlr'||TRIM(regcampo.fldcampoadicional_tipodato)||'_proc_valor';
5666 END IF;
5667
5668
5669 --Asociar el valor en el campo adicional para el nuevo proceso
5670 consultacampo:='INSERT INTO '||tabla||' (fldproceso_id, fldcampoadicional_id, '||campo||')
5671 VALUES ($1, $2, (SELECT ' ||campo||' FROM '||tabla||' WHERE fldproceso_id=$3 AND fldcampoadicional_id=$4))';
5672
5673
5674 --Ejecutar la consulta
5675 EXECUTE consultacampo USING procesonuevoid, regcampo.fldcampoadicional_id, procesoid, regcampo.fldcampoadicional_id;
5676 END IF;
5677END LOOP;
5678
5679
5680--copiar indicadores
5681OPEN curindicadores;
5682 LOOP
5683 FETCH curindicadores INTO regindicador;
5684 EXIT WHEN NOT FOUND;
5685 --copiar registro
5686 INSERT INTO tblindicador_proceso(fldindicador_id,fldproceso_id,fldindicador_proceso_peso)
5687 VALUES(regindicador.fldindicador_id,procesonuevoid,regindicador.fldindicador_proceso_peso);
5688 END LOOP;
5689CLOSE curindicadores;
5690
5691
5692--copiar recursos
5693OPEN currecursos;
5694 LOOP
5695 FETCH currecursos INTO regrecurso;
5696 EXIT WHEN NOT FOUND;
5697 --copiar registro
5698 INSERT INTO tblproceso_recurso(fldproceso_id,fldrecurso_id,fldproceso_recurso_tipo)
5699 VALUES(procesonuevoid,regrecurso.fldrecurso_id,regrecurso.fldproceso_recurso_tipo);
5700
5701
5702 END LOOP;
5703CLOSE currecursos;
5704
5705
5706--copiar procedimientos
5707x = 0;
5708OPEN curprocedimientos;
5709 LOOP
5710 FETCH curprocedimientos INTO regproceso;
5711 EXIT WHEN NOT FOUND;
5712 --guardar el id de los procedimientos que se van a copiar
5713 arrayid[x] = regproceso.fldproceso_id;
5714
5715
5716 x = x + 1;
5717 END LOOP;
5718CLOSE curprocedimientos;
5719
5720
5721IF x>0 THEN
5722 FOR y IN 0 .. x LOOP
5723 --copiar proceso
5724 id = CAST(copiar_proceso(arrayid[y],'T') AS integer);
5725 --copiar procedimiento
5726 num = copiar_procedimiento(CAST(arrayid[y] AS integer),id);
5727
5728
5729 --asociar el procedimiento al proceso nuevo
5730 UPDATE tblproceso SET fldproceso_padre = procesonuevoid, fldproceso_st=now()
5731 WHERE fldproceso_id = id;
5732
5733 --Se asocia el nuevo proceso como el padre del documento asociado al nuevo procedimiento
5734 UPDATE tbldocumento d SET fldproceso_padre_id = procesonuevoid
5735 FROM tblproceso p
5736 WHERE p.flddocumento_origen_id = d.flddocumento_id AND d.fldproceso_padre_id IS NOT NULL AND p.fldproceso_id = id;
5737 END LOOP;
5738END IF;
5739
5740
5741--copiar requisitos aplicables
5742OPEN currequisitos;
5743 LOOP
5744 FETCH currequisitos INTO regrequisito;
5745 EXIT WHEN NOT FOUND;
5746 --copiar registro
5747 INSERT INTO tblproceso_nodomodelo(fldproceso_id,fldnodomodelo_id,fldproceso_origen_id,fldnodomodelo_origen_id,fldproceso_nodomodelo_st,fldproceso_nodomodelo_et)
5748 VALUES(procesonuevoid,regrequisito.fldnodomodelo_id,regrequisito.fldproceso_origen_id,regrequisito.fldnodomodelo_origen_id,regrequisito.fldproceso_nodomodelo_st,now());
5749
5750
5751 --actualizar st del requisito actual
5752 UPDATE tblproceso_nodomodelo SET fldproceso_nodomodelo_st = now()
5753 WHERE fldproceso_id = regrequisito.fldproceso_id AND fldnodomodelo_id = regrequisito.fldnodomodelo_id;
5754
5755
5756 END LOOP;
5757CLOSE currequisitos;
5758
5759
5760--copiar soportes legales
5761OPEN cursoportes;
5762 LOOP
5763 FETCH cursoportes INTO regdocumento;
5764 EXIT WHEN NOT FOUND;
5765 --consultar relacion con la tabla n - n
5766 SELECT * INTO regproc_doc FROM tblproceso_documento WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
5767
5768
5769 --copiar registro
5770 INSERT INTO tblproceso_documento(fldproceso_id,flddocumento_id,fldproceso_documento_relacion,fldproceso_origen_id,flddocumento_origen_id,fldproceso_documento_st,fldproceso_documento_et)
5771 VALUES(procesonuevoid,regproc_doc.flddocumento_id,regproc_doc.fldproceso_documento_relacion,regproc_doc.fldproceso_origen_id,regproc_doc.flddocumento_origen_id,regproc_doc.fldproceso_documento_st,now());
5772
5773
5774 --actualizar st del documento actual
5775 UPDATE tblproceso_documento SET fldproceso_documento_st = now()
5776 WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
5777
5778
5779 END LOOP;
5780CLOSE cursoportes;
5781
5782
5783--copiar documentos relacionados
5784OPEN curdocumentos;
5785 LOOP
5786 FETCH curdocumentos INTO regdocumento;
5787 EXIT WHEN NOT FOUND;
5788 --consultar relacion con la tabla n - n
5789 SELECT * INTO regproc_doc FROM tblproceso_documento WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
5790
5791
5792 --copiar registro
5793 INSERT INTO tblproceso_documento(fldproceso_id,flddocumento_id,fldproceso_documento_relacion,fldproceso_origen_id,flddocumento_origen_id,fldproceso_documento_st,fldproceso_documento_et)
5794 VALUES(procesonuevoid,regproc_doc.flddocumento_id,regproc_doc.fldproceso_documento_relacion,regproc_doc.fldproceso_origen_id,regproc_doc.flddocumento_origen_id,regproc_doc.fldproceso_documento_st,now());
5795
5796
5797 --actualizar st del documento actual
5798 UPDATE tblproceso_documento SET fldproceso_documento_st = now()
5799 WHERE fldproceso_id = $1 AND flddocumento_id = regdocumento.flddocumento_id;
5800
5801
5802 END LOOP;
5803CLOSE curdocumentos;
5804
5805
5806--copiar registros
5807OPEN curregistros;
5808 LOOP
5809 FETCH curregistros INTO regregistro;
5810 EXIT WHEN NOT FOUND;
5811 --copiar registro
5812 id = copiar_registro(regregistro.fldregistro_id);
5813
5814
5815 --copiar relacion
5816 INSERT INTO tblregistro_proceso (fldregistro_id, fldproceso_id) VALUES (id, procesonuevoid);
5817 END LOOP;
5818CLOSE curregistros;
5819
5820
5821--copiar terminos glosario
5822OPEN curterminos;
5823 LOOP
5824 FETCH curterminos INTO regtermino;
5825 EXIT WHEN NOT FOUND;
5826 --copiar registro
5827 INSERT INTO tblproceso_termino(fldproceso_id,fldterminoglosario_id,fldproceso_origen_id,fldterminoglosario_origen_id,fldproceso_termino_st,fldproceso_termino_et)
5828 VALUES(procesonuevoid,regtermino.fldterminoglosario_id,regtermino.fldproceso_origen_id,regtermino.fldterminoglosario_origen_id,regtermino.fldproceso_termino_st,now());
5829
5830
5831 --actualizar st del termino actual
5832 UPDATE tblproceso_termino SET fldproceso_termino_st = now()
5833 WHERE fldproceso_id = regtermino.fldproceso_id AND fldterminoglosario_id = regtermino.fldterminoglosario_id;
5834
5835
5836 END LOOP;
5837CLOSE curterminos;
5838
5839
5840--Copiar las entradas y salidas del proceso
5841PERFORM copiar_entradas_salidas($1, procesonuevoid);
5842
5843
5844-- Copiar el padre e hijo de la tabla: tblproceso_proceso
5845INSERT INTO tblproceso_proceso (fldproceso_padre_id, fldproceso_hijo_id)
5846SELECT procesonuevoid, fldproceso_hijo_id FROM tblproceso_proceso WHERE fldproceso_padre_id = procesoid;
5847
5848
5849INSERT INTO tblproceso_proceso (fldproceso_padre_id, fldproceso_hijo_id)
5850SELECT fldproceso_padre_id, procesonuevoid FROM tblproceso_proceso WHERE fldproceso_hijo_id = procesoid;
5851
5852
5853--copia de los hijos
5854z = 0;
5855OPEN curhijos;
5856 LOOP
5857 FETCH curhijos INTO regproceso;
5858 EXIT WHEN NOT FOUND;
5859 --guardar el id de los procesos hijos que se van a copiar
5860 arrayhijoid[z] = regproceso.fldproceso_id;
5861
5862
5863 z = z + 1;
5864 END LOOP;
5865CLOSE curhijos;
5866
5867
5868IF z>0 THEN
5869 FOR y IN 0 .. z-1 LOOP
5870 --copiar proceso
5871 id = copiar_proceso(CAST(arrayhijoid[y] AS integer),'T');
5872 --actualizar padre del proceso
5873 UPDATE tblproceso SET fldproceso_padre = procesonuevoid
5874 WHERE fldproceso_id = id;
5875 END LOOP;
5876END IF;
5877
5878
5879--actualizar los agrupadores de las actividades nuevas
5880FOR regproceso IN SELECT p.*
5881 FROM tblproceso p
5882 INNER JOIN tbldocumento d ON p.flddocumento_origen_id=d.flddocumento_id
5883 INNER JOIN tblestadotipo e ON e.fldestadotipo_id=d.fldestadotipo_id
5884 INNER JOIN tbltipodocumento t ON(t.fldtipodocumento_id = d.fldtipodocumento_id)
5885 WHERE fldproceso_padre=procesonuevoid AND e.fldestadotipo_publicado='T' AND e.fldestadotipo_anulado = 'F'
5886 AND p.fldproceso_eliminado='F' AND t.fldtipodocumento_esactividad = 'T'
5887 --AND fldproceso_st = (SELECT MAX(fldproceso_st) FROM tblproceso WHERE fldproceso_origen_id=p.fldproceso_origen_id AND fldproceso_padre=procesonuevoid AND fldproceso_eliminado='F')
5888 ORDER BY p.fldproceso_orden ASC
5889LOOP
5890 IF regproceso.fldagrupadorproceso_id IS NOT NULL THEN
5891 --actualizar agrupador
5892 UPDATE tblproceso SET fldagrupadorproceso_id = arrayagrupadorid[regproceso.fldagrupadorproceso_id]
5893 WHERE fldproceso_id = regproceso.fldproceso_id;
5894 END IF;
5895END LOOP;
5896
5897
5898--Se copian los diagramas con drawio
5899INSERT INTO tblproceso_drawio (fldproceso_id, fldproceso_drawio_src, fldproceso_drawioorden, fldusuario_id)
5900 SELECT procesonuevoid, fldproceso_drawio_src, fldproceso_drawioorden, fldusuario_id
5901 FROM tblproceso_drawio WHERE fldproceso_id=procesoid AND fldproceso_drawio_et IS NULL;
5902
5903RETURN procesonuevoid;
5904
5905
5906END;$BODY$
5907 LANGUAGE plpgsql VOLATILE
5908 COST 100;
5909
5910
5911
5912--Septiembre 14 de 2017
5913--Ajuste menor en función ind_obteneracumuladometafecha (Jhonatan #3869)
5914CREATE OR REPLACE FUNCTION ind_obteneracumuladometafecha(indicador_id integer, fecha character, todos_periodos character)
5915 RETURNS double precision AS
5916$BODY$
5917
5918--Función para obtener el valor acumulado de un indicador para la meta en una fecha determinada
5919-- @author Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
5920-- @fecha Enero 15 de 2014
5921--
5922-- @param integer indicador_id: ID del indicador para el que se obtiene el dato de la medición
5923-- @param char(10) fecha: Fecha para la que se obtiene el dato del acumulado
5924-- @param char(1) todos_periodos: Define si se acumula la meta de todos los periodos
5925-- @return double precision valor: Acumulado del indicador para la meta a la fecha
5926--
5927-- Modificaciones:
5928-- - Enero 20 de 2016 por Jorge Ivan Franco Hoyos <jorgeun@gmail.com>
5929-- Se agrega validación para que se incluya en el acumulado las metas las mediciones que no tiene valor cuando el semáforo para se calcula la acumulación de la meta.
5930--
5931
5932
5933DECLARE
5934 valor double precision;
5935 tipo_meta char(1);
5936 meta_indicador double precision;
5937
5938 acumulacion char(3);
5939 periodicidad char(5);
5940 decimales int;
5941 metae_id integer;
5942 anio char(4);
5943 fechaI char(10);
5944 continuo char(1);
5945 funcion character varying;
5946 parentesis character varying;
5947 subconsulta character varying;
5948 consulta character varying;
5949 tiposemaforovalor char(2); --Tipo de semaforo para el valor
5950 tiposemaforometa char(2); --Tipo de semaforo para la fecha
5951
5952
5953BEGIN
5954 valor:=null;
5955 fechaI:=null;
5956 decimales:=0;
5957 metae_id:=null;
5958 funcion:='SUM';
5959 parentesis:='';
5960 subconsulta:='';
5961
5962 --Obtener tipo de meta, el tipo de acumulación, periodicidad y meta unica del indicador
5963 SELECT i.fldindicador_metaperiodica, i.fldindicador_acumulacion, i.fldindicador_periodicidad, i.fldindicador_meta, um.fldunidadmedida_decimales, i.fldindicador_continuo, fldindicador_vlrsemaforo, fldindicador_metasemaforo
5964 INTO tipo_meta, acumulacion, periodicidad, meta_indicador, decimales, continuo, tiposemaforovalor, tiposemaforometa
5965 FROM tblindicador i
5966 INNER JOIN tblunidadmedida um ON (um.fldunidadmedida_id=i.fldunidadmedida_id)
5967 WHERE i.fldindicador_id=indicador_id;
5968
5969 --Si el tipo es "Sin Meta" el acumulado es null
5970 IF tipo_meta = 'N' THEN
5971 return null;
5972 END IF;
5973
5974 --Si la meta es unica se retorna el valor ingresado en el indicador
5975 IF tipo_meta='U' THEN
5976 return meta_indicador;
5977 END IF;
5978
5979 --Si la meta es estacional el acumulado es el valor de la estación
5980 IF tipo_meta='E' THEN
5981 IF todos_periodos='F' THEN
5982 SELECT fldindicadormeta_valor INTO valor FROM tblindicadormeta WHERE fldindicador_id=indicador_id AND
5983 fecha BETWEEN TO_CHAR(fldindicadormeta_fi, 'YYYY-MM-DD') AND TO_CHAR(fldindicadormeta_ff, 'YYYY-MM-DD');
5984 return valor;
5985 ELSE
5986 --Obtener el ID de la meta estacional según la fecha
5987 IF todos_periodos='A' THEN
5988 SELECT fldindicadormeta_id INTO metae_id FROM tblindicadormeta WHERE fldindicador_id=indicador_id AND
5989 fecha BETWEEN TO_CHAR(fldindicadormeta_fi, 'YYYY-MM-DD') AND TO_CHAR(fldindicadormeta_ff, 'YYYY-MM-DD')
5990 AND EXTRACT(YEAR FROM fecha::date)=EXTRACT(YEAR FROM fldindicadormeta_ff);
5991 ELSE
5992 SELECT fldindicadormeta_id INTO metae_id FROM tblindicadormeta WHERE fldindicador_id=indicador_id AND
5993 fecha BETWEEN TO_CHAR(fldindicadormeta_fi, 'YYYY-MM-DD') AND TO_CHAR(fldindicadormeta_ff, 'YYYY-MM-DD');
5994 END IF;
5995 IF metae_id IS NOT NULL THEN
5996 return ind_obteneracumuladometae(metae_id);
5997 END IF;
5998 END IF;
5999 END IF;
6000
6001 --Se determina la fecha de inicio
6002 anio:=SUBSTRING(fecha for POSITION('-' IN fecha)-1);
6003
6004 --La fecha de inicio es el primer dÃa del primer mes del año de la medición
6005 fechaI:=anio||'-01-01';
6006
6007 --Ahora para las metas periodicas y la acumulación si la acumulación es diferente de no aplica NAC
6008 IF acumulacion!='NAC' AND fechaI IS NOT NULL THEN
6009 IF acumulacion = 'PRO' THEN
6010 funcion:='AVG';
6011 ELSIF acumulacion <> 'SUM' THEN
6012 funcion:='EXP(AVG(LN';
6013 parentesis:='))';
6014
6015 subconsulta:=' AND NOT EXISTS (SELECT ''x''
6016 FROM tblmedicion m
6017 INNER JOIN tblindicador i ON (i.fldindicador_id=m.fldindicador_id)
6018 INNER JOIN tblunidadmedida u ON (u.fldunidadmedida_id=i.fldunidadmedida_id)
6019 WHERE m.fldmedicion_et IS NULL AND
6020 m.fldindicador_id='||indicador_id||' AND
6021 m.fldindicador_periodicidad='''||periodicidad||'''
6022 AND m.fldmedicion_valor<=0 AND
6023 TO_CHAR(m.fldmedicion_fechainicioperiodo, ''YYYY-MM-DD'') BETWEEN '''||fechaI||''' AND '''||fecha||'''
6024 )';
6025 END IF;
6026
6027 --Se forma la consulta para obtener el acumulado hasta la fecha
6028 consulta:='SELECT ROUND(CAST('||funcion||'(m.fldmedicion_meta)'||parentesis||' as numeric), '||decimales||')
6029 FROM tblmedicion m
6030 INNER JOIN tblindicador i ON (i.fldindicador_id=m.fldindicador_id)
6031 INNER JOIN tblunidadmedida u ON (u.fldunidadmedida_id=i.fldunidadmedida_id)
6032 WHERE m.fldmedicion_et IS NULL AND
6033 m.fldindicador_id='||indicador_id||' AND
6034 m.fldindicador_periodicidad='''||periodicidad||''' AND
6035 m.fldmedicion_valor IS NOT NULL AND
6036 TO_CHAR(m.fldmedicion_fechainicioperiodo, ''YYYY-MM-DD'') BETWEEN '''||fechaI||''' AND '''||fecha||''''||subconsulta;
6037
6038 --Si se tiene acumulación y el calculo se hace con los valores acumulados se obtiene la meta acumualda
6039 IF tiposemaforometa='MA'
6040 THEN
6041 --Se forma la consulta para obtener el acumulado hasta la fecha
6042 consulta:='SELECT ROUND(CAST('||funcion||'(m.fldmedicion_meta)'||parentesis||' as numeric), '||decimales||')
6043 FROM tblmedicion m
6044 INNER JOIN tblindicador i ON (i.fldindicador_id=m.fldindicador_id)
6045 INNER JOIN tblunidadmedida u ON (u.fldunidadmedida_id=i.fldunidadmedida_id)
6046 WHERE m.fldmedicion_et IS NULL AND
6047 m.fldindicador_id='||indicador_id||' AND
6048 m.fldindicador_periodicidad='''||periodicidad||''' AND
6049 m.fldmedicion_valor IS NOT NULL AND
6050 TO_CHAR(m.fldmedicion_fechainicioperiodo, ''YYYY-MM-DD'') BETWEEN '''||fechaI||''' AND '''||fecha||''''||subconsulta;
6051 END IF;
6052
6053 EXECUTE consulta INTO valor;
6054 ELSE
6055 --Si no tiene acumulación se retorna la medición de la fecha indicada
6056 SELECT ROUND(CAST(m.fldmedicion_meta AS NUMERIC),2) INTO valor
6057 FROM tblmedicion m
6058 INNER JOIN tblindicador i ON i.fldindicador_id=m.fldindicador_id
6059 WHERE fldmedicion_et IS NULL AND m.fldindicador_periodicidad=i.fldindicador_periodicidad
6060 AND m.fldindicador_id = indicador_id AND (fecha::date BETWEEN m.fldmedicion_fechainicioperiodo AND m.fldmedicion_fechafinperiodo);
6061
6062 IF valor IS NULL THEN
6063 IF continuo <> 'F' THEN
6064 IF continuo = 'A' THEN
6065 SELECT ROUND(CAST(m.fldmedicion_meta AS NUMERIC),2) INTO valor
6066 FROM tblmedicion m
6067 INNER JOIN tblindicador i ON i.fldindicador_id=m.fldindicador_id
6068 WHERE m.fldindicador_id = indicador_id
6069 AND fldmedicion_et IS NULL
6070 AND m.fldindicador_periodicidad=i.fldindicador_periodicidad
6071 AND m.fldmedicion_valor IS NOT NULL
6072 AND EXTRACT(YEAR FROM m.fldmedicion_fechafinperiodo::date)=EXTRACT(YEAR FROM fecha::date);
6073 ELSE
6074 SELECT ROUND(CAST(m.fldmedicion_meta AS NUMERIC),2) INTO valor
6075 FROM tblmedicion m
6076 INNER JOIN tblindicador i ON i.fldindicador_id=m.fldindicador_id
6077 WHERE m.fldindicador_id = indicador_id
6078 AND fldmedicion_et IS NULL
6079 AND m.fldindicador_periodicidad=i.fldindicador_periodicidad
6080 AND m.fldmedicion_valor IS NOT NULL
6081 AND m.fldmedicion_fechainicioperiodo::date < fecha::date;
6082 END IF;
6083 END IF;
6084 END IF;
6085 END IF;
6086RETURN valor; --Retornar el valor acumulado
6087
6088END;$BODY$
6089 LANGUAGE plpgsql VOLATILE
6090 COST 100;
6091
6092--Septiembre 18 de 2017 ACTUALIZACION SGI Build 177ca755bf731a6dcb4deb10d31941522fb197ad
6093DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
6094
6095INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
6096VALUES ('_FECHA_ULT_ACTUALIZACION','2017-09-18 (Spy II) 177ca755bf731a6dcb4deb10d31941522fb197ad','T');
6097
6098UPDATE tblparametro SET fldparametro_valor='177ca755bf731a6dcb4deb10d31941522fb197ad' WHERE fldparametro_nombre='_NUMERO_BUILD';
6099
6100--Septiembre 22 de 2017 ACTUALIZACION SGI Build 177ca755bf731a6dcb4deb10d31941522fb197ad
6101DELETE FROM tblparametro WHERE fldparametro_nombre='_FECHA_ULT_ACTUALIZACION';
6102
6103INSERT INTO tblparametro(fldparametro_nombre,fldparametro_valor,fldparametro_constante)
6104VALUES ('_FECHA_ULT_ACTUALIZACION','2017-09-22 (Spy II) 177ca755bf731a6dcb4deb10d31941522fb197ad','T');
6105
6106UPDATE tblparametro SET fldparametro_valor='177ca755bf731a6dcb4deb10d31941522fb197ad' WHERE fldparametro_nombre='_NUMERO_BUILD';
6107
6108--Septiembre 20 de 2017
6109--Etiqueta para "Planes de mejora" en menu lateral > Acciones (#3952) (Yesid)
6110INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
6111VALUES ('_ETIQUETA_PLANESMEJORA_MENULATERAL','Planes de Mejora','T');
6112
6113--Constante diagrama kanban en act de proyectos (Diego#3949)
6114INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
6115VALUES ('_ACTIVIDAD_VISUALIZACION_ESTADO', 'false', 'T');
6116
6117--Septiembre 21 de 2017
6118--Se agrega columna en actividades para estado de seguimiento (Diego)
6119ALTER TABLE tbdsigspaactividad ADD fldpyestadoactividad_id integer CONSTRAINT actividad_pyestadoactividad_fk REFERENCES tblpyestadoactividad (fldpyestadoactividad_id);
6120COMMENT ON COLUMN tbdsigspaactividad.fldpyestadoactividad_id IS 'Id del estado de seguimiento, solo mediante diagrama kanban';
6121
6122--Se crea indice (Diego)
6123CREATE INDEX gtcampovalor_gttramite_idx ON tblgtcampovalor_archivo (fldgttramite_id);
6124
6125--Se elimina not null a campo unidad de edad en personas (Néstor)(Issue#3899)
6126ALTER TABLE tbleventopersona ALTER COLUMN fldeventopersona_edaduni DROP NOT NULL;
6127
6128--Septiembre 22 de 2017
6129--Se agrega campo orden en dominios (Néstor)(Issue#3968)
6130ALTER TABLE tbldominio ADD flddominio_orden INTEGER;
6131COMMENT ON COLUMN tbldominio.flddominio_orden IS 'Indica el orden de dominios';
6132
6133DO language plpgsql $$
6134DECLARE
6135 orden INTEGER;
6136 dominios CURSOR FOR SELECT * FROM tbldominio ORDER BY flddominio_id;
6137 dom record;
6138BEGIN
6139 orden := 1;
6140
6141 FOR dom IN dominios LOOP
6142 UPDATE tbldominio SET flddominio_orden = orden WHERE flddominio_id = dom.flddominio_id;
6143 orden = orden + 1;
6144 END LOOP;
6145
6146END;
6147$$;
6148
6149--Se actualiza estados en actividades (DIego)
6150UPDATE tbdsigspaactividad a SET fldpyestadoactividad_id=(
6151 SELECT aa.fldpyestadoactividad_id FROM tbdsigspaactividadavance aa
6152 WHERE aa.fldactividad_codigo=a.fldactividad_id
6153 AND fldavance_et IS NULL
6154 AND fldavance_tipo ='U'
6155 AND fldavance_avance IS NOT NULL
6156 ORDER BY fldavance_fecha DESC, fldavance_avance DESC LIMIT 1
6157);
6158
6159--Se crea nuevo indice (Néstor)(Issue#3968)
6160create index campovlritem_evenriesgo_idx on tblcampovlritem_evenrsg (fldeventoriesgo_id);
6161
6162--Constante trasliteración en eventos (Diego #3982)
6163INSERT INTO tblparametro (fldparametro_nombre, fldparametro_valor, fldparametro_constante)
6164VALUES ('_EVENTOS_TRASLITERAR_ARCHIVOS', 'false', 'T');