Merge pull request 'fixes bug #AL-3494' (!156) from AL-3494 into master

Reviewed-on: adm/ModelWeb#156
Reviewed-by: aristides <aristides@rjconsultores.com.br>
master
aristides 2024-02-27 17:14:27 +00:00
commit 38e00c557a
6 changed files with 180 additions and 146 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>br.com.rjconsultores</groupId> <groupId>br.com.rjconsultores</groupId>
<artifactId>ModelWeb</artifactId> <artifactId>ModelWeb</artifactId>
<version>1.40.3</version> <version>1.40.4</version>
<distributionManagement> <distributionManagement>
<repository> <repository>

View File

@ -36,6 +36,8 @@ public interface CorridaDAO extends GenericDAO<Corrida, Corrida.Id> {
*/ */
public Boolean existe(Id id); public Boolean existe(Id id);
public Boolean existeActivo(Id id);
public List<Corrida> buscarPorAutobusCorridasFuturas(DiagramaAutobus diagramaAutobus); public List<Corrida> buscarPorAutobusCorridasFuturas(DiagramaAutobus diagramaAutobus);
public List<Corrida> buscarPorRolOperativoCorridasFuturas(DiagramaAutobus diagramaAutobus); public List<Corrida> buscarPorRolOperativoCorridasFuturas(DiagramaAutobus diagramaAutobus);

View File

@ -89,6 +89,20 @@ public class CorridaHibernateDAO extends GenericHibernateDAO<Corrida, Corrida.Id
return (cant > 0); return (cant > 0);
} }
@Override
public Boolean existeActivo(final Id id) {
Criteria c = makeCriteria();
c.setProjection(Projections.rowCount());
c.add(Restrictions.eq("id", id));
c.add(Restrictions.eq("activo", ActivoUtil.ATIVO));
Long cant = HibernateFix.count(c.list());
return (cant > 0);
}
@Override @Override
public Corrida suscribir(final Corrida entity) { public Corrida suscribir(final Corrida entity) {

View File

@ -21,7 +21,7 @@ public class IntegracaoTotvsHibernateDAO extends GenericHibernateDAO<IntegracaoT
@Override @Override
public void borrarByCorrida(Corrida corrida) { public void borrarByCorrida(Corrida corrida) {
StringBuilder sQuery = new StringBuilder("update INTEGRACAO_TOTVS_CORRIDA set activo = 0 WHERE corrida_Id = :corridaId AND TRUNC(feccorrida) = :feccorrida "); StringBuilder sQuery = new StringBuilder("update INTEGRACAO_TOTVS_CORRIDA set integradototvs = 0 WHERE corrida_Id = :corridaId AND TRUNC(feccorrida) = :feccorrida ");
SQLQuery qrUpdate = getSession().createSQLQuery(sQuery.toString()); SQLQuery qrUpdate = getSession().createSQLQuery(sQuery.toString());
qrUpdate.setParameter("feccorrida", corrida.getId().getFeccorrida()); qrUpdate.setParameter("feccorrida", corrida.getId().getFeccorrida());

View File

@ -83,7 +83,7 @@ public interface CorridaService extends GenericService<Corrida, Corrida.Id> {
public Integer buscarOcupacaoCorrida(Corrida corrida); public Integer buscarOcupacaoCorrida(Corrida corrida);
public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList); public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList, boolean isValidaActivo);
public Corrida buscarPorId(Corrida.Id id); public Corrida buscarPorId(Corrida.Id id);

View File

@ -455,7 +455,7 @@ public class CorridaServiceImpl implements CorridaService {
* @return - La corrida generada o null si no fue generada. * @return - La corrida generada o null si no fue generada.
*/ */
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
private Corrida generarCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, boolean isPisoExtra, Boolean isFeriado, List<CorridaTramo> corridaTramoList) { private Corrida generarCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, boolean isPisoExtra, Boolean isFeriado, List<CorridaTramo> corridaTramoList, boolean isValidaActivo) {
Corrida corrida = null; Corrida corrida = null;
@ -475,7 +475,7 @@ public class CorridaServiceImpl implements CorridaService {
id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao)); id.setFeccorrida(DateUtil.normalizarToFecha(dataGeracao));
List<EsquemaTramo> lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida); List<EsquemaTramo> lsEsquemaTramo = esquemaTramoService.obtenerPorEsquemaCorridaOrderNumSec(esquemaCorrida);
if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida, horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo)) { if(!realizaValidacoesGerais(esquemaCorrida, dataGeracao, diaSemana, isFeriado, ruta, id, numCorrida, horario, claseServicio, marca, isPisoExtra, lsEsquemaTramo, isValidaActivo)) {
return null; return null;
} }
@ -489,7 +489,7 @@ public class CorridaServiceImpl implements CorridaService {
CorridaCtrl corridaCtrl = criaCorridaCtrl(isPisoExtra, ruta, claseServicio, marca, horario, numCorrida); CorridaCtrl corridaCtrl = criaCorridaCtrl(isPisoExtra, ruta, claseServicio, marca, horario, numCorrida);
corrida = criaCorrida(esquemaCorrida, dataGeracao, id, lsEsquemaTramo, origemCorrida, destinoCorrida, corrida = criaCorrida(esquemaCorrida, dataGeracao, id, lsEsquemaTramo, origemCorrida, destinoCorrida,
corridaCtrl, corridaTramoList); corridaCtrl, corridaTramoList, isValidaActivo);
cantCorridaGenerada++; cantCorridaGenerada++;
@ -503,7 +503,7 @@ public class CorridaServiceImpl implements CorridaService {
} }
private Corrida criaCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, Corrida.Id id, private Corrida criaCorrida(EsquemaCorrida esquemaCorrida, Date dataGeracao, Corrida.Id id,
List<EsquemaTramo> lsEsquemaTramo, Parada origemCorrida, Parada destinoCorrida, CorridaCtrl corridaCtrl, List<CorridaTramo> corridaTramoList) { List<EsquemaTramo> lsEsquemaTramo, Parada origemCorrida, Parada destinoCorrida, CorridaCtrl corridaCtrl, List<CorridaTramo> corridaTramoList, boolean isCorridaInativa) {
Corrida corrida; Corrida corrida;
corrida = new Corrida(); corrida = new Corrida();
corrida.setId(id); corrida.setId(id);
@ -571,7 +571,12 @@ public class CorridaServiceImpl implements CorridaService {
} }
corrida.setIndTipoVenta(null); corrida.setIndTipoVenta(null);
corrida.setCodProdutoFiscal(UtiliteriasFiscal.defineCodigoProduto(corrida.getOrigem().getParadaId(), corrida.getDestino().getParadaId(), corrida.getRuta().getRutaId())); corrida.setCodProdutoFiscal(UtiliteriasFiscal.defineCodigoProduto(corrida.getOrigem().getParadaId(), corrida.getDestino().getParadaId(), corrida.getRuta().getRutaId()));
if(!isCorridaInativa) {
corrida = corridaDAO.suscribir(corrida); corrida = corridaDAO.suscribir(corrida);
}else {
corrida = corridaDAO.actualizacion(corrida);
}
return corrida; return corrida;
} }
@ -630,7 +635,7 @@ public class CorridaServiceImpl implements CorridaService {
} }
private Boolean realizaValidacoesGerais(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer diaSemana, Boolean isFeriado, private Boolean realizaValidacoesGerais(EsquemaCorrida esquemaCorrida, Date dataGeracao, Integer diaSemana, Boolean isFeriado,
Ruta ruta, Corrida.Id id, Integer numCorrida, Date horario, ClaseServicio claseServicio, Marca marca, Boolean isPisoExtra, List<EsquemaTramo> lsEsquemaTramo){ Ruta ruta, Corrida.Id id, Integer numCorrida, Date horario, ClaseServicio claseServicio, Marca marca, Boolean isPisoExtra, List<EsquemaTramo> lsEsquemaTramo, boolean isGeraCorridaInativa){
Integer corridaId = esquemaCorrida.getNumCorrida(); Integer corridaId = esquemaCorrida.getNumCorrida();
String fecCorrida = DateUtil.getStringDate(horario); String fecCorrida = DateUtil.getStringDate(horario);
if (!vigenciaValida(esquemaCorrida, dataGeracao)) { if (!vigenciaValida(esquemaCorrida, dataGeracao)) {
@ -659,10 +664,17 @@ public class CorridaServiceImpl implements CorridaService {
return Boolean.FALSE; return Boolean.FALSE;
} }
if(!isGeraCorridaInativa) {
if (corridaDAO.existe(id)) { if (corridaDAO.existe(id)) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra); log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra);
return Boolean.FALSE; return Boolean.FALSE;
} }
}else {
if (corridaDAO.existeActivo(id)) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". corrida existe = " + numCorrida + ";" + ruta.getDescruta() + ";" + DateUtil.getStringDate(dataGeracao) + ";" + DateUtil.getStringDate(horario, "HH:mm") + ";" + claseServicio.getDescclase() + ";" + marca.getDescmarca() + " Piso: " + isPisoExtra);
return Boolean.FALSE;
}
}
if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) { if (lsEsquemaTramo == null || lsEsquemaTramo.isEmpty()) {
log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Não contem trechos (EsquemaTramo nulo ou vazio)"); log.error("CorridaId:" + corridaId + " FecCorrida:" + fecCorrida + ". Não contem trechos (EsquemaTramo nulo ou vazio)");
@ -836,7 +848,7 @@ public class CorridaServiceImpl implements CorridaService {
return b - a; return b - a;
} }
public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList) { public Boolean generarCorrida(Date dataGeracao, List<EsquemaCorrida> lsEsquemaCorrida, boolean isGeracaoAutomaticaCorrida, List<CorridaTramo> corridaTramoList, boolean isValidaActivo) {
DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW); DefaultTransactionDefinition def = new DefaultTransactionDefinition(DefaultTransactionDefinition.PROPAGATION_REQUIRES_NEW);
@ -931,7 +943,7 @@ public class CorridaServiceImpl implements CorridaService {
} }
Boolean isFeriado = this.isFeriado(data, esquemaCorrida); Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado, corridaTramoList); corrida = generarCorrida(esquemaCorrida, dataGeracao, false, isFeriado, corridaTramoList, isValidaActivo);
corridaPisoExtra = null; corridaPisoExtra = null;
@ -966,7 +978,7 @@ public class CorridaServiceImpl implements CorridaService {
continue; continue;
} }
corridaPisoExtra = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null); corridaPisoExtra = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null, false);
Boolean atualizarPisoExtra = false; Boolean atualizarPisoExtra = false;
// caso corrida segundo piso for gerada antes, atualizar // caso corrida segundo piso for gerada antes, atualizar
@ -978,6 +990,8 @@ public class CorridaServiceImpl implements CorridaService {
if(corridaPisoExtra !=null) { if(corridaPisoExtra !=null) {
if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) { if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) {
validaCriaReservaCliente(corridaPisoExtra, unUsuarioId, unPuntoVenta, estacionId); validaCriaReservaCliente(corridaPisoExtra, unUsuarioId, unPuntoVenta, estacionId);
}else {
log.error("Usuario ou ponto de venda ou estação não definidos para reserva especial nas contantes");
} }
} }
@ -996,7 +1010,7 @@ public class CorridaServiceImpl implements CorridaService {
continue; continue;
} }
corridaPisoExtra2 = generarCorrida(esquemaCorridaTerceiroPiso, dataGeracao, true, isFeriado, null); corridaPisoExtra2 = generarCorrida(esquemaCorridaTerceiroPiso, dataGeracao, true, isFeriado, null, false);
atualizarPisoExtra = false; atualizarPisoExtra = false;
// caso corrida segundo piso for gerada antes, atualizar // caso corrida segundo piso for gerada antes, atualizar
@ -1009,6 +1023,8 @@ public class CorridaServiceImpl implements CorridaService {
if(corridaPisoExtra !=null) { if(corridaPisoExtra !=null) {
if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) { if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) {
validaCriaReservaCliente(corridaPisoExtra, unUsuarioId, unPuntoVenta, estacionId); validaCriaReservaCliente(corridaPisoExtra, unUsuarioId, unPuntoVenta, estacionId);
}else {
log.error("Usuario ou ponto de venda ou estação não definidos para reserva nas contantes");
} }
} }
} }
@ -1043,6 +1059,8 @@ public class CorridaServiceImpl implements CorridaService {
if(corrida !=null) { if(corrida !=null) {
if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) { if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) {
validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId); validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId);
}else {
log.error("Usuario ou ponto de venda ou estação não definidos para reserva especial nas contantes");
} }
} }
@ -1061,7 +1079,7 @@ public class CorridaServiceImpl implements CorridaService {
Corrida corridaPisoExtra2, EsquemaCorrida esquemaCorrida, Boolean isFeriado) { Corrida corridaPisoExtra2, EsquemaCorrida esquemaCorrida, Boolean isFeriado) {
log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId()); log.info("Corrida Rebote=" + esquemaCorrida.getEsquemacorridaId());
Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado, null); Corrida corridaRebote = generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), dataGeracao, false, isFeriado, null, false);
Corrida corridaPisoExtraRebote = null; Corrida corridaPisoExtraRebote = null;
boolean generaReboteDiaSeguinte = false; boolean generaReboteDiaSeguinte = false;
@ -1073,7 +1091,7 @@ public class CorridaServiceImpl implements CorridaService {
log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",ecRebote.getEsquemacorridaId(),ecRebote.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() )); log.info(String.format("Esquema/Corrida primeiro piso: %s/%s ; Esquema/Corrida segundo piso: %s/%s ",ecRebote.getEsquemacorridaId(),ecRebote.getNumCorrida(), esquemaCorridaSegundoPiso.getEsquemacorridaId(),esquemaCorridaSegundoPiso.getNumCorrida() ));
corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null); corridaPisoExtraRebote = generarCorrida(esquemaCorridaSegundoPiso, dataGeracao, true, isFeriado, null, false);
if (corridaRebote != null && corridaPisoExtraRebote != null) { if (corridaRebote != null && corridaPisoExtraRebote != null) {
// Salvando Referencia da Corrida no piso extra // Salvando Referencia da Corrida no piso extra
@ -1337,7 +1355,7 @@ public class CorridaServiceImpl implements CorridaService {
java.sql.Date data = new java.sql.Date(dataGeracao.getTime()); java.sql.Date data = new java.sql.Date(dataGeracao.getTime());
Boolean isFeriado = this.isFeriado(data, esquemaCorrida); Boolean isFeriado = this.isFeriado(data, esquemaCorrida);
return generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), tmp.getTime(), false, isFeriado, null); return generarCorrida(esquemaCorrida.getEsquemaCorridaRebote(), tmp.getTime(), false, isFeriado, null, false);
} }
private List<Integer> getDiaDeLaSemana(TramoTiempo tramoTiempo) { private List<Integer> getDiaDeLaSemana(TramoTiempo tramoTiempo) {
@ -1476,7 +1494,7 @@ public class CorridaServiceImpl implements CorridaService {
List<EsquemaCorrida> lsTmp = new ArrayList<EsquemaCorrida>(); List<EsquemaCorrida> lsTmp = new ArrayList<EsquemaCorrida>();
lsTmp.add(esquemaCorrida); lsTmp.add(esquemaCorrida);
this.generarCorrida(dataDe, lsTmp, true, null); this.generarCorrida(dataDe, lsTmp, true, null, false);
calendarData.setTime(dataDe); calendarData.setTime(dataDe);
calendarData.add(Calendar.DATE, 1); calendarData.add(Calendar.DATE, 1);
@ -1521,7 +1539,7 @@ public class CorridaServiceImpl implements CorridaService {
if (dentroVigenciaEsquemaOperacional) { if (dentroVigenciaEsquemaOperacional) {
log.debug("Geracao de servicos sem cant dias especifico. Adotando o padrao"); log.debug("Geracao de servicos sem cant dias especifico. Adotando o padrao");
this.generarCorrida(dataDe, lsEsquemaCorrida, true, null); this.generarCorrida(dataDe, lsEsquemaCorrida, true, null, false);
} else { } else {
log.info("No hay esquema vigente para la fecha " + sdfData.format(dataDe)); log.info("No hay esquema vigente para la fecha " + sdfData.format(dataDe));
@ -1604,7 +1622,7 @@ public class CorridaServiceImpl implements CorridaService {
break; break;
} }
boolean corridaGerada = this.generarCorrida(dataAte, Arrays.asList(esquemaCorrida), false, null); boolean corridaGerada = this.generarCorrida(dataAte, Arrays.asList(esquemaCorrida), false, null, false);
log.info(String.format("Corrida gerada = %s [%s - %s]",corridaGerada,esquemaCorrida.getNumCorrida() ,strDataGeracao)); log.info(String.format("Corrida gerada = %s [%s - %s]",corridaGerada,esquemaCorrida.getNumCorrida() ,strDataGeracao));
@ -1674,7 +1692,7 @@ public class CorridaServiceImpl implements CorridaService {
while (DateUtil.compareOnlyDate(dataDe, dataAte) <= 0) { while (DateUtil.compareOnlyDate(dataDe, dataAte) <= 0) {
log.info("*** Data: " + sdfData.format(dataDe)); log.info("*** Data: " + sdfData.format(dataDe));
this.generarCorrida(dataDe, lsEsquemaCorrida, false, null); this.generarCorrida(dataDe, lsEsquemaCorrida, false, null, false);
calendarData.add(Calendar.DATE, 1); calendarData.add(Calendar.DATE, 1);
dataDe = calendarData.getTime(); dataDe = calendarData.getTime();