2012-01-31 17:42:47 +00:00
< ? php
/**
* This is the model class for table " tbl_candidatos " .
*
* The followings are the available columns in table 'tbl_candidatos' :
* @ property integer $id
2012-07-13 17:06:09 +00:00
* @ property integer $id_estado
2012-07-25 14:59:13 +00:00
* @ property string $estado
2012-01-31 17:42:47 +00:00
* @ property string $dni
* @ property string $nombre
* @ property string $apellidos
* @ property string $email
* @ property string $telefono_fijo
* @ property string $telefono_movil
* @ property string $sexo
2012-07-12 15:31:23 +00:00
* @ property date $fecha_nacimiento
2012-01-31 17:42:47 +00:00
* @ property string $lugar_nacimiento
2012-03-01 19:30:11 +00:00
* @ property datetime $fecha_alta
* @ property datetime $fecha_modificacion
* @ property integer $usuario_alta
* @ property integer $usuario_modificacion
2012-03-08 19:02:29 +00:00
* @ property string $carnet_conducir
* @ property string $vehiculo_propio
* @ property text $observaciones
* @ property integer $salario_minimo
* @ property integer $salario_maximo
* @ property string $procedencia
* @ property string $disponibilidad_incorporacion
* @ property string $disponibilidad_entrevistas
* @ property string $disponibilidad_guardias
* @ property string $disponibilidad_viajar
* @ property string $disponibilidad_proyectos_internacionales
2012-01-31 17:42:47 +00:00
*
* The followings are the available model relations :
2012-03-06 20:10:07 +00:00
* @ property CandidatoCapacidad [] $capacidades
2012-01-31 17:42:47 +00:00
* @ property CandidatoIdioma [] $idiomas
2012-03-06 20:10:07 +00:00
* @ property CandidatoTitulacion [] $titulaciones
2012-06-06 16:45:38 +00:00
* @ property CandidatoDocumento [] $documentos
2012-01-31 17:42:47 +00:00
*/
class Candidato extends CActiveRecord
{
2012-04-18 11:00:32 +00:00
const GENERO_HOMBRE = 'Hombre' ;
const GENERO_MUJER = 'Mujer' ;
2012-01-31 17:42:47 +00:00
2012-02-08 15:02:38 +00:00
public $foto ;
2012-08-22 12:11:08 +00:00
2012-03-08 19:02:29 +00:00
public $capacidad_tecnica_search ;
2012-08-24 15:33:23 +00:00
public $idiomas_search ;
public $tecnologias_search ;
public $funciones_search ;
public $salario_ini_search ;
public $salario_fin_search ;
2012-08-22 09:50:09 +00:00
public $nombre_estado_search ;
2012-08-22 12:11:08 +00:00
public $nombreCompleto_search ;
2012-03-07 18:00:07 +00:00
/**
* Devuelve el nombre completo de un candidato .
* @ return string $nombreCompleto
*/
public function getNombreCompleto ()
{
2012-08-22 12:11:08 +00:00
if ( isset ( $this -> nombreCompleto_search )) {
return $this -> nombreCompleto_search ;
2012-03-07 18:00:07 +00:00
}
2012-08-22 12:11:08 +00:00
$this -> nombreCompleto_search = $this -> nombre . ' ' . $this -> apellidos ;
return $this -> nombreCompleto_search ;
2012-03-01 19:30:11 +00:00
}
2012-08-22 12:11:08 +00:00
2012-03-27 14:43:43 +00:00
public function getRangoSalarial () {
return Yii :: app () -> numberFormatter -> formatCurrency ( $this -> salario_minimo , 'EUR' ) . ' - ' .
Yii :: app () -> numberFormatter -> formatCurrency ( $this -> salario_maximo , 'EUR' );
}
public function getTieneVehiculoPropio () {
return Yii :: app () -> format -> boolean ( $this -> vehiculo_propio );
}
2012-03-27 16:10:18 +00:00
public function getNombreLocalidad () {
return Poblacion :: model () -> findByPk ( $this -> localidad ) -> poblacion ;
}
2012-07-13 17:06:09 +00:00
2012-03-27 16:10:18 +00:00
public function getNombreCompletoLocalidad () {
2012-03-28 16:51:53 +00:00
$nombre = '' ;
2012-03-27 16:10:18 +00:00
$poblacion = Poblacion :: model () -> with ( 'provincia' ) -> findByPk ( $this -> localidad );
2012-03-28 16:51:53 +00:00
if ( isset ( $poblacion )) {
$nombre = $poblacion -> poblacion ;
if ( isset ( $poblacion -> provincia )) {
$nombre .= ' (' . $poblacion -> provincia -> provincia . ')' ;
}
}
return $nombre ;
2012-03-27 16:10:18 +00:00
}
2012-03-27 14:43:43 +00:00
2012-01-31 17:42:47 +00:00
/**
* Devuelve la lista de géneros de un candidato .
* @ return array lista de géneros permitidos
*/
public function getOpcionesGenero () {
return array (
self :: GENERO_HOMBRE => 'Hombre' ,
self :: GENERO_MUJER => 'Mujer'
);
}
2012-03-01 19:30:11 +00:00
public function getCssClassEstado () {
2012-07-13 17:06:09 +00:00
return " estado " . array_search ( $this -> id_estado , $this -> opcionesEstado );
2012-03-01 19:30:11 +00:00
}
2012-07-25 14:59:13 +00:00
2012-01-31 17:42:47 +00:00
/**
* Devuelve la lista de estados permitidos para un candidato .
* @ return array lista de estados permitidos
*/
public function getOpcionesEstado () {
return array (
2012-07-13 17:06:09 +00:00
0 => '510' ,
1 => '511' ,
2 => '520' ,
3 => '530' ,
4 => '540' ,
5 => '560' ,
6 => '600' ,
2012-01-31 17:42:47 +00:00
);
}
/**
* Returns the static model of the specified AR class .
* @ param string $className active record class name .
* @ return Candidato the static model class
*/
public static function model ( $className = __CLASS__ )
{
return parent :: model ( $className );
}
/**
* @ return string the associated database table name
*/
public function tableName ()
{
2012-03-07 18:00:07 +00:00
return 'tbl_candidatos' ;
2012-01-31 17:42:47 +00:00
}
/**
* @ return array validation rules for model attributes .
*/
public function rules ()
{
2012-03-07 18:00:07 +00:00
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array (
2012-08-23 08:38:59 +00:00
array ( 'nombre, email' , 'required' ),
2012-03-07 18:00:07 +00:00
array ( 'email' , 'unique' ),
array ( 'email' , 'email' ),
array ( 'foto' , 'file' ,
'types' => 'jpg' ,
'maxSize' => 1024 * 1024 * 1 , // 1MB como máximo
'tooLarge' => 'The file was larger than 1MB. Please upload a smaller file.' ,
'wrongType' => 'Please upload only images in the format JPG.' ,
'tooMany' => 'You can upload only 1 user photo.' ,
'allowEmpty' => 'true' ,
),
2012-03-08 19:02:29 +00:00
array ( 'salario_minimo, salario_maximo' , 'numerical' ,
'allowEmpty' => 'true' ),
2012-03-27 16:10:18 +00:00
2012-07-13 17:06:09 +00:00
array ( ' dni , nombre , apellidos , email , telefono_fijo ,
2012-03-27 16:10:18 +00:00
telefono_movil , sexo , lugar_nacimiento , localidad ,
carnet_conducir , procedencia , disponibilidad_incorporacion ,
disponibilidad_entrevistas , disponibilidad_guardias ,
disponibilidad_viajar ,
disponibilidad_proyectos_internacionales ' ,
'length' , 'max' => 255 ),
2012-03-08 19:02:29 +00:00
2012-07-13 17:06:09 +00:00
array ( 'id_estado' , 'numerical' , 'integerOnly' => true ),
2012-03-27 14:43:43 +00:00
array ( 'fecha_nacimiento, observaciones' , 'safe' ),
2012-04-18 11:00:32 +00:00
2012-04-18 14:54:46 +00:00
array ( 'fecha_nacimiento' , 'date' , 'format' => 'dd/MM/yyyy' ),
2012-07-13 17:06:09 +00:00
2012-03-07 18:00:07 +00:00
// The following rule is used by search().
// Please remove those attributes that should not be searched.
2012-08-22 09:50:09 +00:00
array ( ' id , id_estado ,
2012-08-22 12:11:08 +00:00
nombre_estado_search , nombreCompleto_search , capacidad_tecnica_search ,
2012-08-24 15:33:23 +00:00
idiomas_search , salario_ini_search , salario_fin_search ,
tecnologias_search , funciones_search ,
2012-08-22 12:11:08 +00:00
dni , email , telefono_fijo ,
2012-03-27 16:10:18 +00:00
telefono_movil , sexo , fecha_nacimiento , lugar_nacimiento ,
2012-08-22 12:11:08 +00:00
localidad , fecha_alta , usuario_alta ,
2012-03-27 16:10:18 +00:00
usuario_modificacion , carnet_conducir , vehiculo_propio ,
observaciones , salario_minimo , salario_maximo , procedencia ,
disponibilidad_incorporacion , disponibilidad_entrevistas ,
disponibilidad_guardias , disponibilidad_viajar ,
disponibilidad_proyectos_internacionales ' ,
'safe' , 'on' => 'search' )
2012-03-07 18:00:07 +00:00
);
2012-01-31 17:42:47 +00:00
}
/**
* @ return array relational rules .
*/
public function relations ()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array (
2012-03-07 18:00:07 +00:00
'capacidades' => array ( self :: HAS_MANY , 'CandidatoCapacidad' , 'candidato_id' ),
'capacidadesCount' => array ( self :: STAT , 'CandidatoCapacidad' , 'candidato_id' ),
'idiomas' => array ( self :: HAS_MANY , 'CandidatoIdioma' , 'candidato_id' ),
'idiomasCount' => array ( self :: STAT , 'CandidatoIdioma' , 'candidato_id' ),
'titulaciones' => array ( self :: HAS_MANY , 'CandidatoTitulacion' , 'candidato_id' ),
'titulacionesCount' => array ( self :: STAT , 'CandidatoTitulacion' , 'candidato_id' ),
2012-06-06 16:45:38 +00:00
'documentos' => array ( self :: HAS_MANY , 'CandidatoDocumento' , 'candidato_id' ),
2012-08-21 16:20:55 +00:00
'documentosCount' => array ( self :: STAT , 'CandidatoDocumento' , 'candidato_id' ),
2012-08-22 09:50:09 +00:00
'estados' => array ( self :: BELONGS_TO , 'EstadoCandidato' , 'id_estado' ),
2012-01-31 17:42:47 +00:00
);
}
/**
* @ return array customized attribute labels ( name => label )
*/
public function attributeLabels ()
{
2012-03-01 19:30:11 +00:00
return array (
'id' => 'ID' ,
2012-07-25 14:59:13 +00:00
'id_estado' => 'ID estado' ,
2012-08-22 09:50:09 +00:00
'nombre_estado_search' => 'Estado' ,
2012-08-24 15:33:23 +00:00
'idiomas_search' => 'Idioma' ,
2012-03-01 19:30:11 +00:00
'nombreApellidos' => 'Candidato' ,
'foto' => 'Foto' ,
'dni' => 'DNI/Pasaporte' ,
'nombre' => 'Nombre' ,
'apellidos' => 'Apellidos' ,
'email' => 'Email' ,
'telefono_fijo' => 'Telefono fijo' ,
'telefono_movil' => 'Telefono móvil' ,
'sexo' => 'Sexo' ,
'fecha_nacimiento' => 'Fecha de nacimiento' ,
'lugar_nacimiento' => 'Lugar de nacimiento' ,
'localidad' => 'Localidad' ,
'fecha_modificacion' => 'Último cambio' ,
2012-03-08 19:02:29 +00:00
'carnet_conducir' => 'Carnet de conducir' ,
'vehiculo_propio' => 'Vehículo propio' ,
'observaciones' => 'Observaciones' ,
'salario_minimo' => 'Salario mínimo' ,
'salario_maximo' => 'Salario máximo' ,
'procedencia' => 'Procedencia' ,
'disponibilidad_incorporacion' => 'Disponibilidad de incorportación' ,
'disponibilidad_entrevistas' => 'Disponibilidad para entrevistas' ,
'disponibilidad_guardias' => 'Disponibilidad para guardias' ,
'disponibilidad_viajar' => 'Disponibilidad para viajar' ,
'disponibilidad_proyectos_internacionales' => 'Disponibilidad para proyectos internacionales' ,
2012-08-22 12:11:08 +00:00
'nombreCompleto_search' => 'Candidato' ,
2012-08-24 15:33:23 +00:00
'observaciones' => 'Observaciones' ,
'tecnologias_search' => 'Tecnologías' ,
'funciones_search' => 'Perfiles funcionales' ,
2012-03-01 19:30:11 +00:00
);
2012-01-31 17:42:47 +00:00
}
/**
* Retrieves a list of models based on the current search / filter conditions .
* @ return CActiveDataProvider the data provider that can return the models based on the search / filter conditions .
*/
public function search ()
{
2012-03-06 16:41:54 +00:00
// Warning: Please modify the following code to remove attributes that
// should not be searched.
2012-01-31 17:42:47 +00:00
2012-03-06 16:41:54 +00:00
$criteria = new CDbCriteria ;
2012-08-24 15:33:23 +00:00
$criteria -> with = array ( 'capacidades' , 'estados' , 'idiomas' ); //, 'capacidades.capacidadesFuncionales');
2012-03-07 18:00:07 +00:00
$criteria -> together = true ;
2012-01-31 17:42:47 +00:00
2012-03-08 19:02:29 +00:00
$criteria -> compare ( 't.id' , $this -> id );
2012-08-21 16:20:55 +00:00
$criteria -> compare ( 't.id_estado' , $this -> id_estado );
2012-08-22 09:50:09 +00:00
$criteria -> compare ( 'estados.descripcion' , $this -> nombre_estado_search , true );
2012-08-24 15:33:23 +00:00
$criteria -> compare ( 't.observaciones' , $this -> observaciones , true );
2012-08-22 09:50:09 +00:00
2012-08-21 16:20:55 +00:00
$criteria -> compare ( 't.dni' , $this -> dni , true );
$criteria -> compare ( 't.email' , $this -> email , true );
$criteria -> compare ( 't.telefono_fijo' , $this -> telefono_fijo , true );
$criteria -> compare ( 't.telefono_movil' , $this -> telefono_movil , true );
2012-01-31 17:42:47 +00:00
2012-08-22 12:11:08 +00:00
$criteria -> compare ( 'concat(t.nombre, " ", t.apellidos)' , $this -> nombreCompleto_search , true );
2012-08-24 15:33:23 +00:00
$criteria -> compare ( 'capacidades.perfil_tecnico_id' , $this -> capacidad_tecnica_search , true );
if (( $this -> idiomas_search != '' ) && ( $this -> idiomas_search [ 0 ] != '' )){
$cadena = '' ;
foreach ( $this -> idiomas_search as $idioma_search ){
if ( $cadena != '' )
$cadena = $cadena . ',' ;
$cadena = $cadena . " ' " . $idioma_search . " ' " ;
}
$criteria -> addCondition (( 'idiomas.idioma in (' . $cadena . ')' ));
// $criteria->addCondition(('t.id in (SELECT candidato_id FROM `tbl_candidatos_capacidades` WHERE id in (SELECT capacidad_id FROM `tbl_candidatos_capacidades_tecnologias` WHERE tecnologia_id in (5,56)))'));
}
if (( $this -> tecnologias_search != '' ) && ( $this -> tecnologias_search [ 0 ] != '' )){
$cadena = '' ;
foreach ( $this -> tecnologias_search as $tecnologia_search ){
if ( $cadena != '' )
$cadena = $cadena . ',' ;
$cadena = $cadena . " ' " . $tecnologia_search . " ' " ;
}
$criteria -> addCondition (( 't.id in (SELECT candidato_id FROM `tbl_candidatos_capacidades` WHERE id in (SELECT capacidad_id FROM `tbl_candidatos_capacidades_tecnologias` WHERE tecnologia_id in (' . $cadena . ')))' ));
}
if (( $this -> funciones_search != '' ) && ( $this -> funciones_search [ 0 ] != '' )){
$cadena = '' ;
foreach ( $this -> funciones_search as $funcional_search ){
if ( $cadena != '' )
$cadena = $cadena . ',' ;
$cadena = $cadena . " ' " . $funcional_search . " ' " ;
}
$criteria -> addCondition (( 't.id in (SELECT candidato_id FROM `tbl_candidatos_capacidades` WHERE id in (SELECT capacidad_id FROM `tbl_candidatos_capacidades_funcionales` WHERE funcional_id in (' . $cadena . ')))' ));
}
if ( $this -> salario_ini_search != '' )
$criteria -> addCondition (( 't.salario_minimo >=' . $this -> salario_ini_search ));
if ( $this -> salario_fin_search != '' )
$criteria -> addCondition (( 't.salario_minimo <=' . $this -> salario_fin_search ));
2012-08-21 16:20:55 +00:00
$sort = new CSort ();
$sort -> attributes = array (
'defaultOrder' => '' ,
2012-08-22 09:50:09 +00:00
'nombre_estado_search' => array (
'asc' => 'estados.descripcion' ,
'desc' => 'estados.descripcion DESC' ,
),
2012-08-21 16:20:55 +00:00
'fecha_modificacion' => array (
'asc' => 't.fecha_modificacion' ,
'desc' => 't.fecha_modificacion desc' ,
),
2012-08-22 12:11:08 +00:00
'nombreCompleto_search' => array (
2012-08-21 16:20:55 +00:00
'asc' => 'concat(t.nombre, " ", t.apellidos)' ,
'desc' => 'concat(t.nombre, " ", t.apellidos) desc' ,
),
'capacidad_tecnica_search' => array (
'asc' => 'capacidades.perfil_tecnico_id' ,
'desc' => 'capacidades.perfil_tecnico_id desc' ,
),
);
2012-08-24 15:33:23 +00:00
echo $criteria -> condition ;
2012-03-06 16:41:54 +00:00
return new CActiveDataProvider ( $this , array (
2012-03-07 18:00:07 +00:00
'criteria' => $criteria ,
'sort' => $sort ,
2012-03-06 16:41:54 +00:00
));
2012-08-24 15:33:23 +00:00
2012-01-31 17:42:47 +00:00
}
2012-02-01 15:41:14 +00:00
protected function beforeValidate () {
if ( $this -> isNewRecord ) {
2012-07-13 17:06:09 +00:00
$this -> id_estado = 510 ;
2012-02-01 15:41:14 +00:00
$this -> fecha_alta = date ( 'Y-m-d H:i:s' , time ());
$this -> fecha_modificacion = $this -> fecha_alta ;
$this -> usuario_alta = Yii :: app () -> user -> id ;
$this -> usuario_modificacion = Yii :: app () -> user -> id ;
}
else {
$this -> fecha_modificacion = date ( 'Y-m-d H:i:s' , time ());
$this -> usuario_modificacion = Yii :: app () -> user -> id ;
}
return parent :: beforeValidate ();
}
2012-04-18 14:54:46 +00:00
protected function beforeSave ()
{
//PHP dates are displayed as dd/mm/yyyy
//MYSQL dates are stored as yyyy-mm-dd
2012-07-12 12:02:29 +00:00
if ( $this -> fecha_nacimiento != '' ) {
2012-07-12 15:31:23 +00:00
$dateToMySQL = date ( 'Y-m-d' , CDateTimeParser :: parse ( $this -> fecha_nacimiento , Yii :: app () -> locale -> dateFormat ));
$this -> fecha_nacimiento = $dateToMySQL ;
2012-07-12 12:02:29 +00:00
}
2012-04-18 14:54:46 +00:00
parent :: beforeSave ();
return true ;
}
protected function afterFind () {
//PHP dates are displayed as dd/mm/yyyy
//MYSQL dates are stored as yyyy-mm-dd
2012-07-12 15:31:23 +00:00
$dateToLocale = Yii :: app () -> dateFormatter -> formatDateTime ( CDateTimeParser :: parse ( $this -> fecha_nacimiento , 'yyyy-MM-dd' ), 'medium' , null );
$this -> fecha_nacimiento = $dateToLocale ;
2012-04-18 14:54:46 +00:00
parent :: afterFind ();
return true ;
}
2012-05-04 09:02:28 +00:00
public function behaviors () {
return array (
'LoggableBehavior' => 'application.modules.auditTrail.behaviors.LoggableBehavior' ,
);
}
2012-01-31 17:42:47 +00:00
}