Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Agrupamento do datagrid fecha quando clica no ckeckbox Bom dia Pessoal Eu tenho um datagrid onde agrupo (com setGroupColumn) as informações por empresa. Para cada linha adicionei checkbox para seleção, porém quando clico em qualquer um ele fecha o agrupamento. Tem como não fechar quando clico no checkbox? Obrigado....
AW
Agrupamento do datagrid fecha quando clica no ckeckbox  
Bom dia Pessoal

Eu tenho um datagrid onde agrupo (com setGroupColumn) as informações por empresa. Para cada linha adicionei checkbox para seleção, porém quando clico em qualquer um ele fecha o agrupamento.

Tem como não fechar quando clico no checkbox?

Obrigado.

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (5)


NR

Tem alguma ação no click dessa linha/coluna? No print dá pra ver uma url na parte inferior esquerda da tela, que dá a entender que tem um link sendo chamado. Se for isso, o check não tá fechando o agrupamento, tá atualizando a página.
AW

então Nataniel essa url corresponde ao checkbox que é uma lista para selecionar todos os funcionarios que vão trabalhar na obra.
Acontece que toda vez que clico em qualquer checkbox o agrupamento fecha. estou agrupando por empresa.
AW

Consegui ser claro?
NR

Poste o código da classe, acho que fica mais fácil
AW

Segue o codigo Nataniel, E o link do video mostrando esse problema.

https://drive.google.com/file/d/1EvgxVw-MrxDFU7V6Apb7i3Ym-aiGYhGN/view?usp=sharing
Obg.

