CCheckBoxColumn na GridView

Adrian,

Tu me disse que o botão desabilitava os checkbox?

Eu tinha respondido:

Posta ae sua solução!

Bem Newerton, foi como disse anteriomente, quando colocava o botão a GridView desabilitava a seleção de todos de uma vez só, tinha que sair selecionando um por um, além do mais desabilitava tb os filtros. Não entendi bem pq, por isso deixei de lado e fiz da seguinte forma, sei que pode ser um pouco arcáido mais serviu.

Basicamente crei um nova Grid com filtros de parâmetros passados por o usuário, logo após esses filtros ele convocava os funcionários.

Criei dentro da view de colab criei um _convoca.php




<div class="form">


	<?php echo CHtml::errorSummary($model); ?>


	<div class="row">

    	<?php echo CHtml::activelabelEx($model, 'setor'); ?>

    	<?php echo CHtml::activeDropDownList($model, 'setor', atualizar::getSetor()); ?>		

	</div>


	<div class="row buttons">

    	<?php echo CHtml::submitButton($model->isNewRecord ? 'Convocar' : 'Convocar'); ?>

	</div>


	<?php echo CHtml::endForm(); ?>


</div><!-- form -->



No convoca.php a gridview ficou assim




<?php

$this->pageTitle = Yii::app()->name . 'CTPS - Colaboradores Cadastrados';

$this->breadcrumbs = array(

	'Colaboradores' => array('admin'),

	'Cadastrados',

);


?>


<div class="example_title">

	<img src="<?php echo Yii::app()->request->baseUrl; ?>/images/arrow-270.png" alt="logo" />

	<?php echo "Convocaçao de Colaboradores"; ?>

</div>


<div class="demo_box">


	<ul class="actions">

    	<li>

        	<?php

        	$loaderShow = '$(".loader").show();';

        	$sucessShow = '$(".success").show();';        	

        	$noticeShow = '$(".notice").show();';        	

        	$errorShow = '$(".error").show();';

        	$loaderHide = '$(".loader").hide();';

        	$sucessHide = '$(".success").hide();';

        	$noticeHide = '$(".notice").hide();';

        	$errorHide = '$(".error").hide();';


        	$ajaxOptions = array(

            	'beforeSend' => "function(){{$loaderShow} {$sucessHide} {$errorHide} {$noticeHide}}",

            	'complete' => 'function(){' . $loaderHide . '}',

            	'success' => "function(value){

											if(value>0){

												$('#successMessage').text(value + ' colaborador(es) convocado(s) com sucesso!');

												{$sucessShow}

											}

											else if(value==0){

												$('#noticeMessage').text('Colaborador(es) convocado(s) com sucesso!');

												{$noticeShow}

											}

											else {

												{$noticeShow}

											}

										}",

            	'error' => 'function(){' . $errorShow . '}',

        	);


        	$this->renderPartial('_filter', array('filter' => $filter));


        	echo CHtml::ajaxLink('Convocar Colaborador(es) Filtrado(s)', $this->createUrl('colab/convocar', $filter), $ajaxOptions, array('confirm' => 'Deseja convocar esta lista de colaboradores?')); ?>

        	<br>

        	<br>

        	<div class="observacao" >

            	<img src="<?php echo Yii::app()->request->baseUrl; ?>/images/exclamation.png" alt="logo" /> IMPORTANTE: Siga a seguinte sequência: Filtrar o(s) colaborador(es), depois copiá-lo(s)

            	para o email e por último convocá-los.

        	</div>

    	</li>

	</ul><!-- actions -->


	<div class="loader" >

    	<span>Convocando Colaboradores</span>

    	<?php echo CHtml::image(Yii::app()->request->baseUrl . '/images/loader.gif', 'Convocando Colaboradores'); ?>

    	</div>


    	<div id="convocacaoResult" class="success" >

        	<span id="successMessage">Colaboradores convocados com sucesso</span>

    	</div>


    	<div id="convocacaoResult" class="notice" >

        	<span id="noticeMessage">Falha ao convocar colaboradores. Se esse erro persistir entre em contato com o suporte.</span>

    	</div>


    	<div id="convocacaoResult" class="error" >

        	<span>Falha ao se conectar com o servidor. Tente novamente. Se esse erro persistir entre em contato com o suporte.</span>

    	</div>


	</div>


