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.Collections; 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.commons.lang.math.NumberUtils; 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.entidad.Estado; 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.UtiliteriasFiscal; import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoECF; import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoECFBase; 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.ExportacaoRMD; import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoRMDBase; 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.exportacaofiscal.vo.ExportacaoRMDTipoSeqBPS; import com.rjconsultores.ventaboletos.utilerias.exportacaofiscal.vo.ExportacaoRMDTipoSeqDBP; import com.rjconsultores.ventaboletos.utilerias.fiscal.vo.DetalhadoFiscal; import com.rjconsultores.ventaboletos.utilerias.fiscal.vo.FiscalRdi; import com.rjconsultores.ventaboletos.utilerias.fiscal.vo.RdiValidacion; 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; import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; @Repository("fiscalDAO") public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO { private static final String DATE_FORMAT_FISCAL = "yyyyMMdd"; private static final String DATE_FORMAT_DMYHMS = "dd/MM/yyyy hh:mm:ss"; private static final String DATE_FORMAT_DMY = "dd/MM/yyyy"; private static final BigDecimal ZERO = BigDecimal.ZERO; private static final String CODIGO_INDICADOR_CONTR_PREVIDENCIARIA = "00000060"; 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 buscaDatosFiscaisECFManual(Date inicio, Date fim, Integer empresaId, Integer estadoId, Connection connection, boolean isBoletoHist) 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(" e.empresa_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 "); if (isBoletoHist) sql.append("from boleto_hist b "); else sql.append("from boleto b "); sql.append(" inner join marca m on m.marca_id = b.marca_id "); sql.append(" inner join empresa e on e.empresa_id = m.empresa_id "); 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(" 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 e.empresa_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(" e.empresa_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 listManuais = new ArrayList(); 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 ( t2.cnpj = e.cnpjnumero ) or "); sql.append(" ( 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(" 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 ( t2.cnpj = e.cnpjnumero ) or "); sql.append(" ( 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(" 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 ( t2.cnpj = e.cnpjnumero ) or "); sql.append(" (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ção a ordenaçã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 buscaDatosFiscaisReducaoZ(Date inicio, Date fim, Integer empresaId, Integer estadoId, boolean isPendencias, Connection connection) throws SQLException { if (isPendencias) { List list = new ArrayList(); 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 montarItensReducaoZ(Date inicio, Date fim, Integer empresaId, Integer estadoId, String sql, Connection connection) throws SQLException { List listRedZ = new ArrayList(); 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, boolean isBoletoHist) { 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(" r4.boleto_id as boletoId, "); sql.append(" me.empresa_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(" cajb.preciopagado as importetarifa, "); sql.append(" cajb.importetaxaembarque as importetaxaembarque, "); sql.append(" cajb.importepedagio as importepedagio, "); sql.append(" cajb.importeseguro as importeseguro, "); sql.append(" 'C' as status, "); sql.append(" cajb.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 "); if (isBoletoHist) sql.append(" caja_hist caj "); else sql.append(" caja caj "); sql.append(" INNER JOIN "); if (isBoletoHist) sql.append(" caja_hist cajb "); else sql.append(" caja cajb "); sql.append(" on (((cajb.feccorrida = caj.feccorrida) or (cajb.feccorrida is null and caj.feccorrida is null)) "); sql.append(" and ((cajb.numasiento = caj.numasiento) or (cajb.numasiento is null and caj.numasiento is null)) "); sql.append(" and cajb.numfoliosistema = caj.numfoliosistema and cajb.origen_id = caj.origen_id and cajb.destino_id=caj.destino_id "); sql.append(" and ((cajb.tipoventa_id not in (5,12,18,81,41,49) "); sql.append(" and (cajb.indstatusboleto = 'V' or (cajb.indstatusboleto = 'T' and cajb.indreimpresion=0) )) "); sql.append(" or (cajb.tipoventa_id in (5,12,18,81,41,49) and cajb.indstatusboleto = 'E')) ) "); sql.append(" INNER JOIN fiscal_r4 r4 on r4.caja_id = cajb.caja_id "); 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 marca me ON me.marca_id = cajb.marca_id "); sql.append(" INNER JOIN clase_servicio cs ON cs.claseservicio_id = cajb.claseservicio_id "); sql.append(" LEFT JOIN evento_extra ee on ee.boleto_id = r4.boleto_id and ee.tipoeventoextra_id in (42) "); sql.append(" LEFT JOIN alias_servico ase ON ase.origen_id = cajb.origen_id "); sql.append(" and ase.destino_id = caj.destino_id and ase.ruta_id = cajb.ruta_id and ase.activo = 1 and ase.corrida_id is null "); sql.append(" INNER JOIN parada o ON coalesce(ase.aliasorigen_id, cajb.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, cajb.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 caj.fechorventa BETWEEN :DATE_INICIO AND :DATE_FIM "); sql.append(" and me.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND eo.estado_id = :ESTADO_ID "); sql.append(" and caj.motivocancelacion_id IN (31,32,10,37,99,36) "); sql.append(" and caj.indcancelacion = 1 "); sql.append(" and caj.indstatusboleto = 'C' "); sql.append(" and r4.indcancelamento = 'N' "); 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, boolean isBoletoHist) { StringBuilder sql = new StringBuilder(); sql.append("SELECT numImpressora, "); sql.append(" coo, "); sql.append(" valorTotal, "); sql.append(" dataEmissao, "); sql.append(" cnpjCliente, "); sql.append(" boletoId, "); sql.append(" empresaId, "); sql.append(" origenId, "); sql.append(" origenUf, "); sql.append(" destinoId, "); sql.append(" destinoUf, "); sql.append(" cnpjImpressora, "); sql.append(" numpdv, "); sql.append(" repTributado, "); sql.append(" valorItem, "); sql.append(" tipoPassagem, "); sql.append(" numItem, "); sql.append(" tipoPassagem, "); sql.append(" numItem, "); sql.append(" codProduto, "); sql.append(" modeloImpressora, "); sql.append(" numCaixa, "); sql.append(" importetarifa, "); sql.append(" importetaxaembarque, "); sql.append(" importepedagio, "); sql.append(" importeseguro, "); sql.append(" claseServicio, "); sql.append(" cnpjEcf, "); sql.append(" impostoEstado, "); sql.append(" status, "); sql.append(" indcancelamento "); sql.append(" "); sql.append("FROM (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(" m.empresa_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 "); sql.append(" AND r4.coo = r5.coo "); sql.append(" AND r4.datamov = r5.datamov "); sql.append(" AND r4.contador = r5.contador "); sql.append(" LEFT JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 "); if (isBoletoHist) sql.append(" INNER JOIN boleto_hist b ON b.boleto_id = r4.boleto_id "); else sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id "); // sql.append(" INNER JOIN boleto_hist b ON b.boleto_id = r4.boleto_id and fi.numserie = b.serieimpfiscal "); sql.append(" INNER JOIN marca m ON m.marca_id = b.marca_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 "); sql.append(" AND ase.ruta_id = b.ruta_id "); sql.append(" AND ase.activo = 1 "); sql.append(" 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 ei.estado_id = eo.estado_id "); sql.append(" AND b.marca_id = ei.empresa_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 :STR_INICIO AND :STR_FIM "); sql.append(" AND m.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND eo.estado_id = :ESTADO_ID "); sql.append(" AND (r4.indcancelamento = 'N') "); sql.append(" "); sql.append(" union all "); sql.append(" "); 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(" m.empresa_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 "); sql.append(" AND r4.coo = r5.coo "); sql.append(" AND r4.datamov = r5.datamov "); sql.append(" AND r4.contador = r5.contador "); sql.append(" LEFT JOIN fiscal_impressora fi ON fi.numserie20 = r4.numserie20 "); if (isBoletoHist) sql.append(" INNER JOIN boleto_hist b ON b.boleto_id = r4.boleto_id "); else sql.append(" INNER JOIN boleto b ON b.boleto_id = r4.boleto_id "); // sql.append(" INNER JOIN boleto_hist b ON b.boleto_id = r4.boleto_id "); sql.append(" INNER JOIN marca m ON m.marca_id = b.marca_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 "); sql.append(" AND ase.ruta_id = b.ruta_id "); sql.append(" AND ase.activo = 1 "); sql.append(" 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 ei.estado_id = eo.estado_id "); sql.append(" AND b.marca_id = ei.empresa_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 :STR_INICIO AND :STR_FIM "); sql.append(" AND m.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND eo.estado_id = :ESTADO_ID "); sql.append(" and (r4.indcancelamento = 'S' "); sql.append(" AND exists (SELECT r3.numserie20 "); sql.append(" FROM fiscal_r3 r3 "); sql.append(" WHERE r3.numserie20 = r4.numserie20 "); sql.append(" AND r3.datamov = r4.datamov "); sql.append(" AND r3.totparcial = 'Can-T'))) QY "); sql.append("ORDER BY QY.dataEmissao, "); sql.append(" QY.numImpressora, "); sql.append(" QY.coo, "); sql.append(" QY.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(" INNER JOIN marca m ON m.marca_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(" 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 :STR_INICIO AND :STR_FIM "); sql.append(" AND m.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND co.estado_id = :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(" m.empresa_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(" INNER JOIN marca m ON m.marca_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(" 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 :STR_INICIO AND :STR_FIM "); sql.append(" AND m.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND co.estado_id = :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, m.empresa_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(" m.empresa_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(" INNER JOIN marca m ON m.marca_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(" 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 :STR_INICIO AND :STR_FIM "); sql.append(" AND m.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND co.estado_id = :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, m.empresa_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(" m.empresa_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(" INNER JOIN marca m ON m.marca_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(" 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 :STR_INICIO AND :STR_FIM "); sql.append(" AND m.empresa_id = :EMPRESA_ID "); sql.append(isEstadoTodos ? "" : " AND co.estado_id = :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, m.empresa_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 buscaDatosFiscaisECF(Date inicio, Date fim, Integer empresaId, Integer estadoId, boolean isNormal, boolean isCancelados, boolean isPendencias, Connection connection, boolean isBoletoHist) throws SQLException { if (isNormal) { return montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECF(isEstadoTodos(estadoId), isBoletoHist), false); } else if (isCancelados) { return montarItensECF(inicio, fim, empresaId, estadoId, connection, sqlFiscaisECFCancelados(isEstadoTodos(estadoId), isBoletoHist), true); } else if (isPendencias) { List list = new ArrayList(); 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 montarItensECF(Date inicio, Date fim, Integer empresaId, Integer estadoId, Connection connection, String sql, boolean isDate) throws SQLException { boolean isEstadoTodos = isEstadoTodos(estadoId); NamedParameterStatement stmt = new NamedParameterStatement(connection, sql); stmt.getStatement().setFetchSize(100); stmt.setInt("EMPRESA_ID", empresaId); if (isDate) { stmt.setTimestamp("DATE_INICIO", new java.sql.Timestamp(DateUtil.inicioFecha(inicio).getTime())); stmt.setTimestamp("DATE_FIM", new java.sql.Timestamp(DateUtil.fimFecha(fim).getTime())); } else { stmt.setString("STR_INICIO", DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL)); stmt.setString("STR_FIM", DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL)); } if (!isEstadoTodos) { stmt.setInt("ESTADO_ID", estadoId); } List list = new ArrayList(); ImportacionFiscalVO fiscal = null; String codProduto = null; List columns = new ArrayList(); ResultSetMetaData rsMetaData = stmt.getStatement().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 itensFiscais = validaItensFiscais(fiscal, codProduto); fiscal.setItensFiscais(itensFiscais); list.add(fiscal); fiscal = item; } fiscal.getItensFiscais().add(item); } if (fiscal != null) { List 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 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 itensFiscais = new ArrayList(); 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 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 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 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 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 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 importacionNaoFiscalVOs = new ArrayList(); 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 ExportacaoECF buscarRegistroECF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { ExportacaoECF exportacaoECF = new ExportacaoECF(); StringBuilder sb = new StringBuilder(); sb.append(" select distinct"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie20 as ecf,"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie as numserie,"); sb.append(" (case when r2.numserie20 is null then '000001' else r2.cooinicial end) as cooinicial,"); sb.append(" (case when r2.numserie20 is null then '000001' else r2.coofinal end) as coofinal,"); sb.append(" (case when r2.numserie20 is null then '0000' else r2.crz end) as crz,"); sb.append(" (case when r2.numserie20 is null then '0000' else r2.cro end) as cro,"); sb.append(" (case when r2.numserie20 is null then '000000' else r2.coo end) as r2_coo,"); sb.append(" to_char(c.feccreacion, 'yyyymmdd') as datamov,"); sb.append(" (case when r4.caja_id is null then '000001' else r4.coo end) as r4_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 (coalesce(case when s.aliasorigen_id is null then po.regionmetropolitana_id else pos.regionmetropolitana_id end, -1) = coalesce(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(" ((case when coalesce(r.indtribtarifa,0) = 1 then c.preciopagado else 0 end) + (case when coalesce(r.indtribtaxaembarque,0) = 1 then c.importetaxaembarque else 0 end) + (case when coalesce(r.indtribpedagio,0) = 1 then c.importepedagio else 0 end)) as valortributado,"); 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(" coalesce(c.preciopagado,0) + coalesce(c.importetaxaembarque,0) + coalesce(c.importeseguro,0) + coalesce(c.importepedagio,0) + coalesce(c.importeoutros,0) as valortotal,"); sb.append(" c.numfoliosistema as numfoliosistema,"); sb.append(" c.caja_id"); sb.append(" from caja c"); sb.append(" join ruta r on r.ruta_id = c.ruta_id"); sb.append(" join parada po on po.parada_id = c.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 = c.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 = c.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" join fiscal_impressora imp on imp.numserie = c.serieimpfiscal"); sb.append(" left join estado e on e.estado_id = imp.estadolocal_id"); sb.append(" left join alias_servico s on s.origen_id = c.origen_id and s.destino_id = c.destino_id and (s.corrida_id = c.corrida_id or s.corrida_id is null) and s.ruta_id = c.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 = c.empresacorrida_id and eis.estado_id = eos.estado_id"); sb.append(" left join fiscal_r4 r4 on r4.caja_id = c.caja_id"); sb.append(" left join fiscal_r2 r2 on r2.numserie20 = imp.numserie20 and r2.datamov = to_char(c.feccreacion, 'YYYYMMDD')"); sb.append(" where c.activo = 1 and po.activo = 1 and co.activo = 1 and eo.activo = 1 and ei.activo = 1"); sb.append(" and coalesce(case when s.aliasorigen_id is null then ei.activo else eis.activo end, 0) = 1"); sb.append(" and c.serieimpfiscal is not null"); sb.append(" and ((c.indreimpresion = 0 and c.motivocancelacion_id is null and c.numfoliosistema is not null) or (c.indstatusboleto = 'E' and c.indreimpresion = 1))"); sb.append(" and (coalesce(c.preciopagado,0) + coalesce(c.importetaxaembarque,0) + coalesce(c.importeseguro,0) + coalesce(c.importepedagio,0) + coalesce(c.importeoutros,0)) > 0"); sb.append(" and c.feccreacion >= to_date(?,'DD/MM/YYYY HH24:MI:SS') and c.feccreacion <= to_date(?,'DD/MM/YYYY HH24:MI:SS')"); sb.append(" and c.empresacorrida_id = ?"); sb.append(" and ((case when s.aliasorigen_id is null then eo.cveestado else eos.cveestado end) = ?)"); // sb.append(" and r2.numserie20 = 'BE091410100011239069'"); try { PreparedStatement ps = connection.prepareStatement(sb.toString()); ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setLong(3, Long.valueOf(empresaId)); ps.setString(4, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoECFBase registro = null; while (rs.next()) { BigDecimal valortributado = BigDecimal.ZERO; BigDecimal valortotal = BigDecimal.ZERO; if (rs.getBigDecimal("valortributado") != null) { valortributado = rs.getBigDecimal("valortributado"); } if (rs.getBigDecimal("valortotal") != null) { valortotal = rs.getBigDecimal("valortotal"); } registro = new ExportacaoECFBase(); registro.setEcf(rs.getString("ecf")); registro.setNumeroSerie(rs.getString("numserie")); 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.setCooReducaoZ(Integer.valueOf(rs.getString("r2_coo"))); registro.setDataEmissao(rs.getString("datamov")); registro.setCoo(Integer.valueOf(rs.getString("r4_coo"))); registro.setEstabelecimento(rs.getString("codestabelecimento")); registro.setEstabelecimentoECF(rs.getString("codestabelecimentoimpressora")); registro.setNumeroIdentificacaoECF(rs.getString("numeroidentificacao") == null || rs.getString("numeroidentificacao").isEmpty() ? "0" : rs.getString("numeroidentificacao")); registro.setUfOrigem(rs.getString("estado_origem")); registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem"))); registro.setMunicipioDestino(Integer.valueOf(rs.getString("municipio_destino"))); registro.setUfDestino(rs.getString("estado_destino")); registro.setReducaoBaseCalcICMS(rs.getBigDecimal("red_base_calc_icms")); registro.setPorcReducaoMunicipal(rs.getBigDecimal("porc_red_municipal")); registro.setPorcReducaoEstadual(rs.getBigDecimal("porc_red_estadual")); registro.setTributacaoImportacao(rs.getBigDecimal("tributacao_importacao")); registro.setNumFolioSistema(rs.getString("numFolioSistema")); registro.setInfoPadraoBilhetePassagem(CODIGO_INDICADOR_CONTR_PREVIDENCIARIA); registro.setIsenta(rs.getInt("isenta")); registro.setValorTributado(valortributado); registro.setValorTotal(valortotal); exportacaoECF.getListaRegistroECF().add(registro); } rs.close(); ps.close(); exportacaoECF.gerarListas(); } catch (Exception e) { log.error(e.getMessage(), e); } return exportacaoECF; } @Override public List buscarRegistroECFTipoCFC(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(" select ecf, numserie, datamov, cooinicial, coofinal, crz, cro, coo, codestabelecimento, codestabelecimentoimpressora, numeroidentificacao, estadoorigem, sum(totalisenta) as totalisenta, sum(vendabrutadiaria) as vendabrutadiaria, sum(totgeral) as totgeral, sum(totalvenda) as totalvenda"); sb.append(" from ("); 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(" coalesce(("); sb.append(" select sum((coalesce(to_number(r4i.imptotalliquido), 0) / 100 - coalesce((select sum(to_number(r5x.imptotalliquido) / 100) from fiscal_r5 r5x where r5x.contador = r4i.contador and r5x.numserie20 = r4i.numserie20 and r5x.totparcial like 'N1'), 0)))"); sb.append(" from fiscal_r4 r4i"); sb.append(" join caja ci on ci.caja_id = r4i.caja_id"); sb.append(" join parada poi on poi.parada_id = ci.origen_id"); sb.append(" join parada pdi on pdi.parada_id = ci.destino_id"); sb.append(" left join alias_servico si on si.origen_id = ci.origen_id and si.destino_id = ci.destino_id and (si.corrida_id = ci.corrida_id or si.corrida_id is null) and si.ruta_id = ci.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 r4i.numserie20 = r4.numserie20 and r4i.datamov = r2.datamov"); 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(" ), 0) as totalisenta,"); sb.append(" to_number(r2.vendabrutadiaria)/100 as vendabrutadiaria,"); sb.append(" to_number(r2.totgeral)/100 as totgeral,"); sb.append(" ("); sb.append(" (to_number(coalesce(r4.imptotalliquido,'0')) / 100) - "); sb.append(" coalesce(("); sb.append(" select sum(to_number(coalesce(r5x.imptotalliquido,'0')) / 100)"); sb.append(" from fiscal_r5 r5x"); sb.append(" where r5x.contador = r4.contador and r5x.numserie20 = r4.numserie20 and r5x.totparcial like 'N1'"); sb.append(" ), 0)"); sb.append(" ) as totalvenda,"); sb.append(" b.boleto_id as caja_id"); 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 b.activo = 1"); sb.append(" and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1"); sb.append(" and coalesce(r4.indcancelamento, 'N') <> 'S'"); sb.append(" and r4.datamov >= ? and r4.datamov <= ?"); sb.append(" and b.empresacorrida_id = ?"); sb.append(" and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); sb.append(" UNION"); sb.append(" select distinct"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie20 as ecf,"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie as numserie,"); sb.append(" to_char(c.feccreacion, 'YYYYMMDD') as datamov,"); sb.append(" case when r2.numserie20 is null then '000001' else r2.cooinicial end as cooinicial,"); sb.append(" case when r2.numserie20 is null then '000001' else r2.coofinal end as coofinal,"); sb.append(" case when r2.numserie20 is null then '0000' else r2.crz end as crz,"); sb.append(" case when r2.numserie20 is null then '0000' else r2.cro end as cro,"); sb.append(" case when r2.numserie20 is null then '000000' else r2.coo end 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(ci.preciopagado), 0)"); sb.append(" from caja ci"); sb.append(" join parada poi on poi.parada_id = ci.origen_id"); sb.append(" join parada pdi on pdi.parada_id = ci.destino_id"); sb.append(" left join alias_servico si on si.origen_id = ci.origen_id and si.destino_id = ci.destino_id and (si.corrida_id = ci.corrida_id or si.corrida_id is null) and si.ruta_id = ci.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 ci.caja_id = c.caja_id"); 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(" 0 as vendabrutadiaria,"); sb.append(" ("); sb.append(" select nvl(sum(ci.preciopagado + ci.importetaxaembarque + ci.importeseguro + ci.importepedagio + ci.importeoutros), 0)"); sb.append(" from caja ci"); sb.append(" where ci.caja_id = c.caja_id"); sb.append(" ) as totgeral,"); sb.append(" ("); sb.append(" select nvl(sum(ci.preciopagado), 0)"); sb.append(" from caja ci"); sb.append(" where ci.caja_id = c.caja_id"); sb.append(" ) as totalvenda,"); sb.append(" c.caja_id"); sb.append(" from caja c"); sb.append(" join parada po on po.parada_id = c.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 = c.empresacorrida_id and ei.estado_id = co.estado_id"); sb.append(" join fiscal_impressora imp on imp.numserie = c.serieimpfiscal"); sb.append(" left join alias_servico s on s.origen_id = c.origen_id and s.destino_id = c.destino_id and (s.corrida_id = c.corrida_id or s.corrida_id is null) and s.ruta_id = c.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 = c.empresacorrida_id and eis.estado_id = cos.estado_id"); sb.append(" left join fiscal_r4 r4 on r4.caja_id = c.caja_id"); sb.append(" left join estado e on e.estado_id = imp.estadolocal_id"); sb.append(" left join fiscal_r2 r2 on r2.numserie20 = imp.numserie20 and r2.datamov = to_char(c.feccreacion, 'YYYYMMDD')"); sb.append(" where c.activo = 1 and po.activo = 1 and co.activo = 1 and eo.activo = 1 and ei.activo = 1"); sb.append(" and c.serieimpfiscal is not null and r4.caja_id is null"); sb.append(" and ((c.indreimpresion = 0 and c.motivocancelacion_id is null and c.numfoliosistema is not null) or (c.indstatusboleto = 'E' and c.indreimpresion = 1))"); sb.append(" and coalesce(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1"); sb.append(" and c.feccreacion >= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS') and c.feccreacion <= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')"); sb.append(" and c.empresacorrida_id = ?"); sb.append(" and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); sb.append(" )"); sb.append(" having sum(totalvenda) > 0"); sb.append(" group by ecf, numserie, datamov, cooinicial, coofinal, crz, cro, coo, codestabelecimento, codestabelecimentoimpressora, numeroidentificacao, estadoorigem"); sb.append(" order by 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); ps.setString(5, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY + " 00:00:00")); ps.setString(6, DateUtil.getStringDate(fim, DATE_FORMAT_DMY + " 23:59:59")); ps.setLong(7, Long.valueOf(empresaId)); ps.setString(8, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoECFTipoCFC registro = null; while (rs.next()) { BigDecimal totalIsenta = BigDecimal.ZERO; BigDecimal totalvenda = BigDecimal.ZERO; if (rs.getBigDecimal("totalisenta") != null) { totalIsenta = rs.getBigDecimal("totalisenta"); } if (rs.getBigDecimal("totalvenda") != null) { totalvenda = rs.getBigDecimal("totalvenda"); } 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(totalvenda); registro.setValorIsentas(totalIsenta); registro.setEstabelecimentoECF(rs.getString("codestabelecimentoimpressora")); registro.setNumeroSerie(rs.getString("numserie")); registro.setInfoPadraoBilhetePassagem(CODIGO_INDICADOR_CONTR_PREVIDENCIARIA); retorno.add(registro); } rs.close(); ps.close(); } catch (Exception e) { log.error(e.getMessage(), e); } return retorno; } @Override public List buscarRegistroECFTipoCCF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(" select ecf, datamov, coo, sum(valortarifa) as valortarifa, sum(preciopagado) as preciopagado, municipio_origem, estado_origem, municipio_destino, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao, isenta, numfoliosistema, sum(valortotal) as valortotal"); sb.append(" from ("); sb.append(" select distinct"); sb.append(" r4.numserie20 as ecf,"); sb.append(" r4.datamov as datamov,"); sb.append(" r4.coo as coo,"); sb.append(" ("); sb.append(" (to_number(coalesce(r4.imptotalliquido,'0')) / 100) - "); sb.append(" coalesce(("); sb.append(" select sum(to_number(coalesce(r5x.imptotalliquido,'0')) / 100)"); sb.append(" from fiscal_r5 r5x"); sb.append(" where r5x.contador = r4.contador and r5x.numserie20 = r4.numserie20 and r5x.totparcial like 'N1'"); sb.append(" ), 0)"); sb.append(" ) 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(" to_number(r4.impsubtotal)/100 as valortotal,"); sb.append(" b.numfoliosistema as numfoliosistema,"); sb.append(" b.boleto_id as caja_id"); 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.totparcial not like 'N1'"); 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) = ?)"); sb.append(" UNION"); sb.append(" select distinct"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie20 as ecf,"); sb.append(" to_char(c.feccreacion, 'YYYYMMDD') as datamov,"); sb.append(" '000001' as coo,"); sb.append(" c.preciopagado 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(" c.preciopagado + c.importetaxaembarque + c.importeseguro + c.importepedagio + c.importeoutros as valortotal,"); sb.append(" c.numfoliosistema as numfoliosistema,"); sb.append(" c.caja_id"); sb.append(" from caja c"); sb.append(" join parada po on po.parada_id = c.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 = c.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 = c.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" join fiscal_impressora imp on imp.numserie = c.serieimpfiscal"); sb.append(" left join alias_servico s on s.origen_id = c.origen_id and s.destino_id = c.destino_id and (s.corrida_id = c.corrida_id or s.corrida_id is null) and s.ruta_id = c.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 = c.empresacorrida_id and eis.estado_id = eos.estado_id"); sb.append(" left join fiscal_r4 r4 on r4.caja_id = c.caja_id"); sb.append(" left join fiscal_r2 r2 on r2.numserie20 = imp.numserie20 and r2.datamov = to_char(c.feccreacion, 'YYYYMMDD')"); sb.append(" where c.activo = 1 and po.activo = 1 and co.activo = 1 and eo.activo = 1 and ei.activo = 1"); sb.append(" and coalesce(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1"); sb.append(" and c.serieimpfiscal is not null and r4.caja_id is null"); sb.append(" and ((c.indreimpresion = 0 and c.motivocancelacion_id is null and c.numfoliosistema is not null) or (c.indstatusboleto = 'E' and c.indreimpresion = 1))"); sb.append(" and (c.preciopagado + c.importetaxaembarque + c.importeseguro + c.importepedagio + c.importeoutros) > 0"); sb.append(" and c.feccreacion >= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS') and c.feccreacion <= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')"); sb.append(" and c.empresacorrida_id = ?"); sb.append(" and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); sb.append(" ) "); sb.append(" group by ecf, datamov, coo, municipio_origem, estado_origem, municipio_destino, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao, isenta, numfoliosistema"); 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); ps.setString(5, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY + " 00:00:00")); ps.setString(6, DateUtil.getStringDate(fim, DATE_FORMAT_DMY + " 23:59:59")); ps.setLong(7, Long.valueOf(empresaId)); ps.setString(8, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoECFTipoCCF registro = null; while (rs.next()) { BigDecimal valorTributado = BigDecimal.ZERO; if (rs.getString("valortarifa") != null) { valorTributado = BigDecimal.valueOf(Double.valueOf(rs.getString("valortarifa"))); } else { valorTributado = 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(valorTributado); 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ção normal; 20 - tributação com redução na base de calculo; 40 - isentos if (rs.getInt("isenta") == 1) { registro.setCodigoSituacaoTribColunaB(40); } registro.setUfOrigem(rs.getString("estado_origem")); registro.setMunicipioOrigem(Integer.valueOf(rs.getString("municipio_origem"))); registro.setUfDestino(rs.getString("estado_destino")); // IM=5357; Serviço IE= 6357 if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { registro.setCfop(5357); } else { registro.setCfop(6357); } // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos if (registro.getCodigoSituacaoTribColunaB() == null) { registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms") == 0 ? 0 : 20); } // TODO: Mudança para o valor tributado (Email no dia 9 de agosto de 2017 08:28) BigDecimal valorTotal = valorTributado; // BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal"))); 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 ("30|40|41|50|60".contains(registro.getCodigoSituacaoTribColunaB().toString())) { tributacao_importacao = 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ão Metropolitanao ou seja, quando o campo CSTB for "40", esse campo deve vir "2". Do contrário, deve vir "1" registro.setTributacaoICMS(registro.getCodigoSituacaoTribColunaB() == 40 ? 2 : 1); registro.setValorBaseCalculoICMS(valorBaseCalculoICMS); registro.setAliquotaICMS(tributacao_importacao); if (valorTotal.doubleValue() != 0) { retorno.add(registro); } } rs.close(); ps.close(); } catch (Exception e) { log.error(e.getMessage(), e); } return retorno; } @Override public List buscarRegistroECFTipoICF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(" select ecf, datamov, coo, municipio_origem, estado_origem, municipio_destino, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao, isenta, sum(valortotal) as valortotal"); sb.append(" from ("); 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 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(" ("); sb.append(" (to_number(coalesce(r4.imptotalliquido,'0')) / 100) - "); sb.append(" coalesce(("); sb.append(" select sum(to_number(coalesce(r5x.imptotalliquido,'0')) / 100)"); sb.append(" from fiscal_r5 r5x"); sb.append(" where r5x.contador = r4.contador and r5x.numserie20 = r4.numserie20 and r5x.totparcial like 'N1'"); sb.append(" ), 0)"); sb.append(" ) 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(" UNION"); sb.append(" select distinct"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie20 as ecf,"); sb.append(" to_char(c.feccreacion, 'YYYYMMDD') as datamov,"); sb.append(" '000001' 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 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(" (c.preciopagado) as valortotal"); sb.append(" from caja c"); sb.append(" join parada po on po.parada_id = c.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 = c.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 = c.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" join fiscal_impressora imp on imp.numserie = c.serieimpfiscal"); sb.append(" left join alias_servico s on s.origen_id = c.origen_id and s.destino_id = c.destino_id and (s.corrida_id = c.corrida_id or s.corrida_id is null) and s.ruta_id = c.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 = c.empresacorrida_id and eis.estado_id = eos.estado_id"); sb.append(" left join fiscal_r4 r4 on r4.caja_id = c.caja_id"); sb.append(" left join fiscal_r2 r2 on r2.numserie20 = imp.numserie20 and r2.datamov = to_char(c.feccreacion, 'YYYYMMDD')"); sb.append(" where c.activo = 1 and po.activo = 1 and co.activo = 1 and eo.activo = 1 and ei.activo = 1"); sb.append(" and coalesce(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1"); sb.append(" and ((c.indreimpresion = 0 and c.motivocancelacion_id is null and c.numfoliosistema is not null) or (c.indstatusboleto = 'E' and c.indreimpresion = 1))"); sb.append(" and (c.preciopagado) > 0"); sb.append(" and c.serieimpfiscal is not null and r4.caja_id is null"); sb.append(" and c.feccreacion >= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS') and c.feccreacion <= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')"); sb.append(" and c.empresacorrida_id = ?"); sb.append(" and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); sb.append(" )"); sb.append(" group by ecf, datamov, coo, municipio_origem, estado_origem, municipio_destino, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao, isenta"); sb.append(" order by ecf, 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); ps.setString(5, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY + " 00:00:00")); ps.setString(6, DateUtil.getStringDate(fim, DATE_FORMAT_DMY + " 23:59:59")); ps.setLong(7, Long.valueOf(empresaId)); ps.setString(8, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoECFTipoICF registro = null; Map group = new HashMap(); while (rs.next()) { BigDecimal valorTotal = rs.getBigDecimal("valortotal"); if (valorTotal == null || valorTotal.doubleValue() == 0) { continue; } 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 = MoneyHelper.subtrair(valorTotal, valorBaseCalculoICMS); String ecf = rs.getString("ecf"); String datamov = rs.getString("datamov"); String ufDestino = ""; String ufOrigem = ""; Integer municipioOrigem = 0; Integer cfop = 0; // IM=5357; Serviço IE= 6357 // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos Integer codigoSituacaoTribColunaB = null; 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ço IE= 6357 if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { cfop = 5357; } else { cfop = 6357; } // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos if (codigoSituacaoTribColunaB == null) { codigoSituacaoTribColunaB = rs.getInt("red_base_calc_icms") == 0 ? 0 : 20; } if (codigoSituacaoTribColunaB == 40) { tributacao_importacao = BigDecimal.ZERO; valorBaseCalculoICMS = BigDecimal.ZERO; valorICMSDebitado = BigDecimal.ZERO; valorICMSOutros = BigDecimal.ZERO; valorICMSIsento = valorTotal; } String key = ecf + "|" + datamov + "|" + ufDestino + "|" + cfop.toString() + "|" + codigoSituacaoTribColunaB.toString(); if (group.containsKey(key)) { registro = group.get(key); valorTotal = MoneyHelper.somar(valorTotal, registro.getValorTotal()); valorBaseCalculoICMS = MoneyHelper.somar(valorBaseCalculoICMS, registro.getValorBaseCalculoICMS()); valorICMSDebitado = MoneyHelper.somar(valorICMSDebitado, registro.getValorICMSDebitado()); valorICMSIsento = MoneyHelper.somar(valorICMSIsento, registro.getValorICMSIsento()); valorICMSOutros = MoneyHelper.somar(valorICMSOutros, registro.getValorICMSOutros()); } else { registro = new ExportacaoECFTipoICF(); registro.setEcf(ecf); registro.setDataEmissao(datamov); registro.setUfDestino(ufDestino); registro.setCfop(cfop); // IM=5357; Serviço IE= 6357 registro.setCodigoSituacaoTribColunaB(codigoSituacaoTribColunaB); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos registro.setAliquotaICMS(tributacao_importacao); registro.setUfOrigem(ufOrigem); registro.setMunicipioOrigem(municipioOrigem); registro.setRedutorBaseCalculoIcms(red_base_calc_icms); registro.setRedutorMunicipalIcms(porc_red_municipal); registro.setRedutorEstadualIcms(porc_red_estadual); group.put(key, registro); } registro.setValorTotal(valorTotal); registro.setValorBaseCalculoICMS(valorBaseCalculoICMS); registro.setValorICMSDebitado(valorICMSDebitado); registro.setValorICMSIsento(valorICMSIsento); registro.setValorICMSOutros(valorICMSOutros); } for (Map.Entry entry : group.entrySet()) { retorno.add(entry.getValue()); } rs.close(); ps.close(); } catch (Exception e) { log.error(e.getMessage(), e); } return retorno; } @Override public List buscarRegistroECFTipoPRC(final Connection conn, final Date inicio, final Date fim, final Integer empresaId, final String cveestado) { final List retorno = new ArrayList(); 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(" ("); sb.append(" (to_number(coalesce(r4.imptotalliquido,'0')) / 100) - "); sb.append(" coalesce(("); sb.append(" select sum(to_number(coalesce(r5x.imptotalliquido,'0')) / 100)"); sb.append(" from fiscal_r5 r5x"); sb.append(" where r5x.contador = r4.contador and r5x.numserie20 = r4.numserie20 and r5x.totparcial like 'N1'"); sb.append(" ), 0)"); sb.append(" ) as valortotal,"); sb.append(" b.boleto_id as caja_id"); 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(" UNION"); sb.append(" select distinct"); sb.append(" '000001' as coo,"); sb.append(" (case when r2.numserie20 is null then 'X' else '' end) || imp.numserie20 as ecf,"); sb.append(" to_char(c.feccreacion, 'YYYYMMDD') 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(" c.preciopagado as valortotal,"); sb.append(" c.caja_id"); sb.append(" from caja c"); sb.append(" join parada po on po.parada_id = c.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 = c.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 = c.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" join fiscal_impressora imp on imp.numserie = c.serieimpfiscal"); sb.append(" left join alias_servico s on s.origen_id = c.origen_id and s.destino_id = c.destino_id and (s.corrida_id = c.corrida_id or s.corrida_id is null) and s.ruta_id = c.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 = c.empresacorrida_id and eis.estado_id = eos.estado_id"); sb.append(" left join fiscal_r4 r4 on r4.caja_id = c.caja_id"); sb.append(" left join fiscal_r2 r2 on r2.numserie20 = imp.numserie20 and r2.datamov = to_char(c.feccreacion, 'YYYYMMDD')"); sb.append(" where c.activo = 1 and po.activo = 1 and co.activo = 1 and eo.activo = 1 and ei.activo = 1"); sb.append(" and coalesce(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1"); sb.append(" and ((c.indreimpresion = 0 and c.motivocancelacion_id is null and c.numfoliosistema is not null) or (c.indstatusboleto = 'E' and c.indreimpresion = 1))"); sb.append(" and (c.preciopagado) > 0"); sb.append(" and c.serieimpfiscal is not null and r4.caja_id is null"); sb.append(" and c.feccreacion >= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS') and c.feccreacion <= TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')"); sb.append(" and c.empresacorrida_id = ?"); sb.append(" 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); ps.setString(5, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY + " 00:00:00")); ps.setString(6, DateUtil.getStringDate(fim, DATE_FORMAT_DMY + " 23:59:59")); ps.setLong(7, Long.valueOf(empresaId)); ps.setString(8, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoECFTipoPRC registro = null; Map group = new HashMap(); while (rs.next()) { BigDecimal valorTotal = rs.getBigDecimal("valortotal"); 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(MoneyHelper.somar(registro.getValorTotal(), valorTotal)); registro.setValorBaseCalculoICMS(MoneyHelper.somar(registro.getValorBaseCalculoICMS(), valorBaseCalculoICMS)); registro.setValorICMS(MoneyHelper.somar(registro.getValorICMS(), 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 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 ExportacaoRMD buscarRegistroRMD(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { ExportacaoRMD exportacaoRMD = new ExportacaoRMD(); StringBuilder sb = new StringBuilder(); sb.append(" select"); sb.append(" e.nombempresa as nome_empresa,"); sb.append(" c.estado_id as cod_participante_empresa,"); sb.append(" eif.codestabelecimento as cod_estabelecimento_empresa,"); sb.append(" eof.cveestado as cveestado,"); sb.append(" ie.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(" f.folio as num_formulario_bilhete,"); sb.append(" cast(f.fechorfolio as date) as data_emissao,"); sb.append(" (case when coalesce(f.indcancelacion, 0) = 1 then 'S' else 'N' end) as doc_cancelado,"); sb.append(" eo.estado_id cod_participante,"); sb.append(" ei.codestabelecimento as cod_estabelecimento,"); sb.append(" b.aidf_id,"); sb.append(" a.acfiscal as num_aidf,"); sb.append(" a.serie as serie,"); sb.append(" a.subserie as subserie,"); sb.append(" b.boleto_id,"); sb.append(" (case when b.indstatusboleto like 'C' then 1 else 0 end) as boleto_cancelado,"); sb.append(" b.feccreacion as data_emissao,"); sb.append(" b.numfoliopreimpreso as num_formulario,"); sb.append(" b.preciopagado as valor_total,"); sb.append(" b.rmd_id,"); sb.append(" r.acfiscal as num_aidf_rmd,"); sb.append(" r.serie as serie_rmd,"); sb.append(" r.subserie as subserie_rmd,"); sb.append(" b.foliormd as num_rmd,"); sb.append(" eo.cveestado as estado_origem,"); sb.append(" ed.cveestado as estado_destino,"); sb.append(" co.codibge as municipio_origem,"); sb.append(" (case when eo.cveestado = ed.cveestado then 5357 else 6357 end) as cod_operacao,"); sb.append(" ei.porcredbaseicms as red_base_calc_icms,"); sb.append(" ei.porcredmunicipal as porc_red_municipal,"); sb.append(" ei.porcredestadual as porc_red_estadual,"); sb.append(" ei.tributacaoimportacao as tributacao_importacao,"); sb.append(" (case when coalesce(po.regionmetropolitana_id, -1) = coalesce(pd.regionmetropolitana_id ,-2) then 1 else 0 end) as reg_metropolitana_isenta,"); sb.append(" (coalesce(b.preciopagado,0) - coalesce(b.importetaxaembarque,0) - coalesce(b.importepedagio,0) - coalesce(b.importeseguro,0) - coalesce(b.importeoutros,0)) as valor_tarifa,"); sb.append(" b.preciopagado as valor_total"); sb.append(" from folio_consumo_rmd f"); sb.append(" join estado eof on eof.estado_id = f.estado_id"); sb.append(" join aidf r on r.aidf_id = f.rmd_id"); sb.append(" join empresa e on e.empresa_id = f.empresa_id"); sb.append(" join ciudad c on c.ciudad_id = e.ciudad_id"); sb.append(" left join empresa_imposto eif on eif.activo = 1 and eif.empresa_id = f.empresa_id and eif.estado_id = eof.estado_id"); sb.append(" left join inscricao_estadual ie on ie.empresa_id = f.empresa_id and ie.estado_id = eof.estado_id and ie.activo = 1"); sb.append(" left join boleto b on b.activo = 1 and b.rmd_id = (case when coalesce(f.indcancelacion, 0) = 1 then -1 else f.rmd_id end) and b.empresacorrida_id = f.empresa_id and cast(b.fechorventa as date) = cast(f.fechorfolio as date) and (b.indstatusboleto like 'V' or b.indstatusboleto like 'C')"); sb.append(" left join parada po on po.parada_id = b.origen_id"); sb.append(" left join ciudad co on co.ciudad_id = po.ciudad_id"); sb.append(" left join estado eo on eo.estado_id = co.estado_id"); sb.append(" left join parada pd on pd.parada_id = b.destino_id"); sb.append(" left join ciudad cd on cd.ciudad_id = pd.ciudad_id"); sb.append(" left join estado ed on ed.estado_id = cd.estado_id"); sb.append(" left join empresa_imposto ei on ei.activo = 1 and ei.empresa_id = b.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" left join aidf a on a.aidf_id = b.aidf_id"); sb.append(" where"); sb.append(" f.activo = 1"); sb.append(" and f.indbpr = 1"); sb.append(" and f.fechorfolio >= to_date(?,'DD/MM/YYYY HH24:MI:SS') and f.fechorfolio <= to_date(?,'DD/MM/YYYY HH24:MI:SS')"); sb.append(" and f.empresa_id = ?"); sb.append(" and eof.cveestado like ?"); sb.append(" order by"); sb.append(" e.nombempresa,"); sb.append(" c.estado_id,"); sb.append(" eof.cveestado,"); sb.append(" f.fechorfolio,"); sb.append(" f.folio,"); sb.append(" b.fechorventa,"); sb.append(" b.numfoliopreimpreso,"); sb.append(" (case when eo.cveestado = ed.cveestado then 5357 else 6357 end),"); sb.append(" ed.cveestado"); try { PreparedStatement ps = connection.prepareStatement(sb.toString()); ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setLong(3, Long.valueOf(empresaId)); ps.setString(4, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoRMDBase registro = null; while (rs.next()) { registro = new ExportacaoRMDBase(); exportacaoRMD.getListaRegistroRMD().add(registro); } rs.close(); ps.close(); exportacaoRMD.gerarListas(); } catch (Exception e) { log.error(e.getMessage(), e); } return exportacaoRMD; } @Override public List buscarRegistroRMDTipoPAR(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(" select"); sb.append(" c.estado_id as cod_participante,"); sb.append(" ei.codestabelecimento as cod_estabelecimento,"); sb.append(" e.nombempresa as nombempresa,"); sb.append(" ess.cveestado as cveestado,"); sb.append(" ie.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 es on es.estado_id = c.estado_id"); sb.append(" left join estado ess on ess.cveestado = ?"); sb.append(" left join inscricao_estadual ie on ie.empresa_id = e.empresa_id and ie.estado_id = ess.estado_id and ie.activo = 1"); sb.append(" left join empresa_imposto ei on ei.activo = 1 and ei.empresa_id = e.empresa_id and ei.estado_id = ess.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.setCodigoEstabelecimento(rs.getInt("cod_estabelecimento")); 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.getString("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 buscarRegistroRMDTipoRMD(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); StringBuilder sb = new StringBuilder(); sb.append(" select"); sb.append(" ei.codestabelecimento 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.foliormd as num_bilhete,"); sb.append(" b.foliormd as num_formulario,"); sb.append(" trunc(b.feccreacion) as data_emissao,"); sb.append(" 'N' 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 ei.codigocontabilmunicipal ELSE ei.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.aidf_id = b.rmd_id"); sb.append(" join empresa_imposto ei on ei.activo = 1 and ei.empresa_id = b.empresacorrida_id and ei.estado_id = (CASE WHEN s.aliasorigen_id IS NULL THEN co.estado_id ELSE cos.estado_id END)"); sb.append(" where"); sb.append(" b.activo = 1"); sb.append(" and b.tipoventa_id = 3"); sb.append(" and (b.indstatusboleto like 'V')"); sb.append(" and b.empresacorrida_id = ?"); sb.append(" and (b.feccreacion >= to_date(?, 'dd/MM/YYYY hh24:mi:ss') and b.feccreacion <= to_date(?, 'dd/MM/YYYY hh24:mi:ss'))"); sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?"); sb.append(" group by"); sb.append(" ei.codestabelecimento,"); sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.estado_id ELSE eos.estado_id END),"); sb.append(" a.acfiscal,"); sb.append(" a.serie,"); sb.append(" a.subserie,"); sb.append(" b.foliormd,"); sb.append(" trunc(b.feccreacion),"); sb.append(" 'N',"); 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 ei.codigocontabilmunicipal ELSE ei.codigocontabilestadual END) END)"); sb.append(" UNION"); sb.append(" select distinct"); sb.append(" ei.codestabelecimento as cod_estabelecimento,"); sb.append(" eo.estado_id as cod_participante,"); sb.append(" a.acfiscal as num_aidf,"); sb.append(" a.serie as serie,"); sb.append(" a.subserie as subserie,"); sb.append(" f.folio as num_bilhete,"); sb.append(" f.folio as num_formulario,"); sb.append(" trunc(f.fechorfolio) as data_emissao,"); sb.append(" 'S' as doc_cancelado,"); sb.append(" null as cod_contabil"); sb.append(" from folio_consumo_rmd f"); sb.append(" join estado eo on eo.estado_id = f.estado_id"); sb.append(" join empresa_imposto ei on ei.activo = 1 and ei.empresa_id = f.empresa_id and ei.estado_id = eo.estado_id"); sb.append(" join aidf a on a.aidf_id = f.rmd_id"); sb.append(" where"); sb.append(" f.empresa_id = ?"); sb.append(" and (f.fechorfolio >= to_date(?, 'dd/MM/YYYY hh24:mi:ss') and f.fechorfolio <= to_date(?, 'dd/MM/YYYY hh24:mi:ss'))"); sb.append(" and eo.cveestado like ?"); sb.append(" and f.indcancelacion = 1 and f.indbpr = 1 and f.activo = 1"); try { PreparedStatement ps = connection.prepareStatement(sb.toString()); ps.setLong(1, Long.valueOf(empresaId)); ps.setString(2, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(3, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setString(4, cveestado); ps.setLong(5, Long.valueOf(empresaId)); ps.setString(6, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(7, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setString(8, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoRMDTipoRMD registro = null; while (rs.next()) { registro = new ExportacaoRMDTipoRMD(); registro.setCodigoEstabelecimento(rs.getInt("cod_estabelecimento")); registro.setNumeroAIDF(rs.getString("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 @Deprecated public List buscarRegistroRMDTipoBPS(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); StringBuilder sb = new StringBuilder(); sb.append(" select"); sb.append(" ei.codestabelecimento 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(" b.foliormd 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 a on a.aidf_id = b.aidf_id"); sb.append(" join aidf r on r.aidf_id = b.rmd_id"); sb.append(" join empresa_imposto ei on ei.activo = 1 and ei.empresa_id = b.empresacorrida_id and ei.estado_id = (CASE WHEN s.aliasorigen_id IS NULL THEN eo.estado_id ELSE eos.estado_id END)"); 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.fechorventa >= to_date(?, 'dd/MM/YYYY hh24:mi:ss') and b.fechorventa <= to_date(?, 'dd/MM/YYYY hh24:mi:ss'))"); 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.setString(2, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(3, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setString(4, cveestado); ResultSet rs = ps.executeQuery(); Map group = new HashMap(); ExportacaoRMDTipoBPS registro = null; Long numeroInicial = null; Long numeroFinal = null; while (rs.next()) { String key = sdf.format(rs.getDate("data_emissao")) + "|" + rs.getLong("num_aidf") + "|" + rs.getLong("num_formulario"); if (group.containsKey(key)) { registro = group.get(key); numeroInicial = rs.getLong("num_formulario"); numeroFinal = rs.getLong("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.getLong("num_aidf")); registro.setSerieAIDF(rs.getString("serie")); registro.setSubSerieAIDF(rs.getString("subserie")); registro.setNumeroAIDFRMD(rs.getLong("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.getLong("num_formulario"); numeroFinal = rs.getLong("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 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 @Deprecated public List buscarRegistroRMDTipoDBP(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); 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.activo = 1 and ei.empresa_id = b.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" left join empresa_imposto eis on eis.activo = 1 and eis.empresa_id = b.empresacorrida_id and eis.estado_id = eos.estado_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.fechorventa >= to_date(?, 'dd/MM/YYYY hh24:mi:ss') and b.fechorventa <= to_date(?, 'dd/MM/YYYY hh24:mi:ss'))"); 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.setString(2, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(3, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setString(4, cveestado); ResultSet rs = ps.executeQuery(); ExportacaoRMDTipoDBP registro = null; Map group = new HashMap(); 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ço IE= 6357 registro.setUfOrigem(rs.getString("estado_origem")); registro.setMunicipioOrigem(rs.getInt("municipio_origem")); registro.setCodigoSituacaoTribColunaB(null); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos if (rs.getInt("isenta") == 1) { registro.setCodigoSituacaoTribColunaB(40); } // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos if (registro.getCodigoSituacaoTribColunaB() == null) { registro.setCodigoSituacaoTribColunaB(rs.getInt("red_base_calc_icms") == 0 ? 0 : 20); } 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))); // } // } // } valorBaseCalculoICMS = valorTotal; } } registro.setAliquotaICMS(tributacao_importacao); if (tributacao_importacao == null) { tributacao_importacao = BigDecimal.ZERO; } else { if (red_base_calc_icms != null) { 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); } tributacao_importacao = MoneyHelper.dividir(tributacao_importacao, BigDecimal.valueOf(100d)); } BigDecimal valorICMS = MoneyHelper.multiplicar(valorBaseCalculoICMS, 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 entry : group.entrySet()) { retorno.add(entry.getValue()); } rs.close(); ps.close(); } catch (Exception e) { log.error(e.getMessage(), e); } return retorno; } @Override public List buscarRegistroRMDSeqTipoBPS(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List listaBPS = new ArrayList(); StringBuilder sb = new StringBuilder(); sb.append(" select"); sb.append(" ei.codestabelecimento 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(" b.aidf_id,"); 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(" b.rmd_id,"); sb.append(" r.acfiscal as num_aidf_rmd,"); sb.append(" r.serie as serie_rmd,"); sb.append(" r.subserie as subserie_rmd,"); sb.append(" b.foliormd as num_rmd,"); 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.activo = 1 and ei.empresa_id = b.empresacorrida_id and ei.estado_id = eo.estado_id"); sb.append(" left join empresa_imposto eis on eis.activo = 1 and eis.empresa_id = b.empresacorrida_id and eis.estado_id = eos.estado_id"); sb.append(" join aidf a on a.aidf_id = b.aidf_id"); 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.fechorventa >= to_date(?, 'dd/MM/YYYY hh24:mi:ss') and b.fechorventa <= to_date(?, 'dd/MM/YYYY hh24:mi:ss'))"); sb.append(" and (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) like ?"); sb.append(" order by b.fechorventa, b.numfoliopreimpreso, (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), (CASE WHEN s.aliasorigen_id IS NULL THEN ed.cveestado ELSE eds.cveestado END)"); try { PreparedStatement ps = connection.prepareStatement(sb.toString()); ps.setLong(1, Long.valueOf(empresaId)); ps.setString(2, DateUtil.getStringDate(inicio, DATE_FORMAT_DMY) + " 00:00:00"); ps.setString(3, DateUtil.getStringDate(fim, DATE_FORMAT_DMY) + " 23:59:59"); ps.setString(4, cveestado); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); ResultSet rs = ps.executeQuery(); ExportacaoRMDTipoSeqBPS registroBPS = null; ExportacaoRMDTipoSeqDBP registroDBP = null; Long numeroInicial = 0l; Long numeroFinal = 0l; String dataEmissaoControle = ""; Integer cfopControle = 0; Integer quantidadeTotal = 0; Integer quantidadeCancelado = 0; BigDecimal totalizador = BigDecimal.ZERO; while (rs.next()) { Integer codigoEstabelecimento = rs.getInt("cod_estabelecimento"); Long numeroAIDF = rs.getLong("num_aidf"); String serieAIDF = rs.getString("serie"); String subSerieAIDF = rs.getString("subserie"); Long numeroAIDFRMD = rs.getLong("num_aidf_rmd"); String serieAIDFRMD = rs.getString("serie_rmd"); String subSerieAIDFRMD = rs.getString("subserie_rmd"); Integer numeroRMD = rs.getInt("num_rmd"); String dataEmissao = sdf.format(rs.getDate("data_emissao")); Long numeroFormulario = rs.getLong("num_formulario"); String ufDestino = rs.getString("estado_destino"); Integer cfop = rs.getInt("cod_operacao"); // IM=5357; Serviço IE= 6357 String ufOrigem = rs.getString("estado_origem"); Integer municipioOrigem = rs.getInt("municipio_origem"); Boolean isenta = (rs.getInt("isenta") == 1); Boolean cancelado = (rs.getInt("cancelado") == 1); 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"); // BPR if ((numeroFinal + 1) != numeroFormulario || !dataEmissaoControle.equals(dataEmissao) || !cfopControle.equals(cfop)) { numeroInicial = numeroFormulario; dataEmissaoControle = dataEmissao; cfopControle = cfop; registroBPS = new ExportacaoRMDTipoSeqBPS(); registroBPS.setEspecie("BPR"); registroBPS.setNumeroInicial(numeroInicial); registroBPS.setCodigoEstabelecimento(codigoEstabelecimento); registroBPS.setNumeroAIDF(numeroAIDF); registroBPS.setSerieAIDF(serieAIDF); registroBPS.setSubSerieAIDF(subSerieAIDF); registroBPS.setNumeroAIDFRMD(numeroAIDFRMD); registroBPS.setSerieAIDFRMD(serieAIDFRMD); registroBPS.setSubSerieAIDFRMD(subSerieAIDFRMD); registroBPS.setNumeroRMD(numeroRMD); registroBPS.setDataEmissao(dataEmissao); registroBPS.setInfoPadraoBilhetePassagem(CODIGO_INDICADOR_CONTR_PREVIDENCIARIA); listaBPS.add(registroBPS); quantidadeTotal = 0; quantidadeCancelado = 0; totalizador = BigDecimal.ZERO; } quantidadeTotal++; if (cancelado) { quantidadeCancelado++; } else { totalizador = MoneyHelper.somar(totalizador, valorTotal); } numeroFinal = numeroFormulario; registroBPS.setNumeroFinal(numeroFinal); registroBPS.setQuantidadeTotal(quantidadeTotal); registroBPS.setQuantidadeCancelados(quantidadeCancelado); registroBPS.setValorTotal(totalizador); // DBP registroDBP = new ExportacaoRMDTipoSeqDBP(ufDestino); Integer indice = registroBPS.getListaDBP().indexOf(registroDBP); if (indice == -1) { registroBPS.getListaDBP().add(registroDBP); registroDBP.setCfop(cfop); // IM=5357; Serviço IE= 6357 registroDBP.setUfOrigem(ufOrigem); registroDBP.setMunicipioOrigem(municipioOrigem); registroDBP.setCodigoSituacaoTribColunaB(null); // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos if (isenta) { registroDBP.setCodigoSituacaoTribColunaB(40); } // 00 - tributação normal; 20 - tributação com redução na base de calculo; 40 - isentos if (registroDBP.getCodigoSituacaoTribColunaB() == null) { registroDBP.setCodigoSituacaoTribColunaB(red_base_calc_icms == null || red_base_calc_icms.compareTo(BigDecimal.ZERO) == 0 ? 0 : 20); } registroDBP.setValorBaseCalculoICMS(BigDecimal.ZERO); registroDBP.setValorTotal(BigDecimal.ZERO); registroDBP.setValorICMS(BigDecimal.ZERO); registroDBP.setValorICMSIsento(BigDecimal.ZERO); registroDBP.setValorICMSOutros(BigDecimal.ZERO); } else { registroDBP = registroBPS.getListaDBP().get(indice); } 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 { valorBaseCalculoICMS = valorTotal; } } registroDBP.setAliquotaICMS(tributacao_importacao); if (tributacao_importacao == null) { tributacao_importacao = BigDecimal.ZERO; } else { if (red_base_calc_icms != null) { 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); } tributacao_importacao = MoneyHelper.dividir(tributacao_importacao, BigDecimal.valueOf(100d)); } BigDecimal valorICMS = MoneyHelper.multiplicar(valorBaseCalculoICMS, tributacao_importacao); registroDBP.setValorBaseCalculoICMS(registroDBP.getValorBaseCalculoICMS().add(valorBaseCalculoICMS)); registroDBP.setValorTotal(registroDBP.getValorTotal().add(valorTotal)); registroDBP.setValorICMS(registroDBP.getValorICMS().add(valorICMS)); registroDBP.setValorICMSIsento(registroDBP.getValorICMSIsento().add(valorIsenta)); registroDBP.setValorICMSOutros(registroDBP.getValorICMSOutros().add(valorIsentaOutros)); } rs.close(); ps.close(); } catch (Exception e) { log.error(e.getMessage(), e); } return listaBPS; } @Override public void cancelarRMDBoleto(Connection connection, Date inicio, Date fim, Integer empresaId, Estado estado, Aidf aidf, String folioInicial, String folioFinal, boolean isCancela, boolean isInativa, boolean isECF, boolean isBPR) { List boletos = new ArrayList(); String boletoAgr = null; int cont = 0; List foliosRmd = new ArrayList(); inativarFolioConsumoRmd(connection, empresaId, estado.getEstadoId(), aidf.getAidfId(), folioInicial, folioFinal); for (DetalhadoRMD brp : buscarRegistroImpressaoBPR(connection, inicio, fim, empresaId, estado.getCveestado(), aidf.getAidfId(), folioInicial, folioFinal, isBPR, isECF, true)) { if (!foliosRmd.contains(brp.getFoliormd())) foliosRmd.add(brp.getFoliormd()); if (cont == 999) { boletos.add(boletoAgr); boletoAgr = null; cont = 0; } if (boletoAgr == null) boletoAgr = brp.getBoletoId().toString(); else boletoAgr = boletoAgr + " ," + brp.getBoletoId(); cont++; } boletos.add(boletoAgr); for (String folio : foliosRmd) { insereConsulmoFolioRMD(connection, inicio, empresaId, estado.getEstadoId(), aidf, folio, isCancela, isInativa, false, isECF, isBPR); } marcarRMDBoletos(connection, boletos, null, null); } private void inativarFolioConsumoRmd(Connection connection, Integer empresaId, Integer estadoId, Long rmdId, String folioInicial, String folioFinal) { PreparedStatement pstmt = null; try { StringBuilder sb = new StringBuilder(); sb.append(" update folio_consumo_rmd "); sb.append(" set activo = 0, fecmodif = sysdate "); sb.append(" where activo = 1 "); sb.append(" and indimpresso = 1 "); sb.append(" and rmd_id = ? "); sb.append(" and empresa_id = ? "); sb.append(" and estado_id = ? "); sb.append(" and folio between ? and ? "); pstmt = connection.prepareStatement(sb.toString()); pstmt.setInt(1, rmdId.intValue()); pstmt.setInt(2, empresaId); pstmt.setInt(3, estadoId); pstmt.setString(4, folioInicial); pstmt.setString(5, folioFinal); pstmt.executeUpdate(); } catch (Exception e) { log.error("", e); } finally { try { pstmt.close(); } catch (Exception e) { log.error("", e); } } } private void insereConsulmoFolioRMD(Connection connection, Date dataBilhete, Integer empresaId, Integer estadoId, Aidf aidf, String folio, boolean isCancela, boolean isInativa, boolean isImpresso, boolean isECF, boolean isBPR) { PreparedStatement pstmt = null; try { StringBuilder sb = new StringBuilder(); sb.append(" insert into FOLIO_CONSUMO_RMD (FOLIOCONSUMORMD_ID, RMD_ID, FOLIO, "); sb.append(" EMPRESA_ID, ESTADO_ID, INDCANCELACION, INDINACTIVO, INDIMPRESSO, FECHORFOLIO, "); sb.append(" INDECF, INDBPR, ACTIVO, FECMODIF, USUARIO_ID) "); sb.append(" values (").append("FOLIO_CONSUMO_RMD_SEQ.NEXTVAL").append(","); sb.append(aidf.getAidfId()).append(",").append(folio).append(","); sb.append(empresaId).append(",").append(estadoId).append(","); if (isCancela) sb.append(1).append(",").append(0).append(",").append(0).append(","); else if (isInativa) sb.append(0).append(",").append(1).append(",").append(0).append(","); else if (isImpresso) sb.append(0).append(",").append(0).append(",").append(1).append(","); sb.append("?").append(","); if (isECF) sb.append(1).append(",").append(0).append(","); else sb.append(0).append(",").append(1).append(","); sb.append(1).append(",").append("SYSDATE").append(",").append(UsuarioLogado.getUsuarioLogado().getUsuarioId()).append(")"); pstmt = connection.prepareStatement(sb.toString()); pstmt.setTimestamp(1, new java.sql.Timestamp(DateUtil.inicioFecha(dataBilhete).getTime())); pstmt.executeUpdate(); } catch (Exception e) { log.error("", e); } finally { try { pstmt.close(); } catch (Exception e) { log.error("", e); } } } @Override public void gravarRMDBoleto(Connection connection, List rmds, Aidf aidf, String folio, Integer empresaId, Integer estadoId, boolean isECF, boolean isBPR) { int cont = 0; Integer rmdIterate = Integer.parseInt(folio); rmdIterate = rmdIterate - 1; String boletoAgr = null; List boletos = new ArrayList(); int contBolto = 0; Date dataBilhete = null; for (ImpressaoRMD imp : rmds) { if (dataBilhete == null) dataBilhete = imp.getData(); // Numero maximo de itens na folha do RMD if (cont == 23 || (!dataBilhete.equals(imp.getData()))) { // add primeiro ou ultimo na lista de insercao dos boletos boletos.add(boletoAgr); // incrementa na contagem dos folios na impressao do RMD rmdIterate++; cont = 0; insereConsulmoFolioRMD(connection, dataBilhete, empresaId, estadoId, aidf, rmdIterate.toString(), false, false, true, isECF, isBPR); marcarRMDBoletos(connection, boletos, aidf.getAidfId(), rmdIterate); // limpa a lista de inseções do boleto boletos = new ArrayList(); boletoAgr = null; contBolto = 0; dataBilhete = imp.getData(); } for (DetalhadoRMD det : imp.getDetalhada()) { if (contBolto == 999) { boletos.add(boletoAgr); boletoAgr = null; contBolto = 0; } if (boletoAgr == null) boletoAgr = det.getBoletoId().toString(); else boletoAgr = boletoAgr + " ," + det.getBoletoId(); contBolto++; } cont++; } if (boletos.isEmpty()) { rmdIterate++; boletos.add(boletoAgr); insereConsulmoFolioRMD(connection, dataBilhete, empresaId, estadoId, aidf, rmdIterate.toString(), false, false, true, isECF, isBPR); marcarRMDBoletos(connection, boletos, aidf.getAidfId(), rmdIterate); } } private void marcarRMDBoletos(Connection connection, List boletos, Long rmdId, Integer folio) { for (String bs : boletos) { StringBuilder sb = new StringBuilder(); PreparedStatement pstmt = null; try { sb.append(" update boleto set rmd_id = ").append(rmdId).append(", "); sb.append(" foliormd = ").append(folio).append(", "); sb.append(" fecmodif = SYSDATE, usuario_id = ").append(UsuarioLogado.getUsuarioLogado().getUsuarioId()); sb.append(" where boleto_id in ( ").append(bs).append(" ) "); 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 getRegistroImpressaoRMDTipoBPR(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado, String rmd, String folio) { List list = new ArrayList(); // IMPRESSAO RMD MANUAL Date data = null; String numPuntoVenta = null; ImpressaoRMD impRmd = null; for (DetalhadoRMD brp : buscarRegistroImpressaoBPR(connection, inicio, fim, empresaId, cveestado, null, null, null, true, false, false)) { if (numPuntoVenta == null) { impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(), brp.getFechorVenta(), rmd, "SERVIÇO DE TRANSPORTE", "DVB", null, null, folio); numPuntoVenta = brp.getNumPuntoVenta(); data = brp.getFechorVenta(); } else if (!(numPuntoVenta.equals(brp.getNumPuntoVenta()) && data.equals(brp.getFechorVenta()))) { impRmd.setNumero(brp.getCcf()); list.add(impRmd); impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(), brp.getFechorVenta(), rmd, "SERVIÇO DE TRANSPORTE", "DVB", null, null, folio); numPuntoVenta = brp.getNumPuntoVenta(); data = brp.getFechorVenta(); } impRmd.getDetalhada().add(brp); } if (impRmd != null) list.add(impRmd); agruparImpressaoRMD(list); return list; } @Override public List getRegistroImpressaoRMDTipoECF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado, String rmd, String folio) { List list = new ArrayList(); // IMPRESSAO RMD ECF String serie = null; String datamov = null; ImpressaoRMD impRmd = null; for (DetalhadoRMD brp : buscarRegistroImpressaoBPR(connection, inicio, fim, empresaId, cveestado, null, null, null, false, true, false)) { Date dataMovimento = null; try { dataMovimento = DateUtil.getDateFromString(brp.getDatamov(), DATE_FORMAT_FISCAL); } catch (Exception e) { } if (serie == null) { impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(), dataMovimento, rmd, "SERVIÇO DE TRANSPORTE", "ECF", brp.getEcf(), brp.getEstadoImpressora(), folio); serie = brp.getEcf(); datamov = brp.getDatamov(); } else if (!(serie.equals(brp.getEcf()) && datamov.equals(brp.getDatamov()))) { impRmd.setNumero(brp.getCcf()); list.add(impRmd); impRmd = new ImpressaoRMD(brp.getEmpresa(), brp.getEnderecoEmpresa(), brp.getCnpjEmpresa(), brp.getIeEmpresa(), dataMovimento, rmd, "SERVIÇO DE TRANSPORTE", "ECF", brp.getEcf(), brp.getEstadoImpressora(), folio); serie = brp.getEcf(); datamov = brp.getDatamov(); } impRmd.getDetalhada().add(brp); } if (impRmd != null) list.add(impRmd); agruparImpressaoRMD(list); return list; } private void agruparImpressaoRMD(List list) { for (ImpressaoRMD impRmd : list) { BigDecimal valorContabil = BigDecimal.ZERO; BigDecimal baseCalculo = BigDecimal.ZERO; BigDecimal aliquota = BigDecimal.ZERO; BigDecimal icms = BigDecimal.ZERO; BigDecimal isentos = BigDecimal.ZERO; BigDecimal outros = BigDecimal.ZERO; String cooFim = null; for (DetalhadoRMD brp : impRmd.getDetalhada()) { if (brp.getIsenta()) { isentos = isentos == null ? BigDecimal.ZERO : isentos.add(somarTotalBilhete(brp)); } else { valorContabil = valorContabil == null ? BigDecimal.ZERO : valorContabil.add(brp.getTarifa() == null ? BigDecimal.ZERO : brp.getTarifa()); BigDecimal redBaseCalcIcms = brp.getRedBaseCalcIcms() == null ? BigDecimal.ZERO : brp.getRedBaseCalcIcms().divide(UtiliteriasFiscal.CEM); BigDecimal redutor = valorContabil.multiply(redBaseCalcIcms); baseCalculo = valorContabil.subtract(redutor); aliquota = brp.getTributacaoImportacao() == null ? brp.getIcmsInterestadual() : brp.getTributacaoImportacao(); icms = baseCalculo.multiply(aliquota.divide(BigDecimal.TEN.multiply(BigDecimal.TEN))); outros = valorContabil.subtract(baseCalculo); } cooFim = brp.getCoo() == null ? brp.getNumPuntoVenta() : brp.getCoo(); } impRmd.setNumero(cooFim); impRmd.setValorContabil(valorContabil); impRmd.setBaseCalculo(baseCalculo); impRmd.setAliquota(aliquota); impRmd.setIcms(icms); impRmd.setIsentos(isentos); impRmd.setOutros(outros); } } 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 buscarRegistroImpressaoBPR(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado, Long rmdId, String folioInicial, String folioFinal, boolean isManual, boolean isECF, boolean isCancelamento) { List list = new ArrayList(); try { String sql = null; if (isECF && !isCancelamento) { sql = getSqlImpressaoRMDTipoECF(); } else if (isManual && !isCancelamento) { sql = getSqlImpressaoRMDTipoBPR(); } else if (isCancelamento) { sql = getSqlCancelarRMDTipoECF(isManual, isECF); } PreparedStatement ps = connection.prepareStatement(sql); ps.setLong(1, Long.valueOf(empresaId)); if (isECF) { ps.setString(2, DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL)); ps.setString(3, DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL)); } else { ps.setTimestamp(2, new java.sql.Timestamp(DateUtil.inicioFecha(inicio).getTime())); ps.setTimestamp(3, new java.sql.Timestamp(DateUtil.fimFecha(fim).getTime())); } ps.setString(4, cveestado); if (isCancelamento) { ps.setLong(5, rmdId); ps.setLong(6, NumberUtils.toLong(folioInicial)); ps.setLong(7, NumberUtils.toLong(folioFinal)); } 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.getBoolean("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")); brp.setNombPuntoVenta(rs.getString("nombPuntoVenta")); brp.setNumPuntoVenta(rs.getString("numPuntoVenta")); if (isCancelamento) { brp.setRmdId(rs.getInt("rmd_id")); brp.setFoliormd(rs.getString("foliormd")); } if (isECF && !isCancelamento) { brp.setEcf(rs.getString("ecf")); brp.setDatamov(rs.getString("datamov")); brp.setCoo(rs.getString("cooredz")); brp.setCcf(rs.getString("ccf")); brp.setTotalFiscal(rs.getString("totalFiscal")); brp.setEstadoImpressora(rs.getString("estadoImpressora")); } list.add(brp); } rs.close(); ps.close(); } catch (SQLException e) { log.error("", e); } return list; } private String getSqlImpressaoRMDTipoBPR() { 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.feccreacion) as fechorVenta, "); sql.append(" e.nombempresa as empresa, "); sql.append(" coalesce(ie.cnpj, e.cnpj) as cnpjEmpresa, "); sql.append(" case when ie.logradouro is null "); sql.append(" then (e.logradouro || ', ' || e.numero || ' - ' || e.bairro || ', ' || ce.nombciudad "); sql.append(" || ' - ' || ee.cveestado || ', ' || e.cep ) "); sql.append(" else (ie.logradouro || ', ' || ie.numero || ' - ' || ie.bairro || ', ' || ce.nombciudad "); sql.append(" || ' - ' || ee.cveestado || ', ' || ie.cep ) end as enderecoEmpresa, "); sql.append(" pv.nombpuntoventa as nombPuntoVenta, "); sql.append(" pv.numpuntoventa as numPuntoVenta, "); 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 marca m on b.marca_id = m.marca_id "); sql.append(" join empresa e on e.empresa_id = m.empresa_id "); sql.append(" join punto_venta pv on pv.puntoventa_id = b.puntoventa_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.tipoventa_id = 3 "); sql.append(" and b.rmd_id is null "); sql.append(" and b.indstatusboleto = 'V' "); sql.append(" and e.empresa_id = ? "); sql.append(" and b.feccreacion between ? and ? "); sql.append(" and coalesce(eos.cveestado, eo.cveestado) = ? "); sql.append("order by estadoId, fechorVenta, nombPuntoVenta, numPuntoVenta "); return sql.toString(); } private 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.feccreacion) as fechorVenta, "); sql.append(" e.nombempresa as empresa, "); sql.append(" coalesce(ie.cnpj, e.cnpj) as cnpjEmpresa, "); sql.append(" case when ie.logradouro is null "); sql.append(" then (e.logradouro || ', ' || e.numero || ' - ' || e.bairro || ', ' || ce.nombciudad "); sql.append(" || ' - ' || ee.cveestado || ', ' || e.cep ) "); sql.append(" else (ie.logradouro || ', ' || ie.numero || ' - ' || ie.bairro || ', ' || cie.nombciudad "); sql.append(" || ' - ' || eie.cveestado || ', ' || ie.cep ) end as enderecoEmpresa, "); sql.append(" pv.nombpuntoventa as nombPuntoVenta, "); sql.append(" pv.numpuntoventa as numPuntoVenta, "); 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.contador as ccf, "); sql.append(" r4.impsubtotal as totalFiscal, "); sql.append(" r2.coo as cooredz, "); sql.append(" epv.cveestado as estadoImpressora "); sql.append("from fiscal_r4 r4 "); sql.append(" join fiscal_r2 r2 on r4.numserie20 = r2.numserie20 and r4.datamov = r2.datamov "); sql.append(" join boleto b on b.boleto_id = r4.boleto_id "); sql.append(" join marca m on b.marca_id = m.marca_id "); sql.append(" join empresa e on e.empresa_id = m.empresa_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 punto_venta pv on pv.puntoventa_id = b.puntoventa_id "); sql.append(" left join parada ppv on ppv.parada_id = pv.parada_id "); sql.append(" left join ciudad cpv on cpv.ciudad_id = ppv.ciudad_id "); sql.append(" left join estado epv on epv.estado_id = cpv.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 ciudad cie on cie.ciudad_id = ie.ciudad_id "); sql.append(" join estado eie on eie.estado_id = cie.estado_id "); sql.append(" join empresa_imposto ei on ei.empresa_id = e.empresa_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.tipoventa_id <> 3 "); sql.append(" and b.rmd_id is null "); sql.append(" and e.empresa_id = ? "); sql.append(" and r4.datamov between ? and ? "); sql.append(" and coalesce(eos.cveestado, eo.cveestado) = ? "); sql.append(" and coalesce(r4.indcancelamento, 'N') <> 'S' "); sql.append("order by estadoId, datamov, ecf, coo "); return sql.toString(); } private String getSqlCancelarRMDTipoECF(boolean isManual, boolean isECF) { 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.feccreacion) as fechorVenta, "); sql.append(" e.nombempresa as empresa, "); sql.append(" e.cnpj as cnpjEmpresa, "); sql.append(" case when ie.logradouro is null "); sql.append(" then (e.logradouro || ', ' || e.numero || ' - ' || e.bairro || ', ' || ce.nombciudad "); sql.append(" || ' - ' || ee.cveestado || ', ' || e.cep ) "); sql.append(" else (ie.logradouro || ', ' || ie.numero || ' - ' || ie.bairro || ', ' || cie.nombciudad "); sql.append(" || ' - ' || eie.cveestado || ', ' || ie.cep ) end as enderecoEmpresa, "); sql.append(" pv.nombpuntoventa as nombPuntoVenta, "); sql.append(" pv.numpuntoventa as numPuntoVenta, "); 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(" b.rmd_id as rmd_id, "); sql.append(" b.foliormd as foliormd "); sql.append("from boleto b "); sql.append(isECF ? " join fiscal_r4 r4 on b.boleto_id = r4.boleto_id " : ""); sql.append(isECF ? " join fiscal_r2 r2 on r4.numserie20 = r2.numserie20 and r4.datamov = r2.datamov " : ""); sql.append(" inner join marca m on b.marca_id = m.marca_id "); sql.append(" inner join empresa e on e.empresa_id = m.empresa_id "); sql.append(" join punto_venta pv on pv.puntoventa_id = b.puntoventa_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(" left 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 ciudad cie on cie.ciudad_id = ie.ciudad_id "); sql.append(" join estado eie on eie.estado_id = cie.estado_id "); sql.append(" left 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 e.empresa_id = ? "); sql.append(isECF ? " and r4.datamov between ? and ? " : ""); sql.append(isManual ? " and b.feccreacion between ? and ? " : ""); sql.append(" and coalesce(eos.cveestado, eo.cveestado) = ? "); sql.append(" and b.rmd_id = ? "); sql.append(" and b.foliormd between ? and ? "); return sql.toString(); } @Override public List buscarRelatorioRDI(Connection connection, Date inicio, Date fim, Integer empresaId, List estados, boolean isReceitaTerceiros) { String ufs = null; for (Estado estado : estados) { if (ufs == null) ufs = "'" + estado.getCveestado() + "'"; else ufs = ufs + ",'" + estado.getCveestado() + "'"; } List list = montaRelatorioRDI(connection, inicio, fim, empresaId, ufs, false); list.addAll(montaRelatorioRDI(connection, inicio, fim, empresaId, ufs, true)); List rdis = calcularRelatorioRDI(list, isReceitaTerceiros); return agrupaRdi(rdis); } private List agrupaRdi(List list) { List aux = new ArrayList(); FiscalRdi rdi = null; for (FiscalRdi detail : list) { FiscalRdi atual = new FiscalRdi(detail.getEstado(), detail.getTipoViagem(), detail.getTipoReceita()); if (!aux.contains(atual)) { rdi = new FiscalRdi(detail.getEstado(), detail.getTipoViagem(), detail.getTipoReceita()); aux.add(rdi); } int index = aux.indexOf(atual); FiscalRdi agr = aux.get(index); montarParametros(agr, detail); aux.set(index, agr); } List validacion = new ArrayList(); for (FiscalRdi detail : aux) { RdiValidacion rv = new RdiValidacion(detail.getEstado()); if (!validacion.contains(rv)) { rv = new RdiValidacion(detail.getEstado()); validacion.add(rv); } int indice = validacion.indexOf(rv); RdiValidacion rvAux = validacion.get(indice); if (detail.getTipoReceita().equals("REC") && detail.getTipoViagem().equals("IM")) rvAux.setTemIMRec(true); if (detail.getTipoReceita().equals("DEV") && detail.getTipoViagem().equals("IM")) rvAux.setTemIMDev(true); if (detail.getTipoReceita().equals("REC") && detail.getTipoViagem().equals("IE")) rvAux.setTemIERec(true); if (detail.getTipoReceita().equals("DEV") && detail.getTipoViagem().equals("IE")) rvAux.setTemIEDev(true); validacion.set(indice, rvAux); } for (RdiValidacion val : validacion) { if (!val.isTemIMRec()) { FiscalRdi rdiAux = new FiscalRdi(val.getEstado(), "IM", "REC"); aux.add(montarParametros(rdiAux, new FiscalRdi())); } if (!val.isTemIMDev()) { FiscalRdi rdiAux = new FiscalRdi(val.getEstado(), "IM", "DEV"); aux.add(montarParametros(rdiAux, new FiscalRdi())); } if (!val.isTemIERec()) { FiscalRdi rdiAux = new FiscalRdi(val.getEstado(), "IE", "REC"); aux.add(montarParametros(rdiAux, new FiscalRdi())); } if (!val.isTemIEDev()) { FiscalRdi rdiAux = new FiscalRdi(val.getEstado(), "IE", "DEV"); aux.add(montarParametros(rdiAux, new FiscalRdi())); } } Collections.sort(aux); return aux; } private FiscalRdi montarParametros(FiscalRdi agr, FiscalRdi detail) { agr.setQuantBilhetes(agr.getQuantBilhetes().add(detail.getTarifa() == null ? BigDecimal.ZERO : BigDecimal.ONE)); agr.setTarifa(agr.getTarifa().add(detail.getTarifa() == null ? BigDecimal.ZERO : detail.getTarifa())); agr.setSeguro(agr.getSeguro().add(detail.getSeguro() == null ? BigDecimal.ZERO : detail.getSeguro())); agr.setTxEmbarque(agr.getTxEmbarque().add(detail.getTxEmbarque() == null ? BigDecimal.ZERO : detail.getTxEmbarque())); agr.setPedagio(agr.getPedagio().add(detail.getPedagio() == null ? BigDecimal.ZERO : detail.getPedagio())); agr.setPassagem(agr.getPassagem().add(detail.getPassagem() == null ? BigDecimal.ZERO : detail.getPassagem())); agr.setIsentos(agr.getIsentos().add(detail.getIsentos() == null ? BigDecimal.ZERO : detail.getIsentos())); agr.setOutros(agr.getOutros().add(detail.getOutros() == null ? BigDecimal.ZERO : detail.getOutros())); agr.setRbc(detail.getRbc() == null ? BigDecimal.ZERO : detail.getRbc()); agr.setBaseCalculo(agr.getBaseCalculo().add(detail.getBaseCalculo() == null ? BigDecimal.ZERO : detail.getBaseCalculo())); agr.setAliquota(detail.getAliquota() == null ? BigDecimal.ZERO : detail.getAliquota()); agr.setIcms(agr.getIcms().add(detail.getIcms() == null ? BigDecimal.ZERO : detail.getIcms())); agr.setCp(detail.getCp() == null ? BigDecimal.ZERO : detail.getCp()); agr.setCredPres(agr.getCredPres().add(detail.getCredPres() == null ? BigDecimal.ZERO : detail.getCredPres())); agr.setIcmsRec(agr.getIcmsRec().add(detail.getIcmsRec() == null ? BigDecimal.ZERO : detail.getIcmsRec())); return agr; } private List calcularRelatorioRDI(List list, boolean isReceitaTerceiros) { List rdis = new ArrayList(); for (DetalhadoFiscal det : list) { BigDecimal passagem = BigDecimal.ZERO; BigDecimal isentos = BigDecimal.ZERO; BigDecimal outros = BigDecimal.ZERO; BigDecimal rbc = BigDecimal.ZERO; BigDecimal baseCalculo = BigDecimal.ZERO; BigDecimal aliquota = BigDecimal.ZERO; BigDecimal icms = BigDecimal.ZERO; BigDecimal cp = BigDecimal.ZERO; BigDecimal credPres = BigDecimal.ZERO; BigDecimal icmsRec = BigDecimal.ZERO; if (det.getIsenta()) { isentos = somarTotalBilhete(det, isReceitaTerceiros); } else { passagem = somarTotalBilhete(det, isReceitaTerceiros); if (det.isInterEstadual()) { aliquota = det.getIcmsInterestadual() != null ? det.getIcmsInterestadual() : det.getTributacaoImportacao(); } else { aliquota = det.getIcmsIntermunicipal() != null ? det.getIcmsIntermunicipal() : det.getTributacaoImportacao(); } if (det.isInterEstadual()) { cp = det.getPorcRedEstadual() == null ? BigDecimal.ZERO : det.getPorcRedEstadual(); } else { cp = det.getPorcRedMunicipal() == null ? BigDecimal.ZERO : det.getPorcRedMunicipal(); } rbc = det.getRedBaseCalcIcms() == null ? BigDecimal.ZERO : det.getRedBaseCalcIcms().divide(UtiliteriasFiscal.CEM); BigDecimal redutor = passagem.multiply(rbc); baseCalculo = passagem.subtract(redutor); icms = baseCalculo.multiply(aliquota.divide(BigDecimal.TEN.multiply(BigDecimal.TEN))); credPres = icms.multiply(cp.divide(BigDecimal.TEN.multiply(BigDecimal.TEN))); icmsRec = icms.subtract(credPres); } outros = isentos.equals(BigDecimal.ZERO) ? BigDecimal.ZERO : passagem.subtract(isentos).subtract(baseCalculo); String tipoViagem = null; if (det.isInterEstadual()) { tipoViagem = "IE"; } else { tipoViagem = "IM"; } if (isReceitaTerceiros) { rdis.add(new FiscalRdi(det.getEstadoOrigem(), tipoViagem, det.getTipoReceita(), det.getTarifa(), det.getSeguro(), det.getTaxaEmbarque(), det.getPedagio(), passagem, isentos, outros, det.getRedBaseCalcIcms(), baseCalculo, aliquota, icms, cp, credPres, icmsRec)); } else { rdis.add(new FiscalRdi(det.getEstadoOrigem(), tipoViagem, det.getTipoReceita(), det.getTarifa(), ZERO, ZERO, ZERO, passagem, isentos, outros, det.getRedBaseCalcIcms(), baseCalculo, aliquota, icms, cp, credPres, icmsRec)); } } return rdis; } private BigDecimal somarTotalBilhete(DetalhadoFiscal det, boolean isReceitaTerceiros) { BigDecimal total = BigDecimal.ZERO; total = total.add(det.getTarifa() == null ? BigDecimal.ZERO : det.getTarifa()); if (isReceitaTerceiros && (det.isInterEstadual() && det.getIndTxembarqueEstadual() || !det.isInterEstadual() && det.getIndTxembarqueMunicipal())) total = total.add(det.getTaxaEmbarque() == null ? BigDecimal.ZERO : det.getTaxaEmbarque()); if (isReceitaTerceiros && (det.isInterEstadual() && det.getIndPedagioEstdual() || !det.isInterEstadual() && det.getIndPedagioMunicipal())) total = total.add(det.getPedagio() == null ? BigDecimal.ZERO : det.getPedagio()); if (isReceitaTerceiros && (det.isInterEstadual() && det.getIndSeguroEstadual() || !det.isInterEstadual() && det.getIndSeguroMunicipal())) total = total.add(det.getSeguro() == null ? BigDecimal.ZERO : det.getSeguro()); return total; } private List montaRelatorioRDI(Connection connection, Date inicio, Date fim, Integer empresaId, String ufs, boolean isCancelados) { List list = new ArrayList(); try { String sql = null; if (isCancelados) sql = sqlRelatorioRDICancelados(ufs); else sql = sqlRelatorioRDIVendidos(ufs); NamedParameterStatement ps = new NamedParameterStatement(connection, sql); ps.setLong("EMPRESA_ID", Long.valueOf(empresaId)); if (!isCancelados) { ps.setString("STR_INICIO", DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL)); ps.setString("STR_FIM", DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL)); } ps.setTimestamp("DATE_INICIO", new java.sql.Timestamp(DateUtil.inicioFecha(inicio).getTime())); ps.setTimestamp("DATE_FIM", new java.sql.Timestamp(DateUtil.fimFecha(fim).getTime())); ResultSet rs = ps.executeQuery(); while (rs.next()) { DetalhadoFiscal df = new DetalhadoFiscal(); df.setCajaId(rs.getLong("cajaId")); df.setTipoReceita(rs.getString("tipoReceita")); df.setNumoperacion(rs.getString("numoperacion")); df.setEstadoId(rs.getInt("estadoId")); df.setFechorVenta(rs.getDate("fechorVenta")); df.setIcmsInterestadual(rs.getBigDecimal("icmsInterestadual")); df.setIcmsIntermunicipal(rs.getBigDecimal("icmsIntermunicipal")); df.setEstadoOrigem(rs.getString("estadoOrigem")); df.setEstadoDestino(rs.getString("estadoDestino")); df.setMunicipioOrigem(rs.getString("municipioOrigem")); df.setInterEstadual(rs.getBoolean("isInterEstadual")); df.setIcmsInterestadual(rs.getBigDecimal("icmsInterestadual")); df.setRedBaseCalcIcms(rs.getBigDecimal("redBaseCalcIcms")); df.setPorcRedMunicipal(rs.getBigDecimal("porcRedMunicipal")); df.setPorcRedEstadual(rs.getBigDecimal("porcRedEstadual")); df.setTributacaoImportacao(rs.getBigDecimal("tributacaoImportacao")); df.setIndTarifaMunicipal(rs.getBoolean("indtarifamunicipal")); df.setIndSeguroMunicipal(rs.getBoolean("indseguromunicipal")); df.setIndTxembarqueMunicipal(rs.getBoolean("indtxembarquemunicipal")); df.setIndPedagioMunicipal(rs.getBoolean("indpedagiomunicipal")); df.setIndTarifaEstadual(rs.getBoolean("indtarifaestadual")); df.setIndSeguroEstadual(rs.getBoolean("indseguroestadual")); df.setIndTxembarqueEstadual(rs.getBoolean("indtxembarqueestadual")); df.setIndPedagioEstdual(rs.getBoolean("indpedagioestdual")); df.setIsenta(rs.getBoolean("isenta")); df.setTarifa(rs.getBigDecimal("tarifa")); df.setTaxaEmbarque(rs.getBigDecimal("taxaEmbarque")); df.setPedagio(rs.getBigDecimal("pedagio")); df.setSeguro(rs.getBigDecimal("seguro")); df.setOutros(rs.getBigDecimal("outros")); df.setDatamov(rs.getString("datamov")); list.add(df); } rs.close(); ps.close(); } catch (SQLException e) { log.error("", e); } return list; } private String sqlRelatorioRDIVendidos(String ufs) { StringBuilder sql = new StringBuilder(); sql.append("select "); sql.append(" b.caja_id as cajaId, "); sql.append(" 'REC' as tipoReceita, "); sql.append(" b.numoperacion as numoperacion, "); sql.append(" trunc(b.feccreacion) as fechorVenta, "); 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))) then 0 else 1 end as isInterEstadual, "); sql.append(" ei.porcredbaseicms as redBaseCalcIcms, "); sql.append(" ei.porcredmunicipal as porcRedMunicipal, "); sql.append(" ei.porcredestadual as porcRedEstadual, "); sql.append(" coalesce(ei.indtarifamunicipal, 0) as indtarifamunicipal, "); sql.append(" coalesce(ei.indseguromunicipal, 0) as indseguromunicipal, "); sql.append(" coalesce(ei.indtxembarquemunicipal, 0) as indtxembarquemunicipal, "); sql.append(" coalesce(ei.indpedagiomunicipal, 0) as indpedagiomunicipal, "); sql.append(" coalesce(ei.indtarifaestadual, 0) as indtarifaestadual, "); sql.append(" coalesce(ei.indseguroestadual, 0) as indseguroestadual, "); sql.append(" coalesce(ei.indtxembarqueestadual, 0) as indtxembarqueestadual, "); sql.append(" coalesce(ei.indpedagioestdual, 0) as indpedagioestdual, "); 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)) 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.datamov as datamov "); sql.append("from fiscal_r4 r4 "); sql.append(" join fiscal_r2 r2 on r4.numserie20 = r2.numserie20 and r4.datamov = r2.datamov "); sql.append(" join caja b on b.caja_id = r4.caja_id "); sql.append(" join marca m on b.marca_id = m.marca_id "); sql.append(" join empresa e on e.empresa_id = m.empresa_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 = e.empresa_id "); sql.append(" and ei.estado_id = coalesce(eos.estado_id, eo.estado_id) and ei.activo = 1 "); sql.append("where b.tipoventa_id <> 3 "); sql.append(" and e.empresa_id = :EMPRESA_ID "); sql.append(" and r4.datamov between :STR_INICIO and :STR_FIM "); sql.append(" and coalesce(eos.cveestado, eo.cveestado) in ( ").append(ufs).append(" ) "); sql.append(" and coalesce(r4.indcancelamento, 'N') <> 'S' "); sql.append(" "); sql.append("union "); sql.append(" "); sql.append("select "); sql.append(" b.caja_id as cajaId, "); sql.append(" 'REC' as tipoReceita, "); sql.append(" b.numoperacion as numoperacion, "); sql.append(" trunc(b.feccreacion) as fechorVenta, "); 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))) then 0 else 1 end as isInterEstadual, "); sql.append(" ei.porcredbaseicms as redBaseCalcIcms, "); sql.append(" ei.porcredmunicipal as porcRedMunicipal, "); sql.append(" ei.porcredestadual as porcRedEstadual, "); sql.append(" coalesce(ei.indtarifamunicipal, 0) as indtarifamunicipal, "); sql.append(" coalesce(ei.indseguromunicipal, 0) as indseguromunicipal, "); sql.append(" coalesce(ei.indtxembarquemunicipal, 0) as indtxembarquemunicipal, "); sql.append(" coalesce(ei.indpedagiomunicipal, 0) as indpedagiomunicipal, "); sql.append(" coalesce(ei.indtarifaestadual, 0) as indtarifaestadual, "); sql.append(" coalesce(ei.indseguroestadual, 0) as indseguroestadual, "); sql.append(" coalesce(ei.indtxembarqueestadual, 0) as indtxembarqueestadual, "); sql.append(" coalesce(ei.indpedagioestdual, 0) as indpedagioestdual, "); 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)) 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(" to_char(trunc(b.feccreacion), 'yyyymmdd') as datamov "); sql.append("from caja b "); sql.append(" join marca m on b.marca_id = m.marca_id "); sql.append(" join empresa e on e.empresa_id = m.empresa_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("where b.tipoventa_id = 3 "); sql.append(" and (b.indstatusboleto like 'V' or b.indstatusboleto like 'C') "); sql.append(" and e.empresa_id = :EMPRESA_ID "); sql.append(" and b.feccreacion between :DATE_INICIO and :DATE_FIM "); sql.append(" and coalesce(eos.cveestado, eo.cveestado) in ( ").append(ufs).append(" ) "); sql.append("order by estadoId, isInterEstadual "); return sql.toString(); } private String sqlRelatorioRDICancelados(String ufs) { StringBuilder sql = new StringBuilder(); sql.append("select "); sql.append(" caj.caja_id as cajaId, "); sql.append(" 'DEV' as tipoReceita, "); sql.append(" caj.numoperacion as numoperacion, "); sql.append(" trunc(caj.feccreacion) as fechorVenta, "); 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))) then 0 else 1 end as isInterEstadual, "); sql.append(" ei.porcredbaseicms as redBaseCalcIcms, "); sql.append(" ei.porcredmunicipal as porcRedMunicipal, "); sql.append(" ei.porcredestadual as porcRedEstadual, "); sql.append(" coalesce(ei.indtarifamunicipal, 0) as indtarifamunicipal, "); sql.append(" coalesce(ei.indseguromunicipal, 0) as indseguromunicipal, "); sql.append(" coalesce(ei.indtxembarquemunicipal, 0) as indtxembarquemunicipal, "); sql.append(" coalesce(ei.indpedagiomunicipal, 0) as indpedagiomunicipal, "); sql.append(" coalesce(ei.indtarifaestadual, 0) as indtarifaestadual, "); sql.append(" coalesce(ei.indseguroestadual, 0) as indseguroestadual, "); sql.append(" coalesce(ei.indtxembarqueestadual, 0) as indtxembarqueestadual, "); sql.append(" coalesce(ei.indpedagioestdual, 0) as indpedagioestdual, "); 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)) then 1 else 0 end as isenta, "); sql.append(" coalesce(caj.preciopagado, 0) as tarifa, "); sql.append(" coalesce(caj.importetaxaembarque, 0) as taxaEmbarque, "); sql.append(" coalesce(caj.importepedagio, 0) as pedagio, "); sql.append(" coalesce(caj.importeseguro, 0) as seguro, "); sql.append(" coalesce(caj.importeoutros, 0) as outros, "); sql.append(" r4.datamov as datamov "); sql.append("from caja caj "); sql.append(" inner join caja cajb on (((cajb.feccorrida = caj.feccorrida) or (cajb.feccorrida is null and caj.feccorrida is null)) "); sql.append(" and ((cajb.numasiento = caj.numasiento) or (cajb.numasiento is null and caj.numasiento is null)) "); sql.append(" and cajb.numfoliosistema = caj.numfoliosistema and cajb.origen_id = caj.origen_id and cajb.destino_id=caj.destino_id "); sql.append(" and ((cajb.tipoventa_id not in (5,12,18,81,41,49) "); sql.append(" and (cajb.indstatusboleto = 'V' or (cajb.indstatusboleto = 'T' and cajb.indreimpresion=0) )) "); sql.append(" or (cajb.tipoventa_id in (5,12,18,81,41,49) and cajb.indstatusboleto = 'E')) ) "); sql.append(" inner join fiscal_r4 r4 on r4.caja_id = cajb.caja_id "); sql.append(" join fiscal_r2 r2 on r4.numserie20 = r2.numserie20 and r4.datamov = r2.datamov "); sql.append(" join marca m on caj.marca_id = m.marca_id "); sql.append(" join empresa e on e.empresa_id = m.empresa_id "); sql.append(" join parada po on po.parada_id = caj.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 = caj.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 = caj.origen_id "); sql.append(" and s.destino_id = caj.destino_id and (s.corrida_id = caj.corrida_id or s.corrida_id is null) "); sql.append(" and s.ruta_id = caj.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 = e.empresa_id "); sql.append(" and ei.estado_id = coalesce(eos.estado_id, eo.estado_id) and ei.activo = 1 "); sql.append("where caj.tipoventa_id <> 3 "); sql.append(" and e.empresa_id = :EMPRESA_ID "); sql.append(" and caj.feccreacion between :DATE_INICIO and :DATE_FIM "); sql.append(" and caj.motivocancelacion_id in (31,32,10,37,99,36) "); sql.append(" and caj.indcancelacion = 1 "); sql.append(" and caj.indstatusboleto = 'C' "); sql.append(" and coalesce(eos.cveestado, eo.cveestado) in ( ").append(ufs).append(" ) "); sql.append(" and coalesce(r4.indcancelamento, 'N') <> 'S' "); sql.append(" "); sql.append("union "); sql.append(" "); sql.append("select "); sql.append(" caj.caja_id as cajaId, "); sql.append(" 'DEV' as tipoReceita, "); sql.append(" caj.numoperacion as numoperacion, "); sql.append(" trunc(caj.feccreacion) as fechorVenta, "); 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))) then 0 else 1 end as isInterEstadual, "); sql.append(" ei.porcredbaseicms as redBaseCalcIcms, "); sql.append(" ei.porcredmunicipal as porcRedMunicipal, "); sql.append(" ei.porcredestadual as porcRedEstadual, "); sql.append(" coalesce(ei.indtarifamunicipal, 0) as indtarifamunicipal, "); sql.append(" coalesce(ei.indseguromunicipal, 0) as indseguromunicipal, "); sql.append(" coalesce(ei.indtxembarquemunicipal, 0) as indtxembarquemunicipal, "); sql.append(" coalesce(ei.indpedagiomunicipal, 0) as indpedagiomunicipal, "); sql.append(" coalesce(ei.indtarifaestadual, 0) as indtarifaestadual, "); sql.append(" coalesce(ei.indseguroestadual, 0) as indseguroestadual, "); sql.append(" coalesce(ei.indtxembarqueestadual, 0) as indtxembarqueestadual, "); sql.append(" coalesce(ei.indpedagioestdual, 0) as indpedagioestdual, "); 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)) then 1 else 0 end as isenta, "); sql.append(" coalesce(caj.preciopagado, 0) as tarifa, "); sql.append(" coalesce(caj.importetaxaembarque, 0) as taxaEmbarque, "); sql.append(" coalesce(caj.importepedagio, 0) as pedagio, "); sql.append(" coalesce(caj.importeseguro, 0) as seguro, "); sql.append(" coalesce(caj.importeoutros, 0) as outros, "); sql.append(" to_char(trunc(caj.feccreacion), 'yyyymmdd') as datamov "); sql.append("from caja caj "); sql.append(" inner join caja cajb on (((cajb.feccorrida = caj.feccorrida) or (cajb.feccorrida is null and caj.feccorrida is null)) "); sql.append(" and ((cajb.numasiento = caj.numasiento) or (cajb.numasiento is null and caj.numasiento is null)) "); sql.append(" and cajb.numfoliosistema = caj.numfoliosistema and cajb.origen_id = caj.origen_id and cajb.destino_id=caj.destino_id "); sql.append(" and ((cajb.tipoventa_id not in (5,12,18,81,41,49) "); sql.append(" and (cajb.indstatusboleto = 'V' or (cajb.indstatusboleto = 'T' and cajb.indreimpresion=0) )) "); sql.append(" or (cajb.tipoventa_id in (5,12,18,81,41,49) and cajb.indstatusboleto = 'E')) ) "); sql.append(" join marca m on caj.marca_id = m.marca_id "); sql.append(" join empresa e on e.empresa_id = m.empresa_id "); sql.append(" join parada po on po.parada_id = caj.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 = caj.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 = caj.origen_id "); sql.append(" and s.destino_id = caj.destino_id and (s.corrida_id = caj.corrida_id or s.corrida_id is null) "); sql.append(" and s.ruta_id = caj.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 = e.empresa_id "); sql.append(" and ei.estado_id = coalesce(eos.estado_id, eo.estado_id) and ei.activo = 1 "); sql.append("where cajb.tipoventa_id <> 3 "); sql.append(" and e.empresa_id = :EMPRESA_ID "); sql.append(" and caj.feccreacion between :DATE_INICIO and :DATE_FIM "); sql.append(" and caj.motivocancelacion_id in (31,32,10,37,99,36) "); sql.append(" and caj.indcancelacion = 1 "); sql.append(" and caj.indstatusboleto = 'C' "); sql.append(" and coalesce(eos.cveestado, eo.cveestado) in ( ").append(ufs).append(" ) "); sql.append("order by estadoId, isInterEstadual "); return sql.toString(); } }