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

git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@64737 d1611594-4594-4d17-8e1d-87c2c4800839
master
alberto 2017-01-09 20:45:23 +00:00
parent d62de71d2c
commit 7d36dec780
1 changed files with 89 additions and 69 deletions

View File

@ -17,7 +17,12 @@ import javax.sql.DataSource;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.jdbc.Work;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.FiscalDAO; import com.rjconsultores.ventaboletos.dao.FiscalDAO;
@ -44,7 +49,7 @@ import com.rjconsultores.ventaboletos.vo.impressaofiscal.ItemFiscalVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.SituacaoTributaria; import com.rjconsultores.ventaboletos.vo.impressaofiscal.SituacaoTributaria;
@Repository("fiscalDAO") @Repository("fiscalDAO")
public class FiscalHibernateDAO implements FiscalDAO { public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO {
public static final String DATE_FORMAT_FISCAL = "yyyyMMdd"; public static final String DATE_FORMAT_FISCAL = "yyyyMMdd";
private static Logger log = Logger.getLogger(FiscalHibernateDAO.class); private static Logger log = Logger.getLogger(FiscalHibernateDAO.class);
@ -52,7 +57,9 @@ public class FiscalHibernateDAO implements FiscalDAO {
@Autowired @Autowired
private DataSource dataSource; private DataSource dataSource;
public FiscalHibernateDAO() { @Autowired
public FiscalHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
} }
@Override @Override
@ -1624,10 +1631,10 @@ public class FiscalHibernateDAO implements FiscalDAO {
} }
@Override @Override
public List<ExportacaoECFTipoPRC> buscarRegistroECFTipoPRC(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { public List<ExportacaoECFTipoPRC> buscarRegistroECFTipoPRC(final Connection conn, final Date inicio, final Date fim, final Integer empresaId, final String cveestado) {
List<ExportacaoECFTipoPRC> retorno = new ArrayList<ExportacaoECFTipoPRC>(); final List<ExportacaoECFTipoPRC> retorno = new ArrayList<ExportacaoECFTipoPRC>();
StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append(" select ecf, datamov, municipio_origem, estado_origem, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao, SUM(valortotal) as valortotal"); sb.append(" select ecf, datamov, municipio_origem, estado_origem, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao, SUM(valortotal) as valortotal");
sb.append(" from ("); sb.append(" from (");
@ -1664,80 +1671,93 @@ public class FiscalHibernateDAO implements FiscalDAO {
sb.append(" ) group by ecf, datamov, municipio_origem, estado_origem, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao"); sb.append(" ) group by ecf, datamov, municipio_origem, estado_origem, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao");
Session session = null;
try { try {
PreparedStatement ps = connection.prepareStatement(sb.toString()); session = getSessionFactory().openSession();
ps.setLong(1, Long.valueOf(DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL)));
ps.setLong(2, Long.valueOf(DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL))); session.doWork(new Work() {
ps.setLong(3, Long.valueOf(empresaId)); @Override
ps.setString(4, cveestado); public void execute(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ResultSet rs = ps.executeQuery(); ps.setLong(1, Long.valueOf(DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL)));
ps.setLong(2, Long.valueOf(DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL)));
ExportacaoECFTipoPRC registro = null; ps.setLong(3, Long.valueOf(empresaId));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
ExportacaoECFTipoPRC registro = null;
Map<String, ExportacaoECFTipoPRC> group = new HashMap<String, ExportacaoECFTipoPRC>(); Map<String, ExportacaoECFTipoPRC> group = new HashMap<String, ExportacaoECFTipoPRC>();
while (rs.next()) { while (rs.next()) {
BigDecimal valorTotal = BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100); BigDecimal valorTotal = BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100);
BigDecimal red_base_calc_icms = rs.getBigDecimal("red_base_calc_icms"); BigDecimal red_base_calc_icms = rs.getBigDecimal("red_base_calc_icms");
BigDecimal porc_red_municipal = rs.getBigDecimal("porc_red_municipal"); BigDecimal porc_red_municipal = rs.getBigDecimal("porc_red_municipal");
BigDecimal porc_red_estadual = rs.getBigDecimal("porc_red_estadual"); BigDecimal porc_red_estadual = rs.getBigDecimal("porc_red_estadual");
BigDecimal tributacao_importacao = rs.getBigDecimal("tributacao_importacao"); BigDecimal tributacao_importacao = rs.getBigDecimal("tributacao_importacao");
BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO; BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO;
if (red_base_calc_icms != null) { if (red_base_calc_icms != null) {
valorBaseCalculoICMS = valorTotal.subtract(valorTotal.multiply(red_base_calc_icms.divide(BigDecimal.valueOf(100d)))); 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 { } else {
if (porc_red_estadual != null) { if (tributacao_importacao != null) {
BigDecimal porc = tributacao_importacao.subtract(tributacao_importacao.multiply(porc_red_estadual.divide(BigDecimal.valueOf(100d)))); if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
valorBaseCalculoICMS = valorTotal.multiply(porc.divide(BigDecimal.valueOf(100d))); 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 = (tributacao_importacao == null ? BigDecimal.ZERO : valorBaseCalculoICMS.multiply(tributacao_importacao));
String key = rs.getString("ecf") + "|" + rs.getString("datamov") + "|" + rs.getString("estado_origem") + "|" + rs.getString("municipio_origem");
if (group.containsKey(key)) {
registro = group.get(key);
registro.setValorTotal(registro.getValorTotal().add(valorTotal));
registro.setValorBaseCalculoICMS(registro.getValorBaseCalculoICMS().add(valorBaseCalculoICMS));
registro.setValorICMS(registro.getValorICMS().add(valorICMS));
} else {
registro = new ExportacaoECFTipoPRC();
registro.setEcf(rs.getString("ecf"));
registro.setDataEmissao(rs.getString("datamov"));
registro.setUfOrigem(rs.getString("estado_origem"));
registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem")));
registro.setValorTotal(valorTotal);
registro.setValorBaseCalculoICMS(valorBaseCalculoICMS);
registro.setValorICMS(valorICMS);
}
group.put(key, registro);
} }
for (Map.Entry<String, ExportacaoECFTipoPRC> entry : group.entrySet()) {
retorno.add(entry.getValue());
}
rs.close();
ps.close();
} }
});
BigDecimal valorICMS = (tributacao_importacao == null ? BigDecimal.ZERO : valorBaseCalculoICMS.multiply(tributacao_importacao));
String key = rs.getString("ecf") + "|" + rs.getString("datamov") + "|" + rs.getString("estado_origem") + "|" + rs.getString("municipio_origem");
if (group.containsKey(key)) {
registro = group.get(key);
registro.setValorTotal(registro.getValorTotal().add(valorTotal));
registro.setValorBaseCalculoICMS(registro.getValorBaseCalculoICMS().add(valorBaseCalculoICMS));
registro.setValorICMS(registro.getValorICMS().add(valorICMS));
} else {
registro = new ExportacaoECFTipoPRC();
registro.setEcf(rs.getString("ecf"));
registro.setDataEmissao(rs.getString("datamov"));
registro.setUfOrigem(rs.getString("estado_origem"));
registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem")));
registro.setValorTotal(valorTotal);
registro.setValorBaseCalculoICMS(valorBaseCalculoICMS);
registro.setValorICMS(valorICMS);
}
group.put(key, registro);
}
for (Map.Entry<String, ExportacaoECFTipoPRC> entry : group.entrySet()) {
retorno.add(entry.getValue());
}
rs.close();
ps.close();
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} finally {
session.close();
} }
return retorno; return retorno;