diff --git a/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java b/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java index 0df8fb049..bd3ef8600 100644 --- a/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/FiscalDAO.java @@ -4,6 +4,7 @@ import java.util.Date; import java.util.List; import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; +import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalReducaoZVO; import com.rjconsultores.ventaboletos.vo.impressaofiscal.ItemFiscalVO; public interface FiscalDAO { @@ -12,4 +13,6 @@ public interface FiscalDAO { public List buscaDatosFiscaisECF(Date inicio, Date fim, Integer empresaId); + public List buscaDatosFiscaisReducaoZ(Date inicio, Date fim, Integer empresaId); + } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java index 5cd7989d6..2c3c07465 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/FiscalHibernateDAO.java @@ -17,6 +17,7 @@ import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.FiscalDAO; import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalReducaoZVO; import com.rjconsultores.ventaboletos.vo.impressaofiscal.ItemFiscalVO; @Repository("fiscalDAO") @@ -29,6 +30,82 @@ public class FiscalHibernateDAO extends GenericHibernateDAO impl setSessionFactory(factory); } + @Override + public List buscaDatosFiscaisReducaoZ(Date inicio, Date fim, Integer empresaId) { + + 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(" r2.totgeral AS totgeral, "); + sql.append(" r3.totparcial AS aliquota, "); + sql.append(" r3.valoracumulado AS imposto, "); + sql.append(" ifi.fiscalimpressora_id AS numpdv, "); + sql.append(" ifi.numcnpj AS cnpj "); + sql.append("FROM fiscal_r2 r2 "); + 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(" left join fiscal_impressora ifi "); + sql.append(" ON ifi.numserie20 = r2.numserie20 "); + sql.append(" left join empresa e "); + sql.append(" ON TRANSLATE(ifi.numcnpj, ' / - . ', ' ') = e.cnpj "); + sql.append("WHERE r2.datamov BETWEEN :datIni AND :datFim "); + sql.append(" AND e.empresa_id = :empresaId "); + 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(" r2.totgeral, "); + sql.append(" r3.totparcial, "); + sql.append(" r3.valoracumulado, "); + sql.append(" ifi.fiscalimpressora_id, "); + sql.append(" ifi.numcnpj "); + sql.append("ORDER BY r2.datamov, "); + sql.append(" numserie20, "); + sql.append(" crz, "); + sql.append(" r2.numreducoes, "); + sql.append(" r3.totparcial"); + + Query query = getSession().createSQLQuery(sql.toString()) + .addScalar("datamov", StringType.INSTANCE) + .addScalar("numreducoes", StringType.INSTANCE) + .addScalar("crz", StringType.INSTANCE) + .addScalar("numserie20", StringType.INSTANCE) + .addScalar("coo", StringType.INSTANCE) + .addScalar("cooinicial", StringType.INSTANCE) + .addScalar("coofinal", StringType.INSTANCE) + .addScalar("vendabrutadiaria", BigDecimalType.INSTANCE) + .addScalar("datareducao", StringType.INSTANCE) + .addScalar("horareducao", StringType.INSTANCE) + .addScalar("totgeral", BigDecimalType.INSTANCE) + .addScalar("aliquota", StringType.INSTANCE) + .addScalar("imposto", BigDecimalType.INSTANCE) + .addScalar("numpdv", StringType.INSTANCE) + .addScalar("cnpj", StringType.INSTANCE); + + query.setResultTransformer(new AliasToBeanResultTransformer(ImportacionFiscalReducaoZVO.class)); + query.setInteger("empresaId", empresaId); + query.setString("datIni", DateUtil.getStringDate(inicio, DATE_FORMAT_FISCAL)); + query.setString("datFim", DateUtil.getStringDate(fim, DATE_FORMAT_FISCAL)); + + return query.list(); + } + @Override public List buscaDatosFiscaisECF(Date inicio, Date fim, Integer empresaId) { diff --git a/src/com/rjconsultores/ventaboletos/service/FiscalService.java b/src/com/rjconsultores/ventaboletos/service/FiscalService.java index e29fbf6ff..50ede16d3 100644 --- a/src/com/rjconsultores/ventaboletos/service/FiscalService.java +++ b/src/com/rjconsultores/ventaboletos/service/FiscalService.java @@ -13,4 +13,6 @@ public interface FiscalService { public File importacionFiscalECF(Date inicio, Date fim, Empresa empresa); + public File importacionFiscalReducaoZ(Date inicio, Date fim, Empresa empresa); + } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java index 026e28bcd..4f27be60a 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/FiscalServiceImpl.java @@ -24,6 +24,7 @@ import com.rjconsultores.ventaboletos.service.FiscalService; import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.utilerias.UtileriasFiscal; +import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalReducaoZVO; import com.rjconsultores.ventaboletos.vo.impressaofiscal.ImportacionFiscalVO; import com.rjconsultores.ventaboletos.vo.impressaofiscal.ItemFiscalVO; @@ -43,6 +44,211 @@ public class FiscalServiceImpl implements FiscalService { return fiscalDAO.gerarRegistroP2_F2(lsEsquemaCorrida, dataDe, dataAte); } + public File importacionFiscalReducaoZ(Date inicio, Date fim, Empresa empresa) { + + try { + String nomeArquivo = UsuarioLogado.getUsuarioLogado().getNombusuario() + "_" + Calendar.getInstance().getTime().getTime() + "_" + "fiscal"; + File arquivo = File.createTempFile(nomeArquivo, ".tmp"); + + FileWriter arq = new FileWriter(arquivo); + PrintWriter gravarArq = new PrintWriter(arq); + + String cnpjFilial = somenteNumeros(empresa.getCnpj() == null ? StringUtils.rightPad("", 14, " ") : empresa.getCnpj()); + + String brancos372 = StringUtils.rightPad("", 372, " "); + String dataAgora = DateUtil.getStringDate(Calendar.getInstance().getTime(), DATE_FORMAT_FISCAL); + + String abertura = aberturaDeArquivo("0", dataAgora, cnpjFilial, brancos372, "00001"); + gravarArq.println(abertura); + + Integer seq = 1; + + List list = agruparReducaoZ(fiscalDAO.buscaDatosFiscaisReducaoZ(inicio, fim, empresa.getEmpresaId())); + + for (ImportacionFiscalReducaoZVO ifrZ : list) { + + String dataMovimento = ifrZ.getDatamov(); + String cnpj = somenteNumeros(ifrZ.getCnpj() == null ? StringUtils.rightPad("", 14, " ") : ifrZ.getCnpj()); + + String numRelatorio = ifrZ.getAliquota().substring(0, 2); + if (numRelatorio.length() < 6) { + numRelatorio = StringUtils.rightPad("", (6 - numRelatorio.length()), "0") + numRelatorio; + } + + String numPDV = ifrZ.getNumpdv(); + if (numPDV.length() < 10) { + numPDV = StringUtils.rightPad("", (10 - numPDV.length()), " ") + numPDV; + } + + String numSeriePDV = ifrZ.getNumserie20(); + if (numSeriePDV.length() < 20) { + numSeriePDV = StringUtils.rightPad("", (20 - numSeriePDV.length()), " ") + numSeriePDV; + } + + String numReducaoZ = ifrZ.getCrz(); + if (numReducaoZ.length() < 5) { + numReducaoZ = StringUtils.rightPad("", (5 - numReducaoZ.length()), " ") + numReducaoZ; + } + + String gtInicial = StringUtils.rightPad("", 18, "0"); + String gtFinal = StringUtils.rightPad("", 18, "0"); + + String docFiscalInic = ifrZ.getCooinicial(); + if (docFiscalInic.length() < 9) { + docFiscalInic = StringUtils.rightPad("", (9 - docFiscalInic.length()), " ") + docFiscalInic; + } + + String docFiscalFinal = ifrZ.getCoofinal(); + if (docFiscalFinal.length() < 9) { + docFiscalFinal = StringUtils.rightPad("", (9 - docFiscalFinal.length()), " ") + docFiscalFinal; + } + + String valorCancel = StringUtils.rightPad("", 8, "0"); + + String valorContabil = ifrZ.getVendabrutadiaria().toString(); + if (valorContabil.length() < 14) { + valorContabil = StringUtils.rightPad("", (14 - valorContabil.length()), "0") + valorContabil; + } + + String subtributaria = StringUtils.rightPad("", 14, "0"); + String descontos = StringUtils.rightPad("", 14, "0"); + String isento = StringUtils.rightPad("", 14, "0"); + + String naoTributado = ifrZ.getValorNaoTributado().toString(); + if (naoTributado.length() < 14) { + naoTributado = StringUtils.rightPad("", (14 - naoTributado.length()), "0") + naoTributado; + } + + String aliquota = StringUtils.rightPad("", 14, "0"); + if (ifrZ.getAliquota().length() == 7 && ifrZ.getAliquota().substring(2, 3).equals("T")) { + + aliquota = ifrZ.getAliquota().substring(3, 7); + if (aliquota.length() < 14) { + aliquota = StringUtils.rightPad("", (14 - aliquota.length()), "0") + aliquota; + } + } + + String aliquota2 = StringUtils.rightPad("", 14, "0"); + String aliquota3 = StringUtils.rightPad("", 14, "0"); + String aliquota4 = StringUtils.rightPad("", 14, "0"); + + String coo = ifrZ.getCoo(); + if (coo.length() < 6) { + coo = StringUtils.rightPad("", (6 - coo.length()), " ") + coo; + } + + String outrosRecebimentos = StringUtils.rightPad("", 14, "0"); + + String impostoDebitado = ifrZ.getImposto().toString(); + if (impostoDebitado.length() < 13) { + impostoDebitado = StringUtils.rightPad("", (13 - impostoDebitado.length()), "0") + impostoDebitado; + } + + String dataReducaoZ = ifrZ.getDatareducao(); + String horaReducaoZ = ifrZ.getHorareducao(); + + String valorDocFiscal = ifrZ.getImposto().toString(); + if (valorDocFiscal.length() < 13) { + valorDocFiscal = StringUtils.rightPad("", (13 - valorDocFiscal.length()), "0") + valorDocFiscal; + } + + String brancos83 = StringUtils.rightPad("", 83, " "); + + seq++; + String sequencial = seq.toString(); + if (sequencial.length() < 5) { + sequencial = StringUtils.rightPad("", (5 - sequencial.length()), "0") + sequencial; + } + + String redZ = reducaoZ("1", dataMovimento, cnpj, numRelatorio, numPDV, numSeriePDV, numReducaoZ, + gtInicial, gtFinal, docFiscalInic, docFiscalFinal, valorCancel, valorContabil, subtributaria, + descontos, isento, naoTributado, aliquota, aliquota2, aliquota3, aliquota4, coo, outrosRecebimentos, + impostoDebitado, dataReducaoZ, horaReducaoZ, valorDocFiscal, brancos83, sequencial); + + gravarArq.println(redZ); + + } + + String qtdeDocGerados = StringUtils.rightPad("", 5, " ") + "1"; + String brancos388 = StringUtils.rightPad("", 388, " "); + + seq++; + String sequencial = seq.toString(); + if (sequencial.length() < 5) { + sequencial = StringUtils.rightPad("", (5 - sequencial.length()), "0") + sequencial; + } + + String fechamento = fechamentoDeArquivo("3", qtdeDocGerados, null, brancos388, sequencial); + gravarArq.println(fechamento); + + arq.close(); + return arquivo; + + } catch (IOException e) { + log.error("", e); + } + + return null; + } + + private List agruparReducaoZ(List list) { + + List aux = new ArrayList(); + + BigDecimal valorNaoTributado = null; + for (ImportacionFiscalReducaoZVO ifr : list) { + if (ifr.getAliquota().equals("N1")) { + valorNaoTributado = ifr.getImposto(); + } else { + ifr.setValorNaoTributado(valorNaoTributado); + aux.add(ifr); + } + } + + return aux; + } + + private String reducaoZ(String identificador, String dataMovimento, String cnpj, String numRelatorio, String numPDV, + String numSeriePDV, String numReducaoZ, String gtInicial, String gtFinal, String docFiscalInic, + String docFiscalFinal, String valorCancel, String valorContabil, String subtributaria, String descontos, + String isento, String naoTributado, String aliquota, String aliquota2, String aliquota3, String aliquota4, + String coo, String outrosRecebimentos, String impostoDebitado, String dataReducaoZ, String horaReducaoZ, + String valorDocFiscal, String brancos, String sequencial) { + + StringBuilder reducaoZ = new StringBuilder(); + reducaoZ.append(identificador); + reducaoZ.append(dataMovimento); + reducaoZ.append(cnpj); + reducaoZ.append(numRelatorio); + reducaoZ.append(numPDV); + reducaoZ.append(numSeriePDV); + reducaoZ.append(numReducaoZ); + reducaoZ.append(gtInicial); + reducaoZ.append(gtFinal); + reducaoZ.append(docFiscalInic); + reducaoZ.append(docFiscalFinal); + reducaoZ.append(valorCancel); + reducaoZ.append(valorContabil); + reducaoZ.append(subtributaria); + reducaoZ.append(descontos); + reducaoZ.append(isento); + reducaoZ.append(naoTributado); + reducaoZ.append(aliquota); + reducaoZ.append(aliquota2); + reducaoZ.append(aliquota3); + reducaoZ.append(aliquota4); + reducaoZ.append(coo); + reducaoZ.append(outrosRecebimentos); + reducaoZ.append(impostoDebitado); + reducaoZ.append(dataReducaoZ); + reducaoZ.append(horaReducaoZ); + reducaoZ.append(valorDocFiscal); + reducaoZ.append(brancos); + reducaoZ.append(sequencial); + + return reducaoZ.toString(); + } + @Override public File importacionFiscalECF(Date inicio, Date fim, Empresa empresa) { @@ -493,16 +699,25 @@ public class FiscalServiceImpl implements FiscalService { return item.toString(); } - private String fechamentoDeArquivo(String identificador, String qtdeDocGerados, String qtdeItensDocGerados, String brancos382, String sequencial) { + private String fechamentoDeArquivo(String identificador, String qtdeDocGerados, String qtdeItensDocGerados, + String brancos, String sequencial) { StringBuilder fechamento = new StringBuilder(); fechamento.append(identificador); - fechamento.append(qtdeDocGerados); - fechamento.append(qtdeItensDocGerados); - fechamento.append(brancos382); + fechamento.append(qtdeDocGerados == null ? "" : qtdeDocGerados); + fechamento.append(qtdeItensDocGerados == null ? "" : qtdeItensDocGerados); + fechamento.append(brancos); fechamento.append(sequencial); return fechamento.toString(); } + private static String somenteNumeros(String s) { + if (s == null || s.trim().equals("")) { + return ""; + } + + return s.replaceAll("[^0-9]", ""); + } + } diff --git a/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ImportacionFiscalReducaoZVO.java b/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ImportacionFiscalReducaoZVO.java new file mode 100644 index 000000000..835d343bc --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/vo/impressaofiscal/ImportacionFiscalReducaoZVO.java @@ -0,0 +1,152 @@ +package com.rjconsultores.ventaboletos.vo.impressaofiscal; + +import java.math.BigDecimal; + +public class ImportacionFiscalReducaoZVO { + + private String datamov; + private String cnpj; + private String numreducoes; + private String crz; + private String numserie20; + private String coo; + private String cooinicial; + private String coofinal; + private BigDecimal vendabrutadiaria; + private String datareducao; + private String horareducao; + private BigDecimal totgeral; + private String aliquota; + private BigDecimal imposto; + private BigDecimal valorNaoTributado; + private String numpdv; + + public String getDatamov() { + return datamov; + } + + public void setDatamov(String datamov) { + this.datamov = datamov; + } + + public String getCnpj() { + return cnpj; + } + + public void setCnpj(String cnpj) { + this.cnpj = cnpj; + } + + public String getNumreducoes() { + return numreducoes; + } + + public void setNumreducoes(String numreducoes) { + this.numreducoes = numreducoes; + } + + public String getCrz() { + return crz; + } + + public void setCrz(String crz) { + this.crz = crz; + } + + public String getNumserie20() { + return numserie20; + } + + public void setNumserie20(String numserie20) { + this.numserie20 = numserie20; + } + + public String getCoo() { + return coo; + } + + public void setCoo(String coo) { + this.coo = coo; + } + + public String getCooinicial() { + return cooinicial; + } + + public void setCooinicial(String cooinicial) { + this.cooinicial = cooinicial; + } + + public String getCoofinal() { + return coofinal; + } + + public void setCoofinal(String coofinal) { + this.coofinal = coofinal; + } + + public BigDecimal getVendabrutadiaria() { + return vendabrutadiaria; + } + + public void setVendabrutadiaria(BigDecimal vendabrutadiaria) { + this.vendabrutadiaria = vendabrutadiaria; + } + + public String getDatareducao() { + return datareducao; + } + + public void setDatareducao(String datareducao) { + this.datareducao = datareducao; + } + + public String getHorareducao() { + return horareducao; + } + + public void setHorareducao(String horareducao) { + this.horareducao = horareducao; + } + + public BigDecimal getTotgeral() { + return totgeral; + } + + public void setTotgeral(BigDecimal totgeral) { + this.totgeral = totgeral; + } + + public String getAliquota() { + return aliquota; + } + + public void setAliquota(String aliquota) { + this.aliquota = aliquota; + } + + public BigDecimal getImposto() { + return imposto; + } + + public void setImposto(BigDecimal imposto) { + this.imposto = imposto; + } + + public BigDecimal getValorNaoTributado() { + return valorNaoTributado; + } + + public void setValorNaoTributado(BigDecimal valorNaoTributado) { + this.valorNaoTributado = valorNaoTributado; + } + + public String getNumpdv() { + return numpdv; + } + + public void setNumpdv(String numpdv) { + this.numpdv = numpdv; + } + +}