Exportação Fiscal : ECF e RMD (issue 8120)

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@62738 d1611594-4594-4d17-8e1d-87c2c4800839
master
alberto 2016-11-18 19:43:32 +00:00
parent 4b64b475c4
commit ac3bcfa80a
4 changed files with 102 additions and 113 deletions

View File

@ -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<ExportacaoECFTipoICF> retorno = new ArrayList<ExportacaoECFTipoICF>();
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<String, ExportacaoECFTipoICF> group = new HashMap<String, ExportacaoECFTipoICF>();
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,12 +1492,15 @@ 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
Integer codigoSituacaoTribColunaB = null;
if (rs.getInt("isenta") == 1) {
codigoSituacaoTribColunaB = 40;
}
if (rs.getString("estado_origem_alias") == null) {
ufDestino = rs.getString("estado_destino");
ufOrigem = rs.getString("estado_origem");
municipioOrigem = Integer.valueOf(rs.getString("municipio_origem"));
municipioOrigem = rs.getInt("municipio_origem");
// IM=5357; Serviço IE= 6357
if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
@ -1524,38 +1513,38 @@ public class FiscalHibernateDAO implements FiscalDAO {
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 {
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;
}
}
registro = new ExportacaoECFTipoICF();
registro.setValorTotal(valorTotal);
registro.setUfDestino(ufDestino);
registro.setCfop(cfop); // IM=5357; Serviço IE= 6357
registro.setValorBaseCalculoICMS(valorBaseCalculoICMS);
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.setValorBaseCalculoICMS(valorBaseCalculoICMS);
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<String, ExportacaoECFTipoICF> entry : group.entrySet()) {
retorno.add(entry.getValue());
}
rs.close();

View File

@ -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);

View File

@ -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;
}

View File

@ -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;
}