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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


NR

É 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($value, 2, ",", ".");
  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', $criteria, TRUE);
  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->onReload( func_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)