Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Botão na tela master/detalhe Pessoal, Como posso adicionar um botão com action num formulário master/detalhe, no caso em cada linha do campo detalhe. Não vi opção no código abaixo gerado pelo Studio. ...
CJ
Botão na tela master/detalhe  
Pessoal,

Como posso adicionar um botão com action num formulário master/detalhe, no caso em cada linha do campo detalhe. Não vi opção no código abaixo gerado pelo Studio.

  1. <?php
  2. class AdmissaoUtbForm extends TPage
  3. {
  4.     protected $form// form
  5.     protected $fieldlist;
  6.     
  7.     function __construct($param)
  8.     {
  9.         parent::__construct($param);
  10.         
  11.         TTransaction::open('sispessoal');
  12.         $func = new Funcionario(TSession::getValue('Admissao_filter_funcionario_id'));                
  13.         TTransaction::close();
  14.         
  15.         $this->form = new TForm('form_Admissao');
  16.         
  17.         $panel_master = new TPanelGroup'Admissão de ' .$func->nome);
  18.         $vbox = new TVBox;
  19.         $vbox->style 'width: 100%';
  20.         $this->form->add($panel_master);
  21.         $panel_master->add($vbox);
  22.         
  23.         $table_general = new TTable;
  24.         $table_general->width '100%';
  25.         
  26.         $frame_general = new TFrame;
  27.         $frame_general->class 'tframe tframe-custom';
  28.         $frame_general->setLegend('Dados da Admissão');
  29.         $frame_general->style 'background:whiteSmoke';
  30.         $frame_general->add($table_general);
  31.         
  32.         $frame_details = new TFrame;
  33.         $frame_details->class 'tframe tframe-custom';
  34.         $frame_details->setLegend('Unidades de Trabalho desta admissão');
  35.         
  36.         $vbox->add$frame_general );
  37.         $vbox->add$frame_details );
  38.         
  39.         // master fields
  40.         $id = new TEntry('id');
  41.         $funcionario_id = new TDBUniqueSearch('funcionario_id''sispessoal''Funcionario''id''nome''nome');
  42.         $matricula = new TEntry('matricula');
  43.         $tipoadmissao_id = new TDBCombo('tipoadmissao_id''sispessoal''Tipoadmissao''id''nome''nome');
  44.         $salario = new TEntry('salario');
  45.         $portaria = new TEntry('portaria');
  46.         $data_admissao = new TDate('data_admissao');
  47.         $jornada_id = new TDBCombo('jornada_id''sispessoal''Jornada''id''nome''nome');
  48.         $tipocargo_id = new TDBCombo('tipocargo_id''sispessoal''Tipocargo''id''nome''nome');
  49.         $cargo_id = new TDBCombo('cargo_id''sispessoal''Cargo''id''nome''nome');
  50.         $setor_id = new TDBCombo('setor_id''sispessoal''Setor''id''nome''nome');
  51.         $disciplina_id = new TDBCombo('disciplina_id''sispessoal''Disciplina''id''nome''nome');
  52.         $lotacao_id = new TDBCombo('lotacao_id''sispessoal''Lotacao''id''nome''nome');
  53.         $tipoafastamento_id = new TDBCombo('tipoafastamento_id''sispessoal''Tipoafastamento''id''nome''nome');
  54.         $afastado = new TRadioGroup('afastado');
  55.         $data_afastamento = new TDate('data_afastamento');
  56.         $remunerado = new TRadioGroup('remunerado');
  57.         // sizes
  58.         $id->setSize('15%');
  59.         $funcionario_id->setSize('100%');
  60.         $matricula->setSize('100%');
  61.         $tipoadmissao_id->setSize('100%');
  62.         $salario->setSize('100%');
  63.         $portaria->setSize('100%');
  64.         $data_admissao->setSize('100%');
  65.         $jornada_id->setSize('100%');
  66.         $tipocargo_id->setSize('100%');
  67.         $cargo_id->setSize('100%');
  68.         $setor_id->setSize('100%');
  69.         $disciplina_id->setSize('100%');
  70.         $lotacao_id->setSize('100%');
  71.         $afastado->setSize('100%');
  72.         $tipoafastamento_id->setSize('100%');
  73.         $data_afastamento->setSize('100%');
  74.         $remunerado->setSize('100%');
  75.         
  76.         $options_afastado = ['S'=>'Sim''N'=>'Não'];
  77.         $afastado->addItems($options_afastado);
  78.         $afastado->setLayout('horizontal');
  79.         $options_remunerado = ['D'=>'Demitido''R'=>'Remunerado'];
  80.         $remunerado->addItems($options_remunerado);
  81.         $remunerado->setLayout('horizontal');
  82.         
  83.         $tipoadmissao_id->enableSearch();
  84.         $jornada_id->enableSearch();
  85.         $tipocargo_id->enableSearch();
  86.         $cargo_id->enableSearch();
  87.         $setor_id->enableSearch();
  88.         $disciplina_id->enableSearch();
  89.         $lotacao_id->enableSearch();
  90.         $data_admissao->setMask('dd/mm/yyyy'false);
  91.         $data_admissao->setDatabaseMask('yyyy-mm-dd');       
  92.         $data_afastamento->setMask('dd/mm/yyyy'false);
  93.         $data_afastamento->setDatabaseMask('yyyy-mm-dd');
  94.         
  95.         $salario->setNumericMask(2',''.'true);       
  96.         if (!empty($id))
  97.         {
  98.             $id->setEditable(FALSE);
  99.             $funcionario_id->setEditable(FALSE);
  100.         }
  101.         
  102.         // add form fields to be handled by form
  103.         $this->form->addField($id);
  104.         $this->form->addField($funcionario_id);
  105.         $this->form->addField($matricula);
  106.         $this->form->addField($tipoadmissao_id);
  107.         $this->form->addField($salario);
  108.         $this->form->addField($portaria);
  109.         $this->form->addField($data_admissao);
  110.         $this->form->addField($jornada_id);
  111.         $this->form->addField($tipocargo_id);
  112.         $this->form->addField($cargo_id);
  113.         $this->form->addField($setor_id);
  114.         $this->form->addField($disciplina_id);
  115.         $this->form->addField($lotacao_id);
  116.         $this->form->addField($afastado);
  117.         $this->form->addField($tipoafastamento_id);
  118.         $this->form->addField($data_afastamento);
  119.         $this->form->addField($remunerado);
  120.         
  121.         // add form fields to the screen
  122.         $table_general->addRowSet( new TLabel('Id'), $id );
  123.         $table_general->addRowSet( new TLabel('Funcionário'), $funcionario_id );
  124.         $table_general->addRowSet( new TLabel('Matrícula''red'), $matricula );
  125.         $table_general->addRowSet( new TLabel('Tipo Admissão''red'), $tipoadmissao_id );
  126.         $table_general->addRowSet( new TLabel('Data Admissão'), $data_admissao );
  127.         $table_general->addRowSet( new TLabel('Salário'), $salario );
  128.         $table_general->addRowSet( new TLabel('Portaria'), $portaria );        
  129.         $table_general->addRowSet( new TLabel('Jornada''red'), $jornada_id );
  130.         $table_general->addRowSet( new TLabel('Tipo Cargo''red'), $tipocargo_id );
  131.         $table_general->addRowSet( new TLabel('Cargo''red'), $cargo_id );
  132.         $table_general->addRowSet( new TLabel('Setor'), $setor_id );
  133.         $table_general->addRowSet( new TLabel('Disciplina'), $disciplina_id );
  134.         $table_general->addRowSet( new TLabel('Lotação''red'), $lotacao_id );
  135.         $table_general->addRowSet( new TLabel('Afastado''red'), $afastado );
  136.         $table_general->addRowSet( new TLabel('Tipo Afastamento'), $tipoafastamento_id );
  137.         $table_general->addRowSet( new TLabel('Data Afastamento'), $data_afastamento );
  138.         $table_general->addRowSet( new TLabel('Condição'), $remunerado );
  139.                
  140.         // detail fields
  141.         $this->fieldlist = new TFieldList;
  142.         $this->fieldlist->style 'width:100%';
  143.         $frame_details->add($this->fieldlist);
  144.         
  145.         $utb_id = new TDBCombo('list_utb_id[]''sispessoal''Utb''id''nome''nome');
  146.         $utb_id->setSize('100%');
  147.         
  148.         $utb_id->enableSearch();
  149.         $this->fieldlist->addField''$utb_id);
  150.         $this->form->addField($utb_id);
  151.         
  152.         $save_button TButton::create('save', array($this'onSave'),  _t('Save'), 'fa:save'); 
  153.         $save_button->class 'btn btn-sm btn-primary';       
  154.         $new_button  TButton::create('new',  array($this'onClear'), _t('Clear'),  'fa:eraser red');
  155.         
  156.         $voltar_button=new TButton('Voltar');
  157.         $voltar_button->setAction($action1 = new TAction(array('AdmissaoList''onReload')), 'Voltar');
  158.         $voltar_button->setImage('fa:undo');
  159.         $voltar_button->class 'btn btn-sm btn-warning';
  160.         $action1->setParameter('id'TSession::getValue('Admissao_filter_funcionario_id'));
  161.         
  162.         $this->form->addField($save_button);
  163.         $this->form->addField($new_button);
  164.         $this->form->addField($voltar_button);
  165.         
  166.         $afastado->setChangeAction(new TAction(array($this,'onAfastadoChange')));
  167.                
  168.         $panel_master->addFooterTHBox::pack($save_button$new_button$voltar_button) );
  169.         
  170.         // create the page container
  171.         $container = new TVBox;
  172.         $container->style 'width: 100%';
  173.         $container->add($this->form);
  174.         parent::add($container);
  175.     }
  176.     
  177.     static public function onAfastadoChange($params)
  178.     {
  179.         if( $params['afastado'] == 'N')
  180.         { 
  181.             TDBCombo::disableField('form_Admissao''tipoafastamento_id');
  182.             TDate::disableField('form_Admissao''data_afastamento');
  183.             TRadioGroup::disableField('form_Admissao''remunerado');            
  184.         }
  185.         else
  186.         {
  187.             TDBCombo::enableField('form_Admissao''tipoafastamento_id');
  188.             TDate::enableField('form_Admissao''data_afastamento');
  189.             TRadioGroup::enableField('form_Admissao''remunerado');                        
  190.         }                    
  191.     }
  192.     
  193.     function onEdit($param)
  194.     {
  195.         
  196.         try
  197.         {
  198.             TTransaction::open('sispessoal');
  199.             
  200.             if (isset($param['key']))
  201.             {
  202.                 $key $param['key'];
  203.                 
  204.                 $object = new Admissao($key);
  205.                 $this->onAfastadoChange([ 'afastado' => $object->afastado]);
  206.                 
  207.                 $this->form->setData($object);
  208.                 
  209.                 $items  AdmissaoUtb::where('admissao_id''='$key)->load();
  210.                 
  211.                 $this->fieldlist->addHeader();
  212.                 
  213.                 if ($items)
  214.                 {
  215.                     foreach($items  as $item )
  216.                     {
  217.                         $detail = new stdClass;
  218.                         $detail->list_utb_id $item->utb_id;
  219.                         $this->fieldlist->addDetail($detail);
  220.                     }
  221.                     
  222.                     $this->fieldlist->addCloneAction();
  223.                 }
  224.                 else
  225.                 {
  226.                     $this->onClear($param);
  227.                 }
  228.                 
  229.                 TTransaction::close(); // close transaction
  230.             }
  231.         }
  232.         catch (Exception $e// in case of exception
  233.         {
  234.             new TMessage('error'$e->getMessage());
  235.             TTransaction::rollback();
  236.         }
  237.     }
  238.     
  239.     public function onClear($param)
  240.     {
  241.         $this->fieldlist->addHeader();
  242.         $this->fieldlist->addDetail( new stdClass );
  243.         $this->fieldlist->addCloneAction();
  244.     }
  245.     
  246.     public static function tofloat($num) {
  247.         $dotPos strrpos($num'.');
  248.         $commaPos strrpos($num',');
  249.         $sep = (($dotPos $commaPos) && $dotPos) ? $dotPos 
  250.             ((($commaPos $dotPos) && $commaPos) ? $commaPos false);
  251.        
  252.         if (!$sep) {
  253.             return floatval(preg_replace("/[^0-9]/"""$num));
  254.         } 
  255.     
  256.         return floatval(
  257.             preg_replace("/[^0-9]/"""substr($num0$sep)) . '.' .
  258.             preg_replace("/[^0-9]/"""substr($num$sep+1strlen($num)))
  259.         );
  260.     }
  261.     
  262.     public static function onSave($param)
  263.     {
  264.         try
  265.         {
  266.             if (empty($param['matricula']))
  267.             {
  268.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Matrícula'));
  269.             }
  270.             if (empty($param['tipoadmissao_id']))
  271.             {
  272.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Tipo Admissão'));
  273.             }
  274.             if (empty($param['jornada_id']))
  275.             {
  276.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Jornada'));
  277.             }
  278.             if (empty($param['tipocargo_id']))
  279.             {
  280.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Tipo Cargo'));
  281.             }
  282.             if (empty($param['cargo_id']))
  283.             {
  284.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Cargo'));
  285.             }
  286.             if (empty($param['lotacao_id']))
  287.             {
  288.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Lotação'));
  289.             }
  290.             if (empty($param['afastado']))
  291.             {
  292.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required''Afastado'));
  293.             }
  294.             
  295.             $errors array_filter($param['list_utb_id']);
  296.             
  297.             if (empty($errors))
  298.             {
  299.                 throw new Exception('Pelo menos uma unidade de trabalho é obrigatória!');
  300.             }                        
  301.             
  302.             TTransaction::open('sispessoal');
  303.             
  304.             $id = (int) $param['id'];
  305.             $master = new Admissao;
  306.             $master->fromArray$param );
  307.             
  308.             $master->data_admissao TDate::date2us($master->data_admissao);
  309.             $master->data_afastamento TDate::date2us($master->data_afastamento);
  310.             $master->salario self::tofloat($master->salario);
  311.             
  312.             $master->store(); // save master object
  313.             
  314.             // delete details
  315.             AdmissaoUtb::where('admissao_id''='$master->id)->delete();
  316.             
  317.             if( !empty($param['list_utb_id']) AND is_array($param['list_utb_id']) )
  318.             {
  319.                 foreach( $param['list_utb_id'] as $row => $utb_id)
  320.                 {
  321.                     if (!empty($utb_id))
  322.                     {
  323.                         $detail = new AdmissaoUtb;
  324.                         $detail->admissao_id $master->id;
  325.                         $detail->utb_id $param['list_utb_id'][$row];
  326.                         $detail->store();
  327.                     }
  328.                 }
  329.             }
  330.             
  331.             $data = new stdClass;
  332.             $data->id $master->id;
  333.             TForm::sendData('form_Admissao'$data);
  334.             TTransaction::close(); // close the transaction
  335.             
  336.             $action = new TAction( array('AdmissaoList''onReload') );       
  337.             $action->setParameter('id'TSession::getValue('Admissao_filter_funcionario_id'));                                            
  338.             
  339.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'), $action);
  340.         }
  341.         catch (Exception $e// in case of exception
  342.         {
  343.             new TMessage('error'$e->getMessage());
  344.             TTransaction::rollback();
  345.         }
  346.     }
  347. }
  348. ?>



Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (3)


NR

  1. <?php
  2. $button TButton::create('teste',array('classe','metodo'),'Teste','fa:save');
  3. $this->fieldlist->addField''$button);
  4. ?>
CJ

Nataniel,

Obrigado pela ajuda.

Neste caso como eu passaria um parâmetro para o método?
NR

  1. <?php
  2. $button->getAction()->setParameter('parametro','valor');
  3. ?>