nombreCompleto_search)) { return $this->nombreCompleto_search; } $this->nombreCompleto_search = $this->nombre . ' ' . $this->apellidos; return $this->nombreCompleto_search; } 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); } public function getNombreLocalidad() { return Poblacion::model()->findByPk($this->localidad)->poblacion; } public function getNombreCompletoLocalidad() { $nombre = ''; $poblacion = Poblacion::model()->with('provincia')->findByPk($this->localidad); if (isset($poblacion)) { $nombre = $poblacion->poblacion; if (isset($poblacion->provincia)) { $nombre .= ' (' . $poblacion->provincia->provincia . ')'; } } return $nombre; } /** * 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' ); } public function getCssClassEstado() { return "estado" . array_search($this->id_estado, $this->opcionesEstado); } /** * Devuelve la lista de estados permitidos para un candidato. * @return array lista de estados permitidos */ public function getOpcionesEstado() { return array( 0 => '510', 1 => '511', 2 => '520', 3 => '530', 4 => '540', 5 => '560', 6 => '600', ); } /** * 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() { return 'tbl_candidatos'; } /** * @return array validation rules for model attributes. */ public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( array('nombre, email', 'required'), array('email', 'unique'), array('email', 'email'), array('ficheroFotografia', 'file', 'types' => 'jpg', 'maxSize' => 1024 * 1024 * 1, // 1MB como máximo 'tooLarge' => Yii::t('profind', 'La imagen es demasiado pesada. Elija otra fotografía más pequeña.'), 'wrongType' => Yii::t('profind', 'Sólo se permiten imágenes en formato JPG.'), 'allowEmpty' => 'true', ), array('salario_minimo, salario_maximo', 'numerical','allowEmpty' => 'true'), array('salario_minimo', 'default', 'value' => Yii::app()->params['salarios_candidatos']['salario_minimo']), array('salario_maximo', 'default', 'value' => Yii::app()->params['salarios_candidatos']['salario_maximo']), array('n_identificacion, nombre, apellidos, email, telefono_fijo, telefono_movil, sexo, lugar_nacimiento, localidad, carnet_conducir, procedencia, disponibilidad_incorporacion, disponibilidad_entrevistas, disponibilidad_guardias, disponibilidad_viajar, disponibilidad_proyectos_internacionales', 'length', 'max' => 255), array('id_estado', 'numerical', 'integerOnly' => true), array('fecha_nacimiento, observaciones', 'safe'), array('fecha_nacimiento', 'date', 'format' => 'dd/MM/yyyy'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, id_estado, nombre_estado_search, nombreCompleto_search, capacidad_tecnica_search, idiomas_search, salario_ini_search, salario_fin_search, tecnologias_search, funciones_search, n_identificacion, email, telefono_fijo, telefono_movil, sexo, fecha_nacimiento, lugar_nacimiento, localidad, fecha_alta, usuario_alta, 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') ); } /** * @return array relational rules. */ public function relations() { return array( //'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'), //'documentos' => array(self::HAS_MANY, 'CandidatoDocumento', 'candidato_id'), //'documentosCount' => array(self::STAT, 'CandidatoDocumento', 'candidato_id'), 'estados' => array(self::BELONGS_TO, 'EstadoCandidato', 'id_estado'), ); } /** * @return array customized attribute labels (name=>label) */ public function attributeLabels() { return array( 'id' => 'ID', 'id_estado' => 'ID estado', 'nombre_estado_search' => 'Estado', 'idiomas_search' => 'Idioma', 'nombreApellidos' => 'Candidato', 'foto' => 'Foto', 'n_identificacion' => 'DNI/Pasaporte', 'nombre' => 'Nombre', 'apellidos' => 'Apellidos', 'email' => 'Email', 'telefono_fijo' => 'Teléfono fijo', 'telefono_movil' => 'Teléfono móvil', 'sexo' => 'Sexo', 'fecha_nacimiento' => 'Fecha de nacimiento', 'lugar_nacimiento' => 'Lugar de nacimiento', 'localidad' => 'Localidad', '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', 'nombreCompleto_search' => 'Candidato', 'observaciones' => 'Observaciones', 'tecnologias_search' => 'Tecnologías', 'funciones_search' => 'Perfiles funcionales', ); } /** * 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() { // Warning: Please modify the following code to remove attributes that // should not be searched. $criteria=new CDbCriteria; $criteria->compare('id', $this->id); $criteria->compare('id_estado', $this->id_estado); $criteria->compare('n_identificacion', $this->n_identificacion, true); $criteria->compare('nombre', $this->nombre, true); $criteria->compare('apellidos', $this->apellidos, true); $criteria->compare('email', $this->email, true); $criteria->compare('telefono_fijo', $this->telefono_fijo, true); $criteria->compare('telefono_movil', $this->telefono_movil, true); $criteria->compare('sexo', $this->sexo, true); $criteria->compare('localidad', $this->localidad, true); $criteria->compare('fecha_nacimiento', $this->fecha_nacimiento, true); $criteria->compare('lugar_nacimiento', $this->lugar_nacimiento, true); $criteria->compare('created_time', $this->created_time, true); $criteria->compare('modified_time', $this->modified_time, true); $criteria->compare('deleted_time', $this->deleted_time, true); $criteria->compare('carnet_conducir', $this->carnet_conducir, true); $criteria->compare('vehiculo_propio', $this->vehiculo_propio); $criteria->compare('observaciones', $this->observaciones, true); $criteria->compare('salario_minimo', $this->salario_minimo); $criteria->compare('salario_maximo', $this->salario_maximo); $criteria->compare('procedencia', $this->procedencia, true); $criteria->compare('disponibilidad_incorporacion', $this->disponibilidad_incorporacion, true); $criteria->compare('disponibilidad_entrevistas', $this->disponibilidad_entrevistas, true); $criteria->compare('disponibilidad_guardias', $this->disponibilidad_guardias, true); $criteria->compare('disponibilidad_viajar', $this->disponibilidad_viajar, true); $criteria->compare('disponibilidad_proyectos_internacionales', $this->disponibilidad_proyectos_internacionales, true); $sort = new CSort(); $sort->attributes = array( 'defaultOrder' => 'id', 'nombreCompleto' => array( 'asc' => 'concat(t.nombre, " ", t.apellidos)', 'desc' => 'concat(t.nombre, " ", t.apellidos) desc', ), ); return new CActiveDataProvider($this, array( 'criteria'=>$criteria, //'sort' => $sort, )); // $sort = new CSort(); // $sort->attributes = array( // 'defaultOrder' => '', // 'nombre_estado_search' => array( // 'asc' => 'estados.descripcion', // 'desc' => 'estados.descripcion DESC', // ), // 'fecha_modificacion' => array( // 'asc' => 't.fecha_modificacion', // 'desc' => 't.fecha_modificacion desc', // ), // 'nombreCompleto_search' => array( // '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', // ), // ); // echo $criteria->condition; // return new CActiveDataProvider($this, array( // 'criteria' => $criteria, // 'sort' => $sort, // )); } protected function beforeValidate() { if ($this->isNewRecord) { $this->id_estado = 510; $this->created_time = date('Y-m-d H:i:s', time()); } else { $this->modified_time = date('Y-m-d H:i:s', time()); } return parent::beforeValidate(); } protected function beforeSave() { if ($this->isNewRecord) $this->created_time = date("Y-m-d H:i:s"); /*if (($this->estado === self::ESTADO_BORRADO) && ($this->deleted_time === NULL)) $this->deleted_time = date("Y-m-d H:i:s");*/ //PHP dates are displayed as dd/mm/yyyy //MYSQL dates are stored as yyyy-mm-dd if ($this->fecha_nacimiento != '') { $dateToMySQL = date('Y-m-d', CDateTimeParser::parse($this->fecha_nacimiento, Yii::app()->locale->dateFormat)); $this->fecha_nacimiento = $dateToMySQL; } return parent::beforeSave(); } protected function afterFind() { $this->fotografia = new FotografiaPerfil(); $this->fotografia->modelo = $this; //PHP dates are displayed as dd/mm/yyyy //MYSQL dates are stored as yyyy-mm-dd $dateToLocale = Yii::app()->dateFormatter->formatDateTime(CDateTimeParser::parse($this->fecha_nacimiento, 'yyyy-MM-dd'), 'medium', null); $this->fecha_nacimiento = $dateToLocale; parent::afterFind(); } protected function afterSave() { parent::afterSave(); if ($this->isNewRecord) $this->createUploadDir(); } protected function afterDelete() { parent::afterDelete(); $this->deleteUploadDir(); } protected function afterConstruct() { parent::afterConstruct(); $this->fotografia = new FotografiaPerfil(); $this->fotografia->modelo = $this; } /** * @brief Devuelve el nombre del fichero por defecto cuando no se tiene imagen * @return string ruta */ public function getImagenDefault() { return 'user_photo.jpg'; } /** * @brief Devuelve la ruta con los ficheros del usuario. * Incluye el separador de directorios al final de la ruta. * @return string ruta */ public function getUploadPath() { return Yii::getPathOfAlias('application.uploads.candidatos') . DIRECTORY_SEPARATOR . $this->id . DIRECTORY_SEPARATOR; } /** * @brief Crea un directorio para almacenar ficheros del usuario * @return boolean */ private function createUploadDir() { $upload = $this->getUploadPath(); if(!is_dir($upload)) { return mkdir($upload); } else return false; } /** * @brief Elimina el directorio del usuario y todos sus ficheros * @return boolean */ private function deleteUploadDir() { $upload = $this->getUploadPath(); if(is_dir($upload)) return GHelper::recursiveRemoveDirectory($upload); else return false; } } ?>