diff --git a/www/protected/controllers/CandidatoCapacidadController.php b/www/protected/controllers/CandidatoCapacidadController.php index 113534f..bb85cb0 100644 --- a/www/protected/controllers/CandidatoCapacidadController.php +++ b/www/protected/controllers/CandidatoCapacidadController.php @@ -53,6 +53,8 @@ class CandidatoCapacidadController extends Controller */ public function actionCreate($cid) { + Yii::import('ext.multimodelform.MultiModelForm'); + $model=new CandidatoCapacidad; $model->candidato_id = $cid; @@ -67,9 +69,31 @@ class CandidatoCapacidadController extends Controller if(isset($_POST['CandidatoCapacidad'])) { $model->attributes=$_POST['CandidatoCapacidad']; - if($model->save()) { - Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad creada correctamente.')); - $this->redirect(array('index', 'cid'=>$cid)); + + $foundInvalidChild = false; + if ($model->validate()) { + if (!MultiModelForm::validate($tecnologia, $tecnologiasValidas, $tecnologiasBorradas)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Alguna tecnología no es válida.')); + $foundInvalidChild = true; + } + } else { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Algún dato de la capacidad profesional no es válida.')); + } + + if (!$foundInvalidChild && $model->save() ) { + $masterValues = array ('capacidad_id'=>$model->id); + + if (!MultiModelForm::save($tecnologia, $tecnologiasValidas, $tecnologiasBorradas, $masterValues)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar los datos de las tecnologías.')); + $foundInvalidChild = true; + } + + if (!$foundInvalidChild) { + Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad creada correctamente.')); + $this->redirect(array('index', 'cid'=>$candidato->id)); + } + } else { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar la capacidad.')); } } @@ -94,7 +118,10 @@ class CandidatoCapacidadController extends Controller $candidato = Candidato::model()->findByPk($model->candidato_id); $tecnologia = new CandidatoCapacidadTecnologia(); - $tecnologiasValidas = array(); + $tecnologiasValidas = array(); + + $funcional = new CandidatoCapacidadFuncional(); + $funcionalesValidas = array(); // Uncomment the following line if AJAX validation is needed // $this->performAjaxValidation($model); @@ -109,6 +136,10 @@ class CandidatoCapacidadController extends Controller Yii::app()->user->setFlash('error', Yii::t('intranet', 'Alguna tecnología no es válida.')); $foundInvalidChild = true; } + if (!MultiModelForm::validate($funcional, $funcionalesValidas, $funcionalesBorradas)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Alguna capacidad funcional no es válida.')); + $foundInvalidChild = true; + } } else { Yii::app()->user->setFlash('error', Yii::t('intranet', 'Algún dato de la capacidad profesional no es válida.')); } @@ -120,13 +151,18 @@ class CandidatoCapacidadController extends Controller Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar los datos de las tecnologías.')); $foundInvalidChild = true; } + + if (!MultiModelForm::save($funcional, $funcionalesValidas, $funcionalesBorradas, $masterValues)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar los datos de las capacidades profesionales.')); + $foundInvalidChild = true; + } if (!$foundInvalidChild) { Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad actualizada correctamente.')); $this->redirect(array('index', 'cid'=>$candidato->id)); } } else { - //Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar la capacidad.')); + // Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar la capacidad.')); } } @@ -134,7 +170,9 @@ class CandidatoCapacidadController extends Controller 'model'=>$model, 'candidato'=>$candidato, 'tecnologia'=>$tecnologia, - 'tecnologiasValidas'=>$tecnologiasValidas, + 'tecnologiasValidas'=>$tecnologiasValidas, + 'funcional'=>$funcional, + 'funcionalesValidas'=>$funcionalesValidas, )); } diff --git a/www/protected/models/Candidato.php b/www/protected/models/Candidato.php index 803b88f..07e1705 100644 --- a/www/protected/models/Candidato.php +++ b/www/protected/models/Candidato.php @@ -80,8 +80,15 @@ class Candidato extends CActiveRecord } public function getNombreCompletoLocalidad() { + $nombre = ''; $poblacion = Poblacion::model()->with('provincia')->findByPk($this->localidad); - return $poblacion->poblacion . ' (' . $poblacion->provincia->provincia . ')'; + if (isset($poblacion)) { + $nombre = $poblacion->poblacion; + if (isset($poblacion->provincia)) { + $nombre .= ' (' . $poblacion->provincia->provincia . ')'; + } + } + return $nombre; } /** diff --git a/www/protected/models/CandidatoCapacidadFuncional.php b/www/protected/models/CandidatoCapacidadFuncional.php index a9ad863..207e39f 100644 --- a/www/protected/models/CandidatoCapacidadFuncional.php +++ b/www/protected/models/CandidatoCapacidadFuncional.php @@ -41,7 +41,7 @@ class CandidatoCapacidadFuncional extends CActiveRecord // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( - array('capacidad_id, funcional_id', 'required'), + array('funcional_id', 'required'), array('capacidad_id, funcional_id, meses_funcional', 'numerical', 'integerOnly'=>true), // The following rule is used by search(). // Please remove those attributes that should not be searched. diff --git a/www/protected/models/CandidatoCapacidadTecnologia.php b/www/protected/models/CandidatoCapacidadTecnologia.php index 4b74498..f8b2c82 100644 --- a/www/protected/models/CandidatoCapacidadTecnologia.php +++ b/www/protected/models/CandidatoCapacidadTecnologia.php @@ -43,7 +43,6 @@ class CandidatoCapacidadTecnologia extends CActiveRecord return array( array('tecnologia_id', 'required'), array('capacidad_id, tecnologia_id, meses_tecnologia', 'numerical', 'integerOnly'=>true), - //array('id, capacidad_id, tecnologia_id, meses_tecnologia', 'safe'), // The following rule is used by search(). // Please remove those attributes that should not be searched. diff --git a/www/protected/models/CapacidadProfesional.bak.php b/www/protected/models/CapacidadProfesional.bak.php deleted file mode 100644 index 66940e4..0000000 --- a/www/protected/models/CapacidadProfesional.bak.php +++ /dev/null @@ -1,111 +0,0 @@ -true), - array('observaciones', 'safe'), - // The following rule is used by search(). - // Please remove those attributes that should not be searched. - array('id, candidato_id, id_perfil_tecnico, meses_perfil_tecnico, id_perfil_funcional, meses_perfil_funcional, observaciones', 'safe', 'on'=>'search'), - ); - } - - /** - * @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( - 'perfilFuncional' => array(self::BELONGS_TO, 'PerfilFuncional', 'perfil_funcional_id'), - 'candidato' => array(self::BELONGS_TO, 'Candidatos', 'candidato_id'), - 'perfilTecnico' => array(self::BELONGS_TO, 'PerfilesTecnicos', 'perfil_tecnico_id'), - 'tecnologias' => array(self::HAS_MANY, 'CapacidadProfesionalTecnologia', 'capacidad_id'), - ); - } - - /** - * @return array customized attribute labels (name=>label) - */ - public function attributeLabels() - { - return array( - 'id' => 'ID', - 'candidato_id' => 'Id Candidato', - 'id_perfil_tecnico' => 'Id Perfil Tecnico', - 'meses_perfil_tecnico' => 'Meses Perfil Tecnico', - 'id_perfil_funcional' => 'Id Perfil Funcional', - 'meses_perfil_funcional' => 'Meses Perfil Funcional', - 'observaciones' => 'Observaciones', - ); - } - - /** - * 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('candidato_id',$this->candidato_id); - $criteria->compare('id_perfil_tecnico',$this->id_perfil_tecnico); - $criteria->compare('meses_perfil_tecnico',$this->meses_perfil_tecnico); - $criteria->compare('id_perfil_funcional',$this->id_perfil_funcional); - $criteria->compare('meses_perfil_funcional',$this->meses_perfil_funcional); - $criteria->compare('observaciones',$this->observaciones,true); - - return new CActiveDataProvider($this, array( - 'criteria'=>$criteria, - )); - } -} \ No newline at end of file diff --git a/www/protected/models/CapacidadProfesionalTecnologia.bak.php b/www/protected/models/CapacidadProfesionalTecnologia.bak.php deleted file mode 100644 index 4742e9c..0000000 --- a/www/protected/models/CapacidadProfesionalTecnologia.bak.php +++ /dev/null @@ -1,98 +0,0 @@ -true), - // The following rule is used by search(). - // Please remove those attributes that should not be searched. - array('id, id_capacidad, id_tecnologia, meses_tecnologia', 'safe', 'on'=>'search'), - ); - } - - /** - * @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( - 'idTecnologia' => array(self::BELONGS_TO, 'Tecnologias', 'id_tecnologia'), - 'idCapacidad' => array(self::BELONGS_TO, 'CandidatosCapacidades', 'id_capacidad'), - ); - } - - /** - * @return array customized attribute labels (name=>label) - */ - public function attributeLabels() - { - return array( - 'id' => 'ID', - 'id_capacidad' => 'Id Capacidad', - 'id_tecnologia' => 'Id Tecnologia', - 'meses_tecnologia' => 'Meses Tecnologia', - ); - } - - /** - * 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_capacidad',$this->id_capacidad); - $criteria->compare('id_tecnologia',$this->id_tecnologia); - $criteria->compare('meses_tecnologia',$this->meses_tecnologia); - - return new CActiveDataProvider($this, array( - 'criteria'=>$criteria, - )); - } -} \ No newline at end of file diff --git a/www/protected/tests/fixtures/tbl_usuarios.php b/www/protected/tests/fixtures/tbl_usuarios.php index 0605f3a..2510326 100644 --- a/www/protected/tests/fixtures/tbl_usuarios.php +++ b/www/protected/tests/fixtures/tbl_usuarios.php @@ -1,20 +1,28 @@ array( + 'admin' => array( 'id' => '1', + 'email' => 'admin@notanaddress.com', + 'name' => 'Administrador', + 'username' => 'admin', + 'password' => MD5('admin'), + 'last_login_time' => NULL, + ), + 'user1' => array( + 'id' => '2', 'email' => 'test1@notanaddress.com', 'name' => 'Fulanito de Tal', 'username' => 'Test_User_One', - 'password' => 'MD5(`test1`)', + 'password' => MD5('test1'), 'last_login_time' => NULL, ), 'user2' => array( - 'id' => '2', + 'id' => '3', 'email' => 'test2@notanaddress.com', 'name' => 'Menganito de Tal', 'username' => 'Test_User_Two', - 'password' => 'MD5(`test2`)', - 'last_login_time' => NULL, + 'password' => MD5('test2'), + 'last_login_time' => NULL,tingetio ), ); ?> \ No newline at end of file diff --git a/www/protected/views/candidatoCapacidad/_form.php b/www/protected/views/candidatoCapacidad/_form.php index 4f292ef..f080dcc 100644 --- a/www/protected/views/candidatoCapacidad/_form.php +++ b/www/protected/views/candidatoCapacidad/_form.php @@ -80,22 +80,28 @@ Yii::app()->clientScript->registerScript('wysiwyg', $script, CClientScript::POS_ error($model,'perfil_tecnico_id', array('class'=>'errortext')); ?> -