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)
{
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,
));
}

View File

@ -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;
}
/**

View File

@ -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.

View File

@ -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.

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
return array(
'user1' => 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
),
);
?>

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')); ?>
</div>
</div>
<div class="padding1020">
<div class="padding1020 borderbottom">
<?php echo $form->labelEx($model,'meses_perfil_tecnico'); ?>
<div class="marginleft150">
<?php echo $form->textField($model,'meses_perfil_tecnico',array('maxlength'=>255,'class'=>'sf')); ?>
<?php echo $form->error($model,'meses_perfil_tecnico', array('class'=>'errortext')); ?>
</div>
</div>
</div>
<div class="content nopadding ohidden">
<?php $this->renderPartial('_tecnologias', array(
<div class="padding1020 borderbottom">
<?php $this->renderPartial('_tecnologias', array(
'model'=>$model,
'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas,
)); ?>
</div>
<div class="padding1020">
<?php $this->renderPartial('_funcionales', array(
'model'=>$model,
'tecnologia'=>$tecnologia,
'tecnologiasValidas'=>$tecnologiasValidas,
'funcional'=>$funcional,
'funcionalesValidas'=>$funcionalesValidas,
)); ?>
</div>
</div>
</div>
<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">
<?php $this->widget('ext.multimodelform.MultiModelForm',array(
'id' => 'id_tecnologia', //the unique widget id
'addItemText' => '', // no quiero mostrar el enlace de añadir
'removeText' => 'Eliminar',
'removeConfirm' => '¿Desea eliminar esta tecnología?',
'tableHtmlOptions' => array(
'class' => 'sTable2',
'width' => '99%',
),
'tableView' => true,
'formConfig' => $tecnologiaFormConfig, //the form configuration array
'model' => $tecnologia, //instance of the form model
<div class="marginleft150">
<?php $this->widget('ext.multimodelform.MultiModelForm',array(
'id' => 'id_tecnologia', //the unique widget id
'addItemText' => '', // no quiero mostrar el enlace de añadir
'removeText' => 'Eliminar',
'removeConfirm' => '¿Desea eliminar esta tecnología?',
'tableHtmlOptions' => array(
'class' => 'sTable2',
'width' => '99%',
),
'tableView' => true,
'formConfig' => $tecnologiaFormConfig, //the form configuration array
'model' => $tecnologia, //instance of the form model
//if submitted not empty from the controller,
//the form will be rendered with validation errors
'validatedItems' => $tecnologiasValidas,
//if submitted not empty from the controller,
//the form will be rendered with validation errors
'validatedItems' => $tecnologiasValidas,
//array of member instances loaded from db
'data' => $tecnologia->findAll('capacidad_id=:capacidad_id', array(':capacidad_id'=>$model->id)),
//array of member instances loaded from db
'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',
),
));
?>
<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',
));
'rel' => '.id_tecnologia_copy',
'id' => 'id_tecnologia',
));
?>
</div>
<br clear="all" />
</div>
?>
</div>
<br clear="all" />
</div>

View File

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