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

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 (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.