Incam_Intranet/Objects/Persona.php
2011-04-04 15:16:10 +00:00

1075 lines
31 KiB
PHP
Raw Blame History

<?php
/*
* Clase Persona
*
* Contiene toda la informaci<63>n relativa a la persona.
*
* 2008-10-06 (diego): Se crea el objeto con los m<>todos necesarios para gestionar candidatos.
*
*/
include_once("BD.php");
include_once("Rol.php");
include_once("Objects/Administracion.php");
class Persona{
protected $campos = array();
/* Lista de tecnolog<6F>as*/
protected $listaTecnologias = null;
/* Lista de idiomas*/
protected $listaIdiomas = null;
/* Lista de titulaciones*/
protected $listaTitulaciones = null;
/* Lista de localidades deseadas*/
protected $listaProvinciasDeseadas = null;
/* Lista de perfiles*/
protected $listaPerfiles = null;
function Persona($oid){
$consulta = "SELECT oid FROM usuarios WHERE oid = '$oid'";
$bd = new BD();
$num = $bd->numFilas($consulta);
if($num > 0){
$this->campos['oid']=$oid;
}else{
$error = "Persona no encontrada.";
throw new Exception($error);
}
}
function tieneRol($rol){
$roles=$this->getValor("rol");
$arrayByUser=explode(".", $roles);
//Comprobamos si tiene el rol directamente:
if(in_array($rol,$arrayByUser)){
return true;
//En caso contrario, miramos si tiene rol padre:
}else{
$objetoRol = new Rol($rol);
foreach($arrayByUser as $unRol){
if($objetoRol->esHijoDe($unRol)){
return true;
}
}
}
return false;
}
function tieneRolLista($rol){
$roles=$this->getValor("rol");
$arrayByUser=explode(".", $roles);
$arrayRoles=explode(".", $rol);
// echo "roles usuario:";
// print_r($arrayByUser);
// echo " roles opcion:";
// print_r($arrayRoles);
// echo "<br />";
$cuenta=count(array_diff($arrayByUser,$arrayRoles));
$cuenta2=count($arrayByUser);
return ($cuenta<$cuenta2);
}
function getValor($nombre){
$especial = false;
if(gettype($nombre) != "integer" && gettype($nombre) != "string"){
return false;
exit;
}
if(array_key_exists($nombre,$this->campos)){
// El campo ya lo hab<61>amos recuperamos, lo mostramos
return $this->campos[$nombre];
} else {
// Hay que recuperar el campo de la base de datos
$consulta="SELECT * FROM usuarios WHERE oid=\"".$this->campos['oid']."\"";
switch ($nombre) {
case "nombre_procedencia":$idProcedencia=$this->getValor("procedencia");
$consulta="SELECT id FROM procedencia WHERE procedencia.num=\"".$idProcedencia."\"";
$especial = true;
break;
case "nombre_estado":$idEstado=$this->getValor("estado");
$consulta="SELECT nombre FROM candidatos_estados WHERE cod=\"".$idEstado."\"";
$especial = true;
break;
case "nombre_rol":$idRol=$this->getValor("rol");
$consulta="SELECT id FROM rol WHERE oid=\"".$idRol."\"";
$especial = true;
break;
case "nombre_localidad":$idLocalidad=$this->getValor("localidad");
$consulta="SELECT id FROM localidades WHERE oid=\"".$idLocalidad."\"";
$especial = true;
break;
case "nombre_localidad_deseada":$idLocalidad=$this->getValor("localidad_deseada");
$consulta="SELECT id FROM localidades WHERE oid=\"".$idLocalidad."\"";
$especial = true;
break;
case "nombre_perfil":$idPerfil=$this->getValor("perfil");
$consulta="SELECT id FROM perfil WHERE oid=\"".$idPerfil."\"";
$especial = true;
break;
case "nombre_cliente":$idCliente=$this->getValor("cliente");
$consulta="SELECT id FROM clientes WHERE oid=\"".$$idCliente."\"";
$especial = true;
break;
case "nombre_procedencia_cv":$idPCV=$this->getValor("procedenciaCV");
$consulta="SELECT nombre FROM procedencia_cv WHERE id=\"".$idPCV."\"";
$especial = true;
break;
case "nombre_salario_min":
$consulta="SELECT salario.nombre FROM salario, usuarios WHERE salario.id=usuarios.salario_min AND usuarios.oid=\"".$this->getValor("oid")."\"";
$especial = true;
break;
case "nombre_salario_max":
$consulta="SELECT salario.nombre FROM salario, usuarios WHERE salario.id=usuarios.salario_max AND usuarios.oid=\"".$this->getValor("oid")."\"";
$especial = true;
break;
case "nombre_tipo":$tipo=$this->getValor("tipo");
if($tipo == "candidato"){
$arrayAct=array($nombre => $tipo);
$this->campos=$this->campos + $arrayAct;
return "Candidato";
}else if($tipo == "usuario"){
$arrayAct=array($nombre => $tipo);
$this->campos=$this->campos + $arrayAct;
return "Empleado";
}
break;
default:
break;
}
$bd=new BD();
if(!$especial){
$valores = $bd->getRegistro($consulta);
// Lo insertamos para nosotros
foreach($valores as $key => $value){
$arrayAct=array($key => $value);
$this->campos=$this->campos + $arrayAct;
}
}else{
// Lo insertamos para nosotros
$valor= $bd->getCampo($consulta);
// Lo insertamos para nosotros
$arrayAct=array($nombre => $valor);
$this->campos=$this->campos + $arrayAct;
}
return $this->campos[$nombre];
}
}
/**
* Acceso a los campos de la persona.
* @return los campos de la persona.
*/
function getCampos(){
return $this->campos;
}
public function setPassword($viejo, $nuevo, $confirmar){
$password = $this->getValor("password");
if($password != md5($viejo)){
return false;
}else if($nuevo == ""){
return false;
}else if($nuevo != $confirmar){
return false;
}else{
$oid = $this->getValor("oid");
$nuevo = md5($nuevo);
$consulta = "UPDATE usuarios SET password='$nuevo' WHERE oid='$oid'";
$bd = new BD();
$this->campos["password"]=$nuevo;
return $bd->execQuery($consulta);
}
}
public function modFechaCandidatura(){
$fecha = date(Y."-".m."-".d);
$this->campos["fecha"] = $fecha;
}
public function modObsGerente($obs){
$this->campos["obsGerente"] = $obs;
}
public function modObsRRHH($obs){
$this->campos["obsRRHH"] = $obs;
}
/**
* Asigna un nuevo campo a la persona.
* @param nombre - nombre del campo a asignar.
* @param valor - valor del campo.
*/
protected function setCampo($nombre, $valor){
/*if($nombre == "salario_min" || $nombre == "salario_max"){
if(!$this->compruebaSalario($nombre, $valor)){
$error = "El salario m&aacute;ximo debe ser mayor que el salario m&iacute;nimo.";
throw new Exception($error);
return false;
}
}*/
if($nombre != "password" || $valor != ""){
//Antes de editar comprobamos si ya existe una persona
//con esos datos.
if($this->existe($nombre, $valor)){
$error = "Ya existe una persona con esos campos. No se edita.";
throw new Exception($error);
return false;
}
$viejo = $this->getValor($nombre);
if($viejo != $valor){
//Comprobamos multivaluado y casos especiales antes del cambio:
$viejo = $this->getValorMulti($nombre, $viejo);
$this->campos[$nombre] = $valor;
$oid = $this->getValor("oid");
// $fecha = "'".date(Y."-".m."-".d)."'";
$dato = $nombre." = '".$valor."',";
// $consulta = "UPDATE usuarios SET $nombre = '$valor', fecha_modificacion = $fecha WHERE oid='$oid'";
// $bd = new BD();
// if($bd->execQuery($consulta)){
//Comprobamos multivaluado y casos especiales:
$valor = $this->getValorMulti($nombre, $valor);
if(($nombre == "observaciones") || ($nombre == "descripcion")){
$historial = $nombre;
}else if($viejo == "" && $valor != ""){
$historial = "$nombre (de - a $valor)";
}else{
$historial = "$nombre (de $viejo a $valor)";
}
//Hay campos que no actualizan el historial
if(($nombre != "msgEstado") && ($nombre != "diasEspera")){
$this->actualizarHistorial($historial);
}
// }
return $dato;
}else{
return "";
}
}
}
private function compruebaSalario($nombre, $valor){
$salario = nombre_salario($valor);
//Hago comparaciones num<75>ricas.
$search = array(">", "<", "=", ".", "+", "-");
$replace = array("", "", "", "", "", "");
$salario = str_replace($search, $replace, $salario);
switch ($nombre) {
case "salario_min":
$salario_max = $this->getValor("nombre_salario_max");
$search = array(">", "<", "=", ".", "+", "-");
$replace = array("", "", "", "", "", "");
$salario_max = str_replace($search, $replace, $salario_max);
if($salario_max < $salario){
return false;
}else{
return true;
}
break;
case "salario_max":
$salario_min = $this->getValor("nombre_salario_min");
$search = array(">", "<", "=", ".", "+", "-");
$replace = array("", "", "", "", "", "");
$salario_min = str_replace($search, $replace, $salario_min);
if($salario_min > $salario){
return false;
}else{
return true;
}
break;
default:
break;
}
return false;
}
private function existe($nombre, $valor){
if($valor == ""){
return false;
}
$bd = new BD();
$oid = $this->getValor("oid");
switch ($nombre) {
case "dni":
$consulta = "SELECT dni FROM usuarios WHERE dni='$valor' AND oid <> '$oid'";
break;
case "email":
$consulta = "SELECT email FROM usuarios WHERE email='$valor' AND oid <> '$oid'";
break;
default:
return false;
break;
}
$cont = $bd->numFilas($consulta);
if($cont > 0){
return true;
}
return false;
}
private function getValorMulti($nombre, $antiguo){
switch ($nombre) {
case "procedencia":
$valor = nombre_procedencia($antiguo);
break;
case "procedenciaCV":
$valor = nombre_procedencia_cv($antiguo);
break;
case "estado":
$valor = nombre_estado($antiguo);
break;
case "localidad":
$valor = nombre_localidad($antiguo);
break;
case "localidad_deseada":
$valor = nombre_localidad($antiguo);
break;
case "perfil":
$valor = nombre_perfil($antiguo);
break;
case "cliente":
$valor = nombre_cliente($antiguo);
break;
case "salario_min":
$valor = nombre_salario($antiguo);
break;
case "salario_max":
$valor = nombre_salario($antiguo);
break;
default:
$valor = $antiguo;
break;
}
return $valor;
}
/**
* Asigna nuevos campos a la persona.
* @param array - lista de campos a asignar de la forma campo => valor.
*/
function setCampos($array){
$consulta = "UPDATE usuarios SET ";//" $nombre = '$valor', fecha_modificacion = $fecha WHERE oid='$oid'";
foreach($array as $key => $value){
$consulta .= $this->setCampo($key, $value);
}
//Quitamos la <20>ltima coma
/*if ($consulta{strlen($consulta) - 1} == ",")
$consulta = substr($consulta,0,strlen($consulta) - 1);*/
$fecha = "'".date(Y."-".m."-".d)."'";
$consulta .= " fecha_modificacion = $fecha ";
$oid = $this->getValor("oid");
$consulta .= "WHERE oid='$oid'";
$bd = new BD();
return $bd->execQuery($consulta);
}
/**
* Elimina una persona de la base de datos.
*/
protected function eliminar(){
$oid = $this->getValor("oid");
// Recuperamos todos sus curriculum para eliminarlos
$consulta = "SELECT curriculum FROM curriculum_usuario WHERE oid='".$oid."'";
$bd = new BD();
$curriculums=$bd->arrayQuery($consulta,"curriculum");
$administracion=new Administracion("","");
$constantes=$administracion->getItem("constantes");
$url = $constantes['srcDocs'];
foreach ($curriculums as $doc){
echo "eliminamos ".$url.SLASH.$doc;
@unlink($url.SLASH.$doc);
}
$consulta = "DELETE FROM usuarios WHERE oid='$oid'";
return $bd->execQuery($consulta);
}
/**
* Devuelve una lista de tecnolog<6F>as asociadas al usuario.
*/
function getTecnologias(){
if($this->listaTecnologias == null){
$oid = $this->getValor("oid");
$consulta = "SELECT tecnologia, id FROM tecnologia_usuario, tecnologia WHERE oid_i = '$oid' and tecnologia_usuario.tecnologia = tecnologia.oid";
$bd = new BD();
$this->listaTecnologias = $bd->keyValueQuery($consulta, "id", "tecnologia");
}
return $this->listaTecnologias;
}
/**
* Devuelve una lista de idiomas asociados al usuario.
*/
function getIdiomas(){
if($this->listaIdiomas == null){
$oid = $this->getValor("oid");
$consulta = "SELECT idioma, id FROM idioma_usuario, idiomas WHERE oid_i = '$oid' and idioma_usuario.idioma = idiomas.oid";
$bd = new BD();
$this->listaIdiomas = $bd->keyValueQuery($consulta, "id", "idioma");
}
return $this->listaIdiomas;
}
/**
* Devuelve una lista de titulaciones asociadas al usuario.
*/
function getTitulaciones(){
if($this->listaTitulaciones == null){
$oid = $this->getValor("oid");
$consulta = "SELECT t.oid, t.id FROM titulacion_usuario tu, titulaciones t WHERE tu.oid_i = '$oid' and tu.titulacion = t.oid";
$bd = new BD();
$this->listaTitulaciones = $bd->keyValueQuery($consulta, "id", "oid");
}
return $this->listaTitulaciones;
}
/**
* Devuelve una lista de provincias deseadas asociadas al usuario.
*/
function getProvinciasDeseadas(){
if($this->listaProvinciasDeseadas == null){
$oid = $this->getValor("oid");
$consulta = "SELECT l.oid, l.id FROM provincia_usuario lu, provincias l WHERE lu.oid_i = '$oid' and lu.provincia = l.oid";
$bd = new BD();
$this->listaProvinciasDeseadas = $bd->keyValueQuery($consulta, "id", "oid");
}
return $this->listaProvinciasDeseadas;
}
/**
* Devuelve una lista de perfiles asociadas al usuario.
*/
function getPerfiles(){
if($this->listaPerfiles == null){
$oid = $this->getValor("oid");
$consulta = "SELECT p.oid, p.id FROM perfil_usuario pu, perfil p WHERE pu.oid_i = '$oid' and pu.perfil = p.oid";
$bd = new BD();
$this->listaPerfiles = $bd->keyValueQuery($consulta, "id", "oid");
}
return $this->listaPerfiles;
}
function addTecnologias($array){
if(gettype($array) == "array"){
foreach($array as $elem){
$this->addTecnologia($elem);
}
$this->calculaAfinidad();
}
}
function addIdiomas($array){
if(gettype($array) == "array"){
foreach($array as $elem){
$this->addIdioma($elem);
}
$this->calculaAfinidad();
}
}
function addTitulaciones($array){
if(gettype($array) == "array"){
foreach($array as $elem){
$this->addTitulacion($elem);
}
}
}
function addProvinciasDeseadas($array){
if(gettype($array) == "array"){
foreach($array as $elem){
$this->addProvinciaDeseada($elem);
}
$this->calculaAfinidad();
}
}
function addPerfiles($array){
if(gettype($array) == "array"){
foreach($array as $elem){
$this->addPerfil($elem);
}
$this->calculaAfinidad();
}
}
/**
* Asocia una nueva tecnolog<6F>a en la base de datos.
*/
private function addTecnologia($id){
$oid = $this->getValor("oid");
$this->getTecnologias();
if(!in_array($id, $this->listaTecnologias)){
$consulta = "SELECT id FROM tecnologia WHERE oid='$id'";
$bd = new BD();
$nombre_tecno = $bd->getCampo($consulta);
$consulta = "INSERT INTO tecnologia_usuario VALUES('$id', '$oid')";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Nueva tecno: $nombre_tecno";
$this->actualizarHistorial($mensaje);
$this->listaTecnologias[$nombre_tecno] = $id;
}else{
return false;
}
}else{
return false;
}
return true;
}
/**
* Asocia un nuevo idioma en la base de datos.
*/
private function addIdioma($id){
$oid = $this->getValor("oid");
$this->getIdiomas();
if(!in_array($id, $this->listaIdiomas)){
$consulta = "SELECT id FROM idiomas WHERE oid='$id'";
$bd = new BD();
$nombre_idioma = $bd->getCampo($consulta);
$consulta = "INSERT INTO idioma_usuario VALUES('$id', '$oid')";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Nuevo idioma: $nombre_idioma";
$this->actualizarHistorial($mensaje);
$this->listaIdiomas[$nombre_idioma] = $id;
}else{
return false;
}
}else{
return false;
}
return true;
}
/**
* Asocia una nueva titulaci<63>n en la base de datos.
*/
private function addTitulacion($id){
$oid = $this->getValor("oid");
$this->getTitulaciones();
if(!in_array($id, $this->listaTitulaciones)){
$consulta = "SELECT id FROM titulaciones WHERE oid='$id'";
$bd = new BD();
$nombre_titulacion = $bd->getCampo($consulta);
$consulta = "INSERT INTO titulacion_usuario VALUES('$id', '$oid')";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Nueva titu: $nombre_titulacion";
$this->actualizarHistorial($mensaje);
$this->listaTitulaciones[$nombre_titulacion] = $id;
}else{
return false;
}
}else{
return false;
}
return true;
}
/**
* Asocia una nueva provincia deseada en la base de datos.
*/
private function addProvinciaDeseada($id){
$oid = $this->getValor("oid");
$this->getProvinciasDeseadas();
if(!in_array($id, $this->listaProvinciasDeseadas)){
$consulta = "SELECT id FROM provincias WHERE oid='$id'";
$bd = new BD();
$nombre_provincia = $bd->getCampo($consulta);
$consulta = "INSERT INTO provincia_usuario VALUES('$id', '$oid')";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Nueva provincia deseada: ".$nombre_provincia;
$this->actualizarHistorial($mensaje);
$this->listaProvinciasDeseadas[$nombre_provincia] = $id;
}else{
return false;
}
}else{
return false;
}
return true;
}
/**
* Asocia un nuevo perfil en la base de datos.
*/
private function addPerfil($id){
$oid = $this->getValor("oid");
$this->getPerfiles();
if(!in_array($id, $this->listaPerfiles)){
$consulta = "SELECT id FROM perfil WHERE oid='$id'";
$bd = new BD();
$nombre_perfil = $bd->getCampo($consulta);
$consulta = "INSERT INTO perfil_usuario VALUES('$id', '$oid')";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Nuevo perfil: ".$nombre_perfil;
$this->actualizarHistorial($mensaje);
$this->listaPerfiles[$nombre_perfil] = $id;
}else{
return false;
}
}else{
return false;
}
return true;
}
/**
* A<>ade un nuevo curr<72>culum a la persona.
*/
protected function addCurriculum($archivo, $usuario){
$cv = $this->getValor("cv") + 1;
$oid = $this->getValor("oid");
$nombre_archivo = $oid."-".$cv;
$directorio = constante("srcDocs").SLASH."cv".SLASH;
if (!@file_exists($directorio)){
mkdir($directorio, 0777);
}
$tamano_archivo = $archivo['size'];
$nombre_archivo .= ".".nombre_extension($archivo['name']);
$destino = $directorio.$nombre_archivo;
$nombre_ruta_tabla = "cv".SLASH.$nombre_archivo;
$fichero_subido = false;
if (($tamano_archivo < 10000000) && (is_uploaded_file($archivo['tmp_name']))) {
copy($archivo['tmp_name'], $destino);
$fichero_subido = true;
}
$nombre_ruta_tabla=addslashes($nombre_ruta_tabla);
if($fichero_subido){
$bd = new BD();
$consulta = "INSERT INTO curriculum_usuario (oid, curriculum, fecha) values ('".$oid."', '".$nombre_ruta_tabla."', now())";
$bd->execQuery($consulta);
$this->actualizarHistorial("Nuevo CV", $usuario);
$consulta = "update usuarios set cv=cv+1 where oid='$oid'";
$bd->execQuery($consulta);
return true;
}
return false;
}
protected function removeCurriculum($curriculum, $fecha, $usuario){
$oid = $this->getValor("oid");
$consulta = "DELETE FROM curriculum_usuario WHERE oid = '".$oid."' and curriculum = '".$curriculum."' and fecha = '".$fecha."'";
$bd = new BD();
$resultado = $bd->execQuery($consulta);
if ($resultado){
$consulta = "update usuarios set cv=cv-1 where oid='$oid'";
$bd->execQuery($consulta);
$cambios = "CV eliminado";
$this->actualizarHistorial($cambios, $usuario);
$ruta = constante("srcDocs")."\\".$curriculum;
if (!@unlink($ruta)){
return false;
}else{
return true;
}
}
return false;
}
/**
* Elimina la asociaci<63>n entre una tecnolog<6F>a y un usuario.
*/
function removeTecnologia($id){
$oid = $this->getValor("oid");
$this->getTecnologias();
if(in_array($id, $this->listaTecnologias)){
$consulta = "SELECT id FROM tecnologia WHERE oid='$id'";
$bd = new BD();
$nombre_tecno = $bd->getCampo($consulta);
$consulta = "DELETE FROM tecnologia_usuario WHERE tecnologia='$id' and oid_i='$oid'";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Eliminada tecno: $nombre_tecno";
$this->actualizarHistorial($mensaje);
$lista = $this->listaTecnologias;
$this->listaTecnologias = null;
foreach($lista as $key => $value){
if($value != $id){
$this->listaTecnologias[$key] = $value;
}
}
}else{
return false;
}
}else{
return false;
}
$this->calculaAfinidad();
return true;
}
/**
* Elimina la asociaci<63>n entre un idioma y un usuario.
*/
function removeIdioma($id){
$oid = $this->getValor("oid");
$this->getIdiomas();
if(in_array($id, $this->listaIdiomas)){
$consulta = "SELECT id FROM idiomas WHERE oid='$id'";
$bd = new BD();
$nombre_idioma = $bd->getCampo($consulta);
$consulta = "DELETE FROM idioma_usuario WHERE idioma='$id' and oid_i='$oid'";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Eliminado idioma: $nombre_idioma";
$this->actualizarHistorial($mensaje);
$lista = $this->listaIdiomas;
$this->listaIdiomas = null;
foreach($lista as $key => $value){
if($value != $id){
$this->listaIdiomas[$key] = $value;
}
}
}else{
return false;
}
}else{
return false;
}
$this->calculaAfinidad();
return true;
}
/**
* Elimina la asociaci<63>n entre una titulaci<63>n y un usuario.
*/
function removeTitulacion($id){
$oid = $this->getValor("oid");
$this->getTitulaciones();
if(in_array($id, $this->listaTitulaciones)){
$consulta = "SELECT id FROM titulaciones WHERE oid='$id'";
$bd = new BD();
$nombre_titulacion = $bd->getCampo($consulta);
$consulta = "DELETE FROM titulacion_usuario WHERE titulacion='$id' and oid_i='$oid'";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Eliminada titulacion: $nombre_titulacion";
$this->actualizarHistorial($mensaje);
$lista = $this->listaTitulaciones;
$this->listaTitulaciones = null;
foreach($lista as $key => $value){
if($value != $id){
$this->listaTitulaciones[$key] = $value;
}
}
}else{
return false;
}
}else{
return false;
}
$this->calculaAfinidad();
return true;
}
/**
* Elimina la asociaci<63>n entre una localidad deseada y un usuario.
*/
function removeProvinciaDeseada($id){
$oid = $this->getValor("oid");
$this->getProvinciasDeseadas();
if(in_array($id, $this->listaProvinciasDeseadas)){
$consulta = "SELECT id FROM provincias WHERE oid='$id'";
$bd = new BD();
$nombre_provincia = $bd->getCampo($consulta);
$consulta = "DELETE FROM provincia_usuario WHERE provincia='$id' and oid_i='$oid'";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Eliminada provincia deseada: $nombre_provincia";
$this->actualizarHistorial($mensaje);
$lista = $this->listaProvinciasDeseadas;
$this->listaProvinciasDeseadas = null;
foreach($lista as $key => $value){
if($value != $id){
$this->listaProvinciasDeseadas[$key] = $value;
}
}
}else{
return false;
}
}else{
return false;
}
$this->calculaAfinidad();
return true;
}
/**
* Elimina la asociaci<63>n entre un perfil y un usuario.
*/
function removePerfil($id){
$oid = $this->getValor("oid");
$this->getPerfiles();
if(in_array($id, $this->listaPerfiles)){
$consulta = "SELECT id FROM perfil WHERE oid='$id'";
$bd = new BD();
$nombre_perfil = $bd->getCampo($consulta);
$consulta = "DELETE FROM perfil_usuario WHERE perfil='$id' and oid_i='$oid'";
$bd = new BD();
if($bd->execQuery($consulta)){
$mensaje = "Eliminada localidad deseada: $nombre_perfil";
$this->actualizarHistorial($mensaje);
$lista = $this->listaPerfiles;
$this->listaPerfiles = null;
foreach($lista as $key => $value){
if($value != $id){
$this->listaPerfiles[$key] = $value;
}
}
}else{
return false;
}
}else{
return false;
}
$this->calculaAfinidad();
return true;
}
/**
* Calcula la afinidad del usuario con todos los pedidos del sistema.
* @param id - identificador del usuario.
*/
function calculaAfinidad(){
//Recuperamos al usuario:
$id = $this->getValor("oid");
$email = $this->getValor("email");
//Eliminamos al usuario de la tabla de candidatos en pedido para todos los
//pedidos en los que se encuentre en proceso.
$consulta = "DELETE FROM candidato_pedido WHERE candidato='$id' AND estado='3'";
$bd = new BD();
$bd->execQuery($consulta);
//Si el candidato es v<>lido calculamos su afinidad para los pedidos:
$estado = $this->getValor("estado");
//Estados v<>lidos: Disponible, En proceso, Entrevistado y en En proceso (entrevistado).
if(($estado == 10) || ($estado == 30) || ($estado == 50) || ($estado == 70)){
$consulta = "SELECT oid FROM pedidos WHERE estado = 10";
$bd = new BD();
$listaPedidos = $bd->arrayQuery($consulta, "oid");
foreach($listaPedidos as $idPedido){
$pedido = new Pedido($idPedido, new Usuario($email));
$idiomasPedido = $pedido->getIdiomas();
$idiomasUsuario = $this->getidiomas();
$tecnologiasPedido = $pedido->getTecnologias();
$tecnologiasUsuario = $this->getTecnologias();
$perfilPedido = $pedido->getValor("perfil");
$perfilUsuario = $this->getPerfiles();
$provinciasPedido = $pedido->getProvincias();
$provinciasDeseadas = $this->getProvinciasDeseadas();
$afinidad = new Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido,
$tecnologiasUsuario, $perfilPedido, $perfilUsuario, $provinciasPedido, $provinciasDeseadas);
$afi = $afinidad->calculaAfinidad($pedido->getValor("PesoIdioma"), $pedido->getValor("PesoPerfil"), $pedido->getValor("PesoTecno"));
if($afi >= 0){
$consulta = "INSERT INTO candidato_pedido (candidato, pedido, afinidad, estado, fecha) VALUES('$id', '$idPedido', '$afi', '30', curdate())";
$bd = new BD();
$bd->execQuery($consulta);
}
}
}
return $afi;
}
protected function actualizarHistorial($mensaje, $usuario){
try{
$oid = $this->getValor("oid");
$p = new Persona($oid);
$consulta = "INSERT INTO historial_usuario (oid_h, fecha_h, persona_h, texto_h) VALUES('$oid', now(), '$usuario', '$mensaje')";
$bd = new BD();
return $bd->execQuery($consulta);
}catch(Exception $e){
//No muestro nada, pongo este try catch para evitar que actualice
//el historial al asignar campos a un usuario antes de meterlo en la BD.
return false;
}
}
function getHistorial(){
$historial = "";
$oid = $this->getValor("oid");
$consulta = "SELECT * FROM historial_usuario WHERE oid_h='$oid' ORDER BY fecha_h DESC";
$bd = new BD();
$resultado = $bd->execQuery($consulta);
while($rows = mysql_fetch_array($resultado)){
$fecha = $rows["fecha_h"];
$persona = $rows["persona_h"];
$texto = $rows["texto_h"];
$historial .= "[$fecha] $persona - $texto\n";
}
return $historial;
}
private function calculaVacaciones($anio){
$fecha = $this->getValor("fecha_alta");
$fecha_array = explode("-", $fecha);
$anyo = $fecha_array[0];
$mes = $fecha_array[1];
$dia = $fecha_array[2];
$fecha = mktime(0,0,0,$mes,$dia,$anyo);
$dias_mes = date('t',$fecha);
$fiestas = constante("fiestas");
//Si se dio de alta un a<>o anterior al actual tiene todos sus d<>as.
if($anio<$anyo){
$fiestas=0;
}elseif($anio==$anyo){
if($anyo == date('Y')){
$fiestas = (($fiestas/12)*(12-$mes))+(($fiestas/12/$dias_mes)*($dias_mes-$dia));
$fiestas=round($fiestas,0);
}
}
return $fiestas;
}
public function getDiasVacaciones($anio){
$consulta = "SELECT dias FROM vacaciones_oid WHERE oid='".$this->getValor("oid")."' AND anyo='".$anio."'";
$bd = new BD();
$dias = $bd->getCampo($consulta);
if(($dias >= 0) && ($dias != "")){
return $dias;
}else{
$dias=$this->calculaVacaciones($anio);
// Insertamos en la tabla
$consulta = "INSERT INTO vacaciones_oid (oid, anyo, dias) VALUES ('".$this->getValor("oid")."', '".$anio."', '".$dias."')";
$bd = new BD();
$bd->execQuery($consulta);
}
return $dias;
}
/**
* Suma o resta las vacaciones de un usuario dando el número que hay que sumar o restar
* Comprueba en qué año hay que hacer la cuenta
*/
public function variaVacaciones($cantidad){
$diaoff=substr(constante("daycacationsoff"),0,2);
$mesoff=substr(constante("daycacationsoff"),3,2);
$diaCierreVac=mktime(0,0,0,$mesoff,$diaoff,date('Y'));
$hoy=mktime(0,0,0,date('m'),date('d'),date('Y'));
$anio_sig=date('Y')+1;
$anio_ant=date('Y')-1;
if($cantidad < 0){
// Quitamos dias, hay que calcular el año
$cantidad = -1*$cantidad;
if($hoy>$diaCierreVac){
// este y posterior
if($this->getDiasVacaciones(date('Y'))>0) {
$anio=date('Y');
}elseif($this->getDiasVacaciones($anio_sig)>0){
$anio=$anio_sig;
}else {
// No le quedan vacaciones, lanzamos exception
$error = "No quedan vacaciones.";
throw new Exception($error);
exit();
}
} else {
// anterior y este
$pos=date('Y')-1;
if($this->getDiasVacaciones($anio_ant)>0) {
$anio=$anio_ant;
}elseif($this->getDiasVacaciones(date('Y'))>0){
$anio=date('Y');
}else {
// No le quedan vacaciones, lanzamos exception
$error = "No quedan vacaciones.";
throw new Exception($error);
exit();
}
}
$consulta = "UPDATE vacaciones_oid SET dias=dias-".$cantidad." WHERE oid='".$this->getValor("oid")."' AND anyo='".$anio."'";
} else{
// hay que sumar días
if($hoy>$diaCierreVac){
// este y posterior constante("fiestas")
if($this->getDiasVacaciones($anio_sig)<constante("fiestas")) {
$anio=$anio_sig;
}else{
$anio=date('Y');
}
} else {
// anterior y este
if($this->getDiasVacaciones(date('Y'))<constante("fiestas")) {
$anio=date('Y');
}else{
$anio=date('Y');
}
}
$consulta = "UPDATE vacaciones_oid SET dias=dias+".$cantidad." WHERE oid='".$this->getValor("oid")."' AND anyo='".$anio."'";
}
$bd = new BD();
$bd->execQuery($consulta);
}
public function diasTotalesVacaciones(){
$diaoff=substr(constante("daycacationsoff"),0,2);
$mesoff=substr(constante("daycacationsoff"),3,2);
$diaCierreVac=mktime(0,0,0,$mesoff,$diaoff,date('Y'));
$hoy=mktime(0,0,0,date('m'),date('d'),date('Y'));
$anio_sig=date('Y')+1;
$anio_ant=date('Y')-1;
if($hoy>$diaCierreVac){
// este y posterior
$diasTotales=$this->getDiasVacaciones(date('Y'))+$this->getDiasVacaciones($anio_sig);
} else {
$diasTotales=$this->getDiasVacaciones($anio_ant)+$this->getDiasVacaciones(date('Y'));
}
return $diasTotales;
}
}
?>