CADASTRO DE PESSOAS x ORDEM DE SERVIÇOS - TDBRadioGroup e TDBUni Olá pessoal. Estou aproveitando o código fonte do cadastro de PESSOAS da aplicação MICROERP lançado agora na versão 5.0. Neste cadastro existe um TDBRadioGroup, que possibilita ao usuário fazer uma marcação de um GRUPO para a pessoa que está sendo cadastrada. Como vocês podem ver na imagem do anexo, vou classificar como CLIENTE; FORNECEDOR e FUNCIONÁRIO. Também tenho na ...
HB
CADASTRO DE PESSOAS x ORDEM DE SERVIÇOS - TDBRadioGroup e TDBUni  
Olá pessoal.
Estou aproveitando o código fonte do cadastro de PESSOAS da aplicação MICROERP lançado agora na versão 5.0.

Neste cadastro existe um TDBRadioGroup, que possibilita ao usuário fazer uma marcação de um GRUPO para a pessoa que está sendo cadastrada. Como vocês podem ver na imagem do anexo, vou classificar como CLIENTE; FORNECEDOR e FUNCIONÁRIO.

Também tenho na minha aplicação de controle de oficina mecânica um cadastro de ordem de serviço, que estou re-aproveitamento o código fonte do cadastro de PEDIDO.
Como o cadastro de pessoas tem essa separação do grupo de pessoas, eu gostaria de fazer um tratamento no momento de cadastrar a minha ordem de serviço, que é exibir no campo CLIENTE (vejam na imagem) somente a pessoa classificada no grupo CLIENTE, e no campo MECÂNICO, exibir somente a pessoa classifica no grupo FUNCIONÁRIO.

Como sou ainda inexperiente em PHP e também no Framework, eu não sei como buscar via código essa classificação grupo CLIENTE e de MECÂNICO, ou seja, não sei nestes campos (TDBUniqueSearch) como carregar somente a pessoa classificada como CLIENTE e MECÂNICO , respectivamente. Só reforçando, não quero "misturar" os grupos de pessoas nestes campos.


