package gcom.gui.faturamento.consumotarifa;
import gcom.faturamento.consumotarifa.ConsumoTarifaFaixa;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.gui.faturamento.consumotarifa.bean.CategoriaFaixaConsumoTarifaHelper;
import gcom.util.Util;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* < <Descri��o da Classe>>
*
* @author Administrador
*/
public class ManterCategoriaFaixaConsumoTarifaSubCategoriaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping
.findForward("exibirManterCategoriaFaixaConsumoTarifaSubCategoria");
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessaoFaixa = httpServletRequest.getSession(false);
// Variavel para testar se o campo naum obrigatorio esta vazio
InserirCategoriaFaixaConsumoTarifaActionForm inserirCategoriaFaixaConsumoTarifaActionForm = (InserirCategoriaFaixaConsumoTarifaActionForm) actionForm;
Collection colecaoFaixa = (Collection) sessaoFaixa
.getAttribute("colecaoFaixa");
Integer consumoMin = new Integer(
(String) inserirCategoriaFaixaConsumoTarifaActionForm
.getLimiteSuperiorFaixa());
if (consumoMin.toString().equalsIgnoreCase("999999")){
retorno = actionMapping.findForward("manterCategoriaConsumoTarifaSubCategoria");
}
if (colecaoFaixa == null) {
colecaoFaixa = new ArrayList();
}
ConsumoTarifaFaixa consumoTarifaFaixa = new ConsumoTarifaFaixa();
Integer i = 0;
Object[] teste = colecaoFaixa.toArray();
if (teste.length > 0) {
ConsumoTarifaFaixa consumoTarifaFaixa2 = (ConsumoTarifaFaixa) teste[teste.length - 1];
if (colecaoFaixa != null) {
i = consumoTarifaFaixa2.getNumeroConsumoFaixaFim();
}
}
BigDecimal consumoMinimo = new BigDecimal((String) sessaoFaixa
.getAttribute("consumoMinimo"));
Integer limiteSuperFaixa = new Integer(
inserirCategoriaFaixaConsumoTarifaActionForm
.getLimiteSuperiorFaixa());
//boleana para saber se a faixa esta entre as faixas ou n�o
boolean entre = false;
if (!colecaoFaixa.isEmpty()) {
Iterator colecaoFaixaIterator = colecaoFaixa.iterator();
boolean existeUltimaFaixa = false;
boolean existeFaixa = false;
while (colecaoFaixaIterator.hasNext()) {
ConsumoTarifaFaixa consumoTarifaFaixaLista = (ConsumoTarifaFaixa) colecaoFaixaIterator.next();
if ( (consumoTarifaFaixaLista.getNumeroConsumoFaixaFim().toString().equals(limiteSuperFaixa.toString()))
&&
(consumoTarifaFaixaLista.getNumeroConsumoFaixaFim().toString().equals("999999"))){
existeUltimaFaixa = true;
}
if (consumoTarifaFaixaLista.getNumeroConsumoFaixaFim().toString().equals(limiteSuperFaixa.toString())){
existeFaixa = true;
}
if (existeUltimaFaixa){
throw new ActionServletException(
"atencao.faixa_limite_superior_existe");
}
if (existeFaixa){
throw new ActionServletException(
"atencao.faixa.existente");
}
}
ConsumoTarifaFaixa consumoTarifaFaixaAnteiror = null;
int indice = 0;
Iterator colecaoFaixaIt = colecaoFaixa.iterator();
while (colecaoFaixaIt.hasNext()) {
ConsumoTarifaFaixa consumoTarifaFaixaAtual = (ConsumoTarifaFaixa) colecaoFaixaIt
.next();
/*
* if(valorM.compareTo(consumoTarifaFaixa.getValorConsumoTarifa()) <
* 0){ throw new ActionServletException(
* "atencao.valor_m3_menor2"); }
*/
//Ana Breda pediu a retirada da atualiza��o
/*
if (consumoMin.compareTo(consumoTarifaFaixa2
.getNumeroConsumoFaixaFim()) <= 0) {
throw new ActionServletException(
"atencao.valor_consumoMinimo_menor2");
}*/
/// if (i){
// throw new ActionServletException(
// "atencao.faixa_limite_superior_existe");
// }
if(indice == 0){//isso significa que primeira ira analisar o consumo minimo em rela��o a faixa informada
//signifa que o valor a ser inserido esta entre o consumo minimo e a primeira faixa
if((consumoMin.intValue() > consumoMinimo.intValue())
&& (consumoTarifaFaixaAtual.getNumeroConsumoFaixaFim().intValue() > limiteSuperFaixa.intValue())){
entre = true;
consumoTarifaFaixa.setNumeroConsumoFaixaInicio(new Integer(consumoMinimo.intValue()+1));
consumoTarifaFaixa.setNumeroConsumoFaixaFim(limiteSuperFaixa);
consumoTarifaFaixa
.setValorConsumoTarifa(Util
.formatarMoedaRealparaBigDecimal(inserirCategoriaFaixaConsumoTarifaActionForm
.getValorM3Faixa()));
consumoTarifaFaixa.setUltimaAlteracao(new Date());
consumoTarifaFaixaAtual.setNumeroConsumoFaixaInicio(new Integer(limiteSuperFaixa+1));
//colecaoFaixa.add(consumoTarifaFaixa);
}
}else{
if((consumoTarifaFaixaAnteiror.getNumeroConsumoFaixaFim().intValue() < limiteSuperFaixa.intValue())
&& (consumoTarifaFaixaAtual.getNumeroConsumoFaixaFim().intValue() > limiteSuperFaixa.intValue())
){
entre = true;
consumoTarifaFaixa.setNumeroConsumoFaixaInicio(new Integer(consumoTarifaFaixaAnteiror.getNumeroConsumoFaixaFim().intValue()+1));
consumoTarifaFaixa.setNumeroConsumoFaixaFim(limiteSuperFaixa);
consumoTarifaFaixa
.setValorConsumoTarifa(Util
.formatarMoedaRealparaBigDecimal(inserirCategoriaFaixaConsumoTarifaActionForm
.getValorM3Faixa()));
consumoTarifaFaixa.setUltimaAlteracao(new Date());
consumoTarifaFaixaAtual.setNumeroConsumoFaixaInicio(new Integer(limiteSuperFaixa+1));
}
}
indice++;
consumoTarifaFaixaAnteiror = consumoTarifaFaixaAtual;
}
}
if (consumoMinimo.compareTo(new BigDecimal(
inserirCategoriaFaixaConsumoTarifaActionForm
.getLimiteSuperiorFaixa())) >= 0) {
throw new ActionServletException(
"atencao.valor_consumoMinimo_menor");
}
//coloca a faixa entre as faixas existente
if(!entre){
consumoTarifaFaixa.setNumeroConsumoFaixaInicio(new Integer(i + 1));
consumoTarifaFaixa.setNumeroConsumoFaixaFim(new Integer(
inserirCategoriaFaixaConsumoTarifaActionForm
.getLimiteSuperiorFaixa()));
consumoTarifaFaixa
.setValorConsumoTarifa(Util
.formatarMoedaRealparaBigDecimal(inserirCategoriaFaixaConsumoTarifaActionForm
.getValorM3Faixa()));
consumoTarifaFaixa.setUltimaAlteracao(new Date());
}
colecaoFaixa.add(consumoTarifaFaixa);
CategoriaFaixaConsumoTarifaHelper categoriaFaixaConsumoTarifaHelperAtualizacao = (CategoriaFaixaConsumoTarifaHelper) sessaoFaixa
.getAttribute("categoriaFaixaConsumoTarifaHelperAtualizacao");
// Organizar a cole��o
/*
* Collections.sort((List) colecaoFaixa, new Comparator() { public int
* compare(Object a, Object b) { Integer consumo1 =
* ((ConsumoTarifaFaixa) a) .getNumeroConsumoFaixaFim(); Integer
* consumo2 = ((ConsumoTarifaFaixa) b) .getNumeroConsumoFaixaFim();
*
* return consumo1.compareTo(consumo2);
* } });
*/
if (categoriaFaixaConsumoTarifaHelperAtualizacao != null) {
categoriaFaixaConsumoTarifaHelperAtualizacao
.setColecaoFaixas(colecaoFaixa);
}
List listColecaoFaixa = new ArrayList();
listColecaoFaixa.addAll(colecaoFaixa);
Collections.sort(listColecaoFaixa, new Comparator() {
public int compare(Object a, Object b) {
Integer codigo1 = ((ConsumoTarifaFaixa) a)
.getNumeroConsumoFaixaFim();
Integer codigo2 = ((ConsumoTarifaFaixa) b)
.getNumeroConsumoFaixaFim();
return codigo1.compareTo(codigo2);
}
});
sessaoFaixa.setAttribute("colecaoFaixa", listColecaoFaixa);
if (httpServletRequest.getParameter("limpaForm") != null){
inserirCategoriaFaixaConsumoTarifaActionForm.setLimiteSuperiorFaixa("");
inserirCategoriaFaixaConsumoTarifaActionForm.setValorM3Faixa("");
}
return retorno;
}
}