Lançado Adianti Framework 7.6!
Clique aqui para saber mais
TUniqueSearch Trazendo a informação apenas uma vez. Boa Noite! Tenho o seguinte cenário: Um formulário de romaneio de coletas, onde vou incluindo as coletas, selecionadas em um TUniqueSearch. Porém não quero que a mesma coleta possa ser inclusa diversas vezes nesse mesmo documento, ou seja, só pode entrar uma vez no Romaneio, percebi que o formulário de cadastro de programas tem justamente esse comportamento, (Administração > Programas > S...
RF
TUniqueSearch Trazendo a informação apenas uma vez.  
Boa Noite!
Tenho o seguinte cenário: Um formulário de romaneio de coletas, onde vou incluindo as coletas, selecionadas em um TUniqueSearch. Porém não quero que a mesma coleta possa ser inclusa diversas vezes nesse mesmo documento, ou seja, só pode entrar uma vez no Romaneio, percebi que o formulário de cadastro de programas tem justamente esse comportamento, (Administração > Programas > SystemProgramForm), o TUniqueSearch, tem justamente o comportamento que desejo.
Alguém poderia me ajudar a entender o comportamento desse componente. É na model que acontece a "mágica".
Obrigado!

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (3)


NR

É um form mestre x detalhe? De qual tipo?
RF

Bom dia Nataniel!

É um TPage, eu gostaria que o TDBCombo (coletasEmitidas), só apresente uma vez a solicitação a ser incluída no Romaneio.

Segue o código completo,

Obrigado pela atenção.

  1. <?php
  2. class RomaneioColetaForm extends TPage
  3. {
  4.     protected $form;
  5.     private $formFields = [];
  6.     private static $database 'transpalog';
  7.     private static $activeRecord 'RomaneioColeta';
  8.     private static $primaryKey 'id';
  9.     private static $formName 'form_RomaneioColeta';
  10.     use Adianti\Base\AdiantiMasterDetailTrait;
  11.     /**
  12.      * Form constructor
  13.      * @param $param Request
  14.      */
  15.     public function __construct$param )
  16.     {
  17.         parent::__construct();
  18.         // creates the form
  19.         $this->form = new BootstrapFormBuilder(self::$formName);
  20.         // define the form title
  21.         $this->form->setFormTitle("Romaneio");
  22.         $criteria_status = new TCriteria();
  23.         $criteria_coletasEmitidas = new TCriteria();
  24.         $filterVar "2";
  25.         $criteria_status->add(new TFilter('id''<='$filterVar)); 
  26.         $filterVar "1";
  27.         $criteria_coletasEmitidas->add(new TFilter('tipo_servico''='$filterVar)); 
  28.         $filterVar "2";
  29.         $criteria_coletasEmitidas->add(new TFilter('status''='$filterVar)); 
  30.         $id = new TEntry('id');
  31.         $status = new TDBCombo('status''transpalog''StatusSolicitacao''id''{descricao}','id asc' $criteria_status );
  32.         $numero = new TEntry('numero');
  33.         $serie = new TEntry('serie');
  34.         $motorista_id = new TDBCombo('motorista_id''transpalog''Motorista''id''{nome}','id asc'  );
  35.         $veiculo = new TCombo('veiculo');
  36.         $data_lancamento = new TDateTime('data_lancamento');
  37.         $data_atualizacao = new TDateTime('data_atualizacao');
  38.         $coletasEmitidas = new TDBCombo('coletasEmitidas''transpalog''Solicitacao''id''{numero_coleta}','numero_coleta asc' $criteria_coletasEmitidas );
  39.         $button_incluir = new TButton('button_incluir');
  40.         $itens_romaneio_coleta_fk_romaneio_ocoren_de_para = new TDBCombo('itens_romaneio_coleta_fk_romaneio_ocoren_de_para''transpalog''OcorenDePara''id''{codigo}','id asc'  );
  41.         $itens_romaneio_coleta_fk_romaneio_solicitacao = new TDBCombo('itens_romaneio_coleta_fk_romaneio_solicitacao''transpalog''Solicitacao''id''{numero_coleta}','id asc'  );
  42.         $itens_romaneio_coleta_fk_romaneio_remetente = new TDBCombo('itens_romaneio_coleta_fk_romaneio_remetente''transpalog''Solicitacao''embarcador''{fk_embarcador->razao_social}','id asc'  );
  43.         $itens_romaneio_coleta_fk_romaneio_destinatario = new TDBCombo('itens_romaneio_coleta_fk_romaneio_destinatario''transpalog''Pessoa''id''{razao_social_nome}','id asc'  );
  44.         $itens_romaneio_coleta_fk_romaneio_volume = new TEntry('itens_romaneio_coleta_fk_romaneio_volume');
  45.         $itens_romaneio_coleta_fk_romaneio_peso = new TEntry('itens_romaneio_coleta_fk_romaneio_peso');
  46.         $itens_romaneio_coleta_fk_romaneio_cubagem = new TEntry('itens_romaneio_coleta_fk_romaneio_cubagem');
  47.         $itens_romaneio_coleta_fk_romaneio_valor_nfe = new TEntry('itens_romaneio_coleta_fk_romaneio_valor_nfe');
  48.         $itens_romaneio_coleta_fk_romaneio_data_cadastro = new TDateTime('itens_romaneio_coleta_fk_romaneio_data_cadastro');
  49.         $itens_romaneio_coleta_fk_romaneio_data_alteracao = new TDateTime('itens_romaneio_coleta_fk_romaneio_data_alteracao');
  50.         $itens_romaneio_coleta_fk_romaneio_id = new THidden('itens_romaneio_coleta_fk_romaneio_id');
  51.         $motorista_id->setChangeAction(new TAction([$this,'onChangemotorista_id']));
  52.         $motorista_id->addValidation("Motorista", new TRequiredValidator()); 
  53.         $serie->setMaxLength(5);
  54.         $data_lancamento->setValue(date('d/m/Y H:i'));
  55.         $button_incluir->setAction(new TAction([$this'onIncluir']), "Incluir");
  56.         $button_incluir->addStyleClass('btn-default');
  57.         $button_incluir->setImage('fas:angle-double-down #000000');
  58.         $data_lancamento->setMask('dd/mm/yyyy hh:ii');
  59.         $data_atualizacao->setMask('dd/mm/yyyy hh:ii');
  60.         $itens_romaneio_coleta_fk_romaneio_data_cadastro->setMask('dd/mm/yyyy hh:ii');
  61.         $itens_romaneio_coleta_fk_romaneio_data_alteracao->setMask('dd/mm/yyyy hh:ii');
  62.         $data_lancamento->setDatabaseMask('yyyy-mm-dd hh:ii');
  63.         $data_atualizacao->setDatabaseMask('yyyy-mm-dd hh:ii');
  64.         $itens_romaneio_coleta_fk_romaneio_data_cadastro->setDatabaseMask('yyyy-mm-dd hh:ii');
  65.         $itens_romaneio_coleta_fk_romaneio_data_alteracao->setDatabaseMask('yyyy-mm-dd hh:ii');
  66.         $id->setEditable(false);
  67.         $status->setEditable(false);
  68.         $data_lancamento->setEditable(false);
  69.         $data_atualizacao->setEditable(false);
  70.         $itens_romaneio_coleta_fk_romaneio_peso->setEditable(false);
  71.         $itens_romaneio_coleta_fk_romaneio_volume->setEditable(false);
  72.         $itens_romaneio_coleta_fk_romaneio_cubagem->setEditable(false);
  73.         $itens_romaneio_coleta_fk_romaneio_remetente->setEditable(false);
  74.         $itens_romaneio_coleta_fk_romaneio_valor_nfe->setEditable(false);
  75.         $itens_romaneio_coleta_fk_romaneio_solicitacao->setEditable(false);
  76.         $itens_romaneio_coleta_fk_romaneio_destinatario->setEditable(false);
  77.         $itens_romaneio_coleta_fk_romaneio_data_cadastro->setEditable(false);
  78.         $itens_romaneio_coleta_fk_romaneio_ocoren_de_para->setEditable(false);
  79.         $itens_romaneio_coleta_fk_romaneio_data_alteracao->setEditable(false);
  80.         $id->setSize(100);
  81.         $serie->setSize('70%');
  82.         $numero->setSize('70%');
  83.         $status->setSize('70%');
  84.         $veiculo->setSize('70%');
  85.         $motorista_id->setSize('70%');
  86.         $data_lancamento->setSize(150);
  87.         $data_atualizacao->setSize(150);
  88.         $coletasEmitidas->setSize('70%');
  89.         $itens_romaneio_coleta_fk_romaneio_peso->setSize('70%');
  90.         $itens_romaneio_coleta_fk_romaneio_volume->setSize('70%');
  91.         $itens_romaneio_coleta_fk_romaneio_cubagem->setSize('70%');
  92.         $itens_romaneio_coleta_fk_romaneio_valor_nfe->setSize('70%');
  93.         $itens_romaneio_coleta_fk_romaneio_remetente->setSize('70%');
  94.         $itens_romaneio_coleta_fk_romaneio_solicitacao->setSize('70%');
  95.         $itens_romaneio_coleta_fk_romaneio_data_cadastro->setSize(150);
  96.         $itens_romaneio_coleta_fk_romaneio_data_alteracao->setSize(150);
  97.         $itens_romaneio_coleta_fk_romaneio_destinatario->setSize('70%');
  98.         $itens_romaneio_coleta_fk_romaneio_ocoren_de_para->setSize('70%');
  99.         $this->form->appendPage("Dados básicos");
  100.         $this->form->addFields([new THidden('current_tab')]);
  101.         $this->form->setTabFunction("$('[name=current_tab]').val($(this).attr('data-current_page'));");
  102.         $row1 $this->form->addFields([new TLabel("Id:"null'14px'null)],[$id],[new TLabel("Status:"'#ff0000''14px'null)],[$status]);
  103.         $row2 $this->form->addFields([new TLabel("Número :"null'14px'null)],[$numero],[new TLabel("Série:"null'14px'null)],[$serie]);
  104.         $row3 $this->form->addFields([new TLabel("Motorista:"'#ff0000''14px'null)],[$motorista_id],[new TLabel("Veículo:"'#ff0000''14px'null)],[$veiculo]);
  105.         $row4 $this->form->addFields([new TLabel("Lançamento:"null'14px'null)],[$data_lancamento],[new TLabel("Atualização:"null'14px'null)],[$data_atualizacao]);
  106.         $this->form->appendPage("Solicitações");
  107.         $row5 $this->form->addFields([new TLabel("Selecionar:"null'14px'null)],[$coletasEmitidas],[],[$button_incluir]);
  108.         $row6 $this->form->addFields([new TLabel("Ocorrência:"'#ff0000''14px'null)],[$itens_romaneio_coleta_fk_romaneio_ocoren_de_para],[new TLabel("Solicitação:"'#ff0000''14px'null)],[$itens_romaneio_coleta_fk_romaneio_solicitacao]);
  109.         $row7 $this->form->addFields([new TLabel("Remetente:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_remetente],[new TLabel("Destinatario:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_destinatario]);
  110.         $row8 $this->form->addFields([new TLabel("Volume:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_volume],[new TLabel("Peso:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_peso]);
  111.         $row9 $this->form->addFields([new TLabel("Cubagem:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_cubagem],[new TLabel("Valor nfe:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_valor_nfe]);
  112.         $row10 $this->form->addFields([new TFormSeparator(""'#333333''18''#eeeeee')]);
  113.         $row10->layout = [' col-sm-12'];
  114.         $row11 $this->form->addFields([new TLabel("Cadastro:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_data_cadastro],[new TLabel("Alteração:"null'14px'null)],[$itens_romaneio_coleta_fk_romaneio_data_alteracao]);
  115.         $row12 $this->form->addFields([$itens_romaneio_coleta_fk_romaneio_id]);         
  116.         $add_itens_romaneio_coleta_fk_romaneio = new TButton('add_itens_romaneio_coleta_fk_romaneio');
  117.         $action_itens_romaneio_coleta_fk_romaneio = new TAction(array($this'onAddItensRomaneioColetaFkRomaneio'));
  118.         $add_itens_romaneio_coleta_fk_romaneio->setAction($action_itens_romaneio_coleta_fk_romaneio"Adicionar");
  119.         $add_itens_romaneio_coleta_fk_romaneio->setImage('fas:plus #000000');
  120.         $this->form->addFields([$add_itens_romaneio_coleta_fk_romaneio]);
  121.         $detailDatagrid = new TQuickGrid;
  122.         $detailDatagrid->disableHtmlConversion();
  123.         $this->itens_romaneio_coleta_fk_romaneio_list = new BootstrapDatagridWrapper($detailDatagrid);
  124.         $this->itens_romaneio_coleta_fk_romaneio_list->style 'width:100%';
  125.         $this->itens_romaneio_coleta_fk_romaneio_list->class .= ' table-bordered';
  126.         $this->itens_romaneio_coleta_fk_romaneio_list->disableDefaultClick();
  127.         $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn('''edit''left'50);
  128.         $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn('''delete''left'50);
  129.         $column_itens_romaneio_coleta_fk_romaneio_remetente $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn("Remetente"'itens_romaneio_coleta_fk_romaneio_remetente''left');
  130.         $column_itens_romaneio_coleta_fk_romaneio_destinatario $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn("Destinatario"'itens_romaneio_coleta_fk_romaneio_destinatario''left');
  131.         $column_itens_romaneio_coleta_fk_romaneio_volume $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn("Volume"'itens_romaneio_coleta_fk_romaneio_volume''left');
  132.         $column_itens_romaneio_coleta_fk_romaneio_peso $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn("Peso"'itens_romaneio_coleta_fk_romaneio_peso''left');
  133.         $column_itens_romaneio_coleta_fk_romaneio_cubagem $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn("Cubagem"'itens_romaneio_coleta_fk_romaneio_cubagem''left');
  134.         $column_itens_romaneio_coleta_fk_romaneio_valor_nfe_transformed $this->itens_romaneio_coleta_fk_romaneio_list->addQuickColumn("Valor nfe"'itens_romaneio_coleta_fk_romaneio_valor_nfe''left');
  135.         $column_itens_romaneio_coleta_fk_romaneio_volume->setTotalFunction( function($values) { 
  136.             return array_sum((array) $values); 
  137.         }); 
  138.         $column_itens_romaneio_coleta_fk_romaneio_peso->setTotalFunction( function($values) { 
  139.             return array_sum((array) $values); 
  140.         }); 
  141.         $column_itens_romaneio_coleta_fk_romaneio_cubagem->setTotalFunction( function($values) { 
  142.             return array_sum((array) $values); 
  143.         }); 
  144.         $column_itens_romaneio_coleta_fk_romaneio_valor_nfe_transformed->setTotalFunction( function($values) { 
  145.             return array_sum((array) $values); 
  146.         }); 
  147.         $this->itens_romaneio_coleta_fk_romaneio_list->createModel();
  148.         $this->form->addContent([$this->itens_romaneio_coleta_fk_romaneio_list]);
  149.         $column_itens_romaneio_coleta_fk_romaneio_valor_nfe_transformed->setTransformer(function($value$object$row
  150.         {
  151.             if(!$value)
  152.             {
  153.                 $value 0;
  154.             }
  155.             if(is_numeric($value))
  156.             {
  157.                 return "R$ " number_format($value2","".");
  158.             }
  159.             else
  160.             {
  161.                 return $value;
  162.             }
  163.         });
  164.         // create the form actions
  165.         $btn_onsave $this->form->addAction("Salvar", new TAction([$this'onSave']), 'fas:save #ffffff');
  166.         $btn_onsave->addStyleClass('btn-primary'); 
  167.         $btn_onclear $this->form->addAction("Novo", new TAction([$this'onClear']), 'fas:plus #69aa46');
  168.         $btn_onshow $this->form->addAction("Voltar", new TAction(['ListaRomaneioColeta''onShow']), 'fas:arrow-circle-left #478fca');
  169.         $btn_onemiti $this->form->addAction("Emitir", new TAction([$this'onEmiti']), 'fas:briefcase #69aa46');
  170.         $btn_onaction $this->form->addAction("Cancela", new TAction([$this'onAction']), 'fas:file-excel #ff0000');
  171.         // vertical box container
  172.         $container = new TVBox;
  173.         $container->style 'width: 100%';
  174.         $container->class 'form-container';
  175.         $container->add(TBreadCrumb::create(["Operacional","Romaneio"]));
  176.         $container->add($this->form);
  177.         parent::add($container);
  178.     }
  179.     public static function onChangemotorista_id($param)
  180.     {
  181.         try
  182.         {
  183.             if (isset($param['motorista_id']) && $param['motorista_id'])
  184.             { 
  185.                 $criteria TCriteria::create(['motorista_id' => (int) $param['motorista_id']]);
  186.                 TDBCombo::reloadFromModel(self::$formName'veiculo''transpalog''MotoristaVeiculo''id''{veiculo->placa}''id asc'$criteriaTRUE); 
  187.             } 
  188.             else 
  189.             { 
  190.                 TCombo::clearField(self::$formName'veiculo'); 
  191.             }  
  192.         }
  193.         catch (Exception $e)
  194.         {
  195.             new TMessage('error'$e->getMessage());
  196.         }
  197.     } 
  198.     public static function onIncluir($param null
  199.     {
  200.         try 
  201.         {
  202.         TTransaction::open('transpalog');
  203.             //grava os dados    dessa model,       esse  é o campo usado para consulta
  204.             $numcoleta    = new Solicitacao($param['coletasEmitidas']);
  205.             $campos_model = new StdClass;
  206.             $campos_model->itens_romaneio_coleta_fk_romaneio_solicitacao                    $numcoleta->numero_coleta
  207.             $campos_model->itens_romaneio_coleta_fk_romaneio_volume                         $numcoleta->volume_total;
  208.             $campos_model->itens_romaneio_coleta_fk_romaneio_peso                           $numcoleta->peso_total;
  209.             $campos_model->itens_romaneio_coleta_fk_romaneio_cubagem                        $numcoleta->cubagem_total;
  210.             $campos_model->itens_romaneio_coleta_fk_romaneio_valor_nfe                      $numcoleta->valor_nf_total
  211.             $campos_model->itens_romaneio_coleta_fk_romaneio_remetente                      $numcoleta->embarcador;
  212.             $campos_model->itens_romaneio_coleta_fk_romaneio_destinatario                   $numcoleta->destinatario_id;
  213.             $campos_model->itens_romaneio_coleta_fk_romaneio_ocoren_de_para                 1;
  214.             /*/
  215.             campos do formulario que recebe os dados das variáveis que, po sua vez vem da tabela
  216.             */
  217.             TForm::sendData('form_RomaneioColeta',$campos_model);
  218.         TTransaction::close();  
  219.         }
  220.         catch (Exception $e
  221.         {
  222.             new TMessage('error'$e->getMessage());    
  223.         }
  224.     }
  225.     public function onSave($param null
  226.     {
  227.         try
  228.         {
  229.         // Pega a informação dos campos
  230.         $data $this->form->getData();
  231.         // Pega a informação do campo Status
  232.         $grava $data->status;
  233.             // Se já estiver Lançado ou cancelado não deixa gravar
  234.         if ($grava == 2) { //"Emitido"
  235.             new TMessage('info'"Não se pode alterar um Romaneio já Emitida, um documento em branco será apresentada para digitação.");
  236.             // Limpa os campos para digitaão de nova coleta
  237.             $this->form->clear(true);
  238.             TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'null);
  239.             $this->onReload();
  240.             } else if ($grava == 3) { //"Cancelado"
  241.             new TMessage('info'"Solicitação já Cancelada, um documento em branco será apresentada para digitação.");
  242.             // Limpa os campos para digitaão de nova coleta
  243.             $this->form->clear(true);
  244.             TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'null);
  245.             $this->onReload();
  246.             } else { //"Lançado"
  247.             TTransaction::open(self::$database); // open a transaction
  248.             $messageAction null;
  249.             $object = new RomaneioColeta(); // create an empty object 
  250.             $data $this->form->getData(); // get form data as array
  251.             if(!$data->id){
  252.                 $object->unidade TSession::getValue('userunitid');
  253.                 $object->status 1;
  254.             }
  255.             $data->status 1;
  256.             $this->form->validate(); // validate form data
  257.             $object->fromArray( (array) $data); // load the object with data
  258.             $object->store(); // save the object 
  259.             $this->fireEvents($object);
  260.             $itens_romaneio_coleta_fk_romaneio_items $this->storeItems('ItensRomaneioColeta''romaneio'$object'itens_romaneio_coleta_fk_romaneio', function($masterObject$detailObject){ 
  261.                 //code here
  262.             }); 
  263.             // get the generated {PRIMARY_KEY}
  264.             $data->id $object->id
  265.             $this->form->setData($data); // fill form data
  266.             TTransaction::close(); // close the transaction
  267.             /**
  268.             // To define an action to be executed on the message close event:
  269.             $messageAction = new TAction(['className', 'methodName']);
  270.             **/
  271.             new TMessage('info'AdiantiCoreTranslator::translate('Record saved'), $messageAction);
  272.         }
  273.         }
  274.         catch (Exception $e// in case of exception
  275.         {
  276.             //</catchAutoCode>  
  277.             new TMessage('error'$e->getMessage()); // shows the exception error message
  278.             $this->form->setData$this->form->getData() ); // keep form data
  279.             TTransaction::rollback(); // undo all pending operations
  280.         }
  281.     }
  282.     public function onEmiti($param null
  283.     {
  284.         try 
  285.         {
  286.         // Pega a informação dos campos
  287.         $data $this->form->getData();
  288.         // Pega a informação do campo Status
  289.         $grava $data->status;
  290.             // Se já estiver Lançado ou cancelado não deixa gravar
  291.         if ($grava == 2) { //"Emitido"
  292.             new TMessage('info'"Não se pode Emitir um Romaneio já Emitido, um documento em branco será apresentada para digitação.");
  293.             // Limpa os campos para digitaão de nova coleta
  294.             $this->form->clear(true);
  295.             TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'null);
  296.             $this->onReload();
  297.             } else if ($grava == 1) { // Lançada passa para emitida
  298.             TTransaction::open(self::$database); // open a transaction
  299.             $messageAction null;
  300.             $object = new RomaneioColeta(); // create an empty object 
  301.             $data $this->form->getData(); // get form data as array
  302.             $data->status 2;
  303.             $this->form->validate(); // validate form data
  304.             $object->fromArray( (array) $data); // load the object with data
  305.             $object->store(); // save the object 
  306.             $this->fireEvents($object);
  307.             $itens_romaneio_coleta_fk_romaneio_items $this->storeItems('ItensRomaneioColeta''romaneio'$object'itens_romaneio_coleta_fk_romaneio', function($masterObject$detailObject){ 
  308.                 //code here
  309.             }); 
  310.             // get the generated {PRIMARY_KEY}
  311.             $data->id $object->id
  312.             $this->form->setData($data); // fill form data
  313.             TTransaction::close(); // close the transaction
  314.             new TMessage('info', ('Romaneio Emitido!'), $messageAction);
  315.             } else { //"Lançado"
  316.             new TMessage('info'"Solicitação já Cancelada, um documento em branco será apresentada para digitação.");
  317.             // Limpa os campos para digitaão de nova coleta
  318.             $this->form->clear(true);
  319.             TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'null);
  320.             $this->onReload();
  321.             }
  322.         }
  323.         catch (Exception $e
  324.         {
  325.             new TMessage('error'$e->getMessage());    
  326.         }
  327.     }
  328.     public function onAction($param null
  329.     {
  330.         try 
  331.         {
  332.             //code here
  333.         }
  334.         catch (Exception $e
  335.         {
  336.             new TMessage('error'$e->getMessage());    
  337.         }
  338.     }
  339.     public function onEdit$param )
  340.     {
  341.         try
  342.         {
  343.             if (isset($param['key']))
  344.             {
  345.                 $key $param['key'];  // get the parameter $key
  346.                 TTransaction::open(self::$database); // open a transaction
  347.                 $object = new RomaneioColeta($key); // instantiates the Active Record 
  348.                 $itens_romaneio_coleta_fk_romaneio_items $this->loadItems('ItensRomaneioColeta''romaneio'$object'itens_romaneio_coleta_fk_romaneio', function($masterObject$detailObject$objectItems){ 
  349.                     //code here
  350.                 }); 
  351.                 $this->form->setData($object); // fill the form 
  352.                 $this->fireEvents($object);
  353.                 $this->onReload();
  354.                 TTransaction::close(); // close the transaction 
  355.             }
  356.             else
  357.             {
  358.                 $this->form->clear();
  359.             }
  360.         }
  361.         catch (Exception $e// in case of exception
  362.         {
  363.             new TMessage('error'$e->getMessage()); // shows the exception error message
  364.             TTransaction::rollback(); // undo all pending operations
  365.         }
  366.     }
  367.     /**
  368.      * Clear form data
  369.      * @param $param Request
  370.      */
  371.     public function onClear$param )
  372.     {
  373.         $this->form->clear(true);
  374.         TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'null);
  375.         $this->onReload();
  376.     }
  377.     public function onAddItensRomaneioColetaFkRomaneio$param )
  378.     {
  379.         try
  380.         {
  381.             $data $this->form->getData();
  382.             if(!$data->itens_romaneio_coleta_fk_romaneio_solicitacao)
  383.             {
  384.                 throw new Exception(AdiantiCoreTranslator::translate('The field ^1 is required'"Solicitacao"));
  385.             }             
  386.             $itens_romaneio_coleta_fk_romaneio_items TSession::getValue('itens_romaneio_coleta_fk_romaneio_items');
  387.             $key = isset($data->itens_romaneio_coleta_fk_romaneio_id) && $data->itens_romaneio_coleta_fk_romaneio_id $data->itens_romaneio_coleta_fk_romaneio_id uniqid();
  388.             $fields = []; 
  389.             $fields['coletasEmitidas'] = $data->coletasEmitidas;
  390.             $fields['itens_romaneio_coleta_fk_romaneio_ocoren_de_para'] = $data->itens_romaneio_coleta_fk_romaneio_ocoren_de_para;
  391.             $fields['itens_romaneio_coleta_fk_romaneio_solicitacao'] = $data->itens_romaneio_coleta_fk_romaneio_solicitacao;
  392.             $fields['itens_romaneio_coleta_fk_romaneio_remetente'] = $data->itens_romaneio_coleta_fk_romaneio_remetente;
  393.             $fields['itens_romaneio_coleta_fk_romaneio_destinatario'] = $data->itens_romaneio_coleta_fk_romaneio_destinatario;
  394.             $fields['itens_romaneio_coleta_fk_romaneio_volume'] = $data->itens_romaneio_coleta_fk_romaneio_volume;
  395.             $fields['itens_romaneio_coleta_fk_romaneio_peso'] = $data->itens_romaneio_coleta_fk_romaneio_peso;
  396.             $fields['itens_romaneio_coleta_fk_romaneio_cubagem'] = $data->itens_romaneio_coleta_fk_romaneio_cubagem;
  397.             $fields['itens_romaneio_coleta_fk_romaneio_valor_nfe'] = $data->itens_romaneio_coleta_fk_romaneio_valor_nfe;
  398.             $fields['itens_romaneio_coleta_fk_romaneio_data_cadastro'] = $data->itens_romaneio_coleta_fk_romaneio_data_cadastro;
  399.             $fields['itens_romaneio_coleta_fk_romaneio_data_alteracao'] = $data->itens_romaneio_coleta_fk_romaneio_data_alteracao;
  400.             $itens_romaneio_coleta_fk_romaneio_items$key ] = $fields;
  401.             TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'$itens_romaneio_coleta_fk_romaneio_items);
  402.             $data->itens_romaneio_coleta_fk_romaneio_id '';
  403.             $data->coletasEmitidas '';
  404.             $data->itens_romaneio_coleta_fk_romaneio_ocoren_de_para '';
  405.             $data->itens_romaneio_coleta_fk_romaneio_solicitacao '';
  406.             $data->itens_romaneio_coleta_fk_romaneio_remetente '';
  407.             $data->itens_romaneio_coleta_fk_romaneio_destinatario '';
  408.             $data->itens_romaneio_coleta_fk_romaneio_volume '';
  409.             $data->itens_romaneio_coleta_fk_romaneio_peso '';
  410.             $data->itens_romaneio_coleta_fk_romaneio_cubagem '';
  411.             $data->itens_romaneio_coleta_fk_romaneio_valor_nfe '';
  412.             $data->itens_romaneio_coleta_fk_romaneio_data_cadastro '';
  413.             $data->itens_romaneio_coleta_fk_romaneio_data_alteracao '';
  414.             $this->form->setData($data);
  415.             $this->fireEvents($data);
  416.             $this->onReload$param );
  417.         }
  418.         catch (Exception $e)
  419.         {
  420.             $this->form->setData$this->form->getData());
  421.             $this->fireEvents($data);
  422.             new TMessage('error'$e->getMessage());
  423.         }
  424.     }
  425.     public function onEditItensRomaneioColetaFkRomaneio$param )
  426.     {
  427.         $data $this->form->getData();
  428.         // read session items
  429.         $items TSession::getValue('itens_romaneio_coleta_fk_romaneio_items');
  430.         // get the session item
  431.         $item $items[$param['itens_romaneio_coleta_fk_romaneio_id_row_id']];
  432.         $data->coletasEmitidas $item['coletasEmitidas'];
  433.         $data->itens_romaneio_coleta_fk_romaneio_ocoren_de_para $item['itens_romaneio_coleta_fk_romaneio_ocoren_de_para'];
  434.         $data->itens_romaneio_coleta_fk_romaneio_solicitacao $item['itens_romaneio_coleta_fk_romaneio_solicitacao'];
  435.         $data->itens_romaneio_coleta_fk_romaneio_remetente $item['itens_romaneio_coleta_fk_romaneio_remetente'];
  436.         $data->itens_romaneio_coleta_fk_romaneio_destinatario $item['itens_romaneio_coleta_fk_romaneio_destinatario'];
  437.         $data->itens_romaneio_coleta_fk_romaneio_volume $item['itens_romaneio_coleta_fk_romaneio_volume'];
  438.         $data->itens_romaneio_coleta_fk_romaneio_peso $item['itens_romaneio_coleta_fk_romaneio_peso'];
  439.         $data->itens_romaneio_coleta_fk_romaneio_cubagem $item['itens_romaneio_coleta_fk_romaneio_cubagem'];
  440.         $data->itens_romaneio_coleta_fk_romaneio_valor_nfe $item['itens_romaneio_coleta_fk_romaneio_valor_nfe'];
  441.         $data->itens_romaneio_coleta_fk_romaneio_data_cadastro $item['itens_romaneio_coleta_fk_romaneio_data_cadastro'];
  442.         $data->itens_romaneio_coleta_fk_romaneio_data_alteracao $item['itens_romaneio_coleta_fk_romaneio_data_alteracao'];
  443.         $data->itens_romaneio_coleta_fk_romaneio_id $param['itens_romaneio_coleta_fk_romaneio_id_row_id'];
  444.         // fill product fields
  445.         $this->form->setData$data );
  446.         $this->fireEvents($data);
  447.         $this->onReload$param );
  448.     }
  449.     public function onDeleteItensRomaneioColetaFkRomaneio$param )
  450.     {
  451.         $data $this->form->getData();
  452.         $data->coletasEmitidas '';
  453.         $data->itens_romaneio_coleta_fk_romaneio_ocoren_de_para '';
  454.         $data->itens_romaneio_coleta_fk_romaneio_solicitacao '';
  455.         $data->itens_romaneio_coleta_fk_romaneio_remetente '';
  456.         $data->itens_romaneio_coleta_fk_romaneio_destinatario '';
  457.         $data->itens_romaneio_coleta_fk_romaneio_volume '';
  458.         $data->itens_romaneio_coleta_fk_romaneio_peso '';
  459.         $data->itens_romaneio_coleta_fk_romaneio_cubagem '';
  460.         $data->itens_romaneio_coleta_fk_romaneio_valor_nfe '';
  461.         $data->itens_romaneio_coleta_fk_romaneio_data_cadastro '';
  462.         $data->itens_romaneio_coleta_fk_romaneio_data_alteracao '';
  463.         // clear form data
  464.         $this->form->setData$data );
  465.         // read session items
  466.         $items TSession::getValue('itens_romaneio_coleta_fk_romaneio_items');
  467.         // delete the item from session
  468.         unset($items[$param['itens_romaneio_coleta_fk_romaneio_id_row_id']]);
  469.         TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'$items);
  470.         $this->fireEvents($data);
  471.         // reload sale items
  472.         $this->onReload$param );
  473.     }
  474.     public function onReloadItensRomaneioColetaFkRomaneio$param )
  475.     {
  476.         $items TSession::getValue('itens_romaneio_coleta_fk_romaneio_items'); 
  477.         $this->itens_romaneio_coleta_fk_romaneio_list->clear(); 
  478.         if($items
  479.         { 
  480.             $cont 1
  481.             foreach ($items as $key => $item
  482.             {
  483.                 $rowItem = new StdClass;
  484.                 $action_del = new TAction(array($this'onDeleteItensRomaneioColetaFkRomaneio')); 
  485.                 $action_del->setParameter('itens_romaneio_coleta_fk_romaneio_id_row_id'$key);
  486.                 $action_del->setParameter('row_data'base64_encode(serialize($item)));
  487.                 $action_del->setParameter('key'$key);
  488.                 $action_edi = new TAction(array($this'onEditItensRomaneioColetaFkRomaneio'));  
  489.                 $action_edi->setParameter('itens_romaneio_coleta_fk_romaneio_id_row_id'$key);  
  490.                 $action_edi->setParameter('row_data'base64_encode(serialize($item)));
  491.                 $action_edi->setParameter('key'$key);
  492.                 $button_del = new TButton('delete_itens_romaneio_coleta_fk_romaneio'.$cont);
  493.                 $button_del->setAction($action_del'');
  494.                 $button_del->setFormName($this->form->getName());
  495.                 $button_del->class 'btn btn-link btn-sm';
  496.                 $button_del->title "Excluir";
  497.                 $button_del->setImage('fas:trash-alt #dd5a43');
  498.                 $rowItem->delete $button_del;
  499.                 $button_edi = new TButton('edit_itens_romaneio_coleta_fk_romaneio'.$cont);
  500.                 $button_edi->setAction($action_edi'');
  501.                 $button_edi->setFormName($this->form->getName());
  502.                 $button_edi->class 'btn btn-link btn-sm';
  503.                 $button_edi->title "Editar";
  504.                 $button_edi->setImage('far:edit #478fca');
  505.                 $rowItem->edit $button_edi;
  506.                 $rowItem->coletasEmitidas '';
  507.                 if(isset($item['coletasEmitidas']) && $item['coletasEmitidas'])
  508.                 {
  509.                     TTransaction::open('transpalog');
  510.                     $solicitacao Solicitacao::find($item['coletasEmitidas']);
  511.                     if($solicitacao)
  512.                     {
  513.                         $rowItem->coletasEmitidas $solicitacao->render('{numero_coleta}');
  514.                     }
  515.                     TTransaction::close();
  516.                 }
  517.                 $rowItem->itens_romaneio_coleta_fk_romaneio_ocoren_de_para '';
  518.                 if(isset($item['itens_romaneio_coleta_fk_romaneio_ocoren_de_para']) && $item['itens_romaneio_coleta_fk_romaneio_ocoren_de_para'])
  519.                 {
  520.                     TTransaction::open('transpalog');
  521.                     $ocoren_de_para OcorenDePara::find($item['itens_romaneio_coleta_fk_romaneio_ocoren_de_para']);
  522.                     if($ocoren_de_para)
  523.                     {
  524.                         $rowItem->itens_romaneio_coleta_fk_romaneio_ocoren_de_para $ocoren_de_para->render('{codigo}');
  525.                     }
  526.                     TTransaction::close();
  527.                 }
  528.                 $rowItem->itens_romaneio_coleta_fk_romaneio_solicitacao '';
  529.                 if(isset($item['itens_romaneio_coleta_fk_romaneio_solicitacao']) && $item['itens_romaneio_coleta_fk_romaneio_solicitacao'])
  530.                 {
  531.                     TTransaction::open('transpalog');
  532.                     $solicitacao Solicitacao::find($item['itens_romaneio_coleta_fk_romaneio_solicitacao']);
  533.                     if($solicitacao)
  534.                     {
  535.                         $rowItem->itens_romaneio_coleta_fk_romaneio_solicitacao $solicitacao->render('{numero_coleta}');
  536.                     }
  537.                     TTransaction::close();
  538.                 }
  539.                 $rowItem->itens_romaneio_coleta_fk_romaneio_remetente '';
  540.                 if(isset($item['itens_romaneio_coleta_fk_romaneio_remetente']) && $item['itens_romaneio_coleta_fk_romaneio_remetente'])
  541.                 {
  542.                     TTransaction::open('transpalog');
  543.                     $solicitacao Solicitacao::find($item['itens_romaneio_coleta_fk_romaneio_remetente']);
  544.                     if($solicitacao)
  545.                     {
  546.                         $rowItem->itens_romaneio_coleta_fk_romaneio_remetente $solicitacao->render('{fk_embarcador->razao_social}');
  547.                     }
  548.                     TTransaction::close();
  549.                 }
  550.                 $rowItem->itens_romaneio_coleta_fk_romaneio_destinatario '';
  551.                 if(isset($item['itens_romaneio_coleta_fk_romaneio_destinatario']) && $item['itens_romaneio_coleta_fk_romaneio_destinatario'])
  552.                 {
  553.                     TTransaction::open('transpalog');
  554.                     $pessoa Pessoa::find($item['itens_romaneio_coleta_fk_romaneio_destinatario']);
  555.                     if($pessoa)
  556.                     {
  557.                         $rowItem->itens_romaneio_coleta_fk_romaneio_destinatario $pessoa->render('{razao_social_nome}');
  558.                     }
  559.                     TTransaction::close();
  560.                 }
  561.                 $rowItem->itens_romaneio_coleta_fk_romaneio_volume = isset($item['itens_romaneio_coleta_fk_romaneio_volume']) ? $item['itens_romaneio_coleta_fk_romaneio_volume'] : '';
  562.                 $rowItem->itens_romaneio_coleta_fk_romaneio_peso = isset($item['itens_romaneio_coleta_fk_romaneio_peso']) ? $item['itens_romaneio_coleta_fk_romaneio_peso'] : '';
  563.                 $rowItem->itens_romaneio_coleta_fk_romaneio_cubagem = isset($item['itens_romaneio_coleta_fk_romaneio_cubagem']) ? $item['itens_romaneio_coleta_fk_romaneio_cubagem'] : '';
  564.                 $rowItem->itens_romaneio_coleta_fk_romaneio_valor_nfe = isset($item['itens_romaneio_coleta_fk_romaneio_valor_nfe']) ? $item['itens_romaneio_coleta_fk_romaneio_valor_nfe'] : '';
  565.                 $rowItem->itens_romaneio_coleta_fk_romaneio_data_cadastro = isset($item['itens_romaneio_coleta_fk_romaneio_data_cadastro']) ? $item['itens_romaneio_coleta_fk_romaneio_data_cadastro'] : '';
  566.                 $rowItem->itens_romaneio_coleta_fk_romaneio_data_alteracao = isset($item['itens_romaneio_coleta_fk_romaneio_data_alteracao']) ? $item['itens_romaneio_coleta_fk_romaneio_data_alteracao'] : '';
  567.                 $row $this->itens_romaneio_coleta_fk_romaneio_list->addItem($rowItem);
  568.                 $cont++;
  569.             } 
  570.         } 
  571.     } 
  572.     public function onShow($param null)
  573.     {
  574.         TSession::setValue('itens_romaneio_coleta_fk_romaneio_items'null);
  575.         $this->onReload();
  576.     } 
  577.     public function fireEvents$object )
  578.     {
  579.         $obj = new stdClass;
  580.         if(is_object($object) && get_class($object) == 'stdClass')
  581.         {
  582.             if(isset($object->motorista_id))
  583.             {
  584.                 $obj->motorista_id $object->motorista_id;
  585.             }
  586.             if(isset($object->veiculo))
  587.             {
  588.                 $obj->veiculo $object->veiculo;
  589.             }
  590.         }
  591.         elseif(is_object($object))
  592.         {
  593.             if(isset($object->motorista_id))
  594.             {
  595.                 $obj->motorista_id $object->motorista_id;
  596.             }
  597.             if(isset($object->veiculo))
  598.             {
  599.                 $obj->veiculo $object->veiculo;
  600.             }
  601.         }
  602.         TForm::sendData(self::$formName$obj);
  603.     }  
  604.     public function onReload($params null)
  605.     {
  606.         $this->loaded TRUE;
  607.         $this->onReloadItensRomaneioColetaFkRomaneio($params);
  608.     }
  609.     public function show() 
  610.     { 
  611.         $param func_get_arg(0);
  612.         if(!empty($param['current_tab']))
  613.         {
  614.             $this->form->setCurrentPage($param['current_tab']);
  615.         }
  616.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') ) 
  617.         { 
  618.             $this->onReloadfunc_get_arg(0) );
  619.         }
  620.         parent::show();
  621.     }
  622.     public static function onYes($param null
  623.     {
  624.         try 
  625.         {
  626.             //code here
  627.         }
  628.         catch (Exception $e
  629.         {
  630.             new TMessage('error'$e->getMessage());    
  631.         }
  632.     }
  633.     public static function onNo($param null
  634.     {
  635.         try 
  636.         {
  637.             //code here
  638.         }
  639.         catch (Exception $e
  640.         {
  641.             new TMessage('error'$e->getMessage());    
  642.         }
  643.     }
  644. }
NR

Você tem os dados das coletas selecionadas na sessão. Basta fazer um laço, obter os ids selecionados e recarregar a combo com um filtro not in(ids_selecionados)