package gcom.gui.cobranca;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.ClienteEndereco;
import gcom.cadastro.cliente.ClienteFone;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.cliente.FiltroClienteEndereco;
import gcom.cadastro.cliente.FiltroClienteFone;
import gcom.cadastro.cliente.IClienteFone;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.cobranca.bean.GuiaPagamentoValoresHelper;
import gcom.cobranca.bean.ObterDebitoImovelOuClienteHelper;
import gcom.fachada.Fachada;
import gcom.faturamento.credito.CreditoARealizar;
import gcom.faturamento.debito.DebitoACobrar;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
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;
/**
* Description of the Class
*
* @author Fernanda Paiva
* @created 12 de Janeiro de 2006
*/
public class ExibirConsultarDebitoClienteAction extends GcomAction {
/**
* Description of the Method
*
* @param actionMapping
* Description of the Parameter
* @param actionForm
* Description of the Parameter
* @param httpServletRequest
* Description of the Parameter
* @param httpServletResponse
* Description of the Parameter
* @return Description of the Return Value
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirDebitoCliente");
// Mudar isso quando tiver esquema de seguran�a
//HttpSession sessao = httpServletRequest.getSession(false);
ConsultarDebitoClienteActionForm consultarDebitoClienteActionForm = (ConsultarDebitoClienteActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
// Pega uma instancia da sessao
HttpSession sessao = httpServletRequest.getSession(false);
String codigoClienteSuperior = (String) consultarDebitoClienteActionForm
.getCodigoClienteSuperior();
String codigoCliente = (String) consultarDebitoClienteActionForm
.getCodigoCliente();
Short tipoRelacao = null;
if (codigoCliente != null && !codigoCliente.trim().equals("")) {
if (consultarDebitoClienteActionForm.getTipoRelacao() != null
&& !consultarDebitoClienteActionForm.getTipoRelacao()
.trim().equals("-1")) {
tipoRelacao = new Short(consultarDebitoClienteActionForm
.getTipoRelacao());
}
sessao.setAttribute("tipoPesquisa", "cliente");
} else {
sessao.setAttribute("tipoPesquisa", "clienteSuperior");
}
String referenciaInicial;
String referenciaFinal;
String dataVencimentoInicial;
String dataVencimentoFinal;
// seta os dados das datas digitadas ou informa datas padr�o
// no caso de n�o ter sido digitado nenhum dado para esses campos
if(consultarDebitoClienteActionForm.getReferenciaInicial() != null && !consultarDebitoClienteActionForm.getReferenciaInicial().equals(""))
{
referenciaInicial = consultarDebitoClienteActionForm.getReferenciaInicial();
}
else
{
referenciaInicial = "01/0001";
}
if(consultarDebitoClienteActionForm.getReferenciaFinal() != null && !consultarDebitoClienteActionForm.getReferenciaFinal().equals("") )
{
referenciaFinal = consultarDebitoClienteActionForm.getReferenciaFinal();
}
else
{
referenciaFinal = "12/9999";
}
if(consultarDebitoClienteActionForm.getDataVencimentoInicial() != null && !consultarDebitoClienteActionForm.getDataVencimentoInicial().equals(""))
{
dataVencimentoInicial = consultarDebitoClienteActionForm.getDataVencimentoInicial();
}
else
{
dataVencimentoInicial = "01/01/0001";
}
if(consultarDebitoClienteActionForm.getDataVencimentoFinal() != null && !consultarDebitoClienteActionForm.getDataVencimentoFinal().equals(""))
{
dataVencimentoFinal = consultarDebitoClienteActionForm.getDataVencimentoFinal();
}
else
{
dataVencimentoFinal = "31/12/9999";
}
// Para auxiliar na formata��o de uma data
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
String mesInicial = referenciaInicial.substring(0,2);
String anoInicial = referenciaInicial.substring(3,referenciaInicial.length());
String anoMesInicial = anoInicial+mesInicial;
String mesFinal = referenciaFinal.substring(0,2);
String anoFinal = referenciaFinal.substring(3,referenciaFinal.length());
String anoMesFinal = anoFinal+mesFinal;
Date dataVencimentoDebitoI;
Date dataVencimentoDebitoF;
try {
dataVencimentoDebitoI = formatoData.parse(dataVencimentoInicial);
} catch (ParseException ex) {
dataVencimentoDebitoI = null;
}
try {
dataVencimentoDebitoF = formatoData.parse(dataVencimentoFinal);
} catch (ParseException ex) {
dataVencimentoDebitoF = null;
}
Integer tipoCliente = null;
if(tipoRelacao == null || tipoRelacao.equals(ClienteRelacaoTipo.RESPONSAVEL)){
if(consultarDebitoClienteActionForm.getResponsavel()!= null && consultarDebitoClienteActionForm.getResponsavel().equals("1")){
tipoCliente = new Integer(3);
}else if(consultarDebitoClienteActionForm.getResponsavel()!= null && consultarDebitoClienteActionForm.getResponsavel().equals("2")){
tipoCliente = new Integer(4);
}else{
tipoCliente = new Integer(2);
}
}else{
tipoCliente = new Integer(2);
}
// Se a pesquisa foi pelo cliente superior seta o valor 99 no tipo da
// rela��o para identificar posteriormente este tipo de pesquisa (o
// c�digo 99 � apenas um identificador)
//Comentado por Reinaldo
if ((codigoClienteSuperior != null
&& !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
tipoRelacao = new Short("99");
}
// seta valores constantes para chamar o metodo que consulta debitos do imovel
//Integer tipoCliente = new Integer(2);
Integer indicadorPagamento = new Integer(1);
Integer indicadorConta = new Integer(1);
Integer indicadorDebito = new Integer(1);
Integer indicadorCredito = new Integer(1);
Integer indicadorNotas = new Integer(1);
Integer indicadorGuias = new Integer(1);
Integer indicadorAtualizar = new Integer(1);
// Obtendo dados do cliente
if ((codigoCliente != null && !codigoCliente.trim().equals("") && Integer
.parseInt(codigoCliente) > 0)
|| (codigoClienteSuperior != null
&& !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
FiltroCliente filtroCliente = new FiltroCliente();
if ((codigoClienteSuperior != null && !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID, codigoClienteSuperior));
} else {
filtroCliente.adicionarParametro(new ParametroSimples(FiltroCliente.ID, codigoCliente));
}
filtroCliente.adicionarCaminhoParaCarregamentoEntidade("clienteTipo");
filtroCliente.adicionarCaminhoParaCarregamentoEntidade("profissao");
filtroCliente.adicionarCaminhoParaCarregamentoEntidade("ramoAtividade");
Collection colecaoClientes = fachada.pesquisar(filtroCliente, Cliente.class.getName());
if(!colecaoClientes .isEmpty()){
Cliente cliente = (Cliente) colecaoClientes.iterator().next();
if (cliente.getId() != null) {
if ((codigoClienteSuperior != null
&& !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
consultarDebitoClienteActionForm
.setCodigoClienteSuperior("" + cliente.getId());
consultarDebitoClienteActionForm.setCodigoCliente(null);
} else {
consultarDebitoClienteActionForm.setCodigoCliente(""
+ cliente.getId());
}
}
if (cliente.getNome() != null) {
if ((codigoClienteSuperior != null
&& !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
consultarDebitoClienteActionForm
.setNomeClienteSuperior("" + cliente.getNome());
consultarDebitoClienteActionForm.setNomeCliente(null);
} else {
consultarDebitoClienteActionForm.setNomeCliente(""
+ cliente.getNome());
}
}
consultarDebitoClienteActionForm.setCpfCnpj("");
if (cliente.getClienteTipo().getIndicadorPessoaFisicaJuridica() == 1 ){
if (cliente.getCpfFormatado() != null)
{
consultarDebitoClienteActionForm.setCpfCnpj(""
+ cliente.getCpfFormatado());
}
}
else
{
if (cliente.getCnpjFormatado() != null)
{
consultarDebitoClienteActionForm.setCpfCnpj(""
+ cliente.getCnpjFormatado());
}
}
if (cliente.getProfissao() != null)
{
consultarDebitoClienteActionForm.setProfissao(""
+ cliente.getProfissao().getDescricao());
}
if (cliente.getRamoAtividade() != null)
{
consultarDebitoClienteActionForm.setRamoAtividade(""
+ cliente.getRamoAtividade().getDescricao());
}
if (cliente.getClienteTipo() != null)
{
consultarDebitoClienteActionForm.setTipoRelacao(""
+ cliente.getClienteTipo().getDescricao());
}else{
consultarDebitoClienteActionForm.setTipoRelacao("");
tipoRelacao = null;
}
}
FiltroClienteEndereco filtroClienteEndereco = new FiltroClienteEndereco();
if ((codigoClienteSuperior != null && !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
filtroClienteEndereco.adicionarParametro(new ParametroSimples(
FiltroClienteEndereco.CLIENTE_ID, codigoClienteSuperior));
} else {
filtroClienteEndereco.adicionarParametro(new ParametroSimples(
FiltroClienteEndereco.CLIENTE_ID, codigoCliente));
}
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTipo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTitulo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("enderecoReferencia");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroBairro.bairro.municipio.unidadeFederacao");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.cep");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroInicial.logradouroTipo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroInicial.logradouroTitulo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroFinal.logradouroTipo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("perimetroFinal.logradouroTitulo");
filtroClienteEndereco.adicionarCaminhoParaCarregamentoEntidade("enderecoTipo");
Collection colecaoEnderecoCliente = fachada.pesquisar(
filtroClienteEndereco, ClienteEndereco.class.getName());
if (colecaoEnderecoCliente != null
&& !colecaoEnderecoCliente.isEmpty()) {
ClienteEndereco clienteEndereco = (ClienteEndereco) ((List) colecaoEnderecoCliente).get(0);
// Seta os dados do cliente encontrado no formulario
consultarDebitoClienteActionForm.setEnderecoCliente(""
+ clienteEndereco.getEnderecoFormatado());
}
FiltroClienteFone filtroClienteFone = new FiltroClienteFone();
if ((codigoClienteSuperior != null && !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
filtroClienteFone.adicionarParametro(new ParametroSimples(
FiltroClienteFone.CLIENTE_ID, codigoClienteSuperior));
} else {
filtroClienteFone.adicionarParametro(new ParametroSimples(
FiltroClienteFone.CLIENTE_ID, codigoCliente));
}
Collection colecaoClienteFone = fachada.pesquisar(
filtroClienteFone, ClienteFone.class.getName());
if (colecaoClienteFone != null
&& !colecaoClienteFone.isEmpty()) {
// O telefone foi encontrado
consultarDebitoClienteActionForm.setClienteFone(""
+ ((IClienteFone) ((List) colecaoClienteFone)
.get(0)).getTelefone());
}
}
// Obtendo os d�bitos do cliente
ObterDebitoImovelOuClienteHelper colecaoDebitoCliente = null;
if ((codigoClienteSuperior != null
&& !codigoClienteSuperior.trim().equals("") && Integer
.parseInt(codigoClienteSuperior) > 0)) {
colecaoDebitoCliente = fachada.obterDebitoImovelOuCliente(
tipoCliente.intValue(), null, codigoClienteSuperior, tipoRelacao,
anoMesInicial, anoMesFinal, dataVencimentoDebitoI,
dataVencimentoDebitoF, indicadorPagamento.intValue(),
indicadorConta.intValue(), indicadorDebito.intValue(),
indicadorCredito.intValue(), indicadorNotas.intValue(),
indicadorGuias.intValue(), indicadorAtualizar.intValue(),
null);
} else {
colecaoDebitoCliente = fachada.obterDebitoImovelOuCliente(
tipoCliente.intValue(), null, codigoCliente, tipoRelacao,
anoMesInicial, anoMesFinal, dataVencimentoDebitoI,
dataVencimentoDebitoF, indicadorPagamento.intValue(),
indicadorConta.intValue(), indicadorDebito.intValue(),
indicadorCredito.intValue(), indicadorNotas.intValue(),
indicadorGuias.intValue(), indicadorAtualizar.intValue(),
null);
}
Collection<ContaValoresHelper> colecaoContaValores = colecaoDebitoCliente
.getColecaoContasValores();
ContaValoresHelper dadosConta = null;
BigDecimal valorConta = new BigDecimal("0.00");
BigDecimal valorAcrescimo = new BigDecimal("0.00");
BigDecimal valorAgua = new BigDecimal("0.00");
BigDecimal valorEsgoto = new BigDecimal("0.00");
BigDecimal valorDebito = new BigDecimal("0.00");
BigDecimal valorCredito = new BigDecimal("0.00");
BigDecimal valorImposto = new BigDecimal("0.00");
if(colecaoContaValores != null && !colecaoContaValores.isEmpty()){
java.util.Iterator <ContaValoresHelper> colecaoContaValoresIterator = colecaoContaValores.iterator();
// percorre a colecao de conta somando o valor para obter um valor total
while (colecaoContaValoresIterator.hasNext()) {
dadosConta = (ContaValoresHelper) colecaoContaValoresIterator.next();
valorConta = valorConta.add(dadosConta.getConta().getValorTotal());
valorAcrescimo = valorAcrescimo.add(dadosConta.getValorTotalContaValores());
valorAgua = valorAgua.add(dadosConta.getConta().getValorAgua());
valorEsgoto = valorEsgoto.add(dadosConta.getConta().getValorEsgoto());
valorDebito = valorDebito.add(dadosConta.getConta().getDebitos());
valorCredito = valorCredito.add(dadosConta.getConta().getValorCreditos());
valorImposto = valorImposto.add(dadosConta.getConta().getValorImposto());
}
}
Collection<DebitoACobrar> colecaoDebitoACobrar = colecaoDebitoCliente
.getColecaoDebitoACobrar();
BigDecimal valorDebitoACobrar = new BigDecimal("0.00");
DebitoACobrar dadosDebito = null;
if(colecaoDebitoACobrar != null && !colecaoDebitoACobrar.isEmpty()){
java.util.Iterator <DebitoACobrar> colecaoDebitoACobrarIterator = colecaoDebitoACobrar.iterator();
// percorre a colecao de debito a cobrar somando o valor para obter um valor total
while (colecaoDebitoACobrarIterator.hasNext()) {
dadosDebito = (DebitoACobrar) colecaoDebitoACobrarIterator.next();
valorDebitoACobrar = valorDebitoACobrar.add(dadosDebito.getValorTotalComBonus());
}
}
Collection<CreditoARealizar> colecaoCreditoARealizar = colecaoDebitoCliente
.getColecaoCreditoARealizar();
BigDecimal valorCreditoARealizar = new BigDecimal("0.00");
CreditoARealizar dadosCredito = null;
if(colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty()){
java.util.Iterator <CreditoARealizar> colecaoCreditoARealizarIterator = colecaoCreditoARealizar.iterator();
// percorre a colecao de credito a realizar somando o valor para obter um valor total
while (colecaoCreditoARealizarIterator.hasNext()) {
dadosCredito = (CreditoARealizar) colecaoCreditoARealizarIterator.next();
valorCreditoARealizar = valorCreditoARealizar.add(dadosCredito.getValorTotalComBonus());
}
}
Collection<GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValores = colecaoDebitoCliente
.getColecaoGuiasPagamentoValores();
BigDecimal valorGuiaPagamento = new BigDecimal("0.00");
GuiaPagamentoValoresHelper dadosGuiaPagamentoValoresHelper = null;
if(colecaoGuiaPagamentoValores != null && !colecaoGuiaPagamentoValores.isEmpty()){
java.util.Iterator <GuiaPagamentoValoresHelper> colecaoGuiaPagamentoValoresHelperIterator = colecaoGuiaPagamentoValores.iterator();
// percorre a colecao de guia de pagamento somando o valor para obter um valor total
while (colecaoGuiaPagamentoValoresHelperIterator.hasNext()) {
dadosGuiaPagamentoValoresHelper = (GuiaPagamentoValoresHelper) colecaoGuiaPagamentoValoresHelperIterator.next();
valorGuiaPagamento = valorGuiaPagamento.add(dadosGuiaPagamentoValoresHelper.getGuiaPagamento().getValorDebito());
}
}
if ((colecaoContaValores == null) &&
(colecaoDebitoACobrar == null || colecaoDebitoACobrar.isEmpty()) &&
(colecaoCreditoARealizar == null || colecaoCreditoARealizar.isEmpty()) &&
(colecaoGuiaPagamentoValores == null)) {
throw new ActionServletException("atencao.pesquisa.nenhumresultado");
}
else
{
// Manda a colecao e os valores total de conta pelo request
sessao.setAttribute("colecaoContaValores",colecaoContaValores);
sessao.setAttribute("valorConta",Util.formatarMoedaReal(valorConta));
sessao.setAttribute("valorAcrescimo",Util.formatarMoedaReal(valorAcrescimo));
sessao.setAttribute("valorAgua",Util.formatarMoedaReal(valorAgua));
sessao.setAttribute("valorEsgoto",Util.formatarMoedaReal(valorEsgoto));
sessao.setAttribute("valorDebito",Util.formatarMoedaReal(valorDebito));
sessao.setAttribute("valorCredito",Util.formatarMoedaReal(valorCredito));
sessao.setAttribute("valorImposto",Util.formatarMoedaReal(valorImposto));
sessao.setAttribute("valorContaAcrescimo",Util.formatarMoedaReal(valorConta.add(valorAcrescimo)));
// Manda a colecao e o valor total de DebitoACobrar pelo request
sessao.setAttribute("colecaoDebitoACobrar",colecaoDebitoACobrar);
sessao.setAttribute("valorDebitoACobrar",Util.formatarMoedaReal(valorDebitoACobrar));
// Manda a colecao e o valor total de CreditoARealizar pelo request
sessao.setAttribute("colecaoCreditoARealizar",colecaoCreditoARealizar);
sessao.setAttribute("valorCreditoARealizar",Util.formatarMoedaReal(valorCreditoARealizar));
// Manda a colecao e o valor total de GuiaPagamento pelo request
sessao.setAttribute("colecaoGuiaPagamentoValores",colecaoGuiaPagamentoValores);
sessao.setAttribute("valorGuiaPagamento",Util.formatarMoedaReal(valorGuiaPagamento));
// Soma o valor total dos debitos e subtrai dos creditos
BigDecimal valorTotalSemAcrescimo = valorConta.add(valorDebitoACobrar);
valorTotalSemAcrescimo = valorTotalSemAcrescimo.add(valorGuiaPagamento);
valorTotalSemAcrescimo = valorTotalSemAcrescimo.subtract(valorCreditoARealizar);
BigDecimal valorTotalComAcrescimo = valorTotalSemAcrescimo.add(valorAcrescimo);
sessao.setAttribute("valorTotalSemAcrescimo",Util.formatarMoedaReal(valorTotalSemAcrescimo));
sessao.setAttribute("valorTotalComAcrescimo",Util.formatarMoedaReal(valorTotalComAcrescimo));
// Manda a colecao pelo request
sessao.setAttribute("colecaoDebitoCliente",colecaoDebitoCliente);
}
return retorno;
}
}