diff --git a/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java b/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java index 2e4200b5c..f02ff3c3a 100644 --- a/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java @@ -36,12 +36,20 @@ public interface FiscalDAO { public List buscarRegistroECFTipoCFC(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoCFC_Boleto(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoCCF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoCCF_Boleto(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoICF(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoICF_Boleto(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoPRC(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroECFTipoPRC_Boleto(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); + public List buscarRegistroRMDTipoPAR(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); public List buscarRegistroRMDTipoRMD(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado); diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java index a72a770fb..4782e9bd9 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java @@ -1382,49 +1382,115 @@ public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO return retorno; } + @Override + public List buscarRegistroECFTipoCFC_Boleto(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, 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(" 'BE000000000000000000' as ecf,"); + sb.append(" '000000' as numserie,"); + sb.append(" to_char(c.feccreacion, 'YYYYMMDD') as datamov,"); + sb.append(" '000000' as cooinicial,"); + sb.append(" '000000' as coofinal,"); + sb.append(" '0000' as crz,"); + sb.append(" '0000' as cro,"); + sb.append(" '000000' as coo,"); + sb.append(" CASE WHEN s.aliasorigen_id IS NULL THEN ei.codestabelecimento ELSE eis.codestabelecimento END as codestabelecimento,"); + sb.append(" CASE WHEN s.aliasorigen_id IS NULL THEN eo.codestabelecimento ELSE eos.codestabelecimento END as codestabelecimentoimpressora,"); + 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(c.preciopagado), 0)"); + sb.append(" from caja bi"); + sb.append(" join parada poi on poi.parada_id = bi.origen_id"); + sb.append(" join parada pdi on pdi.parada_id = bi.destino_id"); + sb.append(" left join alias_servico si on si.origen_id = bi.origen_id and si.destino_id = bi.destino_id and (si.corrida_id = bi.corrida_id or si.corrida_id is null) and si.ruta_id = bi.ruta_id"); + sb.append(" left join parada posi on posi.parada_id = si.aliasorigen_id"); + sb.append(" left join parada pdsi on pdsi.parada_id = si.aliasdestino_id"); + sb.append(" where bi.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(c.preciopagado + c.importetaxaembarque + c.importeseguro + c.importepedagio + c.importeoutros), 0)"); + sb.append(" from caja bi"); + sb.append(" where bi.caja_id = c.caja_id"); + sb.append(" ) as totgeral,"); + sb.append(" ("); + sb.append(" select nvl(sum(c.preciopagado + c.importetaxaembarque + c.importeseguro + c.importepedagio + c.importeoutros), 0)"); + sb.append(" from caja bi"); + sb.append(" where bi.caja_id = c.caja_id"); + sb.append(" ) as totalvenda"); + 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(" 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(" where s.activo = 1 and po.activo = 1 and co.activo = 1 and eo.activo = 1 and ei.activo = 1 and pos.activo = 1 and cos.activo = 1 and eos.activo = 1 and c.serieimpfiscal is not null and r4.caja_id is null and c.motivocancelacion_id is null and coalesce(c.indreimpresion, 0) = 0 and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and c.activo = 1 and trunc(c.feccreacion) >= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and trunc(c.feccreacion) <= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and c.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); + sb.append(" "); + sb.append(" )"); + sb.append(" group by ecf, numserie, datamov, cooinicial, coofinal, crz, cro, coo, codestabelecimento, codestabelecimentoimpressora, estadoorigem"); + + try { + PreparedStatement ps = connection.prepareStatement(sb.toString()); + ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_DMYHMS)); + ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_DMYHMS)); + ps.setLong(3, Long.valueOf(empresaId)); + ps.setString(4, cveestado); + + ResultSet rs = ps.executeQuery(); + + ExportacaoECFTipoCFC registro = null; + + while (rs.next()) { + BigDecimal totalIsenta = BigDecimal.ZERO; + + if (rs.getBigDecimal("totalisenta") != null) { + totalIsenta = rs.getBigDecimal("totalisenta").divide(BigDecimal.valueOf(100d)); + } + + registro = new ExportacaoECFTipoCFC(); + registro.setEstabelecimento(rs.getString("codestabelecimento")); + registro.setDataEmissao(rs.getString("datamov")); + registro.setNumeroIdentificacaoECF(rs.getString("numeroidentificacao") == null || rs.getString("numeroidentificacao").isEmpty() ? "0" : rs.getString("numeroidentificacao")); + registro.setEcf(rs.getString("ecf")); + registro.setCooReducaoZ(Integer.valueOf(rs.getString("coo"))); + registro.setCooInicial(Integer.valueOf(rs.getString("cooinicial"))); + registro.setCooFinal(Integer.valueOf(rs.getString("coofinal"))); + registro.setContadorReducao(Integer.valueOf(rs.getString("crz"))); + registro.setCro(Integer.valueOf(rs.getString("cro"))); + registro.setValorTotal(BigDecimal.valueOf(Double.valueOf(rs.getString("totalvenda")) / 100)); + registro.setValorIsentas(totalIsenta); + registro.setEstabelecimentoECF(rs.getString("codestabelecimentoimpressora")); + registro.setNumeroSerie(rs.getString("numserie")); + registro.setInfoPadraoBilhetePassagem(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 distinct"); - // sb.append(" r5.numserie20 as ecf,"); - // sb.append(" r5.datamov as datamov,"); - // sb.append(" r5.coo as coo,"); - // sb.append(" r5.imptotalliquido as valortarifa,"); - // sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN co.codibge ELSE cos.codibge END) as municipio_origem,"); - // sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) as estado_origem,"); - // sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN cd.codibge ELSE cds.codibge END) as municipio_destino,"); - // sb.append(" (CASE WHEN s.aliasdestino_id IS NULL THEN ed.cveestado ELSE eds.cveestado END) as estado_destino,"); - // sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredbaseicms ELSE eis.porcredbaseicms END) as red_base_calc_icms,"); - // sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredmunicipal ELSE eis.porcredmunicipal END) as porc_red_municipal,"); - // sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.porcredestadual ELSE eis.porcredestadual END) as porc_red_estadual,"); - // sb.append(" (CASE WHEN s.aliasorigen_id IS NULL THEN ei.tributacaoimportacao ELSE eis.tributacaoimportacao END) as tributacao_importacao,"); - // sb.append(" (CASE WHEN (nvl((CASE WHEN s.aliasorigen_id IS NULL THEN po.regionmetropolitana_id ELSE pos.regionmetropolitana_id END),-1) = nvl((CASE WHEN s.aliasdestino_id IS NULL THEN pd.regionmetropolitana_id ELSE pds.regionmetropolitana_id END),-2)) THEN 1 ELSE 0 END) as isenta,"); - // sb.append(" r4.impsubtotal as valortotal,"); - // sb.append(" b.numfoliosistema as numfoliosistema"); - // sb.append(" from fiscal_r5 r5"); - // sb.append(" join fiscal_r4 r4 on r4.numserie20 = r5.numserie20 and r4.coo = r5.coo"); - // sb.append(" join fiscal_r2 r2 on r2.numserie20 = r4.numserie20 and r2.datamov = r4.datamov"); - // sb.append(" join boleto b on b.boleto_id = r4.boleto_id"); - // sb.append(" join parada po on po.parada_id = b.origen_id"); - // sb.append(" join ciudad co on co.ciudad_id = po.ciudad_id"); - // sb.append(" join estado eo on eo.estado_id = co.estado_id"); - // sb.append(" join parada pd on pd.parada_id = b.destino_id"); - // sb.append(" join ciudad cd on cd.ciudad_id = pd.ciudad_id"); - // sb.append(" join estado ed on ed.estado_id = cd.estado_id"); - // sb.append(" join empresa_imposto ei on ei.empresa_id = b.empresacorrida_id and ei.estado_id = eo.estado_id"); - // sb.append(" left join alias_servico s on s.origen_id = b.origen_id and s.destino_id = b.destino_id and s.corrida_id = b.corrida_id and s.ruta_id = b.ruta_id"); - // sb.append(" left join parada pos on pos.parada_id = s.aliasorigen_id"); - // sb.append(" left join ciudad cos on cos.ciudad_id = pos.ciudad_id"); - // sb.append(" left join estado eos on eos.estado_id = cos.estado_id"); - // sb.append(" left join parada pds on pds.parada_id = s.aliasdestino_id"); - // sb.append(" left join ciudad cds on cds.ciudad_id = pds.ciudad_id"); - // sb.append(" left join estado eds on eds.estado_id = cds.estado_id"); - // sb.append(" left join empresa_imposto eis on eis.empresa_id = b.empresacorrida_id and eis.estado_id = eos.estado_id"); - // sb.append(" where coalesce(r4.indcancelamento, 'N') <> 'S' and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and b.activo = 1 and r5.codproduto like '%-TA' and r5.datamov >= ? and r5.datamov <= ? and b.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); - sb.append(" select distinct"); sb.append(" r4.numserie20 as ecf,"); sb.append(" r4.datamov as datamov,"); @@ -1577,6 +1643,161 @@ public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO return retorno; } + + @Override + public List buscarRegistroECFTipoCCF_Boleto(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { + List retorno = new ArrayList(); + + StringBuilder sb = new StringBuilder(); + sb.append(" select distinct"); + sb.append(" 'BE000000000000000000' as ecf,"); + sb.append(" to_char(c.feccreacion, 'YYYYMMDD') as datamov,"); + sb.append(" '000000' 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(" 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(" 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(" where nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and c.activo = 1 and c.serieimpfiscal is not null and r4.caja_id is null and c.motivocancelacion_id is null and coalesce(c.indreimpresion, 0) = 0 and trunc(c.feccreacion) >= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and trunc(c.feccreacion) <= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and c.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); + + try { + PreparedStatement ps = connection.prepareStatement(sb.toString()); + ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_DMYHMS)); + ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_DMYHMS)); + ps.setLong(3, Long.valueOf(empresaId)); + ps.setString(4, cveestado); + + ResultSet rs = ps.executeQuery(); + + ExportacaoECFTipoCCF registro = null; + + while (rs.next()) { + BigDecimal valorTarifa = BigDecimal.ZERO; + + if (rs.getString("valortarifa") != null) { + valorTarifa = BigDecimal.valueOf(Double.valueOf(rs.getString("valortarifa")) / 100); + } else { + valorTarifa = rs.getBigDecimal("preciopagado"); + + log.info("Tarifa nao encontrada na R5. (ECF: " + rs.getString("ecf") + " / DATAMOV: " + rs.getString("datamov") + " / COO: " + rs.getString("coo") + ")"); + } + + registro = new ExportacaoECFTipoCCF(); + registro.setEcf(rs.getString("ecf")); + registro.setDataEmissao(rs.getString("datamov")); + registro.setCoo(Integer.valueOf(rs.getString("coo"))); + registro.setValorServico(valorTarifa); + registro.setDescontoGlobal(null); + registro.setCodigoParticipante(null); + registro.setSituacaoCOO(0); // 0 - Documento Regular; 2 - Documento Cancelado + registro.setAcrescimo(null); + registro.setNumFolioSistema(rs.getString("numFolioSistema")); + + registro.setCodigoSituacaoTribColunaB(null); + + // 00 - tributaçã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); + } + + BigDecimal valorTotal = BigDecimal.valueOf(Double.valueOf(rs.getString("valortotal")) / 100); + + BigDecimal red_base_calc_icms = rs.getBigDecimal("red_base_calc_icms"); + BigDecimal porc_red_municipal = rs.getBigDecimal("porc_red_municipal"); + BigDecimal porc_red_estadual = rs.getBigDecimal("porc_red_estadual"); + BigDecimal tributacao_importacao = rs.getBigDecimal("tributacao_importacao"); + BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO; + + if ("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); + + 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) { @@ -1770,6 +1991,197 @@ public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO return retorno; } + @Override + public List buscarRegistroECFTipoICF_Boleto(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { + List retorno = new ArrayList(); + + StringBuilder sb = new StringBuilder(); + sb.append(" select distinct"); + sb.append(" 'BE000000000000000000' as ecf,"); + sb.append(" to_char(c.feccreacion, 'YYYYMMDD') as datamov,"); + sb.append(" '000000' 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 + c.importetaxaembarque + c.importeseguro + c.importepedagio + c.importeoutros) 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(" 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(" where c.serieimpfiscal is not null and r4.caja_id is null and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and c.activo = 1 and trunc(c.feccreacion) >= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and trunc(c.feccreacion) <= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and c.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); + sb.append(" order by to_char(c.feccreacion, 'YYYYMMDD')"); + + try { + PreparedStatement ps = connection.prepareStatement(sb.toString()); + ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_DMYHMS)); + ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_DMYHMS)); + ps.setLong(3, Long.valueOf(empresaId)); + ps.setString(4, cveestado); + + ResultSet rs = ps.executeQuery(); + + ExportacaoECFTipoICF registro = null; + + Map group = new HashMap(); + + while (rs.next()) { + BigDecimal valorTotal = MoneyHelper.dividir(MoneyHelper.instanciar(rs.getString("valortotal")), BigDecimal.valueOf(100d)); + + BigDecimal red_base_calc_icms = MoneyHelper.instanciar(rs.getBigDecimal("red_base_calc_icms")); + BigDecimal porc_red_municipal = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_municipal")); + BigDecimal porc_red_estadual = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_estadual")); + BigDecimal tributacao_importacao = MoneyHelper.instanciar(rs.getBigDecimal("tributacao_importacao")); + BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO; + + if (red_base_calc_icms != null) { + BigDecimal aRed_base_calc_icms = MoneyHelper.dividir(red_base_calc_icms, BigDecimal.valueOf(100d)); + valorBaseCalculoICMS = MoneyHelper.subtrair(valorTotal, MoneyHelper.multiplicar(valorTotal, aRed_base_calc_icms)); + } else { + // if (tributacao_importacao != null) { + // if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { + // if (porc_red_municipal != null) { + // BigDecimal aPorc_red_municipal = MoneyHelper.dividir(porc_red_municipal, BigDecimal.valueOf(100d)); + // BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_municipal)); + // BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d)); + // + // valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc); + // } + // } else { + // if (porc_red_estadual != null) { + // BigDecimal aPorc_red_estadual = MoneyHelper.dividir(porc_red_estadual, BigDecimal.valueOf(100d)); + // BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_estadual)); + // BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d)); + // + // valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc); + // } + // } + // } + + // Email 17/02/2017 + valorBaseCalculoICMS = valorTotal; + } + + BigDecimal valorICMSDebitado = BigDecimal.ZERO; + + if (tributacao_importacao != null) { + BigDecimal aTributacao_importacao = MoneyHelper.dividir(tributacao_importacao, BigDecimal.valueOf(100d)); + valorICMSDebitado = MoneyHelper.multiplicar(valorBaseCalculoICMS, aTributacao_importacao); + } + + BigDecimal valorICMSIsento = BigDecimal.ZERO; + BigDecimal valorICMSOutros = 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(); + + log.info(key.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(); @@ -1923,6 +2335,156 @@ public class FiscalHibernateDAO extends HibernateDaoSupport implements FiscalDAO return retorno; } + @Override + public List buscarRegistroECFTipoPRC_Boleto(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(" '000000' as coo,"); + sb.append(" 'BE000000000000000000' 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 + c.importetaxaembarque + c.importeseguro + c.importepedagio + c.importeoutros 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(" 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(" where c.serieimpfiscal is not null and r4.caja_id is null and c.motivocancelacion_id is null and coalesce(c.indreimpresion, 0) = 0 and nvl(CASE WHEN s.aliasorigen_id IS NULL THEN ei.activo ELSE eis.activo END, 0) = 1 and c.activo = 1 and trunc(c.feccreacion) >= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and trunc(c.feccreacion) <= trunc(TO_DATE(?,'DD/MM/YYYY HH24:MI:SS')) and c.empresacorrida_id = ? and ((CASE WHEN s.aliasorigen_id IS NULL THEN eo.cveestado ELSE eos.cveestado END) = ?)"); + sb.append(" ) group by ecf, datamov, municipio_origem, estado_origem, estado_destino, red_base_calc_icms, porc_red_municipal, porc_red_estadual, tributacao_importacao"); + + Session session = null; + + try { + session = getSessionFactory().openSession(); + + session.doWork(new Work() { + @Override + public void execute(Connection connection) throws SQLException { + PreparedStatement ps = connection.prepareStatement(sb.toString()); + ps.setString(1, DateUtil.getStringDate(inicio, DATE_FORMAT_DMYHMS)); + ps.setString(2, DateUtil.getStringDate(fim, DATE_FORMAT_DMYHMS)); + ps.setLong(3, Long.valueOf(empresaId)); + ps.setString(4, cveestado); + + ResultSet rs = ps.executeQuery(); + + ExportacaoECFTipoPRC registro = null; + + Map group = new HashMap(); + + while (rs.next()) { + BigDecimal valorTotal = MoneyHelper.dividir(MoneyHelper.instanciar(rs.getString("valortotal")), BigDecimal.valueOf(100d)); + + BigDecimal red_base_calc_icms = MoneyHelper.instanciar(rs.getBigDecimal("red_base_calc_icms")); + BigDecimal porc_red_municipal = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_municipal")); + BigDecimal porc_red_estadual = MoneyHelper.instanciar(rs.getBigDecimal("porc_red_estadual")); + BigDecimal tributacao_importacao = MoneyHelper.instanciar(rs.getBigDecimal("tributacao_importacao")); + BigDecimal valorBaseCalculoICMS = BigDecimal.ZERO; + + if (tributacao_importacao != null) { + tributacao_importacao = MoneyHelper.dividir(tributacao_importacao, BigDecimal.valueOf(100d)); + } + + if (red_base_calc_icms != null) { + BigDecimal aRed_base_calc_icms = MoneyHelper.dividir(red_base_calc_icms, BigDecimal.valueOf(100d)); + valorBaseCalculoICMS = MoneyHelper.subtrair(valorTotal, MoneyHelper.multiplicar(valorTotal, aRed_base_calc_icms)); + } else { + // if (tributacao_importacao != null) { + // if (rs.getString("estado_origem").equals(rs.getString("estado_destino"))) { + // if (porc_red_municipal != null) { + // BigDecimal aPorc_red_municipal = MoneyHelper.dividir(porc_red_municipal, BigDecimal.valueOf(100d)); + // BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_municipal)); + // + // BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d)); + // valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc); + // } + // } else { + // if (porc_red_estadual != null) { + // BigDecimal aPorc_red_estadual = MoneyHelper.dividir(porc_red_estadual, BigDecimal.valueOf(100d)); + // BigDecimal porc = MoneyHelper.subtrair(tributacao_importacao, MoneyHelper.multiplicar(tributacao_importacao, aPorc_red_estadual)); + // + // BigDecimal aPorc = MoneyHelper.dividir(porc, BigDecimal.valueOf(100d)); + // valorBaseCalculoICMS = MoneyHelper.multiplicar(valorTotal, aPorc); + // } + // } + // } + + // Email 17/02/2017 + valorBaseCalculoICMS = valorTotal; + } + + BigDecimal valorICMS = BigDecimal.ZERO; + + if (tributacao_importacao != null) { + valorICMS = MoneyHelper.multiplicar(valorBaseCalculoICMS, tributacao_importacao); + } + + String key = rs.getString("ecf") + "|" + rs.getString("datamov") + "|" + rs.getString("estado_origem") + "|" + rs.getString("municipio_origem"); + + if (group.containsKey(key)) { + registro = group.get(key); + + registro.setValorTotal(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 List buscarRegistroRMDTipoPAR(Connection connection, Date inicio, Date fim, Integer empresaId, String cveestado) { List retorno = new ArrayList(); diff --git a/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java index 086cc0088..5f2067787 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java @@ -881,18 +881,30 @@ public class FiscalServiceImpl implements FiscalService { begin = Calendar.getInstance().getTimeInMillis(); List listaRegistroECFTipoCFC = fiscalDAO.buscarRegistroECFTipoCFC(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado()); + + listaRegistroECFTipoCFC.addAll(fiscalDAO.buscarRegistroECFTipoCFC_Boleto(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado())); + tempos.add(infoTempo("CFC", begin)); begin = Calendar.getInstance().getTimeInMillis(); List listaRegistroECFTipoCCF = fiscalDAO.buscarRegistroECFTipoCCF(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado()); + + listaRegistroECFTipoCCF.addAll(fiscalDAO.buscarRegistroECFTipoCCF_Boleto(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado())); + tempos.add(infoTempo("CCF", begin)); begin = Calendar.getInstance().getTimeInMillis(); List listaRegistroECFTipoICF = fiscalDAO.buscarRegistroECFTipoICF(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado()); + + listaRegistroECFTipoICF.addAll(fiscalDAO.buscarRegistroECFTipoICF_Boleto(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado())); + tempos.add(infoTempo("ICF", begin)); begin = Calendar.getInstance().getTimeInMillis(); List listaRegistroECFTipoPRC = fiscalDAO.buscarRegistroECFTipoPRC(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado()); + + listaRegistroECFTipoPRC.addAll(fiscalDAO.buscarRegistroECFTipoPRC_Boleto(connection, inicio, fim, empresa.getEmpresaId(), estado.getCveestado())); + tempos.add(infoTempo("PRC", begin)); return exportacaoFiscal.gerarArquivoECF(tempos, nomeArquivo, inicio, fim, estado.getCveestado(), empresa.getNombempresa(), listaRegistroECFTipoCFC, listaRegistroECFTipoCCF, listaRegistroECFTipoICF,