AW
Carregar datagrid ao clicar em botão de uma TFieldList
Bom dia pessoal
Eu estou tentando carregar um datagrid quando clico no addButtonAction porém
quando carrega a grid carrega fora da TWindow
O metodo que faz essa chamada é o onCarregaGrid
Obs: essa Twindow cria abas em tempo de execução (implementação com THtmlRenderer) e nessas abas eu carrego uma TPage, pois eu queria que cada aba tivesse uma ação separada (save, edit, ect).
vou mandar em anexo as imgs
Obrigado
Eu estou tentando carregar um datagrid quando clico no addButtonAction porém
quando carrega a grid carrega fora da TWindow
O metodo que faz essa chamada é o onCarregaGrid
Obs: essa Twindow cria abas em tempo de execução (implementação com THtmlRenderer) e nessas abas eu carrego uma TPage, pois eu queria que cada aba tivesse uma ação separada (save, edit, ect).
vou mandar em anexo as imgs
Obrigado
- <?php
- class AbaFormContratadas extends TPage{
- protected $form;
- private $list_contratadas;
- private $criteria_contratada;
- private $empresa_id;
- private $obra_id;
- protected $datagrid;
- protected $pageNavigation;
- use Adianti\Base\AdiantiStandardFormTrait;
- use Adianti\Base\AdiantiStandardListTrait;
- public function __construct(){
- parent::__construct();
- //creates the form
- $this->form = new BootstrapFormBuilder('form_contratadas');
- $this->form->setProperty('style', 'margin:0;border:0;padding:0;');
- $this->form->setClientValidation(true);
- //fields do form
- $id = new THidden('id[]');
- //declarado no ObraForm2
- $this->empresa_id = TSession::getValue('empresa_id');
- $this->obra_id = TSession::getValue('obra_id');
- TTransaction::open('sgdt');
- $empresa_obra_dados = EmpresaObra::where('empresa_id', '=', $this->empresa_id)
- ->where('obra_id', '=', $this->obra_id)
- ->load();
- $dados_contratada_id = array();
- if ($empresa_obra_dados){
- foreach ($empresa_obra_dados as $empresa_obra){
- $dados_contratada_id[] = $empresa_obra->contratada_id;
- }
- }
- TTransaction::close();
- //filtro para não trazer a mesma empresa no TDBUniqueSearch
- $this->criteria_contratada = new TCriteria();
- $this->criteria_contratada->add(new TFilter('id', '<>', $this->empresa_id));
- $this->criteria_contratada->add(//trazer todas a empresas vinculadas a contratante
- new TFilter('id', 'IN', '(SELECT contratada_id FROM empresa_contratante_contratada WHERE contratante_id = '.$this->empresa_id.')')
- );
- //echo $this->criteria_contratada->dump();
- $contratada_id = new TDBCombo('contratada_id[]', 'sgdt', 'Empresa', 'id', '{nome_fantasia} - {cnpj}', null, $this->criteria_contratada);
- $contratada_id->addValidation('Selecione a Contratada', new TRequiredValidator);
- $contratada_id->setSize('100%');
- $contratada_id->placeholder = 'Entre com a Emmpresa Contratada';
- $this->list_contratadas = new TFieldList;
- //$this->list_contratadas->name = 'list_field_contratadas';
- $this->list_contratadas->width = '100%';
- //add fiels ao form
- $this->list_contratadas->addField('Contratada (*)', $contratada_id, ['width' => '80%']);
- $this->list_contratadas->addButtonAction(new TAction([$this,'onCarregaGrid']), 'fa:cog', 'Gerenciar Funcionários');
- $this->form->addContent([$this->list_contratadas]);
- $btn_salvar = $this->form->addAction('Salvar', new TAction([$this, 'onSave'], ['static'=> 1]), 'fa:save');
- $btn_salvar->class = 'btn btn-sm btn-primary';
- //$this->form->addActionLink('Novo', new TAction([$this, 'onEdit'],['titulo_botao' => 'Cadastrar ', 'empresa_id' => $param['empresa_id']]), 'fa:plus blue');
- $btn_novo = $this->form->addAction('Novo', new TAction([$this, 'onEdit'],['titulo_botao' => 'Cadastrar ']), 'fa:plus blue');
- TScript::create(
- '$("[name=tab_form_contratadas]").focusout(function(){'
- .AdiantiCoreApplication::loadPage('DocumentoFormView', null, array('register_state' => 'false', 'target_container' => 'left-panel')). // load page
- '});'
- );
- /*Grid de Funcionarios Obra*/
- //$this->form->addContent([ TElement::tag('h6', 'Funcionarios da Obra', [ 'style'=>'background: whitesmoke; padding: 5px; border-radius: 5px; margin-top: 5px'])]);
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->style = 'width:100%;font-size:13px';
- //ativar scrollable and define height
- $this->datagrid->setHeight(230);
- $this->datagrid->makeScrollable();
- $col_id = new TDataGridColumn('id', 'Cód', 'center', '10%');
- $col_nome = new TDataGridColumn('nome', 'Funcionário', 'left', '30%');
- $col_cpf_cnpj = new TDataGridColumn('cpf_cnpj', 'CPF/CNPJ', 'left', '20%');
- $col_fone = new TDataGridColumn('fone', 'Fone', 'left', '20%');
- $col_celular = new TDataGridColumn('celular', 'Celular', 'left', '20%');
- $col_fone->setTransformer( function($value, $object, $row) {
- $util = new Util();
- return $util->formatPhone($value);
- });
- $this->datagrid->addColumn($col_id)->setVisibility(false);
- $this->datagrid->addColumn($col_nome);
- $this->datagrid->addColumn($col_cpf_cnpj);
- $this->datagrid->addColumn($col_fone);
- $this->datagrid->addColumn($col_celular);
- $this->datagrid->createModel();
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction( new TAction([$this, 'onReload']));
- $this->pageNavigation->enableCounters();
- //vertical box container
- $vbox = new TVBox;
- $vbox->style = 'width: 100%;padding:0';
- $vbox->add($this->form);
- $vbox->add($panel = TPanelGroup::pack('Funcionários da Obra', $this->datagrid, $this->pageNavigation));
- parent::add($vbox);
- }
- public function onClear($param){
- //$this->form->clear();
- $this->list_contratadas->addHeader();
- $this->list_contratadas->addDetail( new stdClass );
- $this->list_contratadas->addCloneAction();
- }
- public function onSave($param){
- try{
- TTransaction::open('sgdt');
- // TTransaction::dump();
- $this->form->validate(); // validate form data
- EmpresaObra::where('empresa_id', '=', $this->empresa_id)
- ->where('obra_id', '=', $this->obra_id)->delete();
- if (!empty($param['contratada_id'])){
- foreach ($param['contratada_id'] as $row => $contratada){
- if ($contratada){
- $empresa_contratante_contratada = ContratanteContratada::where('contratante_id', '=', $this->empresa_id)
- ->where('contratada_id', '=', $contratada)->load();
- $empresa_obra = new EmpresaObra;
- $empresa_obra->contratada_id = $contratada;
- $empresa_obra->empresa_id = $this->empresa_id;
- $empresa_obra->obra_id = $this->obra_id;
- $empresa_obra->contratante_contratada_id = $empresa_contratante_contratada['0']->id;
- $empresa_obra->store();
- }
- }
- }
- TTransaction::close();
- new TMessage('info', 'Registro salvo com sucesso');
- } 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($param){
- try {
- //se tem obra pode editar gerenciar contratadas
- if (isset($param['key'])){ //key = obra_id
- $obra_id = $param['key'];
- TTransaction::open('sgdt');
- //TTransaction::dump();
- $empresa_obra_dados = EmpresaObra::where('empresa_id', '=', $param['empresa_id'])
- ->where('obra_id', '=', $obra_id)->load();
- if ($empresa_obra_dados){
- $this->list_contratadas->addHeader();
- foreach ($empresa_obra_dados as $empresa_obra){
- $objeto_empresa_obra = new stdClass;
- $objeto_empresa_obra->empresa_id = $empresa_obra->empresa_id;
- $objeto_empresa_obra->obra_id = $empresa_obra->obra_id; //key = obra_id
- $objeto_empresa_obra->contratada_id = $empresa_obra->contratada_id;
- $this->list_contratadas->addDetail($objeto_empresa_obra);
- }
- $this->list_contratadas->addCloneAction();
- }
- else{
- $empresaobra = new EmpresaObra();
- $empresaobra->empresa_id = $param['empresa_id'];
- $empresaobra->obra_id = $obra_id;
- $this->list_contratadas->addHeader();
- $this->list_contratadas->addDetail(new stdClass);
- $this->list_contratadas->addCloneAction();
- }
- TTransaction::close();
- }else{
- $this->onClear($param);
- // TTransaction::open('sgdt');
- // //TTransaction::dump();
- // $empresaobra = new EmpresaObra((int) $key);
- // $empresaobra->empresa_id = $param['empresa_id'];
- // $this->form->setData($empresaobra);
- // TForm::sendData('form_contratadas', $obra);
- // TTransaction::close();
- }
- } catch (Exception $e){
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- public function onCarregaGrid($param){
- try {
- // print '<pre>';
- // var_dump($param);
- // print '</pre>';
- TTransaction::open('sgdt');
- $funcionarios = Funcionario::where('empresa_id', '=', $param['contratada_id'])->load();
- //$funcionarios = array();
- if ($funcionarios){
- $this->datagrid->clear();
- foreach ($funcionarios as $funcionario){
- $items = new stdClass;
- $items->id = $funcionario->id;
- $items->nome = $funcionario->nome;
- $this->datagrid->addItem($items);
- }
- }
- TTransaction::close();
- } catch (Exception $e){
- $msg = 'Erro : ' . $e->getCode() . ' - Mensagem : ' . $e->getMessage();
- new TMessage('error',$msg);
- }
- }
- }
- ?>
Para carregar páginas em elementos específicos, veja o exemplo abaixo:
https://adianti.com.br/framework_files/tutor/index.php?class=InboxView
A renderização da classe MessageView(chamada ao clicar em Inbox ou Sent) é feita dentro da div "message_area".
Dentro da classe MessageView você vai encontrar o seguite trecho:
O atributo passado para essa função deve corresponder ao id de um elemento html, onde a página será renderizada.