diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/SisdapHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/SisdapHibernateDAO.java index 60c6a637c..7f7ce50e5 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/SisdapHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/SisdapHibernateDAO.java @@ -2,9 +2,13 @@ package com.rjconsultores.ventaboletos.dao.hibernate; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.Date; +import java.util.HashMap; import java.util.List; +import org.apache.commons.lang.math.NumberUtils; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.transform.AliasToBeanResultTransformer; @@ -18,67 +22,131 @@ import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.SisdapDAO; import com.rjconsultores.ventaboletos.relatorios.MovimentoLinha; import com.rjconsultores.ventaboletos.relatorios.MovimentoSecoes; +import com.rjconsultores.ventaboletos.relatorios.PrefixoAntt; @Repository("sisdapDAO") public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO { + private static String HYPHEN = "-"; + @Autowired public SisdapHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { setSessionFactory(factory); } + @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public List getMovimentoLinhas(Date fecInicio, Date fecFinal, Integer empresaId) { - List movimentoLinhas = new ArrayList(); - SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + List list = consultaMovimentoLinhas(fecInicio, fecFinal, empresaId); + List result = new ArrayList(); + + for (MovimentoLinha movimentoLinha : list) { + boolean insert = agrupaMovimentoLinhas(result, movimentoLinha); + if (insert) + result.add(movimentoLinha); + } + + List periodos = new ArrayList(); + for (MovimentoLinha movimentoLinha : result) { + String periodo = movimentoLinha.getAno() + HYPHEN + movimentoLinha.getMes(); + if (!periodos.contains(periodo)) { + periodos.add(periodo); + } + } + + List prefixos = buscaPrefixoEmpresa(empresaId); + + HashMap> periodosPrefixos = new HashMap>(); + for (String pd : periodos) { + periodosPrefixos.put(pd, prefixos); + } + + for (MovimentoLinha movimentoLinha : result) { + String periodo = movimentoLinha.getAno() + HYPHEN + movimentoLinha.getMes(); + + PrefixoAntt prefixoAntt = new PrefixoAntt(); + prefixoAntt.setAntt(movimentoLinha.getAntt()); + prefixoAntt.setPrefixo(movimentoLinha.getPrefixo()); + + if (periodosPrefixos.get(periodo).contains(prefixoAntt)) { + periodosPrefixos.get(periodo).remove(prefixoAntt); + } + } + + for (String key : periodosPrefixos.keySet()) { + String[] periodo = key.split(HYPHEN); + Integer ano = Integer.parseInt(periodo[0]); + Integer mes = Integer.parseInt(periodo[1]); + + for (PrefixoAntt prefixoAntt : periodosPrefixos.get(key)) { + MovimentoLinha linha = new MovimentoLinha(); + linha.setAno(ano); + linha.setMes(mes); + linha.setAntt(prefixoAntt.getAntt()); + linha.setPrefixo(prefixoAntt.getPrefixo()); + linha.setLugaresIda(NumberUtils.INTEGER_ZERO); + linha.setLugaresVolta(NumberUtils.INTEGER_ZERO); + linha.setViagensIda(NumberUtils.INTEGER_ZERO); + linha.setViagensVolta(NumberUtils.INTEGER_ZERO); + + result.add(linha); + } + } + + Collections.sort(result, new Comparator() { + public int compare(Object o1, Object o2) { + MovimentoLinha c1 = (MovimentoLinha) o1; + MovimentoLinha c2 = (MovimentoLinha) o2; + + int result = c1.getAno().compareTo(c2.getAno()); + if (result == 0) { + result = c1.getMes().compareTo(c2.getMes()); + } + if (result == 0) { + result = c1.getAntt().compareToIgnoreCase(c2.getAntt()); + } + if (result == 0) { + return c1.getPrefixo().compareToIgnoreCase(c2.getPrefixo()); + } + return result; + } + }); + + List movimentoLinhas = new ArrayList(); + movimentoLinhas.add("empresa;prefixo;mes;ano;viagem_ida;viagem_volta;lugar_ida;lugar_volta"); + for (MovimentoLinha movimentoLinha : result) { + movimentoLinhas.add(movimentoLinha.toString()); + } + + return movimentoLinhas; + } + + private List consultaMovimentoLinhas(Date fecInicio, Date fecFinal, Integer empresaId) { + + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); StringBuilder sb = new StringBuilder(); - sb.append("select distinct e.codantt antt, "); - sb.append(" r.prefixo prefixo, "); - sb.append(" to_char(c.feccorrida, 'MM') mes, "); - sb.append(" to_char(c.feccorrida, 'yyyy') ano, "); - sb.append(" nvl(case r.indsentidoida "); - sb.append(" when 1 then count(r.prefixo) "); - sb.append(" end, 0) viagensida, "); - sb.append(" nvl(case r.indsentidoida "); - sb.append(" when 0 then count(r.prefixo) "); - sb.append(" end, 0) viagensvolta, "); - sb.append(" nvl(case r.indsentidoida "); - sb.append(" when 1 then sum(da.cantasientos) "); - sb.append(" end, 0) lugaresida, "); - sb.append(" nvl(case r.indsentidoida "); - sb.append(" when 0 then sum(da.cantasientos) "); - sb.append(" end, 0) lugaresvolta "); - sb.append("from ruta_empresa re "); - sb.append(" left join marca m "); - sb.append(" on m.marca_id = re.empresa_id "); - sb.append(" left join empresa e "); - sb.append(" on m.empresa_id = e.empresa_id "); - sb.append(" left join ruta r "); - sb.append(" on re.ruta_id = r.ruta_id "); - sb.append(" left join corrida c "); - sb.append(" on c.ruta_id = r.ruta_id "); - sb.append(" left outer join rol_operativo ro "); - sb.append(" on c.roloperativo_id = ro.roloperativo_id "); - sb.append(" left outer join diagrama_autobus da "); - sb.append(" on da.diagramaautobus_id = ro.diagramaautobus_id "); - sb.append("where m.marca_id = :empresaId "); - sb.append(" and r.orgaoconcedente_id = 3 "); - sb.append(" and e.codantt is not null "); - sb.append(" and c.feccorrida between to_date(:fecInicio, 'DD/MM/YYYY') and "); - sb.append(" to_date(:fecFinal, 'DD/MM/YYYY') "); - sb.append("group by e.codantt, "); - sb.append(" r.prefixo, "); - sb.append(" r.indsentidoida, "); - sb.append(" to_char(c.feccorrida, 'MM'), "); - sb.append(" to_char(c.feccorrida, 'yyyy') "); - sb.append("order by mes, "); - sb.append(" ano, "); - sb.append(" e.codantt, "); - sb.append(" r.prefixo, "); - sb.append(" viagensida, "); - sb.append(" viagensvolta "); + sb.append("select e.codantt antt, r.prefixo prefixo, "); + sb.append(" to_char(c.feccorrida, 'MM') mes, to_char(c.feccorrida, 'yyyy') ano, "); + sb.append(" nvl(case r.indsentidoida when 1 then count(r.prefixo) end, 0) viagensida, "); + sb.append(" nvl(case r.indsentidoida when 0 then count(r.prefixo) end, 0) viagensvolta, "); + sb.append(" nvl(case r.indsentidoida when 1 then sum(da.cantasientos) end, 0) lugaresida, "); + sb.append(" nvl(case r.indsentidoida when 0 then sum(da.cantasientos) end, 0) lugaresvolta "); + sb.append("from ruta_empresa re "); + sb.append(" left join marca m on m.marca_id = re.empresa_id "); + sb.append(" left join empresa e on m.empresa_id = e.empresa_id "); + sb.append(" left join ruta r on re.ruta_id = r.ruta_id "); + sb.append(" left join corrida c on c.ruta_id = r.ruta_id "); + sb.append(" left outer join rol_operativo ro on c.roloperativo_id = ro.roloperativo_id "); + sb.append(" left outer join diagrama_autobus da on da.diagramaautobus_id = ro.diagramaautobus_id "); + sb.append("where m.marca_id = :empresaId and re.activo = 1 and r.activo = 1 "); + sb.append(" and r.orgaoconcedente_id = 3 and e.codantt is not null "); + sb.append(" and c.feccorrida between to_date(:fecInicio, 'DD/MM/YYYY') and "); + sb.append(" to_date(:fecFinal, 'DD/MM/YYYY') "); + sb.append("group by e.codantt, r.prefixo, r.indsentidoida, "); + sb.append(" to_char(c.feccorrida, 'MM'), to_char(c.feccorrida, 'yyyy') "); + sb.append("order by mes, ano, e.codantt, r.prefixo, viagensida, viagensvolta "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("antt", StringType.INSTANCE) @@ -95,23 +163,30 @@ public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO query.setParameter("fecFinal", sdf.format(fecFinal)); query.setParameter("empresaId", empresaId); - List list = query.list(); + return query.list(); + } - movimentoLinhas.add("empresa;prefixo;mes;ano;viagem_ida;viagem_volta;lugar_ida;lugar_volta"); + private List buscaPrefixoEmpresa(Integer empresaId) { - List result = new ArrayList(); + StringBuilder sb = new StringBuilder(); + sb.append(" select e.codantt antt, r.prefixo prefixo "); + sb.append(" from ruta_empresa re "); + sb.append(" left join marca m on m.marca_id = re.empresa_id "); + sb.append(" left join empresa e on m.empresa_id = e.empresa_id "); + sb.append(" left join ruta r on re.ruta_id = r.ruta_id "); + sb.append(" where re.empresa_id = :empresaId and r.orgaoconcedente_id = 3 "); + sb.append(" and re.activo = 1 and r.activo = 1 "); + sb.append(" group by e.codantt, r.prefixo "); + sb.append(" order by e.codantt, r.prefixo "); - for (MovimentoLinha movimentoLinha : list) { - boolean insert = agrupaMovimentoLinhas(result, movimentoLinha); - if (insert) - result.add(movimentoLinha); - } + Query query = getSession().createSQLQuery(sb.toString()) + .addScalar("antt", StringType.INSTANCE) + .addScalar("prefixo", StringType.INSTANCE); + query.setResultTransformer(new AliasToBeanResultTransformer(PrefixoAntt.class)); - for (MovimentoLinha movimentoLinha : result) { - movimentoLinhas.add(movimentoLinha.toString()); - } + query.setParameter("empresaId", empresaId); - return movimentoLinhas; + return query.list(); } private boolean agrupaMovimentoLinhas(List resul, MovimentoLinha movimentoLinha) { @@ -140,101 +215,180 @@ public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO return true; } + @SuppressWarnings({ "rawtypes", "unchecked" }) @Override public List getMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) { + + List list = consultaMovimentoSecoes(fecInicio, fecFinal, empresaId); + + List result = new ArrayList(); + + for (MovimentoSecoes ms : list) { + boolean insert = agrupaMovimentoSecoes(result, ms); + if (insert) + result.add(ms); + } + + List periodos = new ArrayList(); + for (MovimentoSecoes ms : result) { + String periodo = ms.getAno() + HYPHEN + ms.getMes(); + if (!periodos.contains(periodo)) { + periodos.add(periodo); + } + } + + List prefixos = buscaPrefixoEmpresaOrigenDestino(empresaId); + + HashMap> periodosPrefixos = new HashMap>(); + for (String pd : periodos) { + periodosPrefixos.put(pd, prefixos); + } + + for (MovimentoSecoes ms : result) { + String periodo = ms.getAno() + HYPHEN + ms.getMes(); + + PrefixoAntt prefixoAntt = new PrefixoAntt(); + prefixoAntt.setAntt(ms.getAntt()); + prefixoAntt.setPrefixo(ms.getPrefixo()); + prefixoAntt.setLocalDestino(ms.getLocalDestino()); + prefixoAntt.setLocalOrigem(ms.getLocalOrigem()); + + if (periodosPrefixos.get(periodo).contains(prefixoAntt)) { + periodosPrefixos.get(periodo).remove(prefixoAntt); + } + } + + for (String key : periodosPrefixos.keySet()) { + String[] periodo = key.split(HYPHEN); + Integer ano = Integer.parseInt(periodo[0]); + Integer mes = Integer.parseInt(periodo[1]); + + for (PrefixoAntt prefixoAntt : periodosPrefixos.get(key)) { + MovimentoSecoes ms = new MovimentoSecoes(); + ms.setAno(ano); + ms.setMes(mes); + + ms.setAntt(prefixoAntt.getAntt()); + ms.setPrefixo(prefixoAntt.getPrefixo()); + ms.setLocalDestino(prefixoAntt.getLocalDestino()); + ms.setLocalOrige(prefixoAntt.getLocalOrigem()); + + ms.setDescontoIdosoIda(NumberUtils.INTEGER_ZERO); + ms.setDescontoIdosoVolta(NumberUtils.INTEGER_ZERO); + ms.setGratuidadeIdosoIda(NumberUtils.INTEGER_ZERO); + ms.setGratuidadeIdosoVolta(NumberUtils.INTEGER_ZERO); + ms.setGratuidadePasseLivreIda(NumberUtils.INTEGER_ZERO); + ms.setGratuidadePasseLivreVolta(NumberUtils.INTEGER_ZERO); + ms.setPassageirosIda(NumberUtils.INTEGER_ZERO); + ms.setPassageirosVolta(NumberUtils.INTEGER_ZERO); + + result.add(ms); + } + } + + Collections.sort(result, new Comparator() { + public int compare(Object o1, Object o2) { + MovimentoSecoes c1 = (MovimentoSecoes) o1; + MovimentoSecoes c2 = (MovimentoSecoes) o2; + + int result = c1.getAno().compareTo(c2.getAno()); + if (result == 0) { + result = c1.getMes().compareTo(c2.getMes()); + } + if (result == 0) { + result = c1.getAntt().compareToIgnoreCase(c2.getAntt()); + } + if (result == 0) { + return c1.getPrefixo().compareToIgnoreCase(c2.getPrefixo()); + } + if (result == 0) { + return c1.getLocalOrigem().compareToIgnoreCase(c2.getLocalOrigem()); + } + if (result == 0) { + return c1.getLocalDestino().compareToIgnoreCase(c2.getLocalDestino()); + } + return result; + } + }); + List movimentosSecoes = new ArrayList(); + movimentosSecoes.add("empresa;prefixo;local_origem;local_destino;mes;ano;passageiro_ida;passageiro_volta;gratuidade_ida" + + ";gratuidade_volta;idoso_ida;idoso_volta;desconto_ida;desconto_volta "); + + for (MovimentoSecoes ms : result) { + movimentosSecoes.add(ms.toString()); + } + + return movimentosSecoes; + } + + private List consultaMovimentoSecoes(Date fecInicio, Date fecFinal, Integer empresaId) { + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); StringBuilder sb = new StringBuilder(); - sb.append("SELECT DISTINCT e.codantt antt, "); - sb.append(" r.prefixo prefixo, "); - sb.append(" To_char(c.feccorrida, 'MM') mes, "); - sb.append(" To_char(c.feccorrida, 'yyyy') ano, "); - sb.append(" CASE r.indsentidoida "); - sb.append(" WHEN 1 THEN po.codantt "); - sb.append(" ELSE pd.codantt "); - sb.append(" END localOrigem, "); - sb.append(" CASE r.indsentidoida "); - sb.append(" WHEN 1 THEN pd.codantt "); - sb.append(" ELSE po.codantt "); - sb.append(" END localDestino, "); - sb.append(" Nvl(CASE r.indsentidoida "); - sb.append(" WHEN 1 THEN Count(*) "); - sb.append(" END, 0) passageirosIda, "); - sb.append(" Nvl(CASE r.indsentidoida "); - sb.append(" WHEN 0 THEN Count(*) "); - sb.append(" END, 0) passageirosVolta, "); - sb.append(" Nvl(CASE "); - sb.append(" WHEN r.indsentidoida = 1 "); - sb.append(" AND b.categoria_id IN (SELECT categoria_id "); - sb.append(" FROM categoria "); - sb.append(" WHERE grupocategoria_id IN ( 1, 2 )) THEN Count(* "); - sb.append(" ) "); - sb.append(" END, 0) gratuidadePasseLivreIda, "); - sb.append(" Nvl(CASE "); - sb.append(" WHEN r.indsentidoida = 0 "); - sb.append(" AND b.categoria_id IN (SELECT categoria_id "); - sb.append(" FROM categoria "); - sb.append(" WHERE grupocategoria_id IN ( 1, 2 )) THEN Count(* "); - sb.append(" ) "); - sb.append(" END, 0) gratuidadePasseLivreVolta, "); - sb.append(" Nvl(CASE "); - sb.append(" WHEN r.indsentidoida = 1 "); - sb.append(" AND b.categoria_id IN (SELECT categoria_id "); - sb.append(" FROM categoria "); - sb.append(" WHERE grupocategoria_id = 1) THEN Count(*) "); - sb.append(" END, 0) gratuidadeIdosoIda, "); - sb.append(" Nvl(CASE "); - sb.append(" WHEN r.indsentidoida = 0 "); - sb.append(" AND b.categoria_id IN (SELECT categoria_id "); - sb.append(" FROM categoria "); - sb.append(" WHERE grupocategoria_id = 1) THEN Count(*) "); - sb.append(" END, 0) gratuidadeIdosoVolta, "); - sb.append(" Nvl(CASE "); - sb.append(" WHEN r.indsentidoida = 1 "); - sb.append(" AND b.categoria_id IN (SELECT categoria_id "); - sb.append(" FROM categoria "); - sb.append(" WHERE grupocategoria_id = 3) THEN Count(*) "); - sb.append(" END, 0) descontoIdosoIda, "); - sb.append(" Nvl(CASE "); - sb.append(" WHEN r.indsentidoida = 0 "); - sb.append(" AND b.categoria_id IN (SELECT categoria_id "); - sb.append(" FROM categoria "); - sb.append(" WHERE grupocategoria_id = 3) THEN Count(*) "); - sb.append(" END, 0) descontoIdosoVolta "); - sb.append("FROM corrida c "); - sb.append(" left join boleto b "); - sb.append(" ON c.corrida_id = b.corrida_id "); - sb.append(" AND c.feccorrida = b.feccorrida "); - sb.append(" left join ruta r "); - sb.append(" ON r.ruta_id = c.ruta_id "); - sb.append(" left join parada po "); - sb.append(" ON po.parada_id = b.origen_id "); - sb.append(" left join parada pd "); - sb.append(" ON pd.parada_id = b.destino_id "); - sb.append(" left join empresa e "); - sb.append(" ON e.empresa_id = b.empresacorrida_id "); - sb.append("WHERE r.orgaoconcedente_id = 3 "); - sb.append(" AND b.numasiento IS NOT NULL "); - sb.append(" AND b.motivocancelacion_id IS NULL "); - sb.append(" AND e.codantt IS NOT NULL "); - sb.append(" AND e.empresa_id = :empresaId "); - sb.append(" AND c.feccorrida BETWEEN To_date(:fecInicio, 'DD/MM/YYYY') AND "); - sb.append(" To_date(:fecFinal, 'DD/MM/YYYY') "); - sb.append("GROUP BY e.codantt, "); + sb.append("select e.codantt antt, "); + sb.append(" r.prefixo prefixo, "); + sb.append(" to_char(c.feccorrida, 'MM') mes, "); + sb.append(" to_char(c.feccorrida, 'yyyy') ano, "); + sb.append(" case r.indsentidoida when 1 then po.codantt else pd.codantt end localorigem, "); + sb.append(" case r.indsentidoida when 1 then pd.codantt else po.codantt end localdestino, "); + sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id is null) "); + sb.append(" then count(*) end, 0) passageirosida, "); + sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id is null) "); + sb.append(" then count(*) end, 0) passageirosvolta, "); + sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 2 )) "); + sb.append(" then count(*) end, 0) gratuidadepasselivreida, "); + sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 2 )) "); + sb.append(" then count(*) end, 0) gratuidadepasselivrevolta, "); + sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 1 )) "); + sb.append(" then count(*) end, 0) gratuidadeidosoida, "); + sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 1 )) "); + sb.append(" then count(*) end, 0) gratuidadeidosovolta, "); + sb.append(" nvl(case when r.indsentidoida = 1 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 3 )) "); + sb.append(" then count(*) end, 0) descontoidosoida, "); + sb.append(" nvl(case when r.indsentidoida = 0 and b.categoria_id in "); + sb.append(" (select categoria_id from categoria where grupocategoria_id in ( 3 )) "); + sb.append(" then count(*) end, 0) descontoidosovolta "); + sb.append("from ruta_empresa re "); + sb.append(" left join marca m on m.marca_id = re.empresa_id "); + sb.append(" left join empresa e on m.empresa_id = e.empresa_id "); + sb.append(" left join ruta r on re.ruta_id = r.ruta_id "); + sb.append(" left join corrida c on c.ruta_id = r.ruta_id "); + sb.append(" left outer join boleto b on c.corrida_id = b.corrida_id "); + sb.append(" and c.feccorrida = b.feccorrida "); + sb.append(" left outer join parada po on po.parada_id = b.origen_id "); + sb.append(" left outer join parada pd on pd.parada_id = b.destino_id "); + sb.append("where m.marca_id = :empresaId "); + sb.append(" and re.activo = 1 "); + sb.append(" and r.activo = 1 "); + sb.append(" and r.orgaoconcedente_id = 3 "); + sb.append(" and b.numasiento is not null "); + sb.append(" and b.motivocancelacion_id is null "); + sb.append(" and e.codantt is not null "); + sb.append(" and c.feccorrida between to_date(:fecInicio, 'DD/MM/YYYY') and "); + sb.append(" to_date(:fecFinal, 'DD/MM/YYYY') "); + sb.append("group by e.codantt, "); sb.append(" r.prefixo, "); - sb.append(" To_char(c.feccorrida, 'MM'), "); - sb.append(" To_char(c.feccorrida, 'yyyy'), "); + sb.append(" to_char(c.feccorrida, 'MM'), "); + sb.append(" to_char(c.feccorrida, 'yyyy'), "); sb.append(" po.codantt, "); sb.append(" pd.codantt, "); sb.append(" r.indsentidoida, "); sb.append(" b.categoria_id "); - sb.append("ORDER BY mes, "); + sb.append("order by mes, "); sb.append(" ano, "); sb.append(" e.codantt, "); sb.append(" r.prefixo, "); - sb.append(" localOrigem, "); - sb.append(" localDestino "); + sb.append(" localorigem, "); + sb.append(" localdestino "); Query query = getSession().createSQLQuery(sb.toString()) .addScalar("antt", StringType.INSTANCE) @@ -258,24 +412,95 @@ public class SisdapHibernateDAO extends HibernateDaoSupport implements SisdapDAO query.setParameter("fecFinal", sdf.format(fecFinal)); query.setParameter("empresaId", empresaId); - List list = query.list(); + return query.list(); + } - movimentosSecoes.add("empresa;prefixo;local_origem;local_destino;mes;ano;passageiro_ida;passageiro_volta;gratuidade_ida" + - ";gratuidade_volta;idoso_ida;idoso_volta;desconto_ida;desconto_volta "); + private List buscaPrefixoEmpresaOrigenDestino(Integer empresaId) { - List result = new ArrayList(); + StringBuilder sb = new StringBuilder(); + sb.append("SELECT e.codantt antt, "); + sb.append(" ru.prefixo prefixo, "); + sb.append(" po.codantt localOrigem, "); + sb.append(" pd.codantt localDestino "); + sb.append("FROM ruta_empresa re "); + sb.append(" left join marca m ON m.marca_id = re.empresa_id "); + sb.append(" left join empresa e ON m.empresa_id = e.empresa_id "); + sb.append(" left join ruta ru ON re.ruta_id = ru.ruta_id, "); + sb.append(" parada po, "); + sb.append(" parada pd "); + sb.append("WHERE re.empresa_id = :empresaId "); + sb.append(" AND ru.orgaoconcedente_id = 3 "); + sb.append(" AND re.activo = 1 AND ru.activo = 1 "); + sb.append(" AND po.parada_id = (SELECT t.origen_id FROM tramo t "); + sb.append(" WHERE t.tramo_id = "); + sb.append(" (SELECT rs.tramo_id FROM ruta r "); + sb.append(" left join ruta_secuencia rs ON rs.ruta_id = r.ruta_id "); + sb.append(" WHERE r.prefixo IN ( ru.prefixo ) "); + sb.append(" AND r.indsentidoida = 1 "); + sb.append(" AND r.activo = 1 "); + sb.append(" AND rs.activo = 1 "); + sb.append(" AND ROWNUM <= 1 "); + sb.append(" AND rs.numsecuencia IN "); + sb.append(" (SELECT Min(rs.numsecuencia) "); + sb.append(" FROM ruta r "); + sb.append(" left join ruta_secuencia rs "); + sb.append(" ON rs.ruta_id = "); + sb.append(" r.ruta_id "); + sb.append(" WHERE "); + sb.append(" r.prefixo IN ( ru.prefixo ) "); + sb.append(" AND r.indsentidoida = 1 "); + sb.append(" AND r.activo = 1 "); + sb.append(" AND rs.activo = 1) "); + sb.append(" GROUP BY rs.tramo_id) "); + sb.append(" AND ROWNUM <= 1) "); + sb.append(" AND pd.parada_id = (SELECT t.destino_id "); + sb.append(" FROM tramo t "); + sb.append(" WHERE t.tramo_id = (SELECT rs.tramo_id "); + sb.append(" FROM ruta r "); + sb.append(" left join ruta_secuencia "); + sb.append(" rs "); + sb.append(" ON rs.ruta_id = "); + sb.append(" r.ruta_id "); + sb.append(" WHERE r.prefixo IN "); + sb.append(" ( ru.prefixo ) "); + sb.append(" AND r.indsentidoida = 1 "); + sb.append(" AND r.activo = 1 "); + sb.append(" AND rs.activo = 1 "); + sb.append(" AND ROWNUM <= 1 "); + sb.append(" AND rs.numsecuencia IN "); + sb.append(" (SELECT Max(rs.numsecuencia) "); + sb.append(" FROM ruta r "); + sb.append(" left join ruta_secuencia rs "); + sb.append(" ON rs.ruta_id = "); + sb.append(" r.ruta_id "); + sb.append(" WHERE "); + sb.append(" r.prefixo IN ( ru.prefixo ) "); + sb.append(" AND r.indsentidoida = 1 "); + sb.append(" AND r.activo = 1 "); + sb.append(" AND rs.activo = 1) "); + sb.append(" GROUP BY rs.tramo_id)) "); + sb.append("GROUP BY e.codantt, "); + sb.append(" ru.prefixo, "); + sb.append(" po.descparada, "); + sb.append(" po.codantt, "); + sb.append(" pd.descparada, "); + sb.append(" pd.codantt "); + sb.append("ORDER BY e.codantt, "); + sb.append(" ru.prefixo, "); + sb.append(" po.descparada, "); + sb.append(" po.codantt "); - for (MovimentoSecoes ms : list) { - boolean insert = agrupaMovimentoSecoes(result, ms); - if (insert) - result.add(ms); - } + Query query = getSession().createSQLQuery(sb.toString()) + .addScalar("antt", StringType.INSTANCE) + .addScalar("prefixo", StringType.INSTANCE) + .addScalar("localOrigem", StringType.INSTANCE) + .addScalar("localDestino", StringType.INSTANCE); + query.setResultTransformer(new AliasToBeanResultTransformer(PrefixoAntt.class)); - for (MovimentoSecoes ms : result) { - movimentosSecoes.add(ms.toString()); - } + query.setParameter("empresaId", empresaId); + + return query.list(); - return movimentosSecoes; } private boolean agrupaMovimentoSecoes(List resul, MovimentoSecoes movimentoSecao) { diff --git a/src/com/rjconsultores/ventaboletos/relatorios/MovimentoSecoes.java b/src/com/rjconsultores/ventaboletos/relatorios/MovimentoSecoes.java index 4c42621e5..039b0570b 100644 --- a/src/com/rjconsultores/ventaboletos/relatorios/MovimentoSecoes.java +++ b/src/com/rjconsultores/ventaboletos/relatorios/MovimentoSecoes.java @@ -131,7 +131,7 @@ public class MovimentoSecoes { @Override public String toString() { - return antt + ";" + prefixo + ";" + mes + ";" + ano + ";" + localOrigem + ";" + localDestino + ";" + passageirosIda + ";" + passageirosVolta + ";" + gratuidadePasseLivreIda + ";" + gratuidadePasseLivreVolta + ";" + gratuidadeIdosoIda + ";" + gratuidadeIdosoVolta + ";" + descontoIdosoIda + ";" + descontoIdosoVolta; + return antt + ";" + prefixo + ";" + localOrigem + ";" + localDestino + ";" + mes + ";" + ano + ";" + passageirosIda + ";" + passageirosVolta + ";" + gratuidadePasseLivreIda + ";" + gratuidadePasseLivreVolta + ";" + gratuidadeIdosoIda + ";" + gratuidadeIdosoVolta + ";" + descontoIdosoIda + ";" + descontoIdosoVolta; } } diff --git a/src/com/rjconsultores/ventaboletos/relatorios/PrefixoAntt.java b/src/com/rjconsultores/ventaboletos/relatorios/PrefixoAntt.java new file mode 100644 index 000000000..969f9e907 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/relatorios/PrefixoAntt.java @@ -0,0 +1,84 @@ +package com.rjconsultores.ventaboletos.relatorios; + +public class PrefixoAntt { + private String antt; + private String prefixo; + private String localOrigem; + private String localDestino; + + public String getAntt() { + return antt; + } + + public void setAntt(String antt) { + this.antt = antt; + } + + public String getPrefixo() { + return prefixo; + } + + public void setPrefixo(String prefixo) { + this.prefixo = prefixo; + } + + public String getLocalOrigem() { + return localOrigem; + } + + public void setLocalOrigem(String localOrigem) { + this.localOrigem = localOrigem; + } + + public String getLocalDestino() { + return localDestino; + } + + public void setLocalDestino(String localDestino) { + this.localDestino = localDestino; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((antt == null) ? 0 : antt.hashCode()); + result = prime * result + ((localDestino == null) ? 0 : localDestino.hashCode()); + result = prime * result + ((localOrigem == null) ? 0 : localOrigem.hashCode()); + result = prime * result + ((prefixo == null) ? 0 : prefixo.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PrefixoAntt other = (PrefixoAntt) obj; + if (antt == null) { + if (other.antt != null) + return false; + } else if (!antt.equals(other.antt)) + return false; + if (localDestino == null) { + if (other.localDestino != null) + return false; + } else if (!localDestino.equals(other.localDestino)) + return false; + if (localOrigem == null) { + if (other.localOrigem != null) + return false; + } else if (!localOrigem.equals(other.localOrigem)) + return false; + if (prefixo == null) { + if (other.prefixo != null) + return false; + } else if (!prefixo.equals(other.prefixo)) + return false; + return true; + } + +}