diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java index 9319751af..2d170fe0f 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java @@ -9,7 +9,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.apache.log4j.Logger; import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.FiscalDAO; @@ -25,20 +24,20 @@ import com.rjconsultores.ventaboletos.vo.impressaofiscal.SituacaoTributaria; @Repository("fiscalDAO") public class FiscalHibernateDAO implements FiscalDAO { - - private static Logger log = Logger.getLogger(FiscalHibernateDAO.class); + + // private static Logger log = Logger.getLogger(FiscalHibernateDAO.class); public static final String DATE_FORMAT_FISCAL = "yyyyMMdd"; public FiscalHibernateDAO() { - + } @Override - public List buscaDatosFiscaisECFManual(Date inicio, Date fim, Integer empresaId,Connection connection) throws SQLException { + public List buscaDatosFiscaisECFManual(Date inicio, Date fim, Integer empresaId, Connection connection) throws SQLException { PreparedStatement stmt = null; ResultSet rset = null; - + StringBuilder sql = new StringBuilder(); sql.append("select r4.numserie20 as numImpressora, "); sql.append(" coalesce(r4.coo, b.numfoliopreimpreso) as coo, "); @@ -188,16 +187,14 @@ public class FiscalHibernateDAO implements FiscalDAO { } return listManuais; - - + } @Override public List buscaDatosFiscaisReducaoZ(Date inicio, Date fim, Integer empresaId, Connection connection) throws SQLException { PreparedStatement stmt = null; ResultSet rset = null; - - + StringBuilder sql = new StringBuilder(); sql.append("SELECT r2.datamov AS datamov, "); sql.append(" r2.numreducoes AS numreducoes, "); @@ -293,8 +290,7 @@ public class FiscalHibernateDAO implements FiscalDAO { } return listRedZ; - - + } public String sqlFiscaisECFCancelados() { @@ -330,10 +326,9 @@ public class FiscalHibernateDAO implements FiscalDAO { sql.append(" cs.descclase as claseServicio, "); sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf "); sql.append(" FROM fiscal_r4 r4 "); - sql.append(" INNER JOIN fiscal_r5 r5 ON r4.numserie20 = r5.numserie20 AND r4.coo = r5.coo "); + sql.append(" LEFT JOIN fiscal_r5 r5 ON r4.numserie20 = r5.numserie20 AND r4.coo = r5.coo "); sql.append(" AND r4.datamov = r5.datamov AND r4.contador = r5.contador "); sql.append(" INNER JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 "); - sql.append(" AND fi.fiscalimpressora_id = r5.fiscalimpressora_id "); sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id "); sql.append(" INNER JOIN clase_servicio cs ON cs.claseservicio_id = b.claseservicio_id "); sql.append(" LEFT JOIN evento_extra ee on ee.boleto_id = b.boleto_id and ee.tipoeventoextra_id in (42) "); @@ -417,10 +412,9 @@ public class FiscalHibernateDAO implements FiscalDAO { sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf, "); sql.append(" 'N' as status "); sql.append(" FROM fiscal_r4 r4 "); - sql.append(" INNER JOIN fiscal_r5 r5 ON r4.numserie20 = r5.numserie20 AND r4.coo = r5.coo "); + sql.append(" LEFT JOIN fiscal_r5 r5 ON r4.numserie20 = r5.numserie20 AND r4.coo = r5.coo "); sql.append(" AND r4.datamov = r5.datamov AND r4.contador = r5.contador "); - sql.append(" INNER JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 "); - sql.append(" AND fi.fiscalimpressora_id = r5.fiscalimpressora_id "); + sql.append(" LEFT JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 "); sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id "); sql.append(" INNER JOIN clase_servicio cs ON cs.claseservicio_id = b.claseservicio_id "); sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = b.origen_id "); @@ -433,7 +427,10 @@ public class FiscalHibernateDAO implements FiscalDAO { sql.append(" INNER JOIN estado ed ON ed.estado_id = cd.estado_id "); sql.append(" WHERE r4.datamov BETWEEN ? AND ? "); sql.append(" AND b.marca_id = ? "); - sql.append(" AND r4.indcancelamento = 'N' "); + sql.append(" AND (r4.indcancelamento = 'N' OR (r4.indcancelamento = 'S' AND "); + sql.append(" (SELECT r3.numserie20 FROM fiscal_r3 r3 "); + sql.append(" WHERE r3.numserie20 = r4.numserie20 AND r3.datamov = r4.datamov "); + sql.append(" AND r3.totparcial = 'Can-T') IS NULL) ) "); sql.append(" GROUP BY r4.numserie20, "); sql.append(" r4.coo, "); sql.append(" r4.datainicialemissao, "); @@ -469,11 +466,9 @@ public class FiscalHibernateDAO implements FiscalDAO { } @Override - public List buscaDatosFiscaisECF(Date inicio, Date fim, Integer empresaId, boolean isCancelados,Connection connection) throws SQLException { + public List buscaDatosFiscaisECF(Date inicio, Date fim, Integer empresaId, boolean isCancelados, Connection connection) throws SQLException { PreparedStatement stmt = null; ResultSet rset = null; - - String sql = isCancelados ? sqlFiscaisECFCancelados() : sqlFiscaisECF(); stmt = connection.prepareStatement(sql); @@ -528,7 +523,12 @@ public class FiscalHibernateDAO implements FiscalDAO { ImportacionFiscalVO novoFiscal = item; codProduto = item.getCodProduto(); - codProduto = codProduto.toString().replace("-", "").replace("TA", "").replace("TX", "").replace("PE", "").replace("SE", ""); + if (codProduto != null) { + codProduto = codProduto.toString().replace("-", "").replace("TA", "").replace("TX", "").replace("PE", "").replace("SE", ""); + } else { + String boleto = item.getBoletoId().toString(); + codProduto = boleto.substring(boleto.length() - 8) + "F" + boleto.substring(boleto.length() - 2); + } if (fiscal == null) { fiscal = item; @@ -573,67 +573,90 @@ public class FiscalHibernateDAO implements FiscalDAO { boolean pedagioCriada = false; boolean embarqueCriada = false; boolean seguroCriada = false; + + boolean inconsistencia = false; + List itensFiscais = new ArrayList(); for (ItemFiscalVO item : fiscal.getItensFiscais()) { String codigoProduto = item.getCodProduto(); + if (codigoProduto != null) { + if (codigoProduto.indexOf("TA") >= 0) + tarifaCriada = true; - if (codigoProduto.indexOf("TA") >= 0) - tarifaCriada = true; + if (codigoProduto.indexOf("TX") >= 0) + embarqueCriada = true; - if (codigoProduto.indexOf("TX") >= 0) - embarqueCriada = true; + if (codigoProduto.indexOf("PE") >= 0) + pedagioCriada = true; - if (codigoProduto.indexOf("PE") >= 0) - pedagioCriada = true; - - if (codigoProduto.indexOf("SE") >= 0) - seguroCriada = true; + if (codigoProduto.indexOf("SE") >= 0) + seguroCriada = true; + } else { + inconsistencia = true; + break; + } itensFiscais.add(item); } - int numeroItem = 1; - if (temTarifa && !tarifaCriada) { - ItemFiscalVO novoTarifa = new ItemFiscalVO(fiscal); - novoTarifa.setCodProduto(codProduto + "-TA"); - novoTarifa.setTipoPassagem("E"); - novoTarifa.setValorItem(fiscal.getValorTarifa()); - novoTarifa.setRepTributado("N1"); - novoTarifa.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); - itensFiscais.add(novoTarifa); - } + if (inconsistencia) { + ItemFiscalVO novaInconsistencia = new ItemFiscalVO(fiscal); + novaInconsistencia.setInconsistencia(inconsistencia); + novaInconsistencia.setCodProduto(codProduto + "-TX"); + novaInconsistencia.setTipoPassagem("E"); - if (temEmbarque && !embarqueCriada) { - ItemFiscalVO novoEmbarque = new ItemFiscalVO(fiscal); - novoEmbarque.setCodProduto(codProduto + "-TX"); - novoEmbarque.setTipoPassagem("E"); - novoEmbarque.setValorItem(fiscal.getValorEmbarque()); - novoEmbarque.setRepTributado("N1"); - novoEmbarque.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); - itensFiscais.add(novoEmbarque); - } + BigDecimal total = fiscal.getValorTarifa().add(fiscal.getValorPedagio()).add(fiscal.getValorEmbarque()).add(fiscal.getValorSeguro()); + novaInconsistencia.setValorItem(total); - if (temPedagio && !pedagioCriada) { - ItemFiscalVO novoPedagio = new ItemFiscalVO(fiscal); - novoPedagio.setCodProduto(codProduto + "-PE"); - novoPedagio.setTipoPassagem("E"); - novoPedagio.setValorItem(fiscal.getValorPedagio()); - novoPedagio.setRepTributado("N1"); - novoPedagio.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); + novaInconsistencia.setRepTributado("N1"); + novaInconsistencia.setNumItem(StringHelper.preencherZeroEsquerda((1) + "", 3)); + itensFiscais.add(novaInconsistencia); - itensFiscais.add(novoPedagio); - } + } else { - if (temSeguro && !seguroCriada) { - ItemFiscalVO novoSeguro = new ItemFiscalVO(fiscal); - novoSeguro.setCodProduto(codProduto + "-SE"); - novoSeguro.setTipoPassagem("E"); - novoSeguro.setValorItem(fiscal.getValorSeguro()); - novoSeguro.setRepTributado("N1"); - novoSeguro.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); + int numeroItem = 1; + if (temTarifa && !tarifaCriada) { + ItemFiscalVO novoTarifa = new ItemFiscalVO(fiscal); + novoTarifa.setCodProduto(codProduto + "-TA"); + novoTarifa.setTipoPassagem("E"); + novoTarifa.setValorItem(fiscal.getValorTarifa()); + novoTarifa.setRepTributado("N1"); + novoTarifa.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); + itensFiscais.add(novoTarifa); + } - itensFiscais.add(novoSeguro); + if (temEmbarque && !embarqueCriada) { + ItemFiscalVO novoEmbarque = new ItemFiscalVO(fiscal); + novoEmbarque.setCodProduto(codProduto + "-TX"); + novoEmbarque.setTipoPassagem("E"); + novoEmbarque.setValorItem(fiscal.getValorEmbarque()); + novoEmbarque.setRepTributado("N1"); + novoEmbarque.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); + itensFiscais.add(novoEmbarque); + } + + if (temPedagio && !pedagioCriada) { + ItemFiscalVO novoPedagio = new ItemFiscalVO(fiscal); + novoPedagio.setCodProduto(codProduto + "-PE"); + novoPedagio.setTipoPassagem("E"); + novoPedagio.setValorItem(fiscal.getValorPedagio()); + novoPedagio.setRepTributado("N1"); + novoPedagio.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); + + itensFiscais.add(novoPedagio); + } + + if (temSeguro && !seguroCriada) { + ItemFiscalVO novoSeguro = new ItemFiscalVO(fiscal); + novoSeguro.setCodProduto(codProduto + "-SE"); + novoSeguro.setTipoPassagem("E"); + novoSeguro.setValorItem(fiscal.getValorSeguro()); + novoSeguro.setRepTributado("N1"); + novoSeguro.setNumItem(StringHelper.preencherZeroEsquerda((numeroItem++) + "", 3)); + + itensFiscais.add(novoSeguro); + } } return itensFiscais; @@ -685,16 +708,14 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" and c.corrida_id in (:corridaId) "); sb.append(" and ROWNUM < 2 "); - //FIXME - Implementar a inserção na base de dados. Atenção para checar se tem q ficar em transação ou não -// Query query = getSession().createSQLQuery(sb.toString()); -// query.setParameterList("corridaId", idsCorrida); -// query.setDate("datIni", new java.sql.Date(dataDe.getTime())); -// query.setDate("datFim", new java.sql.Date(dataAte.getTime())); + // FIXME - Implementar a inserção na base de dados. Atenção para checar se tem q ficar em transação ou não + // Query query = getSession().createSQLQuery(sb.toString()); + // query.setParameterList("corridaId", idsCorrida); + // query.setDate("datIni", new java.sql.Date(dataDe.getTime())); + // query.setDate("datFim", new java.sql.Date(dataAte.getTime())); + + // return query.executeUpdate(); -// return query.executeUpdate(); - - - return 0; } @@ -735,14 +756,14 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" and ROWNUM < 2 "); Integer[] idsCorrida = getIdsCorrida(lsEsquemaCorrida); - //FIXME - Implementar a inserção na base de dados. Atenção para checar se tem q ficar em transação ou não -// Query query = getSession().createSQLQuery(sb.toString()); -// query.setParameterList("corridaId", idsCorrida); -// query.setDate("datIni", new java.sql.Date(dataDe.getTime())); -// query.setDate("datFim", new java.sql.Date(dataAte.getTime())); -// -// return query.executeUpdate(); - + // FIXME - Implementar a inserção na base de dados. Atenção para checar se tem q ficar em transação ou não + // Query query = getSession().createSQLQuery(sb.toString()); + // query.setParameterList("corridaId", idsCorrida); + // query.setDate("datIni", new java.sql.Date(dataDe.getTime())); + // query.setDate("datFim", new java.sql.Date(dataAte.getTime())); + // + // return query.executeUpdate(); + return 0; } @@ -754,11 +775,9 @@ public class FiscalHibernateDAO implements FiscalDAO { } @Override - public List buscaDatosNaoFiscais(Date inicio, Date fim, Integer empresaId,Connection connection) throws SQLException { + public List buscaDatosNaoFiscais(Date inicio, Date fim, Integer empresaId, Connection connection) throws SQLException { PreparedStatement stmt = null; ResultSet rset = null; - - StringBuilder sQuery = new StringBuilder(); sQuery.append("SELECT TEE.TIPOEVENTOEXTRA_ID AS TIPOEVENTOEXTRAID, TEE.DESCTIPOEVENTO AS DESCTIPOEVENTO, ") @@ -790,7 +809,6 @@ public class FiscalHibernateDAO implements FiscalDAO { } return importacionNaoFiscalVOs; - - + } } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java index 33272d6ef..235d8a4b2 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java @@ -680,7 +680,9 @@ public class FiscalServiceImpl implements FiscalService { private String montarItensFiscais(ItemFiscalVO item, Integer seq, Integer seqItem) { String tipoPassagem = null; - if (item.getRepTributado().length() == 7 && item.getRepTributado().substring(2, 3).equals(SituacaoTributaria.TRIBUTADO.getValue())) { + + String repTributado = item.getRepTributado() == null ? SituacaoTributaria.NAO_TRIBUTADO.getValue() : item.getRepTributado(); + if (repTributado.length() == 7 && repTributado.substring(2, 3).equals(SituacaoTributaria.TRIBUTADO.getValue())) { tipoPassagem = item.getTipoPassagem(); if (tipoPassagem == null) @@ -725,6 +727,11 @@ public class FiscalServiceImpl implements FiscalService { valorItem = item.getValorSeguro() == null ? valorItem : item.getValorSeguro(); } + boolean inconsistente = item.getInconsistencia() == null ? false : item.getInconsistencia(); + if (inconsistente) { + valorItem = item.getValorTarifa().add(item.getValorPedagio()).add(item.getValorEmbarque()).add(item.getValorSeguro()); + } + valorItem = UtileriasFiscal.arredondar(valorItem); String valorUnitario = UtileriasFiscal.formataZeroDecimal(valorItem, 15); item.setValorItem(new BigDecimal(valorUnitario)); @@ -738,7 +745,7 @@ public class FiscalServiceImpl implements FiscalService { HashMap aliquotaItens = new HashMap(0); // Verificando se é um produto tributável. Formato: XXTYYYY (XX - Posicao / YYYY - Aliquota) - if (item.getRepTributado().length() == 7 && item.getRepTributado().substring(2, 3).equals(SituacaoTributaria.TRIBUTADO.getValue())) { + if (repTributado.length() == 7 && repTributado.substring(2, 3).equals(SituacaoTributaria.TRIBUTADO.getValue())) { String key = tipoPassagem + item.getRepTributado().substring(3, 7); @@ -749,7 +756,7 @@ public class FiscalServiceImpl implements FiscalService { BigDecimal soma = item.getValorItem().divide(BigDecimal.TEN.multiply(BigDecimal.TEN)); aliquotaItens.put(key, soma.add(aliquotaItens.get(key))); - } else if (item.getRepTributado().equals(SituacaoTributaria.NAO_TRIBUTADO.getValue())) { + } else if (repTributado.equals(SituacaoTributaria.NAO_TRIBUTADO.getValue())) { BigDecimal soma = item.getValorItem(); totalICMSNaotributadoItem = StringHelper.preencherZeroEsquerda(soma.toString(), 15); @@ -851,7 +858,8 @@ public class FiscalServiceImpl implements FiscalService { HashMap aliquotaBaseCalculo = new HashMap(0); // Verificando se é um produto tributável. Formato: XXTYYYY (XX - Posicao / YYYY - Aliquota) - if (item.getRepTributado().length() == 7 && item.getRepTributado().substring(2, 3).equals(SituacaoTributaria.TRIBUTADO.getValue())) { + String repTributado = item.getRepTributado() == null ? SituacaoTributaria.NAO_TRIBUTADO.getValue() : item.getRepTributado(); + if (repTributado.length() == 7 && repTributado.substring(2, 3).equals(SituacaoTributaria.TRIBUTADO.getValue())) { String tipoPassagem = item.getTipoPassagem(); @@ -868,7 +876,7 @@ public class FiscalServiceImpl implements FiscalService { BigDecimal soma = item.getValorItem().divide(BigDecimal.TEN.multiply(BigDecimal.TEN)); aliquotaBaseCalculo.put(key, soma.add(aliquotaBaseCalculo.get(key))); - } else if (item.getRepTributado().equals(SituacaoTributaria.NAO_TRIBUTADO.getValue())) { + } else if (repTributado.equals(SituacaoTributaria.NAO_TRIBUTADO.getValue())) { BigDecimal soma = item.getValorItem(); totalICMSNaotributado = soma.toString(); diff --git a/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ItemFiscalVO.java b/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ItemFiscalVO.java index 0c19c704a..6ca6e7b5c 100644 --- a/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ItemFiscalVO.java +++ b/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ItemFiscalVO.java @@ -9,6 +9,7 @@ public class ItemFiscalVO extends ImportacionFiscalVO { private String repTributado; private BigDecimal valorItem; private String tipoPassagem; + private Boolean inconsistencia; public ItemFiscalVO() { super(); @@ -104,4 +105,15 @@ public class ItemFiscalVO extends ImportacionFiscalVO { return "ItemFiscalVO [numItem=" + numItem + ", codProduto=" + codProduto + ", repTributado=" + repTributado + ", valorItem=" + valorItem + ", tipoPassagem=" + tipoPassagem + ", getNumImpressora()=" + getNumImpressora() + ", getCoo()=" + getCoo() + ", getBoletoId()=" + getBoletoId() + ", getEmpresaId()=" + getEmpresaId() + ", getDataEmissao()=" + getDataEmissao() + ", getCnpjCliente()=" + getCnpjCliente() + ", getCnpjImpressora()=" + getCnpjImpressora() + ", getOrigenId()=" + getOrigenId() + ", getItensFiscais()=" + getItensFiscais() + ", getNumpdv()=" + getNumpdv() + "]"; } + public Boolean getInconsistencia() { + return inconsistencia; + } + + public void setInconsistencia(Boolean inconsistencia) { + if (inconsistencia == null) + this.inconsistencia = Boolean.FALSE; + else + this.inconsistencia = inconsistencia; + } + }