Incam_Intranet/Objects/Afinidad.php
david 9e1daae059 Ticket #563 -> En la pantalla de búsqueda de pedidos (solicitudes), se debe poder elegir varios perfiles técnicos
Ticket #565 -> En una solicitud de oferta, se deben poder indicar varios perfiles técnicos

git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_Intranet/trunk/src@21 e2b1556b-49f8-d141-9351-52d6861a72d9
2011-04-06 12:07:57 +00:00

120 lines
2.9 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 $provinciaDeseada;
//Constructores
function Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido,
$tecnologiasUsuario, $perfilesPedido, $perfilesUsuario, $provinciasPedido, $provinciaDeseada){
$this->idiomasPedido = $idiomasPedido;
$this->idiomasUsuario = $idiomasUsuario;
$this->tecnologiasPedido = $tecnologiasPedido;
$this->tecnologiasUsuario = $tecnologiasUsuario;
$this->perfilesPedido = $perfilesPedido;
$this->perfilesUsuario = $perfilesUsuario;
$this->provinciasPedido = $provinciasPedido;
$this->provinciaDeseada = $provinciaDeseada;
}
//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->provinciaDeseada)){
$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;
}
}
?>