Adrian,
Tu me disse que o botão desabilitava os checkbox?
Eu tinha respondido:
Posta ae sua solução!
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.
[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