From 12d70156344950a18a3165998ebc98248c484ee3 Mon Sep 17 00:00:00 2001 From: emerson Date: Tue, 4 Sep 2018 12:08:00 +0000 Subject: [PATCH] fixes bug#0010749 dev: lucas qua: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implementação da exportação SGTI. git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Web/trunk/ventaboletos@85050 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../utilitarios/PagedListGenerico.java | 8 + .../relatorios/utilitarios/ValidarDatas.java | 26 +++ .../RelatorioHistoricoComprasController.java | 22 +- .../sgti/ExecutarExportacaoSGTI.java | 123 +++++++++++ .../sgti/GerarXMLExportacaoSGTI.java | 204 ++++++++++++++++++ .../RelatorioExportacaoSGTIController.java | 136 ++++++++++++ .../web/utilerias/CompactarParaZip.java | 47 ++++ .../menu/item/relatorio/sgti/SubMenuSGTI.java | 26 +++ .../utilerias/menu/menu_original.properties | 1 + .../utilerias/render/RenderPersonalizado.java | 14 +- .../render/RenderRutaPersonalizado.java | 25 +++ web/WEB-INF/i3-label_es_MX.label | 18 ++ web/WEB-INF/i3-label_pt_BR.label | 18 ++ .../filtroRelatorioExportacaoSGTI.zul | 120 +++++++++++ 14 files changed, 769 insertions(+), 19 deletions(-) create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/ExecutarExportacaoSGTI.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/GerarXMLExportacaoSGTI.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/RelatorioExportacaoSGTIController.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/CompactarParaZip.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorio/sgti/SubMenuSGTI.java create mode 100644 src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRutaPersonalizado.java create mode 100644 web/gui/relatorios/filtroRelatorioExportacaoSGTI.zul diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/PagedListGenerico.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/PagedListGenerico.java index 4ccc6c57d..aee47643c 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/PagedListGenerico.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/PagedListGenerico.java @@ -1,6 +1,7 @@ package com.rjconsultores.ventaboletos.relatorios.utilitarios; import java.util.ArrayList; +import java.util.Arrays; import org.zkoss.zul.Paging; @@ -56,6 +57,13 @@ public abstract class PagedListGenerico { } } + public static void validarInclusaoLista(Object objeto, MyListbox listBox) { + if (objeto != null && + !Arrays.asList(listBox.getData()).contains(objeto)) { + listBox.addItemNovo(objeto); + } + } + public Paging getPaging() { return paging; } diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/ValidarDatas.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/ValidarDatas.java index 6f6f361a5..63d05c484 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/ValidarDatas.java +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/ValidarDatas.java @@ -1,5 +1,7 @@ package com.rjconsultores.ventaboletos.relatorios.utilitarios; +import java.util.Calendar; + import org.zkoss.zul.Datebox; import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils; @@ -8,10 +10,25 @@ public class ValidarDatas { private Datebox dataInicial; private Datebox dataFinal; + private Calendar calendarDataInicial; + private Calendar calendarDataFinal; public ValidarDatas(Datebox dataInicial, Datebox dataFinal) { this.dataInicial = dataInicial; this.dataFinal = dataFinal; + inicializaCalendar(dataInicial, dataFinal); + } + + private void inicializaCalendar(Datebox dataInicial, Datebox dataFinal) { + if (dataInicial.getValue() != null) { + calendarDataInicial = Calendar.getInstance(); + calendarDataInicial.setTime(dataInicial.getValue()); + } + + if (dataFinal.getValue() != null) { + calendarDataFinal = Calendar.getInstance(); + calendarDataFinal.setTime(dataFinal.getValue()); + } } public boolean isPeriodoNaoInformado() { @@ -36,6 +53,15 @@ public class ValidarDatas { return dataInicial.getValue().after(dataFinal.getValue()); } + public boolean isMesmoMes() { + return isMesmoAno() + && calendarDataInicial.get(Calendar.MONTH) == calendarDataFinal.get(Calendar.MONTH); + } + + public boolean isMesmoAno() { + return calendarDataInicial.get(Calendar.YEAR) == calendarDataFinal.get(Calendar.YEAR); + } + public boolean validarPeriodoNaoInformado(String labelMensagem, String tituloMenssagem) { if (isPeriodoNaoInformado()) { MensagensUtils.showMessageInformation(labelMensagem, tituloMenssagem); diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioHistoricoComprasController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioHistoricoComprasController.java index 5ffe1ea96..fba86b5ec 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioHistoricoComprasController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioHistoricoComprasController.java @@ -32,9 +32,9 @@ import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox; import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper; import com.rjconsultores.ventaboletos.web.utilerias.render.RenderPersonalizado; -import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioLinhaHorario; import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioVendasBilheteiro; import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioVendasBilheteiroSelecionados; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRutaPersonalizado; @Controller("relatorioHistoricoComprasController") @Scope("prototype") @@ -88,12 +88,13 @@ public class RelatorioHistoricoComprasController extends MyGenericForwardCompose puntoVentaList.setItemRenderer(new RenderRelatorioVendasBilheteiro()); puntoVentaSelList.setItemRenderer(new RenderRelatorioVendasBilheteiroSelecionados()); - linhaList.setItemRenderer(new RenderRelatorioLinhaHorario()); - linhaSelList.setItemRenderer(new RenderRelatorioLinhaHorario()); + List colunasLinhaRender = Arrays.asList("numRuta", "prefixo", "descruta"); + linhaList.setItemRenderer(new RenderRutaPersonalizado(colunasLinhaRender)); + linhaSelList.setItemRenderer(new RenderRutaPersonalizado(colunasLinhaRender).comBotaoExcluir()); List colunasClienteRender = Arrays.asList("numIdentificaUno", "nombcliente"); cpfList.setItemRenderer(new RenderPersonalizado(colunasClienteRender)); - cpfSelList.setItemRenderer(new RenderPersonalizado(colunasClienteRender).comBotaoExcluir(true)); + cpfSelList.setItemRenderer(new RenderPersonalizado(colunasClienteRender).comBotaoExcluir()); } public void onClick$btnPesquisaPuntoVenta(Event ev) throws Exception { @@ -112,7 +113,7 @@ public class RelatorioHistoricoComprasController extends MyGenericForwardCompose } public void onDoubleClick$puntoVentaList(Event ev) { - validarInclusaoLista((PuntoVenta) puntoVentaList.getSelected(), puntoVentaSelList); + PagedListGenerico.validarInclusaoLista((PuntoVenta) puntoVentaList.getSelected(), puntoVentaSelList); } public void onClick$btnPesquisaLinha(Event ev) { @@ -129,7 +130,7 @@ public class RelatorioHistoricoComprasController extends MyGenericForwardCompose } public void onDoubleClick$linhaList(Event ev) { - validarInclusaoLista((Ruta) linhaList.getSelected(), linhaSelList); + PagedListGenerico.validarInclusaoLista((Ruta) linhaList.getSelected(), linhaSelList); } public void onClick$btnPesquisaCpf(Event ev) { @@ -147,7 +148,7 @@ public class RelatorioHistoricoComprasController extends MyGenericForwardCompose } public void onDoubleClick$cpfList(Event ev) { - validarInclusaoLista((Cliente) cpfList.getSelected(), cpfSelList); + PagedListGenerico.validarInclusaoLista((Cliente) cpfList.getSelected(), cpfSelList); } public void onClick$btnExecutarRelatorio(Event ev) throws Exception { @@ -198,13 +199,6 @@ public class RelatorioHistoricoComprasController extends MyGenericForwardCompose } } - private void validarInclusaoLista(Object objeto, MyListbox listBox) { - if (objeto != null && - !Arrays.asList(listBox.getData()).contains(objeto)) { - listBox.addItemNovo(objeto); - } - } - private boolean isDatasValidas() { ValidarDatas validarDtVenda = new ValidarDatas(dtVendaInicial, dtVendaFinal); ValidarDatas validarDtEmbarque = new ValidarDatas(dtEmbarqueInicial, dtEmbarqueFinal); diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/ExecutarExportacaoSGTI.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/ExecutarExportacaoSGTI.java new file mode 100644 index 000000000..a42b8db73 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/ExecutarExportacaoSGTI.java @@ -0,0 +1,123 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.sgti; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Timestamp; + +import javax.activation.MimetypesFileTypeMap; + +import org.zkoss.zul.Filedownload; + +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.EspecializaLista; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +public class ExecutarExportacaoSGTI { + + private RelatorioExportacaoSGTIController controller; + private Connection connection; + + public ExecutarExportacaoSGTI(RelatorioExportacaoSGTIController controller, Connection connection) { + this.controller = controller; + this.connection = connection; + } + + public void executa() throws IOException { + GerarXMLExportacaoSGTI geradorXML = new GerarXMLExportacaoSGTI(controller, this); + File arquivoXml = geradorXML.gerar(); + downloadArquivo(arquivoXml); + } + + private void downloadArquivo(File file) throws IOException { + if (file.exists()) { + FileInputStream inputStream = new FileInputStream(file); + Filedownload.save(inputStream, new MimetypesFileTypeMap().getContentType(file), "Exportacao_SGTI.xml"); + } + } + + protected ResultSet getDadosTrecho() throws SQLException { + return obtemInstrucaoSqlParametrizada(getQueryTrechosPorLinha()).executeQuery(); + } + + protected ResultSet getDadosReceita() throws SQLException { + return obtemInstrucaoSqlParametrizada(getQueryReceitasPorLinha()).executeQuery(); + } + + protected ResultSet getDadosViagemExtra() throws SQLException { + return obtemInstrucaoSqlParametrizada(getQueryViagensExtrasPorLinha()).executeQuery(); + } + + private NamedParameterStatement obtemInstrucaoSqlParametrizada(String instrucaoSQL) throws SQLException { + NamedParameterStatement stmt = new NamedParameterStatement(connection, instrucaoSQL, ResultSet.TYPE_SCROLL_INSENSITIVE); + stmt.setTimestamp("data_inicio", new Timestamp(DateUtil.inicioFecha(controller.getDataInicial().getValue()).getTime())); + stmt.setTimestamp("data_fim", new Timestamp(DateUtil.inicioFecha(controller.getDataFinal().getValue()).getTime())); + return stmt; + } + + private String getQueryTrechosPorLinha() { + StringBuilder query = new StringBuilder(); + query.append("select sum(coalesce(bo.qtde, 0)) as qtde, "); + query.append("r.indsentidoida, "); + query.append("ct.origen_id, ct.destino_id, "); + query.append("r.ruta_id, ct.numsecuencia "); + query.append("from corrida_tramo ct "); + query.append("inner join corrida c on ct.corrida_id = c.corrida_id "); + query.append(" and ct.feccorrida = c.feccorrida "); + query.append("inner join ruta_combinacion rc on ct.tramo_id = rc.tramo_id "); + query.append("inner join ruta r on rc.ruta_id = r.ruta_id "); + query.append("left join ( "); + query.append(" select count(*) qtde, corrida_id, "); + query.append(" feccorrida, origen_id, ruta_id "); + query.append(" from boleto b "); + query.append(" where b.indstatusboleto = 'V' "); + query.append(" and b.motivocancelacion_id is null "); + query.append(" group by corrida_id, feccorrida, "); + query.append(" origen_id, ruta_id) bo on ct.corrida_id = bo.corrida_id "); + query.append(" and ct.feccorrida = bo.feccorrida "); + query.append(" and ct.origen_id = bo.origen_id "); + query.append(" and r.ruta_id = bo.ruta_id "); + query.append("where r.ruta_id in("+getIdsRuta()+") "); + query.append("and ct.feccorrida between :data_inicio and :data_fim "); + query.append("group by r.indsentidoida, "); + query.append("ct.origen_id, ct.destino_id, "); + query.append("r.ruta_id, ct.numsecuencia "); + query.append("order by r.ruta_id, ct.numsecuencia "); + return query.toString(); + } + + private String getQueryReceitasPorLinha() { + StringBuilder query = new StringBuilder(); + query.append("select sum(b.preciopagado) receita, b.ruta_id "); + query.append("from boleto b "); + query.append("where b.indstatusboleto = 'V' "); + query.append("and b.motivocancelacion_id is null "); + query.append("and b.ruta_id in("+getIdsRuta()+") "); + query.append("and b.feccorrida between :data_inicio and :data_fim "); + query.append("group by b.ruta_id "); + return query.toString(); + } + + private String getQueryViagensExtrasPorLinha() { + StringBuilder query = new StringBuilder(); + query.append("select r.ruta_id, r.indsentidoida, "); + query.append("extract(day from c.fechorsalida) dia, "); + query.append("to_char(c.fechorsalida, 'hh24:mi') horario "); + query.append("from corrida c "); + query.append("inner join ruta r on c.ruta_id = r.ruta_id "); + query.append("where c.feccorrida between :data_inicio and :data_fim "); + query.append("and c.tiposervicio_id = 2 "); + query.append("and r.ruta_id in("+getIdsRuta()+") "); + return query.toString(); + } + + private String getIdsRuta() { + EspecializaLista especializaLista = new EspecializaLista(Ruta.class, controller.getLinhaSelList(), "getRutaId"); + return especializaLista.obtemIds(); + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/GerarXMLExportacaoSGTI.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/GerarXMLExportacaoSGTI.java new file mode 100644 index 000000000..77cd1fe42 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/GerarXMLExportacaoSGTI.java @@ -0,0 +1,204 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.sgti; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.Ruta; + +public class GerarXMLExportacaoSGTI { + + private static final String SENTIDO_IDA_CORRIDA = "1"; + + private static Logger log = Logger.getLogger(GerarXMLExportacaoSGTI.class); + private RelatorioExportacaoSGTIController controller; + private ExecutarExportacaoSGTI exportador; + private ResultSet dadosTrecho; + private ResultSet dadosReceita; + private ResultSet dadosViagemExtra; + + public GerarXMLExportacaoSGTI(RelatorioExportacaoSGTIController controller, + ExecutarExportacaoSGTI exportador) { + this.controller = controller; + this.exportador = exportador; + } + + public File gerar() throws IOException { + File fileXML = File.createTempFile("Exportacao_SGTI", ".xml"); + try { + Document doc = inicializaDOM(); + + Map map = new HashMap(); + + inicializaDadosExportacao(); + + Element tagEntrega = gerarTag(doc, "Entrega", getAtributosEntrega(map)); + for (Ruta ruta : getLinhasSelecionadas()) { + Element tagQdmp = gerarTag(doc, "Qdmp", getAtributosLinha(map, ruta)); + Element tagPeriodo = gerarTag(doc, "Periodo", getAtributosPeriodo(map, ruta)); + tagQdmp.appendChild(tagPeriodo); + gerarTagsPeriodo(doc, map, tagPeriodo, ruta); + tagEntrega.appendChild(tagQdmp); + } + + doc.appendChild(tagEntrega); + + transformaDOMToXML(doc, fileXML); + + } catch (Exception e) { + log.error("Ocorreu um erro ao gerar o XML. "+e.getMessage()); + } + return fileXML; + } + + private void inicializaDadosExportacao() { + try { + dadosTrecho = exportador.getDadosTrecho(); + } catch (SQLException e) { + log.error("Ocorreu um erro ao consultar os trechos. "+e.getMessage()); + } + + try { + dadosReceita = exportador.getDadosReceita(); + } catch (SQLException e) { + log.error("Ocorreu um erro ao obter os dados da receita. "+e.getMessage()); + } + + try { + dadosViagemExtra = exportador.getDadosViagemExtra(); + } catch (SQLException e) { + log.error("Ocorreu um erro ao obter os dados da viagem extra. "+e.getMessage()); + } + } + + private void gerarTagsPeriodo(Document doc, Map map, Element tagPeriodo, Ruta ruta) throws SQLException { + dadosTrecho.beforeFirst(); + while (dadosTrecho.next()) { + if (ruta.getRutaId() == dadosTrecho.getInt("ruta_id")) { + tagPeriodo.appendChild(gerarTag(doc, "Trecho", getAtributosTrecho(map, dadosTrecho))); + } + } + //Verificar o que é uma paralisação + //tagPeriodo.appendChild(gerarTag(doc, "Paralisacao", getAtributosParalisacaoOuViagemExtra(map))); + dadosViagemExtra.beforeFirst(); + while (dadosViagemExtra.next()) { + if (ruta.getRutaId() == dadosViagemExtra.getInt("ruta_id")) { + tagPeriodo.appendChild(gerarTag(doc, "ViagemExtra", getAtributosParalisacaoOuViagemExtra(map, dadosViagemExtra))); + } + } + } + + private Document inicializaDOM() throws ParserConfigurationException { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = dbf.newDocumentBuilder(); + return docBuilder.newDocument(); + } + + private void transformaDOMToXML(Document doc, File fileXML) throws FileNotFoundException, TransformerFactoryConfigurationError, TransformerConfigurationException, TransformerException { + DOMSource source = new DOMSource(doc); + StreamResult result = new StreamResult(new FileOutputStream(fileXML)); + + TransformerFactory transFactory = TransformerFactory.newInstance(); + Transformer transformer = transFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.transform(source, result); + } + + private Element gerarTag(Document doc, String tagName, Map atributos) { + Element tag = doc.createElement(tagName); + for (Entry atributo : atributos.entrySet()) { + tag.setAttribute(atributo.getKey(), atributo.getValue()); + } + return tag; + } + + private Map getAtributosEntrega(Map map) { + map.clear(); + map.put("codigoDelegatario", ((Empresa)controller.getCbEmpresa().getSelectedItem().getValue()).getEmpresaId().toString()); + map.put("ano", String.valueOf(getValueCalendar(Calendar.YEAR, controller.getDataInicial().getValue()))); + map.put("mes", String.valueOf(getValueCalendar(Calendar.MONTH, controller.getDataInicial().getValue()) + 1)); + return map; + } + + private Map getAtributosLinha(Map map, Ruta ruta) { + map.clear(); + map.put("linha", ruta.getNumRuta()); + return map; + } + + private Map getAtributosPeriodo(Map map, Ruta ruta) throws SQLException { + map.clear(); + map.put("diaInicio", String.valueOf(getValueCalendar(Calendar.DAY_OF_MONTH, controller.getDataInicial().getValue()))); + map.put("diaFim", String.valueOf(getValueCalendar(Calendar.DAY_OF_MONTH, controller.getDataFinal().getValue()))); + BigDecimal valorReceita = BigDecimal.ZERO; + dadosReceita.beforeFirst(); + while (dadosReceita.next()) { + if (ruta.getRutaId() == dadosReceita.getInt("ruta_id")) { + valorReceita = dadosReceita.getBigDecimal("receita"); + break; + } + } + map.put("receita", valorReceita.toString()); + return map; + } + + private Map getAtributosTrecho(Map map, ResultSet resultSet) throws SQLException { + map.clear(); + map.put("pontoInicial", resultSet.getString("origen_id")); + map.put("pontoFinal", resultSet.getString("destino_id")); + map.put("quantidadeIda", isSentidoIdaCorrida(resultSet.getString("indsentidoida")) ? resultSet.getString("qtde") : "0"); + map.put("quantidadeVolta", isSentidoIdaCorrida(resultSet.getString("indsentidoida")) ? "0" : resultSet.getString("qtde")); + return map; + } + + private Map getAtributosParalisacaoOuViagemExtra(Map map, ResultSet resultSet) throws SQLException { + map.clear(); + map.put("dia", resultSet.getString("dia")); + map.put("horario", resultSet.getString("horario")); + map.put("trajeto", isSentidoIdaCorrida(resultSet.getString("indsentidoida")) ? "I" : "V"); + return map; + } + + @SuppressWarnings("unchecked") + private List getLinhasSelecionadas() { + return (List) (Object)Arrays.asList(controller.getLinhaSelList().getData()); + } + + private int getValueCalendar(final int valueCalendar, Date data) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(data); + return calendar.get(valueCalendar); + } + + private boolean isSentidoIdaCorrida(String sentidoCorrida) { + return SENTIDO_IDA_CORRIDA.equals(sentidoCorrida); + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/RelatorioExportacaoSGTIController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/RelatorioExportacaoSGTIController.java new file mode 100644 index 000000000..c56d49345 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/sgti/RelatorioExportacaoSGTIController.java @@ -0,0 +1,136 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios.sgti; + +import java.io.IOException; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; + +import javax.sql.DataSource; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.xml.sax.SAXException; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Datebox; + +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.PagedListGenerico; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.ValidarDatas; +import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils; +import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEmpresa; +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.render.RenderRutaPersonalizado; + +@Controller("relatorioExportacaoSGTIController") +@Scope("prototype") +public class RelatorioExportacaoSGTIController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static final String TITULO_EXPORTACAO = "indexController.mniRelatorioExportacaoSGTI.label"; + private static final String MSG_DATA_INICIAL_MAIOR_FINAL = "relatorioExportacaoSGTIController.MSG.dataInicialMaiorFinal"; + private static final String MSG_MESES_DIFERENTES = "relatorioExportacaoSGTIController.MSG.mesDiferente"; + private static final String MSG_SEM_LINHA = "relatorioExportacaoSGTIController.MSG.semLinha"; + private static final String MSG_ERRO_SEM_EMPRESA = "relatorioExportacaoSGTIController.msg.erro.empresa"; + + private MyComboboxEmpresa cbEmpresa; + private Datebox dataInicial; + private Datebox dataFinal; + private MyListbox linhaList; + private MyListbox linhaSelList; + private MyTextbox txtPalavraPesquisaLinha; + private MyTextbox txtObservacao; + + @Autowired + private RutaService rutaService; + + @Autowired + private DataSource dataSourceRead; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + + List colunasLinhaRender = Arrays.asList("numRuta", "prefixo", "descruta"); + linhaList.setItemRenderer(new RenderRutaPersonalizado(colunasLinhaRender)); + linhaSelList.setItemRenderer(new RenderRutaPersonalizado(colunasLinhaRender).comBotaoExcluir()); + } + + public void onClick$btnPesquisaLinha(Event ev) { + linhaList.setData(rutaService.buscaRuta(txtPalavraPesquisaLinha.getText())); + PagedListGenerico.validarPagedListSemRegistro(linhaList, TITULO_EXPORTACAO); + } + + public void onClick$btnLimparLinha(Event ev) { + PagedListGenerico.limparPesquisaListBox(linhaList, txtPalavraPesquisaLinha); + } + + public void onDoubleClick$linhaSelList(Event ev) { + linhaSelList.removeItem((Ruta) linhaSelList.getSelected()); + } + + public void onDoubleClick$linhaList(Event ev) { + PagedListGenerico.validarInclusaoLista((Ruta) linhaList.getSelected(), linhaSelList); + } + + public void onClick$btnExecutarExportacao(Event ev) throws TransformerException, SAXException, IOException, ParserConfigurationException, SQLException { + if (isDatasValidas() && possuiEmpresa() + && possuiLinha()) { + new ExecutarExportacaoSGTI(this, dataSourceRead.getConnection()).executa(); + } + } + + private boolean possuiEmpresa() { + if (cbEmpresa.getSelectedItem() == null) { + MensagensUtils.showMessageInformation(MSG_ERRO_SEM_EMPRESA, TITULO_EXPORTACAO); + return false; + } + return true; + } + + private boolean possuiLinha() { + if (linhaSelList.getSize() == 0) { + MensagensUtils.showMessageInformation(MSG_SEM_LINHA, TITULO_EXPORTACAO); + return false; + } + return true; + } + + private boolean isDatasValidas() { + ValidarDatas validarDatas = new ValidarDatas(dataInicial, dataFinal); + + if (!validarDatas.isMesmoMes()) { + MensagensUtils.showMessageInformation(MSG_MESES_DIFERENTES, TITULO_EXPORTACAO); + return false; + } + + return !validarDatas.validarDataInicioMaiorQueTermino(MSG_DATA_INICIAL_MAIOR_FINAL, TITULO_EXPORTACAO); + } + + public MyComboboxEmpresa getCbEmpresa() { + return cbEmpresa; + } + + public Datebox getDataInicial() { + return dataInicial; + } + + public Datebox getDataFinal() { + return dataFinal; + } + + public MyListbox getLinhaSelList() { + return linhaSelList; + } + + public MyTextbox getTxtObservacao() { + return txtObservacao; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/CompactarParaZip.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/CompactarParaZip.java new file mode 100644 index 000000000..2bf9ad61f --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/CompactarParaZip.java @@ -0,0 +1,47 @@ +package com.rjconsultores.ventaboletos.web.utilerias; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +public class CompactarParaZip { + + private List arquivosACompactar; + private String caminhoArquivoDeSaida; + final byte[] buffer; + + public CompactarParaZip(List arquivosACompactar, String caminhoArquivoDeSaida) { + this.arquivosACompactar = arquivosACompactar; + this.caminhoArquivoDeSaida = caminhoArquivoDeSaida; + buffer = new byte[1024]; + } + + public void compactar() throws IOException { + ZipOutputStream out = new ZipOutputStream(new FileOutputStream(caminhoArquivoDeSaida)); + try { + for (File fileZip : arquivosACompactar) { + escreverSaida(out, fileZip); + } + } finally { + out.close(); + } + } + + private void escreverSaida(final ZipOutputStream out, final File fileZip) throws IOException { + FileInputStream in = new FileInputStream(fileZip.getPath()); + int len; + try { + out.putNextEntry(new ZipEntry(fileZip.getName())); + while ((len = in.read(buffer)) > 0) { + out.write(buffer, 0, len); + } + } finally { + out.closeEntry(); + in.close(); + } + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorio/sgti/SubMenuSGTI.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorio/sgti/SubMenuSGTI.java new file mode 100644 index 000000000..018431510 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorio/sgti/SubMenuSGTI.java @@ -0,0 +1,26 @@ +package com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorio.sgti; + +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 SubMenuSGTI extends DefaultItemMenuSistema { + + public SubMenuSGTI() { + super("indexController.mnSubMenuSGTI.label"); + } + + @Override + public String getClaveMenu() { + return ConstantesFuncionSistema.CLAVE_EXPORTACAO_SGTI; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioExportacaoSGTI.zul", + Labels.getLabel("indexController.mniRelatorioExportacaoSGTI.label"), 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 1124c98b1..b46a80da6 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 @@ -228,6 +228,7 @@ analitico.integracion.bpe.exportacao=com.rjconsultores.ventaboletos.web.utileria analitico.integracion.bpe.rdi=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorio.bpe.ItemMenuBpeRdi analitico.integracion.bpe.financeiro=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorio.bpe.ItemMenuBpeFinanceiro analitico.integracion.bpe.devolucion=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorio.bpe.ItemMenuBpeDevolucao +analitico.integracion.sgti=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorio.sgti.SubMenuSGTI seguridad=com.rjconsultores.ventaboletos.web.utilerias.menu.item.seguridad.MenuSeguridad seguridad.estacion=com.rjconsultores.ventaboletos.web.utilerias.menu.item.seguridad.ItemMenuEstacion seguridad.autorizacion=com.rjconsultores.ventaboletos.web.utilerias.menu.item.seguridad.ItemMenuAutorizacion diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderPersonalizado.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderPersonalizado.java index 3ce18713b..bc5e64028 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderPersonalizado.java +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderPersonalizado.java @@ -30,8 +30,8 @@ public class RenderPersonalizado implements ListitemRenderer { this.colunas = colunas; } - public RenderPersonalizado comBotaoExcluir(Boolean addBotaoExcluir) { - this.addBotaoExcluir = addBotaoExcluir; + public RenderPersonalizado comBotaoExcluir() { + this.addBotaoExcluir = true; return this; } @@ -58,9 +58,13 @@ public class RenderPersonalizado implements ListitemRenderer { String nomeMetodo = obtemMetodoGet(coluna); for (Method method : methods) { if (method.getName().equals(nomeMetodo)) { - Listcell lc = new Listcell(method.invoke((T)objeto).toString()); - lc.setParent(item); - break; + try { + Listcell lc = new Listcell(method.invoke((T)objeto).toString()); + lc.setParent(item); + break; + } catch (NullPointerException e) { + e.getMessage(); + } } } } diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRutaPersonalizado.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRutaPersonalizado.java new file mode 100644 index 000000000..71a653636 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRutaPersonalizado.java @@ -0,0 +1,25 @@ +package com.rjconsultores.ventaboletos.web.utilerias.render; + +import java.lang.reflect.InvocationTargetException; +import java.util.List; + +import org.zkoss.zul.Listcell; +import org.zkoss.zul.Listitem; + +import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; +import com.rjconsultores.ventaboletos.entidad.Ruta; + +public class RenderRutaPersonalizado extends RenderPersonalizado { + + public RenderRutaPersonalizado(List colunas) { + super(colunas); + } + + @Override + protected void incluirColunasRender(Listitem item, Object objeto) throws IllegalAccessException, InvocationTargetException { + super.incluirColunasRender(item, objeto); + OrgaoConcedente orgaoConcedente = ((Ruta)objeto).getOrgaoConcedente(); + Listcell lc = orgaoConcedente != null ? new Listcell(orgaoConcedente.getDescOrgao()) : new Listcell("-"); + lc.setParent(item); + } +} diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index a0f6bdbe7..633480c1e 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -250,6 +250,7 @@ indexController.mniIntegracion.bgm.label = BGM indexController.mniRelatorios.label = Reportes indexController.mniRelatorioAproveitamento.label = Aprovechamiento indexController.mniRelatorioArquivoBGM.label = Arquivo BGM +indexController.mniRelatorioExportacaoSGTI.label = Exportação SGTI indexController.mniRelatorioReceitaDiariaAgencia.label = Ingreso diário por punto de venta indexController.mniRelatorioLinhaOperacional.label = Boleto por Ruta indexController.mniRelatorioTrechoVendido.label = Tramo por punto de venta @@ -341,6 +342,8 @@ indexController.mnSubMenuBpeFiscal.rdi.label=Reporte RDI BPE indexController.mnSubMenuBpeFiscal.financeiro.label=Reporte Financiero BPE indexController.mnSubMenuBpeFiscal.devolucion.label=Reporte Devolución BPE +indexController.mnSubMenuSGTI.label=SGTI + indexController.mnRelatoriosFinanceiros.label=Reportes financeiros indexController.mniSubMenuClientePacote.label=Paquete @@ -7205,6 +7208,21 @@ relatorioArquivoBGMController.lbPuntoVenta.value = Agencia relatorioArquivoBGMController.msg.erro.puntoventa = El Campo Agencia es Obligatório! relatorioArquivoBGMController.msg.erro.empresa = El Campo Empresa es Obligatório! +# Relatorio Exportação SGTI +relatorioExportacaoSGTIController.lbDataIni.value = Fecha Inicial +relatorioExportacaoSGTIController.lbDataFin.value = Fecha Final +relatorioExportacaoSGTIController.lbEmpresa.value = Agencia +relatorioExportacaoSGTIController.lbLinha.label = Línea +relatorioExportacaoSGTIController.lbNumLinha.label = Num. línea +relatorioExportacaoSGTIController.btnPesquisa.label = Búsqueda +relatorioExportacaoSGTIController.btnLimpar.label = Limpiar +relatorioExportacaoSGTIController.lbObservacao.value = Observación +relatorioExportacaoSGTIController.btnExecutarExportacao = Exportar +relatorioExportacaoSGTIController.MSG.dataInicialMaiorFinal = Fecha inicial maior que final. +relatorioExportacaoSGTIController.MSG.mesDiferente = El período informado debe estar en el mismo mes. +relatorioExportacaoSGTIController.MSG.semLinha = Por favor informe al menos una línea. +relatorioExportacaoSGTIController.msg.erro.empresa = El Campo Agencia es Obligatório! + # Recebimento Malote recebimentoMaloteController.window.title = Recibimento Malote recebimentoMaloteController.btnConfirmar.label = Confirmar - F12 diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 4db2225cf..b589e6f09 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -261,6 +261,7 @@ indexController.mniIntegracion.bgm.label = BGM indexController.mniRelatorios.label = Relatórios indexController.mniRelatorioAproveitamento.label = Aproveitamento indexController.mniRelatorioArquivoBGM.label = Arquivo BGM +indexController.mniRelatorioExportacaoSGTI.label = Exportação SGTI indexController.mniRelatorioReceitaDiariaAgencia.label = Receita Diária por Agência indexController.mniRelatorioLinhaOperacional.label = Passagem por Linha indexController.mniRelatorioTrechoVendido.label = Trecho por Agência @@ -358,6 +359,8 @@ indexController.mnSubMenuBpeFiscal.rdi.label=Relatório RDI BPE indexController.mnSubMenuBpeFiscal.financeiro.label=Relatório Financiero BPE indexController.mnSubMenuBpeFiscal.devolucion.label=Relatório Devolução BPE +indexController.mnSubMenuSGTI.label=SGTI + indexController.mnRelatoriosFinanceiros.label=Relatórios Financeiros indexController.mniSubMenuClientePacote.label=Pacote @@ -7658,6 +7661,21 @@ relatorioArquivoBGMController.msg.erro.empresa = O Campo Empresa é obrigatório relatorioArquivoBGMController.txtArquivo.value=Local Arq. Servidor relatorioArquivoBGMController.arquivoGeradoNoServidor.value=Arquivo gerado no servidor +# Relatorio Exportação SGTI +relatorioExportacaoSGTIController.lbDataIni.value = Data Inicial +relatorioExportacaoSGTIController.lbDataFin.value = Data Final +relatorioExportacaoSGTIController.lbEmpresa.value = Empresa +relatorioExportacaoSGTIController.lbLinha.label = Linha +relatorioExportacaoSGTIController.lbNumLinha.label = Num. Linha +relatorioExportacaoSGTIController.btnPesquisa.label = Pesquisar +relatorioExportacaoSGTIController.btnLimpar.label = Limpar +relatorioExportacaoSGTIController.lbObservacao.value = Observação +relatorioExportacaoSGTIController.btnExecutarExportacao = Exportar +relatorioExportacaoSGTIController.MSG.dataInicialMaiorFinal = Data inicial maior que final. +relatorioExportacaoSGTIController.MSG.mesDiferente = O período informado deve estar no mesmo mês. +relatorioExportacaoSGTIController.MSG.semLinha = Favor informar pelo menos uma linha. +relatorioExportacaoSGTIController.msg.erro.empresa = O Campo Empresa é obrigatório! + # Recebimento Malote recebimentoMaloteController.window.title = Recebimento Malote recebimentoMaloteController.btnConfirmar.label = Confirmar - F12 diff --git a/web/gui/relatorios/filtroRelatorioExportacaoSGTI.zul b/web/gui/relatorios/filtroRelatorioExportacaoSGTI.zul new file mode 100644 index 000000000..24f821178 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioExportacaoSGTI.zul @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + +