1 package ecar.servlet.relatorio.PPA_LinhaPrograma;
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.ItemEstruturaIett;
21 import ecar.servlet.relatorio.PPA_LinhaAcao.LinhaAcaoComparatorNome;
22 import ecar.servlet.relatorio.PPA_LinhaAcao.LinhaAcaoComparatorSigla;
23 import ecar.servlet.relatorio.PPA_LinhaAcao.PPA_LinhaAcaoBean;
24 import ecar.servlet.relatorio.PPA_Util.CalcularTotalVisitor;
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 public class RelatorioPPALinhaProgramaService {
41
42
43
44
45 private Logger logger = Logger.getLogger(this.getClass());
46
47
48
49
50 private HttpServletRequest request;
51
52 private static final Long codEstruturaLinhaAcao = Long.valueOf(27);
53
54
55
56
57 private ArrayList<PPA_LinhaAcaoBean> dados;
58
59
60
61 private final Long CONSTANTE_PERIODO_EXERCICIO = Long.valueOf(2);
62
63
64 private final Character CONSTANTE_IND_ATIVO = new Character('S');
65
66
67
68
69 private List<ExercicioExe> listaExercicios = new ArrayList<ExercicioExe>();
70
71
72
73
74
75 private final CalcularTotalVisitor calcularTotal = new CalcularTotalVisitor();
76
77 private BigDecimal totalGeral1 = new BigDecimal(0);
78 private BigDecimal totalGeral2 = new BigDecimal(0);
79 private BigDecimal totalGeral3 = new BigDecimal(0);
80 private BigDecimal totalGeral4 = new BigDecimal(0);
81
82
83
84
85
86 private RelatorioPPALinhaProgramaService(){
87 dados = new ArrayList<PPA_LinhaAcaoBean>();
88 }
89
90
91
92
93
94
95 public static RelatorioPPALinhaProgramaService getInstance( HttpServletRequest paramRequest ){
96 RelatorioPPALinhaProgramaService objeto = new RelatorioPPALinhaProgramaService();
97 objeto.request = paramRequest;
98 return objeto;
99 }
100
101
102
103
104
105 public ArrayList<PPA_LinhaAcaoBean> generatePPA(){
106 getDados();
107 gerarContador();
108 return dados;
109 }
110
111 public BigDecimal getTotalGeral1(){
112 return totalGeral1;
113 }
114
115 public BigDecimal getTotalGeral2(){
116 return totalGeral2;
117 }
118
119 public BigDecimal getTotalGeral3(){
120 return totalGeral3;
121 }
122
123 public BigDecimal getTotalGeral4(){
124 return totalGeral4;
125 }
126
127 public BigDecimal getTotalGeral(){
128 return new BigDecimal(0).add(totalGeral1).add(totalGeral2).add(totalGeral3).add(totalGeral4);
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(){
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);
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 ) 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.setNivelItem(1);
248 beans.add(Niveltmp);
249
250 BigDecimal totalProgramaAno1 = new BigDecimal(0);
251 BigDecimal totalProgramaAno2 = new BigDecimal(0);
252 BigDecimal totalProgramaAno3 = new BigDecimal(0);
253 BigDecimal totalProgramaAno4 = new BigDecimal(0);
254
255
256 for (Iterator iter2 = reordenarPrograma(item.getItemEstruturaIetts()).iterator(); iter2.hasNext();) {
257 ItemEstruturaIett programa = (ItemEstruturaIett) iter2.next();
258
259 PPA_LinhaAcaoBean programaTmp = new PPA_LinhaAcaoBean();
260 programaTmp.setNome( programa.getNomeIett() );
261 programaTmp.setNivelItem(Integer.valueOf(2));
262 beans.add(programaTmp);
263
264
265 BigDecimal totalAcoesAno1 = new BigDecimal(0);
266 BigDecimal totalAcoesAno2 = new BigDecimal(0);
267 BigDecimal totalAcoesAno3 = new BigDecimal(0);
268 BigDecimal totalAcoesAno4 = new BigDecimal(0);
269
270
271 for (Iterator iter3 = reordenarPrograma(programa.getItemEstruturaIetts()).iterator(); iter3.hasNext();) {
272 ItemEstruturaIett acao = (ItemEstruturaIett) iter3.next();
273
274 PPA_LinhaAcaoBean acaoTmp = new PPA_LinhaAcaoBean();
275 acaoTmp.setNivelItem(Integer.valueOf(3));
276 BigDecimal[] totais = getPrevisao(acao);
277
278 acaoTmp.setValor1( totais[0]==null?ZERO:totais[0] );
279 acaoTmp.setValor2( totais[1]==null?ZERO:totais[1] );
280 acaoTmp.setValor3( totais[2]==null?ZERO:totais[2] );
281 acaoTmp.setValor4( totais[3]==null?ZERO:totais[3] );
282
283 calcularTotal.visit(acaoTmp);
284 totalAcoesAno1 = totalAcoesAno1.add( acaoTmp.getValor1() );
285 totalAcoesAno2 = totalAcoesAno2.add( acaoTmp.getValor2() );
286 totalAcoesAno3 = totalAcoesAno3.add( acaoTmp.getValor3() );
287 totalAcoesAno4 = totalAcoesAno4.add( acaoTmp.getValor4() );
288
289 }
290
291
292
293 programaTmp.setValor1( totalAcoesAno1 );
294 programaTmp.setValor2( totalAcoesAno2 );
295 programaTmp.setValor3( totalAcoesAno3 );
296 programaTmp.setValor4( totalAcoesAno4 );
297 calcularTotal.visit( programaTmp );
298
299 totalProgramaAno1 = totalProgramaAno1.add( programaTmp.getValor1() );
300 totalProgramaAno2 = totalProgramaAno2.add( programaTmp.getValor2() );
301 totalProgramaAno3 = totalProgramaAno3.add( programaTmp.getValor3() );
302 totalProgramaAno4 = totalProgramaAno4.add( programaTmp.getValor4() );
303
304 }
305
306
307 Niveltmp.setValor1( totalProgramaAno1 );
308 Niveltmp.setValor2( totalProgramaAno2 );
309 Niveltmp.setValor3( totalProgramaAno3 );
310 Niveltmp.setValor4( totalProgramaAno4 );
311 calcularTotal.visit( Niveltmp );
312
313 totalGeral1 = totalGeral1.add( Niveltmp.getValor1() );
314 totalGeral2 = totalGeral2.add( Niveltmp.getValor2() );
315 totalGeral3 = totalGeral3.add( Niveltmp.getValor3() );
316 totalGeral4 = totalGeral4.add( Niveltmp.getValor4() );
317
318
319 }
320
321 return beans;
322
323 }
324
325
326
327
328
329
330
331
332 private BigDecimal[] getPrevisao(final ItemEstruturaIett itemEstrut ) throws ECARException{
333
334 final ItemEstruturaPrevisaoDao prevDao = new ItemEstruturaPrevisaoDao(request);
335
336 ArrayList<BigDecimal> previsao = new ArrayList<BigDecimal>();
337 BigDecimal previsaoItem = null;
338 for (Iterator iterExer = listaExercicios.iterator(); iterExer.hasNext();) {
339 ExercicioExe elementoExerc = (ExercicioExe) iterExer.next();
340 previsaoItem = prevDao.previsaoItemAcao( itemEstrut.getCodIett(), elementoExerc.getCodExe() ) ;
341 previsao.add(previsaoItem);
342 }
343 return previsao.toArray(new BigDecimal[previsao.size()]);
344
345 }
346
347 }