package gcom.gui.arrecadacao;
import gcom.arrecadacao.ArrecadadorMovimento;
import gcom.arrecadacao.FiltroArrecadadorMovimento;
import gcom.arrecadacao.banco.Banco;
import gcom.arrecadacao.debitoautomatico.DebitoAutomaticoMovimento;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
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;
/**
* processamento para gerar movimento de d�bito autom�tico para o banco
*
* @author S�vio Luiz
* @date 20/04/2006
*/
public class GerarMovimentoDebitoAutomaticoBancoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
GerarMovimentoDebitoAutomaticoBancoActionForm gerarMovimentoDebitoAutomaticoBancoActionForm = (GerarMovimentoDebitoAutomaticoBancoActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
Fachada fachada = Fachada.getInstancia();
// caso a op��o do movimento de debito automatico seja diferente de
// nulo
if (gerarMovimentoDebitoAutomaticoBancoActionForm
.getOpcaoMovimentoDebitoAutomatico() != null
&& !gerarMovimentoDebitoAutomaticoBancoActionForm
.getOpcaoMovimentoDebitoAutomatico().equals("")) {
// Se a op��o seja Gerar Movimento de D�bito Autom�tico
if (gerarMovimentoDebitoAutomaticoBancoActionForm
.getOpcaoMovimentoDebitoAutomatico().equals("1")) {
// recupera o Map<Banco, Collection<DebitoAutomaticoMovimento>>
// da sessao
Map<Banco, Collection<DebitoAutomaticoMovimento>> debitosAutomaticoBancosMap = (Map<Banco, Collection<DebitoAutomaticoMovimento>>) sessao
.getAttribute("debitosAutomaticoBancosMap");
String[] idsBancos = gerarMovimentoDebitoAutomaticoBancoActionForm
.getIdsCodigosBancos();
// cria um Map<Banco, Collection<DebitoAutomaticoMovimento>>
// novo para inserir s� os que foram escolhidos
if (debitosAutomaticoBancosMap != null
&& debitosAutomaticoBancosMap.size() != idsBancos.length) {
Map<Banco, Collection<DebitoAutomaticoMovimento>> debitosAutomaticoBancosMapNovo = new HashMap();
for (int i = 0; i < idsBancos.length; i++) {
Integer idBanco = new Integer(idsBancos[i]);
Iterator debitosAutomaticoBancosIterator = debitosAutomaticoBancosMap
.keySet().iterator();
while (debitosAutomaticoBancosIterator.hasNext()) {
Banco banco = (Banco) debitosAutomaticoBancosIterator
.next();
if (banco.getId().equals(idBanco)) {
Collection<DebitoAutomaticoMovimento> debitoAutomaticoMovimento = debitosAutomaticoBancosMap
.get(banco);
debitosAutomaticoBancosMapNovo.put(banco,
debitoAutomaticoMovimento);
}
}
}
// manda os debitos autom�ticos selecionados
fachada.gerarMovimentoDebitoAutomaticoBanco(
debitosAutomaticoBancosMapNovo,
(Usuario) (httpServletRequest.getSession(false))
.getAttribute("usuarioLogado"));
} else {
// caso todos os debitos autom�ticos forem selecionados
fachada.gerarMovimentoDebitoAutomaticoBanco(
debitosAutomaticoBancosMap,
(Usuario) (httpServletRequest.getSession(false))
.getAttribute("usuarioLogado"));
}
} else {
// no caso da op��o ser Regerar Arquivo TXT do Movimento de
// D�bito Autom�tico
String codigoRemessa = gerarMovimentoDebitoAutomaticoBancoActionForm
.getCodigoRemessaMovimento();
String identificacaoServicoMovimento = gerarMovimentoDebitoAutomaticoBancoActionForm
.getIdentificacaoServicoMovimento();
if (codigoRemessa.equals("1")
&& identificacaoServicoMovimento
.equals(ConstantesSistema.DEBITO_AUTOMATICO)) {
Integer idArrecadadorMovimento = new Integer(
gerarMovimentoDebitoAutomaticoBancoActionForm
.getIdArrecadadorMovimento());
FiltroArrecadadorMovimento filtroArrecadadorMovimento = new FiltroArrecadadorMovimento();
filtroArrecadadorMovimento
.adicionarParametro(new ParametroSimples(
FiltroArrecadadorMovimento.ID,
idArrecadadorMovimento));
Collection colecaoArrecadadorMovimento = fachada.pesquisar(
filtroArrecadadorMovimento,
ArrecadadorMovimento.class.getName());
if (colecaoArrecadadorMovimento != null
&& !colecaoArrecadadorMovimento.isEmpty()) {
ArrecadadorMovimento arrecadadorMovimento = (ArrecadadorMovimento) Util
.retonarObjetoDeColecao(colecaoArrecadadorMovimento);
String enviarBanco = gerarMovimentoDebitoAutomaticoBancoActionForm
.getOpcaoEnvioParaBanco();
fachada
.regerarArquivoTxtMovimentoDebitoAutomatico(
arrecadadorMovimento, enviarBanco,
(Usuario) (httpServletRequest.getSession(false))
.getAttribute("usuarioLogado"));
}
} else {
throw new ActionServletException(
"atencao.movimento.nao.envio");
}
}
}
gerarMovimentoDebitoAutomaticoBancoActionForm.setDataAtual(new Date());
sessao.removeAttribute("colecaogerarMovimentoDebitoAutomatico");
// montando p�gina de sucesso
montarPaginaSucesso(httpServletRequest,
"Movimento D�bito Automatico Enviado para Processamento", "Voltar",
"/exibirGerarMovimentoDebitoAutomaticoBancoAction.do");
return retorno;
}
}