Ajuda com TDBMultiSearch. Boa tarde. Comprei o Livro, videos e estou estudando. Porém depois de tentar por semanas, resolvi pedir ajuda. Estou usando o TDBMultiSearch num form Master/Detalhe. Para Inclusão, está funcionando perfeito. Mas quando eu abro a tela para Editar, no Detalhe vem todos os campos certinhos, mas o TDBMultiSearch não consigo preencher com os dados da tabela. Print em anexo. Desde j�...
ML
Ajuda com TDBMultiSearch.  
Boa tarde. Comprei o Livro, videos e estou estudando. Porém depois de tentar por semanas, resolvi pedir ajuda.

Estou usando o TDBMultiSearch num form Master/Detalhe. Para Inclusão, está funcionando perfeito.

Mas quando eu abro a tela para Editar, no Detalhe vem todos os campos certinhos, mas o TDBMultiSearch não consigo preencher com os dados da tabela.
Print em anexo.

Desde já agradeço pela ajuda.
Abraço.

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


ML



 
  1. <?php
  2. /**
  3. * ConveniosTeste Master/Detail
  4. * @author <your name here>
  5. */
  6. class ConveniosForm extends TPage
  7. {
  8. protected $form; // form
  9. protected $table_details;
  10. protected $detail_row;
  11. /**
  12. * Class constructor
  13. * Creates the page and the registration form
  14. */
  15. function __construct($param)
  16. {
  17. parent::__construct($param);
  18. // creates the form
  19. $this->form = new TForm('form_ModelConvenios');
  20. $this->form->class = 'tform'; // CSS class
  21. $table_master = new TTable;
  22. $table_master->width = '100%';
  23. $table_master->addRowSet( new TLabel('Convênios'), '', '')->class = 'tformtitle';
  24. // add a table inside form
  25. $table_general = new TTable;
  26. $table_general->width = '100%';
  27. $frame_general = new TFrame;
  28. $frame_general->class = 'tframe tframe-custom';
  29. $frame_general->setLegend('Convênios');
  30. $frame_general->style = 'background:whiteSmoke';
  31. $frame_general->add($table_general);
  32. $frame_details = new TFrame;
  33. $frame_details->class = 'tframe tframe-custom';
  34. $frame_details->style = 'background:whiteSmoke';
  35. $frame_details->setLegend('Serviços autorizados para o Convênio');
  36. $frame_details->oid = 'frame_details';
  37. parent::include_css('app/resources/custom-frame.css');
  38. parent::include_css('app/resources/custom-notebook.css');
  39. parent::include_css('app/resources/custom-table.css');
  40. $table_master->addRow()->addCell( $frame_general )->colspan=2;
  41. $row = $table_master->addRow();
  42. $row->addCell( $frame_details );
  43. $this->form->add($table_master);
  44. // master fields
  45. $id = new TEntry('id');
  46. $descricao = new TEntry('descricao');
  47. $observacao = new TEntry('observacao');
  48. // sizes
  49. $id->setSize('100');
  50. $descricao->setSize('200');
  51. $observacao->setSize('200');
  52. $descricao->style = ('text-align:left;color:#00688B;font-weight:bold;font-size:16px;');
  53. $id->style = ('text-align:left;color:#00688B;font-weight:bold;font-size:16px;');
  54. $observacao->style = ('text-align:left;color:#00688B;font-weight:bold;font-size:14px;');
  55. if (!empty($id))
  56. {
  57. $id->setEditable(FALSE);
  58. }
  59. // add form fields to be handled by form
  60. $this->form->addField($id);
  61. $this->form->addField($descricao);
  62. $this->form->addField($observacao);
  63. // add form fields to the screen
  64. $table_general->addRowSet( new TLabel('Id'), $id );
  65. $table_general->addRowSet( new TLabel('Descricao'), $descricao );
  66. $table_general->addRowSet( new TLabel('Observacao'), $observacao );
  67. // detail
  68. $this->table_details = new TTable;
  69. $this->table_details-> width = '100%';
  70. $frame_details->add($this->table_details);
  71. $this->table_details->addSection('thead');
  72. $row = $this->table_details->addRow();
  73. // detail header
  74. $row->addCell( new TLabel('Serviço'));
  75. $row->addCell( new TLabel('Valor') );
  76. $row->addCell( new TLabel('Co Participacao') );
  77. $row->addCell( new TLabel('Ctafin Convenio') );
  78. $row->addCell( new TLabel('Ctafin Cliente') );
  79. $row->addCell( new TLabel('Empresa') );
  80. // create an action button (save)
  81. $save_button=new TButton('save');
  82. $save_button->setAction(new TAction(array($this, 'onSave')), _t('Save'));
  83. $save_button->setImage('ico_save.png');
  84. // create an new button (edit with no parameters)
  85. $new_button=new TButton('new');
  86. $new_button->setAction(new TAction(array($this, 'onClear')), _t('New'));
  87. $new_button->setLabel('Novo Convênio');
  88. $new_button->setImage('ico_new.png');
  89. $button = new TButton('show_hide');
  90. $button->class ='btn btn-warning btn-sm';
  91. $button->setLabel('Mostrar/Ocultar Serviços do Convênio');
  92. $button->addFunction("\$('[oid=frame_details]').slideToggle(); $(this).toggleClass( 'active' )");
  93. $frame_general->add($button);
  94. // define form fields
  95. $this->form->addField($save_button);
  96. $this->form->addField($new_button);
  97. $table_master->addRowSet( array($save_button, $new_button), '', '')->class = 'tformaction'; // CSS class
  98. $this->detail_row = 0;
  99. // create the page container
  100. $container = new TVBox;
  101. $container->style = 'width: 100%';
  102. $container->add($this->form);
  103. parent::add($container);
  104. }
  105. function onEdit($param)
  106. {
  107. try
  108. {
  109. TTransaction::open('SysClinicaWeb');
  110. if (isset($param['key']))
  111. {
  112. $key = $param['key'];
  113. $object = new ModelConvenios($key);
  114. $this->form->setData($object);
  115. $items = ConveniosxservicosModel::where('CONVENIO_ID', '=', $key)->load();
  116. $this->table_details->addSection('tbody');
  117. if ($items)
  118. {
  119. foreach($items as $item )
  120. {
  121. $this->addDetailRow($item);
  122. }
  123. // create add button
  124. $add = new TButton('clone');
  125. $add->setLabel('Incluir Serviço');
  126. $add->class ='btn btn-warning btn-sm';
  127. $add->setImage('fa:plus-circle green');
  128. $add->addFunction('ttable_clone_previous_row(this)');
  129. // add buttons in table
  130. $this->table_details->addRowSet([$add]);
  131. }
  132. else
  133. {
  134. $this->onClear($param);
  135. }
  136. TTransaction::close(); // close transaction
  137. }
  138. }
  139. catch (Exception $e) // in case of exception
  140. {
  141. new TMessage('error', $e->getMessage());
  142. TTransaction::rollback();
  143. }
  144. }
  145. /**
  146. * Add detail row
  147. */
  148. public function addDetailRow($item)
  149. {
  150. $uniqid = mt_rand(1000000, 9999999);
  151. // create fields
  152. $SERVICO_ID = new TDBMultiSearch('SERVICO_ID[]', 'SysClinicaWeb', 'ServicosModel', 'id', 'descricao');
  153. $SERVICO_ID->setMaxSize(1);
  154. $SERVICO_ID->setMinLength(1);
  155. $VALOR = new TEntry('VALOR[]');
  156. $CO_PARTICIPACAO = new TEntry('CO_PARTICIPACAO[]');
  157. $CTAFIN_CONVENIO = new TEntry('CTAFIN_CONVENIO[]');
  158. $CTAFIN_CLIENTE = new TEntry('CTAFIN_CLIENTE[]');
  159. $EMPRESA = new TEntry('EMPRESA[]');
  160. $CONVENIO_ID = new TEntry('CONVENIO_ID[]');
  161. $SERVICO_ID->style = ('text-align:left;color:#00688B;font-weight:;font-size:15px;');
  162. $VALOR->style = ('text-align:left;color:#00688B;font-weight:;font-size:15px;');
  163. $CO_PARTICIPACAO->style = ('text-align:left;color:#00688B;font-weight:;font-size:15px;');
  164. $CTAFIN_CLIENTE->style = ('text-align:left;color:#00688B;font-weight:;font-size:15px;');
  165. $CTAFIN_CONVENIO->style = ('text-align:left;color:#00688B;font-weight:;font-size:15px;');
  166. // set sizes
  167. $VALOR->setSize('145');
  168. $CO_PARTICIPACAO->setSize('100');
  169. $CTAFIN_CONVENIO->setSize('90');
  170. $CTAFIN_CLIENTE->setSize('90');
  171. $EMPRESA->setSize('40');
  172. $SERVICO_ID->setSize('300');
  173. $CONVENIO_ID->setSize('40');
  174. $VALOR->setNumericMask(2, '.', ',');
  175. $CO_PARTICIPACAO->setNumericMask(2, '.', ',');
  176. $EMPRESA->setEditable(FALSE);
  177. // set id's
  178. $SERVICO_ID->setId('SERVICO_ID_'.$uniqid);
  179. $VALOR->setId('VALOR_'.$uniqid);
  180. $CO_PARTICIPACAO->setId('CO_PARTICIPACAO_'.$uniqid);
  181. $CTAFIN_CONVENIO->setId('CTAFIN_CONVENIO_'.$uniqid);
  182. $CTAFIN_CLIENTE->setId('CTAFIN_CLIENTE_'.$uniqid);
  183. $EMPRESA->setId('EMPRESA_'.$uniqid);
  184. $CONVENIO_ID->setId('CONVENIO_ID_'.$uniqid);
  185. // set row counter
  186. $SERVICO_ID->{'data-row'} = $this->detail_row;
  187. $CONVENIO_ID->{'data-row'} = $this->detail_row;
  188. $VALOR->{'data-row'} = $this->detail_row;
  189. $CO_PARTICIPACAO->{'data-row'} = $this->detail_row;
  190. $CTAFIN_CONVENIO->{'data-row'} = $this->detail_row;
  191. $CTAFIN_CLIENTE->{'data-row'} = $this->detail_row;
  192. $EMPRESA->{'data-row'} = $this->detail_row;
  193. // set value
  194. // *********
  195. if (!empty($item->SERVICO_ID)) { $SERVICO_ID->setValue(array($item->SERVICO_ID=>'descricao') );}
  196. if (!empty($item->CONVENIO_ID)) { $CONVENIO_ID->setValue(array($item->CONVENIO_ID) );}
  197. if (!empty($item->VALOR)) { $VALOR->setValue( $item->VALOR ); }
  198. if (!empty($item->CO_PARTICIPACAO)) { $CO_PARTICIPACAO->setValue( $item->CO_PARTICIPACAO ); }
  199. if (!empty($item->CTAFIN_CONVENIO)) { $CTAFIN_CONVENIO->setValue( $item->CTAFIN_CONVENIO ); }
  200. if (!empty($item->CTAFIN_CLIENTE)) { $CTAFIN_CLIENTE->setValue( $item->CTAFIN_CLIENTE ); }
  201. if (!empty($item->EMPRESA)) { $EMPRESA->setValue( $item->EMPRESA ); }
  202. // create delete button
  203. $del = new TImage('fa:trash-o red');
  204. $del->onclick = 'ttable_remove_row(this)';
  205. $row = $this->table_details->addRow();
  206. $row->{'data-row'} = $this->detail_row;
  207. // add cells
  208. $row->addCell($SERVICO_ID);
  209. $row->addCell($VALOR);
  210. $row->addCell($CO_PARTICIPACAO);
  211. $row->addCell($CTAFIN_CONVENIO);
  212. $row->addCell($CTAFIN_CLIENTE);
  213. $row->addCell($EMPRESA);
  214. // $row->addCell($CONVENIO_ID);
  215. $row->addCell( $del );
  216. // add form field
  217. $this->form->addField($SERVICO_ID);
  218. $this->form->addField($VALOR);
  219. $this->form->addField($CO_PARTICIPACAO);
  220. $this->form->addField($CTAFIN_CONVENIO);
  221. $this->form->addField($CTAFIN_CLIENTE);
  222. $this->form->addField($EMPRESA);
  223. $this->form->addField($CONVENIO_ID);
  224. $this->detail_row ++;
  225. }
  226. /**
  227. * Clear form
  228. */
  229. public function onClear($param)
  230. {
  231. $this->table_details->addSection('tbody');
  232. $this->addDetailRow( new stdClass );
  233. // create add button
  234. $add = new TButton('clone');
  235. $add->setLabel('Incluir Serviço');
  236. $add->setImage('fa:plus-circle green');
  237. $add->class ='btn btn-warning btn-sm';
  238. $add->addFunction('ttable_clone_previous_row(this)');
  239. // add buttons in table
  240. $this->table_details->addRowSet([$add]);
  241. }
  242. /**
  243. * Save the ModelConvenios and the ConveniosxservicosModel's
  244. */
  245. public static function onSave($param)
  246. {
  247. try
  248. {
  249. TTransaction::open('SysClinicaWeb');
  250. $id = (int) $param['id'];
  251. $master = new ModelConvenios;
  252. $master->fromArray( $param);
  253. $master->store(); // save master object
  254. // delete details
  255. ConveniosxservicosModel::where('CONVENIO_ID', '=', $master->id)->delete();
  256. if( !empty($param['VALOR']) AND is_array($param['VALOR']) )
  257. {
  258. foreach( $param['VALOR'] as $row => $VALOR)
  259. {
  260. if (!empty($VALOR))
  261. {
  262. $detail = new ConveniosxservicosModel;
  263. $detail->CONVENIO_ID = $master->id;
  264. $detail->VALOR = $param['VALOR'][$row];
  265. $detail->CO_PARTICIPACAO = $param['CO_PARTICIPACAO'][$row];
  266. $detail->CTAFIN_CONVENIO = $param['CTAFIN_CONVENIO'][$row];
  267. $detail->CTAFIN_CLIENTE = $param['CTAFIN_CLIENTE'][$row];
  268. $detail->EMPRESA = $param['EMPRESA'][$row];
  269. $detail->SERVICO_ID = $param['SERVICO_ID'][$row];
  270. $detail->store();
  271. }
  272. }
  273. }
  274. $data = new stdClass;
  275. $data->id = $master->id;
  276. TForm::sendData('form_ModelConvenios', $data);
  277. TTransaction::close(); // close the transaction
  278. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  279. }
  280. catch (Exception $e) // in case of exception
  281. {
  282. new TMessage('error', $e->getMessage());
  283. TTransaction::rollback();
  284. }
  285. }
  286. }
  287. </your>
