ET
onDelete não funciona
Olá pessoal, boa tarde.
Tenho um ClienteFormView com as informações exibidas em abas. Neste ClienteFormView trago informações de três tabelas diferentes, (Tabela Cliente, Tabela Histórico CLiente, Tabela Dependentes). Consegui exibir neste ClienteFormView os dados da tabela Histórico Ciente e Dependentes a través de uma data grid, e neste data grid consegui implementar a função de editar os dados de do histórico e dos dependentes. O problema está sendo para executar a função de delete para os data grids.
Segue código:
Quando executo a app, ele me retorna o seguinte erro na tela de ClienteFormView: Database não definido. Você deve executar setDatabase() no Construtor. Estou usando um TTransaction::open('microerp');
Mesmo assim os dados são carregados normalmente.
Na aba "Histórico" onde é exibida a grid com os dados do histórico do cliente, os dados são carregados normalmente, mas ao clicar no ícone de delete para excluir o registro ele me retorna o seguinte erro:
Objeto 1 não encontrado em cliente
File: appmodelCliente.class.php : 14
AdiantiDatabaseTRecord->__construct(1,1)
File: appcontrolcadastros_basicosclientesClienteFormView.php : 56
Cliente->__construct(1)
File: libadianticoreAdiantiCoreApplication.php : 60
ClienteFormView->__construct(ClienteFormView,onDelete,1,1)
File: engine.php : 36
AdiantiCoreAdiantiCoreApplication::run(1)
File: engine.php : 55
TApplication::run(1)
Está tentando fazer o delete na tabela cliente e não na de Histórico correto?
A minha duvida é: Como posso fazer para deletar somente os dados da grid da tabela Histórico do cliente neste contexto?
Tenho um ClienteFormView com as informações exibidas em abas. Neste ClienteFormView trago informações de três tabelas diferentes, (Tabela Cliente, Tabela Histórico CLiente, Tabela Dependentes). Consegui exibir neste ClienteFormView os dados da tabela Histórico Ciente e Dependentes a través de uma data grid, e neste data grid consegui implementar a função de editar os dados de do histórico e dos dependentes. O problema está sendo para executar a função de delete para os data grids.
Segue código:
- <?php
- <?php
- /**
- * ClienteFormView Form
- * @author <Marconi Torquato>
- */
- class ClienteFormView extends TPage
- {
- protected $form; // form
- protected $datagrid; // listing
- protected $pageNavigation;
- use Adianti\Base\AdiantiStandardListTrait;
- /**
- * Form constructor
- * @param $param Request
- */
- public function __construct( $param )
- {
- parent::__construct();
- TTransaction::open('microerp');
- $this->form = new BootstrapFormBuilder('form_Cliente');
- $this->form->setFormTitle('Cliente');
- $this->form->appendPage('Beneficiário');
- $label1 = new TLabel('Id:', '#333333', '12px', '');
- $label2 = new TLabel('Código Cliente:', '#333333', '12px', '');
- $label3 = new TLabel('Data Cadastro:', '#333333', '12px', '');
- $label4 = new TLabel('Nome:', '#333333', '12px', '');
- $label5 = new TLabel('Sexo:', '#333333', '12px', '');
- $label6 = new TLabel('RG:', '#333333', '12px', '');
- $label7 = new TLabel('Orgão Expeditor:', '#333333', '12px', '');
- $label8 = new TLabel('CPF:', '#333333', '12px', '');
- $label9 = new TLabel('Profissão:', '#333333', '12px', '');
- $label10 = new TLabel('Religião:', '#333333', '12px', '');
- $label11 = new TLabel('Estado Civil:', '#333333', '12px', '');
- $label12 = new TLabel('Data Nascimento:', '#333333', '12px', '');
- $label13 = new TLabel('Idade:', '#333333', '12px', '');
- $label14 = new TLabel('Data Falecimento:', '#333333', '12px', '');
- $label15 = new TLabel('Telefone 1:', '#333333', '12px', '');
- $label16 = new TLabel('Telefone 2:', '#333333', '12px', '');
- $label17 = new TLabel('Celular:', '#333333', '12px', '');
- $label18 = new TLabel('UF:', '#333333', '12px', '');
- $label19 = new TLabel('Cidade:', '#333333', '12px', '');
- $label20 = new TLabel('Bairro:', '#333333', '12px', '');
- $label21 = new TLabel('Número:', '#333333', '12px', '');
- $label22 = new TLabel('Complemento:', '#333333', '12px', '');
- $label23 = new TLabel('CEP:', '#333333', '12px', '');
- $label24 = new TLabel('Referência:', '#333333', '12px', '');
- $label25 = new TLabel('Data Admissão:', '#333333', '12px', '');
- $label26 = new TLabel('Data Carência:', '#333333', '12px', '');
- $label27 = new TLabel('Primeiro Vencimento:', '#333333', '12px', '');
- $label28 = new TLabel('Área:', '#333333', '12px', '');
- $cliente = new Cliente($param['key']);
- $text1 = new TTextDisplay($cliente->id, '#333333', '12px', '');
- $text2 = new TTextDisplay($cliente->codigo_cliente, '#333333', '12px', '');
- $text3 = new TTextDisplay(TDate::convertToMask($cliente->data_cadastro, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
- $text4 = new TTextDisplay($cliente->nome, '#333333', '12px', '');
- $text5 = new TTextDisplay($cliente->sexo->sexo, '#333333', '12px', '');
- $text6 = new TTextDisplay($cliente->rg, '#333333', '12px', '');
- $text7 = new TTextDisplay($cliente->orgao_expeditor, '#333333', '12px', '');
- $text8 = new TTextDisplay($cliente->cpf, '#333333', '12px', '');
- $text9 = new TTextDisplay($cliente->profissao, '#333333', '12px', '');
- $text10 = new TTextDisplay($cliente->religiao, '#333333', '12px', '');
- $text11 = new TTextDisplay($cliente->estado_civil, '#333333', '12px', '');
- $text12 = new TTextDisplay(TDate::convertToMask($cliente->data_nascimento, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
- $text13 = new TTextDisplay($cliente->idade, '#333333', '12px', '');
- $text14 = new TTextDisplay(TDate::convertToMask($cliente->data_falecimento, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
- $text15 = new TTextDisplay($cliente->telefone_um, '#333333', '12px', '');
- $text16 = new TTextDisplay($cliente->telefone_dois, '#333333', '12px', '');
- $text17 = new TTextDisplay($cliente->celular, '#333333', '12px', '');
- $text18 = new TTextDisplay($cliente->uf->uf, '#333333', '12px', '');
- $text19 = new TTextDisplay($cliente->cidade->nome, '#333333', '12px', '');
- $text20 = new TTextDisplay($cliente->bairro->bairro, '#333333', '12px', '');
- $text21 = new TTextDisplay($cliente->numero, '#333333', '12px', '');
- $text22 = new TTextDisplay($cliente->complemento, '#333333', '12px', '');
- $text23 = new TTextDisplay($cliente->cep, '#333333', '12px', '');
- $text24 = new TTextDisplay($cliente->referencia, '#333333', '12px', '');
- $text25 = new TTextDisplay(TDate::convertToMask($cliente->data_admissao, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
- $text26 = new TTextDisplay(TDate::convertToMask($cliente->data_carencia, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
- $text27 = new TTextDisplay(TDate::convertToMask($cliente->primeiro_vencimento, 'yyyy-mm-dd', 'dd/mm/yyyy'), '#333333', '12px', '');
- $text28 = new TTextDisplay($cliente->area->area, '#333333', '12px', '');
- $this->form->addFields([$label1],[$text1], [$label19],[$text19]);
- $this->form->addFields([$label2],[$text2], [$label28],[$text28]);
- $this->form->addFields([$label3],[$text3], [$label18],[$text18]);
- $this->form->addFields([$label4],[$text4], [$label20],[$text20]);
- $this->form->addFields([$label5],[$text5], [$label21],[$text21]);
- $this->form->addFields([$label6],[$text6], [$label22],[$text22]);
- $this->form->addFields([$label7],[$text7], [$label23],[$text23]);
- $this->form->addFields([$label8],[$text8], [$label12],[$text12]);
- $this->form->addFields([$label11],[$text11], [$label25],[$text25]);
- $this->form->addFields([$label13],[$text13], [$label14],[$text14]);
- $this->form->appendPage('Pagamentos');
- $this->form->addFields([$label26],[$text26], [$label27],[$text27]);
- $this->form->appendPage('Informações');
- $this->form->addFields([$label9],[$text9], [$label10],[$text10]);
- $this->form->addFields([$label15],[$text15], [$label16],[$text16]);
- $this->form->addFields([$label17],[$text17], [$label24],[$text24]);
- $this->form->appendPage('Histórico');
- //DataGrid Histórico
- $this->historico_cliente_list = new TQuickGrid;
- $this->historico_cliente_list->style = 'width:100%';
- $this->historico_cliente_list->disableDefaultClick();
- $this->historico_cliente_list->addQuickColumn('Histórico', 'observacao', 'left');
- $this->historico_cliente_list->addQuickColumn('Data', 'data_historico', 'left');
- $action_onEdit = new TDataGridAction(array('HistoricoClienteForm', 'onEdit'));
- $action_onEdit->setButtonClass('btn btn-default btn-sm');
- $action_onEdit->setLabel('Editar');
- $action_onEdit->setImage('fa:pencil-square-o blue');
- $action_onEdit->setField('id');
- $this->historico_cliente_list->addAction($action_onEdit);
- $action_onDelete = new TDataGridAction(array($this, 'onDelete'));
- $action_onDelete->setButtonClass('btn btn-default btn-sm');
- $action_onDelete->setLabel('Excluir');
- $action_onDelete->setImage('fa:trash-o red');
- $action_onDelete->setField('id');
- $this->historico_cliente_list->addAction($action_onDelete);
- $this->historico_cliente_list->createModel();
- $items = HistoricoCliente::where('cliente_id', '=', $cliente->id)->load();
- $this->historico_cliente_list->addItems($items);
- $panel = new TPanelGroup('Histórico', '#f5f5f5');
- $panel->add(new BootstrapDatagridWrapper($this->historico_cliente_list));
- $this->form->addContent([$panel]);
- $this->form->appendPage('Dependentes');
- //DataGrid Dependentes
- $this->dependente_cliente_list = new TQuickGrid;
- $this->dependente_cliente_list->style = 'width:100%';
- $this->dependente_cliente_list->disableDefaultClick();
- //$this->dependente_cliente_list->addQuickColumn('Editar', 'edit', 'left', 50);
- $this->dependente_cliente_list->addQuickColumn('Nome', 'nome', 'left');
- $this->dependente_cliente_list->addQuickColumn('Status', 'status_dependente->status_dependente', 'center');
- $this->dependente_cliente_list->addQuickColumn('Data Admissão', 'data_admissao', 'center');
- $this->dependente_cliente_list->addQuickColumn('Data Carência', 'data_carencia', 'center');
- $action_onEdit = new TDataGridAction(array('DependenteForm', 'onEdit'));
- $action_onEdit->setButtonClass('btn btn-default btn-sm');
- $action_onEdit->setLabel('Editar');
- $action_onEdit->setImage('fa:pencil-square-o blue');
- $action_onEdit->setField('id');
- $this->dependente_cliente_list->addAction($action_onEdit);
- $this->dependente_cliente_list->createModel();
- $items = Dependente::where('cliente_id', '=', $cliente->id)->load();
- $this->dependente_cliente_list->addItems($items);
- $panel = new TPanelGroup('Dependentes', '#f5f5f5');
- $panel->add(new BootstrapDatagridWrapper($this->dependente_cliente_list));
- $this->form->addContent([$panel]);
- //$this->form->addHeaderAction('Imprimir', new TAction(['PedidoFormView', 'onPrint'],['key'=>$pedido->id]), 'fa:file-pdf-o red');
- //$this->form->addHeaderAction('Editar', new TAction(['ClienteForm', 'onEdit'],['key'=>$cliente->id]), 'fa:pencil-square-o blue');
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 100%';
- $container->class = 'formView-container';
- $container->add(new TXMLBreadCrumb('menu.xml', 'ClienteList'));
- $container->add($this->form);
- TTransaction::close();
- parent::add($container);
- }
- /**
- * Imprime o pedido
- */
- public function onPrint($param)
- {
- try
- {
- TTransaction::open('microerp');
- $object = Pedido::find($param['key']);
- if ($object)
- {
- $html = new AdiantiHTMLDocumentParser('app/documents/PedidoDocument.html', 'A4', 'portrait');
- $html->setMaster($object);
- $objects = PedidoItem::where('pedido_id', '=', $object->id)->load();
- $html->setDetail('PedidoItem', $objects);
- $html->process();
- $output = $html->getContents();
- $document = 'tmp/'.uniqid().'.pdf';
- $html = AdiantiHTMLDocumentParser::newFromString($output);
- $html->saveAsPDF($document);
- parent::openFile($document);
- new TMessage('info', _t('Document successfully generated'));
- }
- TTransaction::close();
- }
- catch (Exception $e)
- {
- throw new Exception($e->getMessage());
- }
- }
- public function onShow()
- {
- }
- }
- ?>
Quando executo a app, ele me retorna o seguinte erro na tela de ClienteFormView: Database não definido. Você deve executar setDatabase() no Construtor. Estou usando um TTransaction::open('microerp');
Mesmo assim os dados são carregados normalmente.
Na aba "Histórico" onde é exibida a grid com os dados do histórico do cliente, os dados são carregados normalmente, mas ao clicar no ícone de delete para excluir o registro ele me retorna o seguinte erro:
Objeto 1 não encontrado em cliente
File: appmodelCliente.class.php : 14
AdiantiDatabaseTRecord->__construct(1,1)
File: appcontrolcadastros_basicosclientesClienteFormView.php : 56
Cliente->__construct(1)
File: libadianticoreAdiantiCoreApplication.php : 60
ClienteFormView->__construct(ClienteFormView,onDelete,1,1)
File: engine.php : 36
AdiantiCoreAdiantiCoreApplication::run(1)
File: engine.php : 55
TApplication::run(1)
Está tentando fazer o delete na tabela cliente e não na de Histórico correto?
A minha duvida é: Como posso fazer para deletar somente os dados da grid da tabela Histórico do cliente neste contexto?
O código que você enviou está completo? Se sim, está herdando a função de delete da trait AdiantiStandardListTrait. Reescreva essa função e faça as alterações necessárias.
Sobre a mensagem "Database não definido", ela também tem relação com o uso da trait, pois a função onReload(da trait) será executada e ela necessita das configurações de banco de dados e active record. Adicione o código abaixo no início do construtor:
Mas no seu caso não tenho certeza se tem a necessidade de usar essa trait, pois ela é mais utilizada para lists e aparentemente você não está usando os métodos dela.
Bom dia Nataniel, realmente não há necessidade da trait. o que eu preciso fazer, é implementar a função de delete para as grids (historico_cliente_list) e (dependente_cliente_list). Mas não estou conseguindo. Quando tento executar recebo o erro:
Método AdiantiControlTAction::__construct deve receber um parâmetro
do tipo Callback
Verifique se a ação (ClienteFormView::onDelete) existe
Preciso implementar um onDelete para cada grid separadamente?
Segue código atualizado:
</Marconi>
Se você não está mais usando a trait, não existe nenhuma função onDelete, por isso o erro.
Eu criaria 2 funções, onDeleteHistorico e onDeleteDependente, por exemplo.