diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java index a41f48b29..e8412b904 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java @@ -1249,7 +1249,7 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" left join parada posi on posi.parada_id = si.aliasorigen_id"); sb.append(" left join parada pdsi on pdsi.parada_id = si.aliasdestino_id"); sb.append(" where r5i.numserie20 = r4.numserie20 and r5i.datamov = r2.datamov and r5i.codproduto like '%-TA'"); - sb.append(" and (nvl(case when posi.regionmetropolitana_id is null then poi.regionmetropolitana_id else posi.regionmetropolitana_id end, -1) = nvl(case when pdsi.regionmetropolitana_id is null then pdi.regionmetropolitana_id else pdsi.regionmetropolitana_id end, -2))"); + sb.append(" and (nvl(case when si.aliasorigen_id is null then poi.regionmetropolitana_id else posi.regionmetropolitana_id end, -1) = nvl(case when si.aliasorigen_id is null then pdi.regionmetropolitana_id else pdsi.regionmetropolitana_id end, -2))"); sb.append(" ) as totalisenta,"); sb.append(" r2.vendabrutadiaria as vendabrutadiaria,"); sb.append(" r2.totgeral as totgeral,"); @@ -1548,6 +1548,8 @@ public class FiscalHibernateDAO implements FiscalDAO { if (rs.getInt("isenta") == 1) { codigoSituacaoTribColunaB = 40; + + valorICMSIsento = valorTotal; } ufDestino = rs.getString("estado_destino"); @@ -1803,7 +1805,7 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END) = 1"); sb.append(" and (b.indstatusboleto like 'V' or b.indstatusboleto like 'C')"); sb.append(" and b.empresacorrida_id = ?"); - sb.append(" and (b.feccorrida >= ? and b.feccorrida >= ?)"); + sb.append(" and (b.feccorrida >= ? and b.feccorrida <= ?)"); sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?"); try { @@ -1881,9 +1883,9 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" and b.tipoventa_id = 3"); sb.append(" and (b.indstatusboleto like 'V' or b.indstatusboleto like 'C')"); sb.append(" and b.empresacorrida_id = ?"); - sb.append(" and (b.feccorrida >= ? and b.feccorrida >= ?)"); + sb.append(" and (b.feccorrida >= ? and b.feccorrida <= ?)"); sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?"); - sb.append(" order by r.docfiscal, b.numfoliopreimpreso"); + sb.append(" order by b.feccreacion,a.acfiscal,b.numfoliopreimpreso"); try { PreparedStatement ps = connection.prepareStatement(sb.toString()); @@ -1902,7 +1904,7 @@ public class FiscalHibernateDAO implements FiscalDAO { Integer numeroFinal = null; while (rs.next()) { - String key = rs.getInt("num_rmd") + "|" + rs.getInt("num_formulario"); + String key = sdf.format(rs.getDate("data_emissao")) + "|" + rs.getInt("num_aidf") + "|" + rs.getInt("num_formulario"); if (group.containsKey(key)) { registro = group.get(key); @@ -1992,7 +1994,8 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.tributacaoimportacao ELSE eis.tributacaoimportacao END) as tributacao_importacao,"); sb.append(" (CASE WHEN (nvl((CASE WHEN s.aliasorigen_id IS NULL THEN po.regionmetropolitana_id ELSE pos.regionmetropolitana_id END),-1) = nvl((CASE WHEN s.aliasorigen_id IS NULL THEN pd.regionmetropolitana_id ELSE pds.regionmetropolitana_id END),-2)) THEN 1 ELSE 0 END) as isenta,"); sb.append(" (nvl(b.preciopagado,0) - nvl(b.importetaxaembarque,0) - nvl(b.importepedagio,0) - nvl(b.importeseguro,0) - nvl(b.importeoutros,0)) as valor_tarifa,"); - sb.append(" b.preciopagado as valor_total"); + sb.append(" b.preciopagado as valor_total,"); + sb.append(" (CASE WHEN nvl(case when s.aliasorigen_id is null then po.regionmetropolitana_id else pos.regionmetropolitana_id end, -1) = nvl(case when s.aliasorigen_id is null then pd.regionmetropolitana_id else pds.regionmetropolitana_id end, -2) THEN 1 ELSE 0 END) as reg_metropolitana"); sb.append(" from boleto b"); sb.append(" join empresa e on e.empresa_id = b.empresacorrida_id"); sb.append(" join parada po on po.parada_id = b.origen_id"); @@ -2001,6 +2004,7 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" join parada pd on pd.parada_id = b.destino_id"); sb.append(" join ciudad cd on cd.ciudad_id = pd.ciudad_id"); sb.append(" join estado ed on ed.estado_id = cd.estado_id"); + sb.append(" join parada pd on pd.parada_id = b.destino_id"); sb.append(" left join alias_servico s on s.origen_id = b.origen_id and s.destino_id = b.destino_id and s.corrida_id = b.corrida_id and s.ruta_id = b.ruta_id"); sb.append(" left join parada pos on pos.parada_id = s.aliasorigen_id"); sb.append(" left join ciudad cos on cos.ciudad_id = pos.ciudad_id"); @@ -2008,6 +2012,7 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" left join parada pds on pds.parada_id = s.aliasdestino_id"); sb.append(" left join ciudad cds on cds.ciudad_id = pds.ciudad_id"); sb.append(" left join estado eds on eds.estado_id = cds.estado_id"); + sb.append(" left join parada pds on pds.parada_id = s.aliasdestino_id"); sb.append(" join empresa_imposto ei on ei.empresa_id = b.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" left join empresa_imposto eis on eis.empresa_id = b.empresacorrida_id and eis.estado_id = eos.estado_id"); sb.append(" where"); @@ -2016,7 +2021,7 @@ public class FiscalHibernateDAO implements FiscalDAO { sb.append(" and (b.indstatusboleto like 'V' or b.indstatusboleto like 'C')"); sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END) = 1"); sb.append(" and b.empresacorrida_id = ?"); - sb.append(" and (b.feccorrida >= ? and b.feccorrida >= ?)"); + sb.append(" and (b.feccorrida >= ? and b.feccorrida <= ?)"); sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?"); try { @@ -2034,18 +2039,9 @@ public class FiscalHibernateDAO implements FiscalDAO { registro = new ExportacaoRMDTipoDBP(); registro.setUfDestino(rs.getString("estado_destino")); registro.setCfop(rs.getInt("cod_operacao")); // IM=5357; Serviço IE= 6357 - registro.setValorTotal(rs.getBigDecimal("valor_total")); registro.setUfOrigem(rs.getString("estado_origem")); registro.setMunicipioOrigem(rs.getInt("municipio_origem")); -/* - registro.setValorBaseCalculoICMS(); - registro.setAliquotaICMS(); - registro.setValorICMSDebitado(); - registro.setValorICMSIsento(); - registro.setValorICMSOutros(); -*/ - registro.setCodigoSituacaoTribColunaB(null); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos @@ -2057,6 +2053,49 @@ public class FiscalHibernateDAO implements FiscalDAO { if (registro.getCodigoSituacaoTribColunaB() == null) { registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms") == 0 ? 0 : 20); } + + BigDecimal valorTotal = rs.getBigDecimal("valor_total"); + BigDecimal red_base_calc_icms = rs.getBigDecimal("red_base_calc_icms"); + BigDecimal porc_red_municipal = rs.getBigDecimal("porc_red_municipal"); + BigDecimal porc_red_estadual = rs.getBigDecimal("porc_red_estadual"); + BigDecimal tributacao_importacao = rs.getBigDecimal("tributacao_importacao"); + BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO; + + BigDecimal valorIsenta = BigDecimal.ZERO; + BigDecimal valorIsentaOutros = BigDecimal.ZERO; + + if (rs.getInt("reg_metropolitana") == 1) { + valorIsenta = valorTotal; + valorTotal = BigDecimal.ZERO; + } else { + if (red_base_calc_icms != null) { + valorBaseCalculoICMS = valorTotal.subtract(valorTotal.multiply(red_base_calc_icms.divide(BigDecimal.valueOf(100d)))); + } else { + if (tributacao_importacao != null) { + if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { + if (porc_red_municipal != null) { + BigDecimal porc = tributacao_importacao.subtract(tributacao_importacao.multiply(porc_red_municipal.divide(BigDecimal.valueOf(100d)))); + valorBaseCalculoICMS = valorTotal.multiply(porc.divide(BigDecimal.valueOf(100d))); + } + } else { + if (porc_red_estadual != null) { + BigDecimal porc = tributacao_importacao.subtract(tributacao_importacao.multiply(porc_red_estadual.divide(BigDecimal.valueOf(100d)))); + valorBaseCalculoICMS = valorTotal.multiply(porc.divide(BigDecimal.valueOf(100d))); + } + } + } + } + } + + BigDecimal valorICMS = valorBaseCalculoICMS.multiply(tributacao_importacao); + + registro.setValorBaseCalculoICMS(valorBaseCalculoICMS); + registro.setValorTotal(valorTotal); + registro.setAliquotaICMS(tributacao_importacao); + registro.setValorICMS(valorICMS); + registro.setValorICMSIsento(valorIsenta); + + registro.setValorICMSOutros(valorIsentaOutros); retorno.add(registro); } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/PuntoVentaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/PuntoVentaServiceImpl.java index f1e7ba183..8f3cf9939 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/PuntoVentaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/PuntoVentaServiceImpl.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.rjconsultores.ventaboletos.service.impl; import java.net.MalformedURLException; diff --git a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java index d5124ae3b..bf377aa85 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java @@ -260,7 +260,7 @@ public class ExportacaoFiscal { adicionarRegistroRMDTipoPAR(writer, listaRegistroRMDTipoPAR); adicionarRegistroRMDTipoRMD(writer, listaRegistroRMDTipoRMD); adicionarRegistroRMDTipoBPS(writer, listaRegistroRMDTipoBPS); - adicionarRegistroRMDTipoDBP(writer, listaRegistroRMDTipoBPS); + adicionarRegistroRMDTipoDBP(writer, listaRegistroRMDTipoDBP); writer.close(); @@ -452,35 +452,37 @@ public class ExportacaoFiscal { } } - private void adicionarRegistroRMDTipoDBP(PrintWriter writer, List listaRegistroRMDTipoBPS) { - String ufDestino = "MA"; - Integer cfop = 6357; // IM=5357; Serviço IE= 6357 - BigDecimal valorTotal = new BigDecimal("114.82"); - BigDecimal valorBaseCalculoICMS = new BigDecimal("114.82"); - String aliquotaICMS = "17"; - BigDecimal valorICMSDebitado = new BigDecimal("114.82"); - BigDecimal valorICMSIsento = BigDecimal.ZERO; - BigDecimal valorICMSOutros = BigDecimal.ZERO; - Integer codigoSituacaoTribColunaB = 0; // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos - String ufOrigem = "RN"; - Integer municipioOrigem = 8003; + private void adicionarRegistroRMDTipoDBP(PrintWriter writer, List listaRegistroRMDTipoDBP) { + for (ExportacaoRMDTipoDBP registro : listaRegistroRMDTipoDBP) { + String ufDestino = registro.getUfDestino(); + Integer cfop = registro.getCfop(); // IM=5357; Serviço IE= 6357 + BigDecimal valorTotal = registro.getValorTotal(); + BigDecimal valorBaseCalculoICMS = registro.getValorBaseCalculoICMS(); + BigDecimal aliquotaICMS = registro.getAliquotaICMS(); + BigDecimal valorICMS = registro.getValorICMS(); + BigDecimal valorICMSIsento = registro.getValorICMSIsento(); + BigDecimal valorICMSOutros = registro.getValorICMSOutros(); + Integer codigoSituacaoTribColunaB = registro.getCodigoSituacaoTribColunaB(); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos + String ufOrigem = registro.getUfOrigem(); + Integer municipioOrigem = registro.getMunicipioOrigem(); - StringBuilder sb = new StringBuilder(); - sb.append("DBP").append(SEPARADOR); - sb.append(formataCaracter(ufDestino, true, 2)).append(SEPARADOR); - sb.append(formataNumerico(cfop, true, 4)).append(SEPARADOR); - sb.append(formataValor(valorTotal, 15)).append(SEPARADOR); - sb.append(formataValor(valorBaseCalculoICMS, 15)).append(SEPARADOR); - sb.append(formataCaracter(aliquotaICMS, false, 5)).append(SEPARADOR); - sb.append(formataValor(valorICMSDebitado, 15)).append(SEPARADOR); - sb.append(formataValor(valorICMSIsento, 15)).append(SEPARADOR); - sb.append(formataValor(valorICMSOutros, 15)).append(SEPARADOR); - sb.append(formataNumerico(codigoSituacaoTribColunaB, true, 2)).append(SEPARADOR); - sb.append(formataCaracter(ufOrigem, true, 2)).append(SEPARADOR); - sb.append(formataNumerico(municipioOrigem, true, 5)).append(SEPARADOR); - sb.append(formataCaracter(VAZIO, false, 3)); // Posição 13 - - writer.print(sb.toString() + UtiliteriasFiscal.QUEBRA_LINHA); + StringBuilder sb = new StringBuilder(); + sb.append("DBP").append(SEPARADOR); + sb.append(formataCaracter(ufDestino, true, 2)).append(SEPARADOR); + sb.append(formataNumerico(cfop, true, 4)).append(SEPARADOR); + sb.append(formataValor(valorTotal, 15)).append(SEPARADOR); + sb.append(formataValor(valorBaseCalculoICMS, 15)).append(SEPARADOR); + sb.append(formataValor(aliquotaICMS, 5)).append(SEPARADOR); + sb.append(formataValor(valorICMS, 15)).append(SEPARADOR); + sb.append(formataValor(valorICMSIsento, 15)).append(SEPARADOR); + sb.append(formataValor(valorICMSOutros, 15)).append(SEPARADOR); + sb.append(formataNumerico(codigoSituacaoTribColunaB, true, 2)).append(SEPARADOR); + sb.append(formataCaracter(ufOrigem, true, 2)).append(SEPARADOR); + sb.append(formataNumerico(municipioOrigem, true, 5)).append(SEPARADOR); + sb.append(formataCaracter(VAZIO, false, 3)); // Posição 13 + + writer.print(sb.toString() + UtiliteriasFiscal.QUEBRA_LINHA); + } } private String formataCaracter(String valor, boolean removeMascara, int tamanho) { diff --git a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoRMDTipoDBP.java b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoRMDTipoDBP.java index c84d8de70..356f90a12 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoRMDTipoDBP.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoRMDTipoDBP.java @@ -7,8 +7,8 @@ public class ExportacaoRMDTipoDBP { private Integer cfop; // IM=5357; Serviço IE= 6357 private BigDecimal valorTotal; private BigDecimal valorBaseCalculoICMS; - private String aliquotaICMS; - private BigDecimal valorICMSDebitado; + private BigDecimal aliquotaICMS; + private BigDecimal valorICMS; private BigDecimal valorICMSIsento; private BigDecimal valorICMSOutros; private Integer codigoSituacaoTribColunaB; // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos @@ -51,20 +51,20 @@ public class ExportacaoRMDTipoDBP { this.valorBaseCalculoICMS = valorBaseCalculoICMS; } - public String getAliquotaICMS() { + public BigDecimal getAliquotaICMS() { return aliquotaICMS; } - public void setAliquotaICMS(String aliquotaICMS) { + public void setAliquotaICMS(BigDecimal aliquotaICMS) { this.aliquotaICMS = aliquotaICMS; } - public BigDecimal getValorICMSDebitado() { - return valorICMSDebitado; + public BigDecimal getValorICMS() { + return valorICMS; } - public void setValorICMSDebitado(BigDecimal valorICMSDebitado) { - this.valorICMSDebitado = valorICMSDebitado; + public void setValorICMS(BigDecimal valorICMS) { + this.valorICMS = valorICMS; } public BigDecimal getValorICMSIsento() { @@ -109,6 +109,6 @@ public class ExportacaoRMDTipoDBP { @Override public String toString() { - return "ExportacaoRMDTipoDBP [ufDestino=" + ufDestino + ", cfop=" + cfop + ", valorTotal=" + valorTotal + ", valorBaseCalculoICMS=" + valorBaseCalculoICMS + ", aliquotaICMS=" + aliquotaICMS + ", valorICMSDebitado=" + valorICMSDebitado + ", valorICMSIsento=" + valorICMSIsento + ", valorICMSOutros=" + valorICMSOutros + ", codigoSituacaoTribColunaB=" + codigoSituacaoTribColunaB + ", ufOrigem=" + ufOrigem + ", municipioOrigem=" + municipioOrigem + "]"; + return "ExportacaoRMDTipoDBP [ufDestino=" + ufDestino + ", cfop=" + cfop + ", valorTotal=" + valorTotal + ", valorBaseCalculoICMS=" + valorBaseCalculoICMS + ", aliquotaICMS=" + aliquotaICMS + ", valorICMS=" + valorICMS + ", valorICMSIsento=" + valorICMSIsento + ", valorICMSOutros=" + valorICMSOutros + ", codigoSituacaoTribColunaB=" + codigoSituacaoTribColunaB + ", ufOrigem=" + ufOrigem + ", municipioOrigem=" + municipioOrigem + "]"; } }