<? php
class AbaFuncionarioView extends TPage{
protected $form;

private $datagrid;
private $pageNavigation;
private $datagrid2;
private $pageNavigation2;
private $obra_id;
private $empresa_id;
private $postAction;
private $postAction2;

private $loaded2;

use AdiantiBaseAdiantiStandardListTrait;

public function __construct(){
parent::__construct();

$this->form = new BootstrapFormBuilder('form_funcionarios_obra');
$this->form->setProperty('style', 'margin:0;border:0;padding:0');
$this->form->setFormTitle('Entre com as informações abaixo');

$this->form->appendPage("Funcionários da Obra");

//declarado no ObraForm2
$this->empresa_id = TSession::getValue('empresa_id');
$this->obra_id = TSession::getValue('obra_id');

$hora_entrada = new TTime('hora_entrada');
$hora_saida = new TTime('hora_saida');
$dt_inicio = new TDate('dt_inicio');
$dt_fim = new TDate('dt_fim');
$situacao = new TRadioGroup('situacao');

$hora_entrada->setSize('100%');
$hora_saida->setSize('100%');
$dt_inicio->setSize('100%');
$dt_fim->setSize('100%');

$hora_entrada->setExitAction(new TAction([$this, 'onExitValidaHora'], ['static' => '1']));
$hora_saida->setExitAction(new TAction([$this, 'onExitValidaHora'], ['static' => '1']));

$dt_inicio->setMask('dd/mm/yyyy');
$dt_inicio->setExitAction(new TAction([$this, 'onExitValidaDatas'], ['static' => '1']));

$dt_fim->setMask('dd/mm/yyyy');
$dt_fim->setExitAction(new TAction([$this, 'onExitValidaDatas'], ['static' => '1']));

$situacao->addItems(['A' => 'Ativo', 'I' => 'Inativo']);
$situacao->setLayout('horizontal');
$situacao->setSize('100%');
$situacao->setUseButton();

// add validators
$hora_entrada->addValidation('Hora Entrada', new TRequiredValidator);
$hora_saida->addValidation('Hora Saída', new TRequiredValidator);
$dt_inicio->addValidation('Data Início', new TRequiredValidator);
$dt_fim->addValidation('Data Fim', new TRequiredValidator);
$situacao->addValidation('Situação', new TRequiredValidator);

$this->form->addFields(
[new TLabel('Entrada (*)')], [$hora_entrada],
[new TLabel('Saída (*)')], [$hora_saida]
);

$this->form->addFields(
[new TLabel('Dt Início (*)')], [$dt_inicio],
[new TLabel('Dt Fim (*)')], [$dt_fim]
);

$this->form->addFields(
[new TLabel('Situação (*)')], [$situacao]
);

$this->setDatabase('banco');
$this->setActiveRecord('Funcionario');
$this->setDefaultOrder('nome', 'desc');
$this->setLimit(25);

$criteria = new TCriteria;
$criteria->add(new TFilter('empresa_id', 'IN',"(SELECT contratada_id FROM empresas_obras WHERE obra_id = '$this->obra_id')"));
$criteria->add(new TFilter('status', '=',"A"));
//echo $criteria->dump();

$this->setCriteria($criteria);

$this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
$this->datagrid->width = 'width:100%';
$this->datagrid->style = 'font-size:13px;';
$this->datagrid->disableDefaultClick();

// ativar scrollable and define height
$this->datagrid->setHeight(280);
$this->datagrid->makeScrollable();

$this->datagrid->setGroupColumn('empresa->nome_fantasia', 'Contratada: {empresa->nome_fantasia}');

$col_id = new TDataGridColumn('id', 'ID', 'left','0%');
$col_nome = new TDataGridColumn('nome', 'Nome', 'left', '40%');
$col_funcionario = new TDataGridColumn('empresa->nome_fantasia', 'Empresa', 'left', '40%');
$col_cpf_cnpj = new TDataGridColumn('cpf_cnpj','CPF/CNPJ','right', '20%');

// add the columns
$this->datagrid->addColumn($col_id)->setVisibility(false);
$this->datagrid->addColumn($col_nome);
$this->datagrid->addColumn($col_funcionario);
$this->datagrid->addColumn($col_cpf_cnpj);

$col_id->setTransformer([$this, 'formatRow']);

$action = new TDataGridAction([$this, 'onSelect'], ['id' => '{id}', 'register_state' => 'false']);
$this->datagrid->addAction($action, 'Selecione um funcionário', 'far:square fa-fw black');

// creates the formDatagrid model
$this->datagrid->createModel();

// create the page navigation
$this->pageNavigation = new TPageNavigation;
$this->pageNavigation->setAction(new TAction(array($this, 'onReload')));

$panel = new TPanelGroup;
$panel->add($this->datagrid);
$panel->addFooter($this->pageNavigation);

$this->postAction = new TAction(array($this, 'onSave'));
$post = new TButton('post');
$post->class = 'btn btn-sm btn-primary';
$post->setAction($this->postAction);
$post->setImage('far:save');
$post->setLabel('Salvar');
$this->form->addField($post);
// $btn = $this->form->addAction( 'Salvar', new TAction(array($this, 'onSave')), 'far:save');
// $btn->class = 'btn btn-sm btn-primary';

$this->form->addContent([$panel]);
$this->form->addContent([$post]);

$this->form->appendPage("Lista Funcionários Obra");

$this->datagrid2 = new BootstrapDatagridWrapper(new TDataGrid);
$this->datagrid2->width = 'width:100%';
$this->datagrid2->style = 'font-size:13px;';
$this->datagrid2->id = 'grid_funcionarios_obra';
$this->datagrid2->disableDefaultClick();

$col_id = new TDataGridColumn('id', 'ID', 'center', '0%');
$col_dt_cadastro = new TDataGridColumn('col_dt_cadastro', 'Dt Cadastro', 'center', '0%');
$col_dt_atualizacao = new TDataGridColumn('dt_atualizacao', 'Dt Atualização', 'center', '0%');
$col_funcionario = new TDataGridColumn('funcionario->nome', 'Funcionario', 'left', '20%');
$col_hora_entrada = new TDataGridColumn('hora_entrada', 'Entrada <span style="font-size:10px">(00:00)</span>', 'left', '20%');
$col_hora_saida = new TDataGridColumn('hora_saida', 'Saída <span style="font-size:10px">(00:00)</span>', 'left', '20%');
$col_dt_inicio = new TDataGridColumn('dt_inicio', 'Inicio <span style="font-size:10px">(DD/MM/AAAA)</span>', 'left', '20%');
$col_dt_fim = new TDataGridColumn('dt_fim', 'Fim <span style="font-size:10px">(DD/MM/AAAA)</span>', 'left', '20%');

$this->datagrid2->addColumn($col_id)->setVisibility(false);
$this->datagrid2->addColumn($col_dt_cadastro)->setVisibility(false);
$this->datagrid2->addColumn($col_dt_atualizacao)->setVisibility(false);
$this->datagrid2->addColumn($col_funcionario);
$this->datagrid2->addColumn($col_hora_entrada);
$this->datagrid2->addColumn($col_hora_saida);
$this->datagrid2->addColumn($col_dt_inicio);
$this->datagrid2->addColumn($col_dt_fim);

$col_hora_entrada->setTransformer( function($hora_entrada, $object, $row) {
$widget = new TEntry('hora_entrada_' . $object->id);

$widget->setValue($hora_entrada);
$widget->setMask('99:99');
$widget->setSize(80);
$widget->style = 'background-color:#fdff82';
$widget->setFormName('form_funcionarios_obra');

$widget->setExitAction(new TAction( [$this, 'onSaveInline'], ['column' => 'hora_entrada']));

return $widget;
});

$col_hora_saida->setTransformer(function($hora_saida, $object, $row) {
$widget = new TEntry('hora_saida_' . $object->id);

$widget->setValue($hora_saida);
$widget->setMask('99:99');
$widget->setSize(80);
$widget->style = 'background-color:#fdff82';
$widget->setFormName('form_funcionarios_obra');

$widget->setExitAction(new TAction([$this, 'onSaveInline'], ['column' => 'hora_saida']));

return $widget;
});

$col_dt_inicio->setTransformer(function($dt_inicio, $object, $row) {
$widget = new TEntry('dt_inicio_' . $object->id);

$widget->setValue($dt_inicio);
$widget->setMask('99/99/9999');
$widget->setSize(80);
$widget->style = 'background-color:#fdff82';
$widget->setFormName('form_funcionarios_obra');

$widget->setExitAction(new TAction([$this, 'onSaveInline'], ['column' => 'dt_inicio']));

return $widget;
});

$col_dt_fim->setTransformer(function($dt_fim, $object, $row) {
$widget = new TEntry('dt_fim_' . $object->id);

$widget->setValue($dt_fim);
$widget->setMask('99/99/9999');
$widget->setSize(80);
$widget->style = 'background-color:#fdff82';
$widget->setFormName('form_funcionarios_obra');

$widget->setExitAction(new TAction([$this, 'onSaveInline'], ['column' => 'dt_fim']));

return $widget;
});

//dados estaticos primeiro
$this->datagrid2->createModel();

// create the page navigation
$this->pageNavigation2 = new TPageNavigation;
$this->pageNavigation2->setAction(new TAction(array($this, 'onReload2')));

$panel2 = new TPanelGroup;
$panel2->add($this->datagrid2);
$panel2->addFooter($this->pageNavigation2);

$this->form->addContent([$this->datagrid2]);

TScript::create(
// activated tab
'$("[name=tab_form_funcionarios_obra]").click(function () {
__adianti_load_page("engine.php?class=AbaFuncionarioView&method=onReload&target_container=tab_form_funcionarios_obra&register_state=false&show_loading=false&key='.$this->empresa_id.'&empresa_id='.$this->empresa_id.'");
});'
);