<?php

        	$this->widget('zii.widgets.grid.CGridView', array(

            	'dataProvider' => $dataProvider,

            	'pager' => array('cssFile' => Yii::app()->baseUrl . '/css/gridViewStyle/gridView.css'),

            	'cssFile' => Yii::app()->baseUrl . '/css/gridViewStyle/gridView.css',

            	'htmlOptions' => array('class' => 'grid-view rounded'),

            	'rowCssClass' => array('odd', 'even', 'greenodd', 'greeneven'),

            	'rowCssClassExpression' => '$this->dataProvider->data[$row]->statusAtualizacao==colab::ATUALIZADO?$this->rowCssClass[$row%2+2]:$this->rowCssClass[$row%2]',

            	'selectableRows' => 2,

            	'columns' => array(

                	'drt',

                	'nome',

                	'setor',

                	array(

                    	'header' => 'Status',

                    	'name' => 'statusAtividade',

                    	'value' => '$data->getStatusAtividade()',

                	),

                	array(

                    	'header' => 'Situação',

                    	'name' => 'statusAtualizacao',

                    	'value' => '$data->getDescricaoStatus()',

                	),

            	),

        	));

?>



E por ultimo no ColabController ficou assim




	public function actionConvoca() {

    	$criteria = Yii::app()->request->isPostRequest ? $this->getFilterCriteria() : $this->getNavigationCriteria();

    	$filter = Yii::app()->request->isPostRequest ? $this->getFilterParams() : $this->getNavigationParams();


    	$dataProvider = new CActiveDataProvider('colab', array(

                	'pagination' => array(

                    	'pageSize' => 1500,

                    	'params' => $filter,

                	),

                	'criteria' => $criteria,

            	));

    	$this->render('convoca', array(

        	'dataProvider' => $dataProvider,

        	'filter' => $filter,

    	));

	}


	private function getFilterCriteria() {

    	$criteria = new CDbCriteria();

    	$criteria->alias = 'col';

    	$criteria->join = 'JOIN ccusto cc ON cc.idccusto = col.ccustos';

    	$criteria->condition = 'col.statusAtividade = 1 AND col.statusAtualizacao = 0';


    	if (isset($_POST['drt'])) {

        	$criteria->condition .= ' AND col.drt = :drt AND col.statusAtividade = 1 AND col.statusAtualizacao = 0';

        	$criteria->params [':drt'] = $_POST['drt'];

    	}

    	if (isset($_POST['ccustos'])) {

        	$criteria->condition .= ' OR col.ccustos = :ccustos AND col.statusAtividade = 1 AND col.statusAtualizacao = 0';

        	$criteria->params [':ccustos'] = $_POST['ccustos'];

    	}

    	if (isset($_POST['setor'])) {

        	$criteria->condition .= ' OR cc.setor = :setor AND col.statusAtividade = 1 AND col.statusAtualizacao = 0';

        	$criteria->params [':setor'] = $_POST['setor'];

    	}

    	return $criteria;

	}


	private function getNavigationCriteria() {

    	$criteria = new CDbCriteria();

    	$criteria->alias = 'col';

    	$criteria->join = 'JOIN ccusto cc ON cc.idccusto = col.ccustos';

    	$criteria->condition = 'col.statusAtividade = 1 AND col.statusAtualizacao = 0';


    	if (isset($_GET['drt'])) {

        	$criteria->condition .= ' AND col.drt = :drt AND col.statusAtividade = 1 AND col.statusAtualizacao = 0';

        	$criteria->params [':drt'] = $_GET['drt'];

    	}

    	if (isset($_GET['ccustos'])) {

        	$criteria->condition .= ' OR col.ccustos = :ccustos AND col.statusAtividade = 1 AND col.statusAtualizacao = 0';

        	$criteria->params [':ccustos'] = $_GET['ccustos'];

    	}

    	if (isset($_GET['setor'])) {

        	$criteria->condition .= ' OR cc.setor = :setor AND col.statusAtividade = 1 AND col.statusAtualizacao = 0';

        	$criteria->params [':setor'] = $_GET['setor'];

    	}


    	return $criteria;

	}


	private function getFilterParams() {

    	return array(

        	'drt' => isset($_POST['drt']) ? $_POST['drt'] : "",

        	'ccustos' => isset($_POST['ccustos']) ? $_POST['ccustos'] : "",

        	'setor' => isset($_POST['setor']) ? $_POST['setor'] : "",

    	);

	}


	private function getNavigationParams() {

    	return array(

        	'drt' => isset($_GET['drt']) ? $_POST['drt'] : "",

        	'ccustos' => isset($_GET['ccustos']) ? $_POST['ccustos'] : "",

        	'setor' => isset($_GET['setor']) ? $_POST['setor'] : "",

    	);

	}



Bom sei que pode ter ficado meio cambiarra, mais serviu bem. Da forma com CCheckBoxColumn ficaria muito mais fácil, porém infelismente não consegui. De qualquer forma tá rodando perfeito.

;D

[b]

[/b]

A aplicação ficou assim

Adrian,

Ficou bom o filtro.

Sobre o botão, será que não tinha dado algum erro em javascript? Estranho um botão para a interação da grid :(