GA_1918.sql
14.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
/*
**********************************************************************************
* *
* @package URBEM CNM - Soluções em Gestão Pública *
* @copyright (c) 2013 Confederação Nacional de Municípos *
* @author Confederação Nacional de Municípios *
* *
* O URBEM CNM é um software livre; você pode redistribuí-lo e/ou modificá-lo sob *
* os termos da Licença Pública Geral GNU conforme publicada pela Fundação do *
* Software Livre (FSF - Free Software Foundation); na versão 2 da Licença. *
* *
* Este programa é distribuído na expectativa de que seja útil, porém, *
* SEM NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU *
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do GNU *
* para mais detalhes. *
* *
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU "LICENCA.txt" *
* com este programa; se não, escreva para a Free Software Foundation Inc., *
* no endereço 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
* *
**********************************************************************************
*/
/*
* Script de DDL e DML
*
* URBEM Soluções de Gestão Pública Ltda
* www.urbem.cnm.org.br
*
* $Id: GA_1917.sql 36403 2008-12-10 16:30:40Z fabio $
*
* Versão 1.91.8
*/
----------------
-- Ticket #12563
----------------
ALTER TABLE organograma.organograma ADD COLUMN ativo BOOLEAN;
UPDATE organograma.organograma SET ativo = FALSE;
CREATE OR REPLACE FUNCTION manutencao() RETURNS VOID AS $$
DECLARE
inOrganograma INTEGER;
BEGIN
SELECT cod_organograma
INTO inOrganograma
FROM organograma.organograma
WHERE implantacao = ( SELECT MAX(implantacao)
FROM organograma.organograma
WHERE implantacao <= CAST(now() AS DATE)
);
UPDATE organograma.organograma
SET ativo = TRUE
WHERE cod_organograma = inOrganograma;
END;
$$ LANGUAGE 'plpgsql';
SELECT manutencao();
DROP FUNCTION manutencao();
ALTER TABLE organograma.organograma ALTER COLUMN ativo SET NOT NULL;
ALTER TABLE organograma.organograma ALTER COLUMN ativo SET DEFAULT TRUE;
----------------------------------------------------------------------------------
-- ALTERACAO P/ IMPEDIR DUPLICIDADE DE cod_orgao NA TABELA organograma.orgao_nivel
-- TONISMAR E GELSON - 20081203 --------------------------------------------------
CREATE OR REPLACE FUNCTION organograma.unicidade_orgao_nivel( ) RETURNS TRIGGER AS $$
DECLARE
BEGIN
PERFORM 1
FROM organograma.orgao_nivel
WHERE cod_orgao = NEW.cod_orgao
AND cod_nivel = NEW.cod_nivel;
IF FOUND THEN
RAISE EXCEPTION 'Órgão já em uso no sistema. Contate suporte!';
ELSE
RETURN NEW;
END IF;
END;
$$ LANGUAGE 'plpgsql';
CREATE TRIGGER tr_restringe_orgao_duplicado BEFORE INSERT OR UPDATE ON organograma.orgao_nivel FOR EACH ROW EXECUTE PROCEDURE organograma.unicidade_orgao_nivel();
----------------
-- Ticket #12563
----------------
CREATE TABLE organograma.orgao_descricao (
cod_orgao INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL DEFAULT ('now'::text)::timestamp(3) with time zone,
descricao VARCHAR(100) NOT NULL,
CONSTRAINT pk_orgao_descricao PRIMARY KEY (cod_orgao, timestamp),
CONSTRAINT fk_orgao_descricao_1 FOREIGN KEY (cod_orgao)
REFERENCES organograma.orgao (cod_orgao)
);
GRANT ALL ON organograma.orgao_descricao TO GROUP urbem;
INSERT
INTO organograma.orgao_descricao
( cod_orgao
, timestamp
, descricao )
SELECT cod_orgao
, criacao::timestamp(3)
, descricao
FROM organograma.orgao;
----------------
-- Ticket #12663
----------------
INSERT INTO administracao.acao
( cod_acao
, cod_funcionalidade
, nom_arquivo
, parametro
, ordem
, complemento_acao
, nom_acao )
VALUES ( 2426
, 170
, 'FMConfigurarOrganograma.php'
, 'configurar'
, 0
, ''
, 'Configuração'
);
----------------------
-- DE-PARA ORGANOGRAMA
----------------------
CREATE TABLE organograma.de_para_setor (
ano_exercicio CHAR(4) NOT NULL,
cod_orgao INTEGER NOT NULL,
cod_unidade INTEGER NOT NULL,
cod_departamento INTEGER NOT NULL,
cod_setor INTEGER NOT NULL,
cod_orgao_organograma INTEGER ,
CONSTRAINT pk_de_para_setor PRIMARY KEY (ano_exercicio, cod_orgao, cod_unidade, cod_departamento, cod_setor),
CONSTRAINT fk_de_para_setor_1 FOREIGN KEY (ano_exercicio, cod_orgao, cod_unidade, cod_departamento, cod_setor)
REFERENCES administracao.setor (ano_exercicio, cod_orgao, cod_unidade, cod_departamento, cod_setor),
CONSTRAINT fk_de_para_setor_2 FOREIGN KEY (cod_orgao_organograma)
REFERENCES organograma.orgao (cod_orgao)
);
GRANT ALL ON organograma.de_para_setor TO GROUP urbem;
INSERT
INTO organograma.de_para_setor
( cod_orgao
, cod_unidade
, cod_departamento
, cod_setor
, ano_exercicio
)
SELECT DISTINCT ON ( aset.cod_orgao
, aset.cod_unidade
, aset.cod_departamento
, aset.cod_setor
)
aset.cod_orgao
, aset.cod_unidade
, aset.cod_departamento
, aset.cod_setor
, aset.ano_exercicio
FROM administracao.setor AS aset
LEFT JOIN orcamento.orgao AS oorg
ON aset.cod_orgao = oorg.cod_orgao
AND aset.ano_exercicio = oorg.ano_exercicio
LEFT JOIN orcamento.unidade AS ouni
ON aset.cod_orgao = ouni.cod_orgao
AND aset.cod_unidade = ouni.cod_unidade
AND aset.ano_exercicio = ouni.ano_exercicio
LEFT JOIN administracao.comunicado AS acom
ON aset.cod_orgao = acom.cod_orgao
AND aset.cod_unidade = acom.cod_unidade
AND aset.cod_departamento = acom.cod_departamento
AND aset.cod_setor = acom.cod_setor
AND aset.ano_exercicio = acom.exercicio_setor
LEFT JOIN administracao.usuario AS ausu
ON aset.cod_orgao = ausu.cod_orgao
AND aset.cod_unidade = ausu.cod_unidade
AND aset.cod_departamento = ausu.cod_departamento
AND aset.cod_setor = ausu.cod_setor
AND aset.ano_exercicio = ausu.ano_exercicio
LEFT JOIN frota.terceiros_historico AS fthi
ON aset.cod_orgao = fthi.cod_orgao
AND aset.cod_unidade = fthi.cod_unidade
AND aset.cod_departamento = fthi.cod_departamento
AND aset.cod_setor = fthi.cod_setor
AND aset.ano_exercicio = fthi.ano_exercicio
LEFT JOIN patrimonio.historico_bem AS phbe
ON aset.cod_orgao = phbe.cod_orgao
AND aset.cod_unidade = phbe.cod_unidade
AND aset.cod_departamento = phbe.cod_departamento
AND aset.cod_setor = phbe.cod_setor
AND aset.ano_exercicio = phbe.ano_exercicio;
CREATE TABLE organograma.de_para_local (
ano_exercicio CHAR(4) NOT NULL,
cod_orgao INTEGER NOT NULL,
cod_unidade INTEGER NOT NULL,
cod_departamento INTEGER NOT NULL,
cod_setor INTEGER NOT NULL,
cod_local INTEGER NOT NULL,
cod_local_organograma INTEGER ,
CONSTRAINT pk_de_para_local PRIMARY KEY (ano_exercicio, cod_orgao, cod_unidade, cod_departamento, cod_setor, cod_local),
CONSTRAINT fk_de_para_local_1 FOREIGN KEY (ano_exercicio, cod_orgao, cod_unidade, cod_departamento, cod_setor, cod_local)
REFERENCES administracao.local (ano_exercicio, cod_orgao, cod_unidade, cod_departamento, cod_setor, cod_local),
CONSTRAINT fk_de_para_local_2 FOREIGN KEY (cod_local_organograma)
REFERENCES organograma.local (cod_local)
);
GRANT ALL ON organograma.de_para_local TO GROUP urbem;
INSERT
INTO organograma.de_para_local
( cod_orgao
, cod_unidade
, cod_departamento
, cod_setor
, cod_local
, ano_exercicio
)
SELECT DISTINCT ON ( aloc.cod_orgao
, aloc.cod_unidade
, aloc.cod_departamento
, aloc.cod_setor
, aloc.cod_local
)
aloc.cod_orgao
, aloc.cod_unidade
, aloc.cod_departamento
, aloc.cod_setor
, aloc.cod_local
, aloc.ano_exercicio
FROM administracao.local AS aloc
LEFT JOIN administracao.impressora AS aimp
ON aloc.cod_orgao = aimp.cod_orgao
AND aloc.cod_unidade = aimp.cod_unidade
AND aloc.cod_departamento = aimp.cod_departamento
AND aloc.cod_setor = aimp.cod_setor
AND aloc.cod_local = aimp.cod_local
AND aloc.ano_exercicio = aimp.exercicio
LEFT JOIN frota.terceiros_historico AS fter
ON aloc.cod_orgao = fter.cod_orgao
AND aloc.cod_unidade = fter.cod_unidade
AND aloc.cod_departamento = fter.cod_departamento
AND aloc.cod_setor = fter.cod_setor
AND aloc.cod_local = fter.cod_local
AND aloc.ano_exercicio = fter.ano_exercicio
LEFT JOIN patrimonio.historico_bem AS phis
ON aloc.cod_orgao = phis.cod_orgao
AND aloc.cod_unidade = phis.cod_unidade
AND aloc.cod_departamento = phis.cod_departamento
AND aloc.cod_setor = phis.cod_setor
AND aloc.cod_local = phis.cod_local
AND aloc.ano_exercicio = phis.ano_exercicio;
----------------------------------
-- Inserção do órgão não informado
-- 20081219 ----------------------
CREATE OR REPLACE FUNCTION organograma.fn_insere_orgao_nao_informado() RETURNS BOOLEAN AS $$
DECLARE
boSucesso BOOLEAN := false;
inCodOrganograma INTEGER;
inCodOrgao INTEGER;
inCodOrgaoAux INTEGER;
inCodLogradouro INTEGER;
inCodCalendario INTEGER;
inCodLocal INTEGER;
reRegistro RECORD;
stNomLogradouro VARCHAR;
stDataCriacao DATE;
stSQL VARCHAR := '';
BEGIN
-- Recupera o Organograma Ativo.
SELECT cod_organograma INTO inCodOrganograma FROM organograma.organograma WHERE ativo = true;
-- Recupera o cod_orgao auxiliar para buscar informações como Calendário e Norma.
SELECT cod_orgao INTO inCodOrgaoAux FROM organograma.orgao_nivel WHERE orgao_nivel.cod_organograma = inCodOrganograma;
-- Recupera o cod_calendario para ser inserido o novo órgão.
SELECT cod_calendar INTO inCodCalendario FROM organograma.orgao WHERE cod_orgao = inCodOrgaoAux;
-- Recupera o maior cod_orgao.
SELECT MAX(cod_orgao)+1 INTO inCodOrgao FROM organograma.orgao;
-- Recupera a data para ser inserido no novo órgão.
SELECT CURRENT_DATE INTO stDataCriacao;
-- INSERE o novo órgão (Não informado) para atualizar a tabela de_para_setor com o antigo setor (Não informado).
INSERT INTO organograma.orgao
(cod_orgao, num_cgm_pf, cod_calendar, cod_norma, descricao, criacao)
VALUES
(inCodOrgao, 0, inCodCalendario, 0, 'Não Informado', stDataCriacao);
-- INSERE o nome do novo órgão em organograma.orgao_descricao
INSERT INTO organograma.orgao_descricao
(cod_orgao, timestamp, descricao)
VALUES
(inCodOrgao, stDataCriacao, 'Não Informado');
-- Recupera o nro de níveis do Organograma.
stSql := 'SELECT * FROM organograma.nivel WHERE cod_organograma = '||inCodOrganograma;
FOR reRegistro IN EXECUTE stSql LOOP
INSERT
INTO organograma.orgao_nivel
( cod_orgao
, cod_nivel
, cod_organograma
, valor
)
VALUES
( inCodOrgao
, reRegistro.cod_nivel
, reRegistro.cod_organograma
, '0'
);
END LOOP;
-- Recupera o cod_logradouro para futura inserção na organograma.local.
SELECT MIN(cod_logradouro) INTO inCodLogradouro FROM organograma.local;
-- Recupera o maior cod_local.
SELECT MAX(cod_local)+1 INTO inCodLocal FROM organograma.local;
-- INSERE o novo Local.
INSERT INTO organograma.local
(cod_local, cod_logradouro, dificil_acesso, insalubre, descricao)
VALUES
(inCodLocal, inCodLogradouro, false, false, 'Não Informado');
-- ATUALIZAÇÃO NAS TABELAS DE-PARA.
-- ATUALIZA a tabela de_para_setor com o novo Órgão cadastrado (Não Informado) para o antigo setor (Não informado).
UPDATE organograma.de_para_setor
SET cod_orgao_organograma = inCodOrgao
WHERE ano_exercicio = '0000'
AND cod_orgao = 0
AND cod_unidade = 0
AND cod_departamento = 0
AND cod_setor = 0;
-- ATUALIZA a tabela de_para_local com o novo Local cadastrado (Não Informado) para o antigo local (Não informado).
UPDATE organograma.de_para_local
SET cod_local_organograma = inCodLocal
WHERE ano_exercicio = '0000'
AND cod_orgao = 0
AND cod_unidade = 0
AND cod_departamento = 0
AND cod_setor = 0
AND cod_local = 0;
IF (inCodLocal > 0 AND inCodOrgao > 0) THEN
boSucesso := true;
END IF;
RETURN boSucesso;
END;
$$ LANGUAGE 'plpgsql';
SELECT organograma.fn_insere_orgao_nao_informado();
DROP FUNCTION organograma.fn_insere_orgao_nao_informado();