From ebb10d87b0351c787e492dc36c5599b60d755bed Mon Sep 17 00:00:00 2001 From: david Date: Tue, 27 Mar 2012 14:43:43 +0000 Subject: [PATCH] =?UTF-8?q?-=20Validaci=C3=B3n=20AJAX=20quitada=20-=20Orga?= =?UTF-8?q?nizaci=C3=B3n=20de=20candidato=20(pesta=C3=B1a=20Resumen=20y=20?= =?UTF-8?q?Capacidades=20Profesionales)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_IntranetNueva/trunk@34 77cfc57b-8ef4-1849-9df6-4a38aa5da120 --- www/.htaccess | 9 + www/css/custom.css | 11 +- www/css/gridview3.css | 19 ++ www/css/plugins/jquery.ui.css | 4 +- www/css/style.css | 10 +- www/css/tabs.css | 11 + www/js/custom/elements.js | 7 +- www/protected/.htaccess | 1 - www/protected/config/main.php | 15 +- www/protected/config/url_rules.php | 43 ++++ .../CandidatoCapacidadController.php | 106 +++++---- .../controllers/CandidatoController.php | 225 +++++++----------- www/protected/models/Candidato.php | 12 +- www/protected/models/CandidatoIdioma.php | 2 +- www/protected/models/CandidatoTitulacion.php | 10 +- www/protected/views/candidato/_form.php | 32 ++- www/protected/views/candidato/_view.php | 156 +++++++----- www/protected/views/candidato/create.php | 6 +- www/protected/views/candidato/index.php | 7 +- www/protected/views/candidato/update.php | 5 +- www/protected/views/candidato/view.php | 36 +-- .../views/candidatoCapacidad/_form.php | 2 +- .../views/candidatoCapacidad/create.php | 4 +- .../views/candidatoCapacidad/index.php | 78 +++++- .../views/candidatoCapacidad/update.php | 7 +- www/protected/views/layouts/candidato.php | 85 +++++++ www/protected/views/layouts/default.php | 10 +- 27 files changed, 572 insertions(+), 341 deletions(-) create mode 100644 www/.htaccess create mode 100644 www/css/gridview3.css create mode 100644 www/css/tabs.css delete mode 100644 www/protected/.htaccess create mode 100644 www/protected/config/url_rules.php create mode 100644 www/protected/views/layouts/candidato.php diff --git a/www/.htaccess b/www/.htaccess new file mode 100644 index 0000000..b2b7dfa --- /dev/null +++ b/www/.htaccess @@ -0,0 +1,9 @@ +RewriteEngine on +RewriteBase /intranet/ + +# if a directory or a file exists, use it directly +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d + +# otherwise forward it to index.php +RewriteRule . index.php diff --git a/www/css/custom.css b/www/css/custom.css index e7d96d1..404a6e5 100644 --- a/www/css/custom.css +++ b/www/css/custom.css @@ -64,4 +64,13 @@ span.timestamp { .disabled { color: #999; -} \ No newline at end of file +} + +/**RESUMEN**/ +.resumen { padding: 25px; position: relative; overflow: hidden; } +.resumen .title { color: #006699; } +.resumen_table { border-collape: collapse; } +.resumen_table thead td { border-bottom: 1px solid #ccc; padding: 5px 0; font-weight: bold; } +.resumen_table .subtotal td { font-weight: bold; } +.resumen_table tr td.line { border-bottom: 1px solid #ccc; } + diff --git a/www/css/gridview3.css b/www/css/gridview3.css new file mode 100644 index 0000000..32486a6 --- /dev/null +++ b/www/css/gridview3.css @@ -0,0 +1,19 @@ +.sTable3 { + width: 100%; + border-collapse: collapse; + border-top: 1px solid #ccc; +} +.sTable3 thead th { + padding: 5px 10px; + background: #eee url(../images/thead.png) repeat-x top left; + border-bottom: 1px solid #ccc; +} +.sTable3 tbody tr td { + padding: 10px; + background: #fff; + border-top: 1px solid #eee; + border-left: 1px solid #eee; +} +.sTable3 tbody tr.even td { + background: #fcfcfc; +} diff --git a/www/css/plugins/jquery.ui.css b/www/css/plugins/jquery.ui.css index 50007c3..45b2c7b 100644 --- a/www/css/plugins/jquery.ui.css +++ b/www/css/plugins/jquery.ui.css @@ -28,14 +28,14 @@ .ui-tabs-hide { display: none; } .ui-tabs-panel { padding: 15px; } -/* + .tabs2 { border: 0; } .tabs2 .ui-tabs-nav { padding: 5px 0 0 5px; border: 1px solid #6082AD; background: #688AB5 url(../../images/titlebg.png) repeat-x top left; } .tabs2 .ui-tabs-nav li:last-child a { -moz-border-radius: 0 3px 0 0; -webkit-border-radius: 0 3px 0 0; border-radius: 0 3px 0 0; } .tabs2 .ui-tabs-panel { border: 1px solid #ccc; border-top: 0; } .tabs2 .ui-tabs-nav li a { background: #a8c0df; border: 0; color: #fff; margin-right: 1px; } .tabs2 .ui-tabs-nav li.ui-state-active a { background: #fcfcfc; color: #688AB5; border-bottom: 1px solid #fcfcfc; } -*/ + /** ACCORDION **/ .accordion { border: 1px solid #ccc; background: #fcfcfc; overflow: hidden; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } diff --git a/www/css/style.css b/www/css/style.css index 45a7b91..5e8f641 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -11,6 +11,7 @@ @import url('plugins/jquery.alerts.css'); @import url('plugins/fullcalendar.css'); +@import url('tabs.css'); @import url('custom.css'); html, body, div, span, applet, object, iframe, @@ -521,15 +522,6 @@ input[type=radio], input[type=checkbox] { margin: 0; padding: 0; vertical-align: .iconlink2:hover { background-position: 0 -37px; text-decoration: none; } .iconlink2 img { vertical-align: middle; display: inline-block; } -/**INVOICE**/ -.invoice { border: 1px solid #ccc; background: #f7f7f7; -moz-box-shadow: 1px 1px 3px #ddd; -webkit-box-shadow: 1px 1px 3px #ddd; box-shadow: 1px 1px 3px #ddd; } -.invoice_inner { padding: 20px; position: relative; overflow: hidden; } -.invoice .title { font-size: 18px; float: right; } -.invoicetable { border-collape: collapse; } -.invoicetable thead td { border-bottom: 1px solid #ccc; padding: 5px 0; font-weight: bold; } -.invoicetable .subtotal td { font-weight: bold; } -.invoicetable tr td.line { border-bottom: 1px solid #ccc; } - /** FOOTER**/ .footer { background: #333; padding: 10px 0; } .footerinner { padding: 0 20px; text-align: right; font-size: 11px; color: #ccc; } diff --git a/www/css/tabs.css b/www/css/tabs.css new file mode 100644 index 0000000..45b6825 --- /dev/null +++ b/www/css/tabs.css @@ -0,0 +1,11 @@ +.tabs { border: 1px solid #ccc; background: #fcfcfc; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } +.tabs { -moz-box-shadow: 1px 1px 2px #ddd; -webkit-box-shadow: 1px 1px 2px #ddd; box-shadow: 1px 1px 2px #ddd; } +.tabs-nav { list-style: none; background: #eee url(../images/thead.png) repeat-x top left; border-bottom: 1px solid #ccc; } +.tabs-nav { position: relative; height: 41px; -moz-border-radius: 3px 3px 0 0; -webkit-border-radius: 3px 3px 0 0; border-radius: 3px 3px 0 0; } +.tabs-nav li { display: inline-block; float: left; } +.tabs-nav li:first-child a { -moz-border-radius: 3px 0 0 0; -webkit-border-radius: 3px 0 0 0; border-radius: 3px 0 0 0; } +.tabs-nav li a { display: block; padding: 10px 20px; background: #eee; color: #333; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc; } +.tabs-nav li a:hover { text-decoration: none; background: #e7e7e7; } +.tabs-nav li.current a { background: #fcfcfc; color: #069; border-bottom: 1px solid #fcfcfc; } +.tabs-hide { display: none; } +.tabs-panel { padding: 15px; } \ No newline at end of file diff --git a/www/js/custom/elements.js b/www/js/custom/elements.js index cfe886a..8c47c13 100644 --- a/www/js/custom/elements.js +++ b/www/js/custom/elements.js @@ -33,12 +33,7 @@ jQuery(document).ready(function(){ } }); - - /** - * Tab - **/ - jQuery( "#tabs" ).tabs(); - + /** * Accordion **/ diff --git a/www/protected/.htaccess b/www/protected/.htaccess deleted file mode 100644 index e019832..0000000 --- a/www/protected/.htaccess +++ /dev/null @@ -1 +0,0 @@ -deny from all diff --git a/www/protected/config/main.php b/www/protected/config/main.php index d00d299..e169ec6 100644 --- a/www/protected/config/main.php +++ b/www/protected/config/main.php @@ -33,14 +33,15 @@ $config = array( 'allowAutoLogin'=>true, ), // uncomment the following to enable URLs in path-format - /*'urlManager'=>array( - 'urlFormat'=>'path', - 'rules'=>array( - '/'=>'/view', - '//'=>'/', - '/'=>'/', - ), + /*'urlManager' => array( + 'urlFormat' => 'path', + // Ocultar 'index.php' de las URL's. + // Hay que poner un fichero .htaccess con la redirección. + 'showScriptName' => false, + 'urlSuffix' => '.html', + 'rules' => require(dirname(__FILE__) . '/url_rules.php'), ),*/ + 'errorHandler'=>array( // use 'site/error' action to display errors 'errorAction'=>'site/error', diff --git a/www/protected/config/url_rules.php b/www/protected/config/url_rules.php new file mode 100644 index 0000000..2e7f642 --- /dev/null +++ b/www/protected/config/url_rules.php @@ -0,0 +1,43 @@ + 'api/', 'verb' => 'GET'), + array('api/view', 'pattern' => 'api//', 'verb' => 'GET'), + array('api/update', 'pattern' => 'api//', 'verb' => 'PUT'), + array('api/execute', 'pattern' => 'api/execute', 'verb' => 'POST'), + array('api/delete', 'pattern' => 'api//', 'verb' => 'DELETE'), + array('api/create', 'pattern' => 'api/', 'verb' => 'POST'),*/ + '/usuarios/' => 'usuario/index', + '/candidatos/' => 'candidato/index', + '/candidato/<_a:(create)>' => 'candidato/<_a>', // <- ??????????????? + '/candidatos/' => 'candidato/view', + '/candidatos//capacidades' => 'candidatoCapacidad/index', + + + /* + '/projects/' => 'project/index', + '/project/<_a:(create)>' => 'project/<_a>', + '/projects/' => 'project/view', + '/projects//issues' => 'issue/index', + '/projects//changesets' => 'changeset/index', + '/projects//issue/<_a:(create)>' => 'issue/<_a>', + '/projects//member/<_a:(create)>' => 'member/<_a>', + '/projects//milestone/<_a:(create)>' => 'milestone/<_a>', + '/projects//repository/<_a:(create)>' => 'repository/<_a>', + '/projects//issueCategory/<_a:(create)>' => 'issueCategory/<_a>', + '/projects//issue//' => 'issue/', + '/projects//issues//' => 'issue/', + '/projects//member//' => 'member/', + '/projects//milestone//' => 'milestone/', + '/projects//repository//' => 'repository/', + '/projects//issueCategory//' => 'issueCategory/', + '/projects//changeset//' => 'changeset/', + '/projects//<_a:(activity|roadmap|code|settings)>' => 'project/<_a>', + */ + + '/'=>'/view', + '//'=>'/', + '/'=>'/', + //'candidatos//feed' => array('project/feed', 'urlSuffix' => '.xml', 'caseSensitive' => false), + //'/issues/' => 'issue/index', +); diff --git a/www/protected/controllers/CandidatoCapacidadController.php b/www/protected/controllers/CandidatoCapacidadController.php index 9d98181..e5a1d19 100644 --- a/www/protected/controllers/CandidatoCapacidadController.php +++ b/www/protected/controllers/CandidatoCapacidadController.php @@ -48,29 +48,34 @@ class CandidatoCapacidadController extends Controller } /** - * Creates a new model. - * If creation is successful, the browser will be redirected to the 'view' page. - */ - public function actionCreate() + * Crea una nueva capacidad asociado al candidato indicado. + * @param integer $cid el ID del candidato + */ + public function actionCreate($cid) { - $model=new CandidatoCapacidad; + $model=new CandidatoCapacidad; + $model->candidato_id = $cid; - // Uncomment the following line if AJAX validation is needed - $this->performAjaxValidation($model); + $candidato = Candidato::model()->findByPk($cid); - if(isset($_POST['CandidatoCapacidad'])) - { - print_r($_POST); - $model->attributes=$_POST['CandidatoCapacidad']; - if($model->save()) - $this->redirect(array('view','id'=>$model->id)); + // Uncomment the following line if AJAX validation is needed + // $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, - )); + $this->render('create',array( + 'model'=>$model, + 'candidato'=>$candidato, + )); } - + /** * Updates a particular model. * If update is successful, the browser will be redirected to the 'view' page. @@ -78,21 +83,25 @@ class CandidatoCapacidadController extends Controller */ public function actionUpdate($id) { - $model=$this->loadModel($id); + $model=$this->loadModel($id); + $candidato = Candidato::model()->findByPk($model->candidato_id); - // Uncomment the following line if AJAX validation is needed - $this->performAjaxValidation($model); + // Uncomment the following line if AJAX validation is needed + // $this->performAjaxValidation($model); - if(isset($_POST['CandidatoCapacidad'])) - { - $model->attributes=$_POST['CandidatoCapacidad']; - if($model->save()) - $this->redirect(array('view','id'=>$model->id)); + if(isset($_POST['CandidatoCapacidad'])) + { + $model->attributes=$_POST['CandidatoCapacidad']; + if($model->save()) { + Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad actualizada correctamente.')); + $this->redirect(array('index', 'cid'=>$candidato->id)); } + } - $this->render('update',array( - 'model'=>$model, - )); + $this->render('update',array( + 'model'=>$model, + 'candidato'=>$candidato, + )); } /** @@ -102,28 +111,39 @@ class CandidatoCapacidadController extends Controller */ public function actionDelete($id) { - if(Yii::app()->request->isPostRequest) - { - // we only allow deletion via POST request - $this->loadModel($id)->delete(); + if(Yii::app()->request->isPostRequest) + { + // we only allow deletion via POST request + $this->loadModel($id)->delete(); + Yii::app()->user->setFlash('success', Yii::t('intranet', 'Capacidad eliminada correctamente.')); - // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser - if(!isset($_GET['ajax'])) - $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); - } - else - throw new CHttpException(400,'Invalid request. Please do not repeat this request again.'); + // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser + if(!isset($_GET['ajax'])) + $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); + } + else + throw new CHttpException(400,'Invalid request. Please do not repeat this request again.'); } /** * Lists all models. */ - public function actionIndex() + public function actionIndex($cid) { - $dataProvider=new CActiveDataProvider('CandidatoCapacidad'); - $this->render('index',array( - 'dataProvider'=>$dataProvider, - )); + $this->layout = '//layouts/candidato'; + $candidato = Candidato::model()->findByPk($cid); + + $dataProvider = new CActiveDataProvider('CandidatoCapacidad', array( + 'criteria'=>array( + 'condition' => 'candidato_id='.$cid, + ), + )); + + $this->render('index',array( + 'dataProvider'=>$dataProvider, + 'candidato'=>$candidato, + + )); } /** diff --git a/www/protected/controllers/CandidatoController.php b/www/protected/controllers/CandidatoController.php index 0df7f0a..3f4c6d3 100644 --- a/www/protected/controllers/CandidatoController.php +++ b/www/protected/controllers/CandidatoController.php @@ -7,14 +7,14 @@ class CandidatoController extends Controller * using two-column layout. See 'protected/views/layouts/column2.php'. */ public $layout='//layouts/default'; - + /** * @return array action filters */ public function filters() { return array( - 'accessControl', // perform access control for CRUD operations + 'accessControl', // perform access control for CRUD operations ); } @@ -26,6 +26,12 @@ class CandidatoController extends Controller public function accessRules() { return array( + array('allow', + 'actions' => array('index','view','create','update','delete','admin'), + 'users' => array('*'), + ), + ); + /*return array( array('allow', // allow authenticated user to perform 'create' and 'update' actions 'actions'=>array('index','view','create','update','delete','admin'), 'users'=>array('@'), @@ -33,7 +39,7 @@ class CandidatoController extends Controller array('deny', // deny all users 'users'=>array('*'), ), - ); + );*/ } /** @@ -42,9 +48,10 @@ class CandidatoController extends Controller */ public function actionView($id) { - $this->render('view',array( - 'model'=>$this->loadModel($id), - )); + $this->layout='//layouts/candidato'; + $this->render('view',array( + 'model'=>$this->loadModel($id), + )); } /** @@ -63,49 +70,7 @@ class CandidatoController extends Controller $titulacionesValidas = array(); // Uncomment the following line if AJAX validation is needed - $this->performAjaxValidation($model); - - /*if(isset($_POST['Candidato'])) - { - $model->attributes=$_POST['Candidato']; - $foto=CUploadedFile::getInstance($model,'foto'); - - if ($model->validate()) - { - $foundInvalidChild = false; - $arrayIdiomas = array(); - if(isset($_POST['CandidatoIdioma'])) - { - foreach ($_POST['CandidatoIdioma'] as $idioma) - { - $CandidatoIdioma = new CandidatoIdioma; - $CandidatoIdioma->attributes = $idioma; - - if ($model->id) - $CandidatoIdioma->candidato_id = $model->id; - - if (!$CandidatoIdioma->validate()) - $foundInvalidChild = true; - - $arrayIdiomas[] = $CandidatoIdioma; - } - } - } - - if (!$foundInvalidChild && $model->save()) { - $this->guardarFoto($model->id, $foto); - - // Guardar los idiomas - foreach($arrayIdiomas as $CandidatoIdioma) - { - $CandidatoIdioma->candidato_id = $model->id; - $CandidatoIdioma->save(); - } - - Yii::app()->user->setFlash('success', "Candidato dado de alta correctamente."); - $this->redirect(array('index')); - } - }*/ + // $this->performAjaxValidation($model); if (isset($_POST['Candidato'])) { $model->attributes=$_POST['Candidato']; @@ -113,25 +78,40 @@ class CandidatoController extends Controller $foundInvalidChild = false; if ($model->validate()) { - if (!MultiModelForm::validate($idioma, $idiomasValidos, $idiomasBorrados)) - $foundInvalidChild = true; + if (!MultiModelForm::validate($idioma, $idiomasValidos, $idiomasBorrados)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Algún idioma del candidato no es válido.')); + $foundInvalidChild = true; + } - if (!MultiModelForm::validate($titulacion, $titulacionesValidas, $titulacionesBorradas)) - $foundInvalidChild = true; + if (!MultiModelForm::validate($titulacion, $titulacionesValidas, $titulacionesBorradas)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Alguna titulación del candidato no es válida.')); + $foundInvalidChild = true; + } + } else { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Algún dato del candidato no es válido.')); } - + if (!$foundInvalidChild && $model->save() ) { $masterValues = array ('candidato_id'=>$model->id); - if (MultiModelForm::save($idioma, $idiomasValidos, $idiomasBorrados, $masterValues) && - MultiModelForm::save($titulacion, $titulacionesValidas, $titulacionesBorradas, $masterValues)) - { + if (!MultiModelForm::save($idioma, $idiomasValidos, $idiomasBorrados, $masterValues)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar los idiomas del candidato.')); + $foundInvalidChild = true; + } + if (!MultiModelForm::save($titulacion, $titulacionesValidas, $titulacionesBorradas, $masterValues)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar las titulaciones del candidato.')); + $foundInvalidChild = true; + } + + if (!$foundInvalidChild) { $this->guardarFoto($model->id, $foto); - Yii::app()->user->setFlash('success', "Candidato dado de alta correctamente."); - $url=$this->createUrl('index', array('id' => $model->id)); + Yii::app()->user->setFlash('success', Yii::t('intranet', 'Candidato dado de alta correctamente.')); + $url=$this->createUrl('view', array('id' => $model->id)); $this->redirect($url); } - } + } else { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar el candidato.')); + } } $this->render('create',array( @@ -160,92 +140,49 @@ class CandidatoController extends Controller $titulacionesValidas = array(); // Uncomment the following line if AJAX validation is needed - $this->performAjaxValidation($model); - - /*if(isset($_POST['Candidato'])) - { - $foto=CUploadedFile::getInstance($model,'foto'); - $model->attributes=$_POST['Candidato']; - - if ($model->validate()) - { - $foundInvalidChild = false; - $arrayIdiomas = array(); - if(isset($_POST['CandidatoIdioma'])) - { - foreach ($_POST['CandidatoIdioma'] as $idioma) - { - //$CandidatoIdioma = CandidatoIdioma::model()->findB; - //CandidatoIdioma::model()->deleteAllByAttributes($arrayIdiomas) - - $CandidatoIdioma->attributes = $idioma; - - - if ($model->id) - $CandidatoIdioma->candidato_id = $model->id; - - if (!$CandidatoIdioma->validate()) - $foundInvalidChild = true; - - $arrayIdiomas[] = $CandidatoIdioma; - } - } - } - - if (!$foundInvalidChild && $model->save()) { - $this->guardarFoto($model->id, $foto); - - // Guardar los idiomas - foreach($arrayIdiomas as $CandidatoIdioma) - { - $CandidatoIdioma->candidato_id = $model->id; - $CandidatoIdioma->save(); - } - - Yii::app()->user->setFlash('success', "Candidato actualizado correctamente."); - //$this->redirect(array('view','id'=>$model->id)); - } - }*/ + // $this->performAjaxValidation($model); if (isset($_POST['Candidato'])) { $model->attributes=$_POST['Candidato']; $foto=CUploadedFile::getInstance($model,'foto'); $foundInvalidChild = false; - if ($model->validate()) { - if (!MultiModelForm::validate($idioma, $idiomasValidos, $idiomasBorrados)) - $foundInvalidChild = true; + if ($model->validate()) { + if (!MultiModelForm::validate($idioma, $idiomasValidos, $idiomasBorrados)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Algún idioma del candidato no es válido.')); + $foundInvalidChild = true; + } - if (!MultiModelForm::validate($titulacion, $titulacionesValidas, $titulacionesBorradas)) - $foundInvalidChild = true; + if (!MultiModelForm::validate($titulacion, $titulacionesValidas, $titulacionesBorradas)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Alguna titulación del candidato no es válida.')); + $foundInvalidChild = true; + } + } else { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Algún dato del candidato no es válido.')); } - + if (!$foundInvalidChild && $model->save() ) { $masterValues = array ('candidato_id'=>$model->id); - if (MultiModelForm::save($idioma, $idiomasValidos, $idiomasBorrados, $masterValues) && - MultiModelForm::save($titulacion, $titulacionesValidas, $titulacionesBorradas, $masterValues)) - { - $this->guardarFoto($model->id, $foto); - Yii::app()->user->setFlash('success', "Candidato actualizado correctamente."); - $this->redirect(array('index')); + if (!MultiModelForm::save($idioma, $idiomasValidos, $idiomasBorrados, $masterValues)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar los idiomas del candidato.')); + $foundInvalidChild = true; } - } - } - - - /*if(isset($_POST['Candidato'])) { - - //the value for the foreign key 'candidato_id' - $masterValues = array ('candidato_id'=>$model->id); - - //Save the master model after saving valid members - if (MultiModelForm::save($idioma, $validatedIdiomas, $deleteIdiomas, $masterValues) && $model->save() ) { - $this->guardarFoto($model->id, $foto); - Yii::app()->user->setFlash('success', "Candidato actualizado correctamente."); - //$this->redirect(array('view','id'=>$model->id)); + if (!MultiModelForm::save($titulacion, $titulacionesValidas, $titulacionesBorradas, $masterValues)) { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar las titulaciones del candidato.')); + $foundInvalidChild = true; + } + + if (!$foundInvalidChild) { + $this->guardarFoto($model->id, $foto); + Yii::app()->user->setFlash('success', Yii::t('intranet', 'Candidato modificado correctamente.')); + $url=$this->createUrl('view', array('id' => $model->id)); + $this->redirect($url); + } + } else { + Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar el candidato.')); } - }*/ + } $this->render('update',array( 'model'=>$model, @@ -268,7 +205,7 @@ class CandidatoController extends Controller // we only allow deletion via POST request $this->loadModel($id)->delete(); $this->borrarFoto($id); - + Yii::app()->user->setFlash('success', "Candidato eliminardo correctamente."); // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser if(!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index')); @@ -389,6 +326,24 @@ class CandidatoController extends Controller }*/ $value = implode('
', $lista); return ($value == NULL) ? CHtml::tag("span", array("class"=>"nodata"), Yii::t('intranet', 'Sin capacidades')) : $value; - } + } + + public function darListaTitulaciones($model) + { + $lista = array(); + foreach ($model->titulaciones as $titulacion) { + $lista[] = $titulacion->titulacion; + } + return $lista; + } + + public function darListaIdiomas($model) + { + $lista = array(); + foreach ($model->idiomas as $idioma) { + $lista[] = $idioma->idioma; + } + return $lista; + } } diff --git a/www/protected/models/Candidato.php b/www/protected/models/Candidato.php index b467f7b..07558c6 100644 --- a/www/protected/models/Candidato.php +++ b/www/protected/models/Candidato.php @@ -66,6 +66,15 @@ class Candidato extends CActiveRecord $this->_nombreCompleto = $value; } + 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); + } + /** * Devuelve la lista de géneros de un candidato. * @return array lista de géneros permitidos @@ -144,7 +153,8 @@ class Candidato extends CActiveRecord disponibilidad_proyectos_internacionales', 'length', 'max'=>255), - array('fecha_nacimiento', 'safe'), + array('fecha_nacimiento, observaciones', 'safe'), + array('estado', 'unsafe'), // The following rule is used by search(). // Please remove those attributes that should not be searched. array('id, estado, dni, nombre, apellidos, email, telefono_fijo, diff --git a/www/protected/models/CandidatoIdioma.php b/www/protected/models/CandidatoIdioma.php index d1d24a2..6188c06 100644 --- a/www/protected/models/CandidatoIdioma.php +++ b/www/protected/models/CandidatoIdioma.php @@ -86,7 +86,7 @@ class CandidatoIdioma extends CActiveRecord 'candidato_id' => 'Id Candidato', 'idioma' => 'Idioma', 'conversacion' => 'Conversación', - 'lectura_traduccion' => 'Lectura/traduccion', + 'lectura_traduccion' => 'Lectura/traducción', ); } diff --git a/www/protected/models/CandidatoTitulacion.php b/www/protected/models/CandidatoTitulacion.php index dfbde2e..9f4b210 100644 --- a/www/protected/models/CandidatoTitulacion.php +++ b/www/protected/models/CandidatoTitulacion.php @@ -9,7 +9,7 @@ * @property string $titulacion * * The followings are the available model relations: - * @property Candidatos $candidato + * @property Candidato $candidato */ class CandidatoTitulacion extends CActiveRecord { @@ -39,12 +39,10 @@ class CandidatoTitulacion extends CActiveRecord // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( - array('candidato_id, titulacion', 'required'), - array('candidato_id', 'numerical', 'integerOnly'=>true), array('titulacion', 'length', 'max'=>255), // The following rule is used by search(). // Please remove those attributes that should not be searched. - array('id, candidato_id, titulacion', 'safe', 'on'=>'search'), + array('titulacion', 'safe', 'on'=>'search'), ); } @@ -56,7 +54,7 @@ class CandidatoTitulacion extends CActiveRecord // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( - 'candidato' => array(self::BELONGS_TO, 'Candidatos', 'candidato_id'), + 'candidato' => array(self::BELONGS_TO, 'Candidato', 'candidato_id'), ); } @@ -67,7 +65,7 @@ class CandidatoTitulacion extends CActiveRecord { return array( 'id' => 'ID', - 'candidato_id' => 'Candidato', + 'candidato_id' => 'ID Candidato', 'titulacion' => 'Titulación', ); } diff --git a/www/protected/views/candidato/_form.php b/www/protected/views/candidato/_form.php index 4d19b4b..4120236 100644 --- a/www/protected/views/candidato/_form.php +++ b/www/protected/views/candidato/_form.php @@ -1,10 +1,29 @@ clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/custom/elements.js'); +Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/plugins/wysiwyg/jquery.wysiwyg.js'); +Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . 'js/plugins/wysiwyg/wysiwyg.image.js'); +Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . 'js/plugins/wysiwyg/wysiwyg.link.js'); +Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . 'js/plugins/wysiwyg/wysiwyg.table.js'); + +$script=<<clientScript->registerScript('wysiwyg', $script, CClientScript::POS_END); ?> beginWidget('CActiveForm', array( 'id'=>'candidato-form', - 'enableAjaxValidation'=>true, + //'enableAjaxValidation'=>true, 'htmlOptions'=>array('enctype' => 'multipart/form-data'), )); ?> @@ -176,14 +195,13 @@ Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/custom/e

- +

- renderPartial('_capacidades', array( - 'model'=>$model, - 'capacidad'=>$capacidad, - 'capacidadesValidas'=>$capacidadesValidas, - ));*/ ?> +
+ textArea($model, 'observaciones', array('id'=>'wysiwyg', 'class'=>'ff')); ?> + error($model,'observaciones', array('class'=>'errortext')); ?> +

diff --git a/www/protected/views/candidato/_view.php b/www/protected/views/candidato/_view.php index b2fbc5e..1de956f 100644 --- a/www/protected/views/candidato/_view.php +++ b/www/protected/views/candidato/_view.php @@ -1,66 +1,94 @@ -
+clientScript->registerScriptFile(Yii::app()->baseUrl . '/js/custom/elements.js'); +?> - getAttributeLabel('id')); ?>: - id), array('view', 'id'=>$data->id)); ?> -
+
+
+
+ foto, $data->nombre, + array("title" => $data->nombre, "width"=>"120", "height"=>"120") + ); ?> +
+
+

nombreCompleto); ?>

+ estado), "#", array("class" => $data->cssClassEstado)); ?>
+ getAttributeLabel('sexo')); ?>: sexo); ?>
+ getAttributeLabel('fecha_nacimiento')); ?>: fecha_nacimiento); ?>
+ getAttributeLabel('lugar_nacimiento')); ?>: lugar_nacimiento); ?>
+
+
+
+
+ getAttributeLabel('dni')); ?>:
+ getAttributeLabel('localidad')); ?>:
+ getAttributeLabel('email')); ?>:
+ getAttributeLabel('telefono_fijo')); ?>:
+ getAttributeLabel('telefono_movil')); ?>:
- getAttributeLabel('foto')); ?>: - foto); ?> -
- - getAttributeLabel('dni')); ?>: - dni); ?> -
- - getAttributeLabel('nombre')); ?>: - nombre); ?> -
- - getAttributeLabel('apellidos')); ?>: - apellidos); ?> -
- - getAttributeLabel('email')); ?>: - email); ?> -
- - getAttributeLabel('telefono_fijo')); ?>: - telefono_fijo); ?> -
- - getAttributeLabel('telefono_movil')); ?>: - telefono_movil); ?> -
- - getAttributeLabel('sexo')); ?>: - sexo); ?> -
- - getAttributeLabel('fecha_nacimiento')); ?>: - fecha_nacimiento); ?> -
- - getAttributeLabel('lugar_nacimiento')); ?>: - lugar_nacimiento); ?> -
- - getAttributeLabel('fecha_alta')); ?>: - fecha_alta); ?> -
- - getAttributeLabel('usuario_alta')); ?>: - usuario_alta); ?> -
- - getAttributeLabel('fecha_modificacion')); ?>: - fecha_modificacion); ?> -
- - getAttributeLabel('usuario_modificacion')); ?>: - usuario_modificacion); ?> -
- - */ ?> - -
\ No newline at end of file +
+
+ dni); ?>
+ localidad); ?>
+ email); ?>
+ telefono_fijo); ?>
+ telefono_movil); ?>
+
+
+
+
+ +
+
+

