qtdeSerie = qtde.doubleValue();
}
qtdeAnterior = qtdeSerie;
} else
qtdeSerie = qtdeAnterior;
serie1.add(new Month(auxMes, auxAno), qtdeSerie);
valuesProjection.add(qtdeSerie);
sMeses.add(Integer.valueOf(i));
sRealizado.add(new Double(qtdeSerie));
auxMes++;
if(auxMes == 13){
auxMes = 1;
auxAno++;
}
i++;
}
//Avan�a 1 mes
int mesAnt = auxMes;
int anoAnt = auxAno;
if(mesAnt - 1 == 0){
mesAnt = 12;
anoAnt--;
} else {
mesAnt--;
}
int mesFimProjecao = mesFimRealizado;
int anoFimProjecao = anoFimRealizado;
int xProjetado = 0;
int[] fimProjecao = acompReferenciaItemDao.getMesAnoFimProjecao(indicador);
mesFimProjecao = fimProjecao[0];
anoFimProjecao = fimProjecao[1];
//Descobrir o xProjetado (�ndice que mesFimProjecao/anoFimProjecao teria na matriz de realizados)
if(anoFimProjecao == anoFimRealizado){
xProjetado = i + (mesFimProjecao - mesFimRealizado);
} else {
while(anoFimProjecao > anoFimRealizado){ // Corre��o Thaise [antes era um !=]
mesFimRealizado++;
if(mesFimRealizado == 13){
anoFimRealizado++;
mesFimRealizado = 1;
}
xProjetado++;
}
xProjetado += i + mesFimProjecao;
}
//Descobrir at� onde vai o PREVISTO
String strMesInicio = Integer.valueOf(mesInicio).toString();
if(strMesInicio.length() == 1)
strMesInicio = "0" + strMesInicio;
String strMesFim = Integer.valueOf(mesFimProjecao).toString();
if(strMesFim.length() == 1)
strMesFim = "0" + strMesFim;
String strAnoInicio = Integer.valueOf(anoInicio).toString();
String strAnoFim = Integer.valueOf(anoFimProjecao).toString();
ExercicioExe exercicioInicial = acompReferenciaDao.getExercicio(strAnoInicio, strMesInicio);
ExercicioExe exercicioFinal = acompReferenciaDao.getExercicio(strAnoFim, strMesFim);
List exerciciosAnteriores = new ArrayList();
List exerciciosPosteriores = new ArrayList();
if(exercicioFinal!=null)
exerciciosAnteriores = exercicioDao.getExerciciosAnteriores(exercicioFinal);
if(exercicioInicial!=null)
exerciciosPosteriores = exercicioDao.getExerciciosPosteriores(exercicioInicial);
Set exerciciosDoPeriodo = new HashSet();
exerciciosDoPeriodo.addAll(Util.intersecao(exerciciosAnteriores, exerciciosPosteriores));
if(exercicioInicial!=null)
exerciciosDoPeriodo.add(exercicioInicial);
if(exercicioFinal!=null)
exerciciosDoPeriodo.add(exercicioFinal);
double previstoFinal = 0;
ArrayList<ItemEstrutFisicoIettf> previstos = new ArrayList<ItemEstrutFisicoIettf>(indicador.getItemEstrutFisicoIettfs());
if(previstos!=null && previstos.size()>0 && (previstos.get(0).getAnoIettf()!=anoInicio || previstos.get(0).getMesIettf()!=mesInicio)){
serie3.addOrUpdate(new Month(mesInicio,anoInicio),0);
}
for(ItemEstrutFisicoIettf previsto: previstos){
if("S".equals(indicador.getIndAcumulavelIettr())){
previstoFinal+=previsto.getQtdPrevistaIettf();
}else{
previstoFinal=previsto.getQtdPrevistaIettf();
}
serie3.addOrUpdate(new Month(previsto.getMesIettf(),previsto.getAnoIettf()),previstoFinal);
}
//plotar valores projetados at� ultimo mes de projecao, ou ent�o at� que projetado > previstoFinal
double ultimoProjetado = 0;
double projetadoAnterior = acompReferenciaItemDao.calcularPrevistoMes(sMeses, sRealizado, i);
while(i <= xProjetado){
i++;
auxMes++;
if(auxMes==13){
auxMes = 1;
auxAno++;
}
ultimoProjetado = acompReferenciaItemDao.calcularPrevistoMes(sMeses, sRealizado, i);
qtdeAnterior += (ultimoProjetado - projetadoAnterior);
projetadoAnterior = ultimoProjetado;
serie2.add(new Month(auxMes, auxAno), qtdeAnterior);
if(qtdeAnterior > previstoFinal) //qtdeAnterior jah � maior que previsto final, break it!
break;
}
//Continua a segunda s�rie at� ultrapassar previstoFinal (caso j� n�o tenha ultrapassado)
while(qtdeAnterior < previstoFinal && qtdeAnterior>0){
i++;
auxMes++;
if(auxMes > 12){
auxMes = 1;
auxAno++;
}
ultimoProjetado = acompReferenciaItemDao.calcularPrevistoMes(sMeses, sRealizado, i);
qtdeAnterior += (ultimoProjetado - projetadoAnterior);
projetadoAnterior = ultimoProjetado;
}
if(!soPrevisao)
data.addSeries(serie1);
if(comQtde){
Date start = getDataInicioProjecaoIndicador(Pagina.getParam(request, "codIndicador"), Pagina.getParam(request, "codAri"), comQtde, soPrevisao);
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(start);
Projection myProjection = FactoryCalculoProjecao.getProjection(tipoProjecao, valuesProjection, calendar);
TimeSeries projectionSerie = new TimeSeries("Projetado", Month.class);
calendar.add(GregorianCalendar.MONTH,valuesProjection.size()-1);
Map<GregorianCalendar,Double> projection = myProjection.getMapProjection(calendar, myProjection.getDate(previstoFinal));
for(GregorianCalendar date: projection.keySet()){
projectionSerie.add(new Month(date.get(GregorianCalendar.MONTH) + 1, date.get(GregorianCalendar.YEAR)), projection.get(date));
}
data.addSeries(projectionSerie);
}