Actualización del estado de un candidato a través de una ventana modal.

git-svn-id: https://192.168.0.254/svn/Proyectos.Incam_IntranetNueva/trunk@71 77cfc57b-8ef4-1849-9df6-4a38aa5da120
This commit is contained in:
David Arranz 2012-07-30 08:14:50 +00:00
parent 6a9b925abb
commit 23e0eb0681
8 changed files with 271 additions and 19 deletions

View File

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

View File

@ -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%; }

View File

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

View File

@ -121,7 +121,7 @@ Yii::app()->clientScript->registerScript('wysiwyg', $script, CClientScript::POS_
)
));
?>
<?php echo $form->error($model,'fecha_nacimiento', array('class'=>'errortext')); ?>
<?php echo $form->error($model,'fecha_nacimiento', array('class'=>'errortext')); ?>
</div>
</div>
@ -259,7 +259,7 @@ Yii::app()->clientScript->registerScript('wysiwyg', $script, CClientScript::POS_
<?php echo $form->labelEx($model,'estado'); ?>
<div class="marginleft150">
<?php
$lista = CHtml::listData(CandidatoEstado::model()->findAll(),'id', 'descripcion');
$lista = CHtml::listData(EstadoCandidato::model()->findAll(),'id', 'descripcion');
echo $form->dropDownList(
$model,

View File

@ -0,0 +1,44 @@
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'updateestado-form',
'enableAjaxValidation' => true,
'action' => CHtml::normalizeUrl(array('candidato/update', 'id' => $model->id)),
'htmlOptions' => array(
'class' => 'form_default',
),
));
?>
<?php echo $form->error($model, 'id_estado', array('class' => 'errortext')); ?>
<?php echo $form->labelEx($model, 'estado'); ?>
<?php
$lista = CHtml::listData(EstadoCandidato::model()->findAll(), 'id', 'descripcion');
echo $form->dropDownList(
$model, 'id_estado', $lista, array(
'class' => 'mf',
));
?>
<br clear="all" />
<?php
//echo CHtml::ajaxSubmitButton(Yii::t('intranet', 'Choose'), "");
/*,
CHtml::normalizeUrl(array('candidato/update', 'id' => $model->id)),
array(
"data"=>array("id"=>$model->id),
"success"=>"function(data){
if (data.status == \"failure\") {
alert(\"mal\");
} else {
alert(\"bien\");
}
}"
)
);*/
?>
<?php $this->endWidget(); ?>

View File

@ -1,7 +1,7 @@
<?php
$this->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(

View File

@ -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}
}");
?>
<div class="search-form" style="display:none">
@ -42,6 +81,35 @@ $('.search-form form').submit(function(){
</div>
<div class="clear"></div>
<?php
$this->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');
?>
<div class="clear"></div>
<div class="dataTables_wrapper">
<div class="top">
@ -58,8 +126,9 @@ $('.search-form form').submit(function(){
<div class="dataTables_filter">
<label class="disabled">Buscar: <input type="text" disabled /></label>
</div>
</div>
</div>
<?php
$columns = array(
array(
@ -71,7 +140,8 @@ $('.search-form form').submit(function(){
),
'template'=>'{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(){
));
?>
</div>

View File

@ -0,0 +1,37 @@
<?php
$this->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,
));
?>
<?php $this->endWidget('zii.widgets.jui.CJuiDialog');?>