/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.service.impl;

import com.rjconsultores.ventaboletos.dao.ExcepcionRedondoDAO;
import com.rjconsultores.ventaboletos.entidad.ExcepcionRedondo;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.ExcepcionRedondoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
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;

/**
 * 
 * @author Administrador
 */
@Service("excepcionRedondoService")
public class ExcepcionRedondoServiceImpl implements ExcepcionRedondoService {

	@Autowired
	private ExcepcionRedondoDAO excepcionRedondoDAO;

	public List<ExcepcionRedondo> obtenerTodos() {
		return excepcionRedondoDAO.obtenerTodos();
	}

	public ExcepcionRedondo obtenerID(Integer id) {
		return excepcionRedondoDAO.obtenerID(id);
	}

	@Transactional(rollbackFor=BusinessException.class)
	public ExcepcionRedondo suscribirActualizar(ExcepcionRedondo entidad) throws BusinessException {
		
		if (entidad.getOrigem().getParadaId().equals(entidad.getDestino().getParadaId())) {
			throw new BusinessException("MSG.Origem.Igual.Destino");
		}
		
		
		List<ExcepcionRedondo> lsExcepciones = excepcionRedondoDAO.buscar(entidad.getOrigem(), entidad.getDestino());
		boolean podeSavar = false;
		if (lsExcepciones.isEmpty()) {
			podeSavar = true;
		} else {
			if (entidad.getExcepcionredondoId() != null) {
				for (ExcepcionRedondo er : lsExcepciones) {
					if (entidad.getExcepcionredondoId().equals(er.getExcepcionredondoId())) {
						podeSavar = true;
					}
				}
			}
		}

		if (!podeSavar) {
			throw new BusinessException("MSG.Registro.Existe");
		}

		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		if (entidad.getExcepcionredondoId() == null) {
			return excepcionRedondoDAO.suscribir(entidad);
		} else {
			return excepcionRedondoDAO.actualizacion(entidad);
		}

	}


	@Transactional
	public void borrar(ExcepcionRedondo entidad) {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.FALSE);

		excepcionRedondoDAO.actualizacion(entidad);
	}

	public List<ExcepcionRedondo> buscar(String indTipo, Parada origem, Parada destino) {
		return excepcionRedondoDAO.buscar(indTipo, origem, destino);
	}
}