Cadastro de pessoas - esse é o campo em questão ($grupo_id = new TDBRadioGroup('grupo_id', 'oficina', 'Grupo', 'id', '{nome}','id asc' )):


 
  1. <?php
  2. /**
  3. * PessoaForm Form
  4. */
  5. class PessoaForm extends TPage
  6. {
  7. protected $form; // form
  8. /**
  9. * Form constructor
  10. * @param $param Request
  11. */
  12. public function __construct( $param )
  13. {
  14. parent::__construct();
  15. // creates the form
  16. $this->form = new BootstrapFormBuilder('form_Pessoa');
  17. $this->form->setFormTitle('Pessoas');
  18. // create the form fields
  19. $id = new TEntry('id');
  20. $nome = new TEntry('nome');
  21. $documento = new TEntry('documento');
  22. $documento2 = new TEntry('documento2');
  23. $fone = new TEntry('fone');
  24. $celular = new TEntry('celular');
  25. $email = new TEntry('email');
  26. $rua = new TEntry('rua');
  27. $numero = new TEntry('numero');
  28. $bairro = new TEntry('bairro');
  29. $complemento = new TEntry('complemento');
  30. $cep = new TEntry('cep');
  31. $obs = new TEntry('obs');
  32. $cidade_id = new TDBCombo('cidade_id', 'oficina', 'Cidade', 'id', '{nome}','id asc' );
  33. $estado_id = new TDBCombo('estado_id', 'oficina', 'Estado', 'id', '{uf}','id asc' );
  34. $grupo_id = new TDBRadioGroup('grupo_id', 'oficina', 'Grupo', 'id', '{nome}','id asc' );
  35. $tipo_id = new TDBRadioGroup('tipo_id', 'oficina', 'Tipo', 'id', '{nome}','id asc' );
  36. $nome->addValidation('Nome', new TRequiredValidator());
  37. $tipo_id->addValidation('Tipo', new TRequiredValidator());
  38. $estado_id->addValidation('UF', new TRequiredValidator());
  39. $cidade_id->addValidation('Cidade', new TRequiredValidator());
  40. $grupo_id->addValidation('Grupo', new TRequiredValidator());
  41. $tipo_id->setLayout('horizontal');
  42. $grupo_id->setLayout('horizontal');
  43. $id->setEditable(false);
  44. $id->setSize(60);
  45. $rua->setSize('72%');
  46. $cep->setSize('72%');
  47. $nome->setSize('70%');
  48. $fone->setSize('72%');
  49. $celular->setSize('72%');
  50. $email->setSize('72%');
  51. $numero->setSize('72%');
  52. $bairro->setSize('72%');
  53. $obs->setSize('89%', 68);
  54. $documento->setSize('72%');
  55. $documento2->setSize('72%');
  56. $estado_id->setSize('20%');
  57. $cidade_id->setSize('72%');
  58. $complemento->setSize('72%');
  59. $tipo_id->setSize(80);
  60. $grupo_id->setSize(200);
  61. $nome->forceUpperCase();
  62. $rua->forceUpperCase();
  63. $bairro->forceUpperCase();
  64. $complemento->forceUpperCase();
  65. $email->forceLowerCase();
  66. $documento->setMask('999.999.999-99');
  67. $documento2->setMask('99.999.999/9999-99');
  68. $fone->setMask('(99)9999-9999');
  69. $celular->setMask('(99)9.9999-9999');
  70. $cep->setMask('99.999-999');
  71. $numero->setMask('99999999');
  72. $id->setEditable(FALSE);
  73. // add the fields
  74. $this->form->addFields([new TLabel('Tipo:', '#ff0000')],[$tipo_id], [new TLabel('Código:')],[$id]);
  75. $this->form->addFields([new TLabel('Nome:', '#ff0000')],[$nome]);
  76. $this->form->addFields([new TLabel('CPF:')],[$documento], [new TLabel('CNPJ:')],[$documento2]);
  77. $this->form->addFields([new TLabel('Fone:')],[$fone], [new TLabel('Celular:')],[$celular] );
  78. $this->form->addFields([new TLabel('Cep:')],[$cep],[new TLabel('Email:')],[$email]);
  79. $this->form->addFields([new TLabel('Endereço:')],[$rua],[new TLabel('Numero:')],[$numero]);
  80. $this->form->addFields([new TLabel('Cidade:', '#ff0000')],[$cidade_id], [new TLabel('UF:', '#ff0000')],[$estado_id]);
  81. $this->form->addFields([new TLabel('Bairro:')],[$bairro], [new TLabel('Complemento:')],[$complemento] );
  82. $this->form->addFields([new TLabel('Obs:')],[$obs]);
  83. $this->form->addFields([new TLabel('Grupo', '#ff0000')],[$grupo_id]);
  84. /* Ação de Habilita e Desabilita campo da Pessoa Física ou Jurídica */
  85. $tipo_id->setChangeAction( new TAction( array($this, 'onChangeRadio')) );
  86. if (!empty($id))
  87. {
  88. $id->setEditable(FALSE);
  89. }
  90. /** samples
  91. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  92. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  93. $fieldX->setSize( 100, 40 ); // set size
  94. **/
  95. // create the form actions
  96. $this->form->addAction('Salvar', new TAction([$this, 'onSave']), 'fa:floppy-o')->addStyleClass('btn-primary');
  97. $this->form->addAction('Novo', new TAction([$this, 'onClear']), 'fa:plus-circle #69aa46');
  98. $this->form->addAction(_t('Back'),new TAction(array('PessoaList','onReload')),'fa:arrow-circle-o-left blue');
  99. // vertical box container
  100. $container = new TVBox;
  101. $container->style = 'width: 100%';
  102. $container->class = 'form-container';
  103. $container->add(new TXMLBreadCrumb('menu.xml', 'PessoaList'));
  104. $container->add($this->form);
  105. parent::add($container);
  106. }
  107. /**
  108. * Save form data
  109. * @param $param Request
  110. */
  111. public function onSave( $param )
  112. {
  113. try
  114. {
  115. TTransaction::open('oficina'); // open a transaction
  116. /**
  117. // Enable Debug logger for SQL operations inside the transaction
  118. TTransaction::setLogger(new TLoggerSTD); // standard output
  119. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  120. **/
  121. /*Valida o CPF - Está funcionando, só ligar se realmente o cliente quiser
  122. if($param['tipo_id'] == 1 )
  123. {
  124. $validacpf = new TCPFValidator;
  125. $validacpf->validate('CPF', $param['documento']);
  126. }
  127. Valida o CNPJ
  128. if($param['tipo_id'] == 2 )
  129. {
  130. $validator = new TCNPJValidator;
  131. $validator->validate('CNPJ', $param['documento2']);
  132. }
  133. */
  134. $this->form->validate(); // validate form data
  135. $object = new Pessoa; // create an empty object
  136. $data = $this->form->getData(); // get form data as array
  137. $object->fromArray( (array) $data); // load the object with data
  138. $object->store(); // save the object
  139. // get the generated id
  140. $data->id = $object->id;
  141. //Controle de passagem dos campos para o formulário da pessoa Física e Jurídica
  142. $obj = new stdClass;
  143. $obj->tipo_id = $object->tipo_id;
  144. $obj->estado_id = $object->estado_id;
  145. $obj->documento = $object->documento;
  146. $obj->documento2 = $object->documento2;
  147. self::onChangeRadio(['tipo_id'=>$object->tipo_id]);
  148. TForm::sendData('form_Pessoa', $obj);
  149. $this->form->setData($data); // fill form data
  150. TTransaction::close(); // close the transaction
  151. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  152. }
  153. catch (Exception $e) // in case of exception
  154. {
  155. new TMessage('error', $e->getMessage()); // shows the exception error message
  156. $this->form->setData( $this->form->getData() ); // keep form data
  157. TTransaction::rollback(); // undo all pending operations
  158. }
  159. }
  160. /**
  161. * Clear form data
  162. * @param $param Request
  163. */
  164. public function onClear( $param )
  165. {
  166. $this->form->clear(TRUE);
  167. }
  168. /**
  169. * Load object to form data
  170. * @param $param Request
  171. */
  172. public function onEdit( $param )
  173. {
  174. try
  175. {
  176. if (isset($param['key']))
  177. {
  178. $key = $param['key']; // get the parameter $key
  179. TTransaction::open('oficina'); // open a transaction
  180. $object = new Pessoa($key); // instantiates the Active Record
  181. $this->form->setData($object); // fill the form
  182. TTransaction::close(); // close the transaction
  183. //Controle de passagem dos campos para o formulário da pessoa Física e Jurídica
  184. $obj = new stdClass;
  185. $obj->tipo_id = $object->tipo_id;
  186. $obj->estado_id = $object->estado_id;
  187. $obj->documento = $object->documento;
  188. $obj->documento2 = $object->documento2;
  189. self::onChangeRadio(['tipo_id'=>$object->tipo_id]);
  190. TForm::sendData('form_Pessoa', $obj);
  191. }
  192. else
  193. {
  194. $this->form->clear(TRUE);
  195. }
  196. }
  197. catch (Exception $e) // in case of exception
  198. {
  199. new TMessage('error', $e->getMessage()); // shows the exception error message
  200. TTransaction::rollback(); // undo all pending operations
  201. }
  202. }
  203. /**
  204. * on ChangeRadio change
  205. * @param $param Action parameters
  206. */
  207. public static function onChangeRadio($param)
  208. {
  209. if ($param['tipo_id'] == 1)
  210. {
  211. TEntry::enableField('form_Pessoa', 'documento');
  212. TEntry::disableField('form_Pessoa', 'documento2');
  213. TEntry::clearField('form_Pessoa', 'documento2');
  214. }
  215. if ($param['tipo_id'] == 2)
  216. {
  217. TEntry::enableField('form_Pessoa', 'documento2');
  218. TEntry::disableField('form_Pessoa', 'documento');
  219. TEntry::clearField('form_Pessoa', 'documento');
  220. }
  221. }
  222. }
  223. ?>



