/*
 * 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.ConductorDAO;
import com.rjconsultores.ventaboletos.dao.EmpleadoDAO;
import com.rjconsultores.ventaboletos.entidad.Conductor;
import com.rjconsultores.ventaboletos.entidad.Empleado;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.service.EmpleadoService;
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 Shiro
 */
@Service("empleadoService")
public class EmpleadoServiceImpl implements EmpleadoService {
	
	private static int CONDUCTOR = 1;

    @Autowired
    private EmpleadoDAO empleadoDAO;
    @Autowired
    private ConductorDAO conductorDAO;

    public List<Empleado> obtenerTodos() {
        return empleadoDAO.obtenerTodos();
    }

    public Empleado obtenerID(Integer id) {
        return empleadoDAO.obtenerID(id);
    }

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

        Empleado result = empleadoDAO.suscribir(entidad);
        
        if (entidad.getTipoEmpleado().getTipoEmpleadoId() == CONDUCTOR){
        	Conductor cond = new Conductor();
        	cond.setActivo(Boolean.TRUE);
        	cond.setEmpleado(result);
        	cond.setFecmodif(Calendar.getInstance().getTime());
        	cond.setNombconductor(entidad.getNombEmpleado());
        	cond.setNomPaterno(entidad.getNombPaterno());
        	cond.setNomMaterno(entidad.getNombMaterno());
        	cond.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
        	
        	conductorDAO.suscribir(cond);
        }
        
        return result;
    }

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

        if (entidad.getTipoEmpleado() != null && entidad.getTipoEmpleado().getTipoEmpleadoId() == CONDUCTOR){
        	Conductor cond = conductorDAO.buscarPorEmpleado(entidad.getEmpleadoId());
        	
        	if (cond == null) {
        		cond = new Conductor();
        	}
        	cond.setActivo(Boolean.TRUE);
        	cond.setEmpleado(entidad);
        	cond.setFecmodif(Calendar.getInstance().getTime());
        	cond.setNombconductor(entidad.getNombEmpleado());
        	cond.setNomPaterno(entidad.getNombPaterno());
        	cond.setNomMaterno(entidad.getNombMaterno());
        	cond.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

        	if (cond.getConductorId() != null) {
        		conductorDAO.actualizacion(cond);
        	} else {
        		conductorDAO.suscribir(cond);        		
        	}
        }
        
        return empleadoDAO.actualizacion(entidad);
    }

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

		if (entidad.getTipoEmpleado().getTipoEmpleadoId() == CONDUCTOR) {
			Conductor cond = conductorDAO.buscarPorEmpleado(entidad.getEmpleadoId());
			if (cond != null) {
				cond.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
				cond.setFecmodif(Calendar.getInstance().getTime());
				cond.setActivo(Boolean.FALSE);
				conductorDAO.actualizacion(cond);
			}
		}
        
        empleadoDAO.actualizacion(entidad);
    }

    public List<Empleado> pesquisaClave(String empleadoClave) {
        return empleadoDAO.pesquisaClave(empleadoClave);
    }

	@Override
	public List<Empleado> pesquisaEmpresa(Empresa empresa) {
		return empleadoDAO.pesquisaEmpresa(empresa.getEmpresaId());
	}
    
}
