Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Dificuldade criação de coluna calculada a partir de uma condição Olá a todos, estou tendo dificuldade em criar uma coluna em um datagrid para um cadastro mestre/detalhe. A partir de uma condição IF/ELSE. O que acontece é que quando a condição é verdadeira, é executado o trecho de código do if, mas se for falso ele retorna um cálculo totalmente diferente. Não consigo encontrar onde estou errando. Alguém poderia me ajudar? Segue código: ...
ET
Dificuldade criação de coluna calculada a partir de uma condição  
Olá a todos, estou tendo dificuldade em criar uma coluna em um datagrid para um cadastro mestre/detalhe. A partir de uma condição IF/ELSE. O que acontece é que quando a condição é verdadeira, é executado o trecho de código do if, mas se for falso ele retorna um cálculo totalmente diferente. Não consigo encontrar onde estou errando. Alguém poderia me ajudar?

Segue código:

 
  1. <?php
  2. /**
  3. * NotasForm Master/Detail
  4. * @author <your name here>
  5. */
  6. class NotasForm extends TPage
  7. {
  8. protected $form; // form
  9. protected $detail_list;
  10. /**
  11. * Page constructor
  12. */
  13. public function __construct()
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new BootstrapFormBuilder('form_Notas');
  18. $this->form->setFormTitle('Cadastrar Notas');
  19. // master fields
  20. $id = new TEntry('id');
  21. $aluno_id = new TDBUniqueSearch('aluno_id', 'cp', 'Aluno', 'id', 'nome');
  22. $serie_id = new TDBCombo('serie_id', 'cp', 'Serie', 'id', 'ano');
  23. $grau = new TDBCombo('grau', 'cp', 'Serie', 'id', 'grau');
  24. $turma = new TEntry('turma');
  25. $turno = new TCombo('turno');
  26. // add the combo filds Turno
  27. $turno->addItems(array('Manhã'=>'Manhã',
  28. 'Tarde'=>'Tarde',
  29. 'Noite'=>'Noite'
  30. ));
  31. $aluno_id->addValidation('Aluno', new TRequiredValidator());
  32. $serie_id->addValidation('Série', new TRequiredValidator());
  33. $grau->addValidation('Grau', new TRequiredValidator());
  34. $turma->addValidation('Turma', new TRequiredValidator());
  35. $turno->addValidation('Turno', new TRequiredValidator());
  36. // detail fields
  37. $detail_uniqid = new THidden('detail_uniqid');
  38. $detail_id = new THidden('detail_id');
  39. $detail_disciplina = new TCombo('detail_disciplina');
  40. $detail_unid_1 = new TSpinner('detail_unid_1');
  41. $detail_unid_2 = new TSpinner('detail_unid_2');
  42. $detail_unid_3 = new TSpinner('detail_unid_3');
  43. $detail_unid_4 = new TSpinner('detail_unid_4');
  44. $detail_nota_rec = new TSpinner('detail_nota_rec');
  45. if (!empty($id))
  46. {
  47. $id->setEditable(FALSE);
  48. }
  49. // add the combo filds Turno
  50. $detail_disciplina->addItems(array('Português'=>'Português',
  51. 'Matemática'=>'Matemática',
  52. 'História'=>'História',
  53. 'Inglês'=>'Inglês',
  54. 'Geografia'=>'Geografia',
  55. 'Religião'=>'Religião',
  56. 'Ciências'=>'Ciências',
  57. 'Educação Física'=>'Educação Física',
  58. 'Direitos da Cidadania'=>'Direitos da Cidadania',
  59. 'Artes'=>'Artes',
  60. 'Condutas'=>'Condutas',
  61. 'Faltas'=>'Faltas'
  62. ));
  63. $detail_disciplina->setValue('Português');
  64. $detail_disciplina->setSize('38%');
  65. $detail_unid_1->setRange(0,100,0.1);
  66. $detail_unid_2->setRange(0,100,0.1);
  67. $detail_unid_3->setRange(0,100,0.1);
  68. $detail_unid_4->setRange(0,100,0.1);
  69. $detail_nota_rec->setRange(0,100,0.1);
  70. // master fields
  71. $this->form->addContent( ['<h4>Aluno</h4><hr>'] );
  72. $this->form->addFields( [ new TLabel('Campos em vermelho são obrigatórios.', '#ff0000') ]);
  73. $this->form->addFields( [new TLabel('Código')], [$id] );
  74. $this->form->addFields( [new TLabel('Aluno', '#ff0000')], [$aluno_id] );
  75. $this->form->addFields( [new TLabel('Série', '#ff0000')], [$serie_id], [new TLabel('Grau', '#ff0000')], [$grau], [new TLabel('Turno', '#ff0000')], [$turno] );
  76. // set sizes
  77. $id->setSize('100');
  78. // detail fields
  79. $this->form->addContent( ['<h4>Notas</h4><hr>'] );
  80. $this->form->addFields( [$detail_uniqid] );
  81. $this->form->addFields( [$detail_id] );
  82. $this->form->addFields( [new TLabel('Disciplinas', '#ff0000')], [$detail_disciplina] );
  83. $this->form->addFields( [new TLabel('Unidade 1')], [$detail_unid_1], [new TLabel('Unidade 2')], [$detail_unid_2] );
  84. $this->form->addFields( [new TLabel('Unidade 3')], [$detail_unid_3], [new TLabel('Unidade 4')], [$detail_unid_4] );
  85. $this->form->addFields( [new TLabel('Nota de Recuperação')], [$detail_nota_rec]);
  86. $add = TButton::create('add', [$this, 'onDetailAdd'], 'Adicionar Notas', 'fa:plus-circle green');
  87. $add->getAction()->setParameter('static','1');
  88. $this->form->addFields( [], [$add] );
  89. $this->detail_list = new BootstrapDatagridWrapper(new TDataGrid);
  90. $this->detail_list->setId('NotasItem_list');
  91. $this->detail_list->generateHiddenFields();
  92. $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
  93. // items
  94. $this->detail_list->addColumn( new TDataGridColumn('uniqid', 'Uniqid', 'center') )->setVisibility(false);
  95. $this->detail_list->addColumn( new TDataGridColumn('id', 'Id', 'center') )->setVisibility(false);
  96. $this->detail_list->addColumn( new TDataGridColumn('disciplina', 'Disciplina', 'center', 100) );
  97. $this->detail_list->addColumn( new TDataGridColumn('unid_1', 'Unidade 1', 'center', 100) );
  98. $this->detail_list->addColumn( new TDataGridColumn('unid_2', 'Unidade 2', 'center', 100) );
  99. $this->detail_list->addColumn( new TDataGridColumn('unid_3', 'Unidade 3', 'center', 100) );
  100. $this->detail_list->addColumn( new TDataGridColumn('unid_4', 'Unidade 4', 'center', 100) );
  101. $this->detail_list->addColumn( $column_media_anual = new TDataGridColumn('= ( {unid_1} + {unid_2} + {unid_3} + {unid_4} ) / 4', 'Média anual', 'center', 100));
  102. $formata_valor = function($valor, $objeto, $row) {
  103. if (is_numeric($valor))
  104. {
  105. return number_format($valor, 1, ".", ".");
  106. }
  107. return $valor;
  108. };
  109. $column_media_anual->setTransformer($formata_valor);
  110. $this->detail_list->addColumn( new TDataGridColumn('nota_rec', 'Nota de Recuperação', 'center', 100) );
  111. //AQUI É ONDE ESTOU TENDO A DIFICULDADE
  112. if ('nota_rec' != '0.00'){
  113. $this->detail_list->addColumn( $column_media_final_pos_rec = new TDataGridColumn('= ((( {unid_1} + {unid_2} + {unid_3} + {unid_4} ) / 4 + {nota_rec}) / 2)', 'Média final pós Recuperação', 'center', 100));
  114. }else {
  115. $this->detail_list->addColumn( $column_media_final_pos_rec = new TDataGridColumn('nota_rec', 'Média final pós Recuperação', 'center', 100));
  116. }
  117. $formata_valor = function($valor, $objeto, $row) {
  118. if (is_numeric($valor))
  119. {
  120. return number_format($valor, 1, ".", ".");
  121. }
  122. return $valor;
  123. };
  124. $column_media_final_pos_rec->setTransformer($formata_valor);
  125. // detail actions
  126. $action1 = new TDataGridAction([$this, 'onDetailEdit'] );
  127. $action1->setFields( ['uniqid', '*'] );
  128. $action2 = new TDataGridAction([$this, 'onDetailDelete']);
  129. $action2->setField('uniqid');
  130. // add the actions to the datagrid
  131. $this->detail_list->addAction($action1, _t('Edit'), 'fa:edit blue');
  132. $this->detail_list->addAction($action2, _t('Delete'), 'far:trash-alt red');
  133. $this->detail_list->createModel();
  134. $panel = new TPanelGroup;
  135. $panel->add($this->detail_list);
  136. $panel->getBody()->style = 'overflow-x:auto';
  137. $this->form->addContent( [$panel] );
  138. $this->form->addAction( 'Salvar', new TAction([$this, 'onSave'], ['static'=>'1']), 'fa:save green');
  139. $this->form->addAction( 'Limpar', new TAction([$this, 'onClear']), 'fa:eraser red');
  140. // create the page container
  141. $container = new TVBox;
  142. $container->style = 'width: 100%';
  143. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  144. $container->add($this->form);
  145. parent::add($container);
  146. }
  147. /**
  148. * Clear form
  149. * @param $param URL parameters
  150. */
  151. public function onClear($param)
  152. {
  153. $this->form->clear(TRUE);
  154. }
  155. /**
  156. * Add detail item
  157. * @param $param URL parameters
  158. */
  159. public function onDetailAdd( $param )
  160. {
  161. try
  162. {
  163. $this->form->validate();
  164. $data = $this->form->getData();
  165. /** validation sample
  166. if (empty($data->fieldX))
  167. {
  168. throw new Exception('The field fieldX is required');
  169. }
  170. **/
  171. $uniqid = !empty($data->detail_uniqid) ? $data->detail_uniqid : uniqid();
  172. $grid_data = [];
  173. $grid_data['uniqid'] = $uniqid;
  174. $grid_data['id'] = $data->detail_id;
  175. $grid_data['disciplina'] = $data->detail_disciplina;
  176. $grid_data['unid_1'] = $data->detail_unid_1;
  177. $grid_data['unid_2'] = $data->detail_unid_2;
  178. $grid_data['unid_3'] = $data->detail_unid_3;
  179. $grid_data['unid_4'] = $data->detail_unid_4;
  180. $grid_data['nota_rec'] = $data->detail_nota_rec;
  181. // insert row dynamically
  182. $row = $this->detail_list->addItem( (object) $grid_data );
  183. $row->id = $uniqid;
  184. TDataGrid::replaceRowById('NotasItem_list', $uniqid, $row);
  185. // clear detail form fields
  186. $data->detail_uniqid = '';
  187. $data->detail_id = '';
  188. $data->detail_disciplina = 'Português';
  189. $data->detail_unid_1 = '0.00';
  190. $data->detail_unid_2 = '0.00';
  191. $data->detail_unid_3 = '0.00';
  192. $data->detail_unid_4 = '0.00';
  193. $data->detail_nota_rec = '0.00';
  194. // send data, do not fire change/exit events
  195. TForm::sendData( 'form_Notas', $data, false, false );
  196. }
  197. catch (Exception $e)
  198. {
  199. $this->form->setData( $this->form->getData());
  200. new TMessage('error', $e->getMessage());
  201. }
  202. }
  203. /**
  204. * Edit detail item
  205. * @param $param URL parameters
  206. */
  207. public static function onDetailEdit( $param )
  208. {
  209. $data = new stdClass;
  210. $data->detail_uniqid = $param['uniqid'];
  211. $data->detail_id = $param['id'];
  212. $data->detail_disciplina = $param['disciplina'];
  213. $data->detail_unid_1 = $param['unid_1'];
  214. $data->detail_unid_2 = $param['unid_2'];
  215. $data->detail_unid_3 = $param['unid_3'];
  216. $data->detail_unid_4 = $param['unid_4'];
  217. $data->detail_nota_rec = $param['nota_rec'];
  218. // send data, do not fire change/exit events
  219. TForm::sendData( 'form_Notas', $data, false, false );
  220. }
  221. /**
  222. * Delete detail item
  223. * @param $param URL parameters
  224. */
  225. public static function onDetailDelete( $param )
  226. {
  227. // clear detail form fields
  228. $data = new stdClass;
  229. $data->detail_uniqid = '';
  230. $data->detail_id = '';
  231. $data->detail_disciplina = 'Português';
  232. $data->detail_unid_1 = '0.00';
  233. $data->detail_unid_2 = '0.00';
  234. $data->detail_unid_3 = '0.00';
  235. $data->detail_unid_4 = '0.00';
  236. $data->detail_nota_rec = '0.00';
  237. // send data, do not fire change/exit events
  238. TForm::sendData( 'form_Notas', $data, false, false );
  239. // remove row
  240. TDataGrid::removeRowById('NotasItem_list', $param['uniqid']);
  241. }
  242. /**
  243. * Load Master/Detail data from database to form
  244. */
  245. public function onEdit($param)
  246. {
  247. try
  248. {
  249. TTransaction::open('cp');
  250. if (isset($param['key']))
  251. {
  252. $key = $param['key'];
  253. $object = new Notas($key);
  254. $items = NotasItem::where('notas_id', '=', $key)->load();
  255. foreach( $items as $item )
  256. {
  257. $item->uniqid = uniqid();
  258. $row = $this->detail_list->addItem( $item );
  259. $row->id = $item->uniqid;
  260. }
  261. $this->form->setData($object);
  262. TTransaction::close();
  263. }
  264. else
  265. {
  266. $this->form->clear(TRUE);
  267. }
  268. }
  269. catch (Exception $e) // in case of exception
  270. {
  271. new TMessage('error', $e->getMessage());
  272. TTransaction::rollback();
  273. }
  274. }
  275. /**
  276. * Save the Master/Detail data from form to database
  277. */
  278. public function onSave($param)
  279. {
  280. try
  281. {
  282. // open a transaction with database
  283. TTransaction::open('cp');
  284. $data = $this->form->getData();
  285. $this->form->validate();
  286. $master = new Notas;
  287. $master->fromArray( (array) $data);
  288. $master->store();
  289. NotasItem::where('notas_id', '=', $master->id)->delete();
  290. if( $param['NotasItem_list_disciplina'] )
  291. {
  292. foreach( $param['NotasItem_list_disciplina'] as $key => $item_id )
  293. {
  294. $detail = new NotasItem;
  295. $detail->disciplina = $param['NotasItem_list_disciplina'][$key];
  296. $detail->unid_1 = $param['NotasItem_list_unid_1'][$key];
  297. $detail->unid_2 = $param['NotasItem_list_unid_2'][$key];
  298. $detail->unid_3 = $param['NotasItem_list_unid_3'][$key];
  299. $detail->unid_4 = $param['NotasItem_list_unid_4'][$key];
  300. $detail->nota_rec = $param['NotasItem_list_nota_rec'][$key];
  301. //$detail->media_fin_rec = $param['NotasItem_list_media_fin_rec'][$key];
  302. $detail->notas_id = $master->id;
  303. $detail->store();
  304. }
  305. }
  306. TTransaction::close(); // close the transaction
  307. TForm::sendData('form_Notas', (object) ['id' => $master->id]);
  308. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  309. }
  310. catch (Exception $e) // in case of exception
  311. {
  312. new TMessage('error', $e->getMessage());
  313. $this->form->setData( $this->form->getData() ); // keep form data
  314. TTransaction::rollback();
  315. }
  316. }
  317. }
  318. ?>

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 (2)


