Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 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)


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