Se añaden las capacidades funcionales a los candidatos.

git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_IntranetNueva/trunk@39 77cfc57b-8ef4-1849-9df6-4a38aa5da120
This commit is contained in:
David Arranz 2012-03-28 16:51:53 +00:00
parent f079e779c2
commit f3ce0b8dbf
11 changed files with 175 additions and 266 deletions

View File

@ -53,6 +53,8 @@ class CandidatoCapacidadController extends Controller
*/ */
public function actionCreate($cid) public function actionCreate($cid)
{ {
Yii::import('ext.multimodelform.MultiModelForm');
$model=new CandidatoCapacidad; $model=new CandidatoCapacidad;
$model->candidato_id = $cid; $model->candidato_id = $cid;
@ -64,41 +66,6 @@ class CandidatoCapacidadController extends Controller
// Uncomment the following line if AJAX validation is needed // Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model); // $this->performAjaxValidation($model);
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));
}
}
$this->render('create',array(
'model'=>$model,
'candidato'=>$candidato,
'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas,
));
}
/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id the ID of the model to be updated
*/
public function actionUpdate($id)
{
Yii::import('ext.multimodelform.MultiModelForm');
$model=$this->loadModel($id);
$candidato = Candidato::model()->findByPk($model->candidato_id);
$tecnologia = new CandidatoCapacidadTecnologia();
$tecnologiasValidas = array();
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['CandidatoCapacidad'])) if(isset($_POST['CandidatoCapacidad']))
{ {
$model->attributes=$_POST['CandidatoCapacidad']; $model->attributes=$_POST['CandidatoCapacidad'];
@ -121,12 +88,81 @@ class CandidatoCapacidadController extends Controller
$foundInvalidChild = true; $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.'));
}
}
$this->render('create',array(
'model'=>$model,
'candidato'=>$candidato,
'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas,
));
}
/**
* Updates a particular model.
* If update is successful, the browser will be redirected to the 'view' page.
* @param integer $id the ID of the model to be updated
*/
public function actionUpdate($id)
{
Yii::import('ext.multimodelform.MultiModelForm');
$model=$this->loadModel($id);
$candidato = Candidato::model()->findByPk($model->candidato_id);
$tecnologia = new CandidatoCapacidadTecnologia();
$tecnologiasValidas = array();
$funcional = new CandidatoCapacidadFuncional();
$funcionalesValidas = array();
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['CandidatoCapacidad']))
{
$model->attributes=$_POST['CandidatoCapacidad'];
$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;
}
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.'));
}
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 (!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) { if (!$foundInvalidChild) {
Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad actualizada correctamente.')); Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad actualizada correctamente.'));
$this->redirect(array('index', 'cid'=>$candidato->id)); $this->redirect(array('index', 'cid'=>$candidato->id));
} }
} else { } 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.'));
} }
} }
@ -135,6 +171,8 @@ class CandidatoCapacidadController extends Controller
'candidato'=>$candidato, 'candidato'=>$candidato,
'tecnologia'=>$tecnologia, 'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas, 'tecnologiasValidas'=>$tecnologiasValidas,
'funcional'=>$funcional,
'funcionalesValidas'=>$funcionalesValidas,
)); ));
} }

View File

