From ac3bcfa80a099fbdf0522d4355f1519b5ccf6278 Mon Sep 17 00:00:00 2001 From: alberto Date: Fri, 18 Nov 2016 19:43:32 +0000 Subject: [PATCH] =?UTF-8?q?Exporta=C3=A7=C3=A3o=20Fiscal=20:=20ECF=20e=20R?= =?UTF-8?q?MD=20(issue=208120)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@62738 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../dao/hibernate/FiscalHibernateDAO.java | 195 +++++++++--------- .../exportacaofiscal/ExportacaoFiscal.java | 8 +- .../vo/ExportacaoECFTipoCCF.java | 6 +- .../vo/ExportacaoECFTipoICF.java | 6 +- 4 files changed, 102 insertions(+), 113 deletions(-) diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java index b94a4cf37..3f5ca6cf9 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java @@ -8,7 +8,9 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.sql.DataSource; @@ -1384,42 +1386,12 @@ public class FiscalHibernateDAO implements FiscalDAO { registro.setSituacaoCOO(0); // 0 - Documento Regular; 2 - Documento Cancelado registro.setAcrescimo(null); - // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos - registro.setCodigoSituacaoTribColunaB(null); // FIXME: Falta validar tabela para isentos + registro.setCodigoSituacaoTribColunaB(null); -// if (rs.getString("estado_origem_alias") == null) { -// registro.setUfOrigem(rs.getString("estado_origem")); -// registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem"))); -// registro.setUfDestino(rs.getString("estado_destino")); -// -// // IM=5357; Serviço IE= 6357 -// if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { -// registro.setCfop(5357); -// } else { -// registro.setCfop(6357); -// } -// -// // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos -// if (registro.getCodigoSituacaoTribColunaB() == null) { -// registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms") == 0 ? 0 : 20); -// } -// } else { -// registro.setUfOrigem(rs.getString("estado_origem_alias")); -// registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem_alias"))); -// registro.setUfDestino(rs.getString("estado_destino_alias")); -// -// // IM=5357; Serviço IE= 6357 -// if (rs.getString("estado_origem_alias").equals(rs.getString("estado_destino_alias"))) { -// registro.setCfop(5357); -// } else { -// registro.setCfop(6357); -// } -// -// // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos -// if (registro.getCodigoSituacaoTribColunaB() == null) { -// registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms_alias") == 0 ? 0 : 20); -// } -// } + // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos + if (rs.getInt("isenta") == 1) { + registro.setCodigoSituacaoTribColunaB(40); + } registro.setUfOrigem(rs.getString("estado_origem")); registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem"))); @@ -1440,10 +1412,10 @@ public class FiscalHibernateDAO implements FiscalDAO { registro.setValorTotal(BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100)); // 1 - Demais; 2 - Região Metropolitanao ou seja, quando o campo CSTB for "40", esse campo deve vir "2". Do contrário, deve vir "1" - registro.setTributacaoICMS(9); // FIXME: Falta definir informação para a Exportação Fiscal ECF + registro.setTributacaoICMS(registro.getCodigoSituacaoTribColunaB() == 40 ? 2 : 1); registro.setValorBaseCalculoICMS(BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100)); - registro.setAliquotaICMS("99"); // FIXME: Falta definir informação para a Exportação Fiscal ECF + registro.setAliquotaICMS(BigDecimal.valueOf(rs.getDouble("tributacao_importacao"))); retorno.add(registro); } @@ -1463,40 +1435,54 @@ public class FiscalHibernateDAO implements FiscalDAO { List retorno = new ArrayList(); StringBuilder sb = new StringBuilder(); - sb.append(" select distinct co.codibge as municipio_origem, eo.cveestado as estado_origem, cd.codibge as municipio_destino, ed.cveestado as estado_destino, r4.impsubtotal as valortotal, cos.CODIBGE as municipio_origem_alias, eos.cveestado as estado_origem_alias, cds.CODIBGE as municipio_destino_alias, eds.cveestado as estado_destino_alias, ei.porcredbaseicms as red_base_calc_icms, eis.porcredbaseicms as red_base_calc_icms_alias") - .append(" from fiscal_r4 r4") - .append(" join boleto b on b.boleto_id = r4.boleto_id") - .append(" join parada po on po.parada_id = b.origen_id") - .append(" join ciudad co on co.ciudad_id = po.ciudad_id") - .append(" join estado eo on eo.estado_id = co.estado_id") - .append(" join parada pd on pd.parada_id = b.destino_id") - .append(" join ciudad cd on cd.ciudad_id = pd.ciudad_id") - .append(" join estado ed on ed.estado_id = cd.estado_id") - .append(" join empresa_imposto ei on ei.empresa_id = b.empresacorrida_id and ei.estado_id = ed.estado_id") - .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") - .append(" left join parada pos on pos.parada_id = s.aliasorigen_id") - .append(" left join ciudad cos on cos.ciudad_id = pos.ciudad_id") - .append(" left join estado eos on eos.estado_id = cos.estado_id") - .append(" left join parada pds on pds.parada_id = s.aliasdestino_id") - .append(" left join ciudad cds on cds.ciudad_id = pds.ciudad_id") - .append(" left join estado eds on eds.estado_id = cds.estado_id") - .append(" left join empresa_imposto eis on eis.empresa_id = b.empresacorrida_id and eis.estado_id = eds.estado_id") - .append(" where r4.indvendamanual = 0 and r4.datamov >= ? and r4.datamov <= ?"); + sb.append(" select distinct"); + sb.append(" r4.numserie20 as ecf,"); + sb.append(" (CASE WHEN cos.codibge IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,"); + sb.append(" (CASE WHEN eos.cveestado IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,"); + sb.append(" (CASE WHEN cds.codibge IS NULL THEN cd.codibge ELSE cds.codibge END) as municipio_destino,"); + sb.append(" (CASE WHEN eds.cveestado IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,"); + sb.append(" (CASE WHEN eis.porcredbaseicms IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,"); + sb.append(" (CASE WHEN eis.tributacaoimportacao IS NULL THEN ei.tributacaoimportacao ELSE eis.tributacaoimportacao END) as tributacao_importacao,"); + sb.append(" (CASE WHEN (nvl((CASE WHEN pos.parada_id IS NULL THEN pos.regionmetropolitana_id ELSE po.regionmetropolitana_id END),-1) = nvl((CASE WHEN pds.parada_id IS NULL THEN pds.regionmetropolitana_id ELSE pd.regionmetropolitana_id END),-2)) THEN 1 ELSE 0 END) as isenta,"); + sb.append(" r4.impsubtotal as valortotal"); + sb.append(" from fiscal_r4 r4"); + sb.append(" join fiscal_r2 r2 on r2.numserie20 = r4.numserie20 and r2.datamov = r4.datamov"); + sb.append(" join boleto b on b.boleto_id = r4.boleto_id"); + sb.append(" join parada po on po.parada_id = b.origen_id"); + sb.append(" join ciudad co on co.ciudad_id = po.ciudad_id"); + sb.append(" join estado eo on eo.estado_id = co.estado_id"); + 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 empresa_imposto ei on ei.empresa_id = b.empresacorrida_id and ei.estado_id = ed.estado_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"); + sb.append(" left join estado eos on eos.estado_id = cos.estado_id"); + 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 empresa_imposto eis on eis.empresa_id = b.empresacorrida_id and eis.estado_id = eds.estado_id"); + sb.append(" where r4.datamov >= ? and r4.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN eos.cveestado IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); try { PreparedStatement ps = connection.prepareStatement(sb.toString()); ps.setLong(1, Long.valueOf(DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL))); ps.setLong(2, Long.valueOf(DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL))); - + ps.setLong(3, Long.valueOf(empresaId)); + ps.setString(4, cveestado); + ResultSet rs = ps.executeQuery(); ExportacaoECFTipoICF registro = null; + Map group = new HashMap(); + while (rs.next()) { + BigDecimal aliquotaICMS = BigDecimal.valueOf(rs.getDouble("tributacao_importacao")); BigDecimal valorTotal = BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100); BigDecimal valorBaseCalculoICMS = BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100); - String aliquotaICMS = "99"; // FIXME: Falta definir informação para a Exportação Fiscal ECF - BigDecimal valorICMSDebitado = valorBaseCalculoICMS.multiply(BigDecimal.valueOf(Double.valueOf(aliquotaICMS))); + BigDecimal valorICMSDebitado = valorBaseCalculoICMS.multiply(aliquotaICMS); BigDecimal valorICMSIsento = BigDecimal.ZERO; BigDecimal valorICMSOutros = BigDecimal.ZERO; @@ -1506,57 +1492,60 @@ public class FiscalHibernateDAO implements FiscalDAO { Integer cfop = 0; // IM=5357; Serviço IE= 6357 // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos - Integer codigoSituacaoTribColunaB = null; // FIXME: Falta validar tabela para isentos - - if (rs.getString("estado_origem_alias") == null) { - ufDestino = rs.getString("estado_destino"); - ufOrigem = rs.getString("estado_origem"); - municipioOrigem = Integer.valueOf(rs.getString("municipio_origem")); - - // IM=5357; Serviço IE= 6357 - if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { - cfop = 5357; - } else { - cfop = 6357; - } - - // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos - if (codigoSituacaoTribColunaB == null) { - codigoSituacaoTribColunaB = rs.getInt("red_base_calc_icms") == 0 ? 0 : 20; - } - } else { - ufDestino = rs.getString("estado_origem_alias"); - ufOrigem = rs.getString("estado_origem_alias"); - municipioOrigem = Integer.valueOf(rs.getString("municipio_origem_alias")); - - // IM=5357; Serviço IE= 6357 - if (rs.getString("estado_origem_alias").equals(rs.getString("estado_destino_alias"))) { - cfop = 5357; - } else { - cfop = 6357; - } - - // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos - if (codigoSituacaoTribColunaB == null) { - codigoSituacaoTribColunaB = rs.getInt("red_base_calc_icms_alias") == 0 ? 0 : 20; - } - } + Integer codigoSituacaoTribColunaB = null; - registro = new ExportacaoECFTipoICF(); + if (rs.getInt("isenta") == 1) { + codigoSituacaoTribColunaB = 40; + } + + ufDestino = rs.getString("estado_destino"); + ufOrigem = rs.getString("estado_origem"); + municipioOrigem = rs.getInt("municipio_origem"); + + // IM=5357; Serviço IE= 6357 + if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { + cfop = 5357; + } else { + cfop = 6357; + } + + // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos + if (codigoSituacaoTribColunaB == null) { + codigoSituacaoTribColunaB = rs.getInt("red_base_calc_icms") == 0 ? 0 : 20; + } + + String key = ufDestino + "|" + cfop.toString() + "|" + codigoSituacaoTribColunaB.toString(); + + if (group.containsKey(key)) { + registro = group.get(key); + + valorTotal = valorTotal.add(registro.getValorTotal()); + valorBaseCalculoICMS = valorBaseCalculoICMS.add(registro.getValorBaseCalculoICMS()); + valorICMSDebitado = valorICMSDebitado.add(registro.getValorICMSDebitado()); + valorICMSIsento = valorICMSIsento.add(registro.getValorICMSIsento()); + valorICMSOutros = valorICMSOutros.add(registro.getValorICMSOutros()); + } else { + registro = new ExportacaoECFTipoICF(); + registro.setUfDestino(ufDestino); + registro.setCfop(cfop); // IM=5357; Serviço IE= 6357 + registro.setCodigoSituacaoTribColunaB(codigoSituacaoTribColunaB); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos + registro.setAliquotaICMS(aliquotaICMS); + registro.setUfOrigem(ufOrigem); + registro.setMunicipioOrigem(municipioOrigem); + } + registro.setValorTotal(valorTotal); - registro.setUfDestino(ufDestino); - registro.setCfop(cfop); // IM=5357; Serviço IE= 6357 registro.setValorBaseCalculoICMS(valorBaseCalculoICMS); - registro.setAliquotaICMS(aliquotaICMS); registro.setValorICMSDebitado(valorICMSDebitado); registro.setValorICMSIsento(valorICMSIsento); registro.setValorICMSOutros(valorICMSOutros); - registro.setCodigoSituacaoTribColunaB(codigoSituacaoTribColunaB); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos - registro.setUfOrigem(ufOrigem); - registro.setMunicipioOrigem(municipioOrigem); - - retorno.add(registro); + + group.put(key, registro); } + + for (Map.Entry entry : group.entrySet()) { + retorno.add(entry.getValue()); + } rs.close(); ps.close(); diff --git a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java index 0360794ef..b8e726684 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/ExportacaoFiscal.java @@ -150,7 +150,7 @@ public class ExportacaoFiscal { BigDecimal valorTotal = registro.getValorTotal(); Integer tributacaoICMS = registro.getTributacaoICMS(); // 1 - Demais; 2 - Região Metropolitanao ou seja, quando o campo CSTB for "40", esse campo deve vir "2". Do contrário, deve vir "1" BigDecimal valorBaseCalculoICMS = registro.getValorBaseCalculoICMS(); - String aliquotaICMS = registro.getAliquotaICMS(); + BigDecimal aliquotaICMS = registro.getAliquotaICMS(); StringBuilder sb = new StringBuilder(); sb.append("CCF").append(SEPARADOR); @@ -171,7 +171,7 @@ public class ExportacaoFiscal { sb.append(formataValor(valorTotal, 15)).append(SEPARADOR); sb.append(formataNumerico(tributacaoICMS, true, 1)).append(SEPARADOR); sb.append(formataValor(valorBaseCalculoICMS, 15)).append(SEPARADOR); - sb.append(formataCaracter(aliquotaICMS, false, 5)).append(SEPARADOR); + sb.append(formataValor(aliquotaICMS, 5)).append(SEPARADOR); sb.append("01").append(SEPARADOR); sb.append(formataValor(valorTotal, 15)).append(SEPARADOR); sb.append(formataCaracter(VAZIO, false, 5)).append(SEPARADOR); // Posição 22 @@ -193,7 +193,7 @@ public class ExportacaoFiscal { String ufDestino = registro.getUfDestino(); Integer cfop = registro.getCfop(); // IM=5357; Serviço IE= 6357 BigDecimal valorBaseCalculoICMS = registro.getValorBaseCalculoICMS(); - String aliquotaICMS = registro.getAliquotaICMS(); + BigDecimal aliquotaICMS = registro.getAliquotaICMS(); BigDecimal valorICMSDebitado = registro.getValorICMSDebitado(); BigDecimal valorICMSIsento = registro.getValorICMSIsento(); BigDecimal valorICMSOutros = registro.getValorICMSOutros(); @@ -207,7 +207,7 @@ public class ExportacaoFiscal { sb.append(formataCaracter(ufDestino, true, 2)).append(SEPARADOR); sb.append(formataNumerico(cfop, true, 4)).append(SEPARADOR); sb.append(formataValor(valorBaseCalculoICMS, 15)).append(SEPARADOR); - sb.append(formataCaracter(aliquotaICMS, false, 5)).append(SEPARADOR); + sb.append(formataValor(aliquotaICMS, 5)).append(SEPARADOR); sb.append(formataValor(valorICMSDebitado, 15)).append(SEPARADOR); sb.append(formataValor(valorICMSIsento, 15)).append(SEPARADOR); sb.append(formataValor(valorICMSOutros, 15)).append(SEPARADOR); diff --git a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoCCF.java b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoCCF.java index 6bc8793a8..c95c7ae62 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoCCF.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoCCF.java @@ -17,7 +17,7 @@ public class ExportacaoECFTipoCCF { private BigDecimal valorTotal; private Integer tributacaoICMS; // 1 - Demais; 2 - Região Metropolitanao ou seja, quando o campo CSTB for "40", esse campo deve vir "2". Do contrário, deve vir "1" private BigDecimal valorBaseCalculoICMS; - private String aliquotaICMS; + private BigDecimal aliquotaICMS; public ExportacaoECFTipoCCF() { @@ -135,11 +135,11 @@ public class ExportacaoECFTipoCCF { this.valorBaseCalculoICMS = valorBaseCalculoICMS; } - public String getAliquotaICMS() { + public BigDecimal getAliquotaICMS() { return aliquotaICMS; } - public void setAliquotaICMS(String aliquotaICMS) { + public void setAliquotaICMS(BigDecimal aliquotaICMS) { this.aliquotaICMS = aliquotaICMS; } diff --git a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoICF.java b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoICF.java index 23614bae5..2dce9a213 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoICF.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/exportacaofiscal/vo/ExportacaoECFTipoICF.java @@ -7,7 +7,7 @@ public class ExportacaoECFTipoICF { private String ufDestino; private Integer cfop; // IM=5357; Serviço IE= 6357 private BigDecimal valorBaseCalculoICMS; - private String aliquotaICMS; + private BigDecimal aliquotaICMS; private BigDecimal valorICMSDebitado; private BigDecimal valorICMSIsento; private BigDecimal valorICMSOutros; @@ -51,11 +51,11 @@ public class ExportacaoECFTipoICF { this.valorBaseCalculoICMS = valorBaseCalculoICMS; } - public String getAliquotaICMS() { + public BigDecimal getAliquotaICMS() { return aliquotaICMS; } - public void setAliquotaICMS(String aliquotaICMS) { + public void setAliquotaICMS(BigDecimal aliquotaICMS) { this.aliquotaICMS = aliquotaICMS; }