package gcom.gui.atendimentopublico;
import gcom.arrecadacao.pagamento.Pagamento;
import gcom.atendimentopublico.registroatendimento.AtendimentoMotivoEncerramento;
import gcom.atendimentopublico.registroatendimento.AtendimentoRelacaoTipo;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoUnidade;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cobranca.bean.ContaValoresHelper;
import gcom.fachada.Fachada;
import gcom.faturamento.bean.CreditosHelper;
import gcom.faturamento.conta.Conta;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
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 Vivianne Sousa
* @created 18/03/2011
*/
public class TransferirDevolucaoValoresPagosDuplicidadeAction extends GcomAction {
/**
* [UC1131] Efetuar Devolu��o de Valores Pagos em Duplicidade
*
* @author Vivianne Sousa
* @date 18/03/2011
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("telaSucesso");
FiltrarRegistroAtendimentoDevolucaoValoresActionForm form = (FiltrarRegistroAtendimentoDevolucaoValoresActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
Collection colecaoContaASerRetificada = (Collection) sessao.getAttribute("colecaoContaASerRetificada");
Collection colecaoCreditoASerTransferido = (Collection) sessao.getAttribute("colecaoCreditoASerTransferido");
Collection colecaoCreditoARealizar = (Collection) sessao.getAttribute("colecaoCreditoARealizar");
Collection colecaoPagamento = (Collection) sessao.getAttribute("colecaoPagamentosSelecionados");
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
String confirmado = httpServletRequest.getParameter("confirmado");
if (confirmado == null || (!confirmado.trim().equalsIgnoreCase("ok") && !confirmado.trim().equalsIgnoreCase("cancelar"))) {
RegistroAtendimento ra = new RegistroAtendimento();
ra.setId(new Integer(form.getIdRAConsulta()));
Integer idImovel = new Integer(form.getIdImovelSelecionado());
Collection colecaoContas = fachada.transferirDevolucaoValoresPagosDuplicidade(
colecaoContaASerRetificada, colecaoCreditoARealizar, colecaoCreditoASerTransferido,
colecaoPagamento, sistemaParametro, usuarioLogado, ra, idImovel);
sessao.setAttribute("idsContaEP",colecaoContas);
// if(colecaoContaASerRetificada != null && !colecaoContaASerRetificada.isEmpty()){
//
// Iterator iterContaASerRetificada = colecaoContaASerRetificada.iterator();
//
// while (iterContaASerRetificada.hasNext()) {
// ContaValoresHelper helper = (ContaValoresHelper) iterContaASerRetificada.next();
// Conta conta = helper.getConta();
// Collection colecaoCreditoRealizadoInserir = new ArrayList();
//
// Iterator iterCreditoASerTransferido = colecaoCreditoASerTransferido.iterator();
// while (iterCreditoASerTransferido.hasNext()) {
// CreditosHelper creditosHelper = (CreditosHelper) iterCreditoASerTransferido.next();
// if(creditosHelper.getIdContaCreditorealizado().equals(conta.getId())){
// colecaoCreditoRealizadoInserir.add(creditosHelper);
// }
// }
// retificarConta(conta, sistemaParametro,usuarioLogado, colecaoCreditoRealizadoInserir,sessao);
// }
//
// }
//
// RegistroAtendimento ra = new RegistroAtendimento();
// ra.setId(new Integer(form.getIdRAConsulta()));
//
// Integer idImovel = new Integer(form.getIdImovelSelecionado());
//
// if(colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty()){
//
// Iterator iterCreditoARealizar = colecaoCreditoARealizar.iterator();
// while (iterCreditoARealizar.hasNext()) {
// CreditosHelper helper = (CreditosHelper) iterCreditoARealizar.next();
//
// inserirCreditoARealizar(idImovel, helper, usuarioLogado,sistemaParametro,ra);
// }
//
// }
//
// atualizarPagamento(colecaoPagamento,sistemaParametro,ra.getId());
httpServletRequest.setAttribute("caminhoActionConclusao","/gsan/transferirDevolucaoValoresPagosDuplicidadeAction.do");
httpServletRequest.setAttribute("cancelamento", "TRUE");
httpServletRequest.setAttribute("nomeBotao1", "Sim");
httpServletRequest.setAttribute("nomeBotao2", "N�o");
sessao.setAttribute("confirmacao" , "sim");
// Monta a p�gina de confirma��o para perguntar se o
// usu�rio quer encerrar o RA
return montarPaginaConfirmacao("atencao.enecrramento.ra.confirma",
httpServletRequest, actionMapping, null);
}else if(confirmado.equals("ok")){
//Se entrou aqui, � porque o usuario clicou em Sim, para o encerramento do Registro de Atendimento,
//dessa forma, esse c�digo, trata todas as quest�es pertinentes
//ao encerramento do registro e por fim, encerra o RA
//Pega o registro de atendimento
RegistroAtendimento ra = new RegistroAtendimento();
ra.setId(new Integer(form.getIdRAConsulta()));
AtendimentoMotivoEncerramento atendimentoMotivoEncerramento = new AtendimentoMotivoEncerramento();
atendimentoMotivoEncerramento.setId(AtendimentoMotivoEncerramento.CONCLUSAO_SERVICO);
atendimentoMotivoEncerramento.setIndicadorExecucao(AtendimentoMotivoEncerramento.INDICADOR_EXECUCAO_SIM);
ra.setAtendimentoMotivoEncerramento(atendimentoMotivoEncerramento);
ra.setCodigoSituacao(RegistroAtendimento.SITUACAO_ENCERRADO);
ra.setDataEncerramento(new Date());
ra.setParecerEncerramento(obterParecerEncerramento(colecaoPagamento,
colecaoCreditoASerTransferido,colecaoCreditoARealizar,colecaoContaASerRetificada));
ra.setUltimaAlteracao(new Date());
//cria o objeto para a inser��o do registro de atendimento unidade
RegistroAtendimentoUnidade registroAtendimentoUnidade = new RegistroAtendimentoUnidade();
registroAtendimentoUnidade.setRegistroAtendimento(ra);
if (usuarioLogado.getUnidadeOrganizacional() != null &&
!usuarioLogado.getUnidadeOrganizacional().equals("")) {
registroAtendimentoUnidade.setUnidadeOrganizacional(
usuarioLogado.getUnidadeOrganizacional());
}
registroAtendimentoUnidade.setUsuario(usuarioLogado);
registroAtendimentoUnidade.setUltimaAlteracao(new Date());
AtendimentoRelacaoTipo atendimentoRelacaoTipo = new AtendimentoRelacaoTipo();
atendimentoRelacaoTipo.setId(AtendimentoRelacaoTipo.ENCERRAR);
registroAtendimentoUnidade.setAtendimentoRelacaoTipo(atendimentoRelacaoTipo);
//booleano false para n�o gerar um novo RA
Boolean confirmadoGeracaoNovoRA = false;
//encerra o RA
fachada.encerrarRegistroAtendimento(
ra,
registroAtendimentoUnidade,
usuarioLogado,
null,
null,
null,
null,
confirmadoGeracaoNovoRA,null,false);
}
String msgSucesso = "";
if(colecaoContaASerRetificada != null && !colecaoContaASerRetificada.isEmpty()){
if(colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty()){
msgSucesso = "Pagamento(s) duplicado(s) transferido(s) e cr�dito a realizar gerado com sucesso";
}else{
msgSucesso = "Pagamento(s) duplicado(s) transferido(s) com sucesso";
}
}else if(colecaoCreditoARealizar != null && !colecaoCreditoARealizar.isEmpty()){
msgSucesso = "Cr�dito a realizar gerado com sucesso";
}
montarPaginaSucesso(httpServletRequest, msgSucesso,
"Imprimir Contas Retificadas" ,"gerarRelatorio2ViaContaAction.do?cobrarTaxaEmissaoConta=N",
"exibirFiltrarRegistroAtendimentoDevolucaoValoresAction.do?menu=s", "Fazer outra transfer�ncia de pagamento.");
return retorno;
}
//[SB0005] � Formatar dados para Retifica��o da Conta.
// private void retificarConta(Conta conta, SistemaParametro sistemaParametro,
// Usuario usuarioLogado,Collection colecaoCreditoRealizadoInserir,HttpSession sessao){
//
// Collection colecaoCategoriaOUSubcategoria = null;
//
// if (sistemaParametro.getIndicadorTarifaCategoria().equals(SistemaParametro.INDICADOR_TARIFA_SUBCATEGORIA)) {
//
// colecaoCategoriaOUSubcategoria = Fachada.getInstancia()
// .obterQuantidadeEconomiasContaCategoriaPorSubcategoria(conta);
//
// } else {
//
// colecaoCategoriaOUSubcategoria = Fachada.getInstancia()
// .obterQuantidadeEconomiasContaCategoria(conta);
//
// }
//
// Collection colecaoCreditoRealizado = Fachada.getInstancia().obterCreditosRealizadosConta(conta);
// colecaoCreditoRealizado = adicionarCreditoRealizado(colecaoCreditoRealizado ,colecaoCreditoRealizadoInserir) ;
//
// Collection colecaoDebitoCobrado = Fachada.getInstancia().obterDebitosCobradosConta(conta);
//
// Conta contaParaRetificacao = Fachada.getInstancia().pesquisarContaRetificacao(conta.getId());
//
// //[UC0120] - Calcular Valores de �gua e/ou Esgoto
// Collection<CalcularValoresAguaEsgotoHelper> valoresConta =
// Fachada.getInstancia().calcularValoresConta(
// Util.formatarAnoMesParaMesAno(conta.getReferencia()),
// contaParaRetificacao.getImovel().getId().toString(),
// contaParaRetificacao.getLigacaoAguaSituacao().getId(),
// contaParaRetificacao.getLigacaoEsgotoSituacao().getId(),
// colecaoCategoriaOUSubcategoria,
// contaParaRetificacao.getConsumoAgua().toString(),
// contaParaRetificacao.getConsumoEsgoto().toString(),
// contaParaRetificacao.getPercentualEsgoto().toString(),
// contaParaRetificacao.getConsumoTarifa().getId(), usuarioLogado);
//
// //[UC0150] - Retificar Conta
//
// ContaMotivoRetificacao contaMotivoRetificacao = new ContaMotivoRetificacao();
// contaMotivoRetificacao.setId(ContaMotivoRetificacao.DEVOLUCAO_CREDITADA_EM_CONTA);
//
// Integer idConta = Fachada.getInstancia().retificarConta(
// contaParaRetificacao.getReferencia(),
// contaParaRetificacao,
// contaParaRetificacao.getImovel(),
// colecaoDebitoCobrado,
// colecaoCreditoRealizado,
// contaParaRetificacao.getLigacaoAguaSituacao(),
// contaParaRetificacao.getLigacaoEsgotoSituacao(),
// colecaoCategoriaOUSubcategoria,
// contaParaRetificacao.getConsumoAgua().toString(),
// contaParaRetificacao.getConsumoEsgoto().toString(),
// contaParaRetificacao.getPercentualEsgoto().toString(),
// contaParaRetificacao.getDataVencimentoConta(),
// valoresConta,
// contaMotivoRetificacao,
// null,
// usuarioLogado,
// contaParaRetificacao.getConsumoTarifa().getId().toString(),
// false,null,null,false, null,null,null,null,null);
//
// Collection colecaoContas = null;
// if(sessao.getAttribute("idsContaEP") != null){
// colecaoContas = (Collection)sessao.getAttribute("idsContaEP");
// }else{
// colecaoContas = new ArrayList();
// }
// colecaoContas.add(idConta);
// sessao.setAttribute("idsContaEP",colecaoContas);
// }
//
// private void inserirCreditoARealizar(Integer idImovel, CreditosHelper helper, Usuario usuarioLogado,
// SistemaParametro sistemaParametro, RegistroAtendimento ra) {
//
// CreditoARealizar creditoARealizar = new CreditoARealizar();
//
// Imovel imovel = Fachada.getInstancia().pesquisarImovelDigitado(idImovel);
// creditoARealizar.setImovel(imovel);
//
// creditoARealizar.setValorCredito(helper.getValorCredito());
//
// creditoARealizar.setAnoMesReferenciaCredito(helper.getReferenciaCredito());
//
// creditoARealizar.setRegistroAtendimento(ra);
//
// // Cr�dito Tipo
// creditoARealizar.setCreditoTipo(helper.getTipoCreditoID());
//
// // Cr�dito Origem
// creditoARealizar.setCreditoOrigem(helper.getOrigemCreditoID());
//
// LancamentoItemContabil lict = new LancamentoItemContabil();
// lict.setId(LancamentoItemContabil.OUTROS_SERVICOS_AGUA);
// creditoARealizar.setLancamentoItemContabil(lict);
//
// creditoARealizar.setUsuario(usuarioLogado);
//
//
// // [FS0011] - Validar Refer�ncia do Cr�dito
//// FiltroCreditoARealizar filtroCreditoARealizar = new FiltroCreditoARealizar();
//// filtroCreditoARealizar.adicionarParametro(new ParametroSimples(
//// FiltroCreditoARealizar.ANO_MES_REFERENCIA_CREDITO,creditoARealizar.getAnoMesReferenciaCredito()));
//// filtroCreditoARealizar.adicionarParametro(new ParametroSimples(
//// FiltroCreditoARealizar.ID_CREDITO_ORIGEM, creditoARealizar.getCreditoOrigem().getId()));
//// filtroCreditoARealizar.adicionarParametro(new ParametroSimples(
//// FiltroCreditoARealizar.ID_CREDITO_TIPO, creditoARealizar.getCreditoTipo().getId()));
//// filtroCreditoARealizar.adicionarParametro(new ParametroSimples(
//// FiltroCreditoARealizar.IMOVEL_ID, creditoARealizar.getImovel().getId()));
////
//// Collection colecaoCreditosBase = Fachada.getInstancia().pesquisar(
//// filtroCreditoARealizar, CreditoARealizar.class.getName());
////
//// if (colecaoCreditosBase != null && !colecaoCreditosBase.isEmpty()) {
//// throw new ControladorException("atencao.referencia.credito_a_realizar.ja.existente");
//// }
//
// // Data de Gera��o do Cr�dito
// creditoARealizar.setGeracaoCredito(new Date());
//
// Date dataAtual = new Date();
// Integer anoMesReferenciaAtual = Util.recuperaAnoMesDaData( dataAtual );
//
// creditoARealizar.setAnoMesReferenciaContabil(
//
// ( anoMesReferenciaAtual > sistemaParametro.getAnoMesFaturamento() ? anoMesReferenciaAtual : sistemaParametro.getAnoMesFaturamento() )
//
// );
//
// creditoARealizar.setAnoMesCobrancaCredito(sistemaParametro.getAnoMesArrecadacao());
//
// // Valor Residual Mes Anterior
// creditoARealizar.setValorResidualMesAnterior(new BigDecimal(0));
//
// // Prestacao Credito
// creditoARealizar.setNumeroPrestacaoCredito(new Short("1"));
//
// // Prestacao Realizada
// creditoARealizar.setNumeroPrestacaoRealizada(new Short((short) 0));
//
// // Imovel
// creditoARealizar.setImovel(imovel);
// creditoARealizar.setLocalidade(imovel.getLocalidade());
// creditoARealizar.setCodigoSetorComercial(imovel.getSetorComercial().getCodigo());
// creditoARealizar.setNumeroLote(imovel.getLote());
// creditoARealizar.setNumeroSubLote(imovel.getSubLote());
// creditoARealizar.setQuadra(imovel.getQuadra());
// creditoARealizar.setNumeroQuadra(new Integer(imovel.getQuadra().getNumeroQuadra()));
//
// // Ordem de Servico
// creditoARealizar.setOrdemServico(null);
//
// // Debito Credito Situacao Atual
// DebitoCreditoSituacao debitoCreditoSituacaoAtual = new DebitoCreditoSituacao();
// debitoCreditoSituacaoAtual.setId(DebitoCreditoSituacao.NORMAL);
// creditoARealizar.setDebitoCreditoSituacaoAtual(debitoCreditoSituacaoAtual);
//
// // Debito Credito Situacao Anterior
// creditoARealizar.setDebitoCreditoSituacaoAnterior(null);
//
// // Data de Ultima Alteracao
// creditoARealizar.setUltimaAlteracao(new Date());
//
// //GERANDO O CREDITO A REALIZAR
// Fachada.getInstancia().gerarCreditoARealizar(creditoARealizar, imovel, usuarioLogado);
// }
//
// private void atualizarPagamento(Collection colecaoPagamento,SistemaParametro sistemaParametro, Integer idRa){
//
// Integer refereciaArrecadacaoSP = sistemaParametro.getAnoMesArrecadacao();
// PagamentoSituacao pagamentoSituacao = new PagamentoSituacao();
// pagamentoSituacao.setId(PagamentoSituacao.DUPLICIDADE_EXCESSO_DEVOLVIDO);
// Iterator iterPagamento = colecaoPagamento.iterator();
//
// while (iterPagamento.hasNext()) {
// Pagamento pagamento = (Pagamento) iterPagamento.next();
//
// if(refereciaArrecadacaoSP.equals(pagamento.getAnoMesReferenciaArrecadacao())){
// pagamento.setPagamentoSituacaoAnterior(pagamento.getPagamentoSituacaoAtual());
// }
//
// pagamento.setPagamentoSituacaoAtual(pagamentoSituacao);
// pagamento.setUltimaAlteracao(new Date());
//
// Fachada.getInstancia().atualizar(pagamento);
//
// Fachada.getInstancia().atualizarRegistroAtendimentoPagamentoDuplicidade(idRa,pagamento.getId());
// }
//
// }
//
private String obterParecerEncerramento(Collection colecaoPagamento,
Collection colecaoCreditoASerTransferido,Collection colecaoCreditoARealizar,Collection colecaoContaASerRetificada){
BigDecimal valorCreditoRealizado = ConstantesSistema.VALOR_ZERO;
BigDecimal valorCreditoARealizar = ConstantesSistema.VALOR_ZERO;
String referenciaPagamentos = "";
// String referenciaCreditosRealizado = "";
String referenciaContas = "";
Iterator iterPagamento = colecaoPagamento.iterator();
while (iterPagamento.hasNext()) {
Pagamento pagamento = (Pagamento) iterPagamento.next();
String referencia = "";
if(pagamento.getContaGeral().getConta() != null){
referencia = Util.formatarAnoMesParaMesAno(pagamento.getContaGeral().getConta().getReferencia());
}else if(pagamento.getContaGeral().getContaHistorico() != null){
referencia = Util.formatarAnoMesParaMesAno(pagamento.getContaGeral().getContaHistorico().getAnoMesReferenciaConta());
}
String[] referencias = referenciaPagamentos.split(",");
boolean existeNaColecao = false;
for(int x=0; x<referencias.length; x++){
if (referencia.equals(referencias[x])){
existeNaColecao = true;
}
}
if(!existeNaColecao){
referenciaPagamentos = referenciaPagamentos + referencia + ",";
}
}
Iterator iterCreditoASerTransferido = colecaoCreditoASerTransferido.iterator();
while (iterCreditoASerTransferido.hasNext()) {
CreditosHelper helper = (CreditosHelper) iterCreditoASerTransferido.next();
valorCreditoRealizado = valorCreditoRealizado.add(helper.getValorCredito());
// referenciaCreditosRealizado = referenciaCreditosRealizado + Util.formatarAnoMesParaMesAno(helper.getReferenciaCredito()) + ",";
}
Iterator iterCreditoARealizar = colecaoCreditoARealizar.iterator();
while (iterCreditoARealizar.hasNext()) {
CreditosHelper helper = (CreditosHelper) iterCreditoARealizar.next();
valorCreditoARealizar = valorCreditoARealizar.add(helper.getValorCredito());
}
Iterator iterContas = colecaoContaASerRetificada.iterator();
while (iterContas.hasNext()) {
ContaValoresHelper helper = (ContaValoresHelper) iterContas.next();
Conta conta = helper.getConta();
referenciaContas = referenciaContas + Util.formatarAnoMesParaMesAno(conta.getReferencia()) + ",";
}
String msgParecer = "";
if(!referenciaPagamentos.equals("") && !valorCreditoRealizado.equals(ConstantesSistema.VALOR_ZERO)){
referenciaPagamentos = Util.removerUltimosCaracteres(referenciaPagamentos, 1);
referenciaContas = Util.removerUltimosCaracteres(referenciaContas, 1);
msgParecer = "Devolvido o valor de " + Util.formatarMoedaReal(valorCreditoRealizado) + " referente ao(s) pagamento(s) " +
"em duplicidade da(s) fatura(s) " + referenciaPagamentos + " com cr�dito(s) " +
"lan�ado(s) na(s) fatura(s) " + referenciaContas ;
if(!valorCreditoARealizar.equals(ConstantesSistema.VALOR_ZERO)){
msgParecer = msgParecer + " e saldo restante de " + Util.formatarMoedaReal(valorCreditoARealizar) + " lan�ado como cr�dito a realizar";
}
}else if(!referenciaPagamentos.equals("") && !valorCreditoARealizar.equals(ConstantesSistema.VALOR_ZERO)){
referenciaPagamentos = Util.removerUltimosCaracteres(referenciaPagamentos, 1);
msgParecer = "Devolvido o valor de " + Util.formatarMoedaReal(valorCreditoARealizar) + " referente ao(s) pagamento(s) " +
"em duplicidade da(s) fatura(s) " + referenciaPagamentos + " lan�ado como cr�dito a realizar " ;
}
if(msgParecer.length() > 1000){
msgParecer = msgParecer.substring(0, 999);
}
return msgParecer;
}
//
//
//
// private Collection adicionarCreditoRealizado(Collection colecaoCreditoRealizado ,
// Collection colecaoCreditoRealizadoInserir) {
//
// if(colecaoCreditoRealizado == null || colecaoCreditoRealizado.isEmpty()){
// colecaoCreditoRealizado = new ArrayList();
// }
//
// if(colecaoCreditoRealizadoInserir != null && !colecaoCreditoRealizadoInserir.isEmpty()){
//
// Iterator iterCreditosHelper = colecaoCreditoRealizadoInserir.iterator();
//
// while (iterCreditosHelper.hasNext()) {
// CreditosHelper helper = (CreditosHelper) iterCreditosHelper.next();
//
// CreditoRealizado creditoRealizado = new CreditoRealizado();
// creditoRealizado.setCreditoTipo(helper.getTipoCreditoID());
// creditoRealizado.setCreditoOrigem(helper.getOrigemCreditoID());
// creditoRealizado.setValorCredito(helper.getValorCredito());
// creditoRealizado.setAnoMesCobrancaCredito(helper.getReferenciaCredito());
// creditoRealizado.setAnoMesReferenciaCredito(helper.getReferenciaCredito());
// creditoRealizado.setNumeroPrestacao(new Short("0"));
// creditoRealizado.setNumeroPrestacaoCredito(new Short("0"));
// colecaoCreditoRealizado.add(creditoRealizado);
// }
//
// }
// return colecaoCreditoRealizado;
// }
//
}