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.
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.
- <?php
- class AdmissaoUtbForm extends TPage
- {
- protected $form; // form
- protected $fieldlist;
- function __construct($param)
- {
- parent::__construct($param);
- TTransaction::open('sispessoal');
- $func = new Funcionario(TSession::getValue('Admissao_filter_funcionario_id'));
- TTransaction::close();
- $this->form = new TForm('form_Admissao');
- $panel_master = new TPanelGroup( 'Admissão de ' .$func->nome);
- $vbox = new TVBox;
- $vbox->style = 'width: 100%';
- $this->form->add($panel_master);
- $panel_master->add($vbox);
- $table_general = new TTable;
- $table_general->width = '100%';
- $frame_general = new TFrame;
- $frame_general->class = 'tframe tframe-custom';
- $frame_general->setLegend('Dados da Admissão');
- $frame_general->style = 'background:whiteSmoke';
- $frame_general->add($table_general);
- $frame_details = new TFrame;
- $frame_details->class = 'tframe tframe-custom';
- $frame_details->setLegend('Unidades de Trabalho desta admissão');
- $vbox->add( $frame_general );
- $vbox->add( $frame_details );
- // master fields
- $id = new TEntry('id');
- $funcionario_id = new TDBUniqueSearch('funcionario_id', 'sispessoal', 'Funcionario', 'id', 'nome', 'nome');
- $matricula = new TEntry('matricula');
- $tipoadmissao_id = new TDBCombo('tipoadmissao_id', 'sispessoal', 'Tipoadmissao', 'id', 'nome', 'nome');
- $salario = new TEntry('salario');
- $portaria = new TEntry('portaria');
- $data_admissao = new TDate('data_admissao');
- $jornada_id = new TDBCombo('jornada_id', 'sispessoal', 'Jornada', 'id', 'nome', 'nome');
- $tipocargo_id = new TDBCombo('tipocargo_id', 'sispessoal', 'Tipocargo', 'id', 'nome', 'nome');
- $cargo_id = new TDBCombo('cargo_id', 'sispessoal', 'Cargo', 'id', 'nome', 'nome');
- $setor_id = new TDBCombo('setor_id', 'sispessoal', 'Setor', 'id', 'nome', 'nome');
- $disciplina_id = new TDBCombo('disciplina_id', 'sispessoal', 'Disciplina', 'id', 'nome', 'nome');
- $lotacao_id = new TDBCombo('lotacao_id', 'sispessoal', 'Lotacao', 'id', 'nome', 'nome');
- $tipoafastamento_id = new TDBCombo('tipoafastamento_id', 'sispessoal', 'Tipoafastamento', 'id', 'nome', 'nome');
- $afastado = new TRadioGroup('afastado');
- $data_afastamento = new TDate('data_afastamento');
- $remunerado = new TRadioGroup('remunerado');
- // sizes
- $id->setSize('15%');
- $funcionario_id->setSize('100%');
- $matricula->setSize('100%');
- $tipoadmissao_id->setSize('100%');
- $salario->setSize('100%');
- $portaria->setSize('100%');
- $data_admissao->setSize('100%');
- $jornada_id->setSize('100%');
- $tipocargo_id->setSize('100%');
- $cargo_id->setSize('100%');
- $setor_id->setSize('100%');
- $disciplina_id->setSize('100%');
- $lotacao_id->setSize('100%');
- $afastado->setSize('100%');
- $tipoafastamento_id->setSize('100%');
- $data_afastamento->setSize('100%');
- $remunerado->setSize('100%');
- $options_afastado = ['S'=>'Sim', 'N'=>'Não'];
- $afastado->addItems($options_afastado);
- $afastado->setLayout('horizontal');
- $options_remunerado = ['D'=>'Demitido', 'R'=>'Remunerado'];
- $remunerado->addItems($options_remunerado);
- $remunerado->setLayout('horizontal');
- $tipoadmissao_id->enableSearch();
- $jornada_id->enableSearch();
- $tipocargo_id->enableSearch();
- $cargo_id->enableSearch();
- $setor_id->enableSearch();
- $disciplina_id->enableSearch();
- $lotacao_id->enableSearch();
- $data_admissao->setMask('dd/mm/yyyy', false);
- $data_admissao->setDatabaseMask('yyyy-mm-dd');
- $data_afastamento->setMask('dd/mm/yyyy', false);
- $data_afastamento->setDatabaseMask('yyyy-mm-dd');
- $salario->setNumericMask(2, ',', '.', true);
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- $funcionario_id->setEditable(FALSE);
- }
- // add form fields to be handled by form
- $this->form->addField($id);
- $this->form->addField($funcionario_id);
- $this->form->addField($matricula);
- $this->form->addField($tipoadmissao_id);
- $this->form->addField($salario);
- $this->form->addField($portaria);
- $this->form->addField($data_admissao);
- $this->form->addField($jornada_id);
- $this->form->addField($tipocargo_id);
- $this->form->addField($cargo_id);
- $this->form->addField($setor_id);
- $this->form->addField($disciplina_id);
- $this->form->addField($lotacao_id);
- $this->form->addField($afastado);
- $this->form->addField($tipoafastamento_id);
- $this->form->addField($data_afastamento);
- $this->form->addField($remunerado);
- // add form fields to the screen
- $table_general->addRowSet( new TLabel('Id'), $id );
- $table_general->addRowSet( new TLabel('Funcionário'), $funcionario_id );
- $table_general->addRowSet( new TLabel('Matrícula', 'red'), $matricula );
- $table_general->addRowSet( new TLabel('Tipo Admissão', 'red'), $tipoadmissao_id );
- $table_general->addRowSet( new TLabel('Data Admissão'), $data_admissao );
- $table_general->addRowSet( new TLabel('Salário'), $salario );
- $table_general->addRowSet( new TLabel('Portaria'), $portaria );
- $table_general->addRowSet( new TLabel('Jornada', 'red'), $jornada_id );
- $table_general->addRowSet( new TLabel('Tipo Cargo', 'red'), $tipocargo_id );
- $table_general->addRowSet( new TLabel('Cargo', 'red'), $cargo_id );
- $table_general->addRowSet( new TLabel('Setor'), $setor_id );
- $table_general->addRowSet( new TLabel('Disciplina'), $disciplina_id );
- $table_general->addRowSet( new TLabel('Lotação', 'red'), $lotacao_id );
- $table_general->addRowSet( new TLabel('Afastado', 'red'), $afastado );
- $table_general->addRowSet( new TLabel('Tipo Afastamento'), $tipoafastamento_id );
- $table_general->addRowSet( new TLabel('Data Afastamento'), $data_afastamento );
- $table_general->addRowSet( new TLabel('Condição'), $remunerado );
- // detail fields
- $this->fieldlist = new TFieldList;
- $this->fieldlist->style = 'width:100%';
- $frame_details->add($this->fieldlist);
- $utb_id = new TDBCombo('list_utb_id[]', 'sispessoal', 'Utb', 'id', 'nome', 'nome');
- $utb_id->setSize('100%');
- $utb_id->enableSearch();
- $this->fieldlist->addField( '', $utb_id);
- $this->form->addField($utb_id);
- $save_button = TButton::create('save', array($this, 'onSave'), _t('Save'), 'fa:save');
- $save_button->class = 'btn btn-sm btn-primary';
- $new_button = TButton::create('new', array($this, 'onClear'), _t('Clear'), 'fa:eraser red');
- $voltar_button=new TButton('Voltar');
- $voltar_button->setAction($action1 = new TAction(array('AdmissaoList', 'onReload')), 'Voltar');
- $voltar_button->setImage('fa:undo');
- $voltar_button->class = 'btn btn-sm btn-warning';
- $action1->setParameter('id', TSession::getValue('Admissao_filter_funcionario_id'));
- $this->form->addField($save_button);
- $this->form->addField($new_button);
- $this->form->addField($voltar_button);
- $afastado->setChangeAction(new TAction(array($this,'onAfastadoChange')));
- $panel_master->addFooter( THBox::pack($save_button, $new_button, $voltar_button) );
- // create the page container
- $container = new TVBox;
- $container->style = 'width: 100%';
- $container->add($this->form);
- parent::add($container);
- }
- static public function onAfastadoChange($params)
- {
- if( $params['afastado'] == 'N')
- {
- TDBCombo::disableField('form_Admissao', 'tipoafastamento_id');
- TDate::disableField('form_Admissao', 'data_afastamento');
- TRadioGroup::disableField('form_Admissao', 'remunerado');
- }
- else
- {
- TDBCombo::enableField('form_Admissao', 'tipoafastamento_id');
- TDate::enableField('form_Admissao', 'data_afastamento');
- TRadioGroup::enableField('form_Admissao', 'remunerado');
- }
- }
- function onEdit($param)
- {
- try
- {
- TTransaction::open('sispessoal');
- if (isset($param['key']))
- {
- $key = $param['key'];
- $object = new Admissao($key);
- $this->onAfastadoChange([ 'afastado' => $object->afastado]);
- $this->form->setData($object);
- $items = AdmissaoUtb::where('admissao_id', '=', $key)->load();
- $this->fieldlist->addHeader();
- if ($items)
- {
- foreach($items as $item )
- {
- $detail = new stdClass;
- $detail->list_utb_id = $item->utb_id;
- $this->fieldlist->addDetail($detail);
- }
- $this->fieldlist->addCloneAction();
- }
- else
- {
- $this->onClear($param);
- }
- TTransaction::close(); // close transaction
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- public function onClear($param)
- {
- $this->fieldlist->addHeader();
- $this->fieldlist->addDetail( new stdClass );
- $this->fieldlist->addCloneAction();
- }
- public static function tofloat($num) {
- $dotPos = strrpos($num, '.');
- $commaPos = strrpos($num, ',');
- $sep = (($dotPos > $commaPos) && $dotPos) ? $dotPos :
- ((($commaPos > $dotPos) && $commaPos) ? $commaPos : false);
- if (!$sep) {
- return floatval(preg_replace("/[^0-9]/", "", $num));
- }
- return floatval(
- preg_replace("/[^0-9]/", "", substr($num, 0, $sep)) . '.' .
- preg_replace("/[^0-9]/", "", substr($num, $sep+1, strlen($num)))
- );
- }
- public static function onSave($param)
- {
- try
- {
- if (empty($param['matricula']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Matrícula'));
- }
- if (empty($param['tipoadmissao_id']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Tipo Admissão'));
- }
- if (empty($param['jornada_id']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Jornada'));
- }
- if (empty($param['tipocargo_id']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Tipo Cargo'));
- }
- if (empty($param['cargo_id']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Cargo'));
- }
- if (empty($param['lotacao_id']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Lotação'));
- }
- if (empty($param['afastado']))
- {
- throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Afastado'));
- }
- $errors = array_filter($param['list_utb_id']);
- if (empty($errors))
- {
- throw new Exception('Pelo menos uma unidade de trabalho é obrigatória!');
- }
- TTransaction::open('sispessoal');
- $id = (int) $param['id'];
- $master = new Admissao;
- $master->fromArray( $param );
- $master->data_admissao = TDate::date2us($master->data_admissao);
- $master->data_afastamento = TDate::date2us($master->data_afastamento);
- $master->salario = self::tofloat($master->salario);
- $master->store(); // save master object
- // delete details
- AdmissaoUtb::where('admissao_id', '=', $master->id)->delete();
- if( !empty($param['list_utb_id']) AND is_array($param['list_utb_id']) )
- {
- foreach( $param['list_utb_id'] as $row => $utb_id)
- {
- if (!empty($utb_id))
- {
- $detail = new AdmissaoUtb;
- $detail->admissao_id = $master->id;
- $detail->utb_id = $param['list_utb_id'][$row];
- $detail->store();
- }
- }
- }
- $data = new stdClass;
- $data->id = $master->id;
- TForm::sendData('form_Admissao', $data);
- TTransaction::close(); // close the transaction
- $action = new TAction( array('AdmissaoList', 'onReload') );
- $action->setParameter('id', TSession::getValue('Admissao_filter_funcionario_id'));
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'), $action);
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TTransaction::rollback();
- }
- }
- }
- ?>
Nataniel,
Obrigado pela ajuda.
Neste caso como eu passaria um parâmetro para o método?