NR

Você está comparando 2 strings fixas. O resultado sempre será true.
 
  1. <?php
  2. if ('nota_rec' != '0.00'){
  3. ?>

Essa definição está no construtor, lembre que ele é chamado uma única vez a cada execução, então se a ideia é comparar para cada registro da grid, não vai funcionar.
Acredito que possa usar um transformer nessa coluna pra fazer a verificação.
ET

Nataniel, modifiquei o código desta maneira:

 
  1. <?php
  2. $col_uniqid = new TDataGridColumn('uniqid', 'Uniqid', 'center');
  3. $col_id = new TDataGridColumn('id', 'Id', 'center');
  4. $col_disciplina = new TDataGridColumn('disciplina', 'Disciplina', 'center', 100);
  5. $col_unid_1 = new TDataGridColumn('unid_1', 'Unidade 1', 'center', 100);
  6. $col_unid_2 = new TDataGridColumn('unid_2', 'Unidade 2', 'center', 100);
  7. $col_unid_3 = new TDataGridColumn('unid_3', 'Unidade 3', 'center', 100);
  8. $col_unid_4 = new TDataGridColumn('unid_4', 'Unidade 4', 'center', 100);
  9. $col_media_anual = new TDataGridColumn('= ( {unid_1} + {unid_2} + {unid_3} + {unid_4} ) / 4', 'Média anual', 'center', 100);
  10. $col_nota_rec = new TDataGridColumn('nota_rec', 'Nota de Recuperação', 'center', 100);
  11. $col_media_pos_rec_final = new TDataGridColumn('column_media_pos_rec_final', 'Média pós recuperação final', 'center', 100);
  12. $col_media_pos_rec_final->setTransformer( function ($media_pos_rec_final, $object, $row){
  13. if($nota_rec == 0)
  14. {
  15. return 1;
  16. }
  17. else
  18. {
  19. return 2;
  20. }
  21. return $media_pos_rec_final;
  22. });
  23. $this->detail_list->addColumn($col_uniqid)->setVisibility(false);
  24. $this->detail_list->addColumn($col_id)->setVisibility(false);
  25. $this->detail_list->addColumn($col_disciplina);
  26. $this->detail_list->addColumn($col_unid_1);
  27. $this->detail_list->addColumn($col_unid_2);
  28. $this->detail_list->addColumn($col_unid_3);
  29. $this->detail_list->addColumn($col_unid_4);
  30. $this->detail_list->addColumn($col_media_anual);
  31. $this->detail_list->addColumn($col_nota_rec);
  32. $this->detail_list->addColumn($col_media_pos_rec_final);
  33. ?>


Mas é retornado o valor 1 para a verificação com o if.