Cadastro de Ordem de Serviço - é neste código que não sei como implementar:
Esses campos são os envolvidos:
$cliente_id = new TDBUniqueSearch('cliente_id', 'oficina', 'Pessoa', 'id', 'nome','nome asc' )
$item_pedido_mecanico_id = new TDBUniqueSearch('item_pedido_mecanico_id', 'oficina', 'Pessoa', 'id', 'nome','id asc' )


 
  1. <?php
  2. /**
  3. * PedidoForm Form
  4. */
  5. class PedidoForm extends TPage
  6. {
  7. protected $form; // form
  8. use adianti\base\AdiantiMasterDetailTrait;
  9. /**
  10. * Form constructor
  11. * @param $param Request
  12. */
  13. public function __construct( $param )
  14. {
  15. parent::__construct();
  16. $this->form = new BootstrapFormBuilder('list_Pedido');
  17. $this->form->setFormTitle('Ordem de Serviço');
  18. // Definição dos campos da tela Master
  19. $id = new TEntry('id');
  20. $estado_pedido_id = new TDBCombo('estado_pedido_id', 'oficina', 'EstadoPedido', 'id', 'nome','id asc' );
  21. $cliente_id = new TDBUniqueSearch('cliente_id', 'oficina', 'Pessoa', 'id', 'nome','nome asc' );
  22. $dt_pedido = new TDate('dt_pedido');
  23. $obs = new TText('obs');
  24. // Definição dos campos da tela Detalhe (itens da ordem de serviço)
  25. $item_pedido_mecanico_id = new TDBUniqueSearch('item_pedido_mecanico_id', 'oficina', 'Pessoa', 'id', 'nome','id asc' );
  26. $item_pedido_produto_id = new TDBUniqueSearch('item_pedido_produto_id', 'oficina', 'Produto', 'id', 'nome','id asc' );
  27. $item_pedido_quantidade = new TNumeric('item_pedido_quantidade', '2', ',', '.' );
  28. $item_pedido_valor = new TNumeric('item_pedido_valor', '2', ',', '.' );
  29. $item_pedido_id = new THidden('item_pedido_id');
  30. $estado_pedido_id->addValidation('Estado pedido', new TRequiredValidator());
  31. $cliente_id->addValidation('Cliente', new TRequiredValidator());
  32. $id->setEditable(false);
  33. $id->setSize(100);
  34. $cliente_id->setMinLength(1);
  35. $cliente_id->setSize('100%');
  36. $item_pedido_mecanico_id->setMinLength(1);
  37. $item_pedido_produto_id->setMinLength(1);
  38. $dt_pedido->setValue(date('d/m/Y h:i'));
  39. $dt_pedido->setDatabaseMask('yyyy-mm-dd');
  40. $cliente_id->setMask('{nome}');
  41. $dt_pedido->setMask('dd/mm/yyyy');
  42. $dt_pedido->setSize(190);
  43. $obs->setSize('90%', 68);
  44. $estado_pedido_id->setSize('75%');
  45. $item_pedido_valor->setSize('20%');
  46. $item_pedido_mecanico_id->setMask('{nome}');
  47. $item_pedido_mecanico_id->setSize('75%');
  48. $item_pedido_produto_id->setMask('{nome}');
  49. $item_pedido_produto_id->setSize('20%');
  50. $item_pedido_quantidade->setSize('21%');
  51. // Adicionando os campos da tela Master
  52. $this->form->addFields([new TLabel('Nro O.S:')],[$id],[new TLabel('Status:', '#ff0000')],[$estado_pedido_id]);
  53. $this->form->addFields([new TLabel('Cliente:', '#ff0000')],[$cliente_id],[new TLabel('Data OS:')],[$dt_pedido]);
  54. $this->form->addFields([new TLabel('Obs:')],[$obs]);
  55. // Adicionando os campos da tela Detalhe (itens da ordem de serviço)
  56. $this->form->addContent([new TFormSeparator('Itens da O.S', '#333333', '18', '#eeeeee')]);
  57. $this->form->addFields([new TLabel('Mecânico:', '#ff0000')],[$item_pedido_mecanico_id]);
  58. $this->form->addFields([new TLabel('Produto:', '#ff0000')],[$item_pedido_produto_id]);
  59. $this->form->addFields([new TLabel('Quantidade:')],[$item_pedido_quantidade]);
  60. $this->form->addFields([new TLabel('Valor:')],[$item_pedido_valor]);
  61. $this->form->addFields([$item_pedido_id]);
  62. // Criando o botão Adicionar (que inclui os itens [detalhes] na datagrid
  63. $add_item_pedido = new TButton('add_item_pedido');
  64. $add_item_pedido->setAction(new TAction(array($this, 'onAddItemPedido')), 'Adicionar');
  65. $add_item_pedido->setImage('fa:plus #51c249');
  66. $this->form->addFields([$add_item_pedido]);
  67. // Definição da Datagrid
  68. $this->item_pedido_list = new BootstrapDatagridWrapper(new TQuickGrid);
  69. $this->item_pedido_list->style = 'width:100%';
  70. $this->item_pedido_list->class .= ' table-bordered';
  71. $this->item_pedido_list->disableDefaultClick();
  72. $this->item_pedido_list->addQuickColumn('', 'edit', 'left', 50);
  73. $this->item_pedido_list->addQuickColumn('', 'delete', 'left', 50);
  74. $col_mecanico_id = $this->item_pedido_list->addQuickColumn('Mecânico', 'item_pedido_mecanico_id', 'left');
  75. $col_produto_id = $this->item_pedido_list->addQuickColumn('Produto', 'item_pedido_produto_id', 'left');
  76. $col_quantidade = $this->item_pedido_list->addQuickColumn('Quantidade', 'item_pedido_quantidade', 'left');
  77. $col_valor = $this->item_pedido_list->addQuickColumn('Valor', 'item_pedido_valor', 'right');
  78. $col_total = $this->item_pedido_list->addQuickColumn('Total', '= {item_pedido_quantidade} * {item_pedido_valor}', 'right');
  79. $col_total->setTotalFunction( function($values) {
  80. return array_sum((array) $values);
  81. });
  82. $this->item_pedido_list->createModel();
  83. $col_total->setTransformer(function($value, $object, $row) {
  84. if (!$value)
  85. {
  86. $value = 0;
  87. }
  88. return "R$ " . number_format($value, 2, ",", ".");
  89. });
  90. $this->form->addContent([$this->item_pedido_list]);
  91. // Cria as ações do Formulário
  92. $this->form->addAction('Salvar', new TAction([$this, 'onSave']), 'fa:floppy-o')->addStyleClass('btn-primary');
  93. $this->form->addAction('Limpar formulário', new TAction([$this, 'onClear']), 'fa:eraser #dd5a43');
  94. $this->form->addAction(_t('Back'),new TAction(array('PedidoList','onReload')),'fa:arrow-circle-o-left blue');
  95. // Controle da caixa vertical de todo o formulário
  96. $container = new TVBox;
  97. $container->style = 'width: 100%';
  98. $container->class = 'form-container';
  99. $container->add(new TXMLBreadCrumb('menu.xml', 'PedidoList'));
  100. $container->add($this->form);
  101. parent::add($container);
  102. }
  103. /**
  104. * Adiciona item ao pedido
  105. * @param $param Request
  106. */
  107. public function onAddItemPedido( $param )
  108. {
  109. try
  110. {
  111. $data = $this->form->getData();
  112. if(!$data->item_pedido_produto_id)
  113. {
  114. throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required', 'Produto id'));
  115. }
  116. $item_pedido_items = TSession::getValue('item_pedido_items'); // faz leitura da variável de seção
  117. $key = !empty($data->item_pedido_id) ? $data->item_pedido_id : uniqid();
  118. $fields = [];
  119. $fields['item_pedido_produto_id'] = $data->item_pedido_produto_id;
  120. $fields['item_pedido_mecanico_id'] = $data->item_pedido_mecanico_id; // Minha modificação p/ o mecânico
  121. $fields['item_pedido_quantidade'] = $data->item_pedido_quantidade;
  122. $fields['item_pedido_valor'] = $data->item_pedido_valor;
  123. $item_pedido_items[ $key ] = $fields;
  124. TSession::setValue('item_pedido_items', $item_pedido_items);
  125. // limpa os campos do item do pedido
  126. $data->item_pedido_mecanico_id = ''; // Minha modificação p/ o mecânico
  127. $data->item_pedido_produto_id = '';
  128. $data->item_pedido_quantidade = '';
  129. $data->item_pedido_valor = '';
  130. $data->item_pedido_id = '';
  131. $this->form->setData($data);
  132. $this->onReload( $param );
  133. }
  134. catch (Exception $e)
  135. {
  136. $this->form->setData( $this->form->getData());
  137. new TMessage('error', $e->getMessage());
  138. }
  139. }
  140. /**
  141. * Recarrega tudo
  142. * @param $param Request
  143. */
  144. public function onReload($params = null)
  145. {
  146. $this->loaded = TRUE;
  147. $this->onReloadPedidoItemPedido($params);
  148. }
  149. /**
  150. * Recarrega itens do pedido
  151. * @param $param Request
  152. */
  153. public function onReloadPedidoItemPedido( $param )
  154. {
  155. $items = TSession::getValue('item_pedido_items');
  156. $this->item_pedido_list->clear();
  157. if($items)
  158. {
  159. $cont = 1;
  160. foreach ($items as $key => $item)
  161. {
  162. $rowItem = new StdClass;
  163. $action_del = new TAction(array($this, 'onDeleteItemPedido'));
  164. $action_del->setParameter('item_pedido_id_row_id', $key);
  165. $action_edi = new TAction(array($this, 'onEditItemPedido'));
  166. $action_edi->setParameter('item_pedido_id_row_id', $key);
  167. $button_del = new TButton('delete_item_pedido'.$cont);
  168. $button_del->class = 'btn btn-default btn-sm';
  169. $button_del->setAction($action_del, '');
  170. $button_del->setImage('fa:trash-o');
  171. $button_del->setFormName($this->form->getName());
  172. $button_edi = new TButton('edit_item_pedido'.$cont);
  173. $button_edi->class = 'btn btn-default btn-sm';
  174. $button_edi->setAction($action_edi, '');
  175. $button_edi->setImage('bs:edit');
  176. $button_edi->setFormName($this->form->getName());
  177. $rowItem->edit = $button_edi;
  178. $rowItem->delete = $button_del;
  179. $rowItem->item_pedido_produto_id = '';
  180. if (isset($item['item_pedido_produto_id']) && $item['item_pedido_produto_id'])
  181. {
  182. TTransaction::open('oficina');
  183. $produto = Produto::find($item['item_pedido_produto_id']);
  184. $rowItem->item_pedido_produto_id = $produto->render('{nome}');
  185. TTransaction::close();
  186. }
  187. // Minha modificação p/ o mecânico - linha logo abaixo
  188. $rowItem->item_pedido_mecanico_id = isset($item['item_pedido_mecanico_id']) ? $item['item_pedido_mecanico_id'] : '';
  189. $rowItem->item_pedido_quantidade = isset($item['item_pedido_quantidade']) ? $item['item_pedido_quantidade'] : '';
  190. $rowItem->item_pedido_valor = isset($item['item_pedido_valor']) ? $item['item_pedido_valor'] : '';
  191. $this->item_pedido_list->addItem($rowItem);
  192. $cont ++;
  193. }
  194. }
  195. }
  196. /**
  197. * Edita item do pedido
  198. * @param $param Request
  199. */
  200. public function onEditItemPedido( $param )
  201. {
  202. $data = $this->form->getData();
  203. // read session items
  204. $items = TSession::getValue('item_pedido_items');
  205. // get the session item
  206. $item = $items[$param['item_pedido_id_row_id']];
  207. $data->item_pedido_produto_id = $item['item_pedido_produto_id'];
  208. $data->item_pedido_mecanico_id = $item['item_pedido_mecanico_id']; // Minha modificação p/ o mecânico
  209. $data->item_pedido_quantidade = $item['item_pedido_quantidade'];
  210. $data->item_pedido_valor = $item['item_pedido_valor'];
  211. $data->item_pedido_id = $param['item_pedido_id_row_id'];
  212. // fill product fields
  213. $this->form->setData( $data );
  214. $this->onReload( $param );
  215. }
  216. /**
  217. * Exclui item do pedido
  218. * @param $param Request
  219. */
  220. public function onDeleteItemPedido( $param )
  221. {
  222. $data = $this->form->getData();
  223. $data->item_pedido_mecanico_id = ''; // Minha modificação p/ o mecânico
  224. $data->item_pedido_produto_id = '';
  225. $data->item_pedido_quantidade = '';
  226. $data->item_pedido_valor = '';
  227. $this->form->setData( $data );
  228. // read session items
  229. $items = TSession::getValue('item_pedido_items');
  230. // delete the item from session
  231. unset($items[$param['item_pedido_id_row_id']]);
  232. TSession::setValue('item_pedido_items', $items);
  233. $this->onReload( $param );
  234. }
  235. /**
  236. * Limpa formulário
  237. * @param $param Request
  238. */
  239. public function onClear( $param )
  240. {
  241. $this->form->clear();
  242. TSession::setValue('item_pedido_items', null);
  243. $this->onReload();
  244. }
  245. /**
  246. * Salva pedido
  247. * @param $param Request
  248. */
  249. public function onSave($param = null)
  250. {
  251. try
  252. {
  253. TTransaction::open('oficina');
  254. $this->form->validate();
  255. $data = $this->form->getData();
  256. $object = new Pedido;
  257. $object->fromArray( (array) $data);
  258. $object->store();
  259. $this->storeItems('PedidoItem', 'pedido_id', $object, 'item_pedido',
  260. function($masterObject, $detailObject) {
  261. $masterObject->valor_total += ($detailObject->quantidade * $detailObject->valor);
  262. });
  263. $object->store();
  264. $data->id = $object->id;
  265. $this->form->setData($data);
  266. TTransaction::close();
  267. new TMessage('info', AdiantiCoreTranslator::translate('Record saved'));
  268. }
  269. catch (Exception $e)
  270. {
  271. new TMessage('error', $e->getMessage());
  272. $this->form->setData( $this->form->getData() );
  273. TTransaction::rollback();
  274. }
  275. }
  276. /**
  277. * Edita formulário
  278. * @param $param Request
  279. */
  280. public function onEdit( $param )
  281. {
  282. try
  283. {
  284. if (isset($param['key']))
  285. {
  286. $key = $param['key'];
  287. TTransaction::open('oficina');
  288. $object = new Pedido($key);
  289. $this->loadItems('PedidoItem', 'pedido_id', $object, 'item_pedido');
  290. $this->form->setData($object);
  291. $this->onReload();
  292. TTransaction::close();
  293. }
  294. else
  295. {
  296. $this->form->clear();
  297. }
  298. }
  299. catch (Exception $e)
  300. {
  301. new TMessage('error', $e->getMessage());
  302. TTransaction::rollback();
  303. }
  304. }
  305. /**
  306. * Exibe a página
  307. * @param $param Request
  308. */
  309. public function show()
  310. {
  311. if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  312. {
  313. $this->onReload( func_get_arg(0) );
  314. }
  315. parent::show();
  316. }
  317. }
  318. ?>

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


NR

O componente TDBUniqueSearch possui mais um parâmetro, onde você pode informar o filtro(tcriteria) que deseja utilizar:
 
  1. <?php
  2. // class TDBUniqueSearch
  3. public function __construct($name, $database, $model, $key, $value, $orderColumn = NULL, TCriteria $criteria = NULL)
  4. $crit = new TCriteria();
  5. $crit->add(new TFilter('grupo_id','=',$id_do_grupo_desejado));
  6. $cliente_id = new TDBUniqueSearch('cliente_id', 'oficina', 'Pessoa', 'id', 'nome','nome asc', $crit );
  7. ?>
HB

Nataniel, fiz conforme recomendado e deu certo tanto para cliente quanto para o mecânico .

Obrigado.