/*
 * 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.TipoEventoExtraDAO;
import com.rjconsultores.ventaboletos.entidad.TipoEventoExtra;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.exception.ValidacionCampoException;
import com.rjconsultores.ventaboletos.service.EventoExtraService;
import com.rjconsultores.ventaboletos.service.TipoEventoExtraService;
import com.rjconsultores.ventaboletos.utilerias.ApplicationProperties;
import com.rjconsultores.ventaboletos.utilerias.CustomEnum;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;

/**
 * 
 * @author Administrador
 */
@Service("tipoEventoExtraService")
public class TipoEventoExtraServiceImpl implements TipoEventoExtraService {

	@Autowired
	private TipoEventoExtraDAO tipoEventoExtraDAO;
	@Autowired
	private EventoExtraService eventoExtraService;

	public List<TipoEventoExtra> obtenerTodos() {
		return tipoEventoExtraDAO.obtenerTodos();
	}

	public TipoEventoExtra obtenerID(Integer id) {
		return tipoEventoExtraDAO.obtenerID(id);
	}

	@Transactional
	public TipoEventoExtra suscribir(TipoEventoExtra entidad) throws ValidacionCampoException {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.INTEGRACION_TOTVS.getDescricao())) {
			validaCampos(entidad);
		}

		return tipoEventoExtraDAO.suscribir(entidad);
	}

	@Transactional
	public TipoEventoExtra actualizacion(TipoEventoExtra entidad) throws ValidacionCampoException {
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.TRUE);

		if (ApplicationProperties.getInstance().isCustomHabilitado(CustomEnum.INTEGRACION_TOTVS.getDescricao())) {
			validaCampos(entidad);
		}

		return tipoEventoExtraDAO.actualizacion(entidad);
	}

	@Transactional(rollbackFor = BusinessException.class)
	public void borrar(TipoEventoExtra entidad) throws BusinessException {

		if (!eventoExtraService.obtenerPorTipo(entidad).isEmpty()) {
			throw new BusinessException("editarTipoEventoExtraController.MSG.evento");
		}
		entidad.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		entidad.setFecmodif(Calendar.getInstance().getTime());
		entidad.setActivo(Boolean.FALSE);

		tipoEventoExtraDAO.actualizacion(entidad);
	}

	@Override
	public List<TipoEventoExtra> buscar(String descingreso) {
		return tipoEventoExtraDAO.buscar(descingreso);
	}
	
	@Override
	public List<TipoEventoExtra> buscarLike(String descingreso) {
		return tipoEventoExtraDAO.buscarLike(descingreso);
	}

	private void validaCampos(TipoEventoExtra entidad) throws ValidacionCampoException {

		if (entidad.getNatureza() == null) {
			throw new ValidacionCampoException("editarTipoEventoExtraController.MSG.natureza");
		}

		// o campo contacontabil não é obrigatório
//		if (entidad.getContaContabil() == null) {
//			throw new ValidacionCampoException("editarTipoEventoExtraController.MSG.contaContabil");
//		}
	}

}