ML

 
  1. <?php
  2. /**
  3. * ConveniosxservicosModel Active Record
  4. * @author <your-name-here>
  5. */
  6. class ConveniosxservicosModel extends TRecord
  7. {
  8. const TABLENAME = 'conveniosxservicos';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'max'; // {max, serial}
  11. private $servicos_model;
  12. /**
  13. * Constructor method
  14. */
  15. public function __construct($id = NULL, $callObjectLoad = TRUE)
  16. {
  17. parent::__construct($id, $callObjectLoad);
  18. parent::addAttribute('VALOR');
  19. parent::addAttribute('CO_PARTICIPACAO');
  20. parent::addAttribute('CTAFIN_CONVENIO');
  21. parent::addAttribute('CTAFIN_CLIENTE');
  22. parent::addAttribute('EMPRESA');
  23. parent::addAttribute('SERVICO_ID');
  24. parent::addAttribute('CONVENIO_ID');
  25. }
  26. }
NR

Você precisa passar um array associativo(chave,descricao) para o multisearch. Crie uma associação com o modelo correspondente ao SERVICO_ID no modelo ConveniosxservicosModel e aí modifique o trecho abaixo:
 
  1. <?php
  2. //if (!empty($item->SERVICO_ID)) { $SERVICO_ID->setValue(array($item->SERVICO_ID=>'descricao') );}
  3. // supondo que exista uma função get_servico(associacao) no ConveniosxservicosModel e no modelo da associacao exista uma coluna chamada descricao
  4. if (!empty($item->SERVICO_ID)) { $SERVICO_ID->setValue(array($item->SERVICO_ID=>$item->servico->descricao) );}
  5. ?>
ML

Muito Obrigado Nataniel.

Ótima explicação. Agora ta funcionando perfeitamente.