// vertical box container
$vbox = new TVBox;
$vbox->style = 'width: 100%;';
$vbox->add(TPanelGroup::pack('', $this->form));

parent::add($vbox);
}

public function onReload2(){
try {
TTransaction::open('banco');

$repository = new TRepository('ObraFuncionario');

if(empty($param['order'])){
$param['order'] = 'dt_cadastro';
$param['direction'] = 'desc';
}

$limit = 25;

$criteria = new TCriteria;
$criteria->setProperty('limit', $limit);
$criteria->add(new TFilter('obra_id', '=', $this->obra_id));
$criteria->setProperties($param);

$obra_funcionarios = $repository->load($criteria);

$this->datagrid2->clear();

if($obra_funcionarios){
foreach($obra_funcionarios as $obra_funcionario){
$obra_funcionario->dt_inicio = implode('/', array_reverse(explode('-', $obra_funcionario->dt_inicio)));
$obra_funcionario->dt_fim = implode('/', array_reverse(explode('-', $obra_funcionario->dt_fim)));

$this->datagrid2->addItem($obra_funcionario);
}
}

$criteria->resetProperties();
$count = $repository->count($criteria); //conta o total de registros
$this->pageNavigation2->setCount($count);
$this->pageNavigation2->setProperties($param);
$this->pageNavigation2->setLimit($limit);

$this->loaded2 = true;
TTransaction::close();
}catch (Exception $e){
new TMessage('error', $e->getMessage());
}
}

public function show(){
if(!$this->loaded2){
$this->onReload2(func_get_arg(0));
}

$this->onReload();
parent::show();
}

