package gcom.gui.arrecadacao; import gcom.arrecadacao.Arrecadador; import gcom.arrecadacao.ArrecadadorContrato; import gcom.arrecadacao.FiltroArrecadador; import gcom.arrecadacao.FiltroArrecadadorContrato; import gcom.arrecadacao.bean.RegistroFichaCompensacaoBuilder; import gcom.arrecadacao.bean.RegistroHelperCodigoF; import gcom.arrecadacao.bean.RegistroHelperCodigoG; import gcom.arrecadacao.bean.RegistroHelperCodigoZ; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.gui.ActionServletException; import gcom.gui.GcomAction; import gcom.util.ControladorException; import gcom.util.Util; import gcom.util.filtro.ParametroNulo; import gcom.util.filtro.ParametroSimples; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigDecimal; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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; /** * Action respons�vel para dar um onLoad no arquivo e importar os ceps. * * @author S�vio Luiz * @created 24 de Agosto de 2005 */ public class RegistrarMovimentoArrecadadoresAction extends GcomAction { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { ActionForward retorno = actionMapping.findForward("telaSucesso"); try { Integer idArrecadadorContrato = null; String idTipoMovimento = null; String nomeArrecadador = null; Short codigoAgente = null; BigDecimal valorMovimentoArrecadador = new BigDecimal("0.0"); BigDecimal valorTotalMovimentoArrecadador = new BigDecimal("0.0"); RegistroHelperCodigoF helperF; RegistroHelperCodigoG helperG; RegistroHelperCodigoZ helperZ; Fachada fachada = Fachada.getInstancia(); DiskFileUpload upload = new DiskFileUpload(); // Parse the request List items = upload.parseRequest(httpServletRequest); FileItem item = null; // cria uma string builder que recupera o txt e joga para o // controlador para o processamento StringBuilder stringBuilderTxt = new StringBuilder(); // cria um contador para saber quantas linhas ter� o txt int quantidadeRegistros = 0; // pega uma lista de itens do form Iterator iter = items.iterator(); while (iter.hasNext()) { item = (FileItem) iter.next(); if (item.getFieldName().equals("codigoAgente")) { codigoAgente = new Short(item.getString()); } // No combo com o codigo do covenio o value � o id do Arrecadador pois dois arrecadadores //podem tem o mesmo codigo do agente (CAEMA). if (item.getFieldName().equals("codigoConvenio")) { idArrecadadorContrato = new Integer(item.getString()); } if (item.getFieldName().equals("idTipoMovimento")) { idTipoMovimento = item.getString(); } // verifica se n�o � diretorio if (!item.isFormField()) { // coloca o nome do item para maiusculo String nomeItem = item.getName().toUpperCase(); // compara o final do nome do arquivo � .DEB se for debito autom�tico //ou .ARR se for c�digo de barras if ((idTipoMovimento != null && idTipoMovimento.equals("DEBITO AUTOMATICO") && nomeItem.endsWith(".DEB")) || (idTipoMovimento != null && idTipoMovimento.equals("CODIGO DE BARRAS") && nomeItem.endsWith(".ARR")) || (idTipoMovimento != null && nomeItem.endsWith(".REM")) || (idTipoMovimento != null && nomeItem.endsWith(".RET")) || (idTipoMovimento != null && nomeItem.endsWith(".FEB"))) { // abre o arquivo InputStreamReader reader = new InputStreamReader(item.getInputStream()); BufferedReader buffer = new BufferedReader(reader); // StringBuffer linha = new StringBuffer(); // cria uma variavel do tipo boolean boolean eof = false; boolean primeiraLinha = true; // enquanto a variavel for false while (!eof) { // pega a linha do arquivo String linhaLida = buffer.readLine(); // se for a ultima linha do arquivo if (linhaLida != null && linhaLida.length() > 0) { String codigoRegistro = linhaLida.substring(0, 1).toUpperCase(); Character codigoRegistroCharacter = codigoRegistro.charAt(0); if (((int) codigoRegistroCharacter) >= 65 && ((int) codigoRegistroCharacter) <= 90) { // completa a string para o tamanho de 150 caso necessario. String linhaCompleta = null; if (linhaLida.length() != 150) { linhaCompleta = Util.completaString(linhaLida, 150); } else { linhaCompleta = linhaLida; } //[SB0001] - Validar Arquivo de Movimento de Arrecadador if (primeiraLinha) { /* * Colocado por Raphael Rossiter em 10/11/2008 Analista: Eduardo Borges * [SB0001] - Validar Arquivo de Movimento de Arrecadador */ FiltroArrecadador filtroArrecadador = new FiltroArrecadador(); filtroArrecadador.adicionarParametro( new ParametroSimples(FiltroArrecadador.CODIGO_AGENTE, codigoAgente)); filtroArrecadador.adicionarCaminhoParaCarregamentoEntidade("cliente"); Collection arrecadadorEncontrado = this.getFachada().pesquisar(filtroArrecadador, Arrecadador.class.getName()); if (arrecadadorEncontrado != null && !arrecadadorEncontrado.isEmpty()) { nomeArrecadador = ((Arrecadador) ((List) arrecadadorEncontrado).get(0)).getCliente().getNome(); } FiltroArrecadadorContrato filtroArrecadadorContrato = new FiltroArrecadadorContrato(); filtroArrecadadorContrato.adicionarParametro(new ParametroSimples( FiltroArrecadadorContrato.ID,idArrecadadorContrato)); filtroArrecadadorContrato.adicionarParametro(new ParametroNulo( FiltroArrecadadorContrato.DATA_CONTRATO_ENCERRAMENTO)); filtroArrecadadorContrato.adicionarCaminhoParaCarregamentoEntidade("arrecadador"); Collection colecaoArrecadadorContrato = Fachada.getInstancia().pesquisar( filtroArrecadadorContrato,ArrecadadorContrato.class.getName()); ArrecadadorContrato arrecadadorContrato = (ArrecadadorContrato)Util.retonarObjetoDeColecao(colecaoArrecadadorContrato); Fachada.getInstancia().validarArquivoMovimentoArrecadador(codigoRegistro, linhaCompleta, codigoAgente, nomeArrecadador, idTipoMovimento, arrecadadorContrato, null, null, null, arrecadadorContrato.getArrecadador().getId()); primeiraLinha = false; } stringBuilderTxt.append(linhaCompleta); stringBuilderTxt.append("\n"); quantidadeRegistros = quantidadeRegistros + 1; //[SB0001] - Validar Arquivo de Movimento de Arrecadador //Item 12 - Verificar se o valor dos registros do arquivo � inv�lido SistemaParametro sistemaParametro = Fachada.getInstancia().pesquisarParametrosDoSistema(); if(sistemaParametro.getIndicadorValorMovimentoArrecadador() == 1){ if(codigoRegistro.equals("F")){ helperF = (RegistroHelperCodigoF) fachada.distribuirdadosRegistroMovimentoArrecadador(linhaCompleta, null); valorMovimentoArrecadador = Util.somaBigDecimal(valorMovimentoArrecadador, new BigDecimal(helperF.getValorDebito())); }else if(codigoRegistro.equals("G")){ helperG = (RegistroHelperCodigoG) fachada.distribuirdadosRegistroMovimentoArrecadador(linhaCompleta, null); valorMovimentoArrecadador = Util.somaBigDecimal(valorMovimentoArrecadador, new BigDecimal(helperG.getValorRecebido())); }else if(codigoRegistro.equals("Z")){ helperZ = (RegistroHelperCodigoZ) fachada.distribuirdadosRegistroMovimentoArrecadador(linhaCompleta, null); valorTotalMovimentoArrecadador = new BigDecimal(helperZ.getValorTotalRegistrosArquivo()); if(valorTotalMovimentoArrecadador.compareTo(valorMovimentoArrecadador)!= 0){ throw new ActionServletException("atencao.valor_registros_arquivo_invalido"); } } } } else { break; } } else { break; } } // fecha o arquivo buffer.close(); reader.close(); item.getInputStream().close(); }else if(idTipoMovimento != null && idTipoMovimento.equals("FICHA DE COMPENSACAO") && nomeItem.endsWith(".BOL")){ InputStreamReader reader = new InputStreamReader(item.getInputStream()); BufferedReader buffer = new BufferedReader(reader); boolean eof = false; boolean primeiraLinha = true; while (!eof) { String linhaLida = buffer.readLine(); if (linhaLida != null && linhaLida.length() > 0) { if (primeiraLinha) { FiltroArrecadador filtroArrecadador = new FiltroArrecadador(); filtroArrecadador.adicionarParametro(new ParametroSimples(FiltroArrecadador.CODIGO_AGENTE, codigoAgente)); filtroArrecadador.adicionarCaminhoParaCarregamentoEntidade("cliente"); Collection arrecadadorEncontrado = this.getFachada().pesquisar(filtroArrecadador, Arrecadador.class.getName()); if (arrecadadorEncontrado != null && !arrecadadorEncontrado.isEmpty()) { nomeArrecadador = ((Arrecadador) ((List) arrecadadorEncontrado).get(0)).getCliente().getNome(); } FiltroArrecadadorContrato filtroArrecadadorContrato = new FiltroArrecadadorContrato(); filtroArrecadadorContrato.adicionarParametro(new ParametroSimples( FiltroArrecadadorContrato.ID,idArrecadadorContrato)); filtroArrecadadorContrato.adicionarParametro(new ParametroNulo( FiltroArrecadadorContrato.DATA_CONTRATO_ENCERRAMENTO)); filtroArrecadadorContrato.adicionarCaminhoParaCarregamentoEntidade("arrecadador"); Collection colecaoArrecadadorContrato = Fachada.getInstancia().pesquisar( filtroArrecadadorContrato,ArrecadadorContrato.class.getName()); ArrecadadorContrato arrecadadorContrato = (ArrecadadorContrato)Util.retonarObjetoDeColecao(colecaoArrecadadorContrato); RegistroFichaCompensacaoBuilder.getHeader(linhaLida, arrecadadorContrato); primeiraLinha = false; } stringBuilderTxt.append(linhaLida); stringBuilderTxt.append("\n"); quantidadeRegistros = quantidadeRegistros + 1; } else { break; } } buffer.close(); reader.close(); item.getInputStream().close(); }else { if(idTipoMovimento != null && idTipoMovimento.equals("DEBITO AUTOMATICO")){ throw new ActionServletException("atencao.tipo_importacao.nao_deb"); }else if(idTipoMovimento != null && idTipoMovimento.equals("CODIGO DE BARRAS")){ throw new ActionServletException("atencao.tipo_importacao.nao_arr"); }else if(idTipoMovimento != null && idTipoMovimento.equals("FICHA DE COMPENSACAO")){ throw new ActionServletException("atencao.tipo_importacao.nao_ficha"); } } } } if (quantidadeRegistros != 0) { FiltroArrecadadorContrato filtroArrecadadorContrato = new FiltroArrecadadorContrato(); filtroArrecadadorContrato.adicionarParametro(new ParametroSimples(FiltroArrecadadorContrato.ID,idArrecadadorContrato)); filtroArrecadadorContrato.adicionarParametro(new ParametroNulo(FiltroArrecadadorContrato.DATA_CONTRATO_ENCERRAMENTO)); filtroArrecadadorContrato.adicionarCaminhoParaCarregamentoEntidade("arrecadador"); Collection colecaoArrecadadorContrato = Fachada.getInstancia().pesquisar(filtroArrecadadorContrato,ArrecadadorContrato.class.getName()); ArrecadadorContrato arrecadadorContrato = (ArrecadadorContrato)Util.retonarObjetoDeColecao(colecaoArrecadadorContrato); this.getFachada().registrarMovimentoArrecadadores(stringBuilderTxt, codigoAgente, nomeArrecadador, idTipoMovimento, quantidadeRegistros, getUsuarioLogado(httpServletRequest), arrecadadorContrato.getArrecadador().getId(), arrecadadorContrato); } else { throw new ActionServletException("atencao.importacao.nao_concluida"); } montarPaginaSucesso(httpServletRequest, "Movimento Arrecadadores Enviado para Processamento", "Voltar", "/exibirRegistrarMovimentoArredadadoresAction.do"); } catch (IOException ex) { throw new ActionServletException("erro.importacao.nao_concluida"); } catch (NumberFormatException ex) { throw new ActionServletException("erro.importacao.nao_concluida"); } catch (FileUploadException e) { throw new ActionServletException("erro.sistema", e); } catch (ControladorException ce) { throw new ActionServletException(ce.getMessage(), ce); } return retorno; } }