Erro ao chamar a função onReload estou com o seguinte problema: ao executar um setChangeAction onde eu carrego uma sessão com alguns produtos, tento chamar a função onReload, mas sempre recebo a seguinte mesagem de erro no log do apache: PHP Fatal error: Uncaught Error: Using $this when not in object context in /var/www/html/websistema/app/control/pedido/PedidoAlly.class.php:332nStack trace:n#0 [internal function]: Pedid...
HT
Erro ao chamar a função onReload  
estou com o seguinte problema: ao executar um setChangeAction onde eu carrego uma sessão com alguns produtos, tento chamar a função onReload, mas sempre recebo a seguinte mesagem de erro no log do apache:

PHP Fatal error: Uncaught Error: Using $this when not in object context in /var/www/html/websistema/app/control/pedido/PedidoAlly.class.php:332nStack trace:n#0 [internal function]: PedidoAlly::onChangeActionPolcom(Array)n#1 /var/www/html/websistema/lib/adianti/core/AdiantiCoreApplication.php(49): call_user_func(Array, Array)n#2 /var/www/html/websistema/engine.php(32): Adianti\Core\AdiantiCoreApplication::run(true)n#3 /var/www/html/websistema/engine.php(51): TApplication::run(true)n#4 {main}n thrown in /var/www/html/websistema/app/control/pedido/PedidoAlly.class.php on line 332, referer: ip/websistema/index.php?class=PedidoAlly

Alguém já se deparou com esse erro que possa me ajudar? obrigado.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (4)


WP

Poste seu codigo aqui para analizar

Mas pelo visto tu ta tentando usa objeto dinámico ($this) dentro de uma função estática (coisa que não é possível)
NR

Não é possível utilizar o $this dentro de uma função static. Use a função loadPage:
 
  1. <?php
  2. TApplication::loadPage(__CLASS__,'onReload');
  3. ?>
HT

Nataniel Rabaioli, tentei esse código, mas não carrega o datagrid ao chamar o onReload.

