1 package ecar.servlet.relatorio.PPA_LinhaAcao;
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.ItemEstruturaDao;
17 import ecar.dao.ItemEstruturaPrevisaoDao;
18 import ecar.exception.ECARException;
19 import ecar.pojo.ExercicioExe;
20 import ecar.pojo.ItemEstUsutpfuacIettutfa;
21 import ecar.pojo.ItemEstruturaIett;
22 import ecar.servlet.relatorio.PPA_Util.CalcularTotalVisitor;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 public class RelatorioPPALinhaAcaoService {
39
40
41
42
43 private Logger logger = Logger.getLogger(this.getClass());
44
45
46
47
48 private HttpServletRequest request;
49
50 private static final Long codEstruturaLinhaAcao = Long.valueOf(27);
51
52
53
54
55 private ArrayList<PPA_LinhaAcaoBean> dados;
56
57
58
59 private final Long CONSTANTE_PERIODO_EXERCICIO = Long.valueOf(2);
60
61
62 private final Character CONSTANTE_IND_ATIVO = new Character('S');
63
64
65
66
67 private List<ExercicioExe> listaExercicios = new ArrayList<ExercicioExe>();
68
69
70
71
72
73 private final CalcularTotalVisitor calcularTotal = new CalcularTotalVisitor();
74
75
76 private BigDecimal totalGeral1 = new BigDecimal(0);
77 private BigDecimal totalGeral2 = new BigDecimal(0);
78 private BigDecimal totalGeral3 = new BigDecimal(0);
79 private BigDecimal totalGeral4 = new BigDecimal(0);
80
81
82
83 public BigDecimal getTotalGeral1(){
84 return totalGeral1;
85 }
86
87 public BigDecimal getTotalGeral2(){
88 return totalGeral2;
89 }
90
91 public BigDecimal getTotalGeral3(){
92 return totalGeral3;
93 }
94
95 public BigDecimal getTotalGeral4(){
96 return totalGeral4;
97 }
98
99 public BigDecimal getTotalGeral(){
100 return new BigDecimal(0).add(totalGeral1).add(totalGeral2).add(totalGeral3).add(totalGeral4);
101 }
102
103
104
105
106 private RelatorioPPALinhaAcaoService(){
107 dados = new ArrayList<PPA_LinhaAcaoBean>();
108 }
109
110
111
112
113
114
115 public static RelatorioPPALinhaAcaoService getInstance( HttpServletRequest paramRequest ){
116 RelatorioPPALinhaAcaoService objeto = new RelatorioPPALinhaAcaoService();
117 objeto.request = paramRequest;
118 return objeto;
119 }
120
121
122
123
124
125 public ArrayList<PPA_LinhaAcaoBean> generatePPA( boolean possuiGerente ){
126 getDados( possuiGerente );
127 gerarContador();
128 return dados;
129 }
130
131 private void gerarContador(){
132
133 int cont = 0;
134 for (Iterator iter = dados.iterator(); iter.hasNext();) {
135 PPA_LinhaAcaoBean elemento = (PPA_LinhaAcaoBean) iter.next();
136 elemento.setIndice(cont);
137 cont++;
138 }
139
140 }
141
142
143
144
145
146 private void loadExerciciosValidos(){
147
148 try {
149
150 final ExercicioDao exercicioDao = new ExercicioDao(request);
151
152
153 listaExercicios = exercicioDao.getExercicioByPeriodicidade( CONSTANTE_PERIODO_EXERCICIO );
154
155 } catch (ECARException e) {
156 logger.error("Nao foi possivel carregar Exercicio", e);
157 } catch (Exception e) {
158 logger.error("Nao foi possivel carregar Exercicio", e);
159 }
160
161 }
162
163
164
165
166
167
168
169
170 private void getDados( boolean possuiGerente ){
171
172 ItemEstruturaDao itemEstruturaDao = new ItemEstruturaDao(request);
173 ArrayList<ItemEstruturaIett> itens = new ArrayList<ItemEstruturaIett>();
174 try {
175
176 itens = new ArrayList<ItemEstruturaIett>(itemEstruturaDao.getItensByEstrutura(codEstruturaLinhaAcao));
177
178
179 loadExerciciosValidos();
180
181
182 if(itens != null){
183 if (itens.size()==0){
184 logger.info("Nao existe itens na estrutura com este criterio de pesquisa!!!");
185 }else{
186 dados = generateBeans(itens, possuiGerente );
187 }
188 }
189 } catch (Exception e) {
190 logger.error("Nao foi possivel carregar dados", e);
191 }
192 }
193
194
195
196
197
198
199 private Set reordenarPrograma(Collection list){
200 TreeSet<ItemEstruturaIett> novalista = new TreeSet<ItemEstruturaIett>( new LinhaAcaoComparatorNome() );
201 for (Iterator iter = list.iterator(); iter.hasNext();) {
202 ItemEstruturaIett item = (ItemEstruturaIett) iter.next();
203
204 if ( CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( item.getIndAtivoIett() ) ){
205 novalista.add(item);
206 }
207
208 }
209 return novalista;
210 }
211
212
213
214
215
216
217 private Set reordenarLinhaAcao(Collection list){
218 TreeSet<ItemEstruturaIett> novalista = new TreeSet<ItemEstruturaIett>( new LinhaAcaoComparatorSigla() );
219 for (Iterator iter = list.iterator(); iter.hasNext();) {
220 ItemEstruturaIett item = (ItemEstruturaIett) iter.next();
221
222 if ( CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( item.getIndAtivoIett() ) ){
223 novalista.add(item);
224 }
225
226 }
227 return novalista;
228 }
229
230
231
232
233
234
235 private ArrayList<PPA_LinhaAcaoBean> generateBeans( Collection itens, boolean possuiGerente ) throws Exception{
236
237 ArrayList<PPA_LinhaAcaoBean> beans = new ArrayList<PPA_LinhaAcaoBean>();
238
239 final BigDecimal ZERO = new BigDecimal(0);
240
241
242 for (Iterator iter = reordenarLinhaAcao(itens).iterator(); iter.hasNext();) {
243 ItemEstruturaIett item = (ItemEstruturaIett) iter.next();
244
245 PPA_LinhaAcaoBean Niveltmp = new PPA_LinhaAcaoBean();
246 Niveltmp.setNome( item.getNomeIett() );
247 Niveltmp.setSiglaOrgao( "" );
248 Niveltmp.setNivelItem(1);
249 beans.add(Niveltmp);
250
251 BigDecimal totalProgramaAno1 = new BigDecimal(0);
252 BigDecimal totalProgramaAno2 = new BigDecimal(0);
253 BigDecimal totalProgramaAno3 = new BigDecimal(0);
254 BigDecimal totalProgramaAno4 = new BigDecimal(0);
255
256
257 for (Iterator iter2 = reordenarPrograma(item.getItemEstruturaIetts()).iterator(); iter2.hasNext();) {
258 ItemEstruturaIett programa = (ItemEstruturaIett) iter2.next();
259
260 PPA_LinhaAcaoBean programaTmp = new PPA_LinhaAcaoBean();
261 programaTmp.setNome( programa.getNomeIett() );
262 programaTmp.setSiglaOrgao( programa.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg() );
263
264 programaTmp.setNivelItem(Integer.valueOf(2));
265 beans.add(programaTmp);
266
267 PPA_LinhaAcaoBean novaLinha = new PPA_LinhaAcaoBean();
268
269 if ( possuiGerente ){
270 String usrTmp = "";
271 for (Iterator iterUsu = programa.getItemEstUsutpfuacIettutfas().iterator(); iterUsu.hasNext();) {
272 ItemEstUsutpfuacIettutfa usuario = (ItemEstUsutpfuacIettutfa)iterUsu.next();
273 if ( usuario.getTipoFuncAcompTpfa().getCodTpfa().equals( Long.valueOf(4) ) ){
274 if (usuario.getUsuarioUsu() != null){
275 usrTmp = usuario.getUsuarioUsu().getNomeUsuSent();
276 } else if (usuario.getSisAtributoSatb() != null){
277 usrTmp = usuario.getSisAtributoSatb().getDescricaoSatb();
278 }
279 break;
280 }
281
282 }
283 novaLinha.setNome( usrTmp );
284 }else{
285 novaLinha.setNome( "" );
286 }
287 novaLinha.setNivelItem( 99 );
288 novaLinha.setSiglaOrgao( programa.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg() );
289
290 beans.add(novaLinha);
291
292 BigDecimal totalAcoesAno1 = new BigDecimal(0);
293 BigDecimal totalAcoesAno2 = new BigDecimal(0);
294 BigDecimal totalAcoesAno3 = new BigDecimal(0);
295 BigDecimal totalAcoesAno4 = new BigDecimal(0);
296
297 TreeSet<PPA_LinhaAcaoBean> orgaoAcao = new TreeSet<PPA_LinhaAcaoBean>( new LinhaAcaoComparatorOrgao() );
298
299
300 Set acoes = programa.getItemEstruturaIetts();
301 for (Iterator iter3 = acoes.iterator(); iter3.hasNext();) {
302 ItemEstruturaIett acao = (ItemEstruturaIett) iter3.next();
303
304 if(CONSTANTE_IND_ATIVO.toString().equalsIgnoreCase( acao.getIndAtivoIett() ) ){
305
306 PPA_LinhaAcaoBean acaoTmp = new PPA_LinhaAcaoBean();
307 acaoTmp.setSiglaOrgao( acao.getOrgaoOrgByCodOrgaoResponsavel1Iett().getSiglaOrg() );
308 acaoTmp.setNivelItem(Integer.valueOf(3));
309
310
311
312 BigDecimal[] totais = getPrevisao(acao);
313
314 acaoTmp.setValor1( totais[0]==null?ZERO:totais[0] );
315 acaoTmp.setValor2( totais[1]==null?ZERO:totais[1] );
316 acaoTmp.setValor3( totais[2]==null?ZERO:totais[2] );
317 acaoTmp.setValor4( totais[3]==null?ZERO:totais[3] );
318
319 calcularTotal.visit(acaoTmp);
320
321
322 if ( orgaoAcao.contains(acaoTmp) ){
323
324
325
326 for (Iterator orgaoIt = orgaoAcao.iterator(); orgaoIt.hasNext();) {
327 PPA_LinhaAcaoBean orgaoCheck = (PPA_LinhaAcaoBean) orgaoIt.next();
328
329 if ( orgaoCheck.equals( acaoTmp ) ){
330 orgaoCheck.setValor1( orgaoCheck.getValor1().add( acaoTmp.getValor1() ) );
331 orgaoCheck.setValor2( orgaoCheck.getValor2().add( acaoTmp.getValor2() ) );
332 orgaoCheck.setValor3( orgaoCheck.getValor3().add( acaoTmp.getValor3() ) );
333 orgaoCheck.setValor4( orgaoCheck.getValor4().add( acaoTmp.getValor4() ) );
334 orgaoCheck.setTotal( orgaoCheck.getTotal().add( acaoTmp.getTotal() ) );
335
336 totalAcoesAno1 = totalAcoesAno1.add( acaoTmp.getValor1() );
337 totalAcoesAno2 = totalAcoesAno2.add( acaoTmp.getValor2() );
338 totalAcoesAno3 = totalAcoesAno3.add( acaoTmp.getValor3() );
339 totalAcoesAno4 = totalAcoesAno4.add( acaoTmp.getValor4() );
340 }
341
342 }
343 }else{
344 if ( acaoTmp.getSiglaOrgao().equalsIgnoreCase( novaLinha.getSiglaOrgao() ) ){
345 novaLinha.setValor1( novaLinha.getValor1().add(acaoTmp.getValor1()) );
346 novaLinha.setValor2( novaLinha.getValor2().add(acaoTmp.getValor2()) );
347 novaLinha.setValor3( novaLinha.getValor3().add(acaoTmp.getValor3()) );
348 novaLinha.setValor4( novaLinha.getValor4().add(acaoTmp.getValor4()) );
349 novaLinha.setTotal( novaLinha.getTotal().add(acaoTmp.getTotal()) );
350
351 totalAcoesAno1 = totalAcoesAno1.add( acaoTmp.getValor1() );
352 totalAcoesAno2 = totalAcoesAno2.add( acaoTmp.getValor2() );
353 totalAcoesAno3 = totalAcoesAno3.add( acaoTmp.getValor3() );
354 totalAcoesAno4 = totalAcoesAno4.add( acaoTmp.getValor4() );
355
356 }else{
357
358 totalAcoesAno1 = totalAcoesAno1.add( acaoTmp.getValor1() );
359 totalAcoesAno2 = totalAcoesAno2.add( acaoTmp.getValor2() );
360 totalAcoesAno3 = totalAcoesAno3.add( acaoTmp.getValor3() );
361 totalAcoesAno4 = totalAcoesAno4.add( acaoTmp.getValor4() );
362
363 orgaoAcao.add(acaoTmp);
364 }
365
366
367 }
368
369 }
370 }
371
372 for (Iterator itOrgao = orgaoAcao.iterator(); itOrgao.hasNext();) {
373 PPA_LinhaAcaoBean orgao = (PPA_LinhaAcaoBean) itOrgao.next();
374 beans.add(orgao);
375 }
376
377
378 programaTmp.setValor1( totalAcoesAno1 );
379 programaTmp.setValor2( totalAcoesAno2 );
380 programaTmp.setValor3( totalAcoesAno3 );
381 programaTmp.setValor4( totalAcoesAno4 );
382 calcularTotal.visit( programaTmp );
383
384 totalProgramaAno1 = totalProgramaAno1.add( programaTmp.getValor1() );
385 totalProgramaAno2 = totalProgramaAno2.add( programaTmp.getValor2() );
386 totalProgramaAno3 = totalProgramaAno3.add( programaTmp.getValor3() );
387 totalProgramaAno4 = totalProgramaAno4.add( programaTmp.getValor4() );
388
389 }
390
391
392 Niveltmp.setValor1( totalProgramaAno1 );
393 Niveltmp.setValor2( totalProgramaAno2 );
394 Niveltmp.setValor3( totalProgramaAno3 );
395 Niveltmp.setValor4( totalProgramaAno4 );
396 calcularTotal.visit( Niveltmp );
397
398
399 totalGeral1 = totalGeral1.add( Niveltmp.getValor1() );
400 totalGeral2 = totalGeral2.add( Niveltmp.getValor2() );
401 totalGeral3 = totalGeral3.add( Niveltmp.getValor3() );
402 totalGeral4 = totalGeral4.add( Niveltmp.getValor4() );
403
404 }
405
406 return beans;
407
408
409
410
411
412
413
414 }
415
416
417
418
419
420
421
422
423 private BigDecimal[] getPrevisao(final ItemEstruturaIett itemEstrut ) throws ECARException{
424
425 final ItemEstruturaPrevisaoDao prevDao = new ItemEstruturaPrevisaoDao(request);
426
427 ArrayList<BigDecimal> previsao = new ArrayList<BigDecimal>();
428 BigDecimal previsaoItem = null;
429 for (Iterator iterExer = listaExercicios.iterator(); iterExer.hasNext();) {
430 ExercicioExe elementoExerc = (ExercicioExe) iterExer.next();
431 previsaoItem = prevDao.previsaoItemAcao( itemEstrut.getCodIett(), elementoExerc.getCodExe() ) ;
432 previsao.add(previsaoItem);
433 }
434 return previsao.toArray(new BigDecimal[previsao.size()]);
435
436 }
437
438 }