package gcom.gui.faturamento;
import gcom.arrecadacao.pagamento.GuiaPagamentoItem;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Conta;
import gcom.faturamento.conta.ContaGeral;
import gcom.faturamento.debito.DebitoTipo;
import gcom.faturamento.debito.FiltroDebitoTipo;
import gcom.financeiro.FinanciamentoTipo;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
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;
/**
* Adicionar Guia Pagamento Item Popup
*
* @author Fl�vio Leonardo
* @created 25/04/2006
*/
public class AdicionarGuiaPagamentoItemPopupAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirAdicionarGuiaPagamentoItemPopup");
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
AdicionarGuiaPagamentoItemActionForm form = (AdicionarGuiaPagamentoItemActionForm) actionForm;
String idDebitoTipo = form.getIdTipoDebito();
//Criando o guia pagamento item
GuiaPagamentoItem guiaPagamentoItem = new GuiaPagamentoItem();
guiaPagamentoItem.setUltimaAlteracao(new Date());
guiaPagamentoItem.setValorDebito(Util.formatarMoedaRealparaBigDecimal(form.getValorTotalServico()));
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());
//String desabilitaCampo = httpServletRequest.getParameter("desabilitaIdDebito");
/*if(desabilitaCampo != null && !desabilitaCampo.equals("")){
httpServletRequest.setAttribute("desabilitaIdDebito", "sim");
}*/
if(colecaoDebitoTipo.isEmpty()){
throw new ActionServletException(
"pesquisa.registro.inexistente");
}
//[FS0021] Valor informado maior ou igual que valor da conta selecionada.
Integer idConta = null;
if (httpServletRequest.getParameter("conta") != null){
idConta = Integer.valueOf(httpServletRequest.getParameter("conta"));
Conta conta = (Conta) Util.retonarObjetoDeColecao(fachada.obterConta(idConta));
ContaGeral contaGeral = new ContaGeral();
contaGeral.setId(idConta);
contaGeral.setConta(conta);
guiaPagamentoItem.setContaGeral(contaGeral);
}
fachada.validarValorTotalServicoParaPagamentoParcial(idConta, Integer.valueOf(idDebitoTipo),
guiaPagamentoItem.getValorDebito());
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.guia_pagamento_item",
debitoTipo.getFinanciamentoTipo().getDescricao(),
debitoTipo.getDescricao());
}
// [FS0024] - Verificar bloqueio do tipo do d�bito para inclus�o on-line da guia
if (debitoTipo.getIndicadorJurosParCliente().toString().equals(ConstantesSistema.CONFIRMADA)){
throw new ActionServletException(
"atencao.tipo_financiamento.tipo_debito.nao.permite.tipo_exclusivo",
debitoTipo.getDescricaoAbreviada());
}
guiaPagamentoItem.setDebitoTipo(debitoTipo);
Collection colecaoGuiaPagamentoItemSessao = (Collection)sessao.getAttribute("colecaoGuiaDebitoTipo");
boolean existe = false;
if(colecaoGuiaPagamentoItemSessao != null){
if(this.pagamentoParcialJaInformado(colecaoGuiaPagamentoItemSessao, debitoTipo)){
throw new ActionServletException(
"atencao.guia_pagamento_item_excedeu_limite");
}
else if(colecaoGuiaPagamentoItemSessao.size() < 25){
Iterator iterator = colecaoGuiaPagamentoItemSessao.iterator();
while(iterator.hasNext()){
GuiaPagamentoItem guiaPagamentoItemColecao = (GuiaPagamentoItem)iterator.next();
if(!debitoTipo.getFinanciamentoTipo().getId().equals(guiaPagamentoItemColecao.getDebitoTipo().getFinanciamentoTipo().getId())){
throw new ActionServletException(
"atencao.tipo_financiamento.tipo_debito.diferente");
}
if(guiaPagamentoItemColecao.getDebitoTipo().getId().equals(debitoTipo.getId())){
existe = true;
}
}
if(!existe){
colecaoGuiaPagamentoItemSessao.add(guiaPagamentoItem);
}
else{
throw new ActionServletException(
"atencao.tipo_financiamento.tipo_debito.ja_existe_na_lista");
}
}
else{
throw new ActionServletException(
"atencao.tipo_financiamento.tipo_debito.maior_que_vinte_cinco");
}
}
else{
colecaoGuiaPagamentoItemSessao = new ArrayList();
colecaoGuiaPagamentoItemSessao.add(guiaPagamentoItem);
}
form.setIdTipoDebito("");
form.setDescricaoTipoDebito("");
form.setValorTotalServico("");
form.setMatriculaImovel("");
sessao.removeAttribute("colecaoContaParaPagamentoParcial");
sessao.setAttribute("colecaoGuiaDebitoTipo",colecaoGuiaPagamentoItemSessao);
httpServletRequest.setAttribute("desabilitaIdDebito", "sim");
httpServletRequest.setAttribute("reloadPage",1);
return retorno;
}
private boolean pagamentoParcialJaInformado(Collection colecaoGuiaPagamentoItemSessao,
DebitoTipo debitoTipo){
boolean retorno = false;
if (colecaoGuiaPagamentoItemSessao.size() > 0 &&
debitoTipo.getId().equals(DebitoTipo.PAGAMENTO_PARCIAL_CONTA)){
retorno = true;
}
if (!retorno){
Iterator iterator = colecaoGuiaPagamentoItemSessao.iterator();
while(iterator.hasNext()){
GuiaPagamentoItem guiaPagamentoItemColecao = (GuiaPagamentoItem)iterator.next();
if (guiaPagamentoItemColecao.getDebitoTipo().getId()
.equals(DebitoTipo.PAGAMENTO_PARCIAL_CONTA)){
retorno = true;
break;
}
}
}
return retorno;
}
}