/* * 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 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 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 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 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 buscarPorVigencia(VigenciaTarifa vigencia) { return tarifaDAO.buscarPorVigencia(vigencia); } public List pesquisar(List lsMoneda, List lsMarca, List lsClaseServicio, List lsCategoria, List lsEmpresa, List lsRuta, List lsTipoPuntoVenta, List 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 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ç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 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 lsRuta = rutaService.obtenerTodos(); try { for (Ruta r : lsRuta) { Ruta ruta = rutaService.obtenerID(r.getRutaId()); // Lista de Combinações List 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; } }