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



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

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 NULLTCriteria $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.