diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java new file mode 100644 index 000000000..80f121779 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/impl/RelatorioIndiceIRK.java @@ -0,0 +1,229 @@ +/** + * + */ +package com.rjconsultores.ventaboletos.relatorios.impl; + +import java.math.BigDecimal; +import java.sql.Connection; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; + +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.DataSource; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioIndiceIRKBean; +import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement; + +import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; + +/** + * @author valdevir_rj + * + */ +public class RelatorioIndiceIRK extends Relatorio { + + private List lsDadosRelatorio; + private static Logger log = Logger.getLogger(RelatorioIndiceIRK.class); + + + /** + * @param parametros + * @param conexao + */ + public RelatorioIndiceIRK(final Map parametros, final Connection conexao) throws Exception { + super(parametros, conexao); + + this.setCustomDataSource(new DataSource(this) { + @Override + public void initDados() throws Exception { + try { + Integer rutaId = parametros.get("RUTA_ID") != null ? Integer.valueOf(parametros.get("RUTA_ID").toString()) : null; + Empresa empresa = parametros.get("EMPRESA") != null ? (Empresa) (parametros.get("EMPRESA")) : null; + Integer grupoRutaId = parametros.get("GRUPORUTA_ID") != null ? Integer.valueOf(parametros.get("GRUPORUTA_ID").toString()) : null; + String rutaIds = parametros.get("LINHA_FILTRO") != null ? (parametros.get("LINHA_FILTRO").toString()) : null; + String corridasIds = parametros.get("SERVICO_FILTRO") != null ? (parametros.get("SERVICO_FILTRO").toString()) : null; + + // Executa query relatório e preenche objeto relatório + lsDadosRelatorio= preencheAgrupaRelatorioBean(preparaExecutaQuery(parametros, conexao, rutaId, empresa, grupoRutaId, rutaIds, corridasIds)); + + // Ordena pela Desc Linha + Collections.sort(lsDadosRelatorio, new Comparator() { + @Override + public int compare(RelatorioIndiceIRKBean rel1, RelatorioIndiceIRKBean rel2) { + return rel1.getDescRuta().compareTo(rel2.getDescRuta()); + } + }); + + parametros.put("RELATORIOLIST", lsDadosRelatorio); + setLsDadosRelatorio(lsDadosRelatorio); + } catch (Exception e) { + log.error("Erro ao executar relatório", e); + } + + } + + /** + * @param parametros + * @param conexao + * @param rutaId + * @param empresa + * @param grupoRutaId + * @return + * @throws SQLException + */ + private ResultSet preparaExecutaQuery(final Map parametros, final Connection conexao, Integer rutaId, Empresa empresa, Integer grupoRutaId,String rutaIds, String corridasIds) throws SQLException { + String sql = getSql(rutaId, grupoRutaId, rutaIds, corridasIds); + NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql); + ResultSet rset = null; + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + if (parametros.get("DATA_INICIO") != null) { + Date dataInicio = (Date) parametros.get("DATA_INICIO"); + stmt.setString("DATA_INICIO", sdf.format(dataInicio)); + } + + if (parametros.get("DATA_FINAL") != null) { + Date dataFinal = (Date) parametros.get("DATA_FINAL"); + stmt.setString("DATA_FINAL", sdf.format(dataFinal)); + } + stmt.setInt("empresaId", empresa.getEmpresaId()); + rset = stmt.executeQuery(); + return rset; + } + + }); + } + + /** + * @param lsDadosRelatorio + */ + public void setLsDadosRelatorio(List lsDadosRelatorio) { + this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio)); + this.lsDadosRelatorio = lsDadosRelatorio; + } + + @Override + public void processaParametros() throws Exception { + } + + private String getSql(Integer rutaId, Integer grupoRutaId, String rutaIds, String corridasIds) { + String TODOS = "TODOS"; + StringBuilder sql = new StringBuilder(); + sql.append(" SELECT "); + sql.append(" servico,"); + sql.append(" rutaid,"); + sql.append(" descruta,"); + sql.append(" sentido,"); + sql.append(" gruporuta,"); + sql.append(" indiceirkminimo,"); + sql.append(" hora,"); + sql.append(" extensao,"); + sql.append(" SUM(seguro) AS seguro,"); + sql.append(" SUM(txembarque) AS txembarque,"); + sql.append(" SUM(pedagio) AS pedagio,"); + sql.append(" SUM(passagens) AS passagens,"); + sql.append(" ( SUM(passagens) + SUM(pedagio) + SUM(txembarque) + SUM(seguro) ) AS totalhorario,"); + sql.append(" round(((SUM(passagens) + SUM(pedagio) + SUM(txembarque) + SUM(seguro)) / extensao), 2) AS irk, "); + sql.append(" indiceirkminimo * extensao AS receitaminima,"); + sql.append(" (SUM(passagens) + SUM(pedagio) + SUM(txembarque) + SUM(seguro) ) - ( indiceirkminimo * extensao ) AS diferencareceita "); + sql.append(" FROM "); + sql.append(" ( "); + sql.append(" SELECT "); + sql.append(" cj.caja_id AS cajaId, "); + sql.append(" cj.corrida_id AS servico, "); + sql.append(" r.ruta_id AS rutaid, "); + sql.append(" r.descruta AS descruta, "); + sql.append(" r.indsentidoida AS sentido, "); + sql.append(" nvl(e.indiceirk, 0) AS indiceirkminimo, "); + sql.append(" nvl(gr.descgrupo, 'Não Definido') AS gruporuta, "); + sql.append(" to_char(cj.fechorviaje, 'HH24:MI') AS hora, "); + sql.append(" tr.cantkmreal AS extensao, "); + sql.append(" cj.importeseguro AS seguro, "); + sql.append(" cj.importetaxaembarque AS txembarque, "); + sql.append(" cj.importepedagio AS pedagio, "); + sql.append(" cj.preciopagado AS passagens "); + sql.append(" FROM "); + sql.append(" caja cj "); + sql.append(" INNER JOIN ruta r ON ( cj.ruta_id = r.ruta_id ) "); + sql.append(" LEFT JOIN grupo_ruta gr ON ( r.gruporuta_id = gr.gruporuta_id ) "); + sql.append(" INNER JOIN ruta_combinacion rc ON ( rc.ruta_id = cj.ruta_id "); + sql.append(" AND rc.activo = 1 ) "); + sql.append(" INNER JOIN tramo tr ON ( tr.tramo_id = rc.tramo_id "); + sql.append(" AND tr.origen_id = cj.origen_id "); + sql.append(" AND tr.destino_id = cj.destino_id ) "); + sql.append(" INNER JOIN marca m ON ( cj.marca_id = m.marca_id "); + sql.append(" AND m.empresa_id = :empresaId ) "); + sql.append(" INNER JOIN empresa e ON ( e.empresa_id = :empresaId ) "); + sql.append(" WHERE "); + sql.append(" cj.activo = 1 "); + sql.append(" AND cj.motivocancelacion_id IS NULL "); + sql.append(" AND cj.feccorrida BETWEEN TO_DATE(:DATA_INICIO, 'DD/MM/YY hh24:mi:ss') AND TO_DATE(:DATA_FINAL, 'DD/MM/YY hh24:mi:ss') "); + sql.append(rutaIds == null ||TODOS.equals(rutaIds) ? "" : " AND r.ruta_id IN ( " + rutaIds + " ) "); + sql.append(corridasIds == null || TODOS.equals(corridasIds) ? "" : " AND cj.corrida_id IN ( " + corridasIds + " ) "); + sql.append(grupoRutaId == null ? "" : " AND R.GRUPORUTA_ID IN ( " + grupoRutaId + " ) "); + sql.append(" GROUP BY "); + sql.append(" cj.caja_id, "); + sql.append(" cj.corrida_id, "); + sql.append(" r.ruta_id, "); + sql.append(" r.descruta, "); + sql.append(" r.indsentidoida,"); + sql.append(" e.indiceirk, "); + sql.append(" gr.descgrupo, "); + sql.append(" cj.fechorviaje, "); + sql.append(" tr.cantkmreal, "); + sql.append(" cj.importeseguro, "); + sql.append(" cj.importetaxaembarque, "); + sql.append(" cj.importepedagio, "); + sql.append(" cj.preciopagado "); + sql.append(" ORDER BY "); + sql.append(" r.descruta "); + sql.append(" ) dados_sem_agrupamento "); + sql.append(" GROUP BY "); + sql.append(" servico, "); + sql.append(" rutaid, "); + sql.append(" descruta, "); + sql.append(" gruporuta, "); + sql.append(" sentido, "); + sql.append(" indiceirkminimo, "); + sql.append(" hora, "); + sql.append(" extensao "); + return sql.toString(); + + } + + private List preencheAgrupaRelatorioBean(ResultSet rset) throws SQLException { + lsDadosRelatorio = new ArrayList(); + while (rset.next()) { + RelatorioIndiceIRKBean relatorioIndiceIRK = new RelatorioIndiceIRKBean(); + relatorioIndiceIRK.setServico((Integer) rset.getInt("servico")); + relatorioIndiceIRK.setRutaId((Integer) rset.getInt("rutaid")); + relatorioIndiceIRK.setDescRuta((String) rset.getObject("descruta")); + relatorioIndiceIRK.setGrupoRuta((String) rset.getObject("gruporuta")); + relatorioIndiceIRK.setSentido(Boolean.TRUE.equals((Boolean) rset.getBoolean("sentido")) ? "Ida" : "Volta"); + relatorioIndiceIRK.setIrkMinimo((BigDecimal) rset.getObject("indiceirkminimo")); + relatorioIndiceIRK.setHora((String) rset.getObject("hora")); + relatorioIndiceIRK.setExtensao((BigDecimal) rset.getObject("extensao")); + relatorioIndiceIRK.setKmRodado((BigDecimal) rset.getObject("extensao")); + relatorioIndiceIRK.setSeguro((BigDecimal) rset.getObject("seguro")); + relatorioIndiceIRK.setTxEmbarque((BigDecimal) rset.getObject("txembarque")); + relatorioIndiceIRK.setPedagio((BigDecimal) rset.getObject("pedagio")); + relatorioIndiceIRK.setPassagens((BigDecimal) rset.getObject("passagens")); + relatorioIndiceIRK.setTotalViagem((BigDecimal) rset.getObject("totalhorario")); + relatorioIndiceIRK.setTotal((BigDecimal) rset.getObject("totalhorario")); + relatorioIndiceIRK.setIrk((BigDecimal) rset.getObject("irk")); + relatorioIndiceIRK.setReceitaMinima((BigDecimal) rset.getObject("receitaminima")); + relatorioIndiceIRK.setDiferencaReceitas((BigDecimal) rset.getObject("diferencareceita")); + lsDadosRelatorio.add(relatorioIndiceIRK); + } + return lsDadosRelatorio; + } + +} diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioIndiceIRK_pt_BR.properties b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioIndiceIRK_pt_BR.properties new file mode 100644 index 000000000..fb8b3df5c --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/internacionalizacao/RelatorioIndiceIRK_pt_BR.properties @@ -0,0 +1,50 @@ +#geral +msg.noData=Não foi possivel obter dados com os parâmetros informados. +msg.a=à + +#Labels header +header.titulo.relatorio=Indice IRK +header.periodo=Per\u00EDodo\: +header.data.hora=Data/Hora\: +header.pagina=P\u00E1gina\: +header.filtro=Filtro\: +header.filtro.servico=Servi\u00E7o\: +header.filtro.linha=Linha\: +header.filtro.grupo=Grupo de Linhas\: +cabecalho.impressorPor=Impresso por + +#Labels detail + +detail.receita=RECEITA +detail.viagens=VIAGENS +detail.passageiros=PASSAGEIROS +detail.parametrosOperacionais=PARÂMETROS OPERACIONAIS +detail.hora=Hora +detail.servico=Serviço +detail.setido=Sentido +detail.extensao=Extensão +detail.passagens=Passagens +detail.seguro=Seguro +detail.bagagens=Bagagens +detail.segOpc=Tx. Embarque +detail.total=Total +detail.totalViagem=Total +detail.km.rodad=Km Rodad. +detail.irk=IRK +detail.rsViagem=R$/Viagem +detail.pedagio=Pedágio +detail.linha=Linha +detail.irkMinimo= IRK Mínimo +detail.receitaMinima= Receita Mínima +detail.diferencaReceitas= Diferença de Receitas + + +#Group +ruta.total= Total Linha +group.total=Total do Grupo +sub.total=Sub Total +total.geral=Total Geral + +linhas=Linhas + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jasper index 4dbafff44..fec3d5803 100644 Binary files a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jasper and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jrxml index a98ea0563..a2dc92fce 100644 --- a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jrxml +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioCaixaOrgaoConcedente.jrxml @@ -1,7 +1,7 @@ - + @@ -595,9 +595,9 @@ $F{categoria}]]> - + - + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioIndiceIRK.jasper b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioIndiceIRK.jasper new file mode 100644 index 000000000..88c5511a2 Binary files /dev/null and b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioIndiceIRK.jasper differ diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioIndiceIRK.jrxml b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioIndiceIRK.jrxml new file mode 100644 index 000000000..d2a7d18ee --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/templates/RelatorioIndiceIRK.jrxml @@ -0,0 +1,552 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band splitType="Stretch"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioIndiceIRKBean.java b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioIndiceIRKBean.java new file mode 100644 index 000000000..e50856366 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/relatorios/utilitarios/RelatorioIndiceIRKBean.java @@ -0,0 +1,241 @@ +package com.rjconsultores.ventaboletos.relatorios.utilitarios; + +import java.math.BigDecimal; + +/** + * @author valdevir + * + */ +public class RelatorioIndiceIRKBean { + + /** + * Valor estipulado pela empresa (definido na configuração de empresa) + */ + private BigDecimal irkMinimo; + /** + * Valor gerado através (IRK minímo x KM da Linha) + */ + private BigDecimal receitaMinima; + + /** + * Valor Gerado Através (Total da Receita daquele horário - a Receita miníma) + */ + private BigDecimal diferencaReceitas; + /** + * Grupo Ruta + */ + private String grupoRuta; + /** + * Hora Corrida + */ + private String hora; + /** + * Num Corrida + */ + private Integer servico; + /** + * Sentido Linha (Ida/Volta) + */ + private String sentido; + + /** + * Extensão da linha em Km + */ + private BigDecimal extensao; + /** + * Soma do valor de passagens (Tarifa) + */ + private BigDecimal passagens; + /** + * Soma do valor de seguro (Seguro Tabela) + */ + private BigDecimal seguro; + /** + * Total das Receita do horário (Passagem + Pedágio + seguro + Taxa de Embarque) + */ + private BigDecimal total; + /** + * + */ + private BigDecimal totalViagem; + /** + * Total Kilometragem Rodado da Linha para o período + */ + private BigDecimal kmRodado; + /** + * IRK "Indice de Receita por Kilometro": Valor Gerado Através (Total/Km) onde Total é o somatório do valor das passagens do serviço incluído venda embarcada + */ + private BigDecimal irk; + /** + * + */ + private BigDecimal rsViagem; + /** + * valor de Taxa Embarque do Horário + */ + private BigDecimal txEmbarque; + /** + * valor de pedágio do Horário + */ + private BigDecimal pedagio; + /** + * Descrição da linha + */ + private String descRuta; + + private Integer rutaId; + + public Integer getRutaId() { + return rutaId; + } + + public void setRutaId(Integer rutaId) { + this.rutaId = rutaId; + } + + public String getSentido() { + return sentido; + } + + public String getGrupoRuta() { + return grupoRuta; + } + + public void setGrupoRuta(String grupoRuta) { + this.grupoRuta = grupoRuta; + } + + public String getHora() { + return hora; + } + + public void setHora(String hora) { + this.hora = hora; + } + + public Integer getServico() { + return servico; + } + + public void setServico(Integer servico) { + this.servico = servico; + } + + public BigDecimal getExtensao() { + return extensao == null ? BigDecimal.ZERO : extensao; + } + + public void setExtensao(BigDecimal extensao) { + this.extensao = extensao; + } + + public BigDecimal getPassagens() { + return passagens == null ? BigDecimal.ZERO : passagens; + } + + public void setPassagens(BigDecimal passagens) { + this.passagens = passagens; + } + + public BigDecimal getSeguro() { + return seguro == null ? BigDecimal.ZERO : seguro; + } + + public void setSeguro(BigDecimal seguro) { + this.seguro = seguro; + } + + public BigDecimal getTotal() { + return total == null ? BigDecimal.ZERO : total; + } + + public void setTotal(BigDecimal total) { + this.total = total; + } + + public BigDecimal getTotalViagem() { + return totalViagem == null ? BigDecimal.ZERO : totalViagem; + } + + public void setTotalViagem(BigDecimal totalViagem) { + this.totalViagem = totalViagem; + } + + public BigDecimal getKmRodado() { + return kmRodado == null ? BigDecimal.ZERO : kmRodado; + } + + public void setKmRodado(BigDecimal kmRodado) { + this.kmRodado = kmRodado; + } + + public BigDecimal getRsViagem() { + return rsViagem == null ? BigDecimal.ZERO : rsViagem; + } + + public void setRsViagem(BigDecimal rsViagem) { + this.rsViagem = rsViagem; + } + + public BigDecimal getTxEmbarque() { + return txEmbarque; + } + + public void setTxEmbarque(BigDecimal txEmbarque) { + this.txEmbarque = txEmbarque; + } + + public BigDecimal getPedagio() { + return pedagio; + } + + public void setPedagio(BigDecimal pedagio) { + this.pedagio = pedagio; + } + + public String getDescRuta() { + return descRuta; + } + + public void setDescRuta(String descRuta) { + this.descRuta = descRuta; + } + + public BigDecimal getIrkMinimo() { + return irkMinimo; + } + + public void setIrkMinimo(BigDecimal irkMinimo) { + this.irkMinimo = irkMinimo; + } + + public BigDecimal getReceitaMinima() { + return receitaMinima; + } + + public void setReceitaMinima(BigDecimal receitaMinima) { + this.receitaMinima = receitaMinima; + } + + public BigDecimal getDiferencaReceitas() { + return diferencaReceitas; + } + + public void setDiferencaReceitas(BigDecimal diferencaReceitas) { + this.diferencaReceitas = diferencaReceitas; + } + + public void setSentido(String sentido) { + this.sentido = sentido; + } + + public BigDecimal getIrk() { + return irk; + } + + public void setIrk(BigDecimal irk) { + this.irk = irk; + } + + +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/EditarEmpresaController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/EditarEmpresaController.java index b66891822..15ce60f04 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/EditarEmpresaController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/catalogos/EditarEmpresaController.java @@ -33,6 +33,7 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Decimalbox; import org.zkoss.zul.Image; import org.zkoss.zul.Intbox; import org.zkoss.zul.Messagebox; @@ -322,6 +323,9 @@ public class EditarEmpresaController extends MyGenericForwardComposer { private MyTextbox txtCpfCnpj_AutorizadoDowload; + private Decimalbox txtIrkPadrao; + + private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; @@ -702,6 +706,7 @@ public class EditarEmpresaController extends MyGenericForwardComposer { chkIndComTransfGeraCaja.getValue(); chkIndPricingVendaAberto.getValue(); + txtIrkPadrao.getValue(); rdCst00.getValue(); rdCst40.getValue(); rdCst41.getValue(); @@ -823,6 +828,7 @@ public class EditarEmpresaController extends MyGenericForwardComposer { empresa.setIndConfMovFPTrocaVlrDeposito(chkIndConfMovFPTrocaVlrDeposito.isChecked()); empresa.setIndComTransfGeraCaja(chkIndComTransfGeraCaja.isChecked()); empresa.setIndPricingVendaAberto(chkIndPricingVendaAberto.isChecked()); + empresa.setIndiceIRK(txtIrkPadrao.getValue()); if(rdCst00.isChecked()) { empresa.setCstGratuidade(TipoCstGratuidade.CST00); @@ -2015,4 +2021,12 @@ public void onClick$btnTestEmailFlexBus(Event ev) throws InterruptedException { public void setEmpresaEmailFlexBus(EmpresaEmailFlexBus empresaEmailFlexBus) { this.empresaEmailFlexBus = empresaEmailFlexBus; } + + public Decimalbox getTxtIrkPadrao() { + return txtIrkPadrao; + } + + public void setTxtIrkPadrao(Decimalbox txtIrkPadrao) { + this.txtIrkPadrao = txtIrkPadrao; + } } diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioIndiceIRKController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioIndiceIRKController.java new file mode 100644 index 000000000..ce1ef3418 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/relatorios/RelatorioIndiceIRKController.java @@ -0,0 +1,250 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.sql.DataSource; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.util.resource.Labels; +import org.zkoss.zhtml.Messagebox; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zul.Combobox; +import org.zkoss.zul.Datebox; +import org.zkoss.zul.Intbox; +import org.zkoss.zul.Textbox; + +import com.rjconsultores.ventaboletos.entidad.Corrida; +import com.rjconsultores.ventaboletos.entidad.Empresa; +import com.rjconsultores.ventaboletos.entidad.GrupoRuta; +import com.rjconsultores.ventaboletos.entidad.Ruta; +import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioIndiceIRK; +import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio; +import com.rjconsultores.ventaboletos.service.CorridaService; +import com.rjconsultores.ventaboletos.service.EmpresaService; +import com.rjconsultores.ventaboletos.service.GrupoRutaService; +import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderCorridaOrigemDestino; +import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRelatorioIndiceIRK; + +@Controller("relatorioIndiceIRKController") +@Scope("prototype") +public class RelatorioIndiceIRKController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static Logger log = Logger.getLogger(RelatorioIndiceIRKController.class); + + @Autowired + private DataSource dataSourceRead; + + @Autowired + private EmpresaService empresaService; + + @Autowired + private CorridaService corridaService; + + @Autowired + private RutaService rutaService; + + @Autowired + private GrupoRutaService grupoRutaService; + + private Datebox datInicial; + private Datebox datFinal; + + private Combobox cmbEmpresa; + private List lsEmpresa; + + private Combobox cmbGrupoRuta; + private List lsGrupoRuta; + + private MyListbox linhaList; + private MyListbox linhaListSelList; + private Textbox txtPalavraPesquisaLinha; + + private ArrayList lsNumLinha = new ArrayList(); + private MyListbox servicoList; + private MyListbox servicoListSelList; + private Intbox txtCorridaId; + + private ArrayList lsNumServico = new ArrayList(); + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private void executarRelatorio() throws Exception { + try { + Map parametros = new HashMap(); + // Filtro Data Início + Timestamp dataInicio = new Timestamp((DateUtil.inicioFecha((java.util.Date) datInicial.getValue()).getTime())); + parametros.put("DATA_INICIO", dataInicio); + + // Filtro Data Final + Timestamp dataFinal = new Timestamp((DateUtil.fimFecha((java.util.Date) datFinal.getValue()).getTime())); + parametros.put("DATA_FINAL", dataFinal); + + // Filtro Usuário Id + parametros.put("USUARIO_ID", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString()); + + // Filtro nome usuário + parametros.put("NOME_USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario().toString()); + + // Filtro Empresa + Empresa empresa = null; + if (cmbEmpresa.getSelectedItem() != null) { + empresa = (Empresa) cmbEmpresa.getSelectedItem().getValue(); + } + parametros.put("EMPRESA", empresa); + parametros.put("NOMBEMPRESA", empresa != null ? empresa.getNombempresa() : "TODOS"); + + // Filtro Grupo Ruta + GrupoRuta grupoRuta = null; + if (cmbGrupoRuta.getSelectedItem() != null) { + grupoRuta = (GrupoRuta) cmbGrupoRuta.getSelectedItem().getValue(); + } + parametros.put("DESCGRUPO", grupoRuta != null ? grupoRuta.getDescGrupo() : "TODOS"); + // Filtro Linha + lsNumLinha = new ArrayList(Arrays.asList(linhaListSelList.getData())); + String rutasIds = getRutasIds(lsNumLinha); + parametros.put("LINHA_FILTRO", lsNumLinha != null && !lsNumLinha.isEmpty() ? rutasIds : "TODOS"); + parametros.put("lsNumLinha", lsNumLinha); + + // Filtro Serviço + lsNumServico = new ArrayList(Arrays.asList(servicoListSelList.getData())); + String corridasIds = getCorridasIds(lsNumServico); + parametros.put("SERVICO_FILTRO", lsNumServico != null && !lsNumServico.isEmpty()? corridasIds : "TODOS"); + parametros.put("lsNumServico", lsNumServico); + + // Instancia o relatório + Relatorio relatorio = new RelatorioIndiceIRK(parametros, dataSourceRead.getConnection()); + Map args = new HashMap(); + args.put("relatorio", relatorio); + + // Abre a janela do relatório + openWindow("/component/reportView.zul", + Labels.getLabel("relatorioIndiceIRKController.window.title"), args, MODAL); + } catch (Exception e) { + log.error("Erro ao executar relatório", e); + } + + } + + private String getCorridasIds(ArrayList lsNumServico) { + StringBuilder corridasIds = new StringBuilder(); + for (Corrida corrida : lsNumServico) { + corridasIds.append(corrida.getId().getCorridaId()); + } + return corridasIds.toString(); + } + + private String getRutasIds(ArrayList lsNumLinha2) { + StringBuilder rutasIds = new StringBuilder(); + for (Ruta ruta : lsNumLinha2) { + rutasIds.append(ruta.getRutaId()); + } + return rutasIds.toString(); + } + + public void onClick$btnExecutarRelatorio(Event ev) throws Exception { + executarRelatorio(); + } + + public void onClick$btnPesquisaLinha(Event ev) { + executarPesquisaLinha(); + } + + public void onClick$btnLimparLinha(Event ev) { + linhaList.clearSelection(); + lsNumLinha.clear(); + } + + public void onDoubleClick$servicoList(Event ev) { + Corrida corridaAux = (Corrida) servicoList.getSelected(); + servicoListSelList.addItemNovo(corridaAux); + } + + public void onDoubleClick$linhaList(Event ev) { + Ruta rutaAux = (Ruta) linhaList.getSelected(); + linhaListSelList.addItemNovo(rutaAux); + } + + private void executarPesquisaLinha() { + + String palavraPesquisaRuta = txtPalavraPesquisaLinha.getText(); + linhaList.setData(rutaService.buscaRuta(palavraPesquisaRuta)); + + if (linhaList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioIndiceIRKController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + } + } + } + + private void executarPesquisaServico() { + + Integer corridaId = txtCorridaId.getValue(); + servicoList.setData(corridaService.buscarGroupCorrridaId(corridaId, datInicial.getValue(), datFinal.getValue())); + + if (servicoList.getData().length == 0) { + try { + Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), + Labels.getLabel("relatorioLinhasHorarioController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + } catch (InterruptedException ex) { + } + } + } + + public void onClick$btnLimparServico(Event ev) { + servicoList.clearSelection(); + servicoList.setData(new ArrayList()); + lsNumServico.clear(); + } + + public void onClick$btnPesquisaServico(Event ev) { + executarPesquisaServico(); + } + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + lsEmpresa = empresaService.obtenerTodos(); + + lsGrupoRuta = grupoRutaService.obtenerTodos(); + + linhaList.setItemRenderer(new RenderRelatorioIndiceIRK()); + linhaListSelList.setItemRenderer(new RenderRelatorioIndiceIRK()); + + servicoList.setItemRenderer(new RenderCorridaOrigemDestino()); + servicoListSelList.setItemRenderer(new RenderCorridaOrigemDestino()); + } + + public List getLsEmpresa() { + return lsEmpresa; + } + + public void setLsEmpresa(List lsEmpresa) { + this.lsEmpresa = lsEmpresa; + } + + public List getLsGrupoRuta() { + return lsGrupoRuta; + } + + public void setLsGrupoRuta(List lsGrupoRuta) { + this.lsGrupoRuta = lsGrupoRuta; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioIndiceIRK.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioIndiceIRK.java new file mode 100644 index 000000000..40a925d85 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/item/relatorios/ItemMenuRelatorioIndiceIRK.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 ItemMenuRelatorioIndiceIRK extends DefaultItemMenuSistema { + + public ItemMenuRelatorioIndiceIRK() { + super("indexController.mniRelatorioIndiceIRK.label"); + } + + @Override + public String getClaveMenu() { + return "COM.RJCONSULTORES.ADMINISTRACION.GUI.RELATORIOS.MENU.RELATORIOIRK"; + } + + @Override + public void ejecutar() { + PantallaUtileria.openWindow("/gui/relatorios/filtroRelatorioIRK.zul", + Labels.getLabel("relatorioIRKController.window.title"), getArgs(), desktop); + + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties b/src/java/com/rjconsultores/ventaboletos/web/utilerias/menu/menu_original.properties index 3f75655b3..7a755ed26 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 @@ -162,6 +162,7 @@ analitico.gerenciais.relatorioHistoricoCompras=com.rjconsultores.ventaboletos.we analitico.gerenciais.operacionais=com.rjconsultores.ventaboletos.web.utilerias.menu.item.analitico.gerenciais.operacionais.SubMenuRelatorioOperacionais analitico.gerenciais.operacionais.aproveitamento=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioAproveitamento analitico.gerenciais.operacionais.resumoLinhas=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioResumoLinhas +analitico.gerenciais.operacionais.indiceIRK=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioIndiceIRK analitico.gerenciais.operacionais.kmProgramada=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioKmProgramada analitico.gerenciais.operacionais.acompanhamentoEquivalentes=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioAcompanhamentoEquivalentes analitico.gerenciais.operacionais.linhasHorario=com.rjconsultores.ventaboletos.web.utilerias.menu.item.relatorios.ItemMenuRelatorioLinhasHorario diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioIndiceIRK.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioIndiceIRK.java new file mode 100644 index 000000000..d23b0bce8 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/render/RenderRelatorioIndiceIRK.java @@ -0,0 +1,57 @@ +package com.rjconsultores.ventaboletos.web.utilerias.render; + +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zul.Button; +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; +import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; + +public class RenderRelatorioIndiceIRK implements ListitemRenderer { + public void render(Listitem lstm, Object o) throws Exception { + Ruta ruta = (Ruta) o; + + Listcell lc = new Listcell(ruta.getNumRuta().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); + + Button btn = new Button(); + + lc = new Listcell(); + lc.setParent(lstm); + + btn.setWidth("16"); + btn.setHeight("16"); + btn.setImage("/gui/img/remove.png"); + + btn.addEventListener("onClick", new EventListener() { + @Override + public void onEvent(Event event) throws Exception { + MyListbox listBox = (MyListbox) event.getTarget().getParent().getParent().getParent(); + Listitem listItem = (Listitem) event.getTarget().getParent().getParent(); + listBox.removeItem((Ruta) listItem.getAttribute("data")); + } + }); + + lc.appendChild(btn); + + lstm.setAttribute("data", ruta); + } +} diff --git a/web/WEB-INF/i3-label_en.label b/web/WEB-INF/i3-label_en.label index d08eb436c..1a5bd5b1f 100644 --- a/web/WEB-INF/i3-label_en.label +++ b/web/WEB-INF/i3-label_en.label @@ -295,6 +295,7 @@ indexController.mniRelatorioTrechoVendido.label=Section by Point of Sale indexController.mniRelatorioOrigemDestino.label=Performance by Service indexController.mniRelatorioPassageirosViajar.label=Ticket to Travel indexController.mniRelatorioResumoLinhas.label=Route Summary +indexController.mniRelatorioIndiceIRK.label = Indice IRK indexController.mniRelatorioKmProgramada.label=Scheduled Km indexController.mniRelatorioAcompanhamentoEquivalentes.label=Indicators indexController.mniRelatorioLinhasHorario.label=Routes by Time diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index cb6e6d87b..1e5e3b2b2 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -292,6 +292,7 @@ indexController.mniRelatorioTrechoVendido.label = Tramo por punto de venta indexController.mniRelatorioOrigemDestino.label = Desempeño de servicio indexController.mniRelatorioPassageirosViajar.label = Pasajeros a viajar indexController.mniRelatorioResumoLinhas.label = Reporte resumen de rutas +indexController.mniRelatorioIndiceIRK.label = Indice IRK indexController.mniRelatorioAcompanhamentoEquivalentes.label = Indicadores (Acompanhamento de Equivalentes) indexController.mniRelatorioLinhasHorario.label = Rutas por horário indexController.mniRelatorioTaxasLinha.label = Tasas diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 18c8d8552..6fc3574f7 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -302,6 +302,7 @@ indexController.mniRelatorioTrechoVendido.label = Trecho por Agência indexController.mniRelatorioOrigemDestino.label = Desempenho Por Serviço indexController.mniRelatorioPassageirosViajar.label = Passageiros a Viajar indexController.mniRelatorioResumoLinhas.label = Resumo de Linhas +indexController.mniRelatorioIndiceIRK.label = Indice IRK indexController.mniRelatorioKmProgramada.label = Km Programada indexController.mniRelatorioAcompanhamentoEquivalentes.label = Indicadores (Acompanhamento de Equivalentes) indexController.mniRelatorioLinhasHorario.label = Linhas por Horário @@ -519,6 +520,8 @@ editarGrupoRutaController.MSG.borrarOK = Grupo de linha excluido com sucesso. #Relatórios +#Relatório IRK +relatorioIRKController.window.title= Relatório Indice IRK #Resumo de linhas relatorioResumoLinhasController.window.title = Relatório Resumo de Linhas @@ -653,7 +656,28 @@ relatorioLinhasHorarioController.lblSimplificado.value = Emite relatório Simpli relatorioLinhasHorarioController.lbHoraSaidaInicial.value = Hora Saída relatorioLinhasHorarioController.lbHoraSaidaFinal.value = à relatorioLinhasHorarioController.chKIda.value = Linha Ida -relatorioLinhasHorarioController.chKVolta.value = Linha Volta +relatorioLinhasHorarioController.chKVolta.value = Linha Volta + +#Relatório Indice IRK +relatorioIndiceIRKController.window.title = Relatório Indice IRK +relatorioIndiceIRKController.lbDataIni.value = Data Inicial Viagem +relatorioIndiceIRKController.lbDataFin.value = Data Final Viagem +relatorioIndiceIRKController.lbEmpresa.label = Empresa +relatorioIndiceIRKController.lbGrupoRuta.label = Grupo de Linhas +relatorioIndiceIRKController.lbLinha.label = Linha +relatorioIndiceIRKController.lbServico.label = Servico +relatorioIndiceIRKController.lbNumRuta.label = Num. Linha +relatorioIndiceIRKController.lbPrefixo.label = Prefixo +relatorioIndiceIRKController.lbOrgao.label = Orgão Concedente +relatorioIndiceIRKController.lbDataCorrida.value = Data +relatorioIndiceIRKController.btnPesquisa.label = Pesquisar +relatorioIndiceIRKController.btnLimpar.label = Limpar +relatorioIndiceIRKController.horaSaida.label = Hora +relatorioIndiceIRKController.origem.destino.label = Origem x Destino +relatorioIndiceIRKController.rutaId.label = Cód Linha +relatorioIndiceIRKController.rdTodos.label = Todos +relatorioIndiceIRKController.lbHoraSaidaInicial.value = Hora Saída +relatorioIndiceIRKController.lbHoraSaidaFinal.value = à #Relatorio Trecho Vendido relatorioTrechoVendidoController.lbDataIni.value = Data Inicial @@ -1663,6 +1687,7 @@ editarEmpresaController.lbAtivarRateioComissaoGrupoLinha.value = Ativar rateio d editarEmpresaController.lbUsarGrupoLinhas.value = Grupo de Linhas editarEmpresaController.lbUsarGrupoLinhasLinhaOriginal.value = Usar o Grupo de Linhas da linha original editarEmpresaController.lbUsarGrupoLinhasAproveitamentoSeletivo.value = Usar o Grupo de Linhas do Aproveitamento Seletivo +editarEmpresaController.irkPdarao.label = IRK Mínimo Padrão #Empresa Imposto editarEmpresaImpostoController.window.title = Configuração de Imposto por Empresa/Estado diff --git a/web/gui/catalogos/editarEmpresa.zul b/web/gui/catalogos/editarEmpresa.zul index 28b250345..b9304d0ca 100644 --- a/web/gui/catalogos/editarEmpresa.zul +++ b/web/gui/catalogos/editarEmpresa.zul @@ -924,6 +924,16 @@ + + + + + + + + diff --git a/web/gui/relatorios/filtroRelatorioIRK.zul b/web/gui/relatorios/filtroRelatorioIRK.zul new file mode 100644 index 000000000..c119166b0 --- /dev/null +++ b/web/gui/relatorios/filtroRelatorioIRK.zul @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +