diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasPercurso.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasPercurso.java new file mode 100644 index 000000000..c099e63ff --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioVendasPercurso.java @@ -0,0 +1,120 @@ +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.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +import org.apache.commons.lang.StringUtils; + +import com.rjconsultores.ventaboletos.entidad.Estacion; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioVendasPercursoBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +public class RelatorioVendasPercurso extends Relatorio { + + private List lsPuntoVenta; + private Date fecInicio; + private Date fecFinal; + private Estacion estacion; + private Integer corridaId; + + public RelatorioVendasPercurso(Connection conexao, List lsPuntoVenta, Date fecInicio, Date fecFinal, Estacion estacion, Integer corridaId) { + super(new HashMap(), conexao); + this.lsPuntoVenta = lsPuntoVenta; + this.fecInicio = fecInicio; + this.fecFinal = fecFinal; + this.estacion = estacion; + this.corridaId = corridaId; + } + + @Override + protected void processaParametros() throws Exception { + + NamedParameterStatement namedParameterStatement = new NamedParameterStatement(getConexao(), getSql()); + + List lsPuntoVentaId = new ArrayList(); + List lsNombPuntoVenta = new ArrayList(); + for (PuntoVenta puntoVenta : lsPuntoVenta) { + lsPuntoVentaId.add(puntoVenta.getPuntoventaId()); + lsNombPuntoVenta.add(puntoVenta.getNombpuntoventa()); + } + namedParameterStatement.setString("lsPuntoVentaId", StringUtils.join(lsPuntoVentaId.toArray(), ',')); + this.parametros.put("lsNombPuntoVenta", StringUtils.join(lsNombPuntoVenta.toArray(new String[0]), ", ")); + + namedParameterStatement.setInt("estacionId", estacion.getEstacionId()); + this.parametros.put("estacion", estacion.toString()); + + SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); + if (fecInicio != null) { + namedParameterStatement.setDate("fecInicio", new java.sql.Date(fecInicio.getTime())); + this.parametros.put("fecInicio", dateFormat.format(fecInicio)); + } + + if (fecFinal != null) { + namedParameterStatement.setDate("fecFinal", new java.sql.Date(fecFinal.getTime())); + this.parametros.put("fecFinal", dateFormat.format(fecFinal)); + } + + if (corridaId != null) { + namedParameterStatement.setString("corridaId", "%" + corridaId + "%"); + } + + ResultSet resultSet = namedParameterStatement.executeQuery(); + List resultBean = transformResultSet(resultSet); + setCollectionDataSource(new JRBeanCollectionDataSource(resultBean)); + + } + + private List transformResultSet(ResultSet resultSet) throws SQLException { + List resultBean = new ArrayList(); + while (resultSet.next()) { + RelatorioVendasPercursoBean bean = new RelatorioVendasPercursoBean(); + bean.setCorridaId(resultSet.getInt("CORRIDA_ID")); + bean.setNumFolioSistema(resultSet.getString("NUMFOLIOSISTEMA")); + bean.setOrigen(resultSet.getString("ORIGEN")); + bean.setDestino(resultSet.getString("DESTINO")); + bean.setValor(resultSet.getBigDecimal("VALOR")); + resultBean.add(bean); + } + return resultBean; + } + + private String getSql() { + + StringBuilder sql = new StringBuilder("SELECT C.CORRIDA_ID, C.NUMFOLIOSISTEMA, O.DESCPARADA ORIGEN, D.DESCPARADA DESTINO, " + + "(C.PRECIOPAGADO + C.IMPORTETAXAEMBARQUE + C.IMPORTESEGURO + C.IMPORTEPEDAGIO + C.IMPORTEOUTROS) AS VALOR " + + "FROM CAJA C " + + "JOIN PARADA O ON C.ORIGEN_ID = O.PARADA_ID " + + "JOIN PARADA D ON C.DESTINO_ID = D.PARADA_Id " + + "WHERE " + + "USUARIOREMOTO_ID IS NOT NULL " + + "AND INDREMOTOINVERSO = 1 " + + "AND C.PUNTOVENTA_ID IN(:lsPuntoVentaId) " + + "AND C.ESTACION_ID = :estacionId "); + + if (fecInicio != null) { + sql.append("AND C.FECHORVENTA >= :fecInicio "); + } + + if (fecFinal != null) { + sql.append("AND C.FECHORVENTA <= :fecFinal "); + } + + if (corridaId != null) { + sql.append("AND C.CORRIDA_ID LIKE :corridaId "); + } + + return sql.toString(); + + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendasPercurso_es.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendasPercurso_es.properties new file mode 100644 index 000000000..76a4c4965 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendasPercurso_es.properties @@ -0,0 +1,24 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + +#Labels cabeçalho +cabecalho.nome=Relatório Vendas para Comissão +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: +cabecalho.usuario=Usuário: + +label.puntoVenta=Punto de Venda +label.estacion=Estacion + +label.numCorrida=Número da Corrida +label.numFolio=Número da Passagem Digitada +label.origen=Origem +label.destino=Destino +label.valor=Valor da Passagem +label.total=Total \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendasPercurso_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendasPercurso_pt_BR.properties new file mode 100644 index 000000000..0f4cb3e72 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioVendasPercurso_pt_BR.properties @@ -0,0 +1,24 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. + +#Labels cabeçalho +cabecalho.nome=Relatório de Vendas no Percurso +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: +cabecalho.usuario=Usuário: + +label.puntoVenta=Ponto de Venda +label.estacion=Estação + +label.numCorrida=Número da Corrida +label.numFolio=Número da Passagem Digitada +label.origen=Origem +label.destino=Destino +label.valor=Valor da Passagem +label.total=Total \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendasPercurso.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendasPercurso.jasper new file mode 100644 index 000000000..f4c2af5f9 Binary files /dev/null and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendasPercurso.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendasPercurso.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendasPercurso.jrxml new file mode 100644 index 000000000..77c0d3fb8 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioVendasPercurso.jrxml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + <band height="97" splitType="Stretch"> + <textField> + <reportElement uuid="43b2c28d-4760-4890-b00d-25e931e79c74" x="0" y="0" width="620" height="20"/> + <textElement markup="none"> + <font size="14" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$R{cabecalho.nome}]]></textFieldExpression> + </textField> + <textField pattern="dd/MM/yyyy HH:mm"> + <reportElement uuid="4d1bcd65-c9a6-44b4-8dca-cc3c4c20c9a5" x="638" y="0" width="164" height="20"/> + <textElement textAlignment="Right"> + <font isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="96d6ce56-5bf3-460a-b3ba-a81890a2caed" x="0" y="42" width="104" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{label.puntoVenta}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="35e8e5cd-52e2-4f14-bbd7-e3a2233ad637" x="104" y="62" width="139" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{estacion}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="b75cac86-9c93-40ec-b667-afd66f26103d" x="104" y="42" width="139" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{lsNombPuntoVenta}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="4f5a4fd1-5164-4865-8b05-73fe7a5b64e1" x="0" y="62" width="104" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{label.estacion}]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="aef7159d-4131-49d3-85dd-75f63f92c5af" x="0" y="22" width="104" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$R{cabecalho.periodo}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="62f02d34-2844-48b6-bb97-274de2247bd6" x="104" y="22" width="56" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{fecInicio}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="e2bf6ff8-8d8e-4bab-bc3d-e1e690d707a0" x="181" y="22" width="56" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{fecFinal}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="6a9e5919-6b5b-430a-88a6-856957e20dea" x="160" y="22" width="21" height="20"/> + <textElement textAlignment="Center"/> + <textFieldExpression><![CDATA[$R{cabecalho.periodoA}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioVendasPercursoBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioVendasPercursoBean.java new file mode 100644 index 000000000..bdbe0505c --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioVendasPercursoBean.java @@ -0,0 +1,53 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios; + +import java.math.BigDecimal; + +public class RelatorioVendasPercursoBean { + + private Integer corridaId; + private String numFolioSistema; + private String origen; + private String destino; + private BigDecimal valor; + + public Integer getCorridaId() { + return corridaId; + } + + public void setCorridaId(Integer corridaId) { + this.corridaId = corridaId; + } + + public String getNumFolioSistema() { + return numFolioSistema; + } + + public void setNumFolioSistema(String numfoliosistema) { + this.numFolioSistema = numfoliosistema; + } + + public String getOrigen() { + return origen; + } + + public void setOrigen(String origen) { + this.origen = origen; + } + + public String getDestino() { + return destino; + } + + public void setDestino(String destino) { + this.destino = destino; + } + + public BigDecimal getValor() { + return valor; + } + + public void setValor(BigDecimal valor) { + this.valor = valor; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasPercursoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasPercursoController.java new file mode 100644 index 000000000..30934a0d0 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioVendasPercursoController.java @@ -0,0 +1,136 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +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.zhtml.Messagebox; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zkplus.databind.BindingListModelList; +import org.zkoss.zul.Combobox; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Intbox; +import org.zkoss.zul.Paging; + +import com.rjconsultores.ventaboletos.entidad.Estacion; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioVendasPercurso; +import com.rjconsultores.ventaboletos.service.EstacionService; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox; +import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject; +import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper; + +@Controller("relatorioVendasPercursoController") +@Scope("prototype") +public class RelatorioVendasPercursoController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 143203038399530349L; + + private MyTextbox txtNombrePuntoVenta; + private Paging pagingPuntoVenta; + private MyListbox puntoVentaList; + private MyListbox puntoVentaSelList; + + private Datebox fecInicio; + private Datebox fecFinal; + + private Combobox cmbEstacion; + private List lsEstacion; + + private Intbox txtIdCorrida; + + @Autowired + private DataSource dataSourceRead; + + @Autowired + private EstacionService estacionService; + + @Autowired + private transient PagedListWrapper plwPuntoVenta; + + @Override + public void doAfterCompose(Component comp) throws Exception { + lsEstacion = new ArrayList(); + super.doAfterCompose(comp); + } + + @SuppressWarnings("unchecked") + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + + Estacion estacion = (Estacion) cmbEstacion.getSelectedItem().getValue(); + List lsPuntoVenta = (List) (Object) puntoVentaSelList.getListData(); + Integer corridaId = txtIdCorrida.getValue(); + + RelatorioVendasPercurso relatorio = new RelatorioVendasPercurso(dataSourceRead.getConnection(), lsPuntoVenta, fecInicio.getValue(), fecFinal.getValue(), estacion, corridaId); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", + Labels.getLabel("indexController.mniRelatorioVendasComissao.label"), args, MODAL); + + } + + public void onClick$btnPesquisa(Event ev) { + HibernateSearchObject puntoVentaBusqueda = + new HibernateSearchObject(PuntoVenta.class, pagingPuntoVenta.getPageSize()); + + puntoVentaBusqueda.addFilterILike("nombpuntoventa", "%" + txtNombrePuntoVenta.getValue() + "%"); + puntoVentaBusqueda.addFilterEqual("activo", Boolean.TRUE); + + puntoVentaBusqueda.addSortAsc("nombpuntoventa"); + + puntoVentaBusqueda.addFilterEqual("activo", Boolean.TRUE); + + plwPuntoVenta.init(puntoVentaBusqueda, puntoVentaList, pagingPuntoVenta); + + if (puntoVentaList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioVendasPercursoController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + ex.printStackTrace(); + } + } + } + + public void onClick$btnLimpar(Event ev) { + puntoVentaList.setData(new ArrayList()); + txtNombrePuntoVenta.setText(""); + } + + public void onDoubleClick$puntoVentaSelList(Event ev) { + PuntoVenta puntoVenta = (PuntoVenta) puntoVentaSelList.getSelected(); + puntoVentaSelList.removeItem(puntoVenta); + updateLsEstacion(); + } + + public void onDoubleClick$puntoVentaList(Event ev) { + PuntoVenta puntoVenta = (PuntoVenta) puntoVentaList.getSelected(); + puntoVentaSelList.addItemNovo(puntoVenta); + updateLsEstacion(); + } + + @SuppressWarnings("unchecked") + public void updateLsEstacion() { + lsEstacion = estacionService.buscarEstaciones(puntoVentaSelList.getListData()); + cmbEstacion.setSelectedIndex(-1); + cmbEstacion.setModel(new BindingListModelList(lsEstacion, true)); + } + + public List getLsEstacion() { + return lsEstacion; + } + +} \ No newline at end of file diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendasPercurso.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendasPercurso.java new file mode 100644 index 000000000..815751bf9 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioVendasPercurso.java @@ -0,0 +1,25 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios; + +import org.zkoss.util.resource.Labels; + +import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria; +import com.rjconsultores.ventaboletos.web.utilerias.menu.DefaultItemMenuSistema; + +public class ItemMenuRelatorioVendasPercurso extends DefaultItemMenuSistema { + + public ItemMenuRelatorioVendasPercurso() { + super("indexController.mniRelatorioVendasPercurso.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOVENDASPERCURSO"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioVendasPercurso.zul", + Labels.getLabel("relatorioVendasPercursoController.window.title"), getArgs(), desktop); + + } +} diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index bf3534ddb..8575cc089 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -6939,4 +6939,22 @@ auditoriaController.nombmaterno.label = Sobrenome Materno auditoriaController.perfil.label = Perfil auditoriaController.btnPesquisa.label = Pesquisa auditoriaController.empresa.label = Empresa -auditoriaController.puntoventa.label = Ponto de Venda(Agência) \ No newline at end of file +auditoriaController.puntoventa.label = Ponto de Venda(Agência) + +indexController.mniRelatorioVendasPercurso.label=Vendas no Percurso +relatorioVendasPercursoController.window.title=Relatório de Vendas no Percurso +relatorioVendasPercursoController.lbPuntoVenta.value=Punto de Venta +relatorioVendasPercursoController.btnPesquisa.label=Búsqueda +relatorioVendasPercursoController.btnLimpar.label=Limpiar +relatorioVendasPercursoController.lbEmpresa.value=Empresa +relatorioVendasPercursoController.lbNumero.value=Numero punto de venta +relatorioVendasPercursoController.dataInicial.value=Fecha Inicial +relatorioVendasPercursoController.dataFinal.value=Fecha Final +relatorioVendasPercursoController.estacion.label=Estación +relatorioVendasPercursoController.corridaId.label=Servicio + +indexController.mniRelatorioBaixasVendasInternet.label=Baixas Vendas Internet +relatorioBaixasVendasInternetControllerr.window.title=Relatório de Baixas Vendas Internet +relatorioBaixasVendasInternetController.lbFecInicio.value=Fecha Início +relatorioBaixasVendasInternetController.lbFecFinal.value=Fecha Final +relatorioBaixasVendasInternetController.lbPuntoVenta.value=Punto Venta \ No newline at end of file diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index db93ccd4e..79309d47f 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -7112,4 +7112,22 @@ auditoriaController.nombpaterno.label = Sobrenome Paterno auditoriaController.nombmaterno.label = Sobrenome Materno auditoriaController.btnPesquisa.label = Pesquisa auditoriaController.empresa.label = Empresa -auditoriaController.puntoventa.label = Ponto de Venda(Agência) \ No newline at end of file +auditoriaController.puntoventa.label = Ponto de Venda(Agência) + +indexController.mniRelatorioVendasPercurso.label=Vendas no Percurso +relatorioVendasPercursoController.window.title=Relatório de Vendas no Percurso +relatorioVendasPercursoController.lbPuntoVenta.value=Ponto de Venda +relatorioVendasPercursoController.btnPesquisa.label=Pesquisa +relatorioVendasPercursoController.btnLimpar.label=Limpar +relatorioVendasPercursoController.lbEmpresa.value=Empresa +relatorioVendasPercursoController.lbNumero.value=Número Ponto de Venda +relatorioVendasPercursoController.dataInicial.value=Data Inicial +relatorioVendasPercursoController.dataFinal.value=Data Final +relatorioVendasPercursoController.estacion.label=Estação +relatorioVendasPercursoController.corridaId.label=Serviço + +indexController.mniRelatorioBaixasVendasInternet.label=Baixas Vendas Internet +relatorioBaixasVendasInternetControllerr.window.title=Relatório de Baixas Vendas Internet +relatorioBaixasVendasInternetController.lbFecInicio.value=Data Início +relatorioBaixasVendasInternetController.lbFecFinal.value=Data Fim +relatorioBaixasVendasInternetController.lbPuntoVenta.value=Ponto de Venda \ No newline at end of file diff --git a/web/gui/relatorios/filtroRelatorioVendasPercurso.zul b/web/gui/relatorios/filtroRelatorioVendasPercurso.zul new file mode 100644 index 000000000..bad3d8a33 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioVendasPercurso.zul @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + +