Incam_Intranet/Objects/Afinidad.php

116 lines
2.8 KiB
PHP
Raw Normal View History

<?php
/*
* Clase Afinidad
*
* Calcula la afinidad entre pedidos y usuarios.
*
* 2008-09-30 (diego): Se crea el objeto con los m<EFBFBD>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<6F>as que requiere el pedido. */
private $tecnologiasPedido;
/* Tecnolog<6F>as que conoce le usuario. */
private $tecnologiasUsuario;
/* Perfil que requiere el pedido. */
private $perfilPedido;
/* Perfiles que posee el usuario. */
private $perfilUsuario;
/* Provincias donde se desarrollar<61> el proyecto del pedido. */
private $provinciasPedido;
/* Provincias en las que desea trabajar el empleado. */
private $provinciaDeseada;
//Constructores
function Afinidad($idiomasPedido, $idiomasUsuario, $tecnologiasPedido,
$tecnologiasUsuario, $perfilPedido, $perfilUsuario, $provinciasPedido, $provinciaDeseada){
$this->idiomasPedido = $idiomasPedido;
$this->idiomasUsuario = $idiomasUsuario;
$this->tecnologiasPedido = $tecnologiasPedido;
$this->tecnologiasUsuario = $tecnologiasUsuario;
$this->perfilPedido = $perfilPedido;
$this->perfilUsuario = $perfilUsuario;
$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){
//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->perfilUsuario) > 0){
if(in_array($this->perfilPedido, $this->perfilUsuario)){
$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<6F>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;
}
}
?>