package gcom.gui.faturamento;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Fatura;
import gcom.faturamento.conta.FaturaItem;
import gcom.faturamento.conta.FiltroFaturaItem;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.Util;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
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;
/**
* @author Fl�vio Leonardo
* @date 26/11/2008
*/
public class ExibirAtualizarFaturaClienteResponsavelAction extends GcomAction {
/**
* M�todo responsavel por responder a requisicao
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o caminho de retorno
ActionForward retorno = actionMapping
.findForward("atualizarFaturaClienteResponsavel");
FiltrarFaturaClienteResponsavelActionForm form = (FiltrarFaturaClienteResponsavelActionForm) actionForm;
// Cria uma inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
// Mudar quando houver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
FiltroFaturaItem filtroFaturaItem = (FiltroFaturaItem) sessao
.getAttribute("filtroFaturaItem");
Collection<FaturaItem> colecaoFaturaItem = null;
if(sessao.getAttribute("colecaoFaturaItem") == null){
colecaoFaturaItem = fachada.pesquisar(filtroFaturaItem, FaturaItem.class.getName());
}else{
colecaoFaturaItem = (Collection)sessao.getAttribute("colecaoFaturaItem");
}
if(colecaoFaturaItem.isEmpty()){
throw new ActionServletException("atencao.pesquisa.nenhumresultado");
}else{
sessao.setAttribute("colecaoFaturaItem", colecaoFaturaItem);
FaturaItem faturaItem = (FaturaItem)colecaoFaturaItem.iterator().next();
Fatura fatura = faturaItem.getFatura();
sessao.setAttribute("fatura", fatura);
form.setValorFatura(Util.formatarMoedaReal(fatura.getDebito()));
form.setDataVencimentoFatura(Util.formatarData(fatura.getVencimento()));
}
String[] faturaItemRemoverId = form.getIdRegistrosRemocao();
Collection colecaoFaturaItemRemover = null;
if(sessao.getAttribute("colecaoFaturaItemRemover") != null){
colecaoFaturaItemRemover = (Collection)sessao.getAttribute("colecaoFaturaItemRemover");
}else{
colecaoFaturaItemRemover = new ArrayList();
}
if(faturaItemRemoverId != null && !faturaItemRemoverId.equals("")){
for(int i=0; i< faturaItemRemoverId.length; i++){
Iterator iterator = colecaoFaturaItem.iterator();
while(iterator.hasNext()){
FaturaItem faturaItemRemover = (FaturaItem) iterator.next();
if(faturaItemRemover.getImovel().getId() != null &&
faturaItemRemover.getImovel().getId().equals(new Integer(faturaItemRemoverId[i]))){
colecaoFaturaItemRemover.add(faturaItemRemover);
iterator.remove();
break;
}
}
}
sessao.setAttribute("colecaoFaturaItemRemover",colecaoFaturaItemRemover);
}
if(!colecaoFaturaItemRemover.isEmpty()){
Iterator iteratorRemovidos = colecaoFaturaItemRemover.iterator();
while(iteratorRemovidos.hasNext()){
FaturaItem faturaItemRemovido = (FaturaItem)iteratorRemovidos.next();
Iterator iterator = colecaoFaturaItem.iterator();
while(iterator.hasNext()){
FaturaItem faturaItemRemover = (FaturaItem) iterator.next();
if(faturaItemRemover.getImovel().getId() != null && faturaItemRemovido.getImovel().getId() != null
&& faturaItemRemover.getImovel().getId().equals(faturaItemRemovido.getImovel().getId())){
iterator.remove();
break;
}
}
}
}
if(colecaoFaturaItem.isEmpty()){
throw new ActionServletException("atencao.fatura.cliente.responsavel.conter.uma");
}else{
Iterator iteratorSoma = colecaoFaturaItem.iterator();
BigDecimal valorTotal = BigDecimal.ZERO;
while(iteratorSoma.hasNext()){
FaturaItem faturaItemSoma = (FaturaItem) iteratorSoma.next();
valorTotal = valorTotal.add(faturaItemSoma.getValorConta());
form.setValorFatura(Util.formatarMoedaReal(valorTotal));
}
}
return retorno;
}
}