diff --git a/src/com/rjconsultores/ventaboletos/dao/RutaDAO.java b/src/com/rjconsultores/ventaboletos/dao/RutaDAO.java index 92bf33de5..23199974f 100644 --- a/src/com/rjconsultores/ventaboletos/dao/RutaDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/RutaDAO.java @@ -60,4 +60,6 @@ public interface RutaDAO extends GenericDAO { public List buscarRutasPorEmpresaOrgaoConcedente(Empresa empresa, OrgaoConcedente orgao); + public void updateAsientosVendibles(Ruta ruta, Tramo viejoTramo, Tramo nuevoTramo); + } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaHibernateDAO.java index 31ff749a1..74a120c9a 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/RutaHibernateDAO.java @@ -4,6 +4,7 @@ */ package com.rjconsultores.ventaboletos.dao.hibernate; +import java.util.ArrayList; import java.util.List; import org.hibernate.Criteria; @@ -68,8 +69,8 @@ public class RutaHibernateDAO extends GenericHibernateDAO impleme c.addOrder(Order.asc("descruta")); - List l =c.list(); - for(Ruta r : l){ + List l = c.list(); + for (Ruta r : l) { r.getLsRutaEmpresa(); } return l; @@ -229,4 +230,80 @@ public class RutaHibernateDAO extends GenericHibernateDAO impleme return c.list(); } + @Override + public void updateAsientosVendibles(Ruta ruta, Tramo viejoTramo, Tramo nuevoTramo) { + + try { + getSession().flush(); + + List qryList = new ArrayList(); + StringBuilder qry = new StringBuilder(" update RUTA_COMBINACION set TRAMO_ID = :nuevoTramo, "); + qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta "); + qry.append(" AND ACTIVO = 1 "); + qryList.add(qry.toString()); + + qry = new StringBuilder(" update RUTA_SECUENCIA set TRAMO_ID = :nuevoTramo, "); + qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta "); + qry.append(" AND ACTIVO = 1 "); + qryList.add(qry.toString()); + + for (String strQuery : qryList) { + Query query = getSession().createSQLQuery(strQuery); + query.setInteger("viejoTramo", viejoTramo.getTramoId()); + query.setInteger("nuevoTramo", nuevoTramo.getTramoId()); + query.setInteger("usuario", nuevoTramo.getUsuarioId()); + query.setInteger("ruta", ruta.getRutaId()); + query.executeUpdate(); + } + + qryList = new ArrayList(); + qry = new StringBuilder(" update TARIFA set TRAMO_ID = :nuevoTramo, "); + qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario, ORIGEN_ID =:origen, DESTINO_ID = :destino "); + qry.append(" where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta "); + qry.append(" AND ACTIVO = 1 "); + qryList.add(qry.toString()); + + qry = new StringBuilder(" update TARIFA_OFICIAL set TRAMO_ID = :nuevoTramo, "); + qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario, ORIGEN_ID =:origen, DESTINO_ID = :destino "); + qry.append(" where TRAMO_ID = :viejoTramo and RUTA_ID = :ruta "); + qry.append(" AND ACTIVO = 1 "); + qryList.add(qry.toString()); + + qry = new StringBuilder(" update CORRIDA_TRAMO set TRAMO_ID = :nuevoTramo, "); + qry.append(" FECMODIF = SYSDATE, USUARIO_ID = :usuario, ORIGEN_ID =:origen, DESTINO_ID = :destino "); + qry.append(" where TRAMO_ID = :viejoTramo and "); + qry.append(" CORRIDA_ID in (select CORRIDA_ID from CORRIDA_CTRL where RUTA_ID = :ruta ) "); + qry.append(" AND ACTIVO = 1 "); + qryList.add(qry.toString()); + + for (String strQuery : qryList) { + Query query = getSession().createSQLQuery(strQuery); + query.setInteger("viejoTramo", viejoTramo.getTramoId()); + query.setInteger("nuevoTramo", nuevoTramo.getTramoId()); + query.setInteger("origen", nuevoTramo.getOrigem().getParadaId()); + query.setInteger("destino", nuevoTramo.getDestino().getParadaId()); + query.setInteger("usuario", nuevoTramo.getUsuarioId()); + query.setInteger("ruta", ruta.getRutaId()); + query.executeUpdate(); + } + + qry = new StringBuilder(" update CORRIDA set FECMODIF = SYSDATE, USUARIO_ID = :usuario, "); + qry.append(" ORIGEN_ID = (case when ORIGEN_ID = :viejaOrigen then :nuevaOrigen else ORIGEN_ID end ), "); + qry.append(" DESTINO_ID = (case when DESTINO_ID = :viejoDestino then :nuevoDestino else DESTINO_ID end ) "); + qry.append(" where RUTA_ID = :ruta "); + + Query query = getSession().createSQLQuery(qry.toString()); + query.setInteger("viejaOrigen", viejoTramo.getOrigem().getParadaId()); + query.setInteger("nuevaOrigen", nuevoTramo.getOrigem().getParadaId()); + query.setInteger("viejoDestino", viejoTramo.getOrigem().getParadaId()); + query.setInteger("nuevoDestino", nuevoTramo.getDestino().getParadaId()); + query.setInteger("usuario", nuevoTramo.getUsuarioId()); + query.setInteger("ruta", ruta.getRutaId()); + query.executeUpdate(); + + } catch (final Exception ex) { + throw new RuntimeException("", ex); + } + + } } diff --git a/src/com/rjconsultores/ventaboletos/service/RutaService.java b/src/com/rjconsultores/ventaboletos/service/RutaService.java index 98f3322fa..bf5150ab5 100644 --- a/src/com/rjconsultores/ventaboletos/service/RutaService.java +++ b/src/com/rjconsultores/ventaboletos/service/RutaService.java @@ -106,4 +106,6 @@ public interface RutaService { public List buscarRutasPorEmpresaOrgaoConcedente(Empresa empresa, OrgaoConcedente orgao); + public boolean cambiarParadaRuta(Ruta ruta, Parada parada, String descripcionParada) throws BusinessException ; + } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java index 57c4efd9d..06730f440 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/RutaServiceImpl.java @@ -6,11 +6,8 @@ package com.rjconsultores.ventaboletos.service.impl; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.Set; -import java.util.TreeSet; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -22,7 +19,6 @@ import com.rjconsultores.ventaboletos.dao.EsquemaCorridaDAO; import com.rjconsultores.ventaboletos.dao.RutaDAO; import com.rjconsultores.ventaboletos.entidad.ClaseServicio; import com.rjconsultores.ventaboletos.entidad.Empresa; -import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente; import com.rjconsultores.ventaboletos.entidad.Parada; import com.rjconsultores.ventaboletos.entidad.ParadaSecuencia; @@ -34,7 +30,7 @@ import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.Via; import com.rjconsultores.ventaboletos.exception.BusinessException; -import com.rjconsultores.ventaboletos.service.EsquemaCorridaService; +import com.rjconsultores.ventaboletos.service.ParadaService; import com.rjconsultores.ventaboletos.service.RutaCombinacionService; import com.rjconsultores.ventaboletos.service.RutaSecuenciaService; import com.rjconsultores.ventaboletos.service.RutaService; @@ -62,7 +58,7 @@ public class RutaServiceImpl implements RutaService { @Autowired private EsquemaCorridaDAO esquemaCorridaDAO; @Autowired - private EsquemaCorridaService esquemaCorridaService; + private ParadaService paradaService; private static Logger log = Logger.getLogger(RutaServiceImpl.class); @@ -74,22 +70,151 @@ public class RutaServiceImpl implements RutaService { return rutaDAO.obtenerID(id); } + @Override + @Transactional(rollbackFor = BusinessException.class) + public boolean cambiarParadaRuta(Ruta ruta, Parada parada, String descripcionParada) throws BusinessException { + + try { + String cve = null; + String descparada = null; + try { + String arraySplit[] = new String[2]; + arraySplit = descripcionParada.split(" - "); + cve = arraySplit[0]; + descparada = arraySplit[1]; + } catch (Exception e) { + throw new BusinessException(""); + } + + if (cve == null || descparada == null) + throw new BusinessException("editarCatalogoDeRutaController.actionCanbiarParada.businessException"); + + Parada nuevaParada = null; + List paradas = paradaService.buscarCVE(cve); + paradas.addAll(paradaService.buscar(descparada)); + if (!paradas.isEmpty()) { + nuevaParada = paradas.iterator().next(); + } else { + nuevaParada = crearNuevaParada(parada, cve, descparada); + paradaService.suscribirActualizar(nuevaParada); + } + + List tramos = validaTramosRuta(ruta); + List cambios = new ArrayList(); + for (Tramo tramo : tramos) { + Tramo nTramo = crearNuevoTramo(tramo, parada, nuevaParada); + if (nTramo != null) { + cambios.add(new CambioRutaTramo(tramo, nTramo, parada, nuevaParada)); + tramoService.suscribirActualizar(nTramo); + } + } + + for (CambioRutaTramo crt : cambios) { + rutaDAO.updateAsientosVendibles(ruta, crt.getViejoTramo(), crt.getNuevoTramo()); + } + + return true; + + } catch (Exception e) { + log.error("", e); + throw new BusinessException(e.getMessage()); + } + } + + private List validaTramosRuta(Ruta ruta) { + + List tramosRuta = new ArrayList(); + + for (RutaCombinacion rc : ruta.getRutaCombinacionList()) { + if (!tramosRuta.contains(rc.getTramo())) + tramosRuta.add(rc.getTramo()); + } + + for (RutaSecuencia rs : ruta.getRutaSecuenciaList()) { + if (!tramosRuta.contains(rs.getTramo())) + tramosRuta.add(rs.getTramo()); + } + + return tramosRuta; + } + + private Tramo crearNuevoTramo(Tramo tramo, Parada viejaParada, Parada nuevaParada) { + + Tramo viejoTramo = tramoService.obtenerID(tramo.getTramoId()); + if (viejoTramo.getOrigem().equals(viejaParada) || viejoTramo.getDestino().equals(viejaParada)) { + + Tramo ptramo = null; + if (viejoTramo.getOrigem().equals(viejaParada)) { + ptramo = tramoService.obtenerTramotPorOrigemDestinoVia(nuevaParada, viejoTramo.getDestino(), viejoTramo.getVia()); + } + + if (viejoTramo.getDestino().equals(viejaParada)) { + ptramo = tramoService.obtenerTramotPorOrigemDestinoVia(viejoTramo.getOrigem(), nuevaParada, viejoTramo.getVia()); + } + + if (ptramo == null) { + + Tramo nuevoTramo = new Tramo(); + nuevoTramo.setDesctramo(viejoTramo.getDesctramo() + " II"); + nuevoTramo.setVia(viejoTramo.getVia()); + nuevoTramo.setKmPagoConductor(viejoTramo.getKmPagoConductor()); + nuevoTramo.setKmReal(viejoTramo.getKmReal()); + + nuevoTramo.setLsTramoTiempo(viejoTramo.getLsTramoTiempo()); + nuevoTramo.setLsOrgaoTramo(viejoTramo.getLsOrgaoTramo()); + + nuevoTramo.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + nuevoTramo.setFecmodif(Calendar.getInstance().getTime()); + nuevoTramo.setActivo(Boolean.TRUE); + + if (viejoTramo.getOrigem().equals(viejaParada)) { + nuevoTramo.setOrigem(nuevaParada); + nuevoTramo.setDestino(viejoTramo.getDestino()); + } + if (viejoTramo.getDestino().equals(viejaParada)) { + nuevoTramo.setDestino(nuevaParada); + nuevoTramo.setOrigem(viejoTramo.getOrigem()); + } + + return nuevoTramo; + } else { + return ptramo; + } + } else { + return null; + } + } + + private Parada crearNuevaParada(Parada parada, String cve, String descparada) { + Parada nuevaParada = new Parada(); + nuevaParada.setCveparada(cve); + nuevaParada.setDescparada(descparada); + nuevaParada.setCiudad(parada.getCiudad()); + nuevaParada.setRegionMetropolitana(parada.getRegionMetropolitana()); + nuevaParada.setNodo(parada.getNodo()); + nuevaParada.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + nuevaParada.setFecmodif(Calendar.getInstance().getTime()); + nuevaParada.setActivo(Boolean.TRUE); + + return nuevaParada; + } + @Transactional(rollbackFor = BusinessException.class) public Ruta suscribir(Ruta entidad, List lsParadasSequencia) throws BusinessException { entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); entidad.setFecmodif(Calendar.getInstance().getTime()); entidad.setActivo(Boolean.TRUE); - + if (entidad.getVentaOffLine() == null) { entidad.setVentaOffLine(false); } - + Boolean isClone = entidad.getIsClone() != null ? entidad.getIsClone() : Boolean.FALSE; entidad = rutaDAO.suscribir(entidad); if (lsParadasSequencia != null) { - if(!isClone) { - generarSecuencias(entidad, lsParadasSequencia); - } + if (!isClone) { + generarSecuencias(entidad, lsParadasSequencia); + } generarCombinacion(entidad); } @@ -209,7 +334,7 @@ public class RutaServiceImpl implements RutaService { if (ruta.getRutaId() != null) { ruta.setRutaCombinacionList(rutaCombinacionService.obtenerPorRuta(ruta)); } - + for (int i = 0; i < lsRutaSecuencia.size(); i++) { Tramo tramoSecuencia1 = lsRutaSecuencia.get(i).getTramo(); Parada origem = tramoSecuencia1.getOrigem(); @@ -250,8 +375,6 @@ public class RutaServiceImpl implements RutaService { log.debug("Tramo:" + trBuscaOrigemDestino.getDesctramo()); - - RutaCombinacion rc = new RutaCombinacion(); rc.setActivo(Boolean.TRUE); rc.setFecmodif(Calendar.getInstance().getTime()); @@ -270,10 +393,10 @@ public class RutaServiceImpl implements RutaService { } } } - - private boolean indVenta(Ruta ruta, Tramo trBuscaOrigemDestino){ - for (RutaCombinacion rc : ruta.getRutaCombinacionList()){ - if (rc.getTramo().equals(trBuscaOrigemDestino)){ + + private boolean indVenta(Ruta ruta, Tramo trBuscaOrigemDestino) { + for (RutaCombinacion rc : ruta.getRutaCombinacionList()) { + if (rc.getTramo().equals(trBuscaOrigemDestino)) { return rc.getIndventa(); } } @@ -288,11 +411,10 @@ public class RutaServiceImpl implements RutaService { return rutaDAO.buscarOrigen(ruta); } - public List buscarPorClaseServicioEmpresa(ClaseServicio claseServicio, Empresa empresa) { return rutaDAO.buscarPorClaseServicioEmpresa(claseServicio, empresa); } - + public List buscarPorClaseServicio(ClaseServicio claseServicio) { return rutaDAO.buscarPorClaseServicio(claseServicio); } @@ -308,7 +430,7 @@ public class RutaServiceImpl implements RutaService { public List buscarTodosExceto(Integer... idRuta) { return rutaDAO.buscarTodosExceto(idRuta); } - + public List buscarTodosEstos(Integer[] idRutas) { return rutaDAO.buscarTodosEstos(idRutas); } @@ -336,35 +458,35 @@ public class RutaServiceImpl implements RutaService { public List buscaRuta(String palavraPesquisaRuta) { return rutaDAO.buscaRuta(palavraPesquisaRuta); } - - public List buscaRutasFromOrgao(OrgaoConcedente orgao){ + + public List buscaRutasFromOrgao(OrgaoConcedente orgao) { return rutaDAO.buscaRutasFromOrgao(orgao); } - + @Override - public List buscarRutasPorEmpresas(List lsEmp){ + public List buscarRutasPorEmpresas(List lsEmp) { return rutaDAO.buscarPorRutaPorEmpresas(lsEmp); } - + private class RutaComparator implements Comparator { - @Override - public int compare(Ruta r1, Ruta r2) { - String name1 = r1.getDescruta(); - String name2 = r2.getDescruta(); - return name1.compareTo(name2); - } + @Override + public int compare(Ruta r1, Ruta r2) { + String name1 = r1.getDescruta(); + String name2 = r2.getDescruta(); + return name1.compareTo(name2); + } } - + @Override - public Integer getNumSecuenciaOrigen(Integer rutaId, Integer origenId){ + public Integer getNumSecuenciaOrigen(Integer rutaId, Integer origenId) { return obtenerID(rutaId).numSecuenciaOrigen(origenId); } - + @Override - public Integer getNumSecuenciaDestino(Integer rutaId, Integer destinoId){ + public Integer getNumSecuenciaDestino(Integer rutaId, Integer destinoId) { return obtenerID(rutaId).numSecuenciaDestino(destinoId); } - + @Override public List verificarSeqRutaNaoGerada(Ruta ruta, List lsParadasSecuencia) { @@ -410,4 +532,51 @@ public class RutaServiceImpl implements RutaService { public List buscarRutasPorEmpresaOrgaoConcedente(Empresa empresa, OrgaoConcedente orgao) { return rutaDAO.buscarRutasPorEmpresaOrgaoConcedente(empresa, orgao); } + + class CambioRutaTramo { + private Tramo viejoTramo; + private Tramo nuevoTramo; + private Parada viejaParada; + private Parada nuevaParada; + + public CambioRutaTramo(Tramo viejoTramo, Tramo nuevoTramo, Parada viejaParada, Parada nuevaParada) { + super(); + this.viejoTramo = viejoTramo; + this.nuevoTramo = nuevoTramo; + this.viejaParada = viejaParada; + this.nuevaParada = nuevaParada; + } + + public Tramo getViejoTramo() { + return viejoTramo; + } + + public void setViejoTramo(Tramo viejoTramo) { + this.viejoTramo = viejoTramo; + } + + public Tramo getNuevoTramo() { + return nuevoTramo; + } + + public void setNuevoTramo(Tramo nuevoTramo) { + this.nuevoTramo = nuevoTramo; + } + + public Parada getViejaParada() { + return viejaParada; + } + + public void setViejaParada(Parada viejaParada) { + this.viejaParada = viejaParada; + } + + public Parada getNuevaParada() { + return nuevaParada; + } + + public void setNuevaParada(Parada nuevaParada) { + this.nuevaParada = nuevaParada; + } + } }