Disponibilidad

+ :
+ :
+ :
+ :
+ :
+
+
+
+ disponibilidad_incorporacion); ?>
+ disponibilidad_entrevistas); ?>
+ disponibilidad_guardias); ?>
+ disponibilidad_viajar); ?>
+ disponibilidad_proyectos_internacionales); ?>
+
+
+
+
+ getAttributeLabel('carnet_conducir')); ?>:
+ getAttributeLabel('vehiculo_propio')); ?>:
+ :
+ getAttributeLabel('telefono_movil')); ?>:
+ getAttributeLabel('idiomas')); ?>:
+ getAttributeLabel('titulacciones')); ?>:
+ +
+
+ carnet_conducir); ?>
+ tieneVehiculoPropio); ?>
+ rangoSalarial); ?>
+ telefono_movil); ?>
+ ', ($this->darListaIdiomas($data))); ?> + ', ($this->darListaTitulaciones($data))); ?> +
+
+
+
+
+
+ getAttributeLabel('observaciones')); ?>: +
+
+ observaciones); ?> +
+
+
+
+
+
+
+
+
diff --git a/www/protected/views/candidato/create.php b/www/protected/views/candidato/create.php index d4a01dc..e9f560c 100644 --- a/www/protected/views/candidato/create.php +++ b/www/protected/views/candidato/create.php @@ -1,7 +1,7 @@ breadcrumbs=array( - 'Candidatos'=>array('index'), - 'Nuevo candidato', + Yii::t('intranet', 'Candidatos') => array('candidato/index'), + Yii::t('intranet', 'Nuevo candidato') => array('candidato/index'), ); $this->menu=array( array( @@ -10,7 +10,7 @@ $this->menu=array( 'linkOptions'=>array('class'=>'iconlink'), ), ); -$this->pageTitle='Nuevo candidato'; +$this->pageTitle=Yii::t('intranet', 'Nuevo candidato'); ?> renderPartial('_form', array( diff --git a/www/protected/views/candidato/index.php b/www/protected/views/candidato/index.php index d6f9bc8..2d8c6d8 100644 --- a/www/protected/views/candidato/index.php +++ b/www/protected/views/candidato/index.php @@ -4,6 +4,7 @@ $this->breadcrumbs=array( ); $this->menu=array( + 'principal' => array( array( 'label'=>'Nuevo candidatoNuevo candidato', 'url'=>array('create'), @@ -14,6 +15,7 @@ $this->menu=array( 'url'=>array('#'), 'linkOptions'=>array('class'=>'iconlink search-button'), ), + ), ); $this->pageTitle=Yii::t('intranet', 'Gestión de candidatos'); @@ -31,7 +33,6 @@ $('.search-form form').submit(function(){ }); "); - ?>