/*
 * 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.UsuarioPerfilDAO;
import com.rjconsultores.ventaboletos.entidad.PerfilFuncion;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.entidad.UsuarioPerfil;
import com.rjconsultores.ventaboletos.service.UsuarioPerfilService;
import com.rjconsultores.ventaboletos.service.UsuarioService;
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 Rafius
 */
@Service("usuarioPerfilService")
public class UsuarioPerfilServiceImpl implements UsuarioPerfilService {

    @Autowired
    private UsuarioPerfilDAO usuarioPerfilDAO;
    
	@Autowired
	private UsuarioService usuarioService;

    public List<UsuarioPerfil> obtenerTodos() {
        return usuarioPerfilDAO.obtenerTodos();
    }

    public UsuarioPerfil obtenerID(Integer id) {
        return usuarioPerfilDAO.obtenerID(id);
    }

    @Transactional
    public UsuarioPerfil suscribir(UsuarioPerfil entidad) {
        entidad.setUsuariomodifId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
        entidad.setFecmodif(Calendar.getInstance().getTime());
        entidad.setActivo(Boolean.TRUE);

        return usuarioPerfilDAO.suscribir(entidad);
    }

    @Transactional
    public UsuarioPerfil actualizacion(UsuarioPerfil entidad) {
        entidad.setUsuariomodifId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
        entidad.setFecmodif(Calendar.getInstance().getTime());
        entidad.setActivo(Boolean.TRUE);

        return usuarioPerfilDAO.actualizacion(entidad);
    }

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

        usuarioPerfilDAO.actualizacion(entidad);
    }

    public List<UsuarioPerfil> obtenerPorUsuario(Usuario usuario) {
        return usuarioPerfilDAO.obtenerPorUsuario(usuario);
    }
    
    @Transactional
    @Override
	public boolean validaPermissaoPerfilEdicao(String funcionSistema) {
		Usuario usuarioLogado = usuarioService.obtenerID(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		List<UsuarioPerfil> listUsuarioPerfil = usuarioLogado.getUsuarioPerfilList();
		for (UsuarioPerfil up : listUsuarioPerfil) {
			List<PerfilFuncion> listPerfilFuncion = up.getPerfil().getPerfilFuncionList();
			for (PerfilFuncion pf : listPerfilFuncion) {
				if(pf.getFuncionSistema().getDescruta().equals(funcionSistema)) {
					if(!pf.getIndLectura()) {
						return true;
					}
				}
			}
		}

		return false;
	}
}
