diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java index 1d35f1e60..9a6d6ab5f 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioLinhaOperacional.java @@ -33,57 +33,106 @@ public class RelatorioLinhaOperacional extends Relatorio { EnumEspecie especie = (EnumEspecie) parametros.get("ESPECIE"); String dataDe = (String) parametros.get("DATA_DE"); + dataDe = dataDe + " 00:00:00"; String dataAte = (String) parametros.get("DATA_ATE"); + dataAte = dataAte + " 23:59:59"; + String linhasIds = (String) parametros.get("LINHAS"); String empresaId = (String) parametros.get("EMPRESA_IDS"); - String sql = getSql(especie, dataDe, dataAte, linhasIds, empresaId); + Boolean agruparPorDia = (Boolean) parametros.get("agruparPorDia"); + Boolean agruparPorMes = (Boolean) parametros.get("agruparPorMes"); + Boolean agruparPorAno = (Boolean) parametros.get("agruparPorAno"); + + Boolean desconsiderarBilhetesDevolvidos = (Boolean) parametros.get("desconsiderarBilhetesDevolvidos"); + + String sql = getSql(especie, dataDe, dataAte, linhasIds, empresaId, agruparPorDia, agruparPorMes, agruparPorAno, desconsiderarBilhetesDevolvidos); parametros.put("SQL", sql); parametros.put("STR_ESPECIE", especie.toString()); } - private String getSql(EnumEspecie especie, String dataDe, String dataAte, String linhasIds, String empresaId) { + private String getSql(EnumEspecie especie, String dataDe, String dataAte, String linhasIds, + String empresaId, Boolean agruparPorDia, Boolean agruparPorMes, Boolean agruparPorAno, + Boolean desconsiderarBilhetesDevolvidos) { 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 "); + sql.append(" SELECT "); + sql.append(" ca.fechorventa data_venda, "); + sql.append(" c.corrida_id corrida_id, "); + sql.append(" c.feccorrida data_corrida, "); + sql.append(" r.NUMRUTA codigo, "); + sql.append(" r.PREFIXO prefixo, "); + 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(") "); + sql.append(" FROM "); + sql.append(" ( SELECT "); + sql.append(" corrida_id, "); + sql.append(" origen_id, "); + sql.append(" destino_id, "); + sql.append(" feccorrida, "); + sql.append(" empresacorrida_id, "); + sql.append(" MOTIVOCANCELACION_ID, "); + if (agruparPorDia) { + sql.append(" TO_CHAR(fechorventa, 'dd/MM/yyyy') fechorventa "); + } else if (agruparPorMes) { + sql.append(" TO_CHAR(fechorventa, 'MM/yyyy') fechorventa "); + } else if (agruparPorAno) { + sql.append(" TO_CHAR(fechorventa, 'yyyy') fechorventa "); + } + sql.append(" FROM caja "); + sql.append(" WHERE fechorventa BETWEEN To_date('").append(dataDe).append("', 'dd/mm/yyyy HH24:mi:ss') "); + sql.append(" AND To_date('").append(dataAte).append("', 'dd/mm/yyyy HH24:mi:ss') "); + sql.append(" AND empresacorrida_id IN (").append(empresaId).append(") "); + sql.append(" )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 "); break; case EXCESSO_BAGAGEM: - sql.append(" FROM caja_diversos ca "); + sql.append(" FROM "); + sql.append(" ( SELECT "); + sql.append(" eventoextra_id, "); + sql.append(" MOTIVOCANCELACION_ID, "); + if (agruparPorDia) { + sql.append(" TO_CHAR(FECHORVTA, 'dd/MM/yyyy') fechorventa "); + } else if (agruparPorMes) { + sql.append(" TO_CHAR(FECHORVTA, 'MM/yyyy') fechorventa "); + } else if (agruparPorAno) { + sql.append(" TO_CHAR(FECHORVTA, 'yyyy') fechorventa "); + } + sql.append(" FROM caja_diversos "); + sql.append(" WHERE FECHORVTA BETWEEN To_date('").append(dataDe).append("', 'dd/mm/yyyy HH24:mi:ss') "); + sql.append(" AND To_date('").append(dataAte).append("', 'dd/mm/yyyy HH24:mi:ss') "); + sql.append(" )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 "); + sql.append(" WHERE 1 = 1 "); + if (!linhasIds.equals("0")) { + sql.append(" AND c.ruta_id IN (").append(linhasIds).append(") "); + } + + if (desconsiderarBilhetesDevolvidos) { + sql.append(" AND ca.MOTIVOCANCELACION_ID IS NULL "); + } + sql.append("GROUP BY ca.fechorventa, c.corrida_id, c.feccorrida, r.NUMRUTA, r.PREFIXO, c.fechorsalida, r.descruta, o.descparada, d.descparada, e.empresa_id, e.nombempresa "); + sql.append("ORDER BY ca.fechorventa, e.nombempresa ASC "); return sql.toString(); } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java b/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java index 6107b91cb..5da96b083 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/render/RenderRelatorioJasper.java @@ -69,8 +69,7 @@ public class RenderRelatorioJasper { String diretorio = "/com/rjconsultores/ventaboletos/relatorios/templates/" + this.relatorio.getNome() + ".jasper"; InputStream iStemplate = this.getClass().getResourceAsStream(diretorio); - if (iStemplate == null) - { + if (iStemplate == null) { throw new Exception("Não foi possivel localizar o template do relátorio no diretorio a seguir: " + diretorio); } @@ -83,10 +82,10 @@ public class RenderRelatorioJasper { * * @see com.rjconsultores.ventaboletos.relatorios.utilitarios.IRenderRelatorio#render() */ - + public byte[] render(SaidaRelatorio saida) throws Exception { this.preRender(); - + byte[] conteudo = null; if (this.jasperPrint == null) { @@ -115,17 +114,17 @@ public class RenderRelatorioJasper { protected byte[] renderXls() throws Exception { - JExcelApiExporter exporterXLS = new JExcelApiExporter(); + JExcelApiExporter exporterXLS = new JExcelApiExporter(); ByteArrayOutputStream output = new ByteArrayOutputStream(); exporterXLS.setParameter(JExcelApiExporterParameter.JASPER_PRINT, this.jasperPrint); exporterXLS.setParameter(JExcelApiExporterParameter.OUTPUT_STREAM, output); - exporterXLS.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE); + exporterXLS.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.FALSE); exporterXLS.setParameter(JExcelApiExporterParameter.IS_DETECT_CELL_TYPE, Boolean.TRUE); exporterXLS.setParameter(JExcelApiExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporterXLS.setParameter(JExcelApiExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); - - //collapseRowSpan - //JRXlsExporterParameter. + + // collapseRowSpan + // JRXlsExporterParameter. exporterXLS.exportReport(); return output.toByteArray(); diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jasper index 94f50186a..e8bc61233 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jasper 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 index 1799504a7..04ab7d458 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioLinhaOperacional.jrxml @@ -1,8 +1,8 @@ - - - + + + @@ -10,6 +10,7 @@ + @@ -21,7 +22,14 @@ - + + + + + + + + @@ -29,80 +37,123 @@ + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + @@ -139,13 +190,6 @@ - - - - - - - @@ -161,6 +205,11 @@ + + + + + @@ -178,32 +227,84 @@ - + - - + + + + - - + + + + - - - - - - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 index 0eb0984b5..b74eabb5c 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioLinhaOperacionalController.java @@ -19,10 +19,13 @@ 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.Bandbox; +import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; import org.zkoss.zul.Datebox; import org.zkoss.zul.Paging; +import org.zkoss.zul.Radio; import org.zkoss.zul.Textbox; import com.rjconsultores.ventaboletos.entidad.Empresa; @@ -57,6 +60,11 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose private Combobox cmbEmpresa; private Combobox cmbEspecie; private EnumSet lsEspecie; + private Bandbox bbPesquisaPuntoVenta; + private Radio rdAgruparPorDia; + private Radio rdAgruparPorMes; + private Radio rdAgruparPorAno; + private Checkbox chkBilhetesDevolvidos; public List getLsEmpresa() { return lsEmpresa; @@ -85,6 +93,8 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose private void limparPesquisa() { rutaList.setData(new ArrayList()); + + bbPesquisaPuntoVenta.setText(getDescRutasSelecionadas()); } private void executarPesquisa() { @@ -117,64 +127,80 @@ public class RelatorioLinhaOperacionalController extends MyGenericForwardCompose executarPesquisa(); } + private String getDescRutasSelecionadas() { + List lsRutasSelecionadas = new ArrayList(Arrays.asList(rutaList.getSelectedsItens().toArray(new Ruta[rutaList.getSelectedsItens().size()]))); + StringBuilder selecionadas = new StringBuilder(""); + if (!lsRutasSelecionadas.isEmpty()) { + for (Ruta ruta : lsRutasSelecionadas) { + selecionadas.append(ruta.getDescruta()).append(", "); + } + } + + return selecionadas.toString(); + } + + public void onClick$bbPesquisaPuntoVenta(Event ev) { + bbPesquisaPuntoVenta.setText(getDescRutasSelecionadas()); + } + 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(); + 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)); + 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); + String linhasIds = "0"; + for (int i = 0; i < lsRutasSelecionadas.size(); i++) { + Ruta ruta = lsRutasSelecionadas.get(i); + linhasIds = linhasIds + "," + ruta.getRutaId(); } + parametros.put("LINHAS", linhasIds); + parametros.put("DESC_LINHAS_SELECIONADAS", getDescRutasSelecionadas()); + + 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); + } + + Boolean agruparPorDia = rdAgruparPorDia.isSelected(); + Boolean agruparPorMes = rdAgruparPorMes.isSelected(); + Boolean agruparPorAno = rdAgruparPorAno.isSelected(); + + parametros.put("agruparPorDia", agruparPorDia); + parametros.put("agruparPorMes", agruparPorMes); + parametros.put("agruparPorAno", agruparPorAno); + + Boolean desconsiderarBilhetesDevolvidos = chkBilhetesDevolvidos.isChecked(); + parametros.put("desconsiderarBilhetesDevolvidos", desconsiderarBilhetesDevolvidos); + + 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); } } diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 6a4ebfc79..9537606b5 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_20130726_1RC182 +versao = ADM_20130726_1RC183 # MSG Defaut: MSG.CONSTRAINT.PORCENTAGEM = Os valores devem estar entre 0 e 100 @@ -4349,6 +4349,11 @@ 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.lblBilhetesDevolvidos.value = Desconsiderar bilhetes devolvidos +relatorioLinhaOperacionalController.lblAgrupar.value = Agrupar por +relatorioLinhaOperacionalController.rdAgruparPorDia.value = Dia +relatorioLinhaOperacionalController.rdAgruparPorMes.value = Mês +relatorioLinhaOperacionalController.rdAgruparPorAno.value = Ano relatorioLinhaOperacionalController.lblEspecie.value = Espécie #Relatorio Pasajeiros Viajar diff --git a/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul b/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul index ec1ae4603..87d45aa78 100644 --- a/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul +++ b/web/gui/relatorios/filtroRelatorioLinhaOperacional.zul @@ -48,7 +48,7 @@ value="${c:l('relatorioLinhaOperacionalController.lblEmpresa.value')}" /> @@ -61,6 +61,20 @@ model="@{winFiltroRelatorioLinhaOperacional$composer.lsEspecie}" /> + + + + + + +