package gcom.gui.arrecadacao;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import gcom.cobranca.DocumentoTipo;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.DebitoACobrarValoresHelper;
import gcom.cobranca.bean.GuiaPagamentoValoresHelper;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Conta;
import gcom.faturamento.conta.ContaHistorico;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
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;
/**
* [UC1214] Informar Acerto Documentos N�o Aceitos
*
* @author Mariana Victor
* @date 23/08/2011
*/
public class SelecionarDebitosPagosPopupAction extends GcomAction {
/**
* < <Descri��o do m�todo>>
*
* @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) {
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
ActionForward retorno = actionMapping
.findForward("exibirSelecionarDebitosPagosPopup");
SelecionarDebitosPagosPopupActionForm form = (SelecionarDebitosPagosPopupActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
Conta contaEncontrada = null;
GuiaPagamentoValoresHelper guiaPagamentoEncontradaHelper = null;
DebitoACobrarValoresHelper debitoACobrarEncontradoHelper = null;
boolean contaHist = false;
sessao.removeAttribute("valorAdicionado");
// [FS0004] - Verificar preenchimento dos campos obrigat�rios
if (form.getIdTipoDocumento() == null
|| form.getIdTipoDocumento().trim().equals("")
|| form.getIdTipoDocumento().trim().equals("-1")) {
throw new ActionServletException("atencao.required",
"Tipo de Documento");
}
// [FS0011] - Verificar preenchimento dos campos necess�rios.
if (form.getIdTipoDocumento().trim().compareTo(DocumentoTipo.CONTA.toString()) == 0
&& (form.getReferenciaConta() == null
|| form.getReferenciaConta().trim().equals(""))) {
throw new ActionServletException("atencao.necessario_informar",
"Refer�ncia da Conta");
} else if (form.getIdTipoDocumento().trim().compareTo(DocumentoTipo.GUIA_PAGAMENTO.toString()) == 0
&& (form.getIdGuiaPagamento() == null
|| form.getIdGuiaPagamento().trim().equals(""))) {
throw new ActionServletException("atencao.necessario_informar",
"Guia de Pagamento");
} else if (form.getIdTipoDocumento().trim().compareTo(DocumentoTipo.DEBITO_A_COBRAR.toString()) == 0
&& (form.getIdDebitoACobrar() == null
|| form.getIdDebitoACobrar().trim().equals(""))) {
throw new ActionServletException("atencao.necessario_informar",
"D�bito a Cobrar");
}
// [FS0012] - Verificar exist�ncia do d�bito.
if (form.getIdTipoDocumento().trim().compareTo(DocumentoTipo.CONTA.toString()) == 0) {
// Recupera a conta do im�vel com a refer�ncia informada
contaEncontrada = fachada.pesquisarContaDigitada(
form.getIdImovel(), form.getReferenciaConta());
// Caso n�o exista o d�bito
if (contaEncontrada == null) {
ContaHistorico contaHistorico = fachada.pesquisarContaHistoricoDigitada(
form.getIdImovel(), form.getReferenciaConta());
if (contaHistorico == null) {
throw new ActionServletException("atencao.pesquisa_inexistente",
"Conta");
}
contaHist = true;
contaEncontrada = new Conta();
contaEncontrada.setId(contaHistorico.getId());
contaEncontrada.setReferencia(contaHistorico.getAnoMesReferenciaConta());
contaEncontrada.setDataVencimentoConta(contaHistorico.getDataVencimentoConta());
contaEncontrada.setDebitoCreditoSituacaoAtual(contaHistorico.getDebitoCreditoSituacaoAtual());
contaEncontrada.setValorAgua(contaHistorico.getValorAgua());
contaEncontrada.setValorEsgoto(contaHistorico.getValorEsgoto());
contaEncontrada.setValorCreditos(contaHistorico.getValorCreditos());
contaEncontrada.setDebitos(contaHistorico.getValorDebitos());
contaEncontrada.setValorImposto(contaHistorico.getValorImposto());
contaEncontrada.setLocalidade(contaHistorico.getLocalidade());
}
} else if (form.getIdTipoDocumento().trim().compareTo(DocumentoTipo.GUIA_PAGAMENTO.toString()) == 0) {
// Pesquisa a guia de pagamento para o im�vel informado
guiaPagamentoEncontradaHelper = fachada
.pesquisarGuiaPagamentoDigitada(form.getIdImovel(),
form.getIdGuiaPagamento());
// Caso n�o exista o d�bito
if (guiaPagamentoEncontradaHelper == null) {
throw new ActionServletException("atencao.pesquisa_inexistente",
"Guia de Pagamento");
}
} else if (form.getIdTipoDocumento().trim().compareTo(DocumentoTipo.DEBITO_A_COBRAR.toString()) == 0) {
// Pesquisa o d�bito a cobrar para o im�vel informado
debitoACobrarEncontradoHelper = fachada
.pesquisarDebitoACobrarImovelDigitado(form.getIdImovel(),
form.getIdDebitoACobrar());
// Caso n�o exista o d�bito
if (debitoACobrarEncontradoHelper == null) {
throw new ActionServletException("atencao.pesquisa_inexistente",
"D�bito a Cobrar");
}
}
// O sistema retorna para a tela principal para inserir na cole��o do tipo de d�bito
// pesquisado na cor vermelha e atribui o valor 1 (um) ao indicador de d�bito pago.
if (contaEncontrada != null) {
Collection<ContaValoresHelper> colecaoContaValores =
(Collection<ContaValoresHelper>)sessao.getAttribute("colecaoContaValores");
if (colecaoContaValores == null) {
colecaoContaValores = new ArrayList<ContaValoresHelper>();
}
if (!this.contaAdicionada(colecaoContaValores, contaEncontrada.getId())) {
ContaValoresHelper contaValoresHelper = new ContaValoresHelper();
contaValoresHelper.setConta(contaEncontrada);
if (contaHist) {
contaValoresHelper.setIndicadorDebitoPago(ConstantesSistema.SIM);
} else {
contaValoresHelper.setIndicadorDebitoPago(ConstantesSistema.NAO);
}
colecaoContaValores.add(contaValoresHelper);
String valorContaSessao = "0,00";
BigDecimal valorConta = BigDecimal.ZERO;
if (sessao.getAttribute("valorConta") != null
&& !sessao.getAttribute("valorConta").toString().trim().equals("")) {
valorContaSessao = (String) sessao.getAttribute("valorConta");
valorConta = Util.formatarMoedaRealparaBigDecimal(valorContaSessao);
valorConta = valorConta.add(contaEncontrada.getValorTotal());
}
sessao.setAttribute("colecaoContaValores", colecaoContaValores);
sessao.setAttribute("valorConta", Util.formatarMoedaReal(valorConta));
sessao.setAttribute("valorAdicionado", contaEncontrada.getValorTotal());
} else {
throw new ActionServletException("atencao.objeto_ja_informado",
"Conta");
}
} else if (guiaPagamentoEncontradaHelper != null
&& guiaPagamentoEncontradaHelper.getGuiaPagamento() != null) {
Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValores =
(Collection<GuiaPagamentoValoresHelper>)sessao.getAttribute("colecaoGuiaPagamentoValores");
if (colecaoGuiaPagamentoValores == null) {
colecaoGuiaPagamentoValores = new ArrayList<GuiaPagamentoValoresHelper>();
}
if (!this.guiaAdicionada(colecaoGuiaPagamentoValores, guiaPagamentoEncontradaHelper.getGuiaPagamento().getId())) {
GuiaPagamentoValoresHelper guiaPagamentoValoresHelper = new GuiaPagamentoValoresHelper();
guiaPagamentoValoresHelper.setGuiaPagamento(guiaPagamentoEncontradaHelper.getGuiaPagamento());
guiaPagamentoValoresHelper.setIndicadorDebitoPago(guiaPagamentoEncontradaHelper.getIndicadorDebitoPago());
colecaoGuiaPagamentoValores.add(guiaPagamentoValoresHelper);
String valorGuiaPagamentoSessao = "0,00";
BigDecimal valorGuiaPagamento = BigDecimal.ZERO;
if (sessao.getAttribute("valorGuiaPagamento") != null
&& !sessao.getAttribute("valorGuiaPagamento").toString().trim().equals("")) {
valorGuiaPagamentoSessao = (String) sessao.getAttribute("valorGuiaPagamento");
valorGuiaPagamento = Util.formatarMoedaRealparaBigDecimal(valorGuiaPagamentoSessao);
valorGuiaPagamento = valorGuiaPagamento.add(guiaPagamentoEncontradaHelper.getGuiaPagamento().getValorDebito());
}
sessao.setAttribute("colecaoGuiaPagamentoValores", colecaoGuiaPagamentoValores);
sessao.setAttribute("valorGuiaPagamento", Util.formatarMoedaReal(valorGuiaPagamento));
sessao.setAttribute("valorAdicionado", guiaPagamentoEncontradaHelper.getGuiaPagamento().getValorDebito());
} else {
throw new ActionServletException("atencao.objeto_ja_informado",
"Guia de Pagamento");
}
} else if (debitoACobrarEncontradoHelper != null
&& debitoACobrarEncontradoHelper.getDebitoACobrar() != null) {
Collection<DebitoACobrarValoresHelper> colecaoDebitoACobrar =
(Collection<DebitoACobrarValoresHelper>)sessao.getAttribute("colecaoDebitoACobrar");
if (colecaoDebitoACobrar == null) {
colecaoDebitoACobrar = new ArrayList<DebitoACobrarValoresHelper>();
}
if (!this.debitoACobrarAdicionado(colecaoDebitoACobrar, debitoACobrarEncontradoHelper.getDebitoACobrar().getId())) {
DebitoACobrarValoresHelper debitoACobrarValoresHelper = new DebitoACobrarValoresHelper();
debitoACobrarValoresHelper.setDebitoACobrar(debitoACobrarEncontradoHelper.getDebitoACobrar());
debitoACobrarValoresHelper.setIndicadorDebitoPago(debitoACobrarEncontradoHelper.getIndicadorDebitoPago());
colecaoDebitoACobrar.add(debitoACobrarValoresHelper);
String valorDebitoACobrarSessao = "0,00";
BigDecimal valorDebitoACobrar = BigDecimal.ZERO;
if (sessao.getAttribute("valorDebitoACobrar") != null
&& !sessao.getAttribute("valorDebitoACobrar").toString().trim().equals("")) {
valorDebitoACobrarSessao = (String) sessao.getAttribute("valorDebitoACobrar");
valorDebitoACobrar = Util.formatarMoedaRealparaBigDecimal(valorDebitoACobrarSessao);
valorDebitoACobrar = valorDebitoACobrar.add(debitoACobrarEncontradoHelper.getDebitoACobrar().getValorTotalComBonus());
}
sessao.setAttribute("colecaoDebitoACobrar", colecaoDebitoACobrar);
sessao.setAttribute("valorDebitoACobrar", Util.formatarMoedaReal(valorDebitoACobrar));
sessao.setAttribute("valorAdicionado", debitoACobrarEncontradoHelper.getDebitoACobrar().getValorTotalComBonus());
} else {
throw new ActionServletException("atencao.objeto_ja_informado",
"D�bito a Cobrar");
}
}
form.setIdImovel("");
form.setDescricaoImovel("");
form.setReferenciaConta("");
form.setDescricaoReferenciaConta("");
form.setIdGuiaPagamento("");
form.setDescricaoGuiaPagamento("");
form.setIdDebitoACobrar("");
form.setDescricaoDebitoACobrar("");
httpServletRequest.setAttribute("fecharPopup", "OK");
sessao.setAttribute("fecharPopup", "OK");
return retorno;
}
public boolean contaAdicionada(Collection<ContaValoresHelper> colecaoContaValores,
Integer idConta) {
boolean contaAdicionada = false;
if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) {
Iterator iterator = colecaoContaValores.iterator();
while(iterator.hasNext()) {
ContaValoresHelper helper = (ContaValoresHelper) iterator.next();
if(helper.getConta().getId().compareTo(idConta) == 0) {
contaAdicionada = true;
break;
}
}
}
return contaAdicionada;
}
public boolean guiaAdicionada(Collection<GuiaPagamentoValoresHelper> colecaoContaValores,
Integer idGuia) {
boolean guiaAdicionada = false;
if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) {
Iterator iterator = colecaoContaValores.iterator();
while(iterator.hasNext()) {
GuiaPagamentoValoresHelper helper = (GuiaPagamentoValoresHelper) iterator.next();
if(helper.getGuiaPagamento().getId().compareTo(idGuia) == 0) {
guiaAdicionada = true;
break;
}
}
}
return guiaAdicionada;
}
public boolean debitoACobrarAdicionado(Collection<DebitoACobrarValoresHelper> colecaoContaValores,
Integer idDebitoACobrar) {
boolean debitoACobrarAdicionado = false;
if (colecaoContaValores != null && !colecaoContaValores.isEmpty()) {
Iterator iterator = colecaoContaValores.iterator();
while(iterator.hasNext()) {
DebitoACobrarValoresHelper helper = (DebitoACobrarValoresHelper) iterator.next();
if(helper.getDebitoACobrar().getId().compareTo(idDebitoACobrar) == 0) {
debitoACobrarAdicionado = true;
break;
}
}
}
return debitoACobrarAdicionado;
}
}