@ -80,8 +80,15 @@ class Candidato extends CActiveRecord
} }
public function getNombreCompletoLocalidad() { public function getNombreCompletoLocalidad() {
$nombre = '';
$poblacion = Poblacion::model()->with('provincia')->findByPk($this->localidad); $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;
} }
/** /**

View File

@ -41,7 +41,7 @@ class CandidatoCapacidadFuncional extends CActiveRecord
// NOTE: you should only define rules for those attributes that // NOTE: you should only define rules for those attributes that
// will receive user inputs. // will receive user inputs.
return array( return array(
array('capacidad_id, funcional_id', 'required'), array('funcional_id', 'required'),
array('capacidad_id, funcional_id, meses_funcional', 'numerical', 'integerOnly'=>true), array('capacidad_id, funcional_id, meses_funcional', 'numerical', 'integerOnly'=>true),
// The following rule is used by search(). // The following rule is used by search().
// Please remove those attributes that should not be searched. // Please remove those attributes that should not be searched.

View File

@ -43,7 +43,6 @@ class CandidatoCapacidadTecnologia extends CActiveRecord
return array( return array(
array('tecnologia_id', 'required'), array('tecnologia_id', 'required'),
array('capacidad_id, tecnologia_id, meses_tecnologia', 'numerical', 'integerOnly'=>true), 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(). // The following rule is used by search().
// Please remove those attributes that should not be searched. // Please remove those attributes that should not be searched.

View File

@ -1,111 +0,0 @@
<?php
/**
* This is the model class for table "tbl_candidatos_capacidades".
*
* The followings are the available columns in table 'tbl_candidatos_capacidades':
* @property integer $id
* @property integer $candidato_id
* @property integer $perfil_tecnico_id
* @property integer $meses_perfil_tecnico
* @property integer $perfil_funcional_id
* @property integer $meses_perfil_funcional
* @property string $observaciones
*
* The followings are the available model relations:
* @property PerfilFuncional $perfilFuncional
* @property Candidato $candidato
* @property PerfilTecnico $perfilTecnico
* @property CapacidadProfesionalTecnologia[] $tecnologias
*/
class CapacidadProfesional extends CActiveRecord
{
/**
* Returns the static model of the specified AR class.
* @param string $className active record class name.
* @return CapacidadProfesional 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_capacidades';
}
/**
* @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('meses_perfil_tecnico, meses_perfil_funcional', 'numerical', 'integerOnly'=>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,
));
}
}

View File

@ -1,98 +0,0 @@
<?php
/**
* This is the model class for table "tbl_candidatos_capacidades_tecnologias".
*
* The followings are the available columns in table 'tbl_candidatos_capacidades_tecnologias':
* @property integer $id
* @property integer $id_capacidad
* @property integer $id_tecnologia
* @property integer $meses_tecnologia
*
* The followings are the available model relations:
* @property Tecnologias $idTecnologia
* @property CandidatosCapacidades $idCapacidad
*/
class CapacidadProfesionalTecnologia extends CActiveRecord
{
/**
* Returns the static model of the specified AR class.
* @param string $className active record class name.
* @return CapacidadProfesionalTecnologia 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_capacidades_tecnologias';
}
/**
* @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('id_capacidad, id_tecnologia', 'required'),
array('id_capacidad, id_tecnologia, meses_tecnologia', 'numerical', 'integerOnly'=>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,
));
}
}

View File

@ -1,20 +1,28 @@
<?php <?php
return array( return array(
'user1' => array( 'admin' => array(
'id' => '1', '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', 'email' => 'test1@notanaddress.com',
'name' => 'Fulanito de Tal', 'name' => 'Fulanito de Tal',
'username' => 'Test_User_One', 'username' => 'Test_User_One',
'password' => 'MD5(`test1`)', 'password' => MD5('test1'),
'last_login_time' => NULL, 'last_login_time' => NULL,
), ),
'user2' => array( 'user2' => array(
'id' => '2', 'id' => '3',
'email' => 'test2@notanaddress.com', 'email' => 'test2@notanaddress.com',
'name' => 'Menganito de Tal', 'name' => 'Menganito de Tal',
'username' => 'Test_User_Two', 'username' => 'Test_User_Two',
'password' => 'MD5(`test2`)', 'password' => MD5('test2'),
'last_login_time' => NULL, 'last_login_time' => NULL,tingetio
), ),
); );
?> ?>

View File

@ -80,22 +80,28 @@ Yii::app()->clientScript->registerScript('wysiwyg', $script, CClientScript::POS_
<?php echo $form->error($model,'perfil_tecnico_id', array('class'=>'errortext')); ?> <?php echo $form->error($model,'perfil_tecnico_id', array('class'=>'errortext')); ?>
</div> </div>
</div> </div>
<div class="padding1020"> <div class="padding1020 borderbottom">
<?php echo $form->labelEx($model,'meses_perfil_tecnico'); ?> <?php echo $form->labelEx($model,'meses_perfil_tecnico'); ?>
<div class="marginleft150"> <div class="marginleft150">
<?php echo $form->textField($model,'meses_perfil_tecnico',array('maxlength'=>255,'class'=>'sf')); ?> <?php echo $form->textField($model,'meses_perfil_tecnico',array('maxlength'=>255,'class'=>'sf')); ?>
<?php echo $form->error($model,'meses_perfil_tecnico', array('class'=>'errortext')); ?> <?php echo $form->error($model,'meses_perfil_tecnico', array('class'=>'errortext')); ?>
</div> </div>
</div> </div>
</div> <div class="padding1020 borderbottom">
<div class="content nopadding ohidden"> <?php $this->renderPartial('_tecnologias', array(
<?php $this->renderPartial('_tecnologias', array( 'model'=>$model,
'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas,
)); ?>
</div>
<div class="padding1020">
<?php $this->renderPartial('_funcionales', array(
'model'=>$model, 'model'=>$model,
'tecnologia'=>$tecnologia, 'funcional'=>$funcional,
'tecnologiasValidas'=>$tecnologiasValidas, 'funcionalesValidas'=>$funcionalesValidas,
)); ?> )); ?>
</div>
</div> </div>
</div> </div>
<br clear="all" /> <br clear="all" />

View File

@ -0,0 +1,60 @@
<?php
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/plugins/jquery-ui-1.8.16.custom.min.js');
?>
<?php
$funcionalFormConfig = array(
'elements'=>array(
'funcional_id'=>array(
'type'=>'dropdownlist',
'layout'=>'{input}',
'class'=>'ff',
'items'=>array(0 => '-') + CHtml::listData(PerfilFuncional::model()->findAll(), 'id', 'descripcion'),
),
'meses_funcional'=>array(
'class'=>'sf',
),
),
);
?>
<label><?php echo Yii::t('intranet', 'Capacidades funcionales'); ?></label>
<div class="marginleft150">
<?php $this->widget('ext.multimodelform.MultiModelForm',array(
'id' => 'id_funcional', //the uniques widget id
'addItemText' => '', // no quiero mostrar el enlace de añadir
'removeText' => 'Eliminar',
'removeConfirm' => '¿Desea eliminar esta capacidad funcional?',
'tableHtmlOptions' => array(
'class' => 'sTable2',
'width' => '99%',
),
'tableView' => true,
'formConfig' => $funcionalFormConfig, //the form configuration array
'model' => $funcional, //instance of the form model
//if submitted not empty from the controller,
//the form will be rendered with validation errors
'validatedItems' => $funcionalesValidas,
//array of member instances loaded from db
'data' => $funcional->findAll('capacidad_id=:capacidad_id', array(':capacidad_id'=>$model->id)),
'removeHtmlOptions' => array(
'class' => 'button plain',
),
));
?>
<br clear="all" />
<div class="mmf_addlink">
<?php
echo CHtml::link('Añadir capacidad funcional', '#', array(
'class' => 'button plain',
'rel' => '.id_funcional_copy',
'id' => 'id_funcional',
));
?>
</div>
<br clear="all" />
</div>

View File

@ -18,46 +18,44 @@ $tecnologiaFormConfig = array(
); );
?> ?>
<div class="padding1020 borderbottom"> <label><?php echo Yii::t('intranet', 'Tecnologías'); ?></label>
<label><?php echo Yii::t('intranet', 'Tecnologías'); ?></label>
<div class="marginleft150"> <div class="marginleft150">
<?php $this->widget('ext.multimodelform.MultiModelForm',array( <?php $this->widget('ext.multimodelform.MultiModelForm',array(
'id' => 'id_tecnologia', //the unique widget id 'id' => 'id_tecnologia', //the unique widget id
'addItemText' => '', // no quiero mostrar el enlace de añadir 'addItemText' => '', // no quiero mostrar el enlace de añadir
'removeText' => 'Eliminar', 'removeText' => 'Eliminar',
'removeConfirm' => '¿Desea eliminar esta tecnología?', 'removeConfirm' => '¿Desea eliminar esta tecnología?',
'tableHtmlOptions' => array( 'tableHtmlOptions' => array(
'class' => 'sTable2', 'class' => 'sTable2',
'width' => '99%', 'width' => '99%',
), ),
'tableView' => true, 'tableView' => true,
'formConfig' => $tecnologiaFormConfig, //the form configuration array 'formConfig' => $tecnologiaFormConfig, //the form configuration array
'model' => $tecnologia, //instance of the form model 'model' => $tecnologia, //instance of the form model
//if submitted not empty from the controller, //if submitted not empty from the controller,
//the form will be rendered with validation errors //the form will be rendered with validation errors
'validatedItems' => $tecnologiasValidas, 'validatedItems' => $tecnologiasValidas,
//array of member instances loaded from db //array of member instances loaded from db
'data' => $tecnologia->findAll('capacidad_id=:capacidad_id', array(':capacidad_id'=>$model->id)), 'data' => $tecnologia->findAll('capacidad_id=:capacidad_id', array(':capacidad_id'=>$model->id)),
'removeHtmlOptions' => array( 'removeHtmlOptions' => array(
'class' => 'button plain',
),
));
?>
<br clear="all" />
<div class="mmf_addlink">
<?php
echo CHtml::link('Añadir tecnología', '#', array(
'class' => 'button plain', 'class' => 'button plain',
), 'rel' => '.id_tecnologia_copy',
)); 'id' => 'id_tecnologia',
?> ));
<br clear="all" />
<div class="mmf_addlink">
<?php
echo CHtml::link('Añadir tecnología', '#', array(
'class' => 'button plain',
'rel' => '.id_tecnologia_copy',
'id' => 'id_tecnologia',
));
?> ?>
</div>
<br clear="all" />
</div>
</div> </div>
<br clear="all" />
</div>

View File

@ -13,5 +13,7 @@ $this->pageTitle=Yii::t('intranet', 'Modificar capacidad profesional');
'model'=>$model, 'model'=>$model,
'tecnologia'=>$tecnologia, 'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas, 'tecnologiasValidas'=>$tecnologiasValidas,
'funcional'=>$funcional,
'funcionalesValidas'=>$funcionalesValidas,
)); ));
?> ?>