Formatar valor numérico no DataGrid Bom dia a todos, Preciso formatar a coluna do grid com valor numérico separado por milhar e casa decimal. (exemplo: 9.999,99) Não conseguir achar nos exemplos do site que demonstre isso. Alguém já fez e poderia orientar-me a fazer? ...
CG
Formatar valor numérico no DataGrid  
Fechado
Bom dia a todos,

Preciso formatar a coluna do grid com valor numérico separado por milhar e casa decimal. (exemplo: 9.999,99)

Não conseguir achar nos exemplos do site que demonstre isso.

Alguém já fez e poderia orientar-me a fazer?



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)


FC

faz a mesma que vc fez aqui. coisa adianti.com.br/forum/pt/view_786?coluna-data-no-tdatagrid
PD

Oi Carlos,

É isso mesmo:
www.adianti.com.br/framework_files/tutor/index.php?class=DatagridTra

abs,
Pablo
RF

Bom dia...

Galera me ajuda aí, estou me baseando no exemplo do Pablo, mas dá erro ao rodar o programa.
Método setTransformer() não encontrado

File: appcontrolcoletasordem_de_coleta.class.php : 200
AdiantiWidgetFormTField->__call(setTransformer,array)
File: libadianticoreAdiantiCoreApplication.php : 60
ordem_de_coleta->__construct(ordem_de_coleta)
File: engine.php : 23
AdiantiCoreAdiantiCoreApplication::run(1)
File: engine.php : 64
TApplication::run(1)

