/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mx.edu.um.mateo.rh.service.impl;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import mx.edu.um.mateo.general.model.Usuario;
import mx.edu.um.mateo.general.service.BaseManager;
import mx.edu.um.mateo.general.utils.Constantes;
import mx.edu.um.mateo.rh.dao.ClaveEmpleadoDao;
import mx.edu.um.mateo.rh.model.ClaveEmpleado;
import mx.edu.um.mateo.rh.service.ClaveEmpleadoManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @author develop
*/
@Transactional
@Service
public class ClaveEmpleadoManagerImpl extends BaseManager implements ClaveEmpleadoManager {
@Autowired
private ClaveEmpleadoDao dao;
/**
* Regresa una lista de claveEmpleadoes.
*
* @param params
* @return
*/
@Override
public Map<String, Object> lista(Map<String, Object> params) {
return dao.lista(params);
}
/**
* Obtiene una claveEmpleado
*
* @param id
* @return
*/
@Override
public ClaveEmpleado obtiene(final Long id) {
return dao.obtiene(id);
}
/**
* graba informacion sobre una claveEmpleado
*
* @param claveEmpleado the object to be saved
* @param usuario
*/
@Override
public void graba(ClaveEmpleado claveEmpleado, Usuario usuario) {
claveEmpleado.setUsuarioAlta(usuario);
claveEmpleado.setFechaAlta(new Date());
dao.graba(claveEmpleado, usuario);
}
/**
* Cambia el status de la claveEmpleado a I
*
* @param id el id de claveEmpleado
* @return
*/
@Override
public String elimina(final Long id) {
return dao.elimina(id);
}
/**
* Obtiene la claveActiva de un empleado a travez del id del empleado y el
* estatus de la clave
*
* @param idEmpleado
* @return
*/
@Override
public ClaveEmpleado obtieneClaveActiva(Long idEmpleado) {
return dao.obtieneClaveActiva(idEmpleado);
}
@Override
public ClaveEmpleado nuevaClave(Usuario usuario, String filtro) {
log.debug("entrando a nueva clave");
Map<String, Object> params = new HashMap<>();
params.put("filtro", filtro);
params = dao.lista(params);
List<ClaveEmpleado> claves = (List) params.get(Constantes.CONTAINSKEY_CLAVEEMPLEADO);
ClaveEmpleado claveAnterior = null;
ClaveEmpleado nueva = new ClaveEmpleado();
int anterior = 0, actual;
String hueco = null;
Boolean huboHueco = false;
if (claves.isEmpty()) {
log.debug("no habia claves");
String c = filtro + "0001";
nueva.setClave(c);
nueva.setStatus(Constantes.STATUS_ACTIVO);
nueva.setFecha(new Date());
nueva.setFechaAlta(new Date());
nueva.setUsuarioAlta(usuario);
return nueva;
}
for (ClaveEmpleado claveActual : claves) {
actual = Integer.parseInt(claveActual.getClave());
log.debug("claveactual{}", actual);
if (claveAnterior != null) {
anterior = Integer.parseInt(claveAnterior.getClave());
log.debug("anterior{}", anterior);
}
if (claveAnterior != null && actual - anterior > 1) {
log.debug("suma....{}", actual - anterior);
log.debug("habia hueco");
hueco = String.valueOf(anterior + 1);
log.debug("hueco{}", hueco);
if (dao.noExisteClave(hueco)) {
nueva.setClave(hueco);
nueva.setStatus(Constantes.STATUS_ACTIVO);
nueva.setFecha(new Date());
nueva.setFechaAlta(new Date());
nueva.setUsuarioAlta(usuario);
huboHueco = true;
break;
}
}
claveAnterior = claveActual;
}
if (!huboHueco) {
log.debug("creando nueva clave");
int c = Integer.parseInt(claveAnterior.getClave());
String cs = String.valueOf(c + 1);
log.debug("cs-_{}", cs);
if (dao.noExisteClave(cs)) {
nueva.setClave(cs);
nueva.setStatus(Constantes.STATUS_ACTIVO);
nueva.setFecha(new Date());
nueva.setFechaAlta(new Date());
nueva.setUsuarioAlta(usuario);
}
}
return nueva;
}
}