GRH_2053.sql
14 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
/*
**********************************************************************************
* *
* @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
*
* Versao 2.05.3
*
* Fabio Bertoldi - 20160622
*
*/
----------------
-- Ticket #23884
----------------
SELECT atualizarbanco('UPDATE pessoal.causa_rescisao SET cod_sefip_saida = 2 WHERE num_causa = 11;');
----------------
-- Ticket #23882
----------------
select atualizarBanco('
CREATE OR REPLACE FUNCTION ponto.fn_atualiza_ultimo_timestamp_escala( )
RETURNS TRIGGER AS $$
DECLARE
rEscalaAtual RECORD;
iCodEscala INTEGER;
tNewTimestamp TIMESTAMP;
cAux VARCHAR;
BEGIN
IF TG_OP=''INSERT'' THEN
--
-- Define a escala a ser inserida
--
iCodEscala := NEW.cod_escala;
tNewTimestamp := NEW.timestamp;
--
-- Verifica a existencia da ultima escala
--
SELECT escala.*
INTO rEscalaAtual
FROM ponto.escala
WHERE escala.cod_escala = iCodEscala
;
IF FOUND THEN
tNewTimestamp := (''now''::TEXT)::TIMESTAMP(3) WITH TIME ZONE;
IF COALESCE(rEscalaAtual.ultimo_timestamp, ''1800-01-01'') <= tNewTimestamp THEN
UPDATE ponto.escala
SET ultimo_timestamp = tNewTimestamp
WHERE cod_escala = iCodEscala
;
ELSE
cAux := TO_CHAR(iCodEscala,''9999'');
RAISE EXCEPTION ''Tabela ponto.escala inconsistente, contate suporte. Escala:%'', cAux;
END IF;
ELSE
RAISE EXCEPTION ''Falha de integridade referencial, tabela ponto.escala.: %'', TG_OP;
RAISE EXCEPTION ''Código escala: %'', iCodEscala;
END IF;
ELSE
RAISE EXCEPTION ''Operação não permitida para tabela ponto.escala.: %'', TG_OP;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
');
select atualizarBanco('
CREATE OR REPLACE FUNCTION ponto.fn_atualiza_ultimo_timestamp_conf_ponto( )
RETURNS TRIGGER AS $$
DECLARE
rPontoAtual RECORD;
iCodConfiguracao INTEGER;
tNewTimestamp TIMESTAMP;
cAux VARCHAR;
BEGIN
IF TG_OP=''INSERT'' THEN
--
-- Define a configuracao a ser inserida
--
iCodConfiguracao := NEW.cod_configuracao;
tNewTimestamp := NEW.timestamp;
--
-- Verifica a existencia da ultima configuracao
--
SELECT configuracao_relogio_ponto.*
INTO rPontoAtual
FROM ponto.configuracao_relogio_ponto
WHERE configuracao_relogio_ponto.cod_configuracao = iCodConfiguracao;
IF FOUND THEN
tNewTimestamp := (''now''::text)::TIMESTAMP(3) WITH TIME ZONE ;
If COALESCE(rPontoAtual.ultimo_timestamp, ''1800-01-01'') <= tNewTimestamp THEN
UPDATE ponto.configuracao_relogio_ponto
SET ultimo_timestamp = tNewTimestamp
WHERE cod_configuracao = iCodConfiguracao;
ELSE
cAux := TO_CHAR(iCodConfiguracao,''9999'');
RAISE EXCEPTION ''Tabela ponto.configuracao_relogio_ponto inconsistente, contate suporte. Configuração:%'', cAux;
END IF;
ELSE
RAISE EXCEPTION ''Falha de integridade referencial, tabela ponto.configuracao_relogio_ponto.: %'', TG_OP;
RAISE EXCEPTION ''Código configuração: %'', iCodConfiguracao;
END IF;
ELSE
RAISE EXCEPTION ''Operação não permitida para tabela ponto.configuracao_relogio_ponto.: %'', TG_OP;
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
');
CREATE OR REPLACE FUNCTION manutencao() RETURNS VOID AS $$
DECLARE
inCodENtPref INTEGER;
stCriaTRG VARCHAR;
stSQL VARCHAR;
reRecord RECORD;
BEGIN
SELECT valor
INTO inCodENtPref
FROM administracao.configuracao
WHERE exercicio = '2016'
AND cod_modulo = 8
AND parametro = 'cod_entidade_prefeitura'
;
stSQL := '
SELECT '''' as entidade
UNION
SELECT ''_''||cod_entidade AS entidade
FROM administracao.entidade_rh
WHERE exercicio = ''2016''
AND cod_entidade != '|| inCodENtPref ||'
GROUP BY cod_entidade
;
';
FOR reRecord IN EXECUTE stSQL LOOP
stCriaTRG := 'DROP TRIGGER IF EXISTS tr_contrato_servidor_conta_salario_historico'|| reRecord.entidade ||' ON pessoal'|| reRecord.entidade ||'.contrato_servidor_conta_salario;';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS tr_contrato_servidor_conta_salario_historico ON pessoal'|| reRecord.entidade ||'.contrato_servidor_conta_salario;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER tr_contrato_servidor_conta_salario_historico'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON pessoal'|| reRecord.entidade ||'.contrato_servidor_conta_salario FOR EACH ROW EXECUTE PROCEDURE pessoal'|| reRecord.entidade ||'.fn_contrato_servidor_conta_salario_historico();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS tr_configuracao_banco_horas'|| reRecord.entidade ||' ON ponto'|| reRecord.entidade ||'.configuracao_banco_horas;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER tr_configuracao_banco_horas'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON ponto'|| reRecord.entidade ||'.configuracao_banco_horas FOR EACH ROW EXECUTE PROCEDURE ponto'|| reRecord.entidade ||'.fn_atualiza_ultimo_timestamp_conf_ponto();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS tr_configuracao_horas_extras_2'|| reRecord.entidade ||' ON ponto'|| reRecord.entidade ||'.configuracao_horas_extras_2;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER tr_configuracao_horas_extras_2'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON ponto'|| reRecord.entidade ||'.configuracao_horas_extras_2 FOR EACH ROW EXECUTE PROCEDURE ponto'|| reRecord.entidade ||'.fn_atualiza_ultimo_timestamp_conf_ponto();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS tr_configuracao_parametros_gerais'|| reRecord.entidade ||' ON ponto'|| reRecord.entidade ||'.configuracao_parametros_gerais;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER tr_configuracao_parametros_gerais'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON ponto'|| reRecord.entidade ||'.configuracao_parametros_gerais FOR EACH ROW EXECUTE PROCEDURE ponto'|| reRecord.entidade ||'.fn_atualiza_ultimo_timestamp_conf_ponto();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS tr_atualiza_ultimo_timestamp_escala'|| reRecord.entidade ||' ON ponto'|| reRecord.entidade ||'.escala_turno;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER tr_atualiza_ultimo_timestamp_escala'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON ponto'|| reRecord.entidade ||'.escala_turno FOR EACH ROW EXECUTE PROCEDURE ponto'|| reRecord.entidade ||'.fn_atualiza_ultimo_timestamp_escala();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_pensionista ON pessoal'|| reRecord.entidade ||'.contrato_pensionista';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_pensionista'|| reRecord.entidade ||' ON pessoal'|| reRecord.entidade ||'.contrato_pensionista';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER trg_situacao_contrato_pensionista'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON pessoal'|| reRecord.entidade ||'.contrato_pensionista FOR EACH ROW EXECUTE PROCEDURE tr_situacao_contrato_pensionista();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_servidor ON pessoal'|| reRecord.entidade ||'.contrato_servidor;';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_servidor'|| reRecord.entidade ||' ON pessoal'|| reRecord.entidade ||'.contrato_servidor;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER trg_situacao_contrato_servidor'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON pessoal'|| reRecord.entidade ||'.contrato_servidor FOR EACH ROW EXECUTE PROCEDURE tr_situacao_contrato_servidor();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_aposentadoria ON pessoal'|| reRecord.entidade ||'.aposentadoria;';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_aposentadoria'|| reRecord.entidade ||' ON pessoal'|| reRecord.entidade ||'.aposentadoria;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER trg_situacao_contrato_aposentadoria'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON pessoal'|| reRecord.entidade ||'.aposentadoria FOR EACH ROW EXECUTE PROCEDURE tr_situacao_contrato_aposentadoria();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_aposentadoria_excluida ON pessoal'|| reRecord.entidade ||'.aposentadoria_excluida;';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_aposentadoria_excluida'|| reRecord.entidade ||' ON pessoal'|| reRecord.entidade ||'.aposentadoria_excluida;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER trg_situacao_contrato_aposentadoria_excluida'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON pessoal'|| reRecord.entidade ||'.aposentadoria_excluida FOR EACH ROW EXECUTE PROCEDURE tr_situacao_contrato_aposentadoria_excluida();';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_servidor_caso_causa ON pessoal'|| reRecord.entidade ||'.contrato_servidor_caso_causa;';
EXECUTE stCriaTRG;
stCriaTRG := 'DROP TRIGGER IF EXISTS trg_situacao_contrato_servidor_caso_causa'|| reRecord.entidade ||' ON pessoal'|| reRecord.entidade ||'.contrato_servidor_caso_causa;';
EXECUTE stCriaTRG;
stCriaTRG := 'CREATE TRIGGER trg_situacao_contrato_servidor_caso_causa'|| reRecord.entidade ||' BEFORE INSERT OR UPDATE ON pessoal'|| reRecord.entidade ||'.contrato_servidor_caso_causa FOR EACH ROW EXECUTE PROCEDURE tr_situacao_contrato_servidor_caso_causa();';
EXECUTE stCriaTRG;
END LOOP;
END;
$$ LANGUAGE 'plpgsql';
SELECT manutencao();
DROP FUNCTION manutencao();