From 23e0eb06816192ec19fa88fb38defb1c8484e652 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 30 Jul 2012 08:14:50 +0000 Subject: [PATCH] =?UTF-8?q?Actualizaci=C3=B3n=20del=20estado=20de=20un=20c?= =?UTF-8?q?andidato=20a=20trav=C3=A9s=20de=20una=20ventana=20modal.?= 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@71 77cfc57b-8ef4-1849-9df6-4a38aa5da120 --- www/css/custom.css | 8 +- www/css/plugins/jquery-ui.css | 34 +++++- .../controllers/CandidatoController.php | 58 +++++++++- www/protected/views/candidato/_form.php | 4 +- .../views/candidato/_form_estado.php | 44 ++++++++ www/protected/views/candidato/create.php | 2 +- www/protected/views/candidato/index.php | 103 +++++++++++++++++- .../views/candidato/update_modal.php | 37 +++++++ 8 files changed, 271 insertions(+), 19 deletions(-) create mode 100644 www/protected/views/candidato/_form_estado.php create mode 100644 www/protected/views/candidato/update_modal.php diff --git a/www/css/custom.css b/www/css/custom.css index 3ed3931..8d9020d 100644 --- a/www/css/custom.css +++ b/www/css/custom.css @@ -63,6 +63,12 @@ span.timestamp { color: #006699; } +.ui-dialog-content .form_default label { + float: none; + margin-left: 20px; + margin-right: 5px; +} + .disabled { color: #999; } @@ -74,5 +80,3 @@ span.timestamp { .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/plugins/jquery-ui.css b/www/css/plugins/jquery-ui.css index 45b2c7b..21b4e70 100644 --- a/www/css/plugins/jquery-ui.css +++ b/www/css/plugins/jquery-ui.css @@ -83,9 +83,11 @@ .ui-dialog { background: url(../../images/blacktrans1.png); padding: 5px; } .ui-dialog { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; position: relative; } .ui-dialog-titlebar { padding: 8px 10px; color: #fff; background: #eee url(../../images/thead.png) repeat-x top left; border-bottom: 1px solid #ccc; } -.ui-dialog-content { background: #fff; padding: 10px; } -.ui-dialog-titlebar { color: #069; font-weight: bold; } -.ui-dialog-titlebar-close { position: absolute; top: 12px; right: 15px; font-size: 11px; font-weight: normal; color: #666; } +.ui-dialog-content, .ui-dialog-buttonpane { background: #FCFCFC; padding: 10px; margin: 0px;} +.ui-dialog-content { padding-top: 20px;} +.ui-dialog-buttonpane { padding-top: 0px;} +.ui-dialog-titlebar { color: #069; font-size: 14px; font-weight: bold; line-height: 21px;} +.ui-dialog-titlebar-close { position: absolute; top: 15px; right: 15px; font-size: 11px; font-weight: normal; color: #666; } .ui-dialog-titlebar-close:hover { text-decoration: none; color: #333; } .ui-dialog .wysiwyg legend { position: absolute; top: 13px; left: 15px; font-size: 11px; text-transform: uppercase; } @@ -93,3 +95,29 @@ .ui-dialog .wysiwyg input.submit { background: url(../../images/buttonbg3.png) repeat-x top left; border: 1px solid #314a78; color: #fff; font-size: 11px; } .ui-dialog .wysiwyg input.reset { background: url(../../images/thead.png) repeat-x top left; border: 1px solid #bbb; color: #333; font-size: 11px; } .ui-dialog .wysiwyg label { float: left; width: 100px; } + +.ui-dialog .ui-dialog-buttonset { text-align: center; margin: 0em 0em 0em 0em; } + + +.ui-button { margin: 0 2px; padding: 5px 15px; font-size: 12px; display: inline-block; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } + +.ui-button { -moz-box-shadow: 1px 1px 2px #eee; -webkit-box-shadow: 1px 1px 2px #eee; box-shadow: 1px 1px 2px #eee; cursor: pointer; } +.ui-button:hover, .ui-button:active { background-position: 0 -39px; } + +.ui-button.ok-button { border: 1px solid #39537f; background: #eee url(../../images/buttons/button_blue.png) repeat-x top left; text-shadow: 1px 1px #39537f; color: #fff; } +.ui-button.ok-button:active { -moz-box-shadow: inset 2px 2px 2px #12274c; -webkit-box-shadow: inset 2px 2px 2px #12274c; box-shadow: inset 2px 2px 2px #12274c; } + +.ui-button.cancel-button { border: 1px solid #ccc; background: #eee url(../../images/buttons/button_white.png) repeat-x top left; text-shadow: 1px 1px #f7f7f7; color: #333; } +.ui-button.cancel-button:active { -moz-box-shadow: inset 2px 2px 2px #ccc; -webkit-box-shadow: inset 2px 2px 2px #ccc; box-shadow: inset 2px 2px 2px #ccc; } + +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + +.ui-dialog-titlebar-close { width: 16px; height: 16px; background: url(../../images/icons/small/black/close.png) no-repeat top left; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { background-color: #000; opacity: 0.5; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/www/protected/controllers/CandidatoController.php b/www/protected/controllers/CandidatoController.php index 91c39c4..0b31382 100644 --- a/www/protected/controllers/CandidatoController.php +++ b/www/protected/controllers/CandidatoController.php @@ -27,7 +27,7 @@ class CandidatoController extends Controller { return array( array('allow', - 'actions' => array('index','view','create','update','delete','admin'), + 'actions' => array('index','view','create','update','delete','admin', 'updateEstado'), 'users' => array('*'), ), ); @@ -113,14 +113,14 @@ class CandidatoController extends Controller Yii::app()->user->setFlash('error', Yii::t('intranet', 'Se ha producido un error al guardar el candidato.')); } } - + $this->render('create',array( 'model'=>$model, 'idioma'=>$idioma, 'titulacion'=>$titulacion, 'idiomasValidos'=>$idiomasValidos, 'titulacionesValidas'=>$titulacionesValidas, - )); + )); } /** @@ -141,7 +141,7 @@ class CandidatoController extends Controller // 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'); @@ -176,11 +176,34 @@ class CandidatoController extends Controller if (!$foundInvalidChild) { $this->guardarFoto($model->id, $foto); Yii::app()->user->setFlash('success', Yii::t('intranet', 'Candidato modificado correctamente.')); + + if( Yii::app()->request->isAjaxRequest ) { + // Stop jQuery from re-initialization + Yii::app()->clientScript->scriptMap['jquery.js'] = false; + echo CJSON::encode( array( + 'status' => 'success', + 'content' => Yii::t('intranet', 'Candidato modificado correctamente.'), + )); + exit; + } + $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.')); + + if( Yii::app()->request->isAjaxRequest ) { + // Stop jQuery from re-initialization + Yii::app()->clientScript->scriptMap['jquery.js'] = false; + echo CJSON::encode( array( + 'status' => 'failure', + 'content' => Yii::t('intranet', 'Se ha producido un error al guardar el candidato.'), + )); + exit; + } + } } @@ -192,6 +215,29 @@ class CandidatoController extends Controller 'titulacionesValidas'=>$titulacionesValidas, )); } + + public function actionUpdateEstado($id) { + + $model = $this->loadModel($id); + + // Uncomment the following line if AJAX validation is needed + $this->performAjaxValidation($model); + + if(isset($_GET['ajax'])) + var_dump($_GET['ajax']); + + if (isset($_POST['Candidato'])) { + $model->id_estado = $_POST['Candidato']['id_estado']; + + if ($model->save()) { + + } else { + + } + } else { + echo $this->renderPartial('_form_estado', array('model' => $model, false, true)); + } + } /** * Deletes a particular model. @@ -289,7 +335,7 @@ class CandidatoController extends Controller $foto->saveAs($path.$fichero); } } - + private function borrarFoto($id) { $path = Yii::app()->basePath.'/../fotos/'; $fichero = $id.'.jpg'; @@ -303,7 +349,7 @@ class CandidatoController extends Controller $url = Yii::app()->request->baseUrl.'/fotos/'; return file_exists($path.$fichero) ? $url.$fichero : $url.'no_avatar.png'; } - + /** * Calcula el valor para la columna 'Capacidad técnica' del grid * @param $data datos de la fila actual diff --git a/www/protected/views/candidato/_form.php b/www/protected/views/candidato/_form.php index a241a89..e9c9822 100644 --- a/www/protected/views/candidato/_form.php +++ b/www/protected/views/candidato/_form.php @@ -121,7 +121,7 @@ Yii::app()->clientScript->registerScript('wysiwyg', $script, CClientScript::POS_ ) )); ?> - error($model,'fecha_nacimiento', array('class'=>'errortext')); ?> + error($model,'fecha_nacimiento', array('class'=>'errortext')); ?> @@ -259,7 +259,7 @@ Yii::app()->clientScript->registerScript('wysiwyg', $script, CClientScript::POS_ labelEx($model,'estado'); ?>
findAll(),'id', 'descripcion'); + $lista = CHtml::listData(EstadoCandidato::model()->findAll(),'id', 'descripcion'); echo $form->dropDownList( $model, diff --git a/www/protected/views/candidato/_form_estado.php b/www/protected/views/candidato/_form_estado.php new file mode 100644 index 0000000..6dadf67 --- /dev/null +++ b/www/protected/views/candidato/_form_estado.php @@ -0,0 +1,44 @@ + +beginWidget('CActiveForm', array( + 'id' => 'updateestado-form', + 'enableAjaxValidation' => true, + 'action' => CHtml::normalizeUrl(array('candidato/update', 'id' => $model->id)), + 'htmlOptions' => array( + 'class' => 'form_default', + ), + )); +?> + +error($model, 'id_estado', array('class' => 'errortext')); ?> + +labelEx($model, 'estado'); ?> +findAll(), 'id', 'descripcion'); + +echo $form->dropDownList( + $model, 'id_estado', $lista, array( + 'class' => 'mf', +)); +?> + +
+ $model->id)), + array( + "data"=>array("id"=>$model->id), + "success"=>"function(data){ + if (data.status == \"failure\") { + alert(\"mal\"); + } else { + alert(\"bien\"); + } + }" + ) +);*/ + +?> +endWidget(); ?> + diff --git a/www/protected/views/candidato/create.php b/www/protected/views/candidato/create.php index 5fb2b44..9a19a9a 100644 --- a/www/protected/views/candidato/create.php +++ b/www/protected/views/candidato/create.php @@ -1,7 +1,7 @@ breadcrumbs=array( Yii::t('intranet', 'Candidatos') => array('candidato/index'), - Yii::t('intranet', 'Nuevo candidato') => array('candidato/index'), + Yii::t('intranet', 'Nuevo candidato'), ); $this->menu=array( array( diff --git a/www/protected/views/candidato/index.php b/www/protected/views/candidato/index.php index 1de1aa6..d6d6ba5 100644 --- a/www/protected/views/candidato/index.php +++ b/www/protected/views/candidato/index.php @@ -33,6 +33,45 @@ $('.search-form form').submit(function(){ }); "); + +$updateJS = CHtml::ajax( array( + 'url' => "js:url", + 'data' => "js:form.serialize()", + 'type' => 'post', + 'dataType' => 'json', + 'success' => "function( data ) + { + if( data.status == 'failure' ) { + jQuery.blur(div.grid-view); + setTimeout( \"jQuery( '#dlg-updateestado' ).dialog( 'close' );\", 1000 ); + } else { + if( data.status == 'success' ) // Update all grid views on success + { + jQuery( 'div.grid-view' ).each( function() { + jQuery.fn.yiiGridView.update( jQuery( this ).attr( 'id' ) ); + }); + } + setTimeout( \"jQuery( '#dlg-updateestado' ).dialog( 'close' );\", 1000 ); + + } + }" +)); + +Yii::app()->clientScript->registerScript( 'updateEstado', " +function updateEstado( url ) +{ + var action = ''; + var form = jQuery( '#dlg-updateestado form' ); + + if(!url) { + //action = '&action=' + act; + url = form.attr( 'action' ); + console.log('url => ' + url); + } + {$updateJS} +}"); + + ?>
+beginWidget('zii.widgets.jui.CJuiDialog', array( + 'id' => 'dlg-updateestado', + 'options' => array( + 'title' => Yii::t('intranet', 'Cambiar de estado'), + 'width' => 400, + 'autoOpen' => false, + 'resizable' => false, + 'modal' => true, + 'closeOnEscape' => true, + 'buttons' => array( + 'Cambiar' => array( + 'text' => Yii::t('intranet', 'Cambiar'), + 'class' => 'ok-button', + 'click' => 'js:function(){updateEstado()}', + ), + 'Cancelar' => array( + 'text' => Yii::t('intranet', 'Cancelar'), + 'class' => 'cancel-button', + 'click' => 'js:function(){$(this).dialog("close");}', + ), + ), + ), +)); +$this->endWidget('zii.widgets.jui.CJuiDialog'); +?> + + +
@@ -58,8 +126,9 @@ $('.search-form form').submit(function(){
-
+
+ '{update}{delete}', 'cssClassExpression' => '"con0"', - ), + ), + array( 'type' => 'html', 'name' => 'nombreCompleto', @@ -81,6 +151,7 @@ $('.search-form form').submit(function(){ ), 'cssClassExpression' => '"con1"', ), + array( 'type' => 'html', 'name' => 'capacidad_tecnica_search', @@ -88,16 +159,35 @@ $('.search-form form').submit(function(){ 'header' => 'Capacidad técnica', // 'filter' => CHtml::listData(PerfilTecnico::model()->findAll(), 'id', 'descripcion'), 'cssClassExpression' => '"con0"', - ), + ), + array( - 'type' => 'html', + 'type'=>'raw', 'name' => 'estado', - 'value' => 'CHtml::link(CHtml::encode($data->estado), "#", array("class" => $data->cssClassEstado));', 'headerHtmlOptions'=>array( 'class' => 'head1 sorting', ), 'cssClassExpression' => '"con0"', + 'value'=> 'CHtml::ajaxLink( + CHtml::encode($data->estado), + array("candidato/updateEstado"), + array( + "data"=>array("id"=>$data->id), + "success"=>"function(data){ + if (data.status == \"failure\") { + } else { + jQuery(\"#dlg-updateestado\").html(data); + jQuery(\"#dlg-updateestado\").dialog(\"open\"); + } + }", + ), + array( + "id"=>"updateestado-$data->id", + "class"=>$data->cssClassEstado, + ) + );', ), + array( 'type' => 'raw', 'name' => 'fecha_modificacion', @@ -130,4 +220,7 @@ $('.search-form form').submit(function(){ )); ?> + + +
diff --git a/www/protected/views/candidato/update_modal.php b/www/protected/views/candidato/update_modal.php new file mode 100644 index 0000000..6813e0e --- /dev/null +++ b/www/protected/views/candidato/update_modal.php @@ -0,0 +1,37 @@ +beginWidget('zii.widgets.jui.CJuiDialog',array( + 'id'=>'update_candidato', + 'options'=>array( +// 'title'=>Yii::t('job','Create Job'), + 'autoOpen'=>true, + 'modal'=>'true', + 'width'=>'auto', + 'height'=>'auto', + ), + )); + + +$this->breadcrumbs=array( + Yii::t('intranet', 'Candidatos') => array('candidato/index'), + $model->nombre . ' ' . $model->apellidos=>array('view','id'=>$model->id), + Yii::t('intranet', 'Modificación'), +); + +$this->pageTitle=Yii::t('intranet', 'Modificar candidato') . ' "' . $model->nombre . ' ' . $model->apellidos . '"'; + + +echo $this->renderPartial('_form', array( + 'model'=>$model, + 'idioma'=>$idioma, + 'titulacion'=>$titulacion, + 'idiomasValidos'=>$idiomasValidos, + 'titulacionesValidas'=>$titulacionesValidas, + )); + ?> +endWidget('zii.widgets.jui.CJuiDialog');?> + + + + + +