378 lines
15 KiB
Java
378 lines
15 KiB
Java
/*
|
||
* To change this template, choose Tools | Templates
|
||
* and open the template in the editor.
|
||
*/
|
||
package com.rjconsultores.ventaboletos.service.impl;
|
||
|
||
import com.rjconsultores.ventaboletos.entidad.Plaza;
|
||
import java.math.BigDecimal;
|
||
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.TarifaDAO;
|
||
import com.rjconsultores.ventaboletos.entidad.Categoria;
|
||
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
|
||
import com.rjconsultores.ventaboletos.entidad.Constante;
|
||
import com.rjconsultores.ventaboletos.entidad.Empresa;
|
||
import com.rjconsultores.ventaboletos.entidad.Marca;
|
||
import com.rjconsultores.ventaboletos.entidad.Moneda;
|
||
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
|
||
import com.rjconsultores.ventaboletos.entidad.Parada;
|
||
import com.rjconsultores.ventaboletos.entidad.Ruta;
|
||
import com.rjconsultores.ventaboletos.entidad.RutaCombinacion;
|
||
import com.rjconsultores.ventaboletos.entidad.Tarifa;
|
||
import com.rjconsultores.ventaboletos.entidad.TarifaCategoria;
|
||
import com.rjconsultores.ventaboletos.entidad.TarifaHist;
|
||
import com.rjconsultores.ventaboletos.entidad.TarifaMinima;
|
||
import com.rjconsultores.ventaboletos.entidad.TarifaTipoptovta;
|
||
import com.rjconsultores.ventaboletos.entidad.TipoPuntoVenta;
|
||
import com.rjconsultores.ventaboletos.entidad.Tramo;
|
||
import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa;
|
||
import com.rjconsultores.ventaboletos.service.ConstanteService;
|
||
import com.rjconsultores.ventaboletos.service.MonedaService;
|
||
import com.rjconsultores.ventaboletos.service.ParadaService;
|
||
import com.rjconsultores.ventaboletos.service.RutaService;
|
||
import com.rjconsultores.ventaboletos.service.TarifaHistService;
|
||
import com.rjconsultores.ventaboletos.service.TarifaMinimaService;
|
||
import com.rjconsultores.ventaboletos.service.TarifaService;
|
||
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
|
||
import org.apache.log4j.Logger;
|
||
|
||
/**
|
||
*
|
||
* @author rodrigo
|
||
*/
|
||
@Service("tarifaService")
|
||
public class TarifaServiceImpl implements TarifaService {
|
||
|
||
@Autowired
|
||
private TarifaDAO tarifaDAO;
|
||
@Autowired
|
||
private TarifaHistService tarifaHistService;
|
||
@Autowired
|
||
private ConstanteService constanteService;
|
||
@Autowired
|
||
private MonedaService monedaService;
|
||
@Autowired
|
||
private TarifaMinimaService tarifaMinimaService;
|
||
@Autowired
|
||
private ParadaService paradaService;
|
||
@Autowired
|
||
private RutaService rutaService;
|
||
private static Logger log = Logger.getLogger(TarifaServiceImpl.class);
|
||
|
||
public List<Tarifa> obtenerTodos() {
|
||
return tarifaDAO.obtenerTodos();
|
||
}
|
||
|
||
@Transactional(readOnly = true)
|
||
public Tarifa obtenerID(Integer id) {
|
||
return tarifaDAO.obtenerID(id);
|
||
}
|
||
|
||
private void cadastrarTarifaHistorico(Tarifa entidad) {
|
||
TarifaHist th = new TarifaHist();
|
||
th.setActivo(entidad.getActivo());
|
||
th.setClaseServicio(entidad.getClaseServicio());
|
||
th.setFecmodif(entidad.getFecmodif());
|
||
th.setMarca(entidad.getMarca());
|
||
th.setMoneda(entidad.getMoneda());
|
||
th.setPrecio(entidad.getPrecio());
|
||
th.setPreciooriginal(entidad.getPreciooriginal());
|
||
th.setStatustarifa(entidad.getStatustarifa());
|
||
th.setUsuarioId(entidad.getUsuarioId());
|
||
th.setVigenciaTarifa(entidad.getVigenciaTarifa());
|
||
|
||
th = tarifaHistService.suscribir(th);
|
||
}
|
||
|
||
private void cadastrarTarifaMonedaEstrangeira(Tarifa tarifa) {
|
||
Constante constMonedaNacional =constanteService.buscarPorNomeConstante("MONEDANACIONAL_ID");
|
||
Integer idMonedaNacional = new Integer(constMonedaNacional.getValorconstante());
|
||
|
||
Constante constMonedaEstrangeira = constanteService.buscarPorNomeConstante("MONEDAEXTRANJERA_ID");
|
||
Integer idMonedaEstrangeira = new Integer(constMonedaEstrangeira.getValorconstante());
|
||
|
||
Constante constCalculoTarifa =constanteService.buscarPorNomeConstante("CAMBIO_CALCULO_TARIFA");
|
||
BigDecimal valorCalculoTarifa = new BigDecimal(constCalculoTarifa.getValorconstante());
|
||
|
||
Moneda monedaEstrangeira =monedaService.obtenerID(idMonedaEstrangeira);
|
||
|
||
if (monedaEstrangeira == null){
|
||
return;
|
||
}
|
||
|
||
if (tarifa.getMoneda() != null) {
|
||
if (tarifa.getMoneda().getMonedaId().equals(idMonedaNacional)) {
|
||
|
||
Tramo tramo = tarifa.getTramo();
|
||
ClaseServicio claseServicio = tarifa.getClaseServicio();
|
||
VigenciaTarifa vigenciaTarifa = tarifa.getVigenciaTarifa();
|
||
Marca marca = tarifa.getMarca();
|
||
|
||
List<Tarifa> lsTarifasEstrangeiraEquivalente =pesquisar(marca, tramo, monedaEstrangeira,claseServicio, vigenciaTarifa);
|
||
|
||
// se a tarifa estrangeira nao existe, cria:
|
||
if (lsTarifasEstrangeiraEquivalente.isEmpty()) {
|
||
|
||
Tarifa tarifaEstrangeira = new Tarifa();
|
||
tarifaEstrangeira.setActivo(Boolean.TRUE);
|
||
tarifaEstrangeira.setClaseServicio(tarifa.getClaseServicio());
|
||
tarifaEstrangeira.setFecmodif(Calendar.getInstance().getTime());
|
||
tarifaEstrangeira.setLsTarifaCategoria(tarifa.getLsTarifaCategoria());
|
||
tarifaEstrangeira.setLsTarifaTipoptovta(tarifa.getLsTarifaTipoptovta());
|
||
tarifaEstrangeira.setMarca(tarifa.getMarca());
|
||
tarifaEstrangeira.setMoneda(monedaEstrangeira);
|
||
tarifaEstrangeira.setStatustarifa(tarifa.getStatustarifa());
|
||
tarifaEstrangeira.setTramo(tarifa.getTramo());
|
||
tarifaEstrangeira.setVigenciaTarifa(tarifa.getVigenciaTarifa());
|
||
tarifaEstrangeira.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
|
||
// Moneda Nacional -> Moneda Estrangeria:
|
||
BigDecimal precioCambiar = tarifa.getPrecio();
|
||
precioCambiar = precioCambiar.divide(valorCalculoTarifa, 2, java.math.RoundingMode.HALF_UP);
|
||
tarifaEstrangeira.setPrecio(precioCambiar);
|
||
|
||
BigDecimal precioOriginalCambiar = tarifa.getPreciooriginal();
|
||
precioOriginalCambiar = precioOriginalCambiar.divide(valorCalculoTarifa, 2, java.math.RoundingMode.HALF_UP);
|
||
tarifaEstrangeira.setPreciooriginal(precioOriginalCambiar);
|
||
|
||
BigDecimal preciorEdAbiertoCambiar = tarifa.getPrecioredabierto();// esse valor tem q vir preenchido ou eu posso desconsiderá-lo?
|
||
if (preciorEdAbiertoCambiar != null) {
|
||
preciorEdAbiertoCambiar = preciorEdAbiertoCambiar.divide(valorCalculoTarifa, 2, java.math.RoundingMode.HALF_UP);
|
||
tarifaEstrangeira.setPrecioredabierto(preciorEdAbiertoCambiar);
|
||
}
|
||
|
||
Boolean podeAlterar = true;
|
||
podeAlterar =
|
||
podeAlterarTarifaMinima(tarifaEstrangeira, tarifa.getMarca(),
|
||
tarifa.getTramo().getOrigem(), tarifa.getTramo().getDestino(),
|
||
claseServicio, null, tarifaEstrangeira.getMoneda());
|
||
|
||
if (podeAlterar) {
|
||
cadastrarTarifaHistorico(tarifaEstrangeira);
|
||
|
||
tarifaDAO.suscribir(tarifaEstrangeira);
|
||
}
|
||
|
||
} else {
|
||
for (Tarifa tarifaEstrangeira : lsTarifasEstrangeiraEquivalente) {
|
||
tarifaEstrangeira.setActivo(Boolean.TRUE);
|
||
tarifaEstrangeira.setClaseServicio(tarifa.getClaseServicio());
|
||
tarifaEstrangeira.setFecmodif(Calendar.getInstance().getTime());
|
||
tarifaEstrangeira.setLsTarifaCategoria(tarifa.getLsTarifaCategoria());
|
||
tarifaEstrangeira.setLsTarifaTipoptovta(tarifa.getLsTarifaTipoptovta());
|
||
tarifaEstrangeira.setMarca(tarifa.getMarca());
|
||
tarifaEstrangeira.setMoneda(monedaEstrangeira);
|
||
tarifaEstrangeira.setStatustarifa(tarifa.getStatustarifa());
|
||
tarifaEstrangeira.setTramo(tarifa.getTramo());
|
||
tarifaEstrangeira.setVigenciaTarifa(tarifa.getVigenciaTarifa());
|
||
tarifaEstrangeira.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
|
||
// Moneda Nacional -> Moneda Estrangeria:
|
||
BigDecimal precioCambiar = tarifa.getPrecio();
|
||
precioCambiar = precioCambiar.divide(valorCalculoTarifa, 2, java.math.RoundingMode.HALF_UP);
|
||
tarifaEstrangeira.setPrecio(precioCambiar);
|
||
|
||
BigDecimal precioOriginalCambiar = tarifa.getPreciooriginal();
|
||
precioOriginalCambiar = precioOriginalCambiar.divide(valorCalculoTarifa, 2, java.math.RoundingMode.HALF_UP);
|
||
tarifaEstrangeira.setPreciooriginal(precioOriginalCambiar);
|
||
|
||
BigDecimal preciorEdAbiertoCambiar = tarifa.getPrecioredabierto();
|
||
if (preciorEdAbiertoCambiar != null) {
|
||
preciorEdAbiertoCambiar = preciorEdAbiertoCambiar.divide(valorCalculoTarifa, 2, java.math.RoundingMode.HALF_UP);
|
||
tarifaEstrangeira.setPrecioredabierto(preciorEdAbiertoCambiar);
|
||
}
|
||
Boolean podeAlterar = true;
|
||
podeAlterar =
|
||
podeAlterarTarifaMinima(tarifaEstrangeira, tarifa.getMarca(),
|
||
tarifa.getTramo().getOrigem(), tarifa.getTramo().getDestino(),
|
||
tarifaEstrangeira.getClaseServicio(), null, tarifaEstrangeira.getMoneda());
|
||
|
||
if (podeAlterar) {
|
||
cadastrarTarifaHistorico(tarifaEstrangeira);
|
||
|
||
tarifaDAO.suscribir(tarifaEstrangeira);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
@Transactional
|
||
public Tarifa suscribir(Tarifa entidad) {
|
||
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||
entidad.setActivo(Boolean.TRUE);
|
||
|
||
cadastrarTarifaHistorico(entidad);
|
||
cadastrarTarifaMonedaEstrangeira(entidad);
|
||
|
||
return tarifaDAO.suscribir(entidad);
|
||
}
|
||
|
||
@Transactional
|
||
public Tarifa actualizacion(Tarifa entidad) {
|
||
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||
entidad.setActivo(Boolean.TRUE);
|
||
|
||
// Rafael: Segundo a Letícia, não pode atualizar o DOLAR caso haja uma
|
||
// atualização de preço, os dolores somente são gerados na inclusão de preço.
|
||
|
||
// Tarifa tarifa = this.obtenerID(entidad.getTarifaId());
|
||
// entidad.setLsTarifaCategoria(tarifa.getLsTarifaCategoria());
|
||
// entidad.setLsTarifaTipoptovta(tarifa.getLsTarifaTipoptovta());
|
||
|
||
cadastrarTarifaHistorico(entidad);
|
||
// cadastrarTarifaMonedaEstrangeira(entidad);
|
||
|
||
return tarifaDAO.actualizacion(entidad);
|
||
}
|
||
|
||
@Transactional
|
||
public void borrar(Tarifa entidad) {
|
||
for (TarifaCategoria pricing : entidad.getLsTarifaCategoria()) {
|
||
pricing.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
pricing.setFecmodif(Calendar.getInstance().getTime());
|
||
pricing.setActivo(Boolean.FALSE);
|
||
}
|
||
|
||
for (TarifaTipoptovta pricing : entidad.getLsTarifaTipoptovta()) {
|
||
pricing.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
pricing.setFecmodif(Calendar.getInstance().getTime());
|
||
pricing.setActivo(Boolean.FALSE);
|
||
}
|
||
|
||
entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
entidad.setFecmodif(Calendar.getInstance().getTime());
|
||
entidad.setActivo(Boolean.FALSE);
|
||
|
||
cadastrarTarifaHistorico(entidad);
|
||
|
||
tarifaDAO.actualizacion(entidad);
|
||
}
|
||
|
||
public List<Tarifa> pesquisar(Marca marca, Tramo tramo, Moneda moneda,
|
||
ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa) {
|
||
return tarifaDAO.pesquisar(marca, tramo, moneda, claseServicio, vigenciaTarifa);
|
||
}
|
||
|
||
public boolean existe(Marca marca, Tramo tramo, Moneda moneda,ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa, Ruta ruta, OrgaoConcedente orgaoConcedente) {
|
||
return tarifaDAO.existe(marca, tramo, moneda, claseServicio, vigenciaTarifa, ruta, orgaoConcedente);
|
||
}
|
||
|
||
public List<Tarifa> pesquisar(Marca marca, Parada origem, Parada destino, Moneda moneda,
|
||
ClaseServicio claseServicio, VigenciaTarifa vigenciaTarifa,
|
||
Categoria categoria, TipoPuntoVenta tipoPuntoVenta) {
|
||
return tarifaDAO.pesquisar(marca, origem, destino, moneda, claseServicio, vigenciaTarifa,
|
||
categoria, tipoPuntoVenta);
|
||
}
|
||
|
||
public Tarifa buscar(Tramo tramo, Marca marca, ClaseServicio claseServicio,
|
||
VigenciaTarifa vigenciaTarifa, Moneda moneda) {
|
||
return tarifaDAO.buscar(tramo, marca, claseServicio, vigenciaTarifa, moneda);
|
||
}
|
||
|
||
public List<Tarifa> buscarPorVigencia(VigenciaTarifa vigencia) {
|
||
return tarifaDAO.buscarPorVigencia(vigencia);
|
||
}
|
||
|
||
public List<Tarifa> pesquisar(List<Moneda> lsMoneda, List<Marca> lsMarca,
|
||
List<ClaseServicio> lsClaseServicio, List<Categoria> lsCategoria,
|
||
List<Empresa> lsEmpresa, List<Ruta> lsRuta,
|
||
List<TipoPuntoVenta> lsTipoPuntoVenta, List<VigenciaTarifa> lsVigenciaTarifa) {
|
||
return tarifaDAO.pesquisar(lsMoneda, lsMarca, lsClaseServicio, lsCategoria,
|
||
lsEmpresa, lsRuta, lsTipoPuntoVenta, lsVigenciaTarifa);
|
||
}
|
||
|
||
public Boolean podeAlterarTarifaMinima(Tarifa tarifa, Marca marca, Parada origem,
|
||
Parada destino, ClaseServicio claseServicio, Plaza plaza, Moneda moneda) {
|
||
|
||
Boolean podeAlterarTarifaMinima = Boolean.TRUE;
|
||
|
||
List<TarifaMinima> lsTarifaMinima = tarifaMinimaService.pesquisarEspecifico(marca, origem, destino, claseServicio, moneda);
|
||
|
||
if (lsTarifaMinima.isEmpty()) {
|
||
lsTarifaMinima = tarifaMinimaService.pesquisarOrigemDestinoTodos(marca, origem, destino, claseServicio, moneda);
|
||
}
|
||
|
||
log.debug("Moneda : " + moneda.getDescmoneda());
|
||
log.debug("Pre<72>o : " + tarifa.getPrecio());
|
||
|
||
for (TarifaMinima tm : lsTarifaMinima) {
|
||
if (tarifa.getPrecio().compareTo(tm.getImportetarifa()) == -1) {
|
||
podeAlterarTarifaMinima = Boolean.FALSE;
|
||
log.debug("Tarifa Minima ID: " + tm.getTarifaminimaId());
|
||
log.debug("Tarifa Minima Origen : " + tm.getOrigem().getDescparada());
|
||
log.debug("Tarifa Minima Destino: " + tm.getDestino().getDescparada());
|
||
log.debug("Tarifa Minima Marca : " + tm.getMarca().getDescmarca());
|
||
log.debug("Tarifa Minima Clase : " + tm.getClaseServicio().getDescclase());
|
||
log.debug("Tarifa Minima Moneda : " + tm.getMoneda().getDescmoneda());
|
||
log.debug("Tarifa Minima : " + tm.getImportetarifa() + " Valor Alterado: " + tarifa.getPrecio());
|
||
}
|
||
}
|
||
|
||
return podeAlterarTarifaMinima;
|
||
}
|
||
|
||
public List<Tarifa> buscarExisteVigencia(VigenciaTarifa vigenciaTarifa) {
|
||
return tarifaDAO.buscarExisteVigencia(vigenciaTarifa);
|
||
}
|
||
|
||
// Metodo para gerar todas as tarifas possiveis
|
||
@Transactional
|
||
public Boolean generarTarifas(VigenciaTarifa vigencia, Marca marca) {
|
||
|
||
// Lista de Rutas
|
||
List<Ruta> lsRuta = rutaService.obtenerTodos();
|
||
try {
|
||
for (Ruta r : lsRuta) {
|
||
Ruta ruta = rutaService.obtenerID(r.getRutaId());
|
||
|
||
// Lista de Combinações
|
||
List<RutaCombinacion> lsRutaCombinacion = ruta.getRutaCombinacionList();
|
||
for (RutaCombinacion rc : lsRutaCombinacion) {
|
||
|
||
Tarifa tarifa = new Tarifa();
|
||
// Valor de 6 Pesos por Default
|
||
tarifa.setPrecio(BigDecimal.valueOf(6));
|
||
tarifa.setPreciooriginal(BigDecimal.ZERO);
|
||
// Pesos Mexicano
|
||
tarifa.setMoneda(monedaService.obtenerID(1));
|
||
// Marca... informado antes
|
||
// Vigencia... informado antes
|
||
tarifa.setVigenciaTarifa(vigencia);
|
||
tarifa.setMarca(marca);
|
||
|
||
tarifa.setClaseServicio(r.getClaseServicio());
|
||
tarifa.setTramo(rc.getTramo());
|
||
|
||
// Tramo-Marca-Classe-Vigencia-Moneda
|
||
Tarifa existeTarifa = tarifaDAO.buscar(tarifa.getTramo(), tarifa.getMarca(), tarifa.getClaseServicio(),
|
||
tarifa.getVigenciaTarifa(), tarifa.getMoneda());
|
||
|
||
if (existeTarifa == null) {
|
||
tarifa.setFecmodif(Calendar.getInstance().getTime());
|
||
tarifa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
|
||
tarifa.setActivo(Boolean.TRUE);
|
||
tarifa.setStatustarifa("L");
|
||
|
||
log.debug("Tarifa: Ruta " + ruta.getDescruta() + " - " + ruta.getRutaId() + " Tramo: " + tarifa.getTramo().getTramoId()
|
||
+ " Marca " + marca + " Vigencia: " + vigencia);
|
||
|
||
tarifa = tarifaDAO.suscribir(tarifa);
|
||
}
|
||
}
|
||
}
|
||
} catch (Exception e) {
|
||
log.debug("ERRO:" + e);
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
}
|