Não consigo entender aonde estou errando, segue abaixo o código completo:

 
  1. <?php
  2. /**
  3. * ordem_de_coleta Master/Detail
  4. * @author <your name here>
  5. */
  6. class ordem_de_coleta extends TPage
  7. {
  8. protected $form; // form
  9. protected $detail_list;
  10. /**
  11. * Page constructor
  12. */
  13. public function __construct()
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new BootstrapFormBuilder('form_ordem_coleta');
  18. $this->form->setFormTitle('Ordem de coleta');
  19. $this->form->setFieldSizes('100%');
  20. // master fields
  21. $id = new TEntry('id');
  22. $status = new TEntry('status');//TDBCombo('status', 'banco', 'status', 'descricao', 'descricao');
  23. $data_coleta = new TDate('data_coleta');
  24. $unidade_id = new TDBCombo('unidade_id','banco','unidade','id','razao_social');
  25. //$cliente = new TDBCombo ('cliente', 'banco', 'cliente', 'id', 'razao_social');
  26. $cliente = new TDBCombo('cliente', 'banco', 'cliente', 'id', 'razao_social');
  27. $loja_id = new TDBCombo('loja_id', 'banco', 'loja','id','nome_fantasia');//TEntry('loja_id');
  28. //$loja_id = new TDBUniqueSearch('loja_id', 'banco', 'loja', 'id', 'nome_fantasia');
  29. $cnpj_loja = new TDBUniqueSearch('cnpj_loja','banco','loja','id','cnpj');//TEntry('cnpj_loja');
  30. $rsocial_loja = new TEntry('rsocial_loja');
  31. $cep_loja = new TEntry('cep_loja');
  32. $endereco_loja = new TEntry('endereco_loja');
  33. $numero_loja = new TEntry('numero_loja');
  34. $bairro_loja = new TEntry('bairro_loja');
  35. $uf_loja = new TEntry('uf_loja');//TDBCombo('uf_loja', 'banco', 'uf', 'id', 'descricao');
  36. $cidade_loja = new TEntry('cidade_loja');//TDBCombo('cidade_loja', 'banco', 'cidade', 'id', 'descricao');
  37. $contato_loja = new TEntry('contato_loja');
  38. $telefone_loja = new TEntry('telefone_loja');
  39. $intervalo_inicial = new TEntry('intervalo_inicial');
  40. $intervalo_final = new TEntry('intervalo_final');
  41. $hora_com_inicial = new TEntry('hora_com_inicial');
  42. $hora_com_fim = new TEntry('hora_com_fim');
  43. $sexta_inicial = new TEntry('sexta_inicial');
  44. $sexta_fim = new TEntry('sexta_fim');
  45. $tipo_veic = new TDBCombo('tipo_veic', 'banco', 'veiculos', 'tipo_rodado', 'tipo_rodado');//TEntry('tipo_veic');
  46. $obs_geral = new TText('obs_geral');
  47. $destinatario_id = new TDBUniqueSearch('destinatario_id', 'banco', 'destinatario', 'id', 'nome_rzsocizl');
  48. $uf_destino = new TEntry('uf_destino');
  49. $destinatario_nome = new TEntry('destinatario_nome');
  50. $contato_destinatario = new TEntry('contato_destinatario');
  51. $cnpj_destinatario = new TEntry('cnpj_destinatario');
  52. $cep_destinatario = new TEntry('cep_destinatario');
  53. $endereco_destinatario = new TEntry('endereco_destinatario');
  54. $numero_destinatario = new TEntry('numero_destinatario');
  55. $complemento_destinatario = new TEntry('complemento_destinatario');
  56. $bairro_destinatario = new TEntry('bairro_destinatario');
  57. $municipio_destinatario = new TEntry('municipio_destinatario');
  58. $telefone_destinatario = new TEntry('telefone_destinatario');
  59. // detail fields
  60. $detail_id = new THidden('detail_id');
  61. $detail_numero = new TEntry('detail_numero');
  62. $detail_serie = new TEntry('detail_serie');
  63. $detail_total_volumes = new TEntry('detail_total_volumes');
  64. $detail_total_peso = new TEntry('detail_total_peso');
  65. $detail_vlr_nota_fiscal = new TEntry('detail_vlr_nota_fiscal');
  66. $detail_especie_embalagem = new TDBCombo('detail_especie_embalagem', 'banco', 'especie_embalagem', 'descricao', 'descricao');
  67. $detail_grupo_natureza = new TDBCombo('detail_grupo_natureza', 'banco', 'grupo_natureza', 'descricao', 'descricao');
  68. //$detail_total_peso->setTransformer(array($this, 'formatValor'));
  69. if (!empty($id))
  70. {
  71. $id ->setEditable(FALSE);
  72. $status ->setEditable(FALSE);
  73. $cliente ->setEditable(FALSE);
  74. $loja_id ->setEditable(FALSE);
  75. }
  76. // definição de mascara
  77. $data_coleta ->setMask('dd/mm/yyyy');
  78. $detail_vlr_nota_fiscal->setNumericMask(2,',', '.', true);
  79. $detail_total_volumes ->setNumericMask(2,',', '.', true);
  80. $detail_total_peso ->setNumericMask(2,',', '.', true);
  81. // Mscara para os campos de hora
  82. $intervalo_inicial ->setMask('99:99');
  83. $intervalo_final ->setMask('99:99');
  84. $hora_com_inicial ->setMask('99:99');
  85. $hora_com_fim ->setMask('99:99');
  86. $sexta_inicial ->setMask('99:99');
  87. $sexta_fim ->setMask('99:99');
  88. // Busca as informações e preenche os campos da loja
  89. $cnpj_loja ->setChangeAction(new TAction([$this,'buscaDadosLoja']));//$loja_id
  90. // Busca as informações e preenche os campos do destinatário
  91. $destinatario_id ->setChangeAction(new TAction([$this,'buscaDadosDestinatario']));
  92. // master fields
  93. $row = $this->form->addFields( [ new TLabel('Número da coleta'), $id ],
  94. [ new TLabel('Status'), $status ] );
  95. $row->layout = ['col-sm-6', 'col-sm-6' ];
  96. $row = $this->form->addFields( [ new TLabel('Unidade'), $unidade_id ],
  97. [ new TLabel('Data da coleta'), $data_coleta ] );
  98. $row->layout = ['col-sm-6', 'col-sm-6' ];
  99. // Campos do solicitante
  100. $this->form->addContent( ['<h4>Dados do solicitante</h4><hr>'] );
  101. $row = $this->form->addFields( [ new TLabel('CNPJ da loja'), $cnpj_loja ],
  102. [ new TLabel('Razão Social'), $rsocial_loja ] );
  103. $row->layout = ['col-sm-6', 'col-sm-6' ];
  104. $row = $this->form->addFields( [ new TLabel('Cliente'), $cliente ],
  105. [ new TLabel('Nome Fantasia'), $loja_id ] );
  106. $row->layout = ['col-sm-6', 'col-sm-6' ];
  107. $row = $this->form->addFields( [ new TLabel('CEP'), $cep_loja ],
  108. [ new TLabel('UF'), $uf_loja ],
  109. [ new TLabel('Cidade'), $cidade_loja ] );
  110. $row->layout = ['col-sm-3', 'col-sm-3','col-sm-6' ];
  111. $row = $this->form->addFields( [ new TLabel('Endereço'), $endereco_loja ],
  112. [ new TLabel('Número'), $numero_loja ],
  113. [ new TLabel('Bairro'), $bairro_loja ] );
  114. $row->layout = ['col-sm-6', 'col-sm-2','col-sm-4' ];
  115. $row = $this->form->addFields( [ new TLabel('Contato'), $contato_loja ],
  116. [ new TLabel('Telefone'), $telefone_loja ] );
  117. $row->layout = ['col-sm-6', 'col-sm-6' ];
  118. // Campos dos destintário
  119. $this->form->addContent( ['<h4>Dados do destinatário</h4><hr>'] );
  120. $row = $this->form->addFields( [ new TLabel('Razão Social'), $destinatario_id ],
  121. [ new TLabel('CNPJ'), $cnpj_destinatario ],
  122. [ new TLabel('Nome Fantasia'), $destinatario_nome ] );
  123. $row->layout = ['col-sm-6', 'col-sm-2','col-sm-4' ];
  124. $row = $this->form->addFields( [ new TLabel('CEP'), $cep_destinatario ],
  125. [ new TLabel('UF'), $uf_destino ],
  126. [ new TLabel('Cidade'), $municipio_destinatario ] );
  127. $row->layout = ['col-sm-3', 'col-sm-3','col-sm-6' ];
  128. $row = $this->form->addFields( [ new TLabel('Endereço'), $endereco_destinatario ],
  129. [ new TLabel('Número'), $numero_destinatario ],
  130. [ new TLabel('Bairro'), $bairro_destinatario ] );
  131. $row->layout = ['col-sm-6', 'col-sm-2','col-sm-4' ];
  132. $row = $this->form->addFields( [ new TLabel('Complemento'), $complemento_destinatario ],
  133. [ new TLabel('Contato'), $contato_destinatario ],
  134. [ new TLabel('Telefone'), $telefone_destinatario ] );
  135. $row->layout = ['col-sm-4', 'col-sm-4','col-sm-4'];
  136. // Horários de Coleta
  137. $this->form->addContent( ['<h4>Hora para coleta</h4><hr>'] );
  138. $row = $this->form->addFields( [ new TLabel('Hora inicial'), $intervalo_inicial ],
  139. [ new TLabel('Hora final'), $intervalo_final ] );
  140. $row->layout = ['col-sm-6', 'col-sm-6' ];
  141. $this->form->addContent( ['<h4>Intervalo de almoço</h4><hr>'] );
  142. $row = $this->form->addFields( [ new TLabel('Hora inicial'), $hora_com_inicial ],
  143. [ new TLabel('Hora final'), $hora_com_fim ] );
  144. $row->layout = ['col-sm-6', 'col-sm-6' ];
  145. $this->form->addContent( ['<h4>Intervalo de Sexta-Feira</h4><hr>'] );
  146. $row = $this->form->addFields( [ new TLabel('Hora inicial'), $sexta_inicial],
  147. [ new TLabel('Hora final'), $sexta_fim ] );
  148. $row->layout = ['col-sm-6', 'col-sm-6' ];
  149. $this->form->addContent( ['<h4>Veículo e observações gerais</h4><hr>'] );
  150. $row = $this->form->addFields( [ new TLabel('Tipo de veículo'), $tipo_veic ],
  151. [ new TLabel('Obs Geral'), $obs_geral ] );
  152. $row->layout = ['col-sm-6', 'col-sm-6' ];
  153. // Validações
  154. $loja_id ->addValidation('Loja', new TRequiredValidator);
  155. $destinatario_id ->addValidation('Destinatário', new TRequiredValidator);
  156. // detail fields
  157. $this->form->addContent( ['<h4>Dados da nota fiscal</h4><hr>'] );
  158. $this->form->addFields( [$detail_id] );
  159. $row = $this->form->addFields( [ new TLabel('NF-e'), $detail_numero ],
  160. [ new TLabel('Série'), $detail_serie ] );
  161. $row->layout = ['col-sm-8', 'col-sm-4' ];
  162. $row = $this->form->addFields( [ new TLabel('Total de volumes'), $detail_total_volumes ],
  163. [ new TLabel('Peso total'), $detail_total_peso ],
  164. [ new TLabel('Valor da nota'), $detail_vlr_nota_fiscal ] );
  165. $row->layout = ['col-sm-4', 'col-sm-4','col-sm-4' ];
  166. $row = $this->form->addFields( [ new TLabel('Especie embalagem'), $detail_especie_embalagem ],
  167. [ new TLabel('Grupo natureza'), $detail_grupo_natureza ] );
  168. $row->layout = ['col-sm-6', 'col-sm-6' ];
  169. $add = TButton::create('add', [$this, 'onSaveDetail'], 'Registrar', 'fa:save');
  170. $this->form->addFields( [], [$add] )->style = 'background: whitesmoke; padding: 5px; margin: 1px;';
  171. $this->detail_list = new BootstrapDatagridWrapper(new TQuickGrid);
  172. $this->detail_list->style = "min-width: 700px; width:100%;margin-bottom: 10px";
  173. $this->detail_list->setId('ordem_coleta_list');
  174. // items
  175. $this->detail_list->addQuickColumn('NF-e', 'numero', 'left', 100);
  176. $this->detail_list->addQuickColumn('Série', 'serie', 'left', 100);
  177. $this->detail_list->addQuickColumn('Volumes', 'total_volumes', 'left', 100);
  178. $this->detail_list->addQuickColumn('Peso','total_peso', 'left', 100);
  179. $this->detail_list->addQuickColumn('Valor', 'vlr_nota_fiscal', 'left', 100);
  180. $this->detail_list->addQuickColumn('Embalagem', 'especie_embalagem', 'left', 100);//especie_embalagem
  181. $this->detail_list->addQuickColumn('Natureza', 'grupo_natureza', 'left', 100);
  182. $detail_vlr_nota_fiscal->setTransformer(array($this, 'formatSalary'));
  183. // detail actions
  184. $this->detail_list->addQuickAction( 'Edit', new TDataGridAction([$this, 'onEditDetail']), 'id', 'fa:edit blue');
  185. $this->detail_list->addQuickAction( 'Delete', new TDataGridAction([$this, 'onDeleteDetail']), 'id', 'fa:trash red');
  186. $this->detail_list->createModel();
  187. $panel = new TPanelGroup;
  188. $panel->add($this->detail_list);
  189. $panel->getBody()->style = 'overflow-x:auto';
  190. $this->form->addContent( [$panel] );
  191. $btn = $this->form->addAction( _t('Save'), new TAction([$this, 'onSave']), 'fa:save');
  192. $btn->class = 'btn btn-sm btn-primary';
  193. $this->form->addAction(('Nova') , new TAction([$this, 'onClear']), 'fa:eraser red');
  194. $this->form->addAction( _t('Back') , new TAction(array('lista_de_odem_coleta','onReload')), 'fa:arrow-circle-o-left blue' );
  195. $this->form->addAction(('Imprimir'), new TAction([$this, 'onGenerate']), 'fa:eraser red');
  196. // create the page container
  197. $container = new TVBox;
  198. $container->style = 'width: 90%';
  199. $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  200. $container->add($this->form);
  201. parent::add($container);
  202. }
  203. /**
  204. * Format salary
  205. */
  206. public function formatSalary($detail_vlr_nota_fiscal, $object, $row)
  207. {
  208. $number = number_format($detail_vlr_nota_fiscal, 2, ',', '.');
  209. if ($stock > 0)
  210. {
  211. return "<span style='color:blue'>$number</span>";
  212. }
  213. else
  214. {
  215. $row->style = "background: #FFF9A7";
  216. return "<span style='color:red'>$number</span>";
  217. }
  218. }
  219. /**
  220. * Clear form
  221. * @param $param URL parameters
  222. */
  223. public function onClear($param)
  224. {
  225. $this->form->clear(TRUE);
  226. TSession::setValue(__CLASS__.'_items', array());
  227. $this->onReload( $param );
  228. }
  229. /**
  230. * Busca os dados da loja
  231. */
  232. static function buscaDadosLoja( $params )
  233. {
  234. if( !empty($params['cnpj_loja']) )
  235. {
  236. try
  237. {
  238. TTransaction::open('banco');
  239. // MODEL
  240. $loja = new loja($params['cnpj_loja']);
  241. $campos_model = new StdClass;
  242. // campo do form = model->campo na model
  243. $campos_model->cnpj_loja = $loja->cnpj;
  244. $campos_model->rsocial_loja = $loja->razao_social;
  245. $campos_model->uf_loja = $loja->uf;
  246. $campos_model->cidade_loja = $loja->cidade;
  247. $campos_model->cep_loja = $loja->cep;
  248. $campos_model->endereco_loja= $loja->endereco;
  249. $campos_model->numero_loja = $loja->numero;
  250. $campos_model->bairro_loja = $loja->bairro;
  251. $campos_model->contato_loja = $loja->contato;
  252. $campos_model->telefone_loja= $loja->telefone;
  253. $campos_model->cliente = $loja->cliente_id;
  254. $campos_model->loja_id = $loja->id;
  255. TForm::sendData('form_ordem_coleta', $campos_model);
  256. TTransaction::close();
  257. }
  258. catch (Exception $e) // in case of exception
  259. {
  260. new TMessage('error', $e->getMessage());
  261. TTransaction::rollback();
  262. }
  263. }
  264. }
  265. /**
  266. * Busca os dados do destinatário
  267. */
  268. static function buscaDadosDestinatario( $params )
  269. {
  270. if( !empty($params['loja_id']) )
  271. {
  272. try
  273. {
  274. TTransaction::open('banco');
  275. // MODEL
  276. $loja = new destinatario($params['destinatario_id']);
  277. $campos_model = new StdClass;
  278. $campos_model->cnpj_destinatario = $loja->cnpj_cpf; // campo do form = model->campo na model
  279. $campos_model->destinatario_nome = $loja->nome_rzsocizl;
  280. $campos_model->uf_destino = $loja->uf;
  281. $campos_model->municipio_destinatario = $loja->cidade;
  282. $campos_model->cep_destinatario = $loja->cep;
  283. $campos_model->endereco_destinatario = $loja->endereco;
  284. $campos_model->numero_destinatario = $loja->numero;
  285. $campos_model->bairro_destinatario = $loja->bairro;
  286. $campos_model->contato_destinatario = $loja->contato;
  287. $campos_model->telefone_destinatario = $loja->telefone;
  288. TForm::sendData('form_ordem_coleta', $campos_model);
  289. TTransaction::close();
  290. }
  291. catch (Exception $e) // in case of exception
  292. {
  293. new TMessage('error', $e->getMessage());
  294. TTransaction::rollback();
  295. }
  296. }
  297. }
  298. //Impressão de Ordem de coleta
  299. public function onGenerate($param)
  300. {
  301. //Pega os dados do formulário
  302. $data = $this->form->getData();
  303. $this->form->setData($data);
  304. //Vai no modelo de relatório - se tive que mudar coloca o nome aqui
  305. $designer = new TPDFDesigner;
  306. $designer->fromXml('app/reports/ordem_de_coleta.pdf.xml');
  307. $designer->generate();
  308. //Fonte das letras
  309. $designer->SetFont('Arial','B',12);
  310. //passa para o formulário todos os campos
  311. $designer->writeAtAnchor('id' ,$data->id);
  312. $designer->writeAtAnchor('id2',$data->id); //Repete para a segunda parte
  313. $designer->writeAtAnchor('rsocial_loja',utf8_decode($data->rsocial_loja));
  314. $designer->save('app/output/ordem_de_coleta.pdf');
  315. parent::openFile('app/output/ordem_de_coleta.pdf');
  316. }
  317. /**
  318. * Save an item from form to session list
  319. * @param $param URL parameters
  320. */
  321. public function onSaveDetail( $param )
  322. {
  323. try
  324. {
  325. TTransaction::open('banco');
  326. $data = $this->form->getData();
  327. /** validation sample
  328. if (empty($data->fieldX))
  329. {
  330. throw new Exception('The field fieldX is required');
  331. }
  332. **/
  333. $items = TSession::getValue(__CLASS__.'_items');
  334. $key = empty($data->detail_id) ? 'X'.mt_rand(1000000000, 1999999999) : $data->detail_id;
  335. $items[ $key ] = array();
  336. $items[ $key ]['id'] = $key;
  337. $items[ $key ]['numero'] = $data->detail_numero;
  338. $items[ $key ]['serie'] = $data->detail_serie;
  339. $items[ $key ]['total_volumes'] = $data->detail_total_volumes;
  340. $items[ $key ]['total_peso'] = $data->detail_total_peso;
  341. $items[ $key ]['vlr_nota_fiscal'] = $data->detail_vlr_nota_fiscal;
  342. $items[ $key ]['especie_embalagem'] = $data->detail_especie_embalagem;
  343. $items[ $key ]['grupo_natureza'] = $data->detail_grupo_natureza;
  344. TSession::setValue(__CLASS__.'_items', $items);
  345. // clear detail form fields
  346. $data->detail_id = '';
  347. $data->detail_numero = '';
  348. $data->detail_serie = '';
  349. $data->detail_total_volumes = '';
  350. $data->detail_total_peso = '';
  351. $data->detail_vlr_nota_fiscal = '';
  352. $data->detail_especie_embalagem = '';
  353. $data->detail_grupo_natureza = '';
  354. TTransaction::close();
  355. $this->form->setData($data);
  356. $this->onReload( $param ); // reload the items
  357. }
  358. catch (Exception $e)
  359. {
  360. $this->form->setData( $this->form->getData());
  361. new TMessage('error', $e->getMessage());
  362. }
  363. }
  364. /**
  365. * Load an item from session list to detail form
  366. * @param $param URL parameters
  367. */
  368. public static function onEditDetail( $param )
  369. {
  370. // read session items
  371. $items = TSession::getValue(__CLASS__.'_items');
  372. // get the session item
  373. $item = $items[ $param['key'] ];
  374. $data = new stdClass;
  375. $data->detail_id = $item['id'];
  376. $data->detail_numero = $item['numero'];
  377. $data->detail_serie = $item['serie'];
  378. $data->detail_total_volumes = $item['total_volumes'];
  379. $data->detail_total_peso = $item['total_peso'];
  380. $data->detail_vlr_nota_fiscal = $item['vlr_nota_fiscal'];
  381. $data->detail_especie_embalagem = $item['especie_embalagem'];
  382. $data->detail_grupo_natureza = $item['grupo_natureza'];
  383. // fill detail fields
  384. TForm::sendData( 'form_ordem_coleta', $data );
  385. }
  386. /**
  387. * Delete an item from session list
  388. * @param $param URL parameters
  389. */
  390. public static function onDeleteDetail( $param )
  391. {
  392. // reset items
  393. $data = new stdClass;
  394. $data->detail_numero = '';
  395. $data->detail_serie = '';
  396. $data->detail_total_volumes = '';
  397. $data->detail_total_peso = '';
  398. $data->detail_vlr_nota_fiscal = '';
  399. $data->detail_especie_embalagem = '';
  400. $data->detail_grupo_natureza = '';
  401. // clear form data
  402. TForm::sendData('form_ordem_coleta', $data );
  403. // read session items
  404. $items = TSession::getValue(__CLASS__.'_items');
  405. // get detail id
  406. $detail_id = $param['key'];
  407. // delete the item from session
  408. unset($items[ $detail_id ] );
  409. // rewrite session items
  410. TSession::setValue(__CLASS__.'_items', $items);
  411. // delete item from screen
  412. TScript::create("ttable_remove_row_by_id('ordem_coleta_list', '{$detail_id}')");
  413. }
  414. /**
  415. * Load the items list from session
  416. * @param $param URL parameters
  417. */
  418. public function onReload($param)
  419. {
  420. // read session items
  421. $items = TSession::getValue(__CLASS__.'_items');
  422. $this->detail_list->clear(); // clear detail list
  423. if ($items)
  424. {
  425. foreach ($items as $list_item)
  426. {
  427. $item = (object) $list_item;
  428. $row = $this->detail_list->addItem( $item );
  429. $row->id = $list_item['id'];
  430. }
  431. }
  432. $this->loaded = TRUE;
  433. }
  434. /**
  435. * Load Master/Detail data from database to form/session
  436. */
  437. public function onEdit($param)
  438. {
  439. try
  440. {
  441. TTransaction::open('banco');
  442. if (isset($param['key']))
  443. {
  444. $key = $param['key'];
  445. $object = new ordem_coleta($key);
  446. $items = nota_fiscal_coleta::where('ordem_coleta_id', '=', $key)->load();
  447. $session_items = array();
  448. foreach( $items as $item )
  449. {
  450. $item_key = $item->id;
  451. $session_items[$item_key] = $item->toArray();
  452. $session_items[$item_key]['id'] = $item->id;
  453. $session_items[$item_key]['numero'] = $item->numero;
  454. $session_items[$item_key]['serie'] = $item->serie;
  455. $session_items[$item_key]['total_volumes'] = $item->total_volumes;
  456. $session_items[$item_key]['total_peso'] = $item->total_peso;
  457. $session_items[$item_key]['vlr_nota_fiscal'] = $item->vlr_nota_fiscal;
  458. $session_items[$item_key]['especie_embalagem'] = $item->especie_embalagem;
  459. $session_items[$item_key]['grupo_natureza'] = $item->grupo_natureza;
  460. }
  461. TSession::setValue(__CLASS__.'_items', $session_items);
  462. $this->form->setData($object); // fill the form with the active record data
  463. $this->onReload( $param ); // reload items list
  464. TTransaction::close(); // close transaction
  465. }
  466. else
  467. {
  468. $this->form->clear(TRUE);
  469. TSession::setValue(__CLASS__.'_items', null);
  470. $this->onReload( $param );
  471. }
  472. }
  473. catch (Exception $e) // in case of exception
  474. {
  475. new TMessage('error', $e->getMessage());
  476. TTransaction::rollback();
  477. }
  478. }
  479. /**
  480. * Save the Master/Detail data from form/session to database
  481. */
  482. public function onSave()
  483. {
  484. try
  485. {
  486. // open a transaction with database
  487. TTransaction::open('banco');
  488. $data = $this->form->getData();
  489. $master = new ordem_coleta;
  490. $master->fromArray( (array) $data);
  491. $this->form->validate(); // form validation
  492. $master->status = 'Lançado';
  493. // se tiver id trata-se de uma edição
  494. if ($data->id)
  495. $master->data_coleta;// = date('d-m-Y');
  496. else
  497. $master->data_coleta = date('d-m-Y');
  498. // Sem id sabe que é um novo registro e deve gravar a data atual
  499. $master->store(); // save master object
  500. // delete details
  501. $old_items = nota_fiscal_coleta::where('ordem_coleta_id', '=', $master->id)->load();
  502. $keep_items = array();
  503. // get session items
  504. $items = TSession::getValue(__CLASS__.'_items');
  505. if( $items )
  506. {
  507. foreach( $items as $item )
  508. {
  509. if (substr($item['id'],0,1) == 'X' ) // new record
  510. {
  511. $detail = new nota_fiscal_coleta;
  512. }
  513. else
  514. {
  515. //$detail = nota_fiscal_coleta::find($item['id']);
  516. $detail = new nota_fiscal_coleta;
  517. $detail->id = $item['id'];
  518. }
  519. $detail->numero = $item['numero'];
  520. $detail->serie = $item['serie'];
  521. $detail->total_volumes = $item['total_volumes'];
  522. $detail->total_peso = $item['total_peso'];
  523. $detail->vlr_nota_fiscal = $item['vlr_nota_fiscal'];
  524. $detail->especie_embalagem = $item['especie_embalagem'];
  525. $detail->grupo_natureza = $item['grupo_natureza'];
  526. $detail->ordem_coleta_id = $master->id;
  527. $detail->store();
  528. $keep_items[] = $detail->id;
  529. }
  530. }
  531. if ($old_items)
  532. {
  533. foreach ($old_items as $old_item)
  534. {
  535. if (!in_array( $old_item->id, $keep_items))
  536. {
  537. $old_item->delete();
  538. }
  539. }
  540. }
  541. TTransaction::close(); // close the transaction
  542. // reload form and session items
  543. $this->onEdit(array('key'=>$master->id));
  544. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  545. }
  546. catch (Exception $e) // in case of exception
  547. {
  548. new TMessage('error', $e->getMessage());
  549. $this->form->setData( $this->form->getData() ); // keep form data
  550. TTransaction::rollback();
  551. }
  552. }
  553. /**
  554. * Show the page
  555. */
  556. public function show()
  557. {
  558. // check if the datagrid is already loaded
  559. if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  560. {
  561. $this->onReload( func_get_arg(0) );
  562. }
  563. parent::show();
  564. }
  565. }
  566. </your>