From 22f264899eba638effff6c2c76fa2c5b624106cc Mon Sep 17 00:00:00 2001 From: leonardo Date: Thu, 25 Apr 2019 17:36:24 +0000 Subject: [PATCH] =?UTF-8?q?13764:=20Relat=C3=B3rio=20Venda=20Embarcada=20b?= =?UTF-8?q?ug#13764=20dev:valdir=20qua:jose?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@92304 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../impl/RelatorioVendaEmbarcada.java | 439 ++++++++++++ .../RelatorioVendaEmbarcada_es.properties | 13 + .../RelatorioVendaEmbarcada_pt_BR.properties | 13 + .../templates/RelatorioVendaEmbarcada.jasper | Bin 0 -> 55840 bytes .../templates/RelatorioVendaEmbarcada.jrxml | 668 ++++++++++++++++++ .../RelatorioVendaEmbarcadaController.java | 311 ++++++++ .../ItemMenuRelatorioVendaEmbarcada.java | 26 + .../utilerias/menu/menu_original.properties | 1 + web/WEB-INF/i3-label_es_MX.label | 28 +- web/WEB-INF/i3-label_pt_BR.label | 25 +- .../filtroRelatorioVendaEmbarcada.zul | 106 +++ 11 files changed, 1627 insertions(+), 3 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendaEmbarcada.java create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_es.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_pt_BR.properties create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jasper create mode 100644 src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jrxml create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendaEmbarcadaController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendaEmbarcada.java create mode 100644 web/gui/relatorios/filtroRelatorioVendaEmbarcada.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendaEmbarcada.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendaEmbarcada.java new file mode 100644 index 000000000..92015d51d --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendaEmbarcada.java @@ -0,0 +1,439 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.constantes.Constantes.FiltroEnviadosSefaz; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.ArrayDataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +public class RelatorioVendaEmbarcada extends Relatorio { + + private Date datInicial; + private Date datFinal; + private Integer estadoId; + private Integer empresaId; + private Integer puntoVendaId; + private String serie; + private String numBpe; + private Boolean bloqueado; + private FiltroEnviadosSefaz envioSefaz; + private FiltroEnviadosSefaz vendaEmbarcada; + private Boolean quebraSequencia; + private Boolean ultimoBpe; + + private static Logger log = Logger.getLogger(RelatorioVendaEmbarcada.class); + + public RelatorioVendaEmbarcada(Map parametros, Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new ArrayDataSource(this) { + + @Override + public void initDados() throws Exception { + try { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + + Connection conexao = this.relatorio.getConexao(); + + Map parametros = this.relatorio.getParametros(); + + estadoId = (Integer)parametros.get("ESTADO_ID"); + empresaId = (Integer)parametros.get("EMPRESA_ID"); + puntoVendaId = (Integer)parametros.get("PUNTOVENTA_ID"); + serie = (String)parametros.get("SERIE"); + numBpe = (String)parametros.get("NUMBPE"); + bloqueado = (Boolean)parametros.get("BLOQUEADO"); + envioSefaz = (FiltroEnviadosSefaz)parametros.get("ENVIOSEFAZ"); + vendaEmbarcada = (FiltroEnviadosSefaz)parametros.get("VENDAEMBARCADA"); + quebraSequencia = (Boolean)parametros.get("QUEBRASEQ"); + ultimoBpe = (Boolean)parametros.get("ULTIMOBPE"); + + String sql = getSql(); + + Date dtInicio = sdf.parse(DateUtil.getStringDate((Date) parametros.get("DATA_INICIAL"), "dd/MM/yyyy") + " 00:00:00"); + Date dtFim = sdf.parse(DateUtil.getStringDate((Date) parametros.get("DATA_FINAL"), "dd/MM/yyyy") + " 23:59:59"); + + NamedParameterStatement ps = new NamedParameterStatement(conexao, sql.toString()); + ps.setDate("fecInicio", new java.sql.Date(dtInicio.getTime())); + ps.setDate("fecFinal", new java.sql.Date(dtFim.getTime())); + + if (estadoId != null){ + ps.setLong("estadoId", estadoId); + } + if (empresaId != null){ + ps.setLong("empresaId", empresaId); + } + if (puntoVendaId != null){ + ps.setLong("puntoventaId", puntoVendaId); + } + if (StringUtils.isNotBlank(serie)){ + ps.setString("serie", serie); + } + if (StringUtils.isNotBlank(numBpe)){ + ps.setString("bpe", numBpe); + } + if (bloqueado != null && bloqueado){ + ps.setInt("bloqueado", 1); + } + + ResultSet rset = ps.executeQuery(); + + Map dataResult = null; + Map aux = null; + while (rset.next()) { + if (ultimoBpe){ + if (dataResult == null){ + dataResult = extractRow(rset); + } else { + aux = extractRow(rset); + if (aux.get("cveestado").equals(dataResult.get("cveestado"))){ + if (aux.get("numserie_bpe").equals(dataResult.get("numserie_bpe"))){ + if (Integer.parseInt(aux.get("num_bpe").toString()) > Integer.parseInt(dataResult.get("num_bpe").toString())){ + dataResult = aux; + } + } else { + this.dados.add(dataResult); + dataResult = aux; + } + } else { + this.dados.add(dataResult); + dataResult = aux; + } + } + } else { + dataResult = extractRow(rset); + this.dados.add(dataResult); + } + } + } catch (Exception e){ + log.error("", e); + } + } + }); + } + + private Map extractRow(ResultSet rset) throws SQLException{ + Map dataResult = new HashMap(); + + + dataResult.put("nombempresa", rset.getString("nombempresa")); + dataResult.put("puntoventa_id", rset.getString("puntoventa_id")); + dataResult.put("nombpuntoventa", rset.getString("nombpuntoventa")); + dataResult.put("cveusuario", rset.getString("cveusuario")); + dataResult.put("nombusuario", rset.getString("nombusuario")); + dataResult.put("feccorte", rset.getString("feccorte")); + dataResult.put("numserie_bpe", rset.getString("numserie_bpe")); + dataResult.put("num_bpe", rset.getString("num_bpe")); + dataResult.put("cveestado", rset.getString("cveestado")); + dataResult.put("ruta_id", rset.getString("ruta_id")); + dataResult.put("numruta", rset.getString("numruta")); + dataResult.put("descruta", rset.getString("descruta")); + dataResult.put("origenId", rset.getString("origenId")); + dataResult.put("origen", rset.getString("origen")); + dataResult.put("destinoId", rset.getString("destinoId")); + dataResult.put("destino", rset.getString("destino")); + dataResult.put("fechorventa", rset.getString("fechorventa")); + dataResult.put("fechorviaje", rset.getString("fechorviaje")); + dataResult.put("corrida_id", rset.getString("corrida_id")); + dataResult.put("tarifa", rset.getDouble("tarifa")); + dataResult.put("seguro", rset.getDouble("seguro")); + dataResult.put("taxaembarque", rset.getDouble("taxaembarque")); + dataResult.put("importepedagio", rset.getDouble("importepedagio")); + dataResult.put("tpp", rset.getDouble("tpp")); + dataResult.put("total", rset.getDouble("total")); + + Integer codstat = rset.getInt("statussefaz"); + if (codstat == -1){ + dataResult.put("statussefaz", "Pendente"); + } else if (codstat == 100){ + dataResult.put("statussefaz", "Enviado"); + } else if (codstat == 150){ + dataResult.put("statussefaz", "Enviado em contingência"); + } + dataResult.put("chbpe", rset.getString("chbpe")); + dataResult.put("nprot", rset.getString("nprot")); + + return dataResult; + } + + @Override + protected void processaParametros() throws Exception { + } + + private String getSql() { + + StringBuilder sql = new StringBuilder(); + if (quebraSequencia){ + sql.append("select * from ( "); + } + sql.append("select "); + sql.append(" e.nombempresa, "); + sql.append(" p.puntoventa_id, "); + sql.append(" p.nombpuntoventa, "); + sql.append(" u.cveusuario, "); + sql.append(" u.nombusuario, "); + sql.append(" c.feccorte, "); + sql.append(" b.numserie_bpe, "); + sql.append(" b.num_bpe as num_bpe, "); + sql.append(" est.cveestado, "); + sql.append(" b.ruta_id, "); + sql.append(" r.numruta, "); + sql.append(" r.descruta, "); + sql.append(" ori.parada_id origenId, "); + sql.append(" ori.descparada origen, "); + sql.append(" dest.parada_id destinoId, "); + sql.append(" dest.descparada destino, "); + sql.append(" b.fechorventa, "); + sql.append(" b.fechorviaje, "); + sql.append(" b.corrida_id, "); + sql.append(" b.preciopagado as tarifa, "); + sql.append(" b.importeseguro as seguro, "); + sql.append(" b.importetaxaembarque as taxaembarque, "); + sql.append(" b.importepedagio, "); + sql.append(" b.importetpp as tpp, "); + sql.append(" b.preciopagado + nvl(b.importeoutros,0) + nvl(b.importepedagio,0) + nvl(b.importeseguro,0) + nvl(b.importetaxaembarque,0) + nvl(b.importetpp,0) as total, "); + sql.append(" bp.codstat as statussefaz, "); + sql.append(" bp.chbpe, "); + sql.append(" bp.nprot "); + sql.append("from "); + sql.append(" 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(" inner join punto_venta p on p.puntoventa_id = b.puntoventa_id "); + sql.append(" inner join usuario u on u.usuario_id = b.usuario_id "); + sql.append(" inner join caja c on c.transacao_id = b.boleto_id "); + sql.append(" inner join bpe bp on bp.boleto_id = b.boleto_id "); + sql.append(" left join colonia col on col.colonia_id = p.colonia_id "); + sql.append(" left join ciudad cid on cid.ciudad_id = col.ciudad_id "); + sql.append(" left join estado est on cid.estado_id = est.estado_id "); + sql.append(" inner join ruta r on r.ruta_id = b.ruta_id "); + sql.append(" inner join parada ori on ori.parada_id = b.origen_id "); + sql.append(" inner join parada dest on dest.parada_id = b.destino_id "); + sql.append(" left join dispositivo_embarcada disp on disp.imei = b.IMEI_DISPOSITIVO_EMBARCADA "); + sql.append("where "); + sql.append(" b.fechorventa between :fecInicio and :fecFinal "); + sql.append(" and b.motivocancelacion_id is null "); + sql.append(" and bp.TIPOSUBSTITUICAO is null "); + if (empresaId != null){ + sql.append(" and e.empresa_id = :empresaId "); + } + if (puntoVendaId != null){ + sql.append(" and p.puntoventa_id = :puntoventaId "); + } + if (estadoId != null){ + sql.append(" and est.estado_id = :estadoId "); + } + if (StringUtils.isNotBlank(serie)){ + sql.append(" and b.numserie_bpe = :serie "); + } + if (StringUtils.isNotBlank(numBpe)){ + sql.append(" and b.num_bpe = :bpe "); + } + if (bloqueado != null && bloqueado){ + sql.append(" and disp.ind_disp_bloqueado = :bloqueado "); + } else { + sql.append(" and (disp.ind_disp_bloqueado = 0 or disp.ind_disp_bloqueado is null) "); + } + if (envioSefaz == FiltroEnviadosSefaz.SIM) { + sql.append(" and bp.codstat in (100, 150) "); + } else if (envioSefaz == FiltroEnviadosSefaz.NAO) { + sql.append(" and bp.codstat = -1 "); + } else { + sql.append(" and bp.codstat in (-1, 100,150) "); + } + if (vendaEmbarcada == FiltroEnviadosSefaz.SIM) { + sql.append(" and b.IMEI_DISPOSITIVO_EMBARCADA is not null "); + } else if (envioSefaz == FiltroEnviadosSefaz.NAO) { + sql.append(" and b.IMEI_DISPOSITIVO_EMBARCADA is null "); + } + if (quebraSequencia){ + sql.append("union "); + sql.append("select "); + sql.append(" null as nombempresa, "); + sql.append(" null as puntoventa_id, "); + sql.append(" null as nombpuntoventa, "); + sql.append(" null as cveusuario, "); + sql.append(" null as nombusuario, "); + sql.append(" null as feccorte, "); + sql.append(" bd.serie as numserie_bpe, "); + sql.append(" bd.numero as num_bpe, "); + sql.append(" bd.cveestado as cveestado, "); + sql.append(" null as ruta_id, "); + sql.append(" null as numruta, "); + sql.append(" null as descruta, "); + sql.append(" null as origenId, "); + sql.append(" null as origen, "); + sql.append(" null as destinoId, "); + sql.append(" null as destino, "); + sql.append(" null as fechorventa, "); + sql.append(" null as fechorviaje, "); + sql.append(" null as corrida_id, "); + sql.append(" null as tarifa, "); + sql.append(" null as seguro, "); + sql.append(" null as taxaembarque, "); + sql.append(" null as importepedagio, "); + sql.append(" null as tpp, "); + sql.append(" null as total, "); + sql.append(" null as statussefaz, "); + sql.append(" null as chbpe, "); + sql.append(" null as nprot "); + sql.append("from "); + sql.append(" 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(" inner join punto_venta p on p.puntoventa_id = b.puntoventa_id "); + sql.append(" inner join usuario u on u.usuario_id = b.usuario_id "); + sql.append(" inner join caja c on c.transacao_id = b.boleto_id "); + sql.append(" inner join bpe bp on bp.boleto_id = b.boleto_id "); + sql.append(" left join colonia col on col.colonia_id = p.colonia_id "); + sql.append(" left join ciudad cid on cid.ciudad_id = col.ciudad_id "); + sql.append(" left join estado est on cid.estado_id = est.estado_id "); + sql.append(" inner join ruta r on r.ruta_id = b.ruta_id "); + sql.append(" inner join parada ori on ori.parada_id = b.origen_id "); + sql.append(" inner join parada dest on dest.parada_id = b.destino_id "); + sql.append(" left join dispositivo_embarcada disp on disp.imei = b.IMEI_DISPOSITIVO_EMBARCADA "); + sql.append(" inner join bpe_ctrl_disponibilidade bd on bd.serie = b.numserie_bpe "); + sql.append("where "); + sql.append(" b.fechorventa between :fecInicio and :fecFinal "); + sql.append(" and b.motivocancelacion_id is null "); + sql.append(" and bp.TIPOSUBSTITUICAO is null "); + if (empresaId != null){ + sql.append(" and e.empresa_id = :empresaId "); + } + if (puntoVendaId != null){ + sql.append(" and p.puntoventa_id = :puntoventaId "); + } + if (estadoId != null){ + sql.append(" and est.estado_id = :estadoId "); + } + if (StringUtils.isNotBlank(serie)){ + sql.append(" and b.numserie_bpe = :serie "); + } + if (StringUtils.isNotBlank(numBpe)){ + sql.append(" and b.num_bpe = :bpe "); + } + if (bloqueado != null && bloqueado){ + sql.append(" and disp.ind_disp_bloqueado = :bloqueado "); + } else { + sql.append(" and (disp.ind_disp_bloqueado = 0 or disp.ind_disp_bloqueado is null) "); + } + if (envioSefaz == FiltroEnviadosSefaz.SIM) { + sql.append(" and bp.codstat in (100, 150) "); + } else if (envioSefaz == FiltroEnviadosSefaz.NAO) { + sql.append(" and bp.codstat = -1 "); + } else { + sql.append(" and bp.codstat in (-1, 100,150) "); + } + if (vendaEmbarcada == FiltroEnviadosSefaz.SIM) { + sql.append(" and b.IMEI_DISPOSITIVO_EMBARCADA is not null "); + } else if (envioSefaz == FiltroEnviadosSefaz.NAO) { + sql.append(" and b.IMEI_DISPOSITIVO_EMBARCADA is null "); + } + sql.append(") "); + } + sql.append("order by "); + sql.append(" cveestado, "); + sql.append(" to_number(numserie_bpe), "); + sql.append(" to_number(num_bpe) "); + return sql.toString(); + } + + public Date getDatInicial() { + return datInicial; + } + + public void setDatInicial(Date datInicial) { + this.datInicial = datInicial; + } + + public Date getDatFinal() { + return datFinal; + } + + public void setDatFinal(Date datFinal) { + this.datFinal = datFinal; + } + + public Integer getEstadoId() { + return estadoId; + } + + public void setEstadoId(Integer estadoId) { + this.estadoId = estadoId; + } + + public Integer getEmpresaId() { + return empresaId; + } + + public void setEmpresaId(Integer empresaId) { + this.empresaId = empresaId; + } + + public Integer getPuntoVendaId() { + return puntoVendaId; + } + + public void setPuntoVendaId(Integer puntoVendaId) { + this.puntoVendaId = puntoVendaId; + } + + public String getSerie() { + return serie; + } + + public void setSerie(String serie) { + this.serie = serie; + } + + public String getNumBpe() { + return numBpe; + } + + public void setNumBpe(String numBpe) { + this.numBpe = numBpe; + } + + public Boolean getBloqueado() { + return bloqueado; + } + + public void setBloqueado(Boolean bloqueado) { + this.bloqueado = bloqueado; + } + + public FiltroEnviadosSefaz getEnvioSefaz() { + return envioSefaz; + } + + public void setEnvioSefaz(FiltroEnviadosSefaz envioSefaz) { + this.envioSefaz = envioSefaz; + } + + public Boolean getQuebraSequencia() { + return quebraSequencia; + } + + public void setQuebraSequencia(Boolean quebraSequencia) { + this.quebraSequencia = quebraSequencia; + } + + public Boolean getUltimoBpe() { + return ultimoBpe; + } + + public void setUltimoBpe(Boolean ultimoBpe) { + this.ultimoBpe = ultimoBpe; + } +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_es.properties new file mode 100644 index 000000000..01f6ecc2b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_es.properties @@ -0,0 +1,13 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + + +#Labels cabeçalho +cabecalho.relatorio=Relatório: +cabecalho.periodo=Período: +cabecalho.periodoA=à +cabecalho.dataHora=Data/Hora: +cabecalho.impressorPor=Impressor por: +cabecalho.pagina=Página +cabecalho.de=de +cabecalho.filtros=Filtros: \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_pt_BR.properties new file mode 100644 index 000000000..01f6ecc2b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendaEmbarcada_pt_BR.properties @@ -0,0 +1,13 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + + +#Labels cabeçalho +cabecalho.relatorio=Relatório: +cabecalho.periodo=Período: +cabecalho.periodoA=à +cabecalho.dataHora=Data/Hora: +cabecalho.impressorPor=Impressor por: +cabecalho.pagina=Página +cabecalho.de=de +cabecalho.filtros=Filtros: \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jasper new file mode 100644 index 0000000000000000000000000000000000000000..453bf0b12c717a2f6b5e8745850da164ea5a4257 GIT binary patch literal 55840 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 literal 0 HcmV?d00001 diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jrxml new file mode 100644 index 000000000..e81a8fc6b --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendaEmbarcada.jrxml @@ -0,0 +1,668 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendaEmbarcadaController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendaEmbarcadaController.java new file mode 100644 index 000000000..4ea863a07 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendaEmbarcadaController.java @@ -0,0 +1,311 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.util.resource.Labels; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Checkbox; +import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Radio; + +import com.rjconsultores.ventaboletos.constantes.Constantes.FiltroEnviadosSefaz; +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.Estado; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioVendaEmbarcada; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.EstadoService; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEmpresa; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox; + +@Controller("relatorioVendaEmbarcadaController") +@Scope("prototype") +public class RelatorioVendaEmbarcadaController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static Logger log = Logger.getLogger(RelatorioVendaEmbarcadaController.class); + + @Autowired + private DataSource dataSourceRead; + @Autowired + private EstadoService estadoService; + + private MyComboboxEmpresa cmbEmpresa; + private MyComboboxPuntoVenta cmbPuntoVenta; + private Datebox datInicial; + private Datebox datFinal; + private Checkbox chkBloqueado; + private Radio radEnvioSim; + private Radio radEnvioNao; + private Radio radEnvioAmbos; + private Radio radVendaEmbarcadaSim; + private Radio radVendaEmbarcadaNao; + private Radio radVendaEmbarcadaAmbos; + private MyComboboxEstandar cmbEstado; + private Checkbox chkQuebraSequencia; + private MyTextbox txtSerie; + private Checkbox chkUltimoBpe; + private MyTextbox txtNumBpe; + + private Integer estadoId; + private Integer empresaId; + private Integer puntoVendaId; + private String serie; + private String numBpe; + private Boolean bloqueado; + private FiltroEnviadosSefaz envioSefaz; + private Boolean quebraSequencia; + private Boolean ultimoBpe; + + private List lsEstados; + + @Override + public void doAfterCompose(Component comp) throws Exception { + lsEstados = estadoService.obtenerTodos(); + super.doAfterCompose(comp); + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + executarRelatorio(); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + private void executarRelatorio() throws Exception { + + //Map parametros = new HashMap(); + StringBuilder filtro = new StringBuilder(); + + Map parametros = new HashMap(); + parametros.put("TITULO", Labels.getLabel("relatorioVendaEmbarcadaController.window.title")); + parametros.put("NOME_RELATORIO", Labels.getLabel("relatorioVendaEmbarcadaController.window.title")); + parametros.put("USUARIO_ID", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString()); + parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario()); + parametros.put("DATA_INICIAL", datInicial.getValue()); + parametros.put("DATA_FINAL", datFinal.getValue()); + + Comboitem itemEmpresa = cmbEmpresa.getSelectedItem(); + if (itemEmpresa != null) { + Empresa empresa = (Empresa) itemEmpresa.getValue(); + empresaId = empresa.getEmpresaId(); + parametros.put("EMPRESA", empresa.getNombempresa()); + parametros.put("EMPRESA_ID", empresa.getEmpresaId()); + } + + Comboitem itemPuntoVenta = cmbPuntoVenta.getSelectedItem(); + if (itemPuntoVenta != null) { + PuntoVenta ptovta = (PuntoVenta) itemPuntoVenta.getValue(); + puntoVendaId = ptovta.getPuntoventaId(); + parametros.put("PUNTOVENTA", ptovta.getNombpuntoventa()); + parametros.put("PUNTOVENTA_ID", ptovta.getPuntoventaId()); + } + + Comboitem itemEstado = cmbEstado.getSelectedItem(); + if (itemEstado != null) { + Estado estado = (Estado) itemEstado.getValue(); + estadoId = estado.getEstadoId(); + parametros.put("ESTADO", estado.getNombestado()); + parametros.put("ESTADO_ID", estado.getEstadoId()); + } + + if (radEnvioAmbos.isChecked()){ + parametros.put("ENVIOSEFAZ", FiltroEnviadosSefaz.TODOS); + } else if (radEnvioNao.isChecked()){ + parametros.put("ENVIOSEFAZ", FiltroEnviadosSefaz.NAO); + } else { + parametros.put("ENVIOSEFAZ", FiltroEnviadosSefaz.SIM); + } + + if (radVendaEmbarcadaAmbos.isChecked()){ + parametros.put("VENDAEMBARCADA", FiltroEnviadosSefaz.TODOS); + } else if (radVendaEmbarcadaNao.isChecked()){ + parametros.put("VENDAEMBARCADA", FiltroEnviadosSefaz.NAO); + } else { + parametros.put("VENDAEMBARCADA", FiltroEnviadosSefaz.SIM); + } + + parametros.put("QUEBRASEQ", chkQuebraSequencia.isChecked()); + + SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); + filtro.append(" DATA: " + df.format(new Date())); + parametros.put("DATA", new Date()); + + serie = txtSerie.getText(); + parametros.put("SERIE", serie); + numBpe = txtNumBpe.getText(); + parametros.put("NUMBPE", numBpe); + bloqueado = chkBloqueado.isChecked(); + parametros.put("BLOQUEADO", bloqueado); + quebraSequencia = chkQuebraSequencia.isChecked(); + ultimoBpe = chkUltimoBpe.isChecked(); + parametros.put("ULTIMOBPE", ultimoBpe); + + Relatorio relatorio = new RelatorioVendaEmbarcada(parametros, dataSourceRead.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", + Labels.getLabel("relatorioVendaEmbarcadaController.window.title"), args, MODAL); + } + + public EstadoService getEstadoService() { + return estadoService; + } + + public void setEstadoService(EstadoService estadoService) { + this.estadoService = estadoService; + } + + public MyComboboxEmpresa getCmbEmpresa() { + return cmbEmpresa; + } + + public void setCmbEmpresa(MyComboboxEmpresa cmbEmpresa) { + this.cmbEmpresa = cmbEmpresa; + } + + public MyComboboxPuntoVenta getCmbPuntoVenta() { + return cmbPuntoVenta; + } + + public void setCmbPuntoVenta(MyComboboxPuntoVenta cmbPuntoVenta) { + this.cmbPuntoVenta = cmbPuntoVenta; + } + + public Datebox getDatInicial() { + return datInicial; + } + + public void setDatInicial(Datebox datInicial) { + this.datInicial = datInicial; + } + + public Datebox getDatFinal() { + return datFinal; + } + + public void setDatFinal(Datebox datFinal) { + this.datFinal = datFinal; + } + + public List getLsEstados() { + return lsEstados; + } + + public void setLsEstados(List lsEstados) { + this.lsEstados = lsEstados; + } + + public Checkbox getChkBloqueado() { + return chkBloqueado; + } + + public void setChkBloqueado(Checkbox chkBloqueado) { + this.chkBloqueado = chkBloqueado; + } + + public Radio getRadEnvioSim() { + return radEnvioSim; + } + + public void setRadEnvioSim(Radio radEnvioSim) { + this.radEnvioSim = radEnvioSim; + } + + public Radio getRadEnvioNao() { + return radEnvioNao; + } + + public void setRadEnvioNao(Radio radEnvioNao) { + this.radEnvioNao = radEnvioNao; + } + + public Radio getRadEnvioAmbos() { + return radEnvioAmbos; + } + + public void setRadEnvioAmbos(Radio radEnvioAmbos) { + this.radEnvioAmbos = radEnvioAmbos; + } + + public MyComboboxEstandar getCmbEstado() { + return cmbEstado; + } + + public void setCmbEstado(MyComboboxEstandar cmbEstado) { + this.cmbEstado = cmbEstado; + } + + public Checkbox getChkQuebraSequencia() { + return chkQuebraSequencia; + } + + public void setChkQuebraSequencia(Checkbox chkQuebraSequencia) { + this.chkQuebraSequencia = chkQuebraSequencia; + } + + public MyTextbox getTxtSerie() { + return txtSerie; + } + + public void setTxtSerie(MyTextbox txtSerie) { + this.txtSerie = txtSerie; + } + + public Checkbox getChkUltimoBpe() { + return chkUltimoBpe; + } + + public void setChkUltimoBpe(Checkbox chkUltimoBpe) { + this.chkUltimoBpe = chkUltimoBpe; + } + + public MyTextbox getTxtNumBpe() { + return txtNumBpe; + } + + public void setTxtNumBpe(MyTextbox txtNumBpe) { + this.txtNumBpe = txtNumBpe; + } + + public Radio getRadVendaEmbarcadaSim() { + return radVendaEmbarcadaSim; + } + + public void setRadVendaEmbarcadaSim(Radio radVendaEmbarcadaSim) { + this.radVendaEmbarcadaSim = radVendaEmbarcadaSim; + } + + public Radio getRadVendaEmbarcadaNao() { + return radVendaEmbarcadaNao; + } + + public void setRadVendaEmbarcadaNao(Radio radVendaEmbarcadaNao) { + this.radVendaEmbarcadaNao = radVendaEmbarcadaNao; + } + + public Radio getRadVendaEmbarcadaAmbos() { + return radVendaEmbarcadaAmbos; + } + + public void setRadVendaEmbarcadaAmbos(Radio radVendaEmbarcadaAmbos) { + this.radVendaEmbarcadaAmbos = radVendaEmbarcadaAmbos; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendaEmbarcada.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendaEmbarcada.java new file mode 100644 index 000000000..c30b058a5 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendaEmbarcada.java @@ -0,0 +1,26 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios; + +import org.zkoss.util.resource.Labels; + +import com.rjconsultores.ventaboletos.constantes.ConstantesFuncionSistema; +import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria; +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class ItemMenuRelatorioVendaEmbarcada extends DefaultItemMenuSistema { + + public ItemMenuRelatorioVendaEmbarcada() { + super("indexController.mniRelatorioVendaEmbarcada.label"); + } + + @Override + public String getClaveMenu() { + return ConstantesFuncionSistema.CLAVE_RELATORIO_VENDA_EMBARCADA; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioVendaEmbarcada.zul", + Labels.getLabel("relatorioVendaEmbarcadaController.window.title"), getArgs(), desktop); + + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties index 56d94e10d..a008e322b 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties @@ -169,6 +169,7 @@ analitico.gerenciais.estatisticos.gratuidadesIdosoDeficiente=com.rjconsultores.v analitico.gerenciais.estatisticos.relatorioMovimentoPorOrgaoConcedente=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioMovimentoPorOrgaoConcedente analitico.gerenciais.estatisticos.checkin=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioCheckin analitico.gerenciais.estatisticos.relatorioBaixasVendasInternet=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioBaixasVendasInternet +analitico.gerenciais.estatisticos.relatorioVendaEmbarcada=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioVendaEmbarcada analitico.gerenciais.financeiro=com.rjconsultores.ventaboletos.web.utilerias.menu.item.analitico.gerenciais.financeiro.SubMenuRelatorioFinanceiro analitico.gerenciais.financeiro.receitaDiariaAgencia=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioReceitaDiariaAgencia analitico.gerenciais.financeiro.taxas=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioTaxasLinha diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 90ba63de5..b1e77720b 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -322,7 +322,7 @@ indexController.mniRelatorioVendasConexao.label = Reporte Ventas Conexion indexController.mniRelatorioVendasRequisicao.label = Relatório Vendas Requisição(Ordem de Serviço) indexController.mniRelatorioHistoricoCompras.label = Reporte Histórico de Compras indexController.mniRelatorioPosicaoVendaBilheteIdoso.label = Reporte Posición de Venta del Billete Anciano - +indexController.mniRelatorioVendaEmbarcada.label = Venda Embarcada indexController.mniRelatorioRemessaCNAB.label = Remessa de Lote (CNAB 400) indexController.mnSubMenuImpressaoFiscal.label=Impresión fiscal @@ -8033,6 +8033,30 @@ busquedaOperadorEmbarcada.mensage.operadorSalvo=Operador Cadastrado com sucesso. busquedaOperadorEmbarcada.mensage.operadorSalvo.title=Sucesso busquedaOperadorEmbarcada.MSG.borrarPergunta= Eliminar o operador? busquedaOperadorEmbarcada.MSG.borrarPergunta.title=Apagar + +busquedaOperadorEmbarcada.MSG..borrarOK=Registro excluído. + +# Relatório Venda Embarcada +relatorioVendaEmbarcadaController.window.title = Relatório Venda Embarcada +relatorioVendaEmbarcadaController.lbDePeriodoViagem.value = Data Inicial +relatorioVendaEmbarcadaController.lbAtePeriodoViagem.value = Data Final +relatorioVendaEmbarcadaController.lbEmpresa.value = Empresa +relatorioVendaEmbarcadaController.lbPontoVenda.value = Ponto de Venda +relatorioVendaEmbarcadaController.lbUf.value = Estado +relatorioVendaEmbarcadaController.lbSerie.value = Série +relatorioVendaEmbarcadaController.lbNumBpe.value = N° Bpe +relatorioVendaEmbarcadaController.lbBloqueado.value = Dispositivo Bloqueado +relatorioVendaEmbarcadaController.lbEnvioSefaz.value = Mostrar Status de Envio Sefaz +relatorioVendaEmbarcadaController.lbQuebraSequencia.value = Mostrar Quebra de Sequência +relatorioVendaEmbarcadaController.lbUltimoBpe.value = Mostar apenas o último Bpe +relatorioVendaEmbarcadaController.label.enviosefaz.sim = Enviados +relatorioVendaEmbarcadaController.label.enviosefaz.nao = Não Enviados +relatorioVendaEmbarcadaController.label.enviosefaz.ambos = Todos +relatorioVendaEmbarcadaController.lbVendaEmbarcada.value = Venda Embarcada +relatorioVendaEmbarcadaController.label.VendaEmbarcada.sim = Sim +relatorioVendaEmbarcadaController.label.VendaEmbarcada.nao = Não +relatorioVendaEmbarcadaController.label.VendaEmbarcada.ambos = Todos + busquedaOperadorEmbarcada.MSG.borrarOK=Registro excluído. # @@ -8073,4 +8097,4 @@ editarAutorizacaoUsoSerieEmbarcadaController.window.title = Autorização de uso editarAutorizacaoUsoSerieEmbarcadaController.MSG.borrarPergunta = Eliminar autorización? editarAutorizacaoUsoSerieEmbarcadaController.MSG.borrarOK = Autorización se eliminó exitosamente -editarAutorizacaoUsoSerieEmbarcadaController.MSG.erroJaCadastrado=Dispositivo já autorizado para esta UF \ No newline at end of file +editarAutorizacaoUsoSerieEmbarcadaController.MSG.erroJaCadastrado=Dispositivo já autorizado para esta UF diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index c9c7b0bcf..0fec7ada8 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -338,6 +338,7 @@ indexController.mniRelatorioVendasConexao.label = Relatório Vendas de Conexão indexController.mniRelatorioVendasRequisicao.label = Relatório Vendas Requisição(Ordem de Serviço) indexController.mniRelatorioHistoricoCompras.label = Relatório Histórico de Compras indexController.mniRelatorioPosicaoVendaBilheteIdoso.label = Relatório Posição de Venda do Bilhete Idoso +indexController.mniRelatorioVendaEmbarcada.label = Venda Embarcada indexController.mnSubMenuImpressaoFiscal.label=Impressão Fiscal indexController.mnSubMenuRelatorioImpressaoFiscal.label=Importação Fiscal @@ -8528,6 +8529,28 @@ busquedaOperadorEmbarcada.MSG.borrarPergunta= Eliminar o operador? busquedaOperadorEmbarcada.MSG.borrarPergunta.title=Apagar busquedaOperadorEmbarcada.MSG..borrarOK=Registro excluído. + +# Relatório Venda Embarcada +relatorioVendaEmbarcadaController.window.title = Relatório Venda Embarcada +relatorioVendaEmbarcadaController.lbDePeriodoViagem.value = Data Inicial +relatorioVendaEmbarcadaController.lbAtePeriodoViagem.value = Data Final +relatorioVendaEmbarcadaController.lbEmpresa.value = Empresa +relatorioVendaEmbarcadaController.lbPontoVenda.value = Ponto de Venda +relatorioVendaEmbarcadaController.lbUf.value = Estado +relatorioVendaEmbarcadaController.lbSerie.value = Série +relatorioVendaEmbarcadaController.lbNumBpe.value = N° Bpe +relatorioVendaEmbarcadaController.lbBloqueado.value = Dispositivo Bloqueado +relatorioVendaEmbarcadaController.lbEnvioSefaz.value = Mostrar Status de Envio Sefaz +relatorioVendaEmbarcadaController.lbQuebraSequencia.value = Mostrar Quebra de Sequência +relatorioVendaEmbarcadaController.lbUltimoBpe.value = Mostar apenas o último Bpe +relatorioVendaEmbarcadaController.label.enviosefaz.sim = Enviados +relatorioVendaEmbarcadaController.label.enviosefaz.nao = Não Enviados +relatorioVendaEmbarcadaController.label.enviosefaz.ambos = Todos +relatorioVendaEmbarcadaController.lbVendaEmbarcada.value = Venda Embarcada +relatorioVendaEmbarcadaController.label.VendaEmbarcada.sim = Sim +relatorioVendaEmbarcadaController.label.VendaEmbarcada.nao = Não +relatorioVendaEmbarcadaController.label.VendaEmbarcada.ambos = Todos + # autorizacaoUsoSerieEmbarcadaController.window.title = Autorização de uso de série por dispositivo editarAutorizacaoUsoSerieEmbarcadaController.window.title = Autorização de uso de série por dispositivo @@ -8566,4 +8589,4 @@ editarAutorizacaoUsoSerieEmbarcadaController.window.title = Autorização de uso editarAutorizacaoUsoSerieEmbarcadaController.MSG.borrarPergunta = Eliminar autorização? editarAutorizacaoUsoSerieEmbarcadaController.MSG.borrarOK = Autorização excluida com Sucesso. -editarAutorizacaoUsoSerieEmbarcadaController.MSG.erroJaCadastrado=Dispositivo já autorizado para esta UF \ No newline at end of file +editarAutorizacaoUsoSerieEmbarcadaController.MSG.erroJaCadastrado=Dispositivo já autorizado para esta UF diff --git a/web/gui/relatorios/filtroRelatorioVendaEmbarcada.zul b/web/gui/relatorios/filtroRelatorioVendaEmbarcada.zul new file mode 100644 index 000000000..9e2ec1e59 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioVendaEmbarcada.zul @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +