diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java new file mode 100644 index 000000000..1d35f1e60 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java @@ -0,0 +1,90 @@ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.sql.Connection; +import java.util.EnumSet; +import java.util.Map; + +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; + +public class RelatorioLinhaOperacional extends Relatorio { + + public enum EnumEspecie { + BILHETE("BILHETE DE PASSAGEM RODOVIÁRIO"), EXCESSO_BAGAGEM("DEMOSTRATIVO EXCESSO DE BAGAGEM"); + public static final EnumSet all = EnumSet.of(BILHETE, EXCESSO_BAGAGEM); + private String descricao; + + private EnumEspecie(String descricao) { + this.descricao = descricao; + } + + @Override + public String toString() { + return descricao; + } + } + + public RelatorioLinhaOperacional(Map parametros, Connection conexao) { + super(parametros, conexao); + } + + @Override + protected void processaParametros() throws Exception { + Map parametros = this.getParametros(); + + EnumEspecie especie = (EnumEspecie) parametros.get("ESPECIE"); + String dataDe = (String) parametros.get("DATA_DE"); + String dataAte = (String) parametros.get("DATA_ATE"); + String linhasIds = (String) parametros.get("LINHAS"); + String empresaId = (String) parametros.get("EMPRESA_IDS"); + + String sql = getSql(especie, dataDe, dataAte, linhasIds, empresaId); + parametros.put("SQL", sql); + parametros.put("STR_ESPECIE", especie.toString()); + } + + private String getSql(EnumEspecie especie, String dataDe, String dataAte, String linhasIds, String empresaId) { + StringBuilder sql = new StringBuilder(); + + sql.append(" SELECT c.feccorrida data_corrida, "); + sql.append(" c.fechorsalida hora_saida, "); + sql.append(" r.descruta linha, "); + sql.append(" o.descparada origem, "); + sql.append(" d.descparada destino, "); + sql.append(" e.empresa_id empresaId, "); + sql.append(" e.nombempresa empresa, "); + sql.append(" Count(*) qtde_boletos "); + + switch (especie) { + case BILHETE: + sql.append(" FROM caja ca "); + sql.append(" INNER JOIN corrida c ON ( c.corrida_id = ca.corrida_id AND c.feccorrida = ca.feccorrida ) "); + sql.append(" INNER JOIN empresa e ON e.empresa_id = c.empresacorrida_id "); + sql.append(" INNER JOIN ruta r ON r.ruta_id = c.ruta_id "); + sql.append(" INNER JOIN parada o ON o.parada_id = ca.origen_id "); + sql.append(" INNER JOIN parada d ON d.parada_id = ca.destino_id "); + sql.append(" WHERE ca.fechorventa BETWEEN To_date('").append(dataDe).append("', 'dd/mm/yyyy') "); + sql.append(" AND To_date('").append(dataAte).append("', 'dd/mm/yyyy') "); + sql.append(" AND c.ruta_id IN (").append(linhasIds).append(") "); + sql.append(" AND ca.empresacorrida_id IN (").append(empresaId).append(") "); + break; + case EXCESSO_BAGAGEM: + sql.append(" FROM caja_diversos ca "); + sql.append(" INNER JOIN evento_extra ex ON ex.eventoextra_id = ca.eventoextra_id "); + sql.append(" INNER JOIN corrida c ON ( c.corrida_id = ex.corrida_id AND c.feccorrida = ex.feccorrida ) "); + sql.append(" INNER JOIN empresa e ON e.empresa_id = c.empresacorrida_id "); + sql.append(" INNER JOIN ruta r ON r.ruta_id = c.ruta_id "); + sql.append(" INNER JOIN parada o ON o.parada_id = c.origen_id "); + sql.append(" INNER JOIN parada d ON d.parada_id = c.destino_id "); + sql.append(" WHERE ca.fechorvta BETWEEN To_date('").append(dataDe).append("', 'dd/mm/yyyy') "); + sql.append(" AND To_date('").append(dataAte).append("', 'dd/mm/yyyy') "); + sql.append(" AND c.ruta_id IN (").append(linhasIds).append(") "); + sql.append(" AND ex.empresa_id IN (").append(empresaId).append(") "); + break; + } + + sql.append(" GROUP BY c.feccorrida, c.fechorsalida, r.descruta, o.descparada, d.descparada, e.empresa_id, e.nombempresa "); + sql.append(" ORDER BY c.feccorrida, e.nombempresa ASC "); + + return sql.toString(); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jasper new file mode 100644 index 000000000..94f50186a Binary files /dev/null and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jrxml new file mode 100644 index 000000000..1799504a7 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jrxml @@ -0,0 +1,218 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="93" splitType="Stretch"> + <staticText> + <reportElement uuid="68f4ea28-b08b-4655-ab65-5f181721909f" x="0" y="0" width="247" height="20"/> + <textElement> + <font size="14" isBold="true"/> + </textElement> + <text><![CDATA[LINHA OPERACIONAL]]></text> + </staticText> + <textField pattern="dd/MM/yyyy HH:mm"> + <reportElement uuid="d0203404-283e-4281-a85f-9fe7c3f0e121" x="403" y="0" width="152" height="20"/> + <textElement textAlignment="Right"> + <font isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression> + </textField> + <textField> + <reportElement uuid="7adb9127-4696-4a5a-9ebb-ab4430744550" x="0" y="31" width="247" height="20"/> + <textElement> + <font isBold="true"/> + </textElement> + <textFieldExpression><![CDATA["Período: " + $P{DATA_DE} + " a " + $P{DATA_ATE}]]></textFieldExpression> + </textField> + <staticText> + <reportElement uuid="4edc7c1b-38fc-4738-a3eb-a8002b23ae18" x="0" y="51" width="46" height="20"/> + <textElement> + <font isBold="true"/> + </textElement> + <text><![CDATA[Linha(s):]]></text> + </staticText> + <textField> + <reportElement uuid="69376e05-cb11-4073-8230-e2fdf8d12d1f" x="46" y="51" width="509" height="20" isPrintWhenDetailOverflows="true"/> + <textElement> + <font isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{LINHAS}]]></textFieldExpression> + </textField> + <staticText> + <reportElement uuid="bb6eb592-643e-4bce-8a2c-4b7f09848727" positionType="Float" x="0" y="71" width="46" height="20"/> + <textElement> + <font isBold="true"/> + </textElement> + <text><![CDATA[Espécie:]]></text> + </staticText> + <line> + <reportElement uuid="001cfcc7-c18f-4b8f-9bd1-01568512ca0c" positionType="Float" x="0" y="91" width="555" height="1"/> + </line> + <textField> + <reportElement uuid="d5217a3d-bf2e-4e6e-a235-b8149af41b56" x="46" y="71" width="509" height="20"/> + <textElement/> + <textFieldExpression><![CDATA[$P{STR_ESPECIE}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java new file mode 100644 index 000000000..0eb0984b5 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java @@ -0,0 +1,180 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.EnumSet; +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.zul.Combobox; +import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Paging; +import org.zkoss.zul.Textbox; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioLinhaOperacional; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioLinhaOperacional.EnumEspecie; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.EmpresaService; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject; +import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioLinhaOperacionalRuta; + +@Controller("relatorioLinhaOperacionalController") +@Scope("prototype") +public class RelatorioLinhaOperacionalController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + @Autowired + private DataSource dataSource; + @Autowired + private transient PagedListWrapper plwRuta; + @Autowired + private EmpresaService empresaService; + List lsEmpresa; + private Datebox datInicial; + private Datebox datFinal; + private Paging pagingRuta; + private MyListbox rutaList; + private Textbox txtPalavraPesquisa; + private Combobox cmbEmpresa; + private Combobox cmbEspecie; + private EnumSet lsEspecie; + + public List getLsEmpresa() { + return lsEmpresa; + } + + public void setLsEmpresa(List lsEmpresa) { + this.lsEmpresa = lsEmpresa; + } + + public EnumSet getLsEspecie() { + return lsEspecie; + } + + public void setLsEspecie(EnumSet lsEspecie) { + this.lsEspecie = lsEspecie; + } + + @Override + public void doAfterCompose(Component comp) throws Exception { + lsEmpresa = empresaService.obtenerTodos(); + lsEspecie = EnumEspecie.all; + super.doAfterCompose(comp); + + rutaList.setItemRenderer(new RenderRelatorioLinhaOperacionalRuta()); + } + + private void limparPesquisa() { + rutaList.setData(new ArrayList()); + } + + private void executarPesquisa() { + HibernateSearchObject rutaBusqueda = + new HibernateSearchObject(Ruta.class, pagingRuta.getPageSize()); + + rutaBusqueda.addFilterLike("descruta", "%" + txtPalavraPesquisa.getValue() + "%"); + + rutaBusqueda.addSortAsc("descruta"); + + rutaBusqueda.addFilterEqual("activo", Boolean.TRUE); + + plwRuta.init(rutaBusqueda, rutaList, pagingRuta); + + if (rutaList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioLinhaOperacionalController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + } + } + } + + public void onClick$btnLimpar(Event ev) { + limparPesquisa(); + } + + public void onClick$btnPesquisa(Event ev) { + executarPesquisa(); + } + + public void onClick$btnExecutarRelatorio(Event ev) throws InterruptedException, SQLException { + List lsRutasSelecionadas = new ArrayList(Arrays.asList(rutaList.getSelectedsItens().toArray(new Ruta[rutaList.getSelectedsItens().size()]))); + + if (!lsRutasSelecionadas.isEmpty()) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + Date dataDe = datInicial.getValue(); + Date dataAte = datFinal.getValue(); + + if (dataAte.after(dataDe)) { + Map parametros = new HashMap(); + parametros.put("DATA_DE", sdf.format(dataDe)); + parametros.put("DATA_ATE", sdf.format(dataAte)); + + String linhasIds = "0"; + for (int i = 0; i < lsRutasSelecionadas.size(); i++) { + Ruta ruta = lsRutasSelecionadas.get(i); + linhasIds = linhasIds + "," + ruta.getRutaId(); + } + parametros.put("LINHAS", linhasIds); + + Comboitem cbiEmpresa = cmbEmpresa.getSelectedItem(); + String empresaId; + if (cbiEmpresa != null) { + Empresa empresa = (Empresa) cbiEmpresa.getValue(); + empresaId = empresa.getEmpresaId().toString(); + } else { + empresaId = "0"; + for (int i = 0; i < lsEmpresa.size(); i++) { + Empresa empresa = lsEmpresa.get(i); + empresaId = empresaId + "," + empresa.getEmpresaId(); + } + } + parametros.put("EMPRESA_IDS", empresaId); + + Comboitem cbiEspecie = cmbEspecie.getSelectedItem(); + if (cbiEspecie != null) { + EnumEspecie especie = (EnumEspecie) cbiEspecie.getValue(); + parametros.put("ESPECIE", especie); + } else { + parametros.put("ESPECIE", EnumEspecie.BILHETE); + } + + Relatorio relatorio = new RelatorioLinhaOperacional(parametros, dataSource.getConnection()); + + Map args = new HashMap(); + args.put("relatorio", relatorio); + + openWindow("/component/reportView.zul", + Labels.getLabel("relatorioLinhaOperacionalController.window.title"), args, MODAL); + } else { + Messagebox.show(Labels.getLabel("relatorioLinhaOperacionalController.MSG.datainvalida"), + Labels.getLabel("relatorioLinhaOperacionalController.window.title"), + Messagebox.OK, Messagebox.EXCLAMATION); + } + } else { + Messagebox.show(Labels.getLabel("relatorioLinhaOperacionalController.MSG.selecionarlinha"), + Labels.getLabel("relatorioLinhaOperacionalController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioLinhaOperacional.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioLinhaOperacional.java new file mode 100644 index 000000000..d055e1da7 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioLinhaOperacional.java @@ -0,0 +1,24 @@ +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 ItemMenuRelatorioLinhaOperacional extends DefaultItemMenuSistema { + + public ItemMenuRelatorioLinhaOperacional() { + super("indexController.mniRelatorioLinhaOperacional.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOLINHAOPERACIONAL"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioLinhaOperacional.zul", + Labels.getLabel("relatorioLinhaOperacionalController.window.title"), null, desktop); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRuta.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRuta.java new file mode 100644 index 000000000..c5f7efe00 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioLinhaOperacionalRuta.java @@ -0,0 +1,34 @@ +package com.rjconsultores.ventaboletos.web.utilerias.render; + +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; +import org.zkoss.zul.ListitemRenderer; + +import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.Ruta; + +public class RenderRelatorioLinhaOperacionalRuta implements ListitemRenderer { + + public void render(Listitem lstm, Object o) throws Exception { + Ruta ruta = (Ruta) o; + + Listcell lc = new Listcell(ruta.getRutaId().toString()); + lc.setParent(lstm); + + lc = new Listcell(ruta.getPrefixo()); + lc.setParent(lstm); + + lc = new Listcell(ruta.getDescruta()); + lc.setParent(lstm); + + OrgaoConcedente orgaoConcedente = ruta.getOrgaoConcedente(); + if (orgaoConcedente != null) { + lc = new Listcell(orgaoConcedente.getDescOrgao()); + } else { + lc = new Listcell("-"); + } + lc.setParent(lstm); + + lstm.setAttribute("data", ruta); + } +} diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 94270b1b6..49066403d 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -7,7 +7,7 @@ # . . = XXX #Versao do VentaBoleto: -versao = ADM_20130710_1RC173 +versao = ADM_20130712_1RC174 # MSG Defaut: MSG.CONSTRAINT.PORCENTAGEM = Os valores devem estar entre 0 e 100 @@ -213,6 +213,7 @@ indexController.mniTarjetaCredito.label = Cartão de Crédito indexController.mniRelatorios.label = Relatórios indexController.mniRelatorioAproveitamento.label = Relatório de Aproveitamento indexController.mniRelatorioReceitaDiariaAgencia.label = Relatório de Receita Diária por Agência +indexController.mniRelatorioLinhaOperacional.label = Relatório de Linha Operacional #PARTE REALIZADA POR MANUEL indexController.mnCortesias.label = Cortesias Para Funcionários @@ -4274,4 +4275,20 @@ importarClientesController.fileupload.label = Selecionar Arquivo... importarClientesController.qtde.label = Total de clientes a importar importarClientesController.codigofidelidade.label = Codigo Fidelidade importarClientesController.nome.label = Nome -importarClientesController.documento.label = Documento \ No newline at end of file +importarClientesController.documento.label = Documento + +# Relatorio de Linha Operacional +relatorioLinhaOperacionalController.window.title = Linha Operacional +relatorioLinhaOperacionalController.lbRuta.value = Linha +relatorioLinhaOperacionalController.btnPesquisa.label = Pesquisar +relatorioLinhaOperacionalController.btnLimpar.label = Limpar +relatorioLinhaOperacionalController.prefixo.label = Prefixo +relatorioLinhaOperacionalController.orgao.label = Orgão Concedente +relatorioLinhaOperacionalController.lbAgrupar.value = Agrupar por +relatorioLinhaOperacionalController.chkAgruparDia.value = Dia +relatorioLinhaOperacionalController.chkAgruparMes.value = Mes +relatorioLinhaOperacionalController.chkAgruparAno.value = Ano +relatorioLinhaOperacionalController.MSG.selecionarlinha = Selecione alguma linha para gerar o relatório. +relatorioLinhaOperacionalController.MSG.datainvalida = Data de inicio não pode ser maior que final. +relatorioLinhaOperacionalController.lblEmpresa.value = Empresa +relatorioLinhaOperacionalController.lblEspecie.value = Espécie \ No newline at end of file diff --git a/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul b/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul new file mode 100644 index 000000000..ec1ae4603 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +