package gcom.gui.faturamento;
import gcom.atendimentopublico.ordemservico.FiltroOrdemServico;
import gcom.atendimentopublico.ordemservico.OrdemServico;
import gcom.atendimentopublico.registroatendimento.AtendimentoMotivoEncerramento;
import gcom.atendimentopublico.registroatendimento.AtendimentoRelacaoTipo;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimento;
import gcom.atendimentopublico.registroatendimento.RegistroAtendimentoUnidade;
import gcom.cadastro.imovel.Imovel;
import gcom.cobranca.CobrancaForma;
import gcom.fachada.Fachada;
import gcom.faturamento.debito.DebitoACobrar;
import gcom.faturamento.debito.DebitoCreditoSituacao;
import gcom.faturamento.debito.DebitoTipo;
import gcom.faturamento.debito.FiltroDebitoACobrar;
import gcom.faturamento.debito.FiltroDebitoTipo;
import gcom.financeiro.FiltroFinanciamentoTipo;
import gcom.financeiro.FinanciamentoTipo;
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.Date;
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;
/**
* Inserir D�bito A Cobrar do Imovel
*
* @author Rafael Santos
* @since 21/12/2005 [UC0183] Inserir D�bito a Cobrar
*
*/
public class InserirDebitoACobrarAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
Fachada fachada = Fachada.getInstancia();
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
if ( "confirmaEncerramentoRA".equals( httpServletRequest.getParameter("tipoRelatorio") ) ){
sessao.setAttribute( "confirmaEncerramentoRA", httpServletRequest.getParameter( "confirmado" ) );
}
String valorConfirmacaoEncerramentoRA = (String) sessao.getAttribute( "confirmaEncerramentoRA" );
// Inst�ncia do formul�rio que est� sendo utilizado
InserirDebitoACobrarActionForm inserirDebitoACobrarActionForm = (InserirDebitoACobrarActionForm) actionForm;
Imovel imovel = null;
if (sessao.getAttribute("imovelPesquisado") != null) {
imovel = (Imovel) sessao.getAttribute("imovelPesquisado");
}
Integer numeroPrestacoes = new Integer(inserirDebitoACobrarActionForm
.getNumeroPrestacoes().replace(',', '.'));
/*String valorTotalServicoAParcelar = inserirDebitoACobrarActionForm
.getValorTotalServicoAParcelar();*/
BigDecimal valorTotalServico = Util
.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarActionForm
.getValorTotalServico());
BigDecimal percentualAbatimento = null;
if (inserirDebitoACobrarActionForm.getPercentualAbatimento() != null
&& !inserirDebitoACobrarActionForm.getPercentualAbatimento()
.equals("")) {
percentualAbatimento = Util
.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarActionForm
.getPercentualAbatimento());
} else {
percentualAbatimento = new BigDecimal("0.00");
}
BigDecimal valorEntrada = null;
if (inserirDebitoACobrarActionForm.getValorEntrada() != null
&& !inserirDebitoACobrarActionForm.getValorEntrada().equals("")) {
valorEntrada = Util
.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarActionForm
.getValorEntrada());
}
String idDebitoTipo = inserirDebitoACobrarActionForm.getIdTipoDebito();
// [FS0008] Verificar exist�ncia de d�bito a cobrar para o registro de
// atendimento - valida se o d�bito j� estiver associado ao RA passado
//mostra uma mensagem avisando que o d�bito a cobrar j� foi cadastrado para esse registro de atendimento
if ((idDebitoTipo != null && !idDebitoTipo.equals(""))
&& (inserirDebitoACobrarActionForm.getRegistroAtendimento() != null && !inserirDebitoACobrarActionForm
.getRegistroAtendimento().equals(""))) {
FiltroDebitoACobrar filtroDebitoACobrar = new FiltroDebitoACobrar();
filtroDebitoACobrar.adicionarParametro(new ParametroSimples(
FiltroDebitoACobrar.ID_REGISTRO_ATENDIMENTO,
inserirDebitoACobrarActionForm.getRegistroAtendimento()));
filtroDebitoACobrar.adicionarParametro(new ParametroSimples(
FiltroDebitoACobrar.DEBITO_TIPO_ID, idDebitoTipo));
filtroDebitoACobrar
.adicionarParametro(new ParametroSimplesDiferenteDe(
FiltroDebitoACobrar.DEBITO_CREDITO_SITUACAO_ATUAL_ID,
DebitoCreditoSituacao.CANCELADA));
Collection colecaoDebitoACobrar = fachada.pesquisar(
filtroDebitoACobrar, DebitoACobrar.class.getName());
if (colecaoDebitoACobrar != null && !colecaoDebitoACobrar.isEmpty() && (valorConfirmacaoEncerramentoRA == null || "".equals(valorConfirmacaoEncerramentoRA))) {
throw new ActionServletException("atencao.debito_a_cobrar.ja.cadastrado","exibirInserirDebitoACobrarAction.do",new Exception(),"");
}
}
// validar debito tipo
if ((inserirDebitoACobrarActionForm.getOrdemServico() != null && !inserirDebitoACobrarActionForm
.getOrdemServico().equals(""))
&& (idDebitoTipo != null && !idDebitoTipo.equals(""))) {
FiltroOrdemServico filtroOrdemServico = new FiltroOrdemServico();
filtroOrdemServico.adicionarParametro(new ParametroSimples(
FiltroOrdemServico.ID, inserirDebitoACobrarActionForm
.getOrdemServico()));
filtroOrdemServico
.adicionarCaminhoParaCarregamentoEntidade(FiltroOrdemServico.DEBITO_TIPO);
Collection colecaoOrdemServico = fachada.pesquisar(
filtroOrdemServico, OrdemServico.class.getName());
if (colecaoOrdemServico != null && !colecaoOrdemServico.isEmpty()) {
OrdemServico ordemServico = (OrdemServico) colecaoOrdemServico
.iterator().next();
if (ordemServico.getServicoTipo().getDebitoTipo() != null) {
idDebitoTipo = ordemServico.getServicoTipo()
.getDebitoTipo().getId().toString();
}
}
}
DebitoACobrar debitoACobrar = new DebitoACobrar();
debitoACobrar.setGeracaoDebito(new Date());
debitoACobrar.setValorDebito(Util
.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarActionForm
.getValorTotalServicoAParcelar()));
debitoACobrar.setNumeroPrestacaoDebito(new Short(
inserirDebitoACobrarActionForm.getNumeroPrestacoes())
.shortValue());
debitoACobrar.setNumeroPrestacaoCobradas(new Short("0"));
debitoACobrar.setCodigoSetorComercial(imovel.getSetorComercial()
.getCodigo());
debitoACobrar.setNumeroQuadra(new Integer(imovel.getQuadra()
.getNumeroQuadra()));
debitoACobrar.setNumeroLote(imovel.getLote());
debitoACobrar.setNumeroSubLote(imovel.getSubLote());
BigDecimal valorTaxa = new BigDecimal("0.00");
if (inserirDebitoACobrarActionForm.getTaxaJurosFinanciamento() != null
&& !inserirDebitoACobrarActionForm.getTaxaJurosFinanciamento()
.equalsIgnoreCase("")) {
valorTaxa = Util
.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarActionForm
.getTaxaJurosFinanciamento());
}
debitoACobrar.setPercentualTaxaJurosFinanciamento(valorTaxa);
// registro de atendimento
RegistroAtendimento registroAtendimento = null;
if (inserirDebitoACobrarActionForm.getRegistroAtendimento() != null
&& !inserirDebitoACobrarActionForm.getRegistroAtendimento()
.trim().equals("")) {
registroAtendimento = new RegistroAtendimento();
registroAtendimento.setId(new Integer(
inserirDebitoACobrarActionForm.getRegistroAtendimento()));
}
debitoACobrar.setRegistroAtendimento(registroAtendimento);
// ordem de servico
if (inserirDebitoACobrarActionForm.getOrdemServico() != null
&& !inserirDebitoACobrarActionForm.getOrdemServico().equals("")) {
OrdemServico ordemServico = new OrdemServico();
ordemServico.setId(new Integer(inserirDebitoACobrarActionForm
.getOrdemServico()));
debitoACobrar.setOrdemServico(ordemServico);
} else {
debitoACobrar.setOrdemServico(null);
}
debitoACobrar.setImovel(imovel);
debitoACobrar.setQuadra(imovel.getQuadra());
debitoACobrar.setLocalidade(imovel.getLocalidade());
FiltroDebitoTipo filtroDebitoTipo = new FiltroDebitoTipo();
/*filtroDebitoTipo
.adicionarCaminhoParaCarregamentoEntidade(FiltroDebitoTipo.FINANCIAMENTO_TIPO);*/
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("financiamentoTipo");
filtroDebitoTipo.adicionarParametro(new ParametroSimples(
FiltroDebitoTipo.ID, idDebitoTipo));
/*filtroDebitoTipo
.adicionarCaminhoParaCarregamentoEntidade(FiltroDebitoTipo.LANCAMENTO_ITEM_CONTABIL_ID);*/
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("lancamentoItemContabil");
Collection colecaoDebitoTipo = fachada.pesquisar(filtroDebitoTipo,
DebitoTipo.class.getName());
DebitoTipo debitoTipo = (DebitoTipo) colecaoDebitoTipo.iterator()
.next();
debitoTipo.setId(new Integer(idDebitoTipo));
/*
* Autor: Hugo Leonardo
* Data: 08/10/2010
* CRC_4540
* Analista: Ana Cristina
*
* */
// [FS0006] - Verificar tipo de financaimento do tipo de d�bito
if (debitoTipo.getFinanciamentoTipo().getIndicadorInclusao().shortValue() == FinanciamentoTipo.INDICADOR_INCLUSAO_NAO.shortValue()
|| debitoTipo.getIndicadorGeracaoAutomatica().shortValue() == 1) {
throw new ActionServletException(
"atencao.tipo_financiamento.tipo_debito.nao.permite.inserir.debito_a_cobrar",
debitoTipo.getFinanciamentoTipo().getDescricao(),
debitoTipo.getDescricao());
}
// obter o financiamento tipo do tipo de debito
FiltroFinanciamentoTipo filtroFinanciamentoTipo = new FiltroFinanciamentoTipo();
filtroFinanciamentoTipo.adicionarParametro(new ParametroSimples(
FiltroFinanciamentoTipo.ID, debitoTipo.getFinanciamentoTipo()
.getId()));
Collection colecaoFinaciamentoTipo = fachada.pesquisar(
filtroFinanciamentoTipo, FinanciamentoTipo.class.getName());
FinanciamentoTipo financiamentoTipo = null;
if (colecaoFinaciamentoTipo != null
&& !colecaoFinaciamentoTipo.isEmpty()) {
financiamentoTipo = (FinanciamentoTipo) colecaoFinaciamentoTipo
.iterator().next();
}
debitoACobrar.setFinanciamentoTipo(financiamentoTipo);
debitoACobrar.setDebitoTipo(debitoTipo);
debitoACobrar.setLancamentoItemContabil(debitoTipo
.getLancamentoItemContabil());
CobrancaForma cobrancaForma = new CobrancaForma();
cobrancaForma.setId(CobrancaForma.COBRANCA_EM_CONTA);
debitoACobrar.setCobrancaForma(cobrancaForma);
debitoACobrar.setUltimaAlteracao(new Date());
/**
* alterado por pedro alexandre dia 21/11/2006 Recupera o usu�rio logado
* para passar no met�do de inserir d�bito a cobrar para verificar se o
* usu�rio tem abrang�ncia para inserir um d�bito a cobrar para o im�vel
* informado.
*/
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
//De acordo com o UC0183 ap�s o d�bito ter sido inclu�do no sistema, se o d�bito a cobrar
//tiver usado um RA, � preciso perguntar ap�s a inclus�o do d�bito - a qual ocorreu na chamada
//do m�todo acima se o usu�rio deseja encerrar o registro de atendimento
//verifica se o objeto que representa o d�bito a cobrar a ser incluso � nulo
if(debitoACobrar != null ){
//verifica se o d�bito a cobrar foi incluso associado a um RA para realizar as valida��es
//do UC0183 descritas acima
if(valorConfirmacaoEncerramentoRA == null || "".equals(valorConfirmacaoEncerramentoRA) ){
fachada.inserirDebitoACobrar(numeroPrestacoes, debitoACobrar,
valorTotalServico, imovel, percentualAbatimento, valorEntrada,
usuarioLogado);
//caso o registro de atendimento do debito a cobrar seja diferente de nulo
if(debitoACobrar.getRegistroAtendimento() != null){
//caso o registro de atendimento da ordem de servi�o do debito a cobrar seja diferente de nulo
httpServletRequest.setAttribute("caminhoActionConclusao",
"/gsan/inserirDebitoACobrarAction.do");
httpServletRequest.setAttribute("cancelamento", "TRUE");
httpServletRequest.setAttribute("nomeBotao1", "Sim");
httpServletRequest.setAttribute("nomeBotao2", "N�o");
httpServletRequest.setAttribute( "tipoRelatorio", "confirmaEncerramentoRA");
//monta a Pagina de confirma��o do encerramento do RA da OS caso a OS esteja associada a um RA
return montarPaginaConfirmacao("atencao.encerrar_RA_utilizado_no_inserir_debito_a_cobrar",
httpServletRequest, actionMapping);
}
}else if(valorConfirmacaoEncerramentoRA.equals("ok")){
//Se entrou aqui, � porque o usuario clicou em Sim, para o encerramento do Registro de Atendimento
//associado � ordem de servi�o, 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 do d�bito a cobrar para ser encerrado
RegistroAtendimento ra = debitoACobrar.getRegistroAtendimento();
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.setObservacao("ENCERRADO NA INCLUS�O DO D�BITO A COBRAR");
ra.setParecerEncerramento("RA ENCERRADO NA INCLUS�O DO D�BITO A COBRAR");
ra.setUltimaAlteracao(new Date());
//cria o objeto para a inser��o do registro de atendimento
//unidade
RegistroAtendimentoUnidade registroAtendimentoUnidade = new RegistroAtendimentoUnidade();
registroAtendimentoUnidade.setRegistroAtendimento(registroAtendimento);
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,"exibirInserirDebitoACobrarAction.do?menu=sim",true);
}
}
if (sessao.getAttribute("imovelPesquisado") != null) {
sessao.removeAttribute("imovelPesquisado");
}
/*
* montarPaginaSucesso(httpServletRequest, "D�bito a cobrar " +
* debitoTipo.getDescricao() +" para o im�vel " + imovel.getId() +"
* inclu�da com sucesso", "Inserir outro D�bito a Cobrar",
* "exibirInserirDebitoACobrarAction.do?menu=sim");
*/
// 6.7 caso o valor da enrada tenha sido informadao
if (inserirDebitoACobrarActionForm.getValorEntrada() != null
&& !inserirDebitoACobrarActionForm.getValorEntrada().equals("")) {
StringBuffer parametros = new StringBuffer("?menu=sim");
parametros.append("&idImovel=" + imovel.getId());
if (debitoACobrar.getOrdemServico() != null) {
parametros.append("&ordemServico="
+ debitoACobrar.getOrdemServico().getId());
} else if(debitoACobrar.getRegistroAtendimento() != null) {
parametros.append("®istroAtendimento="
+ registroAtendimento.getId());
}
parametros.append("&idTipoDebito=" + idDebitoTipo);
parametros.append("&dataVencimento="
+ Util.formatarData(new Date()));
parametros.append("&valorDebito="
+ inserirDebitoACobrarActionForm.getValorEntrada());
montarPaginaSucesso(httpServletRequest, "D�bito a cobrar "
+ debitoTipo.getDescricao() + " para o im�vel "
+ imovel.getId() + " inclu�do com sucesso",
"Inserir outro D�bito a Cobrar",
"exibirInserirDebitoACobrarAction.do?menu=sim",
"exibirManterDebitoACobrarAction.do?idRegistroInseridoManter="
+ imovel.getId(),
"Cancelar D�bito(s) a Cobrar do im�vel " + imovel.getId(),
"Inserir Guia de Pagamento",
"exibirInserirGuiaPagamentoAction.do"
+ parametros.toString());
} else {
montarPaginaSucesso(httpServletRequest, "D�bito a cobrar "
+ debitoTipo.getDescricao() + " para o im�vel "
+ imovel.getId() + " inclu�do com sucesso",
"Inserir outro D�bito a Cobrar",
"exibirInserirDebitoACobrarAction.do?menu=sim",
"exibirManterDebitoACobrarAction.do?idRegistroInseridoManter="
+ imovel.getId(),
"Cancelar D�bito(s) a Cobrar do im�vel " + imovel.getId());
}
return retorno;
}
}