diff --git a/src/com/rjconsultores/ventaboletos/constantes/TipoEventoExtra.java b/src/com/rjconsultores/ventaboletos/constantes/TipoEventoExtra.java index 9d6e33913..f50bf09c2 100644 --- a/src/com/rjconsultores/ventaboletos/constantes/TipoEventoExtra.java +++ b/src/com/rjconsultores/ventaboletos/constantes/TipoEventoExtra.java @@ -80,6 +80,6 @@ public enum TipoEventoExtra { public String toString() { return "TAXA_CONVENIENCIA_SVI"; } - };; + }; } diff --git a/src/com/rjconsultores/ventaboletos/dao/BoletoDAO.java b/src/com/rjconsultores/ventaboletos/dao/BoletoDAO.java index 92a4951c0..64b07933d 100644 --- a/src/com/rjconsultores/ventaboletos/dao/BoletoDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/BoletoDAO.java @@ -17,4 +17,9 @@ import com.rjconsultores.ventaboletos.vo.embarcada.PtoVtaUsuarioUltimaVendaDispo public interface BoletoDAO extends GenericDAO { public Boleto buscarPeloImeiDoDispositivo(String imei); public List buscarUltimaVendaDosDispositivosEmbarcada(); + @Override + Boleto suscribir(Boleto boleto); + public String getSequenciaBoletoId(); + public String getSequenciaNumOperacion(); + public String getSequenciaNumReservacion(); } diff --git a/src/com/rjconsultores/ventaboletos/dao/ReservaEspecialClienteDAO.java b/src/com/rjconsultores/ventaboletos/dao/ReservaEspecialClienteDAO.java new file mode 100644 index 000000000..75d756ef9 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/ReservaEspecialClienteDAO.java @@ -0,0 +1,11 @@ +package com.rjconsultores.ventaboletos.dao; + +import java.util.List; + +import com.rjconsultores.ventaboletos.entidad.ReservaEspecialCliente; + +public interface ReservaEspecialClienteDAO extends GenericDAO { + + public List bucarReservaEspecialByClienteId(Long clienteId) ; + public List bucarReservaEspecialByCorridaId(Long corridaId) ; +} diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/BoletoHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/BoletoHibernateDAO.java index 1d90515df..e2b7424aa 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/BoletoHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/BoletoHibernateDAO.java @@ -65,4 +65,21 @@ public class BoletoHibernateDAO extends GenericHibernateDAO implem return (Boleto) c.uniqueResult(); } + public String getSequenciaBoletoId(){ + String sql = "SELECT BOLETO_SEQ.nextval FROM DUAL"; + Object o = this.getSession().createSQLQuery(sql).uniqueResult(); + return o.toString(); + } + + public String getSequenciaNumOperacion(){ + String sql = "SELECT NUMEOPERACION_SEQ.nextval FROM DUAL"; + Object o = this.getSession().createSQLQuery(sql).uniqueResult(); + return o.toString(); + } + + public String getSequenciaNumReservacion(){ + String sql = "SELECT NUMERESERVACION_SEQ.nextval FROM DUAL"; + Object o = this.getSession().createSQLQuery(sql).uniqueResult(); + return o.toString(); + } } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java index b03fe3d93..c59e46021 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/EsquemaCorridaHibernateDAO.java @@ -4,6 +4,7 @@ */ package com.rjconsultores.ventaboletos.dao.hibernate; +import java.util.ArrayList; import java.util.Date; import java.util.List; diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ReservaEspecialClienteHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ReservaEspecialClienteHibernateDAO.java new file mode 100644 index 000000000..5d6f4eefb --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ReservaEspecialClienteHibernateDAO.java @@ -0,0 +1,51 @@ +package com.rjconsultores.ventaboletos.dao.hibernate; + +import java.util.List; + +import org.hibernate.Criteria; +import org.hibernate.SessionFactory; +import org.hibernate.criterion.Order; +import org.hibernate.criterion.Restrictions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Repository; + +import com.rjconsultores.ventaboletos.dao.ReservaEspecialClienteDAO; +import com.rjconsultores.ventaboletos.entidad.ReservaEspecialCliente; + +@Repository("reservaEspecialClienteDAO") +public class ReservaEspecialClienteHibernateDAO extends GenericHibernateDAO + implements ReservaEspecialClienteDAO { + + private static final String FIELD_ACTIVO = "activo"; + + @Autowired + public ReservaEspecialClienteHibernateDAO( + @Qualifier("sessionFactory") SessionFactory factory) { + setSessionFactory(factory); + } + + @Override + public List bucarReservaEspecialByClienteId(Long clienteId) { + Criteria c = getCriteriaClienteActivo(); + c.addOrder(Order.asc("reservaEspecialClienteId")); + + return c.list(); + } + + + + private Criteria getCriteriaClienteActivo() { + Criteria criteria = getSession().createCriteria(getPersistentClass()); + criteria.add(Restrictions.eq(FIELD_ACTIVO, Boolean.TRUE)); + return criteria; + } + + @Override + public List bucarReservaEspecialByCorridaId(Long corridaId) { + Criteria c = getCriteriaClienteActivo(); + c.add(Restrictions.eq("corridaId", corridaId)); + c.addOrder(Order.asc("reservaEspecialClienteId")); + return c.list(); + } +} diff --git a/src/com/rjconsultores/ventaboletos/entidad/Boleto.java b/src/com/rjconsultores/ventaboletos/entidad/Boleto.java index 7f18b1838..70e1b67de 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/Boleto.java +++ b/src/com/rjconsultores/ventaboletos/entidad/Boleto.java @@ -86,6 +86,10 @@ public class Boleto implements java.io.Serializable { @Temporal(TemporalType.DATE) @Column(name = "FECHORVENTA", length = 7) private Date fechorventa; + + @Temporal(TemporalType.DATE) + @Column(name = "FECHORVENTA_H", length = 7) + private Date fechorventaH; @Column(name = "NUMKMVIAJE", precision = 7) private BigDecimal numkmviaje; @@ -321,6 +325,10 @@ public class Boleto implements java.io.Serializable { @Column(name = "IMEI_DISPOSITIVO_EMBARCADA", length = 20) private String imeiDispositivoEmbarcada; + + @Column(name = "TEMPORESERVAFIDELIDADE", length = 7) + private Integer temporeservafidelidade; + public Boleto() { } @@ -1226,4 +1234,19 @@ public class Boleto implements java.io.Serializable { this.imeiDispositivoEmbarcada = imeiDispositivoEmbarcada; } + public Integer getTemporeservafidelidade() { + return temporeservafidelidade; + } + + public void setTemporeservafidelidade(Integer temporeservafidelidade) { + this.temporeservafidelidade = temporeservafidelidade; + } + + public Date getFechorventaH() { + return fechorventaH; + } + + public void setFechorventaH(Date fechorventaH) { + this.fechorventaH = fechorventaH; + } } diff --git a/src/com/rjconsultores/ventaboletos/entidad/Cliente.java b/src/com/rjconsultores/ventaboletos/entidad/Cliente.java index 885da2924..7d3898818 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/Cliente.java +++ b/src/com/rjconsultores/ventaboletos/entidad/Cliente.java @@ -147,6 +147,19 @@ public class Cliente implements Serializable { @Temporal(TemporalType.DATE) private Date fecbloqueiopcd; + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "CLIENTE_ID", referencedColumnName = "CLIENTE_ID") + @Where(clause = "activo=1") + private List listReservaEspecialCliente; + + public List getListReservaEspecialCliente() { + return listReservaEspecialCliente; + } + + public void setListReservaEspecialCliente(List listReservaEspecialCliente) { + this.listReservaEspecialCliente = listReservaEspecialCliente; + } + public Cliente() { } diff --git a/src/com/rjconsultores/ventaboletos/entidad/ReservaEspecialCliente.java b/src/com/rjconsultores/ventaboletos/entidad/ReservaEspecialCliente.java new file mode 100644 index 000000000..67028ce89 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/entidad/ReservaEspecialCliente.java @@ -0,0 +1,270 @@ +package com.rjconsultores.ventaboletos.entidad; + +import java.util.Calendar; +import java.util.Date; + +import javax.persistence.Basic; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; +import javax.persistence.SequenceGenerator; +import javax.persistence.Table; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +@Entity +@SequenceGenerator(name = "RESERVA_ESPECIAL_CLIENTE_SEQ", sequenceName = "RESERVA_ESPECIAL_CLIENTE_SEQ", allocationSize = 1) +@Table(name = "RESERVA_ESPECIAL_CLIENTE") +public class ReservaEspecialCliente { + + @Id + @Basic(optional = false) + @GeneratedValue(strategy = GenerationType.AUTO, generator = "RESERVA_ESPECIAL_CLIENTE_SEQ") + @Column(name = "RESERVAESPECIALCLIENTE_ID") + private Long reservaEspecialClienteId; + + //Cliente + @Basic(optional = false) + @Column(name = "CLIENTE_ID") + private Long clienteId; + + //Corrida + @Basic(optional = false) + @Column(name = "CORRIDA_ID") + private Long corridaId; + + //Origem trecho + @Basic(optional = false) + @JoinColumn(name = "ORIGEM_ID", referencedColumnName = "PARADA_ID") + @ManyToOne + private Parada origem; + + //Destino trecho + @Basic(optional = false) + @JoinColumn(name = "DESTINO_ID", referencedColumnName = "PARADA_ID") + @ManyToOne + private Parada destino; + + //Data Final Vigência + @Basic(optional = false) + @Column(name = "FECINICIO") + @Temporal(TemporalType.TIMESTAMP) + private Date fecinicio; + + //Data Final Vigência + @Basic(optional = false) + @Column(name = "FECFINAL") + @Temporal(TemporalType.TIMESTAMP) + private Date fecfinal; + + //Dias da Semana + @Column(name = "NUMASENTOCORRIDA") + private Short numAsentoCorrida; + @Column(name = "INDSEGUNDA") + private Boolean indSegunda; + @Column(name = "INDTERCA") + private Boolean indTerca; + @Column(name = "INDQUARTA") + private Boolean indQuarta; + @Column(name = "INDQUINTA") + private Boolean indQuinta; + @Column(name = "INDSEXTA") + private Boolean indSexta; + @Column(name = "INDSABADO") + private Boolean indSabado; + @Column(name = "INDDOMINGO") + private Boolean indDomingo; + + //FecModif + @Basic(optional = false) + @Column(name = "FECMODIF") + @Temporal(TemporalType.TIMESTAMP) + private Date fecmodif; + + //Activo + @Column(name = "ACTIVO") + private Boolean activo; + + //Usuario + @Column(name = "USUARIO_ID") + private Integer usuarioId; + + @Column(name = "TEMPOCONFIRMACAO") + @Temporal(TemporalType.TIMESTAMP) + private Date tempoConfirmacao; + + public Date getTempoConfirmacao() { + return tempoConfirmacao; + } + + public void setTempoConfirmacao(Date tempoConfirmacao) { + this.tempoConfirmacao = tempoConfirmacao; + } + + public Long getReservaEspecialClienteId() { + return reservaEspecialClienteId; + } + + public void setReservaEspecialClienteId(Long reservaEspecialClienteId) { + this.reservaEspecialClienteId = reservaEspecialClienteId; + } + + public Long getClienteId() { + return clienteId; + } + + public void setClienteId(Long clienteId) { + this.clienteId = clienteId; + } + + public Long getCorridaId() { + return corridaId; + } + + public void setCorridaId(Long corridaId) { + this.corridaId = corridaId; + } + + public Parada getOrigem() { + return origem; + } + + public void setOrigem(Parada origem) { + this.origem = origem; + } + + public Parada getDestino() { + return destino; + } + + public void setDestino(Parada destino) { + this.destino = destino; + } + + public Date getFecinicio() { + return fecinicio; + } + + public void setFecinicio(Date fecinicio) { + this.fecinicio = fecinicio; + } + + public Date getFecfinal() { + return fecfinal; + } + + public void setFecfinal(Date fecfinal) { + this.fecfinal = fecfinal; + } + + public Short getNumAsentoCorrida() { + return numAsentoCorrida; + } + + public void setNumAsentoCorrida(Short numAsentoCorrida) { + this.numAsentoCorrida = numAsentoCorrida; + } + + public Boolean getIndSegunda() { + return indSegunda; + } + + public void setIndSegunda(Boolean indSegunda) { + this.indSegunda = indSegunda; + } + + public Boolean getIndTerca() { + return indTerca; + } + + public void setIndTerca(Boolean indTerca) { + this.indTerca = indTerca; + } + + public Boolean getIndQuarta() { + return indQuarta; + } + + public void setIndQuarta(Boolean indQuarta) { + this.indQuarta = indQuarta; + } + + public Boolean getIndQuinta() { + return indQuinta; + } + + public void setIndQuinta(Boolean indQuinta) { + this.indQuinta = indQuinta; + } + + + public Boolean getIndSexta() { + return indSabado; + } + + public void setIndSexta(Boolean indSexta) { + this.indSabado = indSexta; + } + + public Boolean getIndDomingo() { + return indDomingo; + } + + public void setIndDomingo(Boolean indDomingo) { + this.indDomingo = indDomingo; + } + + public Date getFecmodif() { + return fecmodif; + } + + public void setFecmodif(Date fecmodif) { + this.fecmodif = fecmodif; + } + + public Boolean getActivo() { + return activo; + } + + public void setActivo(Boolean activo) { + this.activo = activo; + } + + public Integer getUsuarioId() { + return usuarioId; + } + + public void setUsuarioId(Integer usuarioId) { + this.usuarioId = usuarioId; + } + + public Boolean getIndSabado() { + return indSabado; + } + + public void setIndSabado(Boolean indSabado) { + this.indSabado = indSabado; + } + + public void setTempoConfirmacao(Integer hora, Integer minuto) { + Calendar c = Calendar.getInstance(); + c.set(Calendar.YEAR, 1970); + c.set(Calendar.DAY_OF_MONTH, 1); + c.set(Calendar.MONTH, 0); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.MILLISECOND, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.add(Calendar.HOUR_OF_DAY, hora); + c.add(Calendar.MINUTE, minuto); + + setTempoConfirmacao(c.getTime()); + } + +} diff --git a/src/com/rjconsultores/ventaboletos/entidad/VigenciaTarifa.java b/src/com/rjconsultores/ventaboletos/entidad/VigenciaTarifa.java index f21b0f9cc..abedf08e7 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/VigenciaTarifa.java +++ b/src/com/rjconsultores/ventaboletos/entidad/VigenciaTarifa.java @@ -60,6 +60,11 @@ public class VigenciaTarifa implements Serializable { public VigenciaTarifa(Integer vigenciatarifaId) { this.vigenciatarifaId = vigenciatarifaId; } + + public VigenciaTarifa(Date inicioVigencia, Date fimVigencia) { + feciniciovigencia = inicioVigencia; + fecfinvigencia = fimVigencia; + } public Integer getVigenciatarifaId() { return vigenciatarifaId; diff --git a/src/com/rjconsultores/ventaboletos/service/BoletoService.java b/src/com/rjconsultores/ventaboletos/service/BoletoService.java index 2dd1daf7e..2a4a6a66a 100644 --- a/src/com/rjconsultores/ventaboletos/service/BoletoService.java +++ b/src/com/rjconsultores/ventaboletos/service/BoletoService.java @@ -4,6 +4,8 @@ */ package com.rjconsultores.ventaboletos.service; +import java.util.Date; + import com.rjconsultores.ventaboletos.entidad.Boleto; /** @@ -13,4 +15,9 @@ import com.rjconsultores.ventaboletos.entidad.Boleto; public interface BoletoService { public Boleto buscarPeloImeiDoDispositivo(String imei); + + public Boleto suscribir(Boleto boleto); + + public void criaBoletoReserva(String unoAsientoSelec, Integer unaCorridaId, Date unaFecCorrida, Integer unoTerminalOrigenId, Integer unoTerminalDestinoId, Integer unoTipoVenta, Integer unaCategoriaSelec, String unoNumeOperacion, Integer unUsuarioId, Integer unPuntoVenta, Integer unClienteId, Integer rutaId, Float tarifa, Long tempoReserva, Integer estacionId, String cpf, String numFidelidade, Integer claseservicioId, Short marcaId, Date fecViaje, Integer empresaCorridaId, String nombPassageiro) throws Exception; + } \ No newline at end of file diff --git a/src/com/rjconsultores/ventaboletos/service/ConstanteService.java b/src/com/rjconsultores/ventaboletos/service/ConstanteService.java index 8784c8af0..c3919acb4 100644 --- a/src/com/rjconsultores/ventaboletos/service/ConstanteService.java +++ b/src/com/rjconsultores/ventaboletos/service/ConstanteService.java @@ -25,4 +25,6 @@ public interface ConstanteService extends GenericService { public List buscarPorNomeConstanteLike(String nomeConstante); public String buscarURLAPI(); + + public Integer buscarValorConstantePorNomeConstante(String nomeConstante); } diff --git a/src/com/rjconsultores/ventaboletos/service/ReservaEspecialClienteService.java b/src/com/rjconsultores/ventaboletos/service/ReservaEspecialClienteService.java new file mode 100644 index 000000000..3b48cea74 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/service/ReservaEspecialClienteService.java @@ -0,0 +1,18 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.rjconsultores.ventaboletos.service; + +import java.util.List; + +import com.rjconsultores.ventaboletos.entidad.ReservaEspecialCliente; + +public interface ReservaEspecialClienteService extends GenericService { + + public List bucarReservaEspecialByClienteId(Long clienteId) ; + + public List bucarReservaEspecialByCorridaId(Long corridaId) ; + + +} diff --git a/src/com/rjconsultores/ventaboletos/service/impl/BoletoServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/BoletoServiceImpl.java index ebf378b92..fa2784bb8 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/BoletoServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/BoletoServiceImpl.java @@ -4,12 +4,24 @@ */ package com.rjconsultores.ventaboletos.service.impl; +import java.math.BigDecimal; +import java.util.Date; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.rjconsultores.ventaboletos.constantes.Constantes; import com.rjconsultores.ventaboletos.dao.BoletoDAO; import com.rjconsultores.ventaboletos.entidad.Boleto; +import com.rjconsultores.ventaboletos.entidad.PuntoVenta; +import com.rjconsultores.ventaboletos.entidad.RutaCombinacion; +import com.rjconsultores.ventaboletos.entidad.Usuario; import com.rjconsultores.ventaboletos.service.BoletoService; +import com.rjconsultores.ventaboletos.service.PuntoVentaService; +import com.rjconsultores.ventaboletos.service.RutaCombinacionService; +import com.rjconsultores.ventaboletos.service.UsuarioService; +import com.rjconsultores.ventaboletos.utilerias.MoneyHelper; /** * @@ -21,8 +33,128 @@ public class BoletoServiceImpl implements BoletoService { @Autowired private BoletoDAO boletoDAO; + + @Autowired + private PuntoVentaService puntoVentaService; + + @Autowired + private UsuarioService usuarioService; + + @Autowired + private RutaCombinacionService rutaCombinacionService; + + public Boleto buscarPeloImeiDoDispositivo(String imei) { return boletoDAO.buscarPeloImeiDoDispositivo(imei); } + @Override + @Transactional + public Boleto suscribir(Boleto boleto) { + return boletoDAO.suscribir(boleto); + } + + @Override + public void criaBoletoReserva(String unoAsientoSelec, Integer unaCorridaId, Date unaFecCorrida, + Integer unoTerminalOrigenId, Integer unoTerminalDestinoId, Integer unoTipoVenta, Integer unaCategoriaSelec, + String unoNumeOperacion, Integer unUsuarioId, Integer unPuntoVenta, + Integer unClienteId, Integer rutaId, Float tarifa, Long tempoReserva, + Integer estacionId, String docCPF, String numFidelidade, Integer claseservicioId, Short marcaId, Date fecViaje, Integer empresaCorridaId, String nombPassageiro) throws Exception { + + PuntoVenta miPuntoVenta = puntoVentaService.obtenerID(unPuntoVenta.intValue()); + + Boleto miBoletoTemporal = new Boleto(); + miBoletoTemporal.setActivo(Boolean.TRUE); + BigDecimal miPrecio = MoneyHelper.arredondar(tarifa) ; + miBoletoTemporal = new Boleto(); + miBoletoTemporal.setBoletoId(formataBoletoId(getSequenciaBoletoId())); + miBoletoTemporal.setBoletooriginalId(miBoletoTemporal.getBoletoId()); + // Sempre Categoria Normal (1) + miBoletoTemporal.setCategoriaId(Constantes.TPV_DIRECTO_NORMAL.intValue() ); + miBoletoTemporal.setClienteId(unClienteId); + miBoletoTemporal.setClaseservicioId(claseservicioId.byteValue()); + miBoletoTemporal.setDestinoId(unoTerminalDestinoId); + miBoletoTemporal.setDesctipodoc("CPF"); + miBoletoTemporal.setDescnumdoc(docCPF); + miBoletoTemporal.setEmpresacorridaId(empresaCorridaId); + miBoletoTemporal.setEmpresapuntoventaId(miPuntoVenta.getEmpresa().getEmpresaId()); + miBoletoTemporal.setEstacionId(estacionId); + miBoletoTemporal.setFeccreacion(new Date()); + miBoletoTemporal.setFecmodif(new Date()); + miBoletoTemporal.setFechorventa(new Date()); + miBoletoTemporal.setFechorventaH(new Date()); + miBoletoTemporal.setFechorviaje(fecViaje); + miBoletoTemporal.setFeccorrida(unaFecCorrida); + miBoletoTemporal.setCorridaId(unaCorridaId); + miBoletoTemporal.setIndcancelacion(Boolean.FALSE); + miBoletoTemporal.setIndreimpresion(Boolean.FALSE); + miBoletoTemporal.setIndextraviado(Boolean.FALSE); + miBoletoTemporal.setIndstatusoperacion("F"); + miBoletoTemporal.setIndcancelacion(Boolean.FALSE); + miBoletoTemporal.setIndreplica(Boolean.FALSE); + miBoletoTemporal.setIndstatusboleto("S"); + miBoletoTemporal.setIndreimpresion(Boolean.FALSE); + miBoletoTemporal.setImportetaxaembarque(BigDecimal.ZERO); + miBoletoTemporal.setImporteseguro(BigDecimal.ZERO); + miBoletoTemporal.setImportepedagio(BigDecimal.ZERO); + miBoletoTemporal.setImporteoutros(BigDecimal.ZERO); + miBoletoTemporal.setMarcaId(marcaId); + miBoletoTemporal.setNodoId((byte) 1); + miBoletoTemporal.setNumkmviaje( + calcularKmViaje(rutaId, unoTerminalOrigenId, unoTerminalDestinoId)); + miBoletoTemporal.setNombpasajero(nombPassageiro); + miBoletoTemporal.setNumasiento(unoAsientoSelec); + miBoletoTemporal.setNumfidelidad(numFidelidade); + miBoletoTemporal.setNumoperacion(formataNumOperacion(getSequenciaNumOperacion())); + miBoletoTemporal.setNumreservacion(formataNumReservacion(getSequenciaNumReservacion())); + miBoletoTemporal.setOrigenId(unoTerminalOrigenId); + miBoletoTemporal.setPreciopricing(BigDecimal.ZERO); + miBoletoTemporal.setPorccategoria(null); + miBoletoTemporal.setPreciopagado(miPrecio); + miBoletoTemporal.setPreciobase(miPrecio); + miBoletoTemporal.setPuntoVenta(miPuntoVenta); + miBoletoTemporal.setRutaId(rutaId); + miBoletoTemporal.setTemporeservafidelidade(tempoReserva!=null ? tempoReserva.intValue() : null); + miBoletoTemporal.setTipoventaId(unoTipoVenta.byteValue()); + Usuario usuario = usuarioService.obtenerID(unUsuarioId); + miBoletoTemporal.setUsuarioautorizacionId(usuario.getUsuarioUbicacionActivoList().get(0).getUsuarioubicacionId()); + miBoletoTemporal.setUsuario(usuario); + // Cria boleto de reserva + suscribir(miBoletoTemporal); + + } + + public BigDecimal calcularKmViaje(int rutaId, Integer unoOrigenId, Integer unoDestinoId) { + RutaCombinacion rutaCombinacion = rutaCombinacionService.busquedaTramoRutaOrigemDestino(rutaId, unoOrigenId, unoDestinoId); + return rutaCombinacion.getTramo().getKmReal(); + + } + + String getSequenciaBoletoId(){ + return boletoDAO.getSequenciaBoletoId(); + } + + String getSequenciaNumOperacion(){ + return boletoDAO.getSequenciaNumOperacion(); + } + + String getSequenciaNumReservacion(){ + return boletoDAO.getSequenciaNumReservacion(); + } + + public Long formataBoletoId(String boletoSeq){ + String valor = "1" + String.format("%014d", Integer.valueOf(boletoSeq).intValue()); + return Long.valueOf(valor); + } + + public String formataNumOperacion(String numOperacionSeq){ + return "01" + (String.format("%010d", Integer.valueOf(numOperacionSeq).intValue())); + } + + public String formataNumReservacion(String numReservacopnSeq){ + return "01" + (String.format("%010d", Integer.valueOf(numReservacopnSeq).intValue())); + } + + + } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ConstanteServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ConstanteServiceImpl.java index f99132bb3..7ffb7d733 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/ConstanteServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/ConstanteServiceImpl.java @@ -69,6 +69,19 @@ public class ConstanteServiceImpl implements ConstanteService { public Constante buscarPorNomeConstante(String nomeConstante) { return constanteDAO.buscarPorNomeConstante(nomeConstante); } + + @Override + public Integer buscarValorConstantePorNomeConstante(String nomeConstante){ + Constante constante = buscarPorNomeConstante(nomeConstante); + try { + if(constante!=null && StringUtils.isNotEmpty(constante.getValorconstante()) ) { + return Integer.valueOf(constante.getValorconstante().trim()); + } + }catch (Exception e) { + return null; + } + return null; + } public List buscar(String nombconstante) { return constanteDAO.buscar(nombconstante); diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java index 9021da652..8cbc63b30 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/CorridaServiceImpl.java @@ -31,6 +31,7 @@ import com.rjconsultores.ventaboletos.dao.TramoTiempoDAO; import com.rjconsultores.ventaboletos.entidad.AsientoExclusivo; import com.rjconsultores.ventaboletos.entidad.Ciudad; import com.rjconsultores.ventaboletos.entidad.ClaseServicio; +import com.rjconsultores.ventaboletos.entidad.Cliente; import com.rjconsultores.ventaboletos.entidad.Constante; import com.rjconsultores.ventaboletos.entidad.Corrida; import com.rjconsultores.ventaboletos.entidad.Corrida.Id; @@ -44,15 +45,21 @@ import com.rjconsultores.ventaboletos.entidad.EsquemaCorrida; import com.rjconsultores.ventaboletos.entidad.EsquemaTramo; import com.rjconsultores.ventaboletos.entidad.Estado; import com.rjconsultores.ventaboletos.entidad.Marca; +import com.rjconsultores.ventaboletos.entidad.Moneda; import com.rjconsultores.ventaboletos.entidad.Parada; +import com.rjconsultores.ventaboletos.entidad.ReservaEspecialCliente; import com.rjconsultores.ventaboletos.entidad.Ruta; import com.rjconsultores.ventaboletos.entidad.RutaSecuencia; +import com.rjconsultores.ventaboletos.entidad.Tarifa; import com.rjconsultores.ventaboletos.entidad.Tramo; import com.rjconsultores.ventaboletos.entidad.TramoServicio; import com.rjconsultores.ventaboletos.entidad.TramoTiempo; +import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa; import com.rjconsultores.ventaboletos.enums.StatusFlexBus; import com.rjconsultores.ventaboletos.exception.BusinessException; import com.rjconsultores.ventaboletos.service.AsientoExclusivoService; +import com.rjconsultores.ventaboletos.service.BoletoService; +import com.rjconsultores.ventaboletos.service.ClienteService; import com.rjconsultores.ventaboletos.service.ConstanteService; import com.rjconsultores.ventaboletos.service.CorridaCtrlService; import com.rjconsultores.ventaboletos.service.CorridaService; @@ -60,9 +67,13 @@ import com.rjconsultores.ventaboletos.service.DetDiagramaAutobusService; import com.rjconsultores.ventaboletos.service.EsquemaAsientoService; import com.rjconsultores.ventaboletos.service.EsquemaCorridaService; import com.rjconsultores.ventaboletos.service.EsquemaTramoService; +import com.rjconsultores.ventaboletos.service.ReservaEspecialClienteService; import com.rjconsultores.ventaboletos.service.RutaSecuenciaService; import com.rjconsultores.ventaboletos.service.RutaService; +import com.rjconsultores.ventaboletos.service.TarifaService; +import com.rjconsultores.ventaboletos.service.TramoService; import com.rjconsultores.ventaboletos.service.TramoServicioService; +import com.rjconsultores.ventaboletos.service.VigenciaTarifaService; import com.rjconsultores.ventaboletos.utilerias.ActivoUtil; import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.utilerias.FeriadoCache; @@ -80,6 +91,8 @@ public class CorridaServiceImpl implements CorridaService { private static Logger log = Logger.getLogger(CorridaServiceImpl.class); private static int CANT_MAX_CORRIDA_GERA_MANUAL = 40; private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); + // Tipo de venda Reserva + private static final Integer TPV_RESERVA_NORMAL = 15; @Autowired private CorridaDAO corridaDAO; @@ -114,7 +127,20 @@ public class CorridaServiceImpl implements CorridaService { private int cantCorridaCommit; @Autowired private FeriadoCache feriadoCache; + @Autowired + private BoletoService boletoService; + @Autowired + private ReservaEspecialClienteService reservaEspecialClientService; + @Autowired + private TarifaService tarifaService; + @Autowired + TramoService tramoService; + @Autowired + VigenciaTarifaService vigenciaTarifaService; + @Autowired + ClienteService clienteService; + @Autowired public CorridaServiceImpl(@Qualifier("transactionManager") PlatformTransactionManager transactionManager) { this.transactionManager = transactionManager; @@ -837,6 +863,10 @@ public class CorridaServiceImpl implements CorridaService { cantCorridaCommit = 1; java.sql.Date data = new java.sql.Date(dataGeracao.getTime()); + Integer unUsuarioId = constanteService.buscarValorConstantePorNomeConstante("USUARIO_RESERVA_CLIENTES"); + Integer unPuntoVenta= constanteService.buscarValorConstantePorNomeConstante("PUNTOVENTA_RESERVA_CLIENTES"); + Integer estacionId = constanteService.buscarValorConstantePorNomeConstante("ESTACION_RESERVA_CLIENTES"); + try { for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) { @@ -983,6 +1013,12 @@ public class CorridaServiceImpl implements CorridaService { transactionManager.commit(status); status = transactionManager.getTransaction(def); } + //Valida se existe configuração de reserva para o cliente e crria Cria reserva + if(corrida !=null) { + if(unUsuarioId!=null && unPuntoVenta!=null && estacionId!=null) { + validaCriaReservaCliente(corrida, unUsuarioId, unPuntoVenta, estacionId); + } + } } // for (EsquemaCorrida esquemaCorrida : lsEsquemaCorrida) } finally { if ((status != null) && (!status.isCompleted())) { @@ -991,6 +1027,58 @@ public class CorridaServiceImpl implements CorridaService { } } + private void validaCriaReservaCliente(Corrida corrida, Integer unUsuarioId, Integer unPuntoVenta, Integer estacionId) { + try { + List reservaEspecialClienteList = reservaEspecialClientService.bucarReservaEspecialByCorridaId(corrida.getId().getCorridaId().longValue()) ; + if(reservaEspecialClienteList !=null) { + for (ReservaEspecialCliente reservaEspecialCliente : reservaEspecialClienteList) { + Integer unoTerminalOrigenId = reservaEspecialCliente.getOrigem().getParadaId(); + Integer unoTerminalDestinoId = reservaEspecialCliente.getDestino().getParadaId(); + String unoAsientoSelec = reservaEspecialCliente.getNumAsentoCorrida().toString(); + Integer unaCorridaId =corrida.getId().getCorridaId().intValue(); + Date unaFecCorrida= corrida.getId().getFeccorrida(); + Integer unoTipoVenta= TPV_RESERVA_NORMAL; + Integer unaCategoriaSelec= 1 ; + String unoNumeOperacion= null ; + Tramo tramo = null; + Date fecViaje = corrida.getFechorsalida(); + for (CorridaTramo corridaTramo : corrida.getCorridaTramoList()) { + if(corridaTramo.getOrigem()!=null && corridaTramo.getOrigem().getParadaId().intValue()==unoTerminalOrigenId.intValue() + && corridaTramo.getDestino()!=null && corridaTramo.getDestino().getParadaId().intValue()==unoTerminalDestinoId.intValue()) + tramo = corridaTramo.getTramo(); + fecViaje = corridaTramo.getFechorsalidaH(); + break; + } + if(tramo==null) { + log.error("Reserva não será realizada. Não foi encontrado trecho com Origem:" + unoTerminalOrigenId + " Destino:" +unoTerminalDestinoId + " para a corrida:" + corrida.getId().getCorridaId()); + continue; + } + List vigenciaTarifaList = vigenciaTarifaService.buscarVigenciasIntervalo(new VigenciaTarifa(corrida.getFechorSalidaOriginal(), corrida.getFechorSalidaOriginal())); + if(vigenciaTarifaList==null || vigenciaTarifaList.isEmpty()) { + log.error("Reserva não será realizada. Não foi encontrado Vigência Tarifa com Origem:" + unoTerminalOrigenId + " Destino:" +unoTerminalDestinoId + " para a corrida:" + corrida.getId().getCorridaId()); + continue; + } + Tarifa tarifa = tarifaService.buscar(tramo, corrida.getMarca(), corrida.getClaseServicio(), vigenciaTarifaList!=null ? vigenciaTarifaList.get(0) : null, new Moneda(1), corrida.getRuta()); + if(tarifa==null ) { + log.error("Reserva não será realizada. Não foi encontrado Tarifa com Origem:" + unoTerminalOrigenId + " Destino:" +unoTerminalDestinoId + " para a corrida:" + corrida.getId().getCorridaId()); + continue; + } + Float valorTarifa= tarifa!=null ? tarifa.getPrecio().floatValue() : null ; + //Long tempoReserva = reservaEspecialCliente.getTempoConfirmacao().getTime(); + Long tempoReserva = null; + Cliente cliente = clienteService.obtenerID(reservaEspecialCliente.getClienteId().intValue()); + boletoService.criaBoletoReserva(unoAsientoSelec, unaCorridaId, unaFecCorrida, unoTerminalOrigenId, + unoTerminalDestinoId, unoTipoVenta, unaCategoriaSelec, unoNumeOperacion, unUsuarioId, unPuntoVenta, + reservaEspecialCliente.getClienteId().intValue(), corrida.getRuta().getRutaId(), valorTarifa, tempoReserva, + estacionId, cliente.getNumIdentificaUno(), cliente.getListClienteFidelidad().get(0).getClienteFidelidadId().toString(), + corrida.getClaseServicio().getClaseservicioId(), corrida.getMarca().getMarcaId(), fecViaje, corrida.getEmpresa().getEmpresaId(), cliente.getNombcliente()); + } + } + } catch (Exception e) { + log.error("Erro ao validar/criar reserva especial de clientes", e); + } + } + private void alterarNumPisoCorridaPisoExtra(Corrida corrida, Corrida corridaPisoExtra, String mensagemLog, Boolean atualizarPisoExtra, boolean isPiso3) { if (corrida != null && corridaPisoExtra != null) { log.info(mensagemLog + "; atualizando as corridas do piso 1 e 2"); diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ReservaEspecialClienteServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ReservaEspecialClienteServiceImpl.java new file mode 100644 index 000000000..c51390ad7 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/service/impl/ReservaEspecialClienteServiceImpl.java @@ -0,0 +1,78 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.rjconsultores.ventaboletos.service.impl; + +import java.util.Calendar; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.rjconsultores.ventaboletos.dao.ReservaEspecialClienteDAO; +import com.rjconsultores.ventaboletos.entidad.ReservaEspecialCliente; +import com.rjconsultores.ventaboletos.service.ReservaEspecialClienteService; +import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; + + +/** + * @author valde + * + */ +@Service("reservaEspecialClienteService") +public class ReservaEspecialClienteServiceImpl implements ReservaEspecialClienteService { + + @Autowired + private ReservaEspecialClienteDAO reservaEspecialClienteDAO; + + public List obtenerTodos() { + return reservaEspecialClienteDAO.obtenerTodos(); + } + + public ReservaEspecialCliente obtenerID(Integer id) { + return reservaEspecialClienteDAO.obtenerID(id); + } + + @Transactional + public ReservaEspecialCliente suscribir(ReservaEspecialCliente entidad) { + entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + entidad.setFecmodif(Calendar.getInstance().getTime()); + entidad.setActivo(Boolean.TRUE); + + return reservaEspecialClienteDAO.suscribir(entidad); + } + + @Transactional + public ReservaEspecialCliente actualizacion(ReservaEspecialCliente entidad) { + entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + entidad.setFecmodif(Calendar.getInstance().getTime()); + entidad.setActivo(Boolean.TRUE); + + return reservaEspecialClienteDAO.actualizacion(entidad); + } + + @Transactional + public void borrar(ReservaEspecialCliente entidad) { + entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); + entidad.setFecmodif(Calendar.getInstance().getTime()); + entidad.setActivo(Boolean.FALSE); + + reservaEspecialClienteDAO.actualizacion(entidad); + } + + @Override + public List bucarReservaEspecialByClienteId(Long clienteId) { + return reservaEspecialClienteDAO.bucarReservaEspecialByClienteId(clienteId); + } + + @Override + public List bucarReservaEspecialByCorridaId(Long corridaId) { + return reservaEspecialClienteDAO.bucarReservaEspecialByCorridaId(corridaId); + } + + + + +}