Código:

 
  1. <?php
  2. /**
  3. *
  4. * @author herbety Thiago Maciel
  5. */
  6. class PedidoAlly extends TPage
  7. {
  8. protected $form; // form
  9. private $formFields;
  10. private $datagrid;
  11. private $loaded;
  12. private $label_total_valor;
  13. private $label_ponto_valor;
  14. /**
  15. * Class constructor
  16. * Creates the page and the registration form
  17. */
  18. function __construct()
  19. {
  20. parent::__construct();
  21. TScript::create('$("input, select, text").keypress(function (e) {var code = null;
  22. code = (e.keyCode ? e.keyCode : e.which);
  23. return (code == 13) ? false : true;
  24. });');
  25. // criacao de formulário
  26. $this->form = new TForm('form_pedido');
  27. $panel_master = new TPanelGroup( 'Pedido Online' );
  28. $vbox = new TVBox;
  29. $vbox->style = 'width: 100%';
  30. $this->form->add($panel_master);
  31. $panel_master->add($vbox);
  32. $frame_general = new TFrame;
  33. //$frame_general->class = 'tframe tframe-custom';
  34. //$frame_general->setLegend('Dados da venda');
  35. //$frame_general->style = 'background:whiteSmoke';
  36. $table_general = new TTable;
  37. //$table_general->width = '100%';
  38. $frame_general->add($table_general);
  39. $frame_general_total = new TFrame;
  40. $table_general_total = new TTable;
  41. $frame_general_total->add($table_general_total);
  42. $table_general_total->width = '100%';
  43. $frame_general->add($frame_general_total);
  44. //$this->label_ponto = new TLabel('');
  45. //$this->label_total = new TLabel('');
  46. $table_general_total->addRowSet($label_ponto = new TLabel('Pontos:'), array(
  47. $this->label_ponto_valor = new TLabel(''),
  48. $label_total = new TLabel('Total Venda RS:'),
  49. $this->label_total_valor = new TLabel('')) );
  50. $label_ponto->setFontStyle('b');
  51. $label_total->setFontStyle('b');
  52. //$label_ponto->setFontColor('#FF0000');
  53. // produtos
  54. $frame_produto = new TFrame;
  55. //$frame_produto->class = 'tframe tframe-custom';
  56. //$frame_produto->setLegend('Lista de Produtos');
  57. $table_produto = new TTable;
  58. $frame_produto->add($table_produto);
  59. $vbox->add( $frame_general );
  60. $vbox->add( $frame_produto );
  61. // campo detalhe cliente
  62. $cli_seek = new ">TDBSeekButton('cli_seek', 'teste', $this->form->getName(), 'CLIEN', 'Razao_Social', 'cli_codigo', 'cli_razao');
  63. $cli_codigo = new TEntry('cli_codigo');
  64. $cli_razao = new TEntry('cli_razao');
  65. $obj = new SeekButtonCliente;
  66. $action = new TAction(array($obj, 'onReload'));
  67. $cli_seek->setAction($action);
  68. $cli_codigo->setSize(80);
  69. $cli_seek->setSize(80);
  70. $cli_codigo->setEditable(false);
  71. $cli_razao->setEditable(false);
  72. $cli_razao->setSize(400);
  73. $cli_seek->addValidation('Cliente', new TRequiredValidator);
  74. $table_general->addRowSet( new TLabel('Código'), $cli_codigo );
  75. $table_general->addRowSet( $label_cliente = new TLabel('Cliente (*)'), array( $cli_seek, $cli_razao ) );
  76. //$label_cliente->setFontColor('#FF0000');
  77. // campo politica
  78. $criteria1 = new TCriteria;
  79. $criteria1->add(new TFilter('Dat_Termino', '>', DATE('Y-m-d')));
  80. $criteria2 = new TCriteria;
  81. $criteria2->add(new TFilter('Dat_Termino', '=', NULL));
  82. $criteria = new TCriteria;
  83. $criteria->add($criteria1, TExpression::OR_OPERATOR);
  84. $criteria->add($criteria2, TExpression::OR_OPERATOR);
  85. $polCom = new TDBCombo('polcom', 'sqlserver', 'POCOM', 'Id_PolCom', '{Id_PolCom} - {Cod_PolCom}','Id_PolCom', $criteria);
  86. $table_general->addRowSet( $label_polCom = new TLabel('Política Comerc (*)'), $polCom );
  87. // Ação para saída do campo ponto
  88. $polCom->setChangeAction(new TAction(array($this,'onChangeActionPolcom')));
  89. // Campo detalhe pontos
  90. $ponto = new TDBCombo('ponto', 'mysql', 'PedidoPonto', 'id', '{tipo} - {descricao} - ({valor} %)');
  91. $table_general->addRowSet( $label_ponto = new TLabel('Ponto (*)'), $ponto );
  92. //$label_ponto->setFontColor('#FF0000');
  93. // Ação para saída do campo ponto
  94. //$ponto->setChangeAction(new TAction(array($this,'onChangeActionPonto')));
  95. // Campo detalhe agregação
  96. $agregacao = new TEntry('agregacao');
  97. $table_general->addRowSet( $label_agregacao = new TLabel('Agregação: %'), $agregacao );
  98. $agregacao->setTransformer(array($this, 'onDecimal'));
  99. $agregacao->setNumericMask(2, '.', ',');
  100. // Ação de saída agregação
  101. //$agregacao->setExitAction(new TAction(array($this,'onExitActionAgregacao')));
  102. // Seleção de produto
  103. $prd_codigo = new ">TDBSeekButton('prd_codigo', 'teste', $this->form->getName(), 'PRODU', 'Descricao', 'prd_codigo', 'prd_descricao');
  104. $prd_descricao = new TEntry('prd_descricao');
  105. $prd_vlr_ultEnt = new TEntry('prd_vlr_ultEnt');
  106. $prd_vlr_und = new TEntry('prd_vlr_und');
  107. $prd_quantidade = new TEntry('prd_quantidade');
  108. $prd_desconto = new TEntry('prd_desconto');
  109. $prd_desconto->setNumericMask(2, '.', ',');
  110. $prd_vlr_und->setNumericMask(2, '.', ',');
  111. $obj = new SeekButtonProduto;
  112. $action = new TAction(array($obj, 'onReload'));
  113. $prd_codigo->setAction($action);
  114. $prd_codigo->setSize(80);
  115. $prd_vlr_ultEnt->setEditable(false);
  116. $prd_descricao->setSize(400);
  117. $prd_descricao->setEditable(false);
  118. $add_produto = new TButton('add_produto');
  119. $action_produto = new TAction(array($this, 'onProdutoAdd'));
  120. $add_produto->setAction($action_produto, 'Adicionar');
  121. $add_produto->setImage('fa:save');
  122. $table_produto->addRowSet( $label_produto = new TLabel('Produto:'), array($prd_codigo,$prd_descricao) );
  123. $table_produto->addRowSet( $label_vlr_UltEnt = new TLabel('Valor Unit. R$:'), $prd_vlr_ultEnt );
  124. $table_produto->addRowSet( $label_vlr_und = new TLabel('Valor Fixo. R$:'), $prd_vlr_und );
  125. $table_produto->addRowSet( $label_quantidade = new TLabel('Quantidade:'), $prd_quantidade );
  126. $table_produto->addRowSet( new TLabel('Desc. Fixo: %'), $prd_desconto );
  127. $table_produto->addRowSet( $add_produto );
  128. $label_produto->setFontColor('#FF0000');
  129. $label_quantidade->setFontColor('#FF0000');
  130. //datagrid dos produtos inseridos
  131. $this->datagrid = new TDataGrid;
  132. $this->datagrid = new BootstrapDatagridWrapper($this->datagrid);
  133. $this->datagrid->style = "margin-bottom: 10px; width:100%";
  134. $this->datagrid->disableDefaultClick();
  135. $codigo = new TDataGridColumn('prd_codigo', 'Código', 'center', 80);
  136. $descricao = new TDataGridColumn('prd_descricao', 'Descrição', 'left', 300);
  137. $fabricante = new TDataGridColumn('prd_fabricante', 'Fabricante', 'left', 200);
  138. $qtd_cx = new TDataGridColumn('prd_cx', 'Qtd. Caixa', 'left', 100);
  139. $quantidade = new TDataGridColumn('prd_quantidade', 'Quantidade', 'right', 30);
  140. $valor = new TDataGridColumn('prd_valor','Valor', 'right', 100);
  141. $desconto = new TDataGridColumn('prd_desconto','Desc. %', 'right', 80);
  142. $subTotal = new TDataGridColumn('subTotal', 'SubTotal', 'right', 100);
  143. $this->datagrid->addColumn($codigo);
  144. $this->datagrid->addColumn($descricao);
  145. $this->datagrid->addColumn($fabricante);
  146. $this->datagrid->addColumn($quantidade);
  147. $this->datagrid->addColumn($valor);
  148. $this->datagrid->addColumn($desconto);
  149. $this->datagrid->addColumn($subTotal);
  150. // create EDIT action
  151. $action_edit = new TDataGridAction(array($this, 'onEdit'));
  152. $action_edit->setUseButton(TRUE);
  153. $action_edit->setButtonClass('btn btn-default');
  154. //$action_edit->setLabel(_t('Edit'));
  155. $action_edit->setImage('fa:pencil-square-o blue fa-lg');
  156. $action_edit->setField('prd_codigo');
  157. //$this->datagrid->addAction($action_edit);
  158. // create DELETE action
  159. $action_del = new TDataGridAction(array($this, 'onEdit'));
  160. $action_del->setUseButton(TRUE);
  161. $action_del->setButtonClass('btn btn-default');
  162. //$action_del->setLabel(_t('Delete'));
  163. $action_del->setImage('fa:trash-o red fa-lg');
  164. $action_del->setField('prd_codigo');
  165. //$this->datagrid->addAction($action_del);
  166. $this->datagrid->createModel();
  167. $vbox->add( $this->datagrid );
  168. //formatação dos números
  169. $format_value = function($value) {
  170. if (is_numeric($value)) {
  171. return number_format($value, 2, ',', '.');
  172. }
  173. return $value;
  174. };
  175. //formatação decimal
  176. $desconto->setTransformer( $format_value );
  177. $valor->setTransformer( $format_value );
  178. $subTotal->setTransformer( $format_value );
  179. //Função formatação decimal datagrid
  180. $subTotal->setTotalFunction( function($values) {
  181. return array_sum((array) $values);
  182. });
  183. //botões
  184. $save_button = TButton::create('save', array($this, 'onSave'), 'Fechar Pedido', 'fa:save green');
  185. $new_button = TButton::create('new', array($this, 'onClear'), 'Zerar Pedido', 'fa:eraser red');
  186. // adiciona os campos no formulário
  187. $this->formFields = array($cli_seek, $cli_codigo, $cli_razao, $polCom, $ponto, $agregacao, $prd_codigo, $prd_descricao, $prd_vlr_ultEnt, $prd_vlr_und, $prd_quantidade, $prd_desconto, $add_produto, $save_button, $new_button);
  188. $this->form->setFields( $this->formFields );
  189. //verifica se existe sessão cliente
  190. if(!empty(TSession::getValue('cliente')))
  191. {
  192. $cliente = TSession::getValue('cliente');
  193. $cli_codigo->setValue($cliente->cli_codigo);
  194. $cli_razao->setValue($cliente->cli_razao);
  195. }
  196. //verifica se existe sessão politica
  197. if(!empty(TSession::getValue('polcom')))
  198. {
  199. $sessao = TSession::getValue('polcom');
  200. $polCom->setValue($sessao->polcom);
  201. $ponto->setValue($sessao->ponto);
  202. $agregacao->setValue($sessao->agregacao);
  203. }else{
  204. $ponto->setEditable(false);
  205. $agregacao->setEditable(false);
  206. $prd_codigo->setEditable(false);
  207. $prd_vlr_und->setEditable(false);
  208. $prd_quantidade->setEditable(false);
  209. $prd_desconto->setEditable(false);
  210. //TDBCombo::disableField('form_pedido', 'ponto');
  211. //TEntry::disableField('form_pedido', 'agregacao');
  212. }
  213. $panel_master->addFooter( THBox::pack($save_button, $new_button) );
  214. // cria o container das páginas
  215. $container = new TVBox;
  216. $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  217. $container->add($this->form);
  218. parent::add($container);
  219. }
  220. /**
  221. * Ação de saída do cliente
  222. */
  223. public static function onChangeActionPolcom($param)
  224. {
  225. TTransaction::open('mysql');
  226. $parametro = new ParametroPedido(1);
  227. $agregacao = $parametro->agregacao_min;
  228. $polcom = new StdClass;
  229. $polcom->polcom = $param['polcom'];
  230. $polcom->ponto = 2;
  231. $polcom->agregacao = $agregacao;
  232. TTransaction::close();
  233. /**
  234. if($param['ponto'] == 0)
  235. TEntry::disableField('form_pedido', 'prd_vlr_und');
  236. TEntry::disableField('form_pedido', 'prd_desconto');
  237. if($param['ponto'] != 0)
  238. TEntry::enableField('form_pedido', 'prd_vlr_und');
  239. TEntry::enableField('form_pedido', 'prd_desconto');
  240. */
  241. TTransaction::open('teste');
  242. $criteria = new TCriteria;
  243. $p['order'] = 'Cod_Produt';
  244. $p['direction'] = 'asc';
  245. $criteria->setProperties($p);
  246. $criteria->add(new TFilter('Id_PolCom','=',$polcom->polcom));
  247. $repository = new TRepository('PCXPR');
  248. $produtos = $repository->load($criteria);
  249. if(!empty($produtos))
  250. {
  251. foreach($produtos as $produto)
  252. {
  253. $produ = new PRODU($produto->Cod_Produt);
  254. $itens[$produ->Codigo ] = array('prd_codigo' => $produ->Codigo,
  255. 'prd_descricao' => $produ->Descricao,
  256. 'prd_fabricante' => $produ->fabricante->Fantasia,
  257. 'prd_quantidade' => $produto->Qtd_Minimo,
  258. 'prd_vlr_und' => '',
  259. 'prd_valor' => $produ->Prc_Fabric,
  260. 'prd_desconto' => $produto->Per_Descon);
  261. TSession::setValue('itens', $itens);
  262. }
  263. TSession::setValue('polcom',$polcom);
  264. }else{
  265. new TMessage('info','Sem produtos cadastrado nesta política!');
  266. }
  267. TTransaction::close();
  268. }
  269. * Clear form
  270. * @param $param URL parameters
  271. */
  272. function onClear($param)
  273. {
  274. $this->form->clear();
  275. TSession::setValue('itens', array());
  276. TSession::setValue('cliente', array());
  277. TSession::setValue('polcom', array());
  278. $this->onReload( $param );
  279. }
  280. * Reload the item list
  281. * @param $param URL parameters
  282. */
  283. public function onReload($param)
  284. {
  285. $itens = TSession::getValue('itens');
  286. //$cliente = TSession::getValue('cliente');
  287. $total = 0;
  288. $this->datagrid->clear();
  289. $data = $this->form->getData();
  290. if (!empty($itens))
  291. {
  292. foreach ($itens as $prd_codigo => $list_produto)
  293. {
  294. $item = new StdClass;
  295. $item->prd_codigo = $list_produto['prd_codigo'];
  296. $item->prd_descricao = $list_produto['prd_descricao'];
  297. $item->prd_fabricante = $list_produto['prd_fabricante'];
  298. $item->prd_quantidade = $list_produto['prd_quantidade'];
  299. $item->prd_quantidade = new TEntry($list_produto['prd_codigo']);
  300. $item->prd_quantidade->setSize(50);
  301. $item->prd_quantidade->setExitAction(new TAction(array($this,'onExitActionQuantidade')));
  302. $item->prd_quantidade->setValue($list_produto['prd_quantidade']);
  303. $item->prd_valor = $list_produto['prd_valor'];
  304. $item->prd_desconto = $list_produto['prd_desconto'];
  305. $item->subTotal = $item->prd_valor * (1-($item->prd_desconto)/100) * $item->prd_quantidade;
  306. $total += $item->subTotal;
  307. $row = $this->datagrid->addItem( $item );
  308. $this->form->addField($item->prd_quantidade);
  309. $row->onmouseover = '';
  310. $row->onmouseout = '';
  311. }
  312. $this->label_total_valor->setValue(number_format($total, 2, ',', '.'));
  313. }
  314. $this->loaded = TRUE;
  315. }
  316. * Show the page
  317. */
  318. public function show()
  319. {
  320. //checa se o datagrid existe e se esta preenchido
  321. if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  322. {
  323. $this->onReload( func_get_arg(0) );
  324. }
  325. parent::show();
  326. }
  327. }
  328. ?>
HT

Pessoal, obrigado pela ajuda. Consegui resolver através deste link: www.adianti.com.br/forum/pt/view_1123?problemas-ao-carregar-um-datag