AdmMono/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java

2782 lines
155 KiB
Java
Raw Blame History

package com.rjconsultores.ventaboletos.dao.hibernate;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.apache.commons.lang.StringUtils;
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.Qualifier;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import com.rjconsultores.ventaboletos.dao.FiscalDAO;
import com.rjconsultores.ventaboletos.entidad.Aidf;
import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.MoneyHelper;
import com.rjconsultores.ventaboletos.utilerias.StringHelper;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoECFTipoCCF;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoECFTipoCFC;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoECFTipoICF;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoECFTipoPRC;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoRMDTipoBPS;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoRMDTipoDBP;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoRMDTipoPAR;
import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoRMDTipoRMD;
import com.rjconsultores.ventaboletos.utilerias.impressaormd.vo.DetalhadoRMD;
import com.rjconsultores.ventaboletos.utilerias.impressaormd.vo.ImpressaoRMD;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalReducaoZVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionManualFiscalVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionNaoFiscalVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.ItemFiscalVO;
import com.rjconsultores.ventaboletos.vo.impressaofiscal.SituacaoTributaria;
@Repository("fiscalDAO")
public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO {
private static final String DATE_FORMAT_FISCAL = "yyyyMMdd";
private static Logger log = Logger.getLogger(FiscalHibernateDAO.class);
@Autowired
private DataSource dataSource;
@Autowired
public FiscalHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
setSessionFactory(factory);
}
private boolean isEstadoTodos(Integer estadoId) {
if (estadoId == -1 || estadoId == null)
return true;
else
return false;
}
@Override
public List<ImportacionManualFiscalVO> buscaDatosFiscaisECFManual(Date inicio, Date fim, Integer empresaId, Integer estadoId, 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, ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.marca_id as empresaId, ");
sql.append(" e.nombempresa as empresa, ");
sql.append(" to_char(b.fechorventa, 'yyyyMMdd') as dataEmissao, ");
sql.append(" b.preciopagado as valorTotal, ");
sql.append(" co.codibge as origenId, ");
sql.append(" eo.cveestado as origenUf, ");
sql.append(" cd.codibge as destinoId, ");
sql.append(" ed.cveestado as destinoUf, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" b.preciopagado as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" b.numseriepreimpresa as serie, ");
sql.append(" eio.icms as icms, ");
sql.append(" eio.porctributo as porctributo, ");
sql.append(" eo.estado_id as estadoIdOrigen, ");
sql.append(" ed.estado_id as estadoIdDestino, ");
sql.append(" subserie as subSerie, ");
sql.append(" docfiscal as aidf, ");
sql.append(" fi.numserie as numpdv,");
sql.append(" fi.modelo as modeloImpressora,");
sql.append(" r4.usuario_id as numCaixa,");
sql.append(" case b.importetaxaembarque when 0 then null else b.importetaxaembarque ");
sql.append(" end as importetaxaembarque, ");
sql.append(" case b.importepedagio when 0 then null else b.importepedagio ");
sql.append(" end as importepedagio, ");
sql.append(" case b.importeoutros when 0 then null else b.importeoutros ");
sql.append(" end as importeoutros, ");
sql.append(" case b.importeseguro when 0 then null else b.importeseguro ");
sql.append(" end as importeseguro, ");
sql.append(" case when b.indstatusboleto = 'V' or b.motivocancelacion_id is null THEN 'N' ELSE 'C' END status, ");
sql.append(" cs.descclase as claseServicio ");
sql.append("from boleto b ");
sql.append(" left join fiscal_r4 r4 on b.boleto_id = r4.boleto_id ");
sql.append(" left outer join fiscal_r5 r5 on r4.numserie20 = r5.numserie20 ");
sql.append(" and r4.coo = r5.coo ");
sql.append(" left outer join fiscal_impressora fi on fi.numserie20 = r4.numserie20 ");
sql.append(" inner join empresa e on e.empresa_id = b.marca_id ");
sql.append(" left join alias_servico ase ON ase.origen_id = b.origen_id ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" left join parada o on coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" left join ciudad co on o.ciudad_id = co.ciudad_id ");
sql.append(" left join estado eo on co.estado_id = eo.estado_id ");
sql.append(" left join empresa_imposto eio on eo.estado_id = eio.estado_id ");
sql.append(" and eio.activo = 1 ");
sql.append(" and b.marca_id = eio.empresa_id ");
sql.append(" left join parada d on coalesce(ase.aliasdestino_id, b.destino_id) = d.parada_id ");
sql.append(" left join ciudad cd on d.ciudad_id = cd.ciudad_id ");
sql.append(" left join estado ed on cd.estado_id = ed.estado_id ");
sql.append(" left join aidf a on a.serie = b.numseriepreimpresa ");
sql.append(" and eo.estado_id = a.estado_id ");
sql.append(" and a.empresa_id = e.empresa_id ");
sql.append(" inner join clase_servicio cs ON cs.claseservicio_id = b.claseservicio_id ");
sql.append("WHERE b.fechorventa BETWEEN ? AND ? ");
sql.append(" AND b.empresacorrida_id = ? ");
sql.append(isEstadoTodos(estadoId) ? "" : " AND eo.estado_id = ? ");
sql.append(" AND b.tipoventa_id = 3 ");
sql.append(" AND (b.preciopagado > 0 OR b.importetaxaembarque > 0 OR b.importepedagio > 0) ");
sql.append("GROUP BY r4.numserie20, ");
sql.append(" COALESCE(r4.coo, b.numfoliopreimpreso), ");
sql.append(" b.boleto_id, ");
sql.append(" b.marca_id, ");
sql.append(" e.nombempresa, ");
sql.append(" TO_CHAR(b.fechorventa, 'yyyyMMdd'), ");
sql.append(" b.preciopagado, ");
sql.append(" co.codibge, ");
sql.append(" cd.codibge, ");
sql.append(" r5.totparcial, ");
sql.append(" b.preciopagado, ");
sql.append(" r5.tipopassagem, ");
sql.append(" r5.numitem, ");
sql.append(" r5.codproduto, ");
sql.append(" b.numseriepreimpresa, ");
sql.append(" eio.icms, ");
sql.append(" eio.porctributo, ");
sql.append(" eo.estado_id, ");
sql.append(" ed.estado_id, ");
sql.append(" subserie, ");
sql.append(" docfiscal, ");
sql.append(" b.importetaxaembarque, ");
sql.append(" b.importepedagio, ");
sql.append(" b.importeoutros, ");
sql.append(" b.importeseguro, ");
sql.append(" fi.numserie, ");
sql.append(" fi.modelo, ");
sql.append(" r4.usuario_id, ");
sql.append(" eo.cveestado, ");
sql.append(" ed.cveestado, ");
sql.append(" b.motivocancelacion_id, ");
sql.append(" b.indstatusboleto, ");
sql.append(" cs.descclase ");
sql.append("ORDER BY dataEmissao, coo, modeloImpressora ");
List<ImportacionManualFiscalVO> listManuais = new ArrayList<ImportacionManualFiscalVO>();
stmt = connection.prepareStatement(sql.toString());
stmt.setFetchSize(100);
stmt.setTimestamp(1, new java.sql.Timestamp(DateUtil.inicioFecha(inicio).getTime()));
stmt.setTimestamp(2, new java.sql.Timestamp(DateUtil.fimFecha(fim).getTime()));
stmt.setInt(3, empresaId);
if (!isEstadoTodos(estadoId))
stmt.setInt(4, estadoId);
rset = stmt.executeQuery();
while (rset.next()) {
ImportacionManualFiscalVO item = new ImportacionManualFiscalVO();
item.setNumImpressora(rset.getString("numImpressora"));
item.setCoo(rset.getString("coo"));
item.setBoletoId(rset.getLong("boletoId"));
item.setEmpresaId(rset.getInt("empresaId"));
item.setDataEmissao(rset.getString("dataEmissao"));
item.setValorTotal(rset.getBigDecimal("valorTotal"));
item.setNumItem(rset.getString("numItem"));
item.setCodProduto(rset.getString("codProduto"));
item.setNumpdv(rset.getString("numpdv"));
item.setRepTributado(rset.getString("repTributado"));
item.setTipoPassagem(rset.getString("tipoPassagem"));
item.setValorItem(rset.getBigDecimal("valorItem"));
item.setOrigenId(rset.getInt("origenId"));
item.setOrigenUf(rset.getString("origenUf"));
item.setDestinoId(rset.getInt("destinoId"));
item.setDestinoUf(rset.getString("destinoUf"));
item.setModeloImpressora(rset.getString("modeloImpressora"));
item.setNumCaixa(rset.getString("numCaixa"));
item.setStatus(rset.getString("status"));
item.setSerie(rset.getString("serie"));
item.setIcms(rset.getBigDecimal("icms"));
item.setPorctributo(rset.getBigDecimal("porctributo"));
item.setEstadoIdOrigen(rset.getInt("estadoIdOrigen"));
item.setEstadoIdDestino(rset.getInt("estadoIdDestino"));
item.setImportetaxaembarque(rset.getBigDecimal("importetaxaembarque"));
item.setImportepedagio(rset.getBigDecimal("importepedagio"));
item.setImporteoutros(rset.getBigDecimal("importeoutros"));
item.setImporteseguro(rset.getBigDecimal("importeseguro"));
item.setSubSerie(rset.getString("subSerie"));
item.setAidf(rset.getString("aidf"));
item.setClaseServicio(rset.getString("claseServicio"));
listManuais.add(item);
}
return listManuais;
}
private String sqlFiscaisReducaoZPendencia(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r2.datamov AS datamov, ");
sql.append(" r2.numreducoes AS numreducoes, ");
sql.append(" r2.crz AS crz, ");
sql.append(" r2.numserie20 AS numserie20, ");
sql.append(" r2.coo AS coo, ");
sql.append(" r2.cooinicial AS cooinicial, ");
sql.append(" r2.coofinal AS coofinal, ");
sql.append(" r2.vendabrutadiaria AS vendabrutadiaria, ");
sql.append(" r2.datareducao AS datareducao, ");
sql.append(" r2.horareducao AS horareducao, ");
sql.append(" r3.totparcial AS aliquota, ");
sql.append(" r3.valoracumulado AS imposto, ");
sql.append(" ifi.numserie AS numpdv, ");
sql.append(" TRANSLATE(t2.cnpj, ' / - . ', ' ') AS cnpj,");
sql.append(" r2.totgeral AS gtFinal, ");
sql.append(" anterior.totgeral AS gtInicial, ");
sql.append(" CASE WHEN r3.totparcial = 'Can-T' THEN 'CANCELADO' ");
sql.append(" WHEN r3.totparcial = 'DT' THEN 'DESCONTO' ELSE '' END AS status ");
sql.append("FROM fiscal_r2 r2 ");
sql.append(" inner join fiscal_impressora ifi ");
sql.append(" ON ifi.numserie20 = r2.numserie20 ");
sql.append(" inner join fiscal_r3 r3 ");
sql.append(" ON r3.crz = r2.crz ");
sql.append(" AND r2.numserie20 = r3.numserie20 ");
sql.append(" AND r3.datamov = r2.datamov ");
sql.append(" AND r3.fiscalimpressora_id = ifi.fiscalimpressora_id ");
sql.append(" inner join fiscal_t2 t2 ");
sql.append(" ON ifi.fiscalimpressora_id = t2.fiscalimpressora_id ");
sql.append(" inner join empresa e ON (TRANSLATE(t2.cnpj, ' / - . ', ' ') = (TRANSLATE(e.cnpj, ' / - . ', ' ')) ) or ");
sql.append(" (TRANSLATE(t2.cnpj, ' / - . ', ' ') in ");
sql.append(" (select TRANSLATE(cnpj, ' / - . ', ' ') from inscricao_estadual where empresa_id = ? and activo = 1 )) ");
sql.append(" inner join inscricao_estadual ie ON e.empresa_id = ie.empresa_id, ");
sql.append(" (SELECT numserie20, crz, totgeral ");
sql.append(" FROM fiscal_r2) anterior ");
sql.append("WHERE r2.datamov BETWEEN ? AND ? ");
sql.append(" AND r2.activo = 1 ");
sql.append(" AND e.empresa_id = ? ");
sql.append(isEstadoTodos ? "" : " AND ie.estado_id = ? ");
sql.append(" AND r3.totparcial IN (");
sql.append("'" + SituacaoTributaria.CANCELADO.getValue() + "'").append(", ");
sql.append("'" + SituacaoTributaria.DESCONTO.getValue() + "'").append(")");
sql.append(" AND anterior.numserie20 = r2.numserie20 ");
sql.append(" AND anterior.crz = r2.crz - 1 ");
sql.append(" AND (SELECT MAX(fiscalr4_id) FROM fiscal_r4 r4 WHERE r4.numserie20 = r2.numserie20 ");
sql.append(" AND r4.datamov = r2.datamov) IS NOT NULL ");
sql.append("GROUP BY r2.datamov, ");
sql.append(" r2.numreducoes, ");
sql.append(" r2.crz, ");
sql.append(" r2.numserie20, ");
sql.append(" r2.coo, ");
sql.append(" r2.cooinicial, ");
sql.append(" r2.coofinal, ");
sql.append(" r2.vendabrutadiaria, ");
sql.append(" r2.datareducao, ");
sql.append(" r2.horareducao, ");
sql.append(" r3.totparcial, ");
sql.append(" r3.valoracumulado, ");
sql.append(" ifi.numserie, ");
sql.append(" t2.cnpj, ");
sql.append(" r2.totgeral, ");
sql.append(" anterior.totgeral ");
sql.append("ORDER BY r2.datamov, ");
sql.append(" numserie20, ");
sql.append(" crz, ");
sql.append(" r2.numreducoes, ");
sql.append(" r3.totparcial desc ");
return sql.toString();
}
private String sqlFiscaisReducaoZPendenciaInconcistencias(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r2.datamov AS datamov, ");
sql.append(" r2.numreducoes AS numreducoes, ");
sql.append(" r2.crz AS crz, ");
sql.append(" r2.numserie20 AS numserie20, ");
sql.append(" r2.coo AS coo, ");
sql.append(" r2.cooinicial AS cooinicial, ");
sql.append(" r2.coofinal AS coofinal, ");
sql.append(" r2.vendabrutadiaria AS vendabrutadiaria, ");
sql.append(" r2.datareducao AS datareducao, ");
sql.append(" r2.horareducao AS horareducao, ");
sql.append(" r3.totparcial AS aliquota, ");
sql.append(" r3.valoracumulado AS imposto, ");
sql.append(" ifi.numserie AS numpdv, ");
sql.append(" TRANSLATE(t2.cnpj, ' / - . ', ' ') AS cnpj,");
sql.append(" r2.totgeral AS gtFinal, ");
sql.append(" anterior.totgeral AS gtInicial, ");
sql.append(" 'INCONSISTENTE' AS status ");
sql.append("FROM fiscal_r2 r2 ");
sql.append(" inner join fiscal_impressora ifi ");
sql.append(" ON ifi.numserie20 = r2.numserie20 ");
sql.append(" inner join fiscal_r3 r3 ");
sql.append(" ON r3.crz = r2.crz ");
sql.append(" AND r2.numserie20 = r3.numserie20 ");
sql.append(" AND r3.datamov = r2.datamov ");
sql.append(" AND r3.fiscalimpressora_id = ifi.fiscalimpressora_id ");
sql.append(" inner join fiscal_t2 t2 ");
sql.append(" ON ifi.fiscalimpressora_id = t2.fiscalimpressora_id ");
sql.append(" inner join empresa e ON (TRANSLATE(t2.cnpj, ' / - . ', ' ') = (TRANSLATE(e.cnpj, ' / - . ', ' ')) ) or ");
sql.append(" (TRANSLATE(t2.cnpj, ' / - . ', ' ') in ");
sql.append(" (select TRANSLATE(cnpj, ' / - . ', ' ') from inscricao_estadual where empresa_id = ? and activo = 1 )) ");
sql.append(" inner join inscricao_estadual ie ON e.empresa_id = ie.empresa_id, ");
sql.append(" (SELECT numserie20, crz, totgeral ");
sql.append(" FROM fiscal_r2) anterior ");
sql.append("WHERE r2.datamov BETWEEN ? AND ? ");
sql.append(" AND r2.activo = 1 ");
sql.append(" AND e.empresa_id = ? ");
sql.append(isEstadoTodos ? "" : " AND ie.estado_id = ? ");
sql.append(" AND r3.totparcial not in (");
sql.append("'" + SituacaoTributaria.NAO_FISCAL.getValue() + "'").append(")");
sql.append(" AND anterior.numserie20 = r2.numserie20 ");
sql.append(" AND anterior.crz = r2.crz - 1 ");
sql.append(" AND (SELECT MAX(fiscalr4_id) FROM fiscal_r4 r4 WHERE r4.numserie20 = r2.numserie20 ");
sql.append(" AND r4.datamov = r2.datamov) IS NULL ");
sql.append("GROUP BY r2.datamov, ");
sql.append(" r2.numreducoes, ");
sql.append(" r2.crz, ");
sql.append(" r2.numserie20, ");
sql.append(" r2.coo, ");
sql.append(" r2.cooinicial, ");
sql.append(" r2.coofinal, ");
sql.append(" r2.vendabrutadiaria, ");
sql.append(" r2.datareducao, ");
sql.append(" r2.horareducao, ");
sql.append(" r3.totparcial, ");
sql.append(" r3.valoracumulado, ");
sql.append(" ifi.numserie, ");
sql.append(" t2.cnpj, ");
sql.append(" r2.totgeral, ");
sql.append(" anterior.totgeral ");
sql.append("ORDER BY r2.datamov, ");
sql.append(" numserie20, ");
sql.append(" crz, ");
sql.append(" r2.numreducoes, ");
sql.append(" r3.totparcial desc ");
return sql.toString();
}
private String sqlFiscaisReducaoZ(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r2.datamov AS datamov, ");
sql.append(" r2.numreducoes AS numreducoes, ");
sql.append(" r2.crz AS crz, ");
sql.append(" r2.numserie20 AS numserie20, ");
sql.append(" r2.coo AS coo, ");
sql.append(" r2.cooinicial AS cooinicial, ");
sql.append(" r2.coofinal AS coofinal, ");
sql.append(" r2.vendabrutadiaria AS vendabrutadiaria, ");
sql.append(" r2.datareducao AS datareducao, ");
sql.append(" r2.horareducao AS horareducao, ");
sql.append(" r3.totparcial AS aliquota, ");
sql.append(" r3.valoracumulado AS imposto, ");
sql.append(" ifi.numserie AS numpdv, ");
sql.append(" TRANSLATE(t2.cnpj, ' / - . ', ' ') AS cnpj,");
sql.append(" r2.totgeral AS gtFinal, ");
sql.append(" anterior.totgeral AS gtInicial, ");
sql.append(" 'NORMAL' AS status ");
sql.append("FROM fiscal_r2 r2 ");
sql.append(" inner join fiscal_impressora ifi ");
sql.append(" ON ifi.numserie20 = r2.numserie20 ");
sql.append(" inner join fiscal_r3 r3 ");
sql.append(" ON r3.crz = r2.crz ");
sql.append(" AND r2.numserie20 = r3.numserie20 ");
sql.append(" AND r3.datamov = r2.datamov ");
sql.append(" AND r3.fiscalimpressora_id = ifi.fiscalimpressora_id ");
sql.append(" inner join fiscal_t2 t2 ");
sql.append(" ON ifi.fiscalimpressora_id = t2.fiscalimpressora_id ");
sql.append(" inner join empresa e ON (TRANSLATE(t2.cnpj, ' / - . ', ' ') = (TRANSLATE(e.cnpj, ' / - . ', ' ')) ) or ");
sql.append(" (TRANSLATE(t2.cnpj, ' / - . ', ' ') in ");
sql.append(" (select TRANSLATE(cnpj, ' / - . ', ' ') from inscricao_estadual where empresa_id = ? and activo = 1 )) ");
sql.append(" inner join inscricao_estadual ie ON e.empresa_id = ie.empresa_id, ");
sql.append(" (SELECT numserie20, crz, totgeral ");
sql.append(" FROM fiscal_r2) anterior ");
sql.append("WHERE r2.datamov BETWEEN ? AND ? ");
sql.append(" AND r2.activo = 1 ");
sql.append(" AND e.empresa_id = ? ");
sql.append(isEstadoTodos ? "" : " AND ie.estado_id = ? ");
sql.append(" AND r3.totparcial not in (");
sql.append("'" + SituacaoTributaria.NAO_FISCAL.getValue() + "'").append(")");
sql.append(" AND anterior.numserie20 = r2.numserie20 ");
sql.append(" AND anterior.crz = r2.crz - 1 ");
sql.append(" AND r2.vendabrutadiaria > 0 ");
sql.append("GROUP BY r2.datamov, ");
sql.append(" r2.numreducoes, ");
sql.append(" r2.crz, ");
sql.append(" r2.numserie20, ");
sql.append(" r2.coo, ");
sql.append(" r2.cooinicial, ");
sql.append(" r2.coofinal, ");
sql.append(" r2.vendabrutadiaria, ");
sql.append(" r2.datareducao, ");
sql.append(" r2.horareducao, ");
sql.append(" r3.totparcial, ");
sql.append(" r3.valoracumulado, ");
sql.append(" ifi.numserie, ");
sql.append(" t2.cnpj, ");
sql.append(" r2.totgeral, ");
sql.append(" anterior.totgeral ");
sql.append("ORDER BY r2.datamov, ");
sql.append(" numserie20, ");
sql.append(" crz, ");
sql.append(" r2.numreducoes, ");
// TODO: No ambiente de produ<64><75>o a ordena<6E><61>o so vem correta quando declarado para vir como desc
// contrario aos outros servidores que deve ser asc
sql.append(" r3.totparcial desc ");
return sql.toString();
}
@Override
public List<ImportacionFiscalReducaoZVO> buscaDatosFiscaisReducaoZ(Date inicio, Date fim, Integer empresaId, Integer estadoId, boolean isPendencias, Connection connection) throws SQLException {
if (isPendencias) {
List<ImportacionFiscalReducaoZVO> list = new ArrayList<ImportacionFiscalReducaoZVO>();
list.addAll(montarItensReducaoZ(inicio, fim, empresaId, estadoId, sqlFiscaisReducaoZPendencia(isEstadoTodos(estadoId)), connection));
list.addAll(montarItensReducaoZ(inicio, fim, empresaId, estadoId, sqlFiscaisReducaoZPendenciaInconcistencias(isEstadoTodos(estadoId)), connection));
return list;
} else {
return montarItensReducaoZ(inicio, fim, empresaId, estadoId, sqlFiscaisReducaoZ(isEstadoTodos(estadoId)), connection);
}
}
private List<ImportacionFiscalReducaoZVO> montarItensReducaoZ(Date inicio, Date fim, Integer empresaId, Integer estadoId, String sql, Connection connection) throws SQLException {
List<ImportacionFiscalReducaoZVO> listRedZ = new ArrayList<ImportacionFiscalReducaoZVO>();
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setFetchSize(100);
stmt.setInt(1, empresaId);
stmt.setString(2, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL));
stmt.setString(3, DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL));
stmt.setInt(4, empresaId);
if (!isEstadoTodos(estadoId))
stmt.setInt(5, estadoId);
ResultSet rset = stmt.executeQuery();
while (rset.next()) {
ImportacionFiscalReducaoZVO item = new ImportacionFiscalReducaoZVO();
item.setDatamov(rset.getString("datamov"));
item.setNumreducoes(rset.getString("numreducoes"));
item.setCrz(rset.getString("crz"));
item.setNumserie20(rset.getString("numserie20"));
item.setCoo(rset.getString("coo"));
item.setCooinicial(rset.getString("cooinicial"));
item.setCoofinal(rset.getString("coofinal"));
item.setVendabrutadiaria(rset.getBigDecimal("vendabrutadiaria"));
item.setDatareducao(rset.getString("datareducao"));
item.setHorareducao(rset.getString("horareducao"));
item.setAliquota(rset.getString("aliquota"));
item.setImposto(rset.getBigDecimal("imposto"));
item.setNumpdv(rset.getString("numpdv"));
item.setCnpj(rset.getString("cnpj"));
item.setGtFinal(rset.getBigDecimal("gtFinal"));
item.setGtInicial(rset.getBigDecimal("gtInicial"));
item.setStatus(rset.getString("status"));
listRedZ.add(item);
}
return listRedZ;
}
private String sqlFiscaisECFCancelados(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r4.numserie20 as numImpressora, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.imptotalliquido as valorTotal, ");
sql.append(" r4.datamov as dataEmissao, ");
sql.append(" r4.cpfcnpjcliente as cnpjCliente, ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.marca_id as empresaId, ");
sql.append(" co.codibge as origenId, ");
sql.append(" eo.cveestado as origenUf, ");
sql.append(" cd.codibge as destinoId, ");
sql.append(" ed.cveestado as destinoUf, ");
sql.append(" fi.numcnpj as cnpjImpressora, ");
sql.append(" fi.numserie as numpdv, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" r5.imptotalliquido as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" fi.modelo as modeloImpressora, ");
sql.append(" r4.usuario_id as numCaixa, ");
sql.append(" b.preciopagado as importetarifa, ");
sql.append(" b.importetaxaembarque as importetaxaembarque, ");
sql.append(" b.importepedagio as importepedagio, ");
sql.append(" b.importeseguro as importeseguro, ");
sql.append(" 'C' as status, ");
sql.append(" b.motivocancelacion_id as motivocancelacion, ");
sql.append(" ee.impingreso as valorMulta, ");
sql.append(" cs.descclase as claseServicio, ");
sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf ");
sql.append(" FROM fiscal_r4 r4 ");
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(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id ");
sql.append(" INNER JOIN boleto be ON b.boleto_id = be.boletooriginal_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) ");
sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = b.origen_id ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" INNER JOIN ciudad co ON o.ciudad_id = co.ciudad_id ");
sql.append(" INNER JOIN estado eo ON eo.estado_id = co.estado_id ");
sql.append(" INNER JOIN parada d ON coalesce(ase.aliasdestino_id, b.destino_id) = d.parada_id ");
sql.append(" INNER JOIN ciudad cd ON d.ciudad_id = cd.ciudad_id ");
sql.append(" INNER JOIN estado ed ON ed.estado_id = cd.estado_id ");
sql.append(" WHERE be.fechorventa BETWEEN ? AND ? ");
sql.append(" AND be.empresacorrida_id = ? ");
sql.append(isEstadoTodos ? "" : " AND eo.estado_id = ? ");
sql.append(" AND b.motivocancelacion_id IN (31,32,10) ");
sql.append(" AND be.indstatusboleto = 'C' ");
sql.append(" AND r4.indcancelamento = 'N' ");
sql.append(" GROUP BY r4.numserie20, ");
sql.append(" r4.coo, ");
sql.append(" r4.datamov, ");
sql.append(" r4.cpfcnpjcliente, ");
sql.append(" r4.imptotalliquido, ");
sql.append(" b.boleto_id, ");
sql.append(" b.marca_id, ");
sql.append(" co.codibge, ");
sql.append(" cd.codibge, ");
sql.append(" fi.numcnpj, ");
sql.append(" fi.numserie, ");
sql.append(" r5.impdesconto, ");
sql.append(" r5.totparcial, ");
sql.append(" r5.imptotalliquido, ");
sql.append(" r5.tipopassagem, ");
sql.append(" r5.numitem, ");
sql.append(" r5.codproduto, ");
sql.append(" fi.modelo, ");
sql.append(" r4.usuario_id, ");
sql.append(" eo.cveestado, ");
sql.append(" ed.cveestado, ");
sql.append(" b.motivocancelacion_id, ");
sql.append(" ee.impingreso, ");
sql.append(" b.preciopagado, ");
sql.append(" b.importetaxaembarque, ");
sql.append(" b.importepedagio, ");
sql.append(" b.importeseguro, ");
sql.append(" cs.descclase, ");
sql.append(" fi.numcnpj ");
sql.append(" ORDER BY r4.datamov, ");
sql.append(" r4.numserie20, ");
sql.append(" r4.coo, ");
sql.append(" r5.numitem ");
return sql.toString();
}
private String sqlFiscaisECF(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r4.numserie20 as numImpressora, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.imptotalliquido as valorTotal, ");
sql.append(" r4.datamov as dataEmissao, ");
sql.append(" r4.cpfcnpjcliente as cnpjCliente, ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.marca_id as empresaId, ");
sql.append(" co.codibge as origenId, ");
sql.append(" eo.cveestado as origenUf, ");
sql.append(" cd.codibge as destinoId, ");
sql.append(" ed.cveestado as destinoUf, ");
sql.append(" fi.numcnpj as cnpjImpressora, ");
sql.append(" fi.numserie as numpdv, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" r5.imptotalliquido as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" fi.modelo as modeloImpressora, ");
sql.append(" r4.usuario_id as numCaixa, ");
sql.append(" b.preciopagado as importetarifa, ");
sql.append(" b.importetaxaembarque as importetaxaembarque, ");
sql.append(" b.importepedagio as importepedagio, ");
sql.append(" b.importeseguro as importeseguro, ");
sql.append(" cs.descclase as claseServicio, ");
sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf, ");
sql.append(" ei.icms as impostoEstado, ");
sql.append(" 'N' as status, ");
sql.append(" r4.indcancelamento as indcancelamento ");
sql.append(" FROM fiscal_r4 r4 ");
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(" 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 ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" INNER JOIN ciudad co ON o.ciudad_id = co.ciudad_id ");
sql.append(" INNER JOIN estado eo ON eo.estado_id = co.estado_id ");
sql.append(" LEFT JOIN empresa_imposto ei ON b.marca_id = ei.empresa_id ").append(isEstadoTodos ? "" : " AND ei.estado_id = eo.estado_id ");
sql.append(" INNER JOIN parada d ON coalesce(ase.aliasdestino_id, b.destino_id) = d.parada_id ");
sql.append(" INNER JOIN ciudad cd ON d.ciudad_id = cd.ciudad_id ");
sql.append(" INNER JOIN estado ed ON ed.estado_id = cd.estado_id ");
sql.append(" WHERE r4.datamov BETWEEN ? AND ? ");
sql.append(" AND b.empresacorrida_id = ? ");
sql.append(isEstadoTodos ? "" : " AND eo.estado_id = ? ");
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.datamov, ");
sql.append(" r4.cpfcnpjcliente, ");
sql.append(" r4.imptotalliquido, ");
sql.append(" b.boleto_id, ");
sql.append(" b.marca_id, ");
sql.append(" co.codibge, ");
sql.append(" cd.codibge, ");
sql.append(" fi.numcnpj, ");
sql.append(" fi.numserie, ");
sql.append(" r5.impdesconto, ");
sql.append(" r5.totparcial, ");
sql.append(" r5.imptotalliquido, ");
sql.append(" r5.tipopassagem, ");
sql.append(" r5.numitem, ");
sql.append(" r5.codproduto, ");
sql.append(" fi.modelo, ");
sql.append(" r4.usuario_id, ");
sql.append(" eo.cveestado, ");
sql.append(" ed.cveestado, ");
sql.append(" b.preciopagado, ");
sql.append(" b.importetaxaembarque, ");
sql.append(" b.importepedagio, ");
sql.append(" b.importeseguro, ");
sql.append(" cs.descclase, ");
sql.append(" fi.numcnpj, ");
sql.append(" ei.icms, ");
sql.append(" r4.indcancelamento ");
sql.append(" ORDER BY r4.datamov, ");
sql.append(" r4.numserie20, ");
sql.append(" r4.coo, ");
sql.append(" r5.numitem ");
return sql.toString();
}
private String sqlFiscaisECFPendenciasDesconto(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append(" SELECT r4.numserie20 as numImpressora, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.imptotalliquido as valorTotal, ");
sql.append(" r4.datamov as dataEmissao, ");
sql.append(" r4.cpfcnpjcliente as cnpjCliente, ");
sql.append(" fi.numcnpj as cnpjImpressora, ");
sql.append(" fi.numserie as numpdv, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" r5.imptotalliquido as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" fi.modelo as modeloImpressora, ");
sql.append(" r4.usuario_id as numCaixa, ");
sql.append(" r5.impdesconto as desconto, ");
sql.append(" 'DESCONTO' as status");
sql.append(" FROM fiscal_r4 r4 ");
sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id ");
sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = b.origen_id ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" INNER JOIN ciudad co ON o.ciudad_id = co.ciudad_id ");
sql.append(" INNER 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(" LEFT JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 AND fi.fiscalimpressora_id = r5.fiscalimpressora_id ");
sql.append(" WHERE r4.datamov BETWEEN ? AND ? ");
sql.append(" AND b.empresacorrida_id = ? ");
sql.append(isEstadoTodos ? "" : " AND co.estado_id = ? ");
sql.append(" AND r5.impdesconto <> 0 ");
sql.append(" GROUP BY r4.numserie20, r4.coo, r4.datamov, r4.cpfcnpjcliente, ");
sql.append(" r4.imptotalliquido, fi.numcnpj, fi.numserie, r5.impdesconto, ");
sql.append(" r5.totparcial, r5.imptotalliquido, r5.tipopassagem, ");
sql.append(" r5.numitem, r5.codproduto, fi.modelo, r4.usuario_id ");
sql.append(" ORDER BY r4.datamov, r4.numserie20, r4.coo, r5.numitem ");
return sql.toString();
}
private String sqlFiscaisECFPendenciasCancelado(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r4.numserie20 as numImpressora, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.imptotalliquido as valorTotal, ");
sql.append(" r4.datamov as dataEmissao, ");
sql.append(" r4.cpfcnpjcliente as cnpjCliente, ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.marca_id as empresaId, ");
sql.append(" fi.numcnpj as cnpjImpressora, ");
sql.append(" fi.numserie as numpdv, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" r5.imptotalliquido as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" fi.modelo as modeloImpressora, ");
sql.append(" r4.usuario_id as numCaixa, ");
sql.append(" b.preciopagado as importetarifa, ");
sql.append(" b.importetaxaembarque as importetaxaembarque, ");
sql.append(" b.importepedagio as importepedagio, ");
sql.append(" b.importeseguro as importeseguro, ");
sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf, ");
sql.append(" r4.indcancelamento, ");
sql.append(" 'CANCELADO' 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(" AND r4.datamov = r5.datamov AND r4.contador = r5.contador ");
sql.append(" INNER JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 AND fi.fiscalimpressora_id = r5.fiscalimpressora_id ");
sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id ");
sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = b.origen_id ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" INNER JOIN ciudad co ON o.ciudad_id = co.ciudad_id ");
sql.append("WHERE r4.datamov BETWEEN ? AND ? ");
sql.append(" AND b.empresacorrida_id = ? ");
sql.append(isEstadoTodos ? "" : " AND co.estado_id = ? ");
sql.append(" AND r4.indcancelamento = 'S' ");
sql.append(" AND (SELECT r3.numserie20 FROM fiscal_r3 r3 where r3.numserie20 = r4.numserie20");
sql.append(" AND r3.datamov = r4.datamov AND r3.totparcial IN ('Can-T')) IS NOT NULL ");
sql.append("GROUP BY r4.numserie20, r4.coo, r4.datamov, ");
sql.append(" r4.cpfcnpjcliente, r4.imptotalliquido, ");
sql.append(" b.boleto_id, b.marca_id, fi.numcnpj, ");
sql.append(" fi.numserie, r5.impdesconto, r5.totparcial, ");
sql.append(" r5.imptotalliquido, r5.tipopassagem, r5.numitem, ");
sql.append(" r5.codproduto, fi.modelo, r4.usuario_id, ");
sql.append(" b.preciopagado, b.importetaxaembarque, b.importepedagio, ");
sql.append(" b.importeseguro, fi.numcnpj, r4.indcancelamento, r4.indcancelamento ");
sql.append("ORDER BY r4.datamov, r4.numserie20, r4.coo, r5.numitem ");
return sql.toString();
}
private String sqlFiscaisECFPendenciasGratuidade(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r4.numserie20 as numImpressora, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.imptotalliquido as valorTotal, ");
sql.append(" r4.datamov as dataEmissao, ");
sql.append(" r4.cpfcnpjcliente as cnpjCliente, ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.marca_id as empresaId, ");
sql.append(" fi.numcnpj as cnpjImpressora, ");
sql.append(" fi.numserie as numpdv, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" r5.imptotalliquido as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" fi.modelo as modeloImpressora, ");
sql.append(" r4.usuario_id as numCaixa, ");
sql.append(" b.preciopagado as importetarifa, ");
sql.append(" b.importetaxaembarque as importetaxaembarque, ");
sql.append(" b.importepedagio as importepedagio, ");
sql.append(" b.importeseguro as importeseguro, ");
sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf, ");
sql.append(" r4.indcancelamento, ");
sql.append(" 'GRATUIDADE' 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(" AND r4.datamov = r5.datamov AND r4.contador = r5.contador ");
sql.append(" INNER JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 AND fi.fiscalimpressora_id = r5.fiscalimpressora_id ");
sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id ");
sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = b.origen_id ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" INNER JOIN ciudad co ON o.ciudad_id = co.ciudad_id ");
sql.append("WHERE r4.datamov BETWEEN ? AND ? ");
sql.append(" AND b.empresacorrida_id = ? ");
sql.append(isEstadoTodos ? "" : " AND co.estado_id = ? ");
sql.append(" AND r5.imptotalliquido = 1 ");
sql.append(" AND b.preciopagado = 0 ");
sql.append("GROUP BY r4.numserie20, r4.coo, r4.datamov, ");
sql.append(" r4.cpfcnpjcliente, r4.imptotalliquido, ");
sql.append(" b.boleto_id, b.marca_id, fi.numcnpj, ");
sql.append(" fi.numserie, r5.impdesconto, r5.totparcial, ");
sql.append(" r5.imptotalliquido, r5.tipopassagem, r5.numitem, ");
sql.append(" r5.codproduto, fi.modelo, r4.usuario_id, ");
sql.append(" b.preciopagado, b.importetaxaembarque, b.importepedagio, ");
sql.append(" b.importeseguro, fi.numcnpj, r4.indcancelamento, r4.indcancelamento ");
sql.append("ORDER BY r4.datamov, r4.numserie20, r4.coo, r5.numitem ");
return sql.toString();
}
private String sqlFiscaisECFPendenciasInconsistente(boolean isEstadoTodos) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT r4.numserie20 as numImpressora, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.imptotalliquido as valorTotal, ");
sql.append(" r4.datamov as dataEmissao, ");
sql.append(" r4.cpfcnpjcliente as cnpjCliente, ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.marca_id as empresaId, ");
sql.append(" fi.numcnpj as cnpjImpressora, ");
sql.append(" fi.numserie as numpdv, ");
sql.append(" r5.totparcial as repTributado, ");
sql.append(" r5.imptotalliquido as valorItem, ");
sql.append(" r5.tipopassagem as tipoPassagem, ");
sql.append(" r5.numitem as numItem, ");
sql.append(" r5.codproduto as codProduto, ");
sql.append(" fi.modelo as modeloImpressora, ");
sql.append(" r4.usuario_id as numCaixa, ");
sql.append(" b.preciopagado as importetarifa, ");
sql.append(" b.importetaxaembarque as importetaxaembarque, ");
sql.append(" b.importepedagio as importepedagio, ");
sql.append(" b.importeseguro as importeseguro, ");
sql.append(" translate(fi.numcnpj, ' / - . ', ' ') as cnpjEcf, ");
sql.append(" r4.indcancelamento, ");
sql.append(" 'INCONSISTENTE' as status ");
sql.append("FROM fiscal_r4 r4 ");
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(" LEFT JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 AND fi.fiscalimpressora_id = r5.fiscalimpressora_id ");
sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id ");
sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = b.origen_id ");
sql.append(" and ase.destino_id = b.destino_id and ase.ruta_id = b.ruta_id and ase.activo = 1 and ase.corrida_id is null ");
sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, b.origen_id) = o.parada_id ");
sql.append(" INNER JOIN ciudad co ON o.ciudad_id = co.ciudad_id ");
sql.append("WHERE r4.datamov BETWEEN ? AND ? ");
sql.append(" AND b.empresacorrida_id = ? ");
sql.append(isEstadoTodos ? "" : " AND co.estado_id = ? ");
sql.append(" AND r4.indcancelamento = 'S' ");
sql.append(" AND (SELECT MAX(r3.numserie20) FROM fiscal_r3 r3 where r3.numserie20 = r4.numserie20");
sql.append(" AND r3.datamov = r4.datamov AND r3.totparcial IN ('Can-T', 'DT')) IS NULL ");
sql.append("GROUP BY r4.numserie20, r4.coo, r4.datamov, ");
sql.append(" r4.cpfcnpjcliente, r4.imptotalliquido, ");
sql.append(" b.boleto_id, b.marca_id, fi.numcnpj, ");
sql.append(" fi.numserie, r5.impdesconto, r5.totparcial, ");
sql.append(" r5.imptotalliquido, r5.tipopassagem, r5.numitem, ");
sql.append(" r5.codproduto, fi.modelo, r4.usuario_id, ");
sql.append(" b.preciopagado, b.importetaxaembarque, b.importepedagio, ");
sql.append(" b.importeseguro, fi.numcnpj, r4.indcancelamento, r4.indcancelamento ");
sql.append("ORDER BY r4.datamov, r4.numserie20, r4.coo, r5.numitem ");
return sql.toString();
}
@Override
public List<ImportacionFiscalVO> buscaDatosFiscaisECF(Date inicio, Date fim, Integer empresaId, Integer estadoId, boolean isNormal, boolean isCancelados, boolean isPendencias, Connection connection) throws SQLException {
if (isNormal) {
return montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECF(isEstadoTodos(estadoId)), false);
} else if (isCancelados) {
return montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECFCancelados(isEstadoTodos(estadoId)), true);
} else if (isPendencias) {
List<ImportacionFiscalVO> list = new ArrayList<ImportacionFiscalVO>();
list.addAll(montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECFPendenciasCancelado(isEstadoTodos(estadoId)), false));
list.addAll(montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECFPendenciasDesconto(isEstadoTodos(estadoId)), false));
list.addAll(montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECFPendenciasInconsistente(isEstadoTodos(estadoId)), false));
list.addAll(montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECFPendenciasGratuidade(isEstadoTodos(estadoId)), false));
return list;
}
return null;
}
private List<ImportacionFiscalVO> montarItensECF(Date inicio, Date fim, Integer empresaId, Integer estadoId, Connection connection, String sql, boolean isDate) throws SQLException {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setFetchSize(100);
if (isDate) {
stmt.setTimestamp(1, new java.sql.Timestamp(DateUtil.inicioFecha(inicio).getTime()));
stmt.setTimestamp(2, new java.sql.Timestamp(DateUtil.fimFecha(fim).getTime()));
} else {
stmt.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL));
stmt.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL));
}
stmt.setInt(3, empresaId);
if (!isEstadoTodos(estadoId))
stmt.setInt(4, estadoId);
List<ImportacionFiscalVO> list = new ArrayList<ImportacionFiscalVO>();
ImportacionFiscalVO fiscal = null;
String codProduto = null;
List<String> columns = new ArrayList<String>();
ResultSetMetaData rsMetaData = stmt.getMetaData();
for (int i = 1; i <= rsMetaData.getColumnCount(); i++) {
columns.add(rsMetaData.getColumnName(i).toLowerCase());
}
ResultSet rset = stmt.executeQuery();
while (rset.next()) {
ItemFiscalVO item = new ItemFiscalVO();
item.setNumImpressora(columns.contains("numimpressora") ? rset.getString("numImpressora") : null);
item.setCoo(columns.contains("coo") ? rset.getString("coo") : null);
item.setBoletoId(columns.contains("boletoid") ? rset.getLong("boletoId") : null);
item.setEmpresaId(columns.contains("empresaid") ? rset.getInt("empresaId") : null);
item.setDataEmissao(columns.contains("dataemissao") ? rset.getString("dataEmissao") : null);
item.setCnpjCliente(columns.contains("cnpjcliente") ? rset.getString("cnpjCliente") : null);
item.setCnpjImpressora(columns.contains("cnpjimpressora") ? rset.getString("cnpjImpressora") : null);
item.setOrigenId(columns.contains("origenid") ? rset.getInt("origenId") : null);
item.setOrigenUf(columns.contains("origenuf") ? rset.getString("origenUf") : null);
item.setDestinoId(columns.contains("destinoid") ? rset.getInt("destinoId") : null);
item.setDestinoUf(columns.contains("destinouf") ? rset.getString("destinoUf") : null);
item.setNumpdv(columns.contains("numpdv") ? rset.getString("numpdv") : null);
item.setNumItem(columns.contains("numitem") ? rset.getString("numItem") : null);
item.setCodProduto(columns.contains("codproduto") ? rset.getString("codProduto") : null);
item.setRepTributado(columns.contains("reptributado") ? rset.getString("repTributado") : null);
item.setTipoPassagem(columns.contains("tipopassagem") ? rset.getString("tipoPassagem") : null);
item.setModeloImpressora(columns.contains("modeloimpressora") ? rset.getString("modeloImpressora") : null);
item.setNumCaixa(columns.contains("numcaixa") ? rset.getString("numCaixa") : null);
item.setStatus(columns.contains("status") ? rset.getString("status") : null);
item.setClaseServicio(columns.contains("claseservicio") ? rset.getString("claseServicio") : null);
item.setMotivocancelacion(columns.contains("motivocancelacion") ? rset.getInt("motivocancelacion") : null);
item.setValorMulta(columns.contains("valormulta") ? rset.getBigDecimal("valorMulta") : null);
item.setImpostoEstado(columns.contains("impostoestado") ? rset.getBigDecimal("impostoEstado") : null);
item.setDesconto(columns.contains("desconto") ? rset.getBigDecimal("desconto") : null);
item.setIndcancelamento(columns.contains("indcancelamento") ? rset.getString("indcancelamento") : null);
// TODO: Estes atributos foram criados, por motivo de divergencia no valorTotal com o valor unitario na tabela FISCAL_R5
item.setValorTarifa(columns.contains("importetarifa") ? rset.getBigDecimal("importetarifa") : null);
item.setValorPedagio(columns.contains("importepedagio") ? rset.getBigDecimal("importepedagio") : null);
item.setValorEmbarque(columns.contains("importetaxaembarque") ? rset.getBigDecimal("importetaxaembarque") : null);
item.setValorSeguro(columns.contains("importeseguro") ? rset.getBigDecimal("importeseguro") : null);
ImportacionFiscalVO novoFiscal = item;
codProduto = item.getCodProduto();
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;
} else if (!novoFiscal.equals(fiscal)) {
List<ItemFiscalVO> itensFiscais = validaItensFiscais(fiscal, codProduto);
fiscal.setItensFiscais(itensFiscais);
list.add(fiscal);
fiscal = item;
}
fiscal.getItensFiscais().add(item);
}
if (fiscal != null) {
List<ItemFiscalVO> itensFiscais = validaItensFiscais(fiscal, codProduto);
fiscal.setItensFiscais(itensFiscais);
list.add(fiscal);
}
return list;
}
private boolean validaValorExiste(BigDecimal valor) {
if (valor == null) {
return Boolean.FALSE;
} else if (valor.equals(BigDecimal.ZERO)) {
return Boolean.FALSE;
} else {
return Boolean.TRUE;
}
}
private List<ItemFiscalVO> validaItensFiscais(ImportacionFiscalVO fiscal, String codProduto) {
boolean temTarifa = validaValorExiste(fiscal.getValorTarifa());
boolean temPedagio = validaValorExiste(fiscal.getValorPedagio());
boolean temEmbarque = validaValorExiste(fiscal.getValorEmbarque());
boolean temSeguro = validaValorExiste(fiscal.getValorSeguro());
boolean tarifaCriada = false;
boolean pedagioCriada = false;
boolean embarqueCriada = false;
boolean seguroCriada = false;
boolean inconsistencia = false;
List<ItemFiscalVO> itensFiscais = new ArrayList<ItemFiscalVO>();
for (ItemFiscalVO item : fiscal.getItensFiscais()) {
String codigoProduto = item.getCodProduto();
if (codigoProduto != null) {
if (codigoProduto.indexOf("TA") >= 0)
tarifaCriada = true;
if (codigoProduto.indexOf("TX") >= 0)
embarqueCriada = true;
if (codigoProduto.indexOf("PE") >= 0)
pedagioCriada = 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));
novoTarifa.setInconsistencia(inconsistencia);
itensFiscais.add(novoTarifa);
}
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));
novoEmbarque.setInconsistencia(inconsistencia);
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));
novoPedagio.setInconsistencia(inconsistencia);
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));
novoSeguro.setInconsistencia(inconsistencia);
itensFiscais.add(novoSeguro);
}
return itensFiscais;
}
private int gerarRegistroP2(List<EsquemaCorrida> lsEsquemaCorrida, Date dataDe, Date dataAte) throws SQLException {
Integer[] idsCorrida = getIdsCorrida(lsEsquemaCorrida);
StringBuilder sb = new StringBuilder("");
sb.append(" INSERT INTO FISCAL_P2 (CODPRODUTO,descricao,valorunitario_ta,valorunitario_tx,valorunitario_pe,valorunitario_ot,valorunitario_se,empresa_id,estado_origem,estado_aliascorrida,estado_aliasgeral) ");
sb.append(" ");
sb.append(" select DISTINCT ");
sb.append(" CODPRODUTO(t.origen_id , t.destino_id , rc.ruta_id) AS CODPRODUTO, ");
sb.append(" concat(concat(concat(concat(concat(po.cveparada, '-'),pd.cveparada),'('),v.nombvia),')') as descricao, ");
sb.append(" tr.precio as valorunitario_ta, ");
sb.append(" tr.importetaxaembarque as valorunitario_tx, ");
sb.append(" tr.importepedagio as valorunitario_pe, ");
sb.append(" tr.importeoutros as valorunitario_ot, ");
sb.append(" tr.importeseguro as valorunitario_se, ");
sb.append(" c.empresacorrida_id as empresa_id, ");
sb.append(" co.estado_id as estado_origem, ");
sb.append(" cas1.estado_id as estado_aliascorrida, ");
sb.append(" cas2.estado_id as estado_aliasgeral ");
sb.append(" ");
sb.append(" from ");
sb.append(" ruta_combinacion rc ");
sb.append(" inner join tramo t on t.tramo_id = rc.tramo_id ");
sb.append(" inner join parada po on po.parada_id = t.origen_id ");
sb.append(" inner join parada pd on pd.parada_id = t.destino_id ");
sb.append(" inner join corrida c on c.ruta_id = rc.ruta_id ");
sb.append(" inner join corrida_tramo cto on cto.corrida_id = c.corrida_id and cto.feccorrida = c.feccorrida and t.origen_id = cto.origen_id ");
sb.append(" inner join corrida_tramo ctd on ctd.corrida_id = c.corrida_id and ctd.feccorrida = c.feccorrida and t.destino_id = ctd.destino_id ");
sb.append(" inner join tarifa tr on tr.ruta_id = rc.ruta_id and tr.origen_id = t.origen_id and tr.destino_id = t.destino_id ");
sb.append(" inner join vigencia_tarifa vt on vt.vigenciatarifa_id = tr.vigenciatarifa_id ");
sb.append(" inner join ciudad co on co.ciudad_id = po.ciudad_id ");
sb.append(" left join alias_servico as1 on as1.corrida_id = as1.corrida_id and as1.origen_id = t.origen_id and as1.destino_id = t.destino_id and as1.ruta_id = rc.ruta_id ");
sb.append(" left join parada pas1 on pas1.parada_id = as1.aliasorigen_id ");
sb.append(" left join ciudad cas1 on cas1.ciudad_id = pas1.ciudad_id ");
sb.append(" left join alias_servico as2 on as2.corrida_id is null and as2.origen_id = t.origen_id and as2.destino_id = t.destino_id and as2.ruta_id = rc.ruta_id ");
sb.append(" left join parada pas2 on pas2.parada_id = as2.aliasorigen_id ");
sb.append(" left join ciudad cas2 on cas2.ciudad_id = pas2.ciudad_id ");
sb.append(" where ");
sb.append(" rc.activo = 1 ");
sb.append(" and cto.activo = 1 ");
sb.append(" and ctd.activo = 1 ");
sb.append(" and tr.activo = 1 ");
sb.append(" and cto.fechorsalida between vt.feciniciovigencia and vt.fecfinvigencia ");
sb.append(" and c.feccorrida between :datIni and :datFim ");
sb.append(" and c.corrida_id in (:corridaId) ");
sb.append(" and CODPRODUTO(t.origen_id , t.destino_id , rc.ruta_id) not in (select codproduto from fiscal_p2) ");
// sb.append(" and ROWNUM < 50 ");
int qtd = 0;
Connection connection = null;
try {
connection = dataSource.getConnection();
connection.setAutoCommit(false);
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setDate(1, new java.sql.Date(dataDe.getTime()));
ps.setDate(2, new java.sql.Date(dataAte.getTime()));
ps.setString(3, StringUtils.join(idsCorrida, ","));
qtd = ps.executeUpdate();
connection.commit();
} catch (Throwable t) {
connection.rollback();
} finally {
if (connection != null) {
connection.close();
}
}
return qtd;
}
private Integer[] getIdsCorrida(List<EsquemaCorrida> lsEsquemaCorrida) {
Integer[] idsCorrida = new Integer[lsEsquemaCorrida.size()];
int i = 0;
for (EsquemaCorrida ec : lsEsquemaCorrida) {
idsCorrida[i] = ec.getNumCorrida();
i++;
}
return idsCorrida;
}
private int gerarRegistroF2(List<EsquemaCorrida> lsEsquemaCorrida, Date dataDe, Date dataAte) throws SQLException {
StringBuilder sb = new StringBuilder("");
sb.append(" INSERT INTO FISCAL_F2 (cnpj, codigo_local_emissao,identificacao_linha, descricao_linha, data_partida, hora_partida, codigo_tipo_viagem) ");
sb.append(" select distinct oc.cnpj, t.origen_id as codigo_local_emissao, r.prefixo as identificacao_linha, r.descruta as descricao_linha, to_char(cto.fechorsalida, 'YYYYMMdd') as data_partida, to_char(cto.fechorsalida, 'hh24miss') as hora_partida, (case nvl(c.tiposervicio_id, 0) when 2 then '01' else '00' end) as codigo_tipo_viagem ");
sb.append(" from ");
sb.append(" ruta_combinacion rc ");
sb.append(" inner join ruta r on r.ruta_id = rc.ruta_id ");
sb.append(" inner join orgao_concedente oc on oc.orgaoconcedente_id = r.orgaoconcedente_id ");
sb.append(" inner join tramo t on t.tramo_id = rc.tramo_id ");
sb.append(" inner join parada po on po.parada_id = t.origen_id ");
sb.append(" inner join parada pd on pd.parada_id = t.destino_id ");
sb.append(" inner join corrida c on c.ruta_id = rc.ruta_id ");
sb.append(" inner join corrida_tramo cto on cto.corrida_id = c.corrida_id and cto.feccorrida = c.feccorrida and t.origen_id = cto.origen_id ");
sb.append(" inner join corrida_tramo ctd on ctd.corrida_id = c.corrida_id and ctd.feccorrida = c.feccorrida and t.destino_id = ctd.destino_id ");
sb.append(" inner join tarifa tr on tr.ruta_id = rc.ruta_id and tr.origen_id = t.origen_id and tr.destino_id = t.destino_id ");
sb.append(" inner join vigencia_tarifa vt on vt.vigenciatarifa_id = tr.vigenciatarifa_id ");
sb.append(" inner join punto_venta pv on pv.empresa_id = c.empresacorrida_id ");
sb.append(" where ");
sb.append(" rc.activo = 1 ");
sb.append(" and cto.activo = 1 ");
sb.append(" and ctd.activo = 1 ");
sb.append(" and cto.fechorsalida between vt.feciniciovigencia and vt.fecfinvigencia ");
sb.append(" and c.feccorrida between :datIni and :datFim ");
sb.append(" and c.corrida_id in (:corridaId) ");
// sb.append(" and ROWNUM < 2 ");
Integer[] idsCorrida = getIdsCorrida(lsEsquemaCorrida);
Connection connection = null;
int qtd = 0;
try {
connection = dataSource.getConnection();
connection.setAutoCommit(false);
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setDate(1, new java.sql.Date(dataDe.getTime()));
ps.setDate(2, new java.sql.Date(dataAte.getTime()));
ps.setString(3, StringUtils.join(idsCorrida, ","));
qtd = ps.executeUpdate();
connection.commit();
} catch (Throwable t) {
connection.rollback();
} finally {
if (connection != null) {
connection.close();
}
}
return qtd;
}
@Override
public int gerarRegistroP2_F2(List<EsquemaCorrida> lsEsquemaCorrida, Date dataDe, Date dataAte) throws SQLException {
int gerarRegistroP2 = this.gerarRegistroP2(lsEsquemaCorrida, dataDe, dataAte);
int gerarRegistroF2 = this.gerarRegistroF2(lsEsquemaCorrida, dataDe, dataAte);
return gerarRegistroP2 + gerarRegistroF2;
}
@Override
public List<ImportacionNaoFiscalVO> buscaDatosNaoFiscais(Date inicio, Date fim, Integer empresaId, Integer estadoId, 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, ")
.append(" TRUNC(CD.FECHORVTA) AS FECHORVTA, SUM(CD.PRECIO) AS TOTAL ")
.append("FROM TIPO_EVENTO_EXTRA TEE ")
.append("JOIN EVENTO_EXTRA EE ON TEE.TIPOEVENTOEXTRA_ID = EE.TIPOEVENTOEXTRA_ID ")
.append("JOIN PUNTO_VENTA PV ON PV.PUNTOVENTA_ID = EE.PUNTOVENTA_ID ")
.append("JOIN PARADA PA ON PA.PARADA_ID = PV.PARADA_ID ")
.append("JOIN CIUDAD CI ON CI.CIUDAD_ID = PA.CIUDAD_ID ")
.append("JOIN ESTADO ES ON ES.ESTADO_ID = CI.ESTADO_ID ")
.append("LEFT JOIN CAJA_DIVERSOS CD ON EE.EVENTOEXTRA_ID = CD.EVENTOEXTRA_ID ")
.append("WHERE TEE.ACTIVO = 1 ")
.append("AND EE.EMPRESA_ID = ? ")
.append("AND TRUNC(CD.FECHORVTA) BETWEEN ? AND ? ")
.append(isEstadoTodos(estadoId) ? "" : " AND ES.ESTADO_ID = ? ")
.append("GROUP BY TEE.TIPOEVENTOEXTRA_ID, TEE.DESCTIPOEVENTO, TRUNC(CD.FECHORVTA) ")
.append("ORDER BY TRUNC(CD.FECHORVTA), TEE.DESCTIPOEVENTO ");
stmt = connection.prepareStatement(sQuery.toString());
stmt.setInt(1, empresaId);
stmt.setDate(2, new java.sql.Date(inicio.getTime()));
stmt.setDate(3, new java.sql.Date(fim.getTime()));
if (!isEstadoTodos(estadoId))
stmt.setInt(4, estadoId);
rset = stmt.executeQuery();
List<ImportacionNaoFiscalVO> importacionNaoFiscalVOs = new ArrayList<ImportacionNaoFiscalVO>();
while (rset.next()) {
ImportacionNaoFiscalVO importacionNaoFiscal = new ImportacionNaoFiscalVO();
importacionNaoFiscal.setTipoeventoextraId(rset.getInt("TIPOEVENTOEXTRAID"));
importacionNaoFiscal.setDesctipoevento(rset.getString("DESCTIPOEVENTO"));
importacionNaoFiscal.setFechorvta(rset.getDate("FECHORVTA"));
importacionNaoFiscal.setTotal(rset.getBigDecimal("TOTAL"));
importacionNaoFiscalVOs.add(importacionNaoFiscal);
}
return importacionNaoFiscalVOs;
}
@Override
public List<ExportacaoECFTipoCFC> buscarRegistroECFTipoCFC(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoECFTipoCFC> retorno = new ArrayList<ExportacaoECFTipoCFC>();
StringBuilder sb = new StringBuilder();
sb.append(" select distinct");
sb.append(" imp.numserie20 as ecf,");
sb.append(" imp.numserie as numserie,");
sb.append(" r2.datamov as datamov,");
sb.append(" r2.cooinicial as cooinicial,");
sb.append(" r2.coofinal as coofinal,");
sb.append(" r2.crz as crz,");
sb.append(" r2.cro as cro,");
sb.append(" r2.coo as coo,");
sb.append(" CASE WHEN s.aliasorigen_id IS NULL THEN ei.codestabelecimento ELSE eis.codestabelecimento END as codestabelecimento,");
sb.append(" e.codestabelecimento as codestabelecimentoimpressora,");
sb.append(" imp.numeroidentificacao as numeroidentificacao,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estadoorigem,");
sb.append(" (");
sb.append(" select nvl(sum(r5i.imptotalliquido), 0)");
sb.append(" from fiscal_r5 r5i");
sb.append(" join fiscal_r4 r4i on r4i.numserie20 = r5i.numserie20 and r4i.datamov = r5i.datamov and r4i.coo = r5i.coo and r4i.contador = r5i.contador");
sb.append(" join boleto bi on bi.boleto_id = r4i.boleto_id");
sb.append(" join parada poi on poi.parada_id = bi.origen_id");
sb.append(" join parada pdi on pdi.parada_id = bi.destino_id");
sb.append(" left join alias_servico si on si.origen_id = bi.origen_id and si.destino_id = bi.destino_id and (si.corrida_id = bi.corrida_id or si.corrida_id is null) and si.ruta_id = bi.ruta_id");
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 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,");
sb.append(" (");
sb.append(" select nvl(sum(r4t.impsubtotal), 0)");
sb.append(" from fiscal_r4 r4t");
sb.append(" join boleto bt on bt.boleto_id = r4t.boleto_id");
sb.append(" join parada pot on pot.parada_id = bt.origen_id");
sb.append(" join ciudad cot on cot.ciudad_id = pot.ciudad_id");
sb.append(" join estado eot on eot.estado_id = cot.estado_id");
sb.append(" left join alias_servico st on st.origen_id = bt.origen_id and st.destino_id = bt.destino_id and (st.corrida_id = bt.corrida_id or st.corrida_id is null) and st.ruta_id = bt.ruta_id");
sb.append(" left join parada post on post.parada_id = st.aliasorigen_id");
sb.append(" left join ciudad cost on cost.ciudad_id = post.ciudad_id");
sb.append(" left join estado eost on eost.estado_id = cost.estado_id");
sb.append(" where coalesce(r4t.indcancelamento, 'N') <> 'S' and r4t.numserie20 = r2.numserie20 and r4t.datamov = r2.datamov and ((CASE WHEN st.aliasorigen_id IS NULL THEN eot.cveestado ELSE eost.cveestado END) = (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END))");
sb.append(" ) as totalvenda");
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 fiscal_impressora imp on imp.numserie20 = r4.numserie20");
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 empresa_imposto ei on ei.empresa_id = b.empresacorrida_id and ei.estado_id = co.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 or s.corrida_id is null) 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 empresa_imposto eis on eis.empresa_id = b.empresacorrida_id and eis.estado_id = cos.estado_id");
sb.append(" left join estado e on e.estado_id = imp.estadolocal_id");
sb.append(" where coalesce(r4.indcancelamento, 'N') <> 'S' and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and b.activo = 1 and r4.datamov >= ? and r4.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)");
sb.append(" order by r2.datamov");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL));
ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL));
ps.setLong(3, Long.valueOf(empresaId));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
ExportacaoECFTipoCFC registro = null;
while (rs.next()) {
BigDecimal totalIsenta = BigDecimal.ZERO;
if (rs.getBigDecimal("totalisenta") != null) {
totalIsenta = rs.getBigDecimal("totalisenta").divide(BigDecimal.valueOf(100d));
}
registro = new ExportacaoECFTipoCFC();
registro.setEstabelecimento(rs.getString("codestabelecimento"));
registro.setDataEmissao(rs.getString("datamov"));
registro.setNumeroIdentificacaoECF(rs.getString("numeroidentificacao") == null || rs.getString("numeroidentificacao").isEmpty() ? "0" : rs.getString("numeroidentificacao"));
registro.setEcf(rs.getString("ecf"));
registro.setCooReducaoZ(Integer.valueOf(rs.getString("coo")));
registro.setCooInicial(Integer.valueOf(rs.getString("cooinicial")));
registro.setCooFinal(Integer.valueOf(rs.getString("coofinal")));
registro.setContadorReducao(Integer.valueOf(rs.getString("crz")));
registro.setCro(Integer.valueOf(rs.getString("cro")));
registro.setValorTotal(BigDecimal.valueOf(Double.valueOf(rs.getString("totalvenda")) / 100));
registro.setValorIsentas(totalIsenta);
registro.setEstabelecimentoECF(rs.getString("codestabelecimentoimpressora"));
registro.setNumeroSerie(rs.getString("numserie"));
registro.setInfoPadraoBilhetePassagem("00000060");
retorno.add(registro);
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public List<ExportacaoECFTipoCCF> buscarRegistroECFTipoCCF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoECFTipoCCF> retorno = new ArrayList<ExportacaoECFTipoCCF>();
StringBuilder sb = new StringBuilder();
// sb.append(" select distinct");
// sb.append(" r5.numserie20 as ecf,");
// sb.append(" r5.datamov as datamov,");
// sb.append(" r5.coo as coo,");
// sb.append(" r5.imptotalliquido as valortarifa,");
// sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,");
// sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,");
// sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN cd.codibge ELSE cds.codibge END) as municipio_destino,");
// sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,");
// sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,");
// sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredmunicipal ELSE eis.porcredmunicipal END) as porc_red_municipal,");
// sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredestadual ELSE eis.porcredestadual END) as porc_red_estadual,");
// 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.aliasdestino_id IS NULL THEN pd.regionmetropolitana_id ELSE pds.regionmetropolitana_id END),-2)) THEN 1 ELSE 0 END) as isenta,");
// sb.append(" r4.impsubtotal as valortotal,");
// sb.append(" b.numfoliosistema as numfoliosistema");
// sb.append(" from fiscal_r5 r5");
// sb.append(" join fiscal_r4 r4 on r4.numserie20 = r5.numserie20 and r4.coo = r5.coo");
// 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 = eo.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 = eos.estado_id");
// sb.append(" where coalesce(r4.indcancelamento, 'N') <> 'S' and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and b.activo = 1 and r5.codproduto like '%-TA' and r5.datamov >= ? and r5.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)");
sb.append(" select distinct");
sb.append(" r4.numserie20 as ecf,");
sb.append(" r4.datamov as datamov,");
sb.append(" r4.coo as coo,");
sb.append(" r5.imptotalliquido as valortarifa,");
sb.append(" c.preciopagado as preciopagado,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,");
sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN cd.codibge ELSE cds.codibge END) as municipio_destino,");
sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredmunicipal ELSE eis.porcredmunicipal END) as porc_red_municipal,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredestadual ELSE eis.porcredestadual END) as porc_red_estadual,");
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.aliasdestino_id IS NULL THEN pd.regionmetropolitana_id ELSE pds.regionmetropolitana_id END),-2)) THEN 1 ELSE 0 END) as isenta,");
sb.append(" r4.impsubtotal as valortotal,");
sb.append(" b.numfoliosistema as numfoliosistema");
sb.append(" from fiscal_r4 r4");
sb.append(" left join fiscal_r5 r5 on r5.numserie20 = r4.numserie20 and r5.coo = r4.coo and r5.codproduto like '%-TA'");
sb.append(" left join caja c on c.caja_id = r4.caja_id");
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 = eo.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 or s.corrida_id is null) 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 = eos.estado_id");
sb.append(" where coalesce(r4.indcancelamento, 'N') <> 'S' and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and b.activo = 1 and r4.datamov >= ? and r4.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL));
ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL));
ps.setLong(3, Long.valueOf(empresaId));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
ExportacaoECFTipoCCF registro = null;
while (rs.next()) {
BigDecimal valorTarifa = BigDecimal.ZERO;
if (rs.getString("valortarifa") != null) {
valorTarifa = BigDecimal.valueOf(Double.valueOf(rs.getString("valortarifa")) / 100);
} else {
valorTarifa = rs.getBigDecimal("preciopagado");
log.info("Tarifa nao encontrada na R5. (ECF: " + rs.getString("ecf") + " / DATAMOV: " + rs.getString("datamov") + " / COO: " + rs.getString("coo") + ")");
}
registro = new ExportacaoECFTipoCCF();
registro.setEcf(rs.getString("ecf"));
registro.setDataEmissao(rs.getString("datamov"));
registro.setCoo(Integer.valueOf(rs.getString("coo")));
registro.setValorServico(valorTarifa);
registro.setDescontoGlobal(null);
registro.setCodigoParticipante(null);
registro.setSituacaoCOO(0); // 0 - Documento Regular; 2 - Documento Cancelado
registro.setAcrescimo(null);
registro.setNumFolioSistema(rs.getString("numFolioSistema"));
registro.setCodigoSituacaoTribColunaB(null);
// 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>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")));
registro.setUfDestino(rs.getString("estado_destino"));
// IM=5357; Servi<76>o IE= 6357
if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
registro.setCfop(5357);
} else {
registro.setCfop(6357);
}
// 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>o na base de calculo; 40 - isentos
if (registro.getCodigoSituacaoTribColunaB() == null) {
registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms") == 0 ? 0 : 20);
}
BigDecimal valorTotal = BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100);
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;
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)));
// }
// }
// }
// Email 17/02/2017
valorBaseCalculoICMS = valorTotal;
}
if (rs.getInt("isenta") == 1) {
valorBaseCalculoICMS= null;
}
registro.setValorTotal(valorTotal);
// 1 - Demais; 2 - Regi<67>o Metropolitanao ou seja, quando o campo CSTB for "40", esse campo deve vir "2". Do contr<74>rio, deve vir "1"
registro.setTributacaoICMS(registro.getCodigoSituacaoTribColunaB() == 40 ? 2 : 1);
registro.setValorBaseCalculoICMS(valorBaseCalculoICMS);
registro.setAliquotaICMS(tributacao_importacao);
retorno.add(registro);
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public List<ExportacaoECFTipoICF> buscarRegistroECFTipoICF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoECFTipoICF> retorno = new ArrayList<ExportacaoECFTipoICF>();
StringBuilder sb = new StringBuilder();
sb.append(" select distinct");
sb.append(" r4.numserie20 as ecf,");
sb.append(" r4.datamov as datamov,");
sb.append(" r4.coo as coo,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,");
sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN cd.codibge ELSE cds.codibge END) as municipio_destino,");
sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredmunicipal ELSE eis.porcredmunicipal END) as porc_red_municipal,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredestadual ELSE eis.porcredestadual END) as porc_red_estadual,");
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 pos.regionmetropolitana_id ELSE po.regionmetropolitana_id END),-1) = nvl((CASE WHEN s.aliasdestino_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 = eo.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 or s.corrida_id is null) 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 = eos.estado_id");
sb.append(" where coalesce(r4.indcancelamento, 'N') <> 'S' and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and b.activo = 1 and r4.datamov >= ? and r4.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)");
sb.append(" order by r4.numserie20, r4.datamov");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL));
ps.setString(2, 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 valorTotal = MoneyHelper.dividir(MoneyHelper.instanciar(rs.getString("valortotal")), BigDecimal.valueOf(100d));
BigDecimal red_base_calc_icms = MoneyHelper.instanciar(rs.getBigDecimal("red_base_calc_icms"));
BigDecimal porc_red_municipal = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_municipal"));
BigDecimal porc_red_estadual = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_estadual"));
BigDecimal tributacao_importacao = MoneyHelper.instanciar(rs.getBigDecimal("tributacao_importacao"));
BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO;
if (red_base_calc_icms != null) {
BigDecimal aRed_base_calc_icms = MoneyHelper.dividir(red_base_calc_icms, BigDecimal.valueOf(100d));
valorBaseCalculoICMS = MoneyHelper.subtrair(valorTotal, MoneyHelper.multiplicar(valorTotal, aRed_base_calc_icms));
} else {
// if (tributacao_importacao != null) {
// if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
// if (porc_red_municipal != null) {
// BigDecimal aPorc_red_municipal = MoneyHelper.dividir(porc_red_municipal, BigDecimal.valueOf(100d));
// BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_municipal));
// BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d));
//
// valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc);
// }
// } else {
// if (porc_red_estadual != null) {
// BigDecimal aPorc_red_estadual = MoneyHelper.dividir(porc_red_estadual, BigDecimal.valueOf(100d));
// BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_estadual));
// BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d));
//
// valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc);
// }
// }
// }
// Email 17/02/2017
valorBaseCalculoICMS = valorTotal;
}
BigDecimal valorICMSDebitado = BigDecimal.ZERO;
if (tributacao_importacao != null) {
BigDecimal aTributacao_importacao = MoneyHelper.dividir(tributacao_importacao, BigDecimal.valueOf(100d));
valorICMSDebitado = MoneyHelper.multiplicar(valorBaseCalculoICMS, aTributacao_importacao);
}
BigDecimal valorICMSIsento = BigDecimal.ZERO;
BigDecimal valorICMSOutros = valorTotal.subtract(valorBaseCalculoICMS);
String ecf = rs.getString("ecf");
String datamov = rs.getString("datamov");
String ufDestino = "";
String ufOrigem = "";
Integer municipioOrigem = 0;
Integer cfop = 0; // IM=5357; Servi<76>o IE= 6357
// 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>o na base de calculo; 40 - isentos
Integer codigoSituacaoTribColunaB = null;
if (rs.getInt("isenta") == 1) {
codigoSituacaoTribColunaB = 40;
valorICMSOutros = valorTotal;
}
ufDestino = rs.getString("estado_destino");
ufOrigem = rs.getString("estado_origem");
municipioOrigem = rs.getInt("municipio_origem");
// IM=5357; Servi<76>o IE= 6357
if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
cfop = 5357;
} else {
cfop = 6357;
}
// 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>o na base de calculo; 40 - isentos
if (codigoSituacaoTribColunaB == null) {
codigoSituacaoTribColunaB = rs.getInt("red_base_calc_icms") == 0 ? 0 : 20;
}
String key = ecf + "|" + datamov + "|" + 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.setEcf(ecf);
registro.setDataEmissao(datamov);
registro.setUfDestino(ufDestino);
registro.setCfop(cfop); // IM=5357; Servi<76>o IE= 6357
registro.setCodigoSituacaoTribColunaB(codigoSituacaoTribColunaB); // 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>o na base de calculo; 40 - isentos
registro.setAliquotaICMS(tributacao_importacao);
registro.setUfOrigem(ufOrigem);
registro.setMunicipioOrigem(municipioOrigem);
registro.setRedutorBaseCalculoIcms(red_base_calc_icms);
registro.setRedutorMunicipalIcms(porc_red_municipal);
registro.setRedutorEstadualIcms(porc_red_estadual);
}
registro.setValorTotal(valorTotal.setScale(2, BigDecimal.ROUND_HALF_EVEN));
registro.setValorBaseCalculoICMS(valorBaseCalculoICMS.setScale(2, BigDecimal.ROUND_HALF_EVEN));
registro.setValorICMSDebitado(valorICMSDebitado.setScale(2, BigDecimal.ROUND_HALF_EVEN));
registro.setValorICMSIsento(valorICMSIsento.setScale(2, BigDecimal.ROUND_HALF_EVEN));
registro.setValorICMSOutros(valorICMSOutros.setScale(2, BigDecimal.ROUND_HALF_EVEN));
group.put(key, registro);
}
for (Map.Entry<String, ExportacaoECFTipoICF> entry : group.entrySet()) {
retorno.add(entry.getValue());
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public List<ExportacaoECFTipoPRC> buscarRegistroECFTipoPRC(final Connection conn, final Date inicio, final Date fim, final Integer empresaId, final String cveestado) {
final List<ExportacaoECFTipoPRC> retorno = new ArrayList<ExportacaoECFTipoPRC>();
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(" from (");
sb.append(" select distinct");
sb.append(" r4.coo as coo,");
sb.append(" r4.numserie20 as ecf,");
sb.append(" r4.datamov as datamov,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredmunicipal ELSE eis.porcredmunicipal END) as porc_red_municipal,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredestadual ELSE eis.porcredestadual END) as porc_red_estadual,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.tributacaoimportacao ELSE eis.tributacaoimportacao END) as tributacao_importacao,");
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 = eo.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 or s.corrida_id is null) 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 = eos.estado_id");
sb.append(" where coalesce(r4.indcancelamento, 'N') <> 'S' and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and b.activo = 1 and r4.datamov >= ? and r4.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)");
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 {
session = getSessionFactory().openSession();
session.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL));
ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL));
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>();
while (rs.next()) {
BigDecimal valorTotal = MoneyHelper.dividir(MoneyHelper.instanciar(rs.getString("valortotal")), BigDecimal.valueOf(100d));
BigDecimal red_base_calc_icms = MoneyHelper.instanciar(rs.getBigDecimal("red_base_calc_icms"));
BigDecimal porc_red_municipal = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_municipal"));
BigDecimal porc_red_estadual = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_estadual"));
BigDecimal tributacao_importacao = MoneyHelper.instanciar(rs.getBigDecimal("tributacao_importacao"));
BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO;
if (tributacao_importacao != null) {
tributacao_importacao = MoneyHelper.dividir(tributacao_importacao, BigDecimal.valueOf(100d));
}
if (red_base_calc_icms != null) {
BigDecimal aRed_base_calc_icms = MoneyHelper.dividir(red_base_calc_icms, BigDecimal.valueOf(100d));
valorBaseCalculoICMS = MoneyHelper.subtrair(valorTotal, MoneyHelper.multiplicar(valorTotal, aRed_base_calc_icms));
} else {
// if (tributacao_importacao != null) {
// if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
// if (porc_red_municipal != null) {
// BigDecimal aPorc_red_municipal = MoneyHelper.dividir(porc_red_municipal, BigDecimal.valueOf(100d));
// BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_municipal));
//
// BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d));
// valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc);
// }
// } else {
// if (porc_red_estadual != null) {
// BigDecimal aPorc_red_estadual = MoneyHelper.dividir(porc_red_estadual, BigDecimal.valueOf(100d));
// BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_estadual));
//
// BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d));
// valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc);
// }
// }
// }
// Email 17/02/2017
valorBaseCalculoICMS = valorTotal;
}
BigDecimal valorICMS = BigDecimal.ZERO;
if (tributacao_importacao != null) {
valorICMS = MoneyHelper.multiplicar(valorBaseCalculoICMS, 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);
registro.setTributacao(tributacao_importacao);
}
group.put(key, registro);
}
for (Map.Entry<String, ExportacaoECFTipoPRC> entry : group.entrySet()) {
retorno.add(entry.getValue());
}
rs.close();
ps.close();
}
});
} catch (Exception e) {
log.error(e.getMessage(), e);
} finally {
session.close();
}
return retorno;
}
@Override
public List<ExportacaoRMDTipoPAR> buscarRegistroRMDTipoPAR(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoRMDTipoPAR> retorno = new ArrayList<ExportacaoRMDTipoPAR>();
StringBuilder sb = new StringBuilder();
sb.append(" select");
sb.append(" c.estado_id as cod_participante,");
sb.append(" e.nombempresa as nombempresa,");
sb.append(" e.cveestado as cveestado,");
sb.append(" e.cnpj as cnpj,");
sb.append(" ie.numinscricaoestadual as numinscricaoestadual,");
sb.append(" ie.logradouro as logradouro,");
sb.append(" ie.numero as numero,");
sb.append(" ie.complemento as complemento,");
sb.append(" ie.bairro as bairro,");
sb.append(" ie.cep as cep");
sb.append(" from empresa e");
sb.append(" join ciudad c on c.ciudad_id = e.ciudad_id");
sb.append(" join estado e on e.estado_id = c.estado_id");
sb.append(" left join estado eie on eie.cveestado like ?");
sb.append(" left join inscricao_estadual ie on ie.empresa_id = e.empresa_id and ie.estado_id = eie.estado_id");
sb.append(" where e.empresa_id = ?");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setString(1, cveestado);
ps.setLong(2, Long.valueOf(empresaId));
ResultSet rs = ps.executeQuery();
ExportacaoRMDTipoPAR registro = null;
while (rs.next()) {
registro = new ExportacaoRMDTipoPAR();
registro.setCodigoParticipante(rs.getInt("cod_participante"));
registro.setNomeParticipante(rs.getString("nombempresa"));
registro.setUfParticipante(rs.getString("cveestado"));
registro.setCpfParticipante(rs.getString("cnpj"));
registro.setIeParticipante(rs.getString("numinscricaoestadual"));
registro.setLogradouro(rs.getString("logradouro"));
registro.setNumero(rs.getInt("numero"));
registro.setComplemento(rs.getString("complemento"));
registro.setBairro(rs.getString("bairro"));
registro.setCep(rs.getString("cep") == null ? null : Integer.parseInt(rs.getString("cep").replace("-", "").replace(".", "")));
retorno.add(registro);
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public List<ExportacaoRMDTipoRMD> buscarRegistroRMDTipoRMD(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoRMDTipoRMD> retorno = new ArrayList<ExportacaoRMDTipoRMD>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
StringBuilder sb = new StringBuilder();
sb.append(" select");
sb.append(" ce.estado_id as cod_estabelecimento,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.estado_id ELSE eos.estado_id END) as cod_participante,");
sb.append(" a.acfiscal as num_aidf,");
sb.append(" a.serie as serie,");
sb.append(" a.subserie as subserie,");
sb.append(" b.numfoliosistema as num_bilhete,");
sb.append(" b.numfoliopreimpreso as num_formulario,");
sb.append(" b.feccreacion as data_emissao,");
sb.append(" (CASE WHEN b.indstatusboleto like 'C' THEN 'S' ELSE 'N' END) as doc_cancelado,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN (CASE WHEN co.estado_id = cd.estado_id THEN ei.codigocontabilmunicipal ELSE ei.codigocontabilestadual END) ELSE (CASE WHEN cos.estado_id = cds.estado_id THEN eis.codigocontabilmunicipal ELSE eis.codigocontabilestadual END) END) as cod_contabil");
sb.append(" from boleto b");
sb.append(" join empresa e on e.empresa_id = b.empresacorrida_id");
sb.append(" join ciudad ce on ce.ciudad_id = e.ciudad_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(" 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 or s.corrida_id is null) 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(" join parada pd on pd.parada_id = b.destino_id");
sb.append(" join ciudad cd on cd.ciudad_id = po.ciudad_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(" join aidf a on a.serie = substr(b.numseriepreimpresa, 1, 3) and a.estado_id = (CASE WHEN s.aliasorigen_id IS NULL THEN eo.estado_id ELSE eos.estado_id END)");
sb.append(" join empresa_imposto ei on ei.empresa_id = b.empresacorrida_id and ei.estado_id = co.estado_id");
sb.append(" left join empresa_imposto eis on eis.empresa_id = b.empresacorrida_id and eis.estado_id = cos.estado_id");
sb.append(" where");
sb.append(" b.activo = 1 and");
sb.append(" and b.tipoventa_id = 3");
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 (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setLong(1, Long.valueOf(empresaId));
ps.setDate(2, new java.sql.Date(inicio.getTime()));
ps.setDate(3, new java.sql.Date(fim.getTime()));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
ExportacaoRMDTipoRMD registro = null;
while (rs.next()) {
registro = new ExportacaoRMDTipoRMD();
registro.setCodigoEstabelecimento(rs.getInt("cod_estabelecimento"));
registro.setNumeroAIDF(rs.getInt("num_aidf"));
registro.setSerieAIDF(rs.getString("serie"));
registro.setSubSerieAIDF(rs.getString("subserie"));
registro.setNumeroBilheteAIDF(rs.getInt("num_bilhete"));
registro.setNumeroFormularioAIDF(rs.getInt("num_formulario"));
registro.setDataEmissao(sdf.format(rs.getDate("data_emissao")));
registro.setCancelado(rs.getString("doc_cancelado").equals("S") ? Boolean.TRUE : Boolean.FALSE);
registro.setCodigoParticipante(rs.getInt("cod_participante"));
registro.setCodigoContabil(rs.getString("cod_contabil"));
retorno.add(registro);
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public List<ExportacaoRMDTipoBPS> buscarRegistroRMDTipoBPS(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoRMDTipoBPS> retorno = new ArrayList<ExportacaoRMDTipoBPS>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
StringBuilder sb = new StringBuilder();
sb.append(" select");
sb.append(" ce.estado_id as cod_estabelecimento,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.estado_id ELSE eos.estado_id END) as cod_participante,");
sb.append(" (CASE WHEN b.indstatusboleto like 'C' THEN 1 ELSE 0 END) as cancelado,");
sb.append(" a.acfiscal as num_aidf,");
sb.append(" a.serie as serie,");
sb.append(" a.subserie as subserie,");
sb.append(" b.feccreacion as data_emissao,");
sb.append(" b.numfoliopreimpreso as num_formulario,");
sb.append(" b.preciopagado as valor_total,");
sb.append(" r.acfiscal as num_aidf_rmd,");
sb.append(" r.serie as serie_rmd,");
sb.append(" r.subserie as subserie_rmd,");
sb.append(" r.docfiscal as num_rmd");
sb.append(" from boleto b");
sb.append(" join empresa e on e.empresa_id = b.empresacorrida_id");
sb.append(" join ciudad ce on ce.ciudad_id = e.ciudad_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(" 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 or s.corrida_id is null) 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(" join aidf a on a.serie = substr(b.numseriepreimpresa, 1, 3) and a.estado_id = (CASE WHEN s.aliasorigen_id IS NULL THEN eo.estado_id ELSE eos.estado_id END)");
sb.append(" join aidf r on r.aidf_id = b.rmd_id");
sb.append(" where");
sb.append(" b.activo = 1");
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 (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?");
sb.append(" order by b.feccreacion,a.acfiscal,b.numfoliopreimpreso");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setLong(1, Long.valueOf(empresaId));
ps.setDate(2, new java.sql.Date(inicio.getTime()));
ps.setDate(3, new java.sql.Date(fim.getTime()));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
Map<String, ExportacaoRMDTipoBPS> group = new HashMap<String, ExportacaoRMDTipoBPS>();
ExportacaoRMDTipoBPS registro = null;
Integer numeroInicial = null;
Integer numeroFinal = null;
while (rs.next()) {
String key = sdf.format(rs.getDate("data_emissao")) + "|" + rs.getInt("num_aidf") + "|" + rs.getInt("num_formulario");
if (group.containsKey(key)) {
registro = group.get(key);
numeroInicial = rs.getInt("num_formulario");
numeroFinal = rs.getInt("num_formulario");
if (numeroInicial.intValue() > registro.getNumeroInicial().intValue()) {
numeroInicial = registro.getNumeroInicial();
}
if (numeroFinal.intValue() < registro.getNumeroFinal().intValue()) {
numeroFinal = registro.getNumeroFinal();
}
} else {
registro = new ExportacaoRMDTipoBPS();
registro.setCodigoEstabelecimento(rs.getInt("cod_estabelecimento"));
registro.setEspecie("BPR");
registro.setNumeroAIDF(rs.getInt("num_aidf"));
registro.setSerieAIDF(rs.getString("serie"));
registro.setSubSerieAIDF(rs.getString("subserie"));
registro.setNumeroAIDFRMD(rs.getInt("num_aidf_rmd"));
registro.setSerieAIDFRMD(rs.getString("serie_rmd"));
registro.setSubSerieAIDFRMD(rs.getString("subserie_rmd"));
registro.setNumeroRMD(rs.getInt("num_rmd"));
registro.setDataEmissao(sdf.format(rs.getDate("data_emissao")));
registro.setQuantidadeTotal(0);
registro.setQuantidadeCancelados(0);
registro.setValorTotal(BigDecimal.ZERO);
registro.setResumoMovimentoDiario(null);
numeroInicial = rs.getInt("num_formulario");
numeroFinal = rs.getInt("num_formulario");
}
registro.setNumeroInicial(numeroInicial);
registro.setNumeroFinal(numeroFinal);
registro.setQuantidadeTotal(registro.getQuantidadeTotal() + 1);
registro.setQuantidadeCancelados(registro.getQuantidadeCancelados() + rs.getInt("cancelado"));
if (rs.getInt("cancelado") == 0) {
registro.setValorTotal(registro.getValorTotal().add(rs.getBigDecimal("valor_total")));
}
group.put(key, registro);
}
for (Map.Entry<String, ExportacaoRMDTipoBPS> entry : group.entrySet()) {
registro = entry.getValue();
if (registro.getQuantidadeTotal().intValue() == registro.getQuantidadeCancelados().intValue()) {
registro.setValorTotal(null);
} else {
registro.setResumoMovimentoDiario(Boolean.TRUE);
}
retorno.add(registro);
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public List<ExportacaoRMDTipoDBP> buscarRegistroRMDTipoDBP(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) {
List<ExportacaoRMDTipoDBP> retorno = new ArrayList<ExportacaoRMDTipoDBP>();
StringBuilder sb = new StringBuilder();
sb.append(" select");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,");
sb.append(" (CASE WHEN ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = (CASE WHEN s.aliasorigen_id IS NULL THEN ed.cveestado ELSE eds.cveestado END)) THEN 5357 ELSE 6357 END) as cod_operacao,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredmunicipal ELSE eis.porcredmunicipal END) as porc_red_municipal,");
sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredestadual ELSE eis.porcredestadual END) as porc_red_estadual,");
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(" (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");
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(" 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 or s.corrida_id is null) 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(" 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");
sb.append(" b.activo = 1 and");
sb.append(" and b.tipoventa_id = 3");
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 (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?");
try {
PreparedStatement ps = connection.prepareStatement(sb.toString());
ps.setLong(1, Long.valueOf(empresaId));
ps.setDate(2, new java.sql.Date(inicio.getTime()));
ps.setDate(3, new java.sql.Date(fim.getTime()));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
ExportacaoRMDTipoDBP registro = null;
Map<String, ExportacaoRMDTipoDBP> group = new HashMap<String, ExportacaoRMDTipoDBP>();
while (rs.next()) {
String key = rs.getString("estado_destino") + "|" + rs.getInt("cod_operacao") + "|" + rs.getString("estado_origem") + "|" + rs.getInt("municipio_origem");
if (group.containsKey(key)) {
registro = group.get(key);
} else {
registro = new ExportacaoRMDTipoDBP();
registro.setUfDestino(rs.getString("estado_destino"));
registro.setCfop(rs.getInt("cod_operacao")); // IM=5357; Servi<76>o IE= 6357
registro.setUfOrigem(rs.getString("estado_origem"));
registro.setMunicipioOrigem(rs.getInt("municipio_origem"));
registro.setCodigoSituacaoTribColunaB(null);
// 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>o na base de calculo; 40 - isentos
if (rs.getInt("isenta") == 1) {
registro.setCodigoSituacaoTribColunaB(40);
}
// 00 - tributa<74><61>o normal; 20 - tributa<74><61>o com redu<64><75>o na base de calculo; 40 - isentos
if (registro.getCodigoSituacaoTribColunaB() == null) {
registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms") == 0 ? 0 : 20);
}
registro.setValorBaseCalculoICMS(BigDecimal.ZERO);
registro.setValorTotal(BigDecimal.ZERO);
registro.setValorICMS(BigDecimal.ZERO);
registro.setValorICMSIsento(BigDecimal.ZERO);
registro.setValorICMSOutros(BigDecimal.ZERO);
}
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)));
}
}
}
}
}
registro.setAliquotaICMS(tributacao_importacao);
if (tributacao_importacao == null) {
tributacao_importacao = BigDecimal.ZERO;
} else {
BigDecimal porc_red = BigDecimal.ZERO;
if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) {
if (porc_red_municipal != null) {
porc_red = porc_red_municipal;
}
} else {
if (porc_red_estadual != null) {
porc_red = porc_red_estadual;
}
}
BigDecimal porc = tributacao_importacao.subtract(porc_red.divide(BigDecimal.valueOf(100d)));
valorIsentaOutros = valorTotal.multiply(porc);
}
BigDecimal valorICMS = valorBaseCalculoICMS.multiply(tributacao_importacao);
registro.setValorBaseCalculoICMS(registro.getValorBaseCalculoICMS().add(valorBaseCalculoICMS));
registro.setValorTotal(registro.getValorTotal().add(valorTotal));
registro.setValorICMS(registro.getValorICMS().add(valorICMS));
registro.setValorICMSIsento(registro.getValorICMSIsento().add(valorIsenta));
registro.setValorICMSOutros(registro.getValorICMSOutros().add(valorIsentaOutros));
group.put(key, registro);
}
for (Map.Entry<String, ExportacaoRMDTipoDBP> entry : group.entrySet()) {
retorno.add(entry.getValue());
}
rs.close();
ps.close();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return retorno;
}
@Override
public void gravarRMDBoleto(Connection connection, List<ImpressaoRMD> rmds, Aidf aidf) {
for (ImpressaoRMD imp : rmds) {
for (DetalhadoRMD det : imp.getDetalhada()) {
StringBuilder sb = new StringBuilder();
PreparedStatement pstmt = null;
try {
sb.append(" update boleto set rmd_id = ").append(aidf.getAidfId()).append(", ");
sb.append(" fecmodif = SYSDATE, usuario_id = ").append(UsuarioLogado.getUsuarioLogado().getUsuarioId());
sb.append(" where boleto_id = ").append(det.getBoletoId());
pstmt = connection.prepareStatement(sb.toString());
pstmt.executeUpdate();
} catch (Exception e) {
log.error("", e);
} finally {
try {
pstmt.close();
} catch (Exception e) {
log.error("", e);
}
}
}
}
}
@Override
public List<ImpressaoRMD> getRegistroImpressaoRMDTipoDVB(Connection connection, Date inicio, Date fim, Integer empresaId,
String cveestado, String rmd) {
List<ImpressaoRMD> list = new ArrayList<ImpressaoRMD>();
// IMPRESSAO RMD MANUAL
String serie = null;
Date data = null;
// int primeiroFolio = 0;
int anteriorFolio = 0;
ImpressaoRMD impRmd = null;
for (DetalhadoRMD brp : buscarRegistroImpressaoRMD(connection, inicio, fim, empresaId, cveestado, false)) {
if (serie == null) {
impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(),
brp.getFechorVenta(), rmd, "SERVI<56>O DE TRANSPORTE", "DVB", "", brp.getSerie());
serie = brp.getSerie();
data = brp.getFechorVenta();
// primeiroFolio = brp.getFolio();
} else {
if (serie.equals(brp.getSerie()) && data.equals(brp.getFechorVenta())) {
if (anteriorFolio + 1 == brp.getFolio()) {
} else {
impRmd.setNumero(brp.getFolio().toString());
list.add(impRmd);
impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(),
brp.getFechorVenta(), rmd, "SERVI<56>O DE TRANSPORTE", "DVB", "", brp.getSerie());
serie = brp.getSerie();
data = brp.getFechorVenta();
// primeiroFolio = brp.getFolio();
}
} else {
impRmd.setNumero(brp.getFolio().toString());
list.add(impRmd);
impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(),
brp.getFechorVenta(), rmd, "SERVI<56>O DE TRANSPORTE", "DVB", "", brp.getSerie());
serie = brp.getSerie();
data = brp.getFechorVenta();
// primeiroFolio = brp.getFolio();
}
}
BigDecimal valorContabil = impRmd.getValorContabil() == null ? BigDecimal.ZERO : impRmd.getValorContabil().add(somarTotalBilhete(brp));
BigDecimal baseCalculo = impRmd.getBaseCalculo() == null ? BigDecimal.ZERO : impRmd.getBaseCalculo().add(
brp.getTarifa() == null ? BigDecimal.ZERO : brp.getTarifa());
BigDecimal aliquota = brp.getIcmsInterestadual();
BigDecimal icms = baseCalculo.multiply(aliquota.divide(BigDecimal.TEN.multiply(BigDecimal.TEN)));
BigDecimal isentos = BigDecimal.ZERO;
BigDecimal outros = valorContabil.subtract(baseCalculo);
impRmd.setValorContabil(valorContabil);
impRmd.setBaseCalculo(baseCalculo);
impRmd.setAliquota(aliquota);
impRmd.setIcms(icms);
impRmd.setIsentos(isentos);
impRmd.setOutros(outros);
impRmd.getDetalhada().add(brp);
anteriorFolio = brp.getFolio();
}
return list;
}
@Override
public List<ImpressaoRMD> getRegistroImpressaoRMDTipoECF(Connection connection, Date inicio, Date fim, Integer empresaId,
String cveestado, String rmd) {
List<ImpressaoRMD> list = new ArrayList<ImpressaoRMD>();
// IMPRESSAO RMD ECF
String serie = null;
Date data = null;
int anteriorFolio = 0;
ImpressaoRMD impRmd = null;
for (DetalhadoRMD brp : buscarRegistroImpressaoRMD(connection, inicio, fim, empresaId, cveestado, true)) {
if (serie == null) {
impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(),
brp.getFechorVenta(), rmd, "SERVI<56>O DE TRANSPORTE", "ECF", brp.getEcf(), brp.getEstadoOrigem());
serie = brp.getEcf();
data = brp.getFechorVenta();
} else {
if (serie.equals(brp.getEcf()) && data.equals(brp.getFechorVenta())) {
int coo = Integer.parseInt(brp.getCoo());
if (anteriorFolio + 1 == coo) {
} else {
impRmd.setNumero(brp.getCoo());
list.add(impRmd);
impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(),
brp.getFechorVenta(), rmd, "SERVI<56>O DE TRANSPORTE", "ECF", brp.getEcf(), brp.getEstadoOrigem());
serie = brp.getEcf();
data = brp.getFechorVenta();
}
} else {
impRmd.setNumero(brp.getCoo());
list.add(impRmd);
impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(),
brp.getFechorVenta(), rmd, "SERVI<56>O DE TRANSPORTE", "ECF", brp.getEcf(), brp.getEstadoOrigem());
serie = brp.getEcf();
data = brp.getFechorVenta();
}
}
BigDecimal valorContabil = impRmd.getValorContabil() == null ? BigDecimal.ZERO : impRmd.getValorContabil().add(somarTotalBilhete(brp));
BigDecimal baseCalculo = impRmd.getBaseCalculo() == null ? BigDecimal.ZERO : impRmd.getBaseCalculo().add(
brp.getTarifa() == null ? BigDecimal.ZERO : brp.getTarifa());
BigDecimal aliquota = brp.getIcmsInterestadual();
BigDecimal icms = baseCalculo.multiply(aliquota.divide(BigDecimal.TEN.multiply(BigDecimal.TEN)));
BigDecimal isentos = BigDecimal.ZERO;
BigDecimal outros = valorContabil.subtract(baseCalculo);
impRmd.setValorContabil(valorContabil);
impRmd.setBaseCalculo(baseCalculo);
impRmd.setAliquota(aliquota);
impRmd.setIcms(icms);
impRmd.setIsentos(isentos);
impRmd.setOutros(outros);
impRmd.getDetalhada().add(brp);
anteriorFolio = brp.getFolio();
}
return list;
}
private BigDecimal somarTotalBilhete(DetalhadoRMD brp) {
BigDecimal total = BigDecimal.ZERO;
total = total.add(brp.getTarifa() == null ? BigDecimal.ZERO : brp.getTarifa());
total = total.add(brp.getTaxaEmbarque() == null ? BigDecimal.ZERO : brp.getTaxaEmbarque());
total = total.add(brp.getPedagio() == null ? BigDecimal.ZERO : brp.getPedagio());
total = total.add(brp.getSeguro() == null ? BigDecimal.ZERO : brp.getSeguro());
total = total.add(brp.getOutros() == null ? BigDecimal.ZERO : brp.getOutros());
return total;
}
public List<DetalhadoRMD> buscarRegistroImpressaoRMD(Connection connection, Date inicio, Date fim,
Integer empresaId, String cveestado, boolean isECF) {
List<DetalhadoRMD> list = new ArrayList<DetalhadoRMD>();
try {
String sql = null;
if (isECF) {
sql = getSqlImpressaoRMDTipoECF();
} else {
sql = getSqlImpressaoRMDTipoDVB();
}
PreparedStatement ps = connection.prepareStatement(sql);
ps.setLong(1, Long.valueOf(empresaId));
ps.setDate(2, new java.sql.Date(inicio.getTime()));
ps.setDate(3, new java.sql.Date(fim.getTime()));
ps.setString(4, cveestado);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
DetalhadoRMD brp = new DetalhadoRMD();
brp.setBoletoId(rs.getLong("boletoId"));
brp.setNumoperacion(rs.getString("numoperacion"));
brp.setSerie(rs.getString("serieCompl"));
brp.setFolio(rs.getInt("folio"));
brp.setEstadoId(rs.getInt("estadoId"));
brp.setFechorVenta(rs.getDate("fechorVenta"));
brp.setEmpresa(rs.getString("empresa"));
brp.setEnderecoEmpresa(rs.getString("enderecoEmpresa"));
brp.setCnpjEmpresa(rs.getString("cnpjEmpresa"));
brp.setIeEmpresa(rs.getString("ieEmpresa"));
brp.setIcmsInterestadual(rs.getBigDecimal("icmsInterestadual"));
brp.setIcmsIntermunicipal(rs.getBigDecimal("icmsIntermunicipal"));
brp.setEstadoOrigem(rs.getString("estadoOrigem"));
brp.setEstadoDestino(rs.getString("estadoDestino"));
brp.setMunicipioOrigem(rs.getString("municipioOrigem"));
brp.setInterEstadual(rs.getBoolean("isInterEstadual"));
brp.setIcmsInterestadual(rs.getBigDecimal("icmsInterestadual"));
brp.setRedBaseCalcIcms(rs.getBigDecimal("redBaseCalcIcms"));
brp.setPorcRedMunicipal(rs.getBigDecimal("porcRedMunicipal"));
brp.setPorcRedEstadual(rs.getBigDecimal("porcRedEstadual"));
brp.setTributacaoImportacao(rs.getBigDecimal("tributacaoImportacao"));
brp.setIsenta(rs.getBigDecimal("isenta"));
brp.setTarifa(rs.getBigDecimal("tarifa"));
brp.setTaxaEmbarque(rs.getBigDecimal("taxaEmbarque"));
brp.setPedagio(rs.getBigDecimal("pedagio"));
brp.setSeguro(rs.getBigDecimal("seguro"));
brp.setOutros(rs.getBigDecimal("outros"));
if (isECF) {
brp.setEcf(rs.getString("ecf"));
brp.setDatamov(rs.getString("datamov"));
brp.setCoo(rs.getString("coo"));
brp.setTotalFiscal(rs.getString("totalFiscal"));
}
list.add(brp);
}
rs.close();
ps.close();
} catch (SQLException e) {
log.error("", e);
}
return list;
}
public String getSqlImpressaoRMDTipoDVB() {
StringBuilder sql = new StringBuilder();
sql.append("select ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.numoperacion as numoperacion, ");
sql.append(" b.numseriepreimpresa as serieCompl, ");
sql.append(" b.numfoliopreimpreso as folio, ");
sql.append(" a.acfiscal as numAidf, ");
sql.append(" a.serie as serieAidf, ");
sql.append(" a.subserie as subSerieAidf, ");
sql.append(" trunc(b.fechorventa) as fechorVenta, ");
sql.append(" e.nombempresa as empresa, ");
sql.append(" e.cnpj as cnpjEmpresa, ");
sql.append(" e.logradouro || ', ' || e.numero || ' - ' || e.bairro || ', ' || ce.nombciudad ");
sql.append(" || ' - ' || ee.cveestado || ', ' || e.cep ");
sql.append(" as enderecoEmpresa, ");
sql.append(" ie.numinscricaoestadual as ieEmpresa, ");
sql.append(" coalesce(eos.estado_id, eo.estado_id) as estadoId, ");
sql.append(" coalesce(ei.icms, eo.icms) as icmsInterestadual, ");
sql.append(" ei.icmsim as icmsIntermunicipal, ");
sql.append(" coalesce(eos.cveestado, eo.cveestado) as estadoOrigem, ");
sql.append(" coalesce(eds.cveestado, ed.cveestado) as estadoDestino, ");
sql.append(" coalesce(cos.codibge, co.codibge) as municipioOrigem, ");
sql.append(" case when((coalesce(eos.cveestado, eo.cveestado)) = ");
sql.append(" (coalesce(eds.cveestado, ed.cveestado))) ");
sql.append(" then 0 else 1 ");
sql.append(" end as isInterEstadual, ");
sql.append(" ei.porcredbaseicms as redBaseCalcIcms, ");
sql.append(" ei.porcredmunicipal as porcRedMunicipal, ");
sql.append(" ei.porcredestadual as porcRedEstadual, ");
sql.append(" ei.tributacaoimportacao as tributacaoImportacao, ");
sql.append(" case when (coalesce(pos.regionmetropolitana_id, po.regionmetropolitana_id, -1) = ");
sql.append(" coalesce(pds.regionmetropolitana_id, pd.regionmetropolitana_id, -2)) ");
sql.append(" then 1 else 0 end as isenta, ");
sql.append(" coalesce(b.preciopagado, 0) as tarifa, ");
sql.append(" coalesce(b.importetaxaembarque, 0) as taxaEmbarque, ");
sql.append(" coalesce(b.importepedagio, 0) as pedagio, ");
sql.append(" coalesce(b.importeseguro, 0) as seguro, ");
sql.append(" coalesce(b.importeoutros, 0) as outros ");
sql.append("from boleto b ");
sql.append(" join empresa e on e.empresa_id = b.empresacorrida_id ");
sql.append(" join ciudad ce on ce.ciudad_id = e.ciudad_id ");
sql.append(" join estado ee on ee.estado_id = ce.estado_id ");
sql.append(" join parada po on po.parada_id = b.origen_id ");
sql.append(" join ciudad co on co.ciudad_id = po.ciudad_id ");
sql.append(" join estado eo on eo.estado_id = co.estado_id ");
sql.append(" join parada pd on pd.parada_id = b.destino_id ");
sql.append(" join ciudad cd on cd.ciudad_id = pd.ciudad_id ");
sql.append(" join estado ed on ed.estado_id = cd.estado_id ");
sql.append(" left join alias_servico s on s.origen_id = b.origen_id ");
sql.append(" and s.destino_id = b.destino_id and (s.corrida_id = b.corrida_id or s.corrida_id is null) ");
sql.append(" and s.ruta_id = b.ruta_id ");
sql.append(" left join parada pos on pos.parada_id = s.aliasorigen_id ");
sql.append(" left join ciudad cos on cos.ciudad_id = pos.ciudad_id ");
sql.append(" left join estado eos on eos.estado_id = cos.estado_id ");
sql.append(" left join parada pds on pds.parada_id = s.aliasdestino_id ");
sql.append(" left join ciudad cds on cds.ciudad_id = pds.ciudad_id ");
sql.append(" left join estado eds on eds.estado_id = cds.estado_id ");
sql.append(" join inscricao_estadual ie on e.empresa_id = ie.empresa_id ");
sql.append(" and ie.estado_id = coalesce(eos.estado_id, eo.estado_id) and ie.activo = 1 ");
sql.append(" join empresa_imposto ei on ei.empresa_id = b.empresacorrida_id ");
sql.append(" and ei.estado_id = coalesce(eos.estado_id, eo.estado_id) and ei.activo = 1 ");
sql.append(" left join aidf a on a.serie = substr(b.numseriepreimpresa, 1, 3) ");
sql.append(" and a.estado_id = (CASE WHEN s.aliasorigen_id IS NULL ");
sql.append(" THEN eo.estado_id ELSE eos.estado_id END) ");
sql.append("where ");
sql.append(" b.activo = 1 ");
sql.append(" and b.tipoventa_id = 3 ");
sql.append(" and b.rmd_id is null ");
sql.append(" and b.indstatusboleto = 'V' ");
sql.append(" and b.empresacorrida_id = ? ");
sql.append(" and b.fechorventa between ? and ? ");
sql.append(" and coalesce(eos.cveestado, eo.cveestado) = ? ");
sql.append("order by estadoId, serieCompl, folio, fechorVenta ");
return sql.toString();
}
public String getSqlImpressaoRMDTipoECF() {
StringBuilder sql = new StringBuilder();
sql.append("select ");
sql.append(" b.boleto_id as boletoId, ");
sql.append(" b.numoperacion as numoperacion, ");
sql.append(" b.numseriepreimpresa as serieCompl, ");
sql.append(" b.numfoliopreimpreso as folio, ");
sql.append(" a.acfiscal as numAidf, ");
sql.append(" a.serie as serieAidf, ");
sql.append(" a.subserie as subSerieAidf, ");
sql.append(" trunc(b.fechorventa) as fechorVenta, ");
sql.append(" e.nombempresa as empresa, ");
sql.append(" e.cnpj as cnpjEmpresa, ");
sql.append(" e.logradouro || ', ' || e.numero || ' - ' || e.bairro || ', ' || ce.nombciudad ");
sql.append(" || ' - ' || ee.cveestado || ', ' || e.cep ");
sql.append(" as enderecoEmpresa, ");
sql.append(" ie.numinscricaoestadual as ieEmpresa, ");
sql.append(" coalesce(eos.estado_id, eo.estado_id) as estadoId, ");
sql.append(" coalesce(ei.icms, eo.icms) as icmsInterestadual, ");
sql.append(" ei.icmsim as icmsIntermunicipal, ");
sql.append(" coalesce(eos.cveestado, eo.cveestado) as estadoOrigem, ");
sql.append(" coalesce(eds.cveestado, ed.cveestado) as estadoDestino, ");
sql.append(" coalesce(cos.codibge, co.codibge) as municipioOrigem, ");
sql.append(" case when((coalesce(eos.cveestado, eo.cveestado)) = ");
sql.append(" (coalesce(eds.cveestado, ed.cveestado))) ");
sql.append(" then 0 else 1 ");
sql.append(" end as isInterEstadual, ");
sql.append(" ei.porcredbaseicms as redBaseCalcIcms, ");
sql.append(" ei.porcredmunicipal as porcRedMunicipal, ");
sql.append(" ei.porcredestadual as porcRedEstadual, ");
sql.append(" ei.tributacaoimportacao as tributacaoImportacao, ");
sql.append(" case when (coalesce(pos.regionmetropolitana_id, po.regionmetropolitana_id, -1) = ");
sql.append(" coalesce(pds.regionmetropolitana_id, pd.regionmetropolitana_id, -2)) ");
sql.append(" then 1 else 0 end as isenta, ");
sql.append(" coalesce(b.preciopagado, 0) as tarifa, ");
sql.append(" coalesce(b.importetaxaembarque, 0) as taxaEmbarque, ");
sql.append(" coalesce(b.importepedagio, 0) as pedagio, ");
sql.append(" coalesce(b.importeseguro, 0) as seguro, ");
sql.append(" coalesce(b.importeoutros, 0) as outros, ");
sql.append(" r4.numserie20 as ecf, ");
sql.append(" r4.datamov as datamov, ");
sql.append(" r4.coo as coo, ");
sql.append(" r4.impsubtotal as totalFiscal ");
sql.append("from fiscal_r4 r4 ");
sql.append(" join boleto b on b.boleto_id = r4.boleto_id ");
sql.append(" join empresa e on e.empresa_id = b.empresacorrida_id ");
sql.append(" join ciudad ce on ce.ciudad_id = e.ciudad_id ");
sql.append(" join estado ee on ee.estado_id = ce.estado_id ");
sql.append(" join parada po on po.parada_id = b.origen_id ");
sql.append(" join ciudad co on co.ciudad_id = po.ciudad_id ");
sql.append(" join estado eo on eo.estado_id = co.estado_id ");
sql.append(" join parada pd on pd.parada_id = b.destino_id ");
sql.append(" join ciudad cd on cd.ciudad_id = pd.ciudad_id ");
sql.append(" join estado ed on ed.estado_id = cd.estado_id ");
sql.append(" left join alias_servico s on s.origen_id = b.origen_id ");
sql.append(" and s.destino_id = b.destino_id and (s.corrida_id = b.corrida_id or s.corrida_id is null) ");
sql.append(" and s.ruta_id = b.ruta_id ");
sql.append(" left join parada pos on pos.parada_id = s.aliasorigen_id ");
sql.append(" left join ciudad cos on cos.ciudad_id = pos.ciudad_id ");
sql.append(" left join estado eos on eos.estado_id = cos.estado_id ");
sql.append(" left join parada pds on pds.parada_id = s.aliasdestino_id ");
sql.append(" left join ciudad cds on cds.ciudad_id = pds.ciudad_id ");
sql.append(" left join estado eds on eds.estado_id = cds.estado_id ");
sql.append(" join inscricao_estadual ie on e.empresa_id = ie.empresa_id ");
sql.append(" and ie.estado_id = coalesce(eos.estado_id, eo.estado_id) and ie.activo = 1 ");
sql.append(" join empresa_imposto ei on ei.empresa_id = b.empresacorrida_id ");
sql.append(" and ei.estado_id = coalesce(eos.estado_id, eo.estado_id) and ei.activo = 1 ");
sql.append(" left join aidf a on a.serie = substr(b.numseriepreimpresa, 1, 3) ");
sql.append(" and a.estado_id = (CASE WHEN s.aliasorigen_id IS NULL ");
sql.append(" THEN eo.estado_id ELSE eos.estado_id END) ");
sql.append("where ");
sql.append(" b.activo = 1 ");
sql.append(" and b.tipoventa_id <> 3 ");
sql.append(" and b.rmd_id is null ");
sql.append(" and b.indstatusboleto = 'V' ");
sql.append(" and b.empresacorrida_id = ? ");
sql.append(" and b.fechorventa between ? and ? ");
sql.append(" and coalesce(eos.cveestado, eo.cveestado) = ? ");
sql.append("order by estadoId, ecf, coo, fechorVenta ");
return sql.toString();
}
}