package gcom.gui.faturamento.credito;
import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.FiltroImovelCobrancaSituacao;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.imovel.ImovelCobrancaSituacao;
import gcom.cobranca.CobrancaSituacao;
import gcom.fachada.Fachada;
import gcom.faturamento.credito.CreditoARealizar;
import gcom.faturamento.credito.CreditoOrigem;
import gcom.faturamento.credito.CreditoTipo;
import gcom.faturamento.credito.FiltroCreditoARealizar;
import gcom.faturamento.debito.DebitoCreditoSituacao;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import gcom.util.filtro.ParametroSimplesDiferenteDe;
import java.math.BigDecimal;
import java.util.Collection;
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;
/**
* [UC0194] Cr�dito a Realizar Permite inserir um cr�dito a realizar
*
* @author Roberta Costa
* @since 11/01/2006
*/
public class InserirCreditoARealizarAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
// Pega uma inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO);
// Inst�ncia do formul�rio que est� sendo utilizado
InserirCreditoARealizarActionForm inserirCreditoARealizarActionForm = (InserirCreditoARealizarActionForm) actionForm;
// Campos do Formul�rio
Integer tipoCredito = new Integer(inserirCreditoARealizarActionForm
.getTipoCredito());
Integer origemCredito = new Integer(inserirCreditoARealizarActionForm
.getOrigemCredito());
Short numeroPrestacoes = new Short(inserirCreditoARealizarActionForm
.getNumeroPrestacoes());
String valorCreditoAntes = inserirCreditoARealizarActionForm
.getValorCredito().toString().replace(".", "");
String valorCredito = valorCreditoAntes.replace(',', '.');
String registroAtendimentoForm = inserirCreditoARealizarActionForm
.getRegistroAtendimento();
String matriculaImovel = inserirCreditoARealizarActionForm
.getMatriculaImovel();
String referencia = inserirCreditoARealizarActionForm.getReferencia();
String confirmado = httpServletRequest.getParameter("confirmado");
// Criando o objeto creditoARealizar
CreditoARealizar creditoARealizar = new CreditoARealizar();
// Criando o objeto Cr�dito Tipo
CreditoTipo creditoTipo = new CreditoTipo();
creditoTipo.setId(tipoCredito);
creditoARealizar.setCreditoTipo(creditoTipo);
// Criando o objeto Cr�dito Origem
CreditoOrigem creditoOrigem = new CreditoOrigem();
creditoOrigem.setId(origemCredito);
creditoARealizar.setCreditoOrigem(creditoOrigem);
// Criando o objeto Registro Atendimento
RegistroAtendimento registroAtendimento = new RegistroAtendimento();
if (registroAtendimentoForm != null
&& !registroAtendimentoForm.equals("")) {
registroAtendimento.setId(new Integer(registroAtendimentoForm));
creditoARealizar.setRegistroAtendimento(registroAtendimento);
} else {
// inseri o valor 1 temporariamente
RegistroAtendimento registroAtendimentoConstante = new RegistroAtendimento();
registroAtendimentoConstante.setId(RegistroAtendimento.CONSTANTE);
creditoARealizar
.setRegistroAtendimento(registroAtendimentoConstante);
}
if (inserirCreditoARealizarActionForm.getOrdemServico() != null
&& !inserirCreditoARealizarActionForm.getOrdemServico().equals(
"")) {
Integer ordemServicoForm = new Integer(
inserirCreditoARealizarActionForm.getOrdemServico());
// Criando o objeto Ordem de Servi�o
OrdemServico ordemServico = new OrdemServico();
ordemServico.setId(ordemServicoForm);
creditoARealizar.setOrdemServico(ordemServico);
} else {
creditoARealizar.setOrdemServico(null);
}
//[FS0006] Verificar exist�ncia de credito a realizar para o registro de atendimento
if((inserirCreditoARealizarActionForm.getTipoCredito() != null &&
!inserirCreditoARealizarActionForm.getTipoCredito().equals(""))
&&
(inserirCreditoARealizarActionForm.getRegistroAtendimento() != null
&& !inserirCreditoARealizarActionForm.getRegistroAtendimento().equals(""))
){
FiltroCreditoARealizar filtroCreditoARelizar = new FiltroCreditoARealizar();
filtroCreditoARelizar.adicionarParametro(new ParametroSimples(FiltroCreditoARealizar.ID_REGISTRO_ATENDIMENTO,inserirCreditoARealizarActionForm.getRegistroAtendimento()));
filtroCreditoARelizar.adicionarParametro(new ParametroSimples(FiltroCreditoARealizar.ID_CREDITO_TIPO,inserirCreditoARealizarActionForm.getTipoCredito()));
filtroCreditoARelizar.adicionarParametro(new ParametroSimplesDiferenteDe(FiltroCreditoARealizar.DEBITO_CREDITO_SITUACAO_ATUAL,DebitoCreditoSituacao.CANCELADA));
Collection colecaoCreditoARealizar = fachada.pesquisar(
filtroCreditoARelizar, CreditoARealizar.class
.getName());
if (colecaoCreditoARealizar != null
&& !colecaoCreditoARealizar.isEmpty()) {
throw new ActionServletException(
"atencao.existe.credito_a_realizar.para.registro_atendimento");
}
}
// Pega o Im�vel da sess�o
Imovel imovel = null;
if (sessao.getAttribute("imovelPesquisado") != null) {
imovel = (Imovel) sessao.getAttribute("imovelPesquisado");
}else{
if (matriculaImovel != null && !matriculaImovel.trim().equals("")) {
// Pesquisa o imovel na base
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(
FiltroImovel.ID, matriculaImovel));
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroBairro.bairro.municipio.unidadeFederacao");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("setorComercial");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("quadra");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.cep");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTipo");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("logradouroCep.logradouro.logradouroTitulo");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("enderecoReferencia");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoAguaSituacao");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgotoSituacao");
/*filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("ligacaoAguaSituacao.id");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgotoSituacao.id");*/
Collection<Imovel> imovelPesquisado = fachada.pesquisar(
filtroImovel, Imovel.class.getName());
// [FS0001 - Verificar exist�ncioa da matr�cula do im�vel] Imovel
// Inxistente
if (imovelPesquisado != null && imovelPesquisado.isEmpty()) {
throw new ActionServletException("atencao.imovel.inexistente");
}
// [FS0001 - Verificar exist�ncioa da matr�cula do im�vel] Imovel
// Excluido
if (imovelPesquisado != null && !imovelPesquisado.isEmpty()) {
imovel = imovelPesquisado.iterator().next();
if (imovel.getIndicadorExclusao() == Imovel.IMOVEL_EXCLUIDO) {
throw new ActionServletException(
"atencao.pesquisa.imovel.excluido");
}
}
// [FS0002 - Verificar usu�rio com d�bito em cobran�a administrativa
if (imovelPesquisado != null && !imovelPesquisado.isEmpty()) {
imovel = imovelPesquisado.iterator().next();
FiltroImovelCobrancaSituacao filtroImovelCobrancaSituacao = new FiltroImovelCobrancaSituacao();
filtroImovelCobrancaSituacao
.adicionarCaminhoParaCarregamentoEntidade("cobrancaSituacao");
filtroImovelCobrancaSituacao
.adicionarParametro(new ParametroSimples(
FiltroImovelCobrancaSituacao.IMOVEL_ID, imovel
.getId()));
Collection imovelCobrancaSituacaoEncontrada = fachada
.pesquisar(filtroImovelCobrancaSituacao,
ImovelCobrancaSituacao.class.getName());
// Verifica se o im�vel tem d�bito em cobran�a administrativa
if (imovelCobrancaSituacaoEncontrada != null
&& !imovelCobrancaSituacaoEncontrada.isEmpty()) {
if (((ImovelCobrancaSituacao) ((List) imovelCobrancaSituacaoEncontrada)
.get(0)).getCobrancaSituacao() != null) {
if (((ImovelCobrancaSituacao) ((List) imovelCobrancaSituacaoEncontrada)
.get(0)).getCobrancaSituacao().getId().equals(
CobrancaSituacao.COBRANCA_ADMINISTRATIVA)
&& ((ImovelCobrancaSituacao) ((List) imovelCobrancaSituacaoEncontrada)
.get(0)).getDataRetiradaCobranca() == null) {
throw new ActionServletException(
"atencao.pesquisa.imovel.cobranca_administrativa");
}
}
}
}
// [FS0003 - Verificar situa��o liga��o de �giua e esgoto]
if (imovelPesquisado != null && !imovelPesquisado.isEmpty()) {
imovel = imovelPesquisado.iterator().next();
if ((imovel.getLigacaoAguaSituacao() != null)
&& ((imovel.getLigacaoAguaSituacao().getId() == LigacaoAguaSituacao.POTENCIAL) || (imovel
.getLigacaoEsgotoSituacao().getId() == LigacaoAguaSituacao.FACTIVEL))
&& (imovel.getLigacaoEsgotoSituacao().getId() != LigacaoEsgotoSituacao.LIGADO)) {
throw new ActionServletException(
"atencao.pesquisa.imovel.inativo");
}
}
// Obtem o cliente imovel do imovel pesquisado
if (imovelPesquisado != null && !imovelPesquisado.isEmpty()) {
imovel = imovelPesquisado.iterator().next();
sessao.setAttribute("imovelPesquisado", imovel);
}
}
}
if (referencia != null && !referencia.equals("")) {
Integer referenciaCredito = Util.formatarMesAnoComBarraParaAnoMes(referencia);
Integer qtdContas = fachada.pesquisarQuantidadeContasEContasHistorico(imovel.getId(), referenciaCredito);
// verifica se o valor da devolucao � maior que o valor da guia da devolucao
if (qtdContas == null || qtdContas == 0) {
if (confirmado == null || !confirmado.trim().equalsIgnoreCase("ok")){
httpServletRequest.setAttribute("caminhoActionConclusao",
"/gsan/inserirCreditoARealizarAction.do");
// Monta a p�gina de confirma��o para perguntar se o usu�rio
// quer inserir
// a devolu��o mesmo com o valor da devolu��o sendo superior ao da guia da devolu��o
return montarPaginaConfirmacao(
"atencao.referencia.conta.inexistente",
httpServletRequest, actionMapping);
}
}
creditoARealizar.setAnoMesReferenciaCredito(referenciaCredito);
}
// Setando as informa��es do Im�vel
creditoARealizar.setImovel(imovel);
creditoARealizar.setCodigoSetorComercial(imovel.getSetorComercial()
.getCodigo());
creditoARealizar.setNumeroQuadra(new Integer(imovel.getQuadra()
.getNumeroQuadra()));
creditoARealizar.setNumeroLote(imovel.getLote());
creditoARealizar.setNumeroSubLote(imovel.getSubLote());
creditoARealizar.setQuadra(imovel.getQuadra());
creditoARealizar.setLocalidade(imovel.getLocalidade());
creditoARealizar.setNumeroPrestacaoCredito(numeroPrestacoes);
creditoARealizar.setValorCredito(new BigDecimal(valorCredito));
fachada.inserirCreditoARealizar(imovel, creditoARealizar,usuarioLogado);
sessao.removeAttribute("imovelPesquisado");
montarPaginaSucesso(httpServletRequest, "Cr�dito a Realizar do Im�vel "
+ imovel.getId() + " inserido com sucesso.",
"Inserir outro Cr�dito a Realizar",
"exibirInserirCreditoARealizarAction.do?menu=sim",
"exibirManterCreditoARealizarAction.do?codigoImovel="
+ imovel.getId(),
"Cancelar Cr�dito(s) a Realizar do Im�vel " + imovel.getId());
return retorno;
}
}