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



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