geraRegistroDecimo.plsql
35.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
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
/*
**********************************************************************************
* *
* @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. *
* *
**********************************************************************************
*/
--/**
-- * Função PLSQL
-- * Data de Criação: 00/00/0000
--
--
-- * @author Projetista: Vandré Miguel Ramos
--
-- * @package URBEM
-- * @subpackage
--
-- $Revision: 28805 $
-- $Author: souzadl $
-- $Date: 2008-03-27 09:19:31 -0300 (Qui, 27 Mar 2008) $
--
-- * Casos de uso: uc-04.05.24
--*/
CREATE OR REPLACE FUNCTION geraRegistroDecimo(integer,integer,varchar,varchar) RETURNS BOOLEAN as $$
DECLARE
inCodContrato ALIAS FOR $1;
inCodPeriodoMovimentacao ALIAS FOR $2;
stDesdobramento ALIAS FOR $3;
stEntidadeParametro ALIAS FOR $4;
stEntidade VARCHAR := '';
stDesdobramentoRescisao VARCHAR := '';
inCodPeriodoMovimentacaoInicial INTEGER := 0;
inCodPeriodoMovimentacaoTemp INTEGER;
inCodContrato0 INTEGER := 0;
stSql VARCHAR :='';
crCursor REFCURSOR;
reRegistro RECORD;
reRegistro1 RECORD;
boRetorno BOOLEAN := TRUE;
dtInicialPeriodo DATE;
dtFinalPeriodo DATE;
stSituacao VARCHAR := 'f';
stDataFinalCompetencia VARCHAR := '';
stAnoAdiantamento VARCHAR := '';
inCodEvento INTEGER := 0;
InCodSubDivisao INTEGER := 1;
inCodFuncao INTEGER := 1;
inCodEspecialidade INTEGER := 1;
inNrRegistros INTEGER := 0;
inContador INTEGER := 0;
stFormula VARCHAR := '';
stExecutaFormula VARCHAR := '';
nuExecutaFormula NUMERIC := 0;
nuValor NUMERIC := 0;
nuQuantidade NUMERIC := 0;
nuPercentualAdiantamento NUMERIC := 0;
boGerarApenasFixo VARCHAR := 'f';
boGravouRegistro BOOLEAN;
inControleExecucaoRescisaoDecimo INTEGER :=0;
boGerandoRescisao VARCHAR := 'f';
BEGIN
stEntidade := criarBufferEntidade(stEntidadeParametro);
inCodPeriodoMovimentacaoTemp := criarBufferInteiro('inCodPeriodoMovimentacao',inCodPeriodoMovimentacao);
stDataFinalCompetencia := pega0DataFinalCompetenciaDoPeriodoMovimento(inCodPeriodoMovimentacao);
inControleExecucaoRescisaoDecimo := countBufferTexto('stDataFinalCompetencia');
IF inControleExecucaoRescisaoDecimo < 1 THEN
stDataFinalCompetencia := criarBufferTexto( 'stDataFinalCompetencia', stDataFinalCompetencia );
inCodContrato0 := criarBufferInteiro( 'inCodContrato' , inCodContrato );
ELSE
boGerandoRescisao := 't';
END IF;
inCodSubDivisao := pega0SubDivisaoDoContratoNaData( inCodContrato, stDataFinalCompetencia );
inCodFuncao := pega0FuncaoDoContratoNaData( inCodContrato, stDataFinalCompetencia );
inCodEspecialidade := pega0EspecialidadeDoContratoNaData( inCodContrato, stDataFinalCompetencia );
inContador := selectIntoInteger('
SELECT COUNT(periodo_movimentacao.cod_periodo_movimentacao) as t
FROM folhapagamento'||stEntidade||'.periodo_movimentacao
,folhapagamento'||stEntidade||'.contrato_servidor_periodo
,folhapagamento'||stEntidade||'.registro_evento_decimo
,folhapagamento'||stEntidade||'.ultimo_registro_evento_decimo
WHERE periodo_movimentacao.cod_periodo_movimentacao = contrato_servidor_periodo.cod_periodo_movimentacao
AND periodo_movimentacao.cod_periodo_movimentacao = '||inCodPeriodoMovimentacao||'
AND contrato_servidor_periodo.cod_contrato = '||inCodContrato||'
AND registro_evento_decimo.cod_periodo_movimentacao = contrato_servidor_periodo.cod_periodo_movimentacao
AND registro_evento_decimo.cod_contrato = contrato_servidor_periodo.cod_contrato
AND registro_evento_decimo.desdobramento = '''||stDesdobramento||'''
AND registro_evento_decimo.cod_evento = ultimo_registro_evento_decimo.cod_evento
AND registro_evento_decimo.cod_registro = ultimo_registro_evento_decimo.cod_registro
AND registro_evento_decimo.desdobramento = ultimo_registro_evento_decimo.desdobramento
AND registro_evento_decimo.timestamp = ultimo_registro_evento_decimo.timestamp');
--VERIFICA SE EXISTE O REGISTRO PARA O CONTRATO DO DESDOBRAMENTO NA COMPETÊNCIA
-- CASO SIM CANCELA A EXECUÇÃO
IF inContador > 0 THEN
RETURN FALSE;
END IF;
--FUNÇÃO PARA RECUPERAR A SITUAÇÃO DO ULTIMO PERIODO A SER CALCULADO
stSql := 'SELECT dt_inicial,dt_final,situacao
FROM folhapagamento'||stEntidade||'.periodo_movimentacao
JOIN folhapagamento'||stEntidade||'.periodo_movimentacao_situacao
ON (periodo_movimentacao.cod_periodo_movimentacao = periodo_movimentacao_situacao.cod_periodo_movimentacao
AND periodo_movimentacao_situacao.cod_periodo_movimentacao = '||inCodPeriodoMovimentacao||')
ORDER BY periodo_movimentacao_situacao.timestamp DESC LIMIT 1 ';
OPEN crCursor FOR EXECUTE stSql;
FETCH crCursor INTO dtInicialPeriodo,dtFinalPeriodo,stSituacao;
CLOSE crCursor;
--CONDIÇÕES ESPECIAIS QUANDO O MÊS DE COMPETÊNCIA FOR DEZEMBRO
IF( SUBSTR(to_char(dtFinalPeriodo,'yyyy-mm-dd'),6,2) = '12' ) THEN
--PARA O DESDOBRAMENTO SALDO DE DÉCIMO E PERIODO ESTIVER ABERTO UTILIZAR A COMPETÊNCIA ANTERIOR
IF ( stDesdobramento = 'D' AND stSituacao = 'a') THEN
stSql := 'SELECT dt_inicial,dt_final,situacao
FROM folhapagamento'||stEntidade||'.periodo_movimentacao
JOIN folhapagamento'||stEntidade||'.periodo_movimentacao_situacao
ON (periodo_movimentacao.cod_periodo_movimentacao = periodo_movimentacao_situacao.cod_periodo_movimentacao
AND periodo_movimentacao_situacao.cod_periodo_movimentacao = ('||inCodPeriodoMovimentacao||' - 1))
ORDER BY periodo_movimentacao_situacao.timestamp DESC LIMIT 1 ';
OPEN crCursor FOR EXECUTE stSql;
FETCH crCursor INTO dtInicialPeriodo,dtFinalPeriodo,stSituacao;
CLOSE crCursor;
END IF;
--SE MÊS FINAL IGUAL A DEZEMBRO E DESDOBRAMENTO "ADIANTAMENTO" NÃO SERÁ EXECUTADA A GERAÇÃO DE REGISTROS
IF(stDesdobramento = 'A') THEN
RETURN FALSE;
END IF;
--SE MÊS FINAL IGUAL A DEZEMBRO E DESDOBRAMENTO "COMPLEMENTAÇÃO" E FOLHA SALÁRIO FECHADA NÃO SERÁ EXECUTADA A GERAÇÃO DE REGISTROS
IF(stDesdobramento = 'C' AND stSituacao = 'f') THEN
RETURN FALSE;
END IF;
ELSE
--SE MÊS FINAL DIFERENTE DE DEZEMBRO E DESDOBRAMENTO "COMPLEMENTAÇÃO" NÃO SERÁ EXECUTADA A GERAÇÃO DE REGISTROS
IF(stDesdobramento = 'C' ) THEN
RETURN FALSE;
END IF;
END IF;
--CONDIÇÃO ESPECIAL PARA DESDOBRAMENTO = ADIANTAMENTO
IF stDesdobramento = 'A' THEN
stSql := 'SELECT percentual,
CASE WHEN vantagens_fixas = ''true''
THEN ''t''
ELSE ''f''
END as bovantagem
FROM folhapagamento'||stEntidade||'.configuracao_adiantamento
WHERE cod_contrato = '||inCodContrato||'
AND cod_periodo_movimentacao = '||inCodPeriodoMovimentacao||'
AND desdobramento = '''||stDesdobramento||'''' ;
OPEN crCursor FOR EXECUTE stSql;
FETCH crCursor INTO nuPercentualAdiantamento,boGerarApenasFixo;
CLOSE crCursor;
END IF;
nuPercentualAdiantamento := criarBufferNumerico( 'nuPercentualAdiantamento' , nuPercentualAdiantamento );
boGerarApenasFixo := criarBufferTexto('boGerarApenasFixo', boGerarApenasFixo );
-- FUNÇÃO PARA RECUPERAR O PERIODO_MOVIMENTACAO DA COMPETÊNCIA DE JANEIRO DO ANO DE CÁLCULO
stSql := 'SELECT periodo_movimentacao.cod_periodo_movimentacao
FROM folhapagamento'||stEntidade||'.periodo_movimentacao
JOIN folhapagamento'||stEntidade||'.periodo_movimentacao_situacao
ON (periodo_movimentacao.cod_periodo_movimentacao = periodo_movimentacao_situacao.cod_periodo_movimentacao)
WHERE to_char(dt_inicial,''yyyy-mm'') = to_char(to_date('''||dtFinalPeriodo||''',''yyyy''),''yyyy'')||''-01''
ORDER BY periodo_movimentacao_situacao.timestamp DESC LIMIT 1 ';
OPEN crCursor FOR EXECUTE stSql;
FETCH crCursor INTO inCodPeriodoMovimentacaoInicial;
CLOSE crCursor;
-- CRIA TABELA TEMPORÁRIA QUE SERÁ UTILIZADA NO CÁLCULO DAS MÉDIAS
CREATE TEMPORARY TABLE tmp_registro_evento_13
(cod_evento INTEGER,
valor NUMERIC(14,2),
quantidade NUMERIC(14,2),
cod_periodo_movimentacao INTEGER,
natureza VARCHAR,
fixado VARCHAR,
unidade_quantitativa NUMERIC(14,2),
lido_de VARCHAR
);
-- LEITURA E INSERÇÃO DO REGISTRO DE EVENTOS ATUAL - (PONTO FIXO)
stSql := ' INSERT INTO tmp_registro_evento_13
SELECT registro_evento.cod_evento
, COALESCE(registro_evento.valor,0.00) as valor
, COALESCE(registro_evento.quantidade,0.00) as quantidade
, registro_evento_periodo.cod_periodo_movimentacao
, evento.natureza
, evento.fixado
, evento_evento.unidade_quantitativa
, ''fixo_atual'' as lido_de
FROM folhapagamento'||stEntidade||'.ultimo_registro_evento
INNER JOIN folhapagamento'||stEntidade||'.registro_evento_periodo
ON registro_evento_periodo.cod_registro = ultimo_registro_evento.cod_registro
AND registro_evento_periodo.cod_contrato = '||inCodContrato||'
AND registro_evento_periodo.cod_periodo_movimentacao = '||incodPeriodoMovimentacao||'
INNER JOIN folhapagamento'||stEntidade||'.registro_evento
ON registro_evento.cod_registro = ultimo_registro_evento.cod_registro
AND registro_evento.proporcional = false
INNER JOIN folhapagamento'||stEntidade||'.evento
ON evento.cod_evento = registro_evento.cod_evento
AND evento.natureza IN ( ''P'',''D'' )
AND evento.tipo = ''F''
INNER JOIN ( SELECT COALESCE(unidade_quantitativa,0) as unidade_quantitativa
, evento_evento.cod_evento
, evento_evento.timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
, ( SELECT cod_evento
, max(timestamp) as timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
GROUP BY cod_evento) as max_evento_evento
WHERE max_evento_evento.cod_evento = evento_evento.cod_evento
AND max_evento_evento.timestamp = evento_evento.timestamp) as evento_evento
ON evento_evento.cod_evento = evento.cod_evento
INNER JOIN folhapagamento'||stEntidade||'.configuracao_evento_caso
ON configuracao_evento_caso.cod_evento = evento_evento.cod_evento
AND configuracao_evento_caso.timestamp = evento_evento.timestamp
AND configuracao_evento_caso.cod_configuracao = 3
INNER JOIN folhapagamento'||stEntidade||'.tipo_evento_configuracao_media
ON tipo_evento_configuracao_media.cod_configuracao = 3
AND tipo_evento_configuracao_media.timestamp = configuracao_evento_caso.timestamp
AND tipo_evento_configuracao_media.cod_evento = configuracao_evento_caso.cod_evento
AND tipo_evento_configuracao_media.cod_caso = configuracao_evento_caso.cod_caso
ORDER BY registro_evento.cod_evento ';
EXECUTE stSql;
-- VERIFICA BASEADO NA CONSULTA ANTERIOR SE DEVE GERAR APENAS PONTO FIXO
IF boGerarApenasFixo = 'f' THEN
-- INSERE INFORMAÇÕES DA FOLHA SALÁRIO NA TABELA TEMPORÁRIO DA COMPETÊNCIA DE JANEIRO ATÉ A COMPETÊNCIA DE CALCULO
IF inCodPeriodoMovimentacaoInicial IS NOT NULL THEN
stSql := ' INSERT INTO tmp_registro_evento_13
SELECT evento_calculado.cod_evento
, COALESCE(evento_calculado.valor,0.00) as valor
, COALESCE(evento_calculado.quantidade,0.00) as quantidade
, registro_evento_periodo.cod_periodo_movimentacao
, evento.natureza
, evento.fixado
, evento_evento.unidade_quantitativa
, ''evento_calculado'' as lido_de
FROM folhapagamento'||stEntidade||'.evento_calculado
INNER JOIN folhapagamento'||stEntidade||'.registro_evento_periodo
ON registro_evento_periodo.cod_registro = evento_calculado.cod_registro
AND registro_evento_periodo.cod_contrato = '||incodContrato||'
AND registro_evento_periodo.cod_periodo_movimentacao BETWEEN '||inCodPeriodoMovimentacaoInicial||' AND '||inCodPeriodoMovimentacao||'
INNER JOIN folhapagamento'||stEntidade||'.evento
ON evento.cod_evento = evento_calculado.cod_evento
AND evento.natureza IN ( ''P'',''D'' )
INNER JOIN ( SELECT COALESCE(unidade_quantitativa,0) as unidade_quantitativa
, evento_evento.cod_evento
, evento_evento.timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
, ( SELECT cod_evento
, max(timestamp) as timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
GROUP BY cod_evento) as max_evento_evento
WHERE max_evento_evento.cod_evento = evento_evento.cod_evento
AND max_evento_evento.timestamp = evento_evento.timestamp) as evento_evento
ON evento_evento.cod_evento = evento.cod_evento
INNER JOIN folhapagamento'||stEntidade||'.configuracao_evento_caso
ON configuracao_evento_caso.cod_evento = evento_evento.cod_evento
AND configuracao_evento_caso.timestamp = evento_evento.timestamp
AND configuracao_evento_caso.cod_configuracao = 3
INNER JOIN folhapagamento'||stEntidade||'.tipo_evento_configuracao_media
ON tipo_evento_configuracao_media.cod_configuracao = 3
AND tipo_evento_configuracao_media.timestamp = configuracao_evento_caso.timestamp
AND tipo_evento_configuracao_media.cod_evento = configuracao_evento_caso.cod_evento
AND tipo_evento_configuracao_media.cod_caso = configuracao_evento_caso.cod_caso
WHERE evento_calculado.valor > 0
ORDER BY evento_calculado.cod_evento';
EXECUTE stSql;
END IF;
-- INSERE INFORMAÇÕES DA FOLHA COMPLEMENTAR NA TABELA TEMPORÁRIO DA COMPETÊNCIA DE JANEIRO ATÉ A COMPETÊNCIA DE CALCULO
IF inCodPeriodoMovimentacaoInicial IS NOT NULL THEN
stSql := ' INSERT INTO tmp_registro_evento_13
SELECT evento_complementar_calculado.cod_evento
, COALESCE(evento_complementar_calculado.valor,0.00) as valor
, COALESCE(evento_complementar_calculado.quantidade,0.00) as quantidade
, registro_evento_complementar.cod_periodo_movimentacao
, evento.natureza
, evento.fixado
, evento_evento.unidade_quantitativa
, ''evento_complementar_calculado'' as lido_de
FROM folhapagamento'||stEntidade||'.evento_complementar_calculado
INNER JOIN folhapagamento'||stEntidade||'.registro_evento_complementar
ON registro_evento_complementar.cod_registro = evento_complementar_calculado.cod_registro
AND registro_evento_complementar.cod_evento = evento_complementar_calculado.cod_evento
AND registro_evento_complementar.cod_configuracao = evento_complementar_calculado.cod_configuracao
AND registro_evento_complementar.timestamp = evento_complementar_calculado.timestamp_registro
AND registro_evento_complementar.cod_contrato = '||inCodContrato||'
AND registro_evento_complementar.cod_periodo_movimentacao BETWEEN '||inCodPeriodoMovimentacaoInicial||' AND '||inCodPeriodoMovimentacao||'
INNER JOIN folhapagamento'||stEntidade||'.evento
ON evento.cod_evento = evento_complementar_calculado.cod_evento
AND evento.natureza IN ( ''P'',''D'' )
INNER JOIN ( SELECT COALESCE(unidade_quantitativa,0) as unidade_quantitativa
, evento_evento.cod_evento
, evento_evento.timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
, ( SELECT cod_evento
, max(timestamp) as timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
GROUP BY cod_evento) as max_evento_evento
WHERE max_evento_evento.cod_evento = evento_evento.cod_evento
AND max_evento_evento.timestamp = evento_evento.timestamp) as evento_evento
ON evento_evento.cod_evento = evento.cod_evento
INNER JOIN folhapagamento'||stEntidade||'.configuracao_evento_caso
ON configuracao_evento_caso.cod_evento = evento_evento.cod_evento
AND configuracao_evento_caso.timestamp = evento_evento.timestamp
AND configuracao_evento_caso.cod_configuracao = 3
INNER JOIN folhapagamento'||stEntidade||'.tipo_evento_configuracao_media
ON tipo_evento_configuracao_media.cod_configuracao = 3
AND tipo_evento_configuracao_media.timestamp = configuracao_evento_caso.timestamp
AND tipo_evento_configuracao_media.cod_evento = configuracao_evento_caso.cod_evento
AND tipo_evento_configuracao_media.cod_caso = configuracao_evento_caso.cod_caso
WHERE evento_complementar_calculado.valor > 0
ORDER BY evento_complementar_calculado.cod_evento';
EXECUTE stSql;
END IF;
ELSE
-- INSERE INFORMAÇÕES DA FOLHA SALÁRIO NA TABELA TEMPORÁRIO DA COMPETÊNCIA DE JANEIRO ATÉ A COMPETÊNCIA DE CALCULO
-- APENAS PONTO FIXO
IF inCodPeriodoMovimentacaoInicial IS NOT NULL THEN
stSql := ' INSERT INTO tmp_registro_evento_13
SELECT evento_calculado.cod_evento
, COALESCE(evento_calculado.valor,0.00) as valor
, COALESCE(evento_calculado.quantidade,0.00) as quantidade
, registro_evento_periodo.cod_periodo_movimentacao
, evento.natureza
, evento.fixado
, evento_evento.unidade_quantitativa
, ''evento_calculado'' as lido_de
FROM folhapagamento'||stEntidade||'.evento_calculado
INNER JOIN folhapagamento'||stEntidade||'.registro_evento_periodo
ON registro_evento_periodo.cod_registro = evento_calculado.cod_registro
AND registro_evento_periodo.cod_contrato = '||incodContrato||'
AND registro_evento_periodo.cod_periodo_movimentacao BETWEEN '||inCodPeriodoMovimentacaoInicial||' AND '||inCodPeriodoMovimentacao||'
INNER JOIN folhapagamento'||stEntidade||'.evento
ON evento.cod_evento = evento_calculado.cod_evento
AND evento.natureza IN ( ''P'',''D'' )
AND evento.tipo = ''F''
INNER JOIN ( SELECT COALESCE(unidade_quantitativa,0) as unidade_quantitativa
, evento_evento.cod_evento
, evento_evento.timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
, ( SELECT cod_evento
, max(timestamp) as timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
GROUP BY cod_evento) as max_evento_evento
WHERE max_evento_evento.cod_evento = evento_evento.cod_evento
AND max_evento_evento.timestamp = evento_evento.timestamp) as evento_evento
ON evento_evento.cod_evento = evento.cod_evento
INNER JOIN folhapagamento'||stEntidade||'.configuracao_evento_caso
ON configuracao_evento_caso.cod_evento = evento_evento.cod_evento
AND configuracao_evento_caso.timestamp = evento_evento.timestamp
AND configuracao_evento_caso.cod_configuracao = 3
INNER JOIN folhapagamento'||stEntidade||'.tipo_evento_configuracao_media
ON tipo_evento_configuracao_media.cod_configuracao = 3
AND tipo_evento_configuracao_media.timestamp = configuracao_evento_caso.timestamp
AND tipo_evento_configuracao_media.cod_evento = configuracao_evento_caso.cod_evento
AND tipo_evento_configuracao_media.cod_caso = configuracao_evento_caso.cod_caso
WHERE evento_calculado.valor > 0
ORDER BY evento_calculado.cod_evento';
EXECUTE stSql;
END IF;
-- INSERE INFORMAÇÕES DA FOLHA COMPLEMENTAR NA TABELA TEMPORÁRIO DA COMPETÊNCIA DE JANEIRO ATÉ A COMPETÊNCIA DE CALCULO
-- APENAS PONTO FIXO
IF inCodPeriodoMovimentacaoInicial IS NOT NULL THEN
stSql := ' INSERT INTO tmp_registro_evento_13
SELECT evento_complementar_calculado.cod_evento
, COALESCE(evento_complementar_calculado.valor,0.00) as valor
, COALESCE(evento_complementar_calculado.quantidade,0.00) as quantidade
, registro_evento_complementar.cod_periodo_movimentacao
, evento.natureza
, evento.fixado
, evento_evento.unidade_quantitativa
, ''evento_complementar_calculado'' as lido_de
FROM folhapagamento'||stEntidade||'.evento_complementar_calculado
INNER JOIN folhapagamento'||stEntidade||'.registro_evento_complementar
ON registro_evento_complementar.cod_registro = evento_complementar_calculado.cod_registro
AND registro_evento_complementar.cod_evento = evento_complementar_calculado.cod_evento
AND registro_evento_complementar.cod_configuracao = evento_complementar_calculado.cod_configuracao
AND registro_evento_complementar.timestamp = evento_complementar_calculado.timestamp_registro
AND registro_evento_complementar.cod_contrato = '||inCodContrato||'
AND registro_evento_complementar.cod_periodo_movimentacao BETWEEN '||inCodPeriodoMovimentacaoInicial||' AND '||inCodPeriodoMovimentacao||'
INNER JOIN folhapagamento'||stEntidade||'.evento
ON evento.cod_evento = evento_complementar_calculado.cod_evento
AND evento.natureza IN ( ''P'',''D'' )
AND evento.tipo = ''F''
INNER JOIN ( SELECT COALESCE(unidade_quantitativa,0) as unidade_quantitativa
, evento_evento.cod_evento
, evento_evento.timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
, ( SELECT cod_evento
, max(timestamp) as timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
GROUP BY cod_evento) as max_evento_evento
WHERE max_evento_evento.cod_evento = evento_evento.cod_evento
AND max_evento_evento.timestamp = evento_evento.timestamp) as evento_evento
ON evento_evento.cod_evento = evento.cod_evento
INNER JOIN folhapagamento'||stEntidade||'.configuracao_evento_caso
ON configuracao_evento_caso.cod_evento = evento_evento.cod_evento
AND configuracao_evento_caso.timestamp = evento_evento.timestamp
AND configuracao_evento_caso.cod_configuracao = 3
INNER JOIN folhapagamento'||stEntidade||'.tipo_evento_configuracao_media
ON tipo_evento_configuracao_media.cod_configuracao = 3
AND tipo_evento_configuracao_media.timestamp = configuracao_evento_caso.timestamp
AND tipo_evento_configuracao_media.cod_evento = configuracao_evento_caso.cod_evento
AND tipo_evento_configuracao_media.cod_caso = configuracao_evento_caso.cod_caso
WHERE evento_complementar_calculado.valor > 0
ORDER BY evento_complementar_calculado.cod_evento';
EXECUTE stSql;
END IF;
END IF;
stSql := 'SELECT count(cod_evento) FROM tmp_registro_evento_13';
OPEN crCursor FOR EXECUTE stSql;
FETCH crCursor INTO inNrRegistros ;
CLOSE crCursor;
IF inNrRegistros > 0 THEN
-- CRIA TABELA TEMPORÁRIA ONDE SERÃO AGRUPADOS OS EVENTOS PARA O CÁLCULO DA MÉDIAS
CREATE TEMPORARY TABLE tmp_registro_evento_13_medias
(cod_evento INTEGER,
codigo VARCHAR,
descricao VARCHAR,
unidade_quantitativa NUMERIC(14,2),
fixado VARCHAR,
formula VARCHAR,
valor NUMERIC(14,2),
quantidade NUMERIC(14,2),
avos INTEGER,
nr_ocorrencias INTEGER
);
stSql := ' INSERT INTO tmp_registro_evento_13_medias
SELECT distinct tmp_registro_evento_13.cod_evento as cod_evento
, fpe.codigo as codigo
, fpe.descricao as descricao
, COALESCE(fpee.unidade_quantitativa,0) as unidade_quantitativa
, fpe.fixado as fixado
, ''0.0.0'' as formula
, 0.00 as valor
, 0.00 as quantidade
, 0 as avos
, 0 as nr_ocorrencias
FROM tmp_registro_evento_13
LEFT OUTER JOIN folhapagamento'||stEntidade||'.evento as fpe
ON fpe.cod_evento = tmp_registro_evento_13.cod_evento
LEFT OUTER JOIN( SELECT max_evento.cod_evento,
max_evento.timestamp,
COALESCE(unidade_quantitativa,0) as unidade_quantitativa
FROM folhapagamento'||stEntidade||'.evento_evento,
(SELECT cod_evento, max(timestamp) as timestamp
FROM folhapagamento'||stEntidade||'.evento_evento
GROUP BY cod_evento) as max_evento
WHERE max_evento.cod_evento = evento_evento.cod_evento
AND max_evento.timestamp = evento_evento.timestamp
ORDER BY evento_evento.cod_evento, evento_evento.timestamp desc) as fpee
ON fpee.cod_evento = fpe.cod_evento
ORDER BY tmp_registro_evento_13.cod_evento';
EXECUTE stSql;
stSql := 'SELECT COUNT(cod_evento)
FROM tmp_registro_evento_13_medias
WHERE formula IS NOT NULL';
OPEN crCursor FOR EXECUTE stSql;
FETCH crCursor INTO inNrRegistros;
CLOSE crCursor;
--SE POSSUI MAIS DE UM REGISTRO CONTINUA PROCESSO
IF inNrRegistros IS NOT NULL THEN
stSql := 'SELECT * FROM tmp_registro_evento_13_medias
WHERE formula is not null ';
-- SE EXISTE AO MENOS UM REGISTRO NA LISTA COM FÓRMULA PARA CALCULO
FOR reRegistro1 IN EXECUTE stSql LOOP
inCodEvento := reRegistro1.cod_evento;
inCodEvento := criarBufferInteiro( 'incodevento', reRegistro1.cod_evento );
-- BUSCA A FORMULA DE MEDIA PARA O EVENTO - FOI UTILIZADA A MESMA FORMULA PASSANDO A CONFIGURAÇÃO DO DÉCIMO
stFormula := pegaFormulaMediaFerias(inCodEvento,3,inCodSubDivisao,inCodFuncao,inCodEspecialidade);
-- executa formula
IF stFormula IS NOT NULL THEN
stExecutaFormula := executaGCNumerico( stFormula );
nuExecutaFormula := to_number( stExecutaFormula ,'99999999999.99' );
IF nuExecutaFormula != 0 THEN
IF reRegistro1.fixado = 'V' THEN
nuValor := arredondar(nuExecutaFormula,2);
nuQuantidade := 0;
ELSE
nuQuantidade := arredondar(nuExecutaFormula,2);
nuValor := 0;
END IF;
-- INSERI REGISTRO DE EVENTO DE 13º - ADIANTAMENTO
IF stDesdobramento = 'A' THEN
IF boGerandoRescisao = 'f' THEN
boGravouRegistro := gravaRegistroEventoDecimo( inCodContrato,inCodPeriodoMovimentacao,inCodEvento, nuValor, nuQuantidade, stDesdobramento );
ELSE
stDesdobramentoRescisao := 'D';
boGravouRegistro := gravaRegistroEventoRescisao( inCodContrato,inCodPeriodoMovimentacao,inCodEvento, nuValor, nuQuantidade, stDesdobramentoRescisao );
END IF;
END IF;
-- INSERI REGISTRO DE EVENTO DE 13º - DÉCIMO
IF stDesdobramento = 'D' THEN
IF boGerandoRescisao = 'f' THEN
boGravouRegistro := gravaRegistroEventoDecimo( inCodContrato,inCodPeriodoMovimentacao,inCodEvento, nuValor, nuQuantidade, stDesdobramento );
ELSE
stDesdobramentoRescisao := 'D';
boGravouRegistro := gravaRegistroEventoRescisao( inCodContrato,inCodPeriodoMovimentacao,inCodEvento, nuValor, nuQuantidade, stDesdobramentoRescisao );
END IF;
END IF;
-- INSERI REGISTRO DE EVENTO DE 13º - COMPLEMENTAÇÃO
IF stDesdobramento = 'C' THEN
IF boGerandoRescisao = 'f' THEN
boGravouRegistro := gravaRegistroEventoDecimo( inCodContrato,inCodPeriodoMovimentacao,inCodEvento, nuValor, nuQuantidade, stDesdobramento );
ELSE
stDesdobramentoRescisao := 'D';
boGravouRegistro := gravaRegistroEventoRescisao( inCodContrato,inCodPeriodoMovimentacao,inCodEvento, nuValor, nuQuantidade, stDesdobramentoRescisao );
END IF;
END IF;
END IF;
END IF;
END LOOP;
-- VERIFICAÇÃO PARA EFETUAR OU NÃO O REGISTRO DE EVENTO DE DESCONTO DE ADIANTAMENTO DE DÉCIMO
--IF (stDesdobramento = 'D') THEN
-- stAnoAdiantamento := SUBSTR(dtFinalPeriodo,1,4);
-- boRetorno := verificaAdiantamento(stAnoAdiantamento);
-- IF boRetorno is TRUE THEN
-- boRetorno := inserirEventoAutomaticoDescontoAdiantamento(1,stDesdobramento);
-- END IF;
--END IF;
END IF;
END IF;
IF inControleExecucaoRescisaoDecimo < 1 THEN
boRetorno := deletarTemporariasDoCalculo(true);
END IF;
RETURN TRUE;
END;
$$LANGUAGE 'plpgsql';