1 package ecar.servlet.relatorio.PPA_OrgaoUnidade;
2
3 import java.math.BigDecimal;
4 import java.util.ArrayList;
5 import java.util.Collection;
6 import java.util.Iterator;
7 import java.util.List;
8 import java.util.Set;
9 import java.util.TreeSet;
10
11 import javax.servlet.http.HttpServletRequest;
12
13 import org.apache.log4j.Logger;
14
15 import ecar.dao.ExercicioDao;
16 import ecar.dao.ItemEstruturaPrevisaoDao;
17 import ecar.dao.OrgaoDao;
18 import ecar.dao.PoderDao;
19 import ecar.dao.UnidadeOrcamentariaDao;
20 import ecar.exception.ECARException;
21 import ecar.pojo.ExercicioExe;
22 import ecar.pojo.ItemEstruturaIett;
23 import ecar.pojo.OrgaoOrg;
24 import ecar.pojo.PoderPod;
25 import ecar.pojo.UnidadeOrcamentariaUO;
26 import ecar.servlet.relatorio.PPA_Orgao.OrgaoComparatorNome;
27 import ecar.servlet.relatorio.PPA_Orgao.PPA_OrgaoBean;
28 import ecar.servlet.relatorio.PPA_Util.CalcularTotalVisitor;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class RelatorioPPAOrgaoUnidadeService {
44
45
46
47
48 private Logger logger = Logger.getLogger(this.getClass());
49
50
51
52
53 private HttpServletRequest request;
54
55
56
57
58 private ArrayList<PPA_OrgaoBean> dados;
59
60
61
62
63 private final CalcularTotalVisitor calcularTotal = new CalcularTotalVisitor();
64
65
66
67 private final int CONSTANTE_PODER = 1;
68 private final int CONSTANTE_ORGAO = 2;
69 private final int CONSTANTE_UNIDADE = 3;
70
71
72 private final Long CONSTANTE_MINISTERIO_PUBLICO = Long.valueOf( 3L );
73
74 private final Long ORGAO_ADMIN_SEPL = Long.valueOf( 103L );
75 private final Long ORGAO_ADMIN_SEFA = Long.valueOf( 104L );
76 private final Long CONSTANTE_PODER_LEGISLATIVO = Long.valueOf( 1L );
77
78
79
80 private final Character CONSTANTE_IND_ATIVO = new Character('S');
81
82
83 private final Long CONSTANTE_PERIODO_EXERCICIO = Long.valueOf(2);
84
85
86
87
88 private List<ExercicioExe> listaExercicios = new ArrayList<ExercicioExe>();
89
90 private BigDecimal totalGeral1 = new BigDecimal(0);
91 private BigDecimal totalGeral2 = new BigDecimal(0);
92 private BigDecimal totalGeral3 = new BigDecimal(0);
93 private BigDecimal totalGeral4 = new BigDecimal(0);
94
95
96
97
98 private RelatorioPPAOrgaoUnidadeService(){
99 dados = new ArrayList<PPA_OrgaoBean>();
100 }
101
102
103
104
105
106
107 public static RelatorioPPAOrgaoUnidadeService getInstance( HttpServletRequest paramRequest ){
108 RelatorioPPAOrgaoUnidadeService objeto = new RelatorioPPAOrgaoUnidadeService();
109 objeto.request = paramRequest;
110 return objeto;
111 }
112
113
114
115
116
117 public ArrayList<PPA_OrgaoBean> generatePPA(){
118 getDados();
119 gerarContador();
120 return dados;
121 }
122
123 public BigDecimal getTotalGeral1(){
124 return totalGeral1;
125 }
126
127 public BigDecimal getTotalGeral2(){
128 return totalGeral2;
129 }
130
131 public BigDecimal getTotalGeral3(){
132 return totalGeral3;
133 }
134
135 public BigDecimal getTotalGeral4(){
136 return totalGeral4;
137 }
138
139 public BigDecimal getTotalGeral(){
140 return new BigDecimal(0).add(totalGeral1).add(totalGeral2).add(totalGeral3).add(totalGeral4);
141 }
142
143
144
145
146
147
148 private Set reordenarOrgao(Collection list){
149 TreeSet<OrgaoOrg> novalista = new TreeSet<OrgaoOrg>( new OrgaoComparatorNome() );
150 for (Iterator iter = list.iterator(); iter.hasNext();) {
151 OrgaoOrg org = (OrgaoOrg) iter.next();
152
153 if ( CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( org.getIndAtivoOrg() ) ){
154 novalista.add(org);
155 }
156
157 }
158 return novalista;
159 }
160
161
162 private ArrayList<OrgaoOrg> fixarOrgaos(Set<OrgaoOrg> list){
163
164 OrgaoOrg org_SEPL = null;
165 OrgaoOrg org_SEFA = null;
166
167
168 final Long ORGAO_SECR_FAZENDA = Long.valueOf( 13L );
169
170
171 final Long ORGAO_SECR_PLAN = Long.valueOf( 1L );
172
173 ArrayList<OrgaoOrg> novaLista = new ArrayList<OrgaoOrg>();
174
175
176 for (Iterator iter = list.iterator(); iter.hasNext();) {
177 OrgaoOrg org = (OrgaoOrg) iter.next();
178
179 if ( org.getCodOrg().equals( ORGAO_ADMIN_SEPL )){
180 org_SEPL = org;
181 iter.remove();
182 }
183
184 if ( org.getCodOrg().equals( ORGAO_ADMIN_SEFA )){
185 org_SEFA = org;
186 iter.remove();
187 }
188
189
190
191 }
192
193 for (Iterator iter2 = list.iterator(); iter2.hasNext();) {
194 OrgaoOrg tmp = (OrgaoOrg) iter2.next();
195
196 if ( tmp.getCodOrg().equals( ORGAO_SECR_FAZENDA ) ){
197 novaLista.add(tmp);
198 novaLista.add(org_SEFA);
199 }
200
201 if ( tmp.getCodOrg().equals( ORGAO_SECR_PLAN ) ){
202 novaLista.add(tmp);
203 novaLista.add(org_SEPL);
204 }
205
206
207 if ( tmp.getCodOrg().equals( ORGAO_SECR_FAZENDA ) ){
208 }else if ( tmp.getCodOrg().equals( ORGAO_SECR_PLAN ) ){
209 }else{
210 novaLista.add(tmp);
211
212 }
213
214 }
215
216 return novaLista;
217
218 }
219
220
221
222
223
224
225
226
227
228
229
230
231 private void getDados(){
232
233 final PoderDao poderDao = new PoderDao(request);
234 final OrgaoDao orgaoDao = new OrgaoDao(request);
235 final UnidadeOrcamentariaDao unidadeDao = new UnidadeOrcamentariaDao(request);
236
237 try{
238 ArrayList<PoderPod> listPoder = poderDao.getPoderesByPeriodicidade(CONSTANTE_PERIODO_EXERCICIO, CONSTANTE_IND_ATIVO);
239
240
241 loadExerciciosValidos();
242
243 for (Iterator iter = listPoder.iterator(); iter.hasNext();) {
244 PoderPod poder = (PoderPod) iter.next();
245
246 if (poder.getIndAtivoPod().equalsIgnoreCase( CONSTANTE_IND_ATIVO.toString() ) ){
247
248 PPA_OrgaoBean orgaoBeanPod = new PPA_OrgaoBean();
249 orgaoBeanPod.setNome( poder.getNomePod().toUpperCase() );
250 orgaoBeanPod.setFlag(CONSTANTE_PODER);
251
252 ArrayList<OrgaoOrg> listOrgao = orgaoDao.getOrgaoByPeriodicidade(CONSTANTE_PERIODO_EXERCICIO, poder.getCodPod(), CONSTANTE_IND_ATIVO);
253
254 listOrgao = fixarOrgaos( reordenarOrgao( listOrgao ) );
255
256
257 dados.add(orgaoBeanPod);
258
259
260 BigDecimal totalOrgaoAno1 = new BigDecimal(0);
261 BigDecimal totalOrgaoAno2 = new BigDecimal(0);
262 BigDecimal totalOrgaoAno3 = new BigDecimal(0);
263 BigDecimal totalOrgaoAno4 = new BigDecimal(0);
264 for (Iterator iterator = listOrgao.iterator(); iterator
265 .hasNext();) {
266
267 OrgaoOrg orgao = (OrgaoOrg) iterator.next();
268
269 if ( orgao.getIndAtivoOrg().equalsIgnoreCase(CONSTANTE_IND_ATIVO.toString() ) ){
270
271 PPA_OrgaoBean orgaoBeanOrg = new PPA_OrgaoBean();
272 orgaoBeanOrg.setNome( orgao.getDescricaoOrg() );
273 orgaoBeanOrg.setFlag(CONSTANTE_ORGAO);
274
275 ArrayList<UnidadeOrcamentariaUO> unidades = unidadeDao.getUnidadesByPeriodicidade(CONSTANTE_PERIODO_EXERCICIO, orgao.getCodOrg(), CONSTANTE_IND_ATIVO);
276
277 if ( unidades!=null && unidades.size()>0 ){
278 int contIndireta = 0;
279 int contDireta = 0;
280 for (Iterator itUnid = unidades.iterator(); itUnid.hasNext();) {
281 UnidadeOrcamentariaUO elemento = (UnidadeOrcamentariaUO) itUnid.next();
282 if ( elemento.getIndTipoAdministracaoUo().equalsIgnoreCase("I") ){
283 contIndireta++;
284 }else{
285 contDireta++;
286 }
287 }
288
289 if (contIndireta > 0 || contDireta>0){
290 dados.add(orgaoBeanOrg);
291 }
292
293 }
294
295 BigDecimal totalUnidadeAno1 = new BigDecimal(0);
296 BigDecimal totalUnidadeAno2 = new BigDecimal(0);
297 BigDecimal totalUnidadeAno3 = new BigDecimal(0);
298 BigDecimal totalUnidadeAno4 = new BigDecimal(0);
299
300
301 if ( ORGAO_ADMIN_SEPL.longValue() != orgao.getCodOrg().longValue() &&
302 ORGAO_ADMIN_SEFA.longValue() != orgao.getCodOrg().longValue() ){
303
304
305
306 PPA_OrgaoBean adminDiretaBean = agruparDiretas(unidades);
307 if ( adminDiretaBean != null ){
308 adminDiretaBean.setNome("Administração Direta");
309 adminDiretaBean.setFlag(CONSTANTE_UNIDADE);
310 adminDiretaBean.setTpAdminDireta(Boolean.FALSE);
311 dados.add(adminDiretaBean);
312
313 totalUnidadeAno1 = totalUnidadeAno1.add( adminDiretaBean.getValor1() );
314 totalUnidadeAno2 = totalUnidadeAno2.add( adminDiretaBean.getValor2() );
315 totalUnidadeAno3 = totalUnidadeAno3.add( adminDiretaBean.getValor3() );
316 totalUnidadeAno4 = totalUnidadeAno4.add( adminDiretaBean.getValor4() );
317
318 }
319
320
321 }
322
323 for (Iterator itUnidade = unidades.iterator(); itUnidade
324 .hasNext();) {
325 UnidadeOrcamentariaUO unidade = (UnidadeOrcamentariaUO) itUnidade.next();
326
327 if ( unidade.getIndAtivoUo().equalsIgnoreCase( CONSTANTE_IND_ATIVO.toString() ) ){
328
329 if ( unidade.getIndTipoAdministracaoUo()!=null && unidade.getIndTipoAdministracaoUo().equalsIgnoreCase("I")
330 || unidade.getOrgaoOrg().getCodOrg().equals( ORGAO_ADMIN_SEPL)
331 || unidade.getOrgaoOrg().getCodOrg().equals( ORGAO_ADMIN_SEFA)
332 ){
333
334 PPA_OrgaoBean orgaoBeanUnidade = new PPA_OrgaoBean();
335 orgaoBeanUnidade.setNome( unidade.getDescricaoUo() );
336 orgaoBeanUnidade.setFlag( CONSTANTE_UNIDADE );
337 orgaoBeanUnidade.setTpAdminDireta(false);
338 orgaoBeanOrg.setTpAdminDireta(false);
339 orgaoBeanPod.setTpAdminDireta(false);
340
341 Set itens = unidade.getItemEstruturaIettsByCodUo();
342
343 for (Iterator itItem = itens.iterator(); itItem.hasNext();) {
344 ItemEstruturaIett itemOrgao = (ItemEstruturaIett) itItem.next();
345
346 if ( CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( itemOrgao.getIndAtivoIett() ) ){
347 if ( itemOrgao.getNivelIett().equals( Integer.valueOf(3) )){
348
349 BigDecimal[] previsto = getPrevisao(itemOrgao);
350 totalizarBean( orgaoBeanUnidade, previsto );
351 }
352
353 }
354
355 }
356 totalUnidadeAno1 = totalUnidadeAno1.add( orgaoBeanUnidade.getValor1() );
357 totalUnidadeAno2 = totalUnidadeAno2.add( orgaoBeanUnidade.getValor2() );
358 totalUnidadeAno3 = totalUnidadeAno3.add( orgaoBeanUnidade.getValor3() );
359 totalUnidadeAno4 = totalUnidadeAno4.add( orgaoBeanUnidade.getValor4() );
360
361 if ( (!unidade.getOrgaoOrg().getCodOrg().equals( ORGAO_ADMIN_SEPL)) && (!unidade.getOrgaoOrg().getCodOrg().equals( ORGAO_ADMIN_SEFA) ) ){
362 dados.add(orgaoBeanUnidade);
363 }
364
365
366
367 }
368
369
370
371 }
372
373 }
374 orgaoBeanOrg.setValor1( totalUnidadeAno1 );
375 orgaoBeanOrg.setValor2( totalUnidadeAno2 );
376 orgaoBeanOrg.setValor3( totalUnidadeAno3 );
377 orgaoBeanOrg.setValor4( totalUnidadeAno4 );
378 calcularTotal.visit(orgaoBeanOrg);
379
380
381
382 totalOrgaoAno1 = totalOrgaoAno1.add( orgaoBeanOrg.getValor1() );
383 totalOrgaoAno2 = totalOrgaoAno2.add( orgaoBeanOrg.getValor2() );
384 totalOrgaoAno3 = totalOrgaoAno3.add( orgaoBeanOrg.getValor3() );
385 totalOrgaoAno4 = totalOrgaoAno4.add( orgaoBeanOrg.getValor4() );
386
387 }
388
389 }
390 orgaoBeanPod.setValor1( totalOrgaoAno1 );
391 orgaoBeanPod.setValor2( totalOrgaoAno2 );
392 orgaoBeanPod.setValor3( totalOrgaoAno3 );
393 orgaoBeanPod.setValor4( totalOrgaoAno4 );
394 calcularTotal.visit(orgaoBeanPod);
395
396 totalGeral1 = totalGeral1.add( orgaoBeanPod.getValor1() );
397 totalGeral2 = totalGeral2.add( orgaoBeanPod.getValor2() );
398 totalGeral3 = totalGeral3.add( orgaoBeanPod.getValor3() );
399 totalGeral4 = totalGeral4.add( orgaoBeanPod.getValor4() );
400
401
402 }
403
404
405
406 }
407
408
409
410 }catch (Exception e) {
411 logger.error("Nao foi possivel carregar dados do relatorio", e);
412 listError();
413 }
414
415 }
416
417
418
419
420
421
422
423
424 private PPA_OrgaoBean agruparDiretas(ArrayList unidades) throws ECARException{
425
426 ArrayList<UnidadeOrcamentariaUO> somenteDiretas = new ArrayList<UnidadeOrcamentariaUO>();
427 PPA_OrgaoBean adminDiretaTmp = new PPA_OrgaoBean();
428
429
430 for (Iterator iter = unidades.iterator(); iter.hasNext();) {
431 UnidadeOrcamentariaUO unidade = (UnidadeOrcamentariaUO) iter.next();
432
433 if ( unidade.getIndTipoAdministracaoUo().equals("D")){
434 somenteDiretas.add(unidade);
435 }
436
437 }
438
439 if ( somenteDiretas.isEmpty() ){
440 return null;
441 }
442
443 for (Iterator iter2 = somenteDiretas.iterator(); iter2.hasNext();) {
444 UnidadeOrcamentariaUO unidTmp = (UnidadeOrcamentariaUO) iter2.next();
445
446 Set itens = unidTmp.getItemEstruturaIettsByCodUo();
447
448 for (Iterator itItem = itens.iterator(); itItem.hasNext();) {
449 ItemEstruturaIett itemOrgao = (ItemEstruturaIett) itItem.next();
450
451 if ( CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( itemOrgao.getIndAtivoIett()) ){
452 if ( itemOrgao.getNivelIett().equals( Integer.valueOf(3) )){
453
454 BigDecimal[] previsto = getPrevisao(itemOrgao);
455 totalizarBean( adminDiretaTmp , previsto );
456 }
457
458 }
459
460 }
461
462 }
463
464 return adminDiretaTmp;
465 }
466
467
468
469
470
471
472 private void gerarContador(){
473
474 int cont = 0;
475 for (Iterator iter = dados.iterator(); iter.hasNext();) {
476 PPA_OrgaoBean elemento = (PPA_OrgaoBean) iter.next();
477 elemento.setIndice(cont);
478 cont++;
479 }
480
481 }
482
483
484
485
486
487
488 private void totalizarBean(PPA_OrgaoBean orgaoBean, BigDecimal[] valores){
489
490 final BigDecimal ZERO = new BigDecimal(0);
491
492 try {
493 if( valores!=null && valores.length == 4 ){
494
495 BigDecimal vlr1 = orgaoBean.getValor1();
496 BigDecimal vlr2 = orgaoBean.getValor2();
497 BigDecimal vlr3 = orgaoBean.getValor3();
498 BigDecimal vlr4 = orgaoBean.getValor4();
499
500 orgaoBean.setValor1( vlr1.add( valores[0]==null?ZERO:valores[0] ) );
501 orgaoBean.setValor2( vlr2.add( valores[1]==null?ZERO:valores[1] ) );
502 orgaoBean.setValor3( vlr3.add( valores[2]==null?ZERO:valores[2] ) );
503 orgaoBean.setValor4( vlr4.add( valores[3]==null?ZERO:valores[3] ) );
504 calcularTotal.visit(orgaoBean);
505
506 }else{
507 orgaoBean.setValor1( ZERO );
508 orgaoBean.setValor2( ZERO );
509 orgaoBean.setValor3( ZERO );
510 orgaoBean.setValor4( ZERO );
511 orgaoBean.setTotal( ZERO );
512 }
513 } catch (Exception e) {
514 logger.error("Nao foi possivel totalizar bean: " + orgaoBean.getNome(), e);
515 }
516
517
518 }
519
520
521
522
523
524 private BigDecimal[] getPrevisao(final ItemEstruturaIett itemEstrut ) throws ECARException{
525
526 final ExercicioDao exercicioDao = new ExercicioDao(request);
527 final ItemEstruturaPrevisaoDao prevDao = new ItemEstruturaPrevisaoDao(request);
528
529 ArrayList<BigDecimal> previsao = new ArrayList<BigDecimal>();
530 BigDecimal previsaoItem = null;
531 for (Iterator iterExer = listaExercicios.iterator(); iterExer.hasNext();) {
532 ExercicioExe elementoExerc = (ExercicioExe) iterExer.next();
533 previsaoItem = prevDao.previsaoItemAcao( itemEstrut.getCodIett(), elementoExerc.getCodExe() ) ;
534 previsao.add(previsaoItem);
535 }
536 return previsao.toArray(new BigDecimal[previsao.size()]);
537
538 }
539
540
541
542
543
544 private void loadExerciciosValidos(){
545
546 try {
547
548 final ExercicioDao exercicioDao = new ExercicioDao(request);
549
550
551 listaExercicios = exercicioDao.getExercicioByPeriodicidade( CONSTANTE_PERIODO_EXERCICIO );
552
553 } catch (ECARException e) {
554 logger.error("Nao foi possivel carregar Exercicio", e);
555 } catch (Exception e) {
556 logger.error("Nao foi possivel carregar Exercicio", e);
557 }
558
559 }
560
561
562
563
564
565 private void listError(){
566 dados = new ArrayList<PPA_OrgaoBean>();
567 PPA_OrgaoBean novoBean = new PPA_OrgaoBean();
568 novoBean.setNome("Vazio");
569 dados.add(novoBean);
570 }
571
572 }