public static function onSaveInline($param){
try{
TTransaction::open('banco');
//TTransaction::dump();

$coluna = $param['column'];
$nome = $param['_field_name'];
$valor = $param['_field_value'];

$partes = explode( '_', $nome);
$campo = next($partes);
$id = end($partes);

$obra_funcionario = ObraFuncionario::find($id);
if ($obra_funcionario){

$obra_funcionario->dt_atualizacao = date('Y-m-d H:i:s', time());

if($coluna == 'dt_inicio'){
$obra_funcionario->$coluna = implode('-', array_reverse(explode('/', $valor)));
}else if($coluna == 'dt_fim'){
$obra_funcionario->$coluna = implode('-', array_reverse(explode('/', $valor)));
}else{
$obra_funcionario->$coluna = $valor;
}

$obra_funcionario->store();
}

TTransaction::close();

TToast::show('success', ucfirst($campo).' atualizado', 'top right', 'far:check-circle');
}
catch (Exception $e){
new TMessage('error', $e->getMessage());
}
}

public function onSelect($param){
$selecao = TSession::getValue(__CLASS__.'_selecao');

try{
TTransaction::open('banco');

$funcionario = new Funcionario($param['id']);

if (isset($selecao[$funcionario->id])){
unset($selecao[$funcionario->id]);
}
else{
$selecao[$funcionario->id] = $funcionario->toArray();
}

TSession::setValue(__CLASS__.'_selecao', $selecao);

TTransaction::close();

$this->onReload($param);
}
catch (Exception $e){
new TMessage('error', $e->getMessage());
}
}

public function formatRow($id, $object, $row){
$selecao = TSession::getValue(__CLASS__.'_selecao');

if ($selecao){
if (in_array( (int) $id, array_keys($selecao))){
$row->style = 'background: #abdef9';

$button = $row->find('i', ['class'=>'far fa-square fa-fw black'])[0];

if ($button){
$button->class = 'far fa-check-square fa-fw black';
}
}
}

return $id;
}

public function onSave($param){
try {
TTransaction::open('banco');

$this->form->validate();

$selecao = TSession::getValue(__CLASS__.'_selecao');

$data = $this->form->getData();
$this->form->setData($data);

if(!empty($selecao)){
foreach($selecao as $key => $funcionario){
$dados_func = ObraFuncionario::where('funcionario_id', '=', $funcionario['id'])
->where('obra_id', '=', $this->obra_id)->load();

if(count($dados_func) == 0){
$obra_funcionario = new ObraFuncionario;

$obra_funcionario->fromArray((array) $data);

// AQUI CONVERSÃO PARA SALVAR OS DADOS DE DATAS
$obra_funcionario->dt_inicio = DateTime::createFromFormat('d/m/Y', $obra_funcionario->dt_inicio)->format('Y-m-d');
$obra_funcionario->dt_fim = DateTime::createFromFormat('d/m/Y', $obra_funcionario->dt_fim)->format('Y-m-d');

$obra_funcionario->funcionario_id = $funcionario['id'];
$obra_funcionario->obra_id = $this->obra_id;

$obra_funcionario->store();
}
}
}

$selecao = TSession::setValue(__CLASS__.'_selecao', '');

TTransaction::close();

new TMessage('info', 'Registro salvo com sucesso', $this->onReload2());
} catch (Exception $e){
$this->form->setData($this->form->getData()); // keep form data
TTransaction::rollback(); // undo all pending operations
new TMessage('error', $e->getMessage());
}
}

public function onEdit(){

}

public static function onExitValidaDatas($param){
$dt_inicio = !empty($param['dt_inicio']) ? DateTime::createFromFormat('d/m/Y', $param['dt_inicio'])->format('Y-m-d') : '';
$dt_fim = !empty($param['dt_fim']) ? DateTime::createFromFormat('d/m/Y', $param['dt_fim'])->format('Y-m-d') : '';
if(!empty($dt_fim) && !empty($dt_inicio)){
if (strtotime($dt_fim) <= strtotime($dt_inicio)){
TToast::show('error', 'Data Inicio deve ser menor', 'top right', 'fa:check-circle-o');
}
}
}

public static function onExitValidaHora($param){
if(!empty($param['hora_entrada']) && !empty($param['hora_saida'])){
$hora_entrada = new DateTime($param['hora_entrada']);
$hora_saida = new DateTime($param['hora_saida']);
$diff = $hora_saida->diff($hora_entrada);

$intervalo = $diff->h;
$intervalo = $intervalo + ($diff->days*24);

if (strtotime($param['hora_entrada']) >= strtotime($param['hora_saida']) || $intervalo < 1){
TToast::show('error', 'Horário está errado. É obrigatório intervalo de 1 hora no minímo.', 'top right', 'fa:check-circle-o');
}
}
}
}
?>