package gcom.gui.faturamento.debito;
import gcom.cadastro.imovel.FiltroImovel;
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.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.FiltroParametro;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import gcom.util.filtro.ParametroSimplesDiferenteDe;
import java.math.BigDecimal;
import java.util.ArrayList;
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 popup
*
* @author Vivianne Sousa
* @created 25/04/2006
*/
public class InserirDebitoACobrarPopupAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("inserirDebitoACobrar");
Fachada fachada = Fachada.getInstancia();
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
// Inst�ncia do formul�rio que est� sendo utilizado
InserirDebitoACobrarPopupActionForm inserirDebitoACobrarPopupActionForm = (InserirDebitoACobrarPopupActionForm) actionForm;
Imovel imovel = null;
if (sessao.getAttribute("idImovel") != null) {
String idImovel = (String)sessao.getAttribute("idImovel");
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, new Integer(idImovel)));
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("setorComercial");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra");
filtroImovel.adicionarParametro(new ParametroSimplesDiferenteDe(
FiltroImovel.INDICADOR_IMOVEL_EXCLUIDO,
Imovel.IMOVEL_EXCLUIDO, FiltroParametro.CONECTOR_OR,2));
filtroImovel.adicionarParametro(new ParametroNulo(FiltroImovel.INDICADOR_IMOVEL_EXCLUIDO));
Collection<Imovel> imovelPesquisado = fachada.pesquisar(filtroImovel, Imovel.class.getName());
imovel = imovelPesquisado.iterator().next();
}
Integer numeroPrestacoes = new Integer(1);
BigDecimal valorTotalServico = Util.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarPopupActionForm.getValorTotalServico());
BigDecimal percentualAbatimento = null;
percentualAbatimento = new BigDecimal("0.00");
BigDecimal valorEntrada = null;
String idDebitoTipo = inserirDebitoACobrarPopupActionForm.getIdTipoDebito();
DebitoACobrar debitoACobrar = new DebitoACobrar();
debitoACobrar.setGeracaoDebito(new Date());
debitoACobrar.setValorDebito(Util.formatarMoedaRealparaBigDecimal(inserirDebitoACobrarPopupActionForm.getValorTotalServico()));
debitoACobrar.setNumeroPrestacaoDebito(new Short("1"));
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());
debitoACobrar.setPercentualTaxaJurosFinanciamento(new BigDecimal("0.00"));
debitoACobrar.setRegistroAtendimento(null);
debitoACobrar.setOrdemServico(null);
debitoACobrar.setImovel(imovel);
debitoACobrar.setQuadra(imovel.getQuadra());
debitoACobrar.setLocalidade(imovel.getLocalidade());
FiltroDebitoTipo filtroDebitoTipo = new FiltroDebitoTipo();
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("financiamentoTipo");
filtroDebitoTipo.adicionarParametro(new ParametroSimples(FiltroDebitoTipo.ID, idDebitoTipo));
filtroDebitoTipo.adicionarCaminhoParaCarregamentoEntidade("lancamentoItemContabil");
Collection colecaoDebitoTipo = fachada.pesquisar(filtroDebitoTipo, DebitoTipo.class.getName());
DebitoTipo debitoTipo = (DebitoTipo) colecaoDebitoTipo.iterator().next();
debitoTipo.setId(new Integer(idDebitoTipo));
// [FS0006] - Verificar tipo de financaimento do tipo de d�bito
if (debitoTipo.getFinanciamentoTipo().getId().intValue() != FinanciamentoTipo.SERVICO_NORMAL.intValue()
|| debitoTipo.getIndicadorGeracaoAutomatica().shortValue() == 1) {
throw new ActionServletException(
"atencao.tipo_financiamento.tipo_debito.nao.permite.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());
/**
* 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");
Integer idDebitoACobrar = fachada.inserirDebitoACobrar(numeroPrestacoes, debitoACobrar,
valorTotalServico, imovel, percentualAbatimento, valorEntrada, usuarioLogado);
DebitoCreditoSituacao debitoCreditoSituacao = new DebitoCreditoSituacao();
debitoCreditoSituacao.setId(DebitoCreditoSituacao.NORMAL);
debitoACobrar.setDebitoCreditoSituacaoAtual(debitoCreditoSituacao);
debitoACobrar.setId(idDebitoACobrar);
sessao.setAttribute("idDebitoACobrarInserido",idDebitoACobrar.toString());
Collection<DebitoACobrar> colecaoDebitosACobrar = null;
if(sessao.getAttribute("colecaoDebitoACobrar") != null){
colecaoDebitosACobrar = (Collection<DebitoACobrar>)sessao.getAttribute("colecaoDebitoACobrar");
}else{
colecaoDebitosACobrar = new ArrayList();
}
colecaoDebitosACobrar.add(debitoACobrar);
sessao.removeAttribute("colecaoDebitoACobrar");
sessao.setAttribute("colecaoDebitoACobrar",colecaoDebitosACobrar);
httpServletRequest.setAttribute("reloadPage",1);
return retorno;
}
}