package gcom.gui.arrecadacao;
import gcom.arrecadacao.Arrecadador;
import gcom.arrecadacao.ArrecadadorContrato;
import gcom.arrecadacao.FiltroArrecadador;
import gcom.arrecadacao.FiltroArrecadadorContrato;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.Util;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* Pre- processamento para registrar leituras e anormalidades
*
* @author S�vio Luiz
*/
public class ExibirRegistrarMovimentoArredadadoresAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o retorno
ActionForward retorno = actionMapping
.findForward("registrarMovimentoArrecacadores");
// RegistrarMovimentoArredadadoresActionForm form =
// (RegistrarMovimentoArredadadoresActionForm) actionForm;
HttpSession sessao = httpServletRequest.getSession(false);
sessao.setAttribute("colecaoArrecadadorContrato", new ArrayList());
// Parte que trata do c�digo quando o usu�rio tecla enter
// caso seja o id do arrecadador
String codigoAgenteDigitadoEnterArrecadador = null;
String idTipoMovimento = null;
if (httpServletRequest.getParameter("objetoConsulta") != null) {
try {
DiskFileUpload upload = new DiskFileUpload();
// Parse the request
List items = upload.parseRequest(httpServletRequest);
if (items != null) {
FileItem item = null;
// pega uma lista de itens do form
Iterator iter = items.iterator();
while (iter.hasNext()) {
item = (FileItem) iter.next();
if (item.getFieldName().equals("codigoAgente")) {
codigoAgenteDigitadoEnterArrecadador = item
.getString();
}
if (item.getFieldName().equals("idTipoMovimento")) {
idTipoMovimento = item.getString();
}
}
}
} catch (FileUploadException e) {
throw new ActionServletException("erro.sistema", e);
}
httpServletRequest.getParameter("caminho");
// Verifica se o c�digo foi digitado
if (codigoAgenteDigitadoEnterArrecadador != null
&& !codigoAgenteDigitadoEnterArrecadador.trim().equals("")
&& Integer.parseInt(codigoAgenteDigitadoEnterArrecadador) > 0) {
FiltroArrecadador filtroArrecadador = new FiltroArrecadador();
filtroArrecadador.adicionarParametro(new ParametroSimples(
FiltroArrecadador.CODIGO_AGENTE,
codigoAgenteDigitadoEnterArrecadador));
filtroArrecadador
.adicionarCaminhoParaCarregamentoEntidade("cliente");
Collection arrecadadorEncontrado = this.getFachada().pesquisar(
filtroArrecadador, Arrecadador.class.getName());
if (arrecadadorEncontrado != null
&& !arrecadadorEncontrado.isEmpty()) {
// O arrecadador foi encontrado
httpServletRequest
.setAttribute(
"parametroidArrecadador",
""
+ ((Arrecadador) ((List) arrecadadorEncontrado)
.get(0)).getCodigoAgente());
httpServletRequest
.setAttribute(
"parametroNomeArrecadador",
""
+ ((Arrecadador) ((List) arrecadadorEncontrado)
.get(0)).getCliente()
.getNome());
httpServletRequest.setAttribute(
"idArrecadadorNaoEncontrado", "true");
httpServletRequest.setAttribute("nomeCampo",
"idTipoMovimento");
if (idTipoMovimento != null && !idTipoMovimento.equals("")
&& !idTipoMovimento.equals("-1")) {
// Pesquisa Arrecadador Contrato
FiltroArrecadadorContrato filtroArrecadadorContrato = new FiltroArrecadadorContrato();
int i;
for (i = 0; i < arrecadadorEncontrado.size(); i++) {
if (arrecadadorEncontrado.size() == 1) {
filtroArrecadadorContrato
.adicionarParametro(new ParametroSimples(
FiltroArrecadadorContrato.ARRECADADOR_ID,
""
+ ((Arrecadador) ((List) arrecadadorEncontrado)
.get(i))
.getId()));
} else if (i == 0) {
filtroArrecadadorContrato
.adicionarParametro(new ParametroSimples(
FiltroArrecadadorContrato.ARRECADADOR_ID,
""
+ ((Arrecadador) ((List) arrecadadorEncontrado)
.get(i))
.getId(),
ParametroSimples.CONECTOR_OR,
arrecadadorEncontrado.size()));
} else if (i == (arrecadadorEncontrado.size() - 1)) {
filtroArrecadadorContrato
.adicionarParametro(new ParametroSimples(
FiltroArrecadadorContrato.ARRECADADOR_ID,
""
+ ((Arrecadador) ((List) arrecadadorEncontrado)
.get(i))
.getId()));
} else {
filtroArrecadadorContrato
.adicionarParametro(new ParametroSimples(
FiltroArrecadadorContrato.ARRECADADOR_ID,
""
+ ((Arrecadador) ((List) arrecadadorEncontrado)
.get(i))
.getId(),
ParametroSimples.CONECTOR_OR));
}
}
filtroArrecadadorContrato.adicionarParametro(new ParametroNulo(
FiltroArrecadadorContrato.DATA_CONTRATO_ENCERRAMENTO));
filtroArrecadadorContrato
.adicionarCaminhoParaCarregamentoEntidade("arrecadador");
Collection colecaoArrecadadorContrato = this
.getFachada().pesquisar(
filtroArrecadadorContrato,
ArrecadadorContrato.class.getName());
Collection removidos = new ArrayList();
boolean codigoBarras = false;
boolean fichaCompensacao = false;
boolean debitoAutomatico = false;
if (colecaoArrecadadorContrato != null
&& !colecaoArrecadadorContrato.isEmpty()) {
if (colecaoArrecadadorContrato.size() > 1) {
Iterator colecaoArrecadadorContratoIterator = colecaoArrecadadorContrato
.iterator();
while (colecaoArrecadadorContratoIterator
.hasNext()) {
ArrecadadorContrato arrecadadorContrato = (ArrecadadorContrato) colecaoArrecadadorContratoIterator
.next();
if (idTipoMovimento
.equalsIgnoreCase("CODIGO DE BARRAS")) {
if (arrecadadorContrato
.getNumeroSequecialArquivoRetornoCodigoBarras() == null
|| arrecadadorContrato
.getNumeroSequecialArquivoRetornoCodigoBarras().toString()
.equals("0")) {
removidos.add(arrecadadorContrato);
}
codigoBarras = true;
httpServletRequest.setAttribute(
"tipoMovimento",
"CODIGO DE BARRAS");
} else if (idTipoMovimento
.equalsIgnoreCase("FICHA DE COMPENSACAO")) {
if (arrecadadorContrato
.getNumeroSequencialArquivoRetornoFichaCompensacao() == null
|| arrecadadorContrato
.getNumeroSequencialArquivoRetornoFichaCompensacao().toString()
.equals("0")) {
removidos.add(arrecadadorContrato);
}
fichaCompensacao = true;
httpServletRequest.setAttribute(
"tipoMovimento",
"FICHA DE COMPENSACAO");
} else {
if (arrecadadorContrato
.getNumeroSequencialArquivoEnvioDebitoAutomatico() == null
|| arrecadadorContrato
.getNumeroSequencialArquivoEnvioDebitoAutomatico().toString()
.equals("0")) {
removidos.add(arrecadadorContrato);
}
debitoAutomatico = true;
httpServletRequest.setAttribute(
"tipoMovimento",
"DEBITO AUTOMATICO");
}
}
}else{
httpServletRequest.setAttribute(
"tipoMovimento",
idTipoMovimento);
}
if ( !Util.isVazioOrNulo(removidos)) {
colecaoArrecadadorContrato.removeAll(removidos);
}
if (colecaoArrecadadorContrato == null
|| colecaoArrecadadorContrato.isEmpty()) {
if (codigoBarras) {
throw new ActionServletException(
"atencao.arrecadador_contrato_sem_numero_sequecial_arquivo_retorno",
null, "C�DIGO DE BARRAS");
} else if (fichaCompensacao) {
throw new ActionServletException(
"atencao.arrecadador_contrato_sem_numero_sequecial_arquivo_retorno",
null, "FICHA DE COMPENSA��O");
} else if (debitoAutomatico) {
throw new ActionServletException(
"atencao.arrecadador_contrato_sem_numero_sequecial_arquivo_envio_debito_automatico");
}
} else {
sessao.setAttribute(
"colecaoArrecadadorContrato",
colecaoArrecadadorContrato);
}
}
if (colecaoArrecadadorContrato.size() < 2) {
sessao.setAttribute("um", true);
} else {
sessao.setAttribute("convenio", true);
}
} else {
sessao.setAttribute("colecaoArrecadadorContrato",
new ArrayList());
}
} else {
httpServletRequest.setAttribute("parametroNomeArrecadador",
"");
httpServletRequest.setAttribute("parametroNomeArrecadador",
"ARRECADADOR INEXISTENTE");
httpServletRequest.setAttribute(
"idArrecadadorNaoEncontrado", "exception");
sessao.removeAttribute("convenio");
}
}
}
// Cria��o das cole��es
Collection tiposMovimentos = new ArrayList();
tiposMovimentos.add("DEBITO AUTOMATICO");
tiposMovimentos.add("CODIGO DE BARRAS");
tiposMovimentos.add("FICHA DE COMPENSACAO");
sessao.setAttribute("tiposMovimentos", tiposMovimentos);
return retorno;
}
}