Tarea #583 -> En candidatos añadir un campo que sea “Ubicaciones no deseadas” git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk/src@50 e2b1556b-49f8-d141-9351-52d6861a72d9
138 lines
3.3 KiB
PHP
138 lines
3.3 KiB
PHP
<?php
|
|
/*
|
|
* Clase Afinidad
|
|
*
|
|
* Calcula la afinidad entre pedidos y usuarios.
|
|
*
|
|
* 2008-09-30 (diego): Se crea el objeto con los métodos necesarios para calcular afinidades.
|
|
*
|
|
*/
|
|
include_once("BD.php");
|
|
|
|
class Afinidad{
|
|
|
|
//Atributos:
|
|
|
|
/* Idiomas que requiere el pedido. */
|
|
private $idiomasPedido;
|
|
|
|
/* Idiomas que conoce el candidato. */
|
|
private $idiomasUsuario;
|
|
|
|
/* Tecnologías que requiere el pedido. */
|
|
private $tecnologiasPedido;
|
|
|
|
/* Tecnologías que conoce le usuario. */
|
|
private $tecnologiasUsuario;
|
|
|
|
/* Perfil que requiere el pedido. */
|
|
private $perfilesPedido;
|
|
|
|
/* Perfiles que posee el usuario. */
|
|
private $perfilesUsuario;
|
|
|
|
/* Provincias donde se desarrollará el proyecto del pedido. */
|
|
private $provinciasPedido;
|
|
|
|
/* Provincias en las que desea trabajar el empleado. */
|
|
private $provinciasDeseadas;
|
|
|
|
/* Provincias en las que NO desea trabajar el empleado. */
|
|
private $provinciasNoDeseadas;
|
|
|
|
|
|
//Constructores
|
|
function Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido,
|
|
$tecnologiasUsuario, $perfilesPedido, $perfilesUsuario,
|
|
$provinciasPedido, $provinciasDeseadas, $provinciasNoDeseadas){
|
|
$this->idiomasPedido = $idiomasPedido;
|
|
$this->idiomasUsuario = $idiomasUsuario;
|
|
$this->tecnologiasPedido = $tecnologiasPedido;
|
|
$this->tecnologiasUsuario = $tecnologiasUsuario;
|
|
$this->perfilesPedido = $perfilesPedido;
|
|
$this->perfilesUsuario = $perfilesUsuario;
|
|
$this->provinciasPedido = $provinciasPedido;
|
|
$this->provinciasDeseadas = $provinciasDeseadas;
|
|
$this->provinciasNoDeseadas = $provinciasNoDeseadas;
|
|
|
|
}
|
|
|
|
//Funciones
|
|
|
|
/**
|
|
* Calcula la afinidad entre un usuario y un pedido.
|
|
* @param usuario - usuario candidato al pedido.
|
|
* @param pedido - pedido para el que calcular la afinidad.
|
|
*/
|
|
function calculaAfinidad($pI, $pP, $pT){
|
|
$vL = 0;
|
|
$vI = 0;
|
|
$vP = 0;
|
|
$vT = 0;
|
|
|
|
//Si no coincide alguna provincia deseada no nos vale.
|
|
if($this->provinciasPedido != ""){
|
|
foreach($this->provinciasPedido as $provincia){
|
|
if(in_array($provincia, $this->provinciasDeseadas)){
|
|
$vL = $vL + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if($vL <= 0) return -1;
|
|
|
|
//Si coincide alguna provincia NO deseada no nos vale.
|
|
if($this->provinciasPedido != ""){
|
|
foreach($this->provinciasPedido as $provincia){
|
|
if(in_array($provincia, $this->provinciasNoDeseadas)){
|
|
$vL = $vL - 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if($vL <= 0) return -1;
|
|
|
|
|
|
$afi = 0;
|
|
|
|
//Afinidad con los perfiles:
|
|
if(count($this->perfilesUsuario) > 0){
|
|
if(in_array($this->perfilesPedido, $this->perfilesUsuario)){
|
|
$vP = 1;
|
|
}
|
|
}
|
|
|
|
//Afinidad con los idiomas:
|
|
if($this->idiomasPedido != ""){
|
|
foreach($this->idiomasPedido as $idioma){
|
|
if(in_array($idioma, $this->idiomasUsuario)){
|
|
$vI = $vI + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(count($this->idiomasPedido) > 0){
|
|
$vI = $vI/count($this->idiomasPedido);
|
|
}
|
|
|
|
//Afinidad con las tecnologías:
|
|
if($this->tecnologiasPedido != ""){
|
|
foreach($this->tecnologiasPedido as $this->tecnologia){
|
|
if(in_array($this->tecnologia, $this->tecnologiasUsuario)){
|
|
$vT = $vT + 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(count($this->tecnologiasPedido) > 0){
|
|
$vT = $vT/count($this->tecnologiasPedido);
|
|
}
|
|
|
|
$afi = ($pP * $vP) + ($pI * $vI) + ($pT * $vT);
|
|
|
|
return $afi;
|
|
}
|
|
|
|
}
|
|
?>
|