Lançado Adianti Framework 8.0!
Clique aqui para saber mais
Master/detail não editando os registros do detail Boa noite galera!!! Estou com um problema aqui (até pensei que tinha feito algo errado mas criei o projeto duas vezes e o erro persiste), os meus formulários (mestre/detalhe) não edita os objetos detalhe, na hora de buscar o objeto pelo ID, fala que não foi encontrado dados, para gravar novos funciona, o erro é somente no update. Uso banco de dados SQLServer 2008 express. Alguém já passo...
BI
Master/detail não editando os registros do detail  
Fechado
Boa noite galera!!!

Estou com um problema aqui (até pensei que tinha feito algo errado mas criei o projeto duas vezes e o erro persiste), os meus formulários (mestre/detalhe) não edita os objetos detalhe, na hora de buscar o objeto pelo ID, fala que não foi encontrado dados, para gravar novos funciona, o erro é somente no update. Uso banco de dados SQLServer 2008 express. Alguém já passou por esse problema? pode me ajudar?

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 (5)


NR

O erro ocorre quando seleciona o item pra edição ou na hora de salvar a edição?
Poste o código
BI

O erro é ao selecionar o item para salvar a edição, ele apaga o objeto antes de buscar.
erro (Object 1 not found in limites_op).

o código foi criado pelo adianti profissional.

  1. <?php
  2.     public function onSave()
  3.     {
  4.         try
  5.         {
  6.             // open a transaction with database
  7.             TTransaction::open('CIO');
  8.             
  9.             $data $this->form->getData();
  10.             $master = new EmpreendimentoCio;
  11.             $master->fromArray( (array) $data);
  12.             $this->form->validate(); // form validation
  13.             
  14.             $master->store(); // save master object
  15.             // delete details
  16.             $old_items LimitesOp::where('empreendimento_id''='$master->id)->load();
  17.             
  18.             $keep_items = array();
  19.             
  20.             // get session items
  21.             $items TSession::getValue(__CLASS__.'_items');
  22.             TTransaction::close();
  23.             if( $items )
  24.             {
  25.                 foreach( $items as $item )
  26.                 {
  27.                     TTransaction::open('CIO');
  28.                     if (substr($item['id'],0,1) == 'X' // new record
  29.                     {
  30.                         $detail = new LimitesOp;
  31.                     }
  32.                     else
  33.                     {
  34.                         //onde ocorre o erro
  35.                         $detail = new LimitesOp($item['id']);
  36.                     }
  37.                     
  38.                     
  39.                     $detail->parametro  $item['parametro'];
  40.                     $detail->valorMin  $item['valorMin'];
  41.                     $detail->valorMax  $item['valorMax'];
  42.                     $detail->valorIdeal  $item['valorIdeal'];
  43.                     $detail->outros  $item['outros'];
  44.                     $detail->empreendimento_id $master->id;
  45.                     $detail->store();
  46.                     
  47.                     $keep_items[] = $detail->id;
  48.                     
  49.                     TTransaction::close();
  50.                 }
  51.             }
  52.             
  53.             if ($old_items)
  54.             {
  55.                 foreach ($old_items as $old_item)
  56.                 {
  57.                     if (!in_array$old_item->id$keep_items))
  58.                     {
  59.                         $old_item->delete();
  60.                     }
  61.                 }
  62.             }
  63.             TTransaction::close(); // close the transaction
  64.             
  65.             // reload form and session items
  66.             $this->onEdit(array('key'=>$master->id));
  67.             
  68.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  69.         }
  70.         catch (Exception $e// in case of exception
  71.         {
  72.             new TMessage('error'$e->getMessage());
  73.             $this->form->setData$this->form->getData() ); // keep form data
  74.             TTransaction::rollback();
  75.         }
  76.     }
  77. ?>
NR

Tente o seguinte:
  1. <?php
  2. if (substr($item['id'],0,1) == 'X' // new record
  3. {
  4.     $detail = new LimitesOp;
  5. }
  6. else
  7. {
  8.     //onde ocorre o erro
  9.     $detail = new LimitesOp;
  10.     $detail->fromArray($item);
  11. }
  12. /* fromArray ja faz isso
  13. $detail->parametro  = $item['parametro'];
  14. $detail->valorMin  = $item['valorMin'];
  15. $detail->valorMax  = $item['valorMax'];
  16. $detail->valorIdeal  = $item['valorIdeal'];
  17. $detail->outros  = $item['outros'];
  18. */
  19. $detail->empreendimento_id $master->id;
  20. $detail->store(); 
  21. ?>
BI

Boa noite!
Deu certo o código, obrigado!
NC

Olá, estava com este mesmo problema.
Após criar o formulário mestre/detalhe com o Studio, resolvi utilizando as informações que o Nataniel informou.
Entretanto só consigo adicionar até o terceiro registro, aparece a mensagem que o "registro foi salvo ".
Mas no banco de dados da tabela referente ao registro de detalhe, todos os campos ficam gravados com NULL.

Segue meu código

  1. <?php
  2. class ClienteForm extends TPage
  3. {
  4.     protected $form// form
  5.     protected $formFields;
  6.     protected $detail_list;
  7.     
  8.     /**
  9.      * Page constructor
  10.      */
  11.     public function __construct()
  12.     {
  13.         parent::__construct();
  14.         
  15.         // creates the form
  16.         $this->form = new TForm('form_Cliente');
  17.         $this->form->class 'tform'// CSS class
  18.         $this->form->style 'max-width:1000px'// style
  19.         parent::include_css('app/resources/custom-frame.css');
  20.         
  21.         $table_master = new TTable;
  22.         $table_master->width '120%';
  23.         
  24.         $table_master->addRowSet( new TLabel('Tomador - Serviço'), '''')->class 'tformtitle';
  25.         
  26.         // add a table inside form
  27.         $table_general = new TTable;
  28.         $table_detail  = new TTable;
  29.         $table_financeiro = new TTable;
  30.         $table_general-> width '100%';
  31.         $table_detail-> width  '100%';
  32.         $table_financeiro-> width '100%';
  33.         
  34.         $frame_general = new TFrame;
  35.         $frame_general->setLegend('Informações Básicas');
  36.         $frame_general->style 'background:whiteSmoke';
  37.         $frame_general->add($table_general);
  38.         $frame_general->add($table_financeiro);
  39.         
  40.         $table_master->addRow()->addCell$frame_general )->colspan=2;
  41.         $row $table_master->addRow();
  42.         $row->addCell$table_detail );
  43.  
  44. /*
  45.         $row = $this->form->addRow();
  46.         $row->class = 'tformsection';
  47.         $cell = $row->addCell( new TLabel('Division'));
  48.         $cell->colspan = 2;
  49.         $cell->style = 'height:30px; border-top: 1px solid gray;';
  50. */
  51.         
  52.         $this->form->add($table_master);
  53.             
  54.         
  55.         // master fields
  56.         $id = new TEntry('id');
  57.         $advogado_id = new TSeekButton('advogado_id');
  58.         $advogado_adv_nome = new TEntry('advogado_adv_nome');
  59.         $indicacao_id = new TSeekButton('indicacao_id');
  60.         $indicacao_ind_nome = new TEntry('indicacao_ind_nome');
  61.         $cidade_id = new TDBCombo('cidade_id''systemlaudo''Cidade''id''cidade');
  62.         $cli_nome = new TEntry('cli_nome');
  63.         $cli_cnpj = new TEntry('cli_cnpj');
  64.         $cli_logradouro = new TEntry('cli_logradouro');
  65.         $cli_bairro = new TEntry('cli_bairro');
  66.         $cli_complemento = new TEntry('cli_complemento');
  67.         $cli_cep = new TEntry('cli_cep');
  68.         $cli_envio_nf = new TCombo('cli_envio_nf');
  69.         $cli_dia_nf = new TEntry('cli_dia_nf');
  70.         $cli_envio_boleto = new TCombo('cli_envio_boleto');
  71.         $cli_dia_boleto = new TEntry('cli_dia_boleto');
  72.         $cli_valor = new TEntry('cli_valor');
  73.         $cli_obs = new TText('cli_obs');
  74.         $cli_indice = new TEntry('cli_indice');
  75.         $cli_contrato_inicio = new TDate('cli_contrato_inicio');
  76.         $cli_contrato_final = new TDate('cli_contrato_final');
  77.         $indicacao_id->setAction(new TAction(array('IndicacaoSeek''onReload')));
  78.         $advogado_id->setAction(new TAction(array('AdvogadoSeek''onReload')));
  79.         
  80.         // set TCombo
  81.         $cli_envio_nf->addItems( [ 'Não' => 'Não Enviar NF''Sim' => 'Enviar NF' ] );
  82.         $cli_envio_boleto->addItems( [ 'Não' => 'Não Enviar Boleto''Sim' => 'Enviar Boleto' ] );
  83.         // set fields
  84.         $advogado_adv_nome->setEditable(FALSE);
  85.         $indicacao_ind_nome->setEditable(FALSE); 
  86.         $cli_nome->placeholder 'Razão Social - Obrigatório';        
  87.         $cli_cnpj->setMask('99.999.999/9999-99');
  88.         $cli_cnpj->placeholder 'Somente Números';
  89.         $cli_cep->setMask('99999-999');
  90.         $cli_cep->placeholder 'Somente Números';
  91.         $cli_contrato_inicio->setMask('dd/mm/yyyy');        
  92.         $cli_contrato_inicio->setDatabaseMask('yyyy-mm-dd');
  93.         $cli_contrato_final->setMask('dd/mm/yyyy');        
  94.         $cli_contrato_final->setDatabaseMask('yyyy-mm-dd');
  95.         $cli_valor->setNumericMask(2',''.'true);
  96.         $advogado_adv_nome->setSize(250);
  97.         $cli_cnpj->setSize(250);       
  98.         $indicacao_ind_nome->setSize(250);
  99.         $cli_nome->setSize(300);
  100.         $cli_logradouro->setSize(250);
  101.         $cli_complemento->setSize(250);
  102.         $cli_envio_nf->setSize(250);
  103.         $cli_envio_boleto->setSize(250);
  104.         $cli_obs->setSize(500200);
  105.         
  106.         
  107.         if (!empty($id))
  108.         {
  109.             $id->setEditable(FALSE);
  110.         }
  111.         
  112.         // detail fields
  113.         $detail_id = new THidden('detail_id');
  114.         $detail_cidade_id = new TDBCombo('detail_cidade_id''systemlaudo''Cidade''id''cidade');
  115.         $detail_rec_nome = new TEntry('detail_rec_nome');
  116.         $detail_rec_email = new TEntry('detail_rec_email');
  117.         $detail_rec_contato = new TEntry('detail_rec_contato');
  118.         $detail_rec_funcao = new TEntry('detail_rec_funcao');
  119.         $detail_rec_logradouro = new TEntry('detail_rec_logradouro');
  120.         $detail_rec_complemento = new TEntry('detail_rec_complemento');
  121.         $detail_rec_bairro = new TEntry('detail_rec_bairro');
  122.         /** samples
  123.          $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  124.          $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  125.          $fieldX->setSize( 100, 40 ); // set size
  126.          **/
  127.    
  128.         // set fields     
  129.         $lab_nome = new TLabel('Razão Social');
  130.         $lab_cnpj = new TLabel('CNPJ');
  131.         $lab_advogado = new TLabel('Advogado');        
  132.         $lab_adv_nome = new TLabel('Nome - Advogado');
  133.         $lab_indicacao = new TLabel('Indicação');
  134.         $lab_ind_nome = new TLabel('Nome - Indicação');;
  135.         $cidade_id = new TDBCombo('cidade_id''systemlaudo''Cidade''id''cidade');
  136.         $lab_cidade = new TLabel('Cidade');
  137.         $lab_logradouro = new TLabel('Logradouro');
  138.         $lab_bairro = new TLabel('Bairro');
  139.         $lab_complemento = new TLabel('Complemento');
  140.         $lab_cli_envio_nf = new TLabel('Enviar NF');
  141.         $lab_cli_dia_nf = new TLabel('Dia NF');
  142.         $lab_cli_envio_boleto = new TLabel('Enviar Boleto');
  143.         $lab_cli_dia_boleto = new TLabel('Dia Boleto');
  144.         $lab_cli_valor = new TLabel('Valor - Contrato');
  145.         $lab_cli_indice = new TLabel('Índice - Reajuste');
  146.         $lab_cli_contrato_inicio = new TLabel('Contrato - Início');
  147.         $lab_cli_contrato_final = new TLabel('Contrato - Final'); 
  148.         
  149.         // master
  150.         $table_general->addRowSet( new TLabel('Id'), $id );
  151.         $table_general->addRowSet($lab_nome$cli_nome$lab_cnpj$cli_cnpj );
  152.         $table_general->addRowSet($lab_advogado$advogado_id$lab_adv_nome$advogado_adv_nome );
  153.         $table_general->addRowSet($lab_indicacao$indicacao_id$lab_ind_nome$indicacao_ind_nome );
  154.         $table_general->addRowSet($lab_cidade$cidade_id$lab_logradouro$cli_logradouro );        
  155.         $table_general->addRowSet$lab_bairro$cli_bairro$lab_complemento$cli_complemento );
  156.         $table_general->addRowSet( new TLabel('Cep'), $cli_cep );        
  157.         
  158.         // master / financeiro
  159.         $frame_financeiro = new TFrame();
  160.         $frame_financeiro->setLegend('Dados Financeiros');
  161.         $row $table_financeiro->addRow();
  162.         $row->addCell($frame_financeiro);        
  163.         $table_financeiro = new TTable;
  164.         $frame_financeiro->add($table_financeiro);
  165.         
  166.         $table_financeiro->addRowSet$lab_cli_envio_nf$cli_envio_nf$lab_cli_dia_nf$cli_dia_nf );
  167.         $table_financeiro->addRowSet$lab_cli_envio_boleto$cli_envio_boleto$lab_cli_dia_boleto$cli_dia_boleto);
  168.         $table_financeiro->addRowSet(  $lab_cli_valor$cli_valor,  $lab_cli_indice$cli_indice );
  169.         $table_financeiro->addRowSet$lab_cli_contrato_inicio$cli_contrato_inicio$lab_cli_contrato_final$cli_contrato_final);
  170.         $table_financeiro->addRowSet( new TLabel('Observações'), $cli_obs );;
  171.             
  172.          // detail
  173.         $frame_details = new TFrame();
  174.         $frame_details->setLegend('Reclamada - Parceiros');
  175.         $row $table_detail->addRow();
  176.         $row->addCell($frame_details);
  177.         
  178.         $btn_save_detail = new TButton('btn_save_detail');
  179.         $btn_save_detail->setAction(new TAction(array($this'onSaveDetail')), 'Register');
  180.         $btn_save_detail->setImage('fa:save');
  181.         
  182.         $table_details = new TTable;
  183.         $frame_details->add($table_details);
  184.         
  185.         $rec_lab_razao = new TLabel('Razão Social');
  186.         $rec_lab_contato = new TLabel('Contato');
  187.         $rec_lab_email = new TLabel('E-mail');
  188.         $rec_lab_funcao = new TLabel('Função');
  189.         $rec_lab_logradouro = new TLabel('Logradouro');
  190.         $rec_lab_complemento = new TLabel('Complemento');
  191.         $rec_lab_bairro = new TLabel('Bairro');
  192.         $rec_lab_cidade = new TLabel('Cidade');
  193.         
  194.         $table_details->addRowSet''$detail_id );
  195.         $table_details->addRowSet($rec_lab_razao$detail_rec_nome );
  196.         $table_details->addRowSet($rec_lab_contato$detail_rec_contato $rec_lab_email$detail_rec_email );   
  197.         $table_details->addRowSet$rec_lab_funcao$detail_rec_funcao );
  198.         $table_details->addRowSet$rec_lab_logradouro$detail_rec_logradouro$rec_lab_cidade$detail_cidade_id );
  199.         $table_details->addRowSet$rec_lab_complemento$detail_rec_complemento$rec_lab_bairro$detail_rec_bairro);        
  200.         
  201.         $table_details->addRowSet$btn_save_detail );
  202.         
  203.         $this->detail_list = new TQuickGrid;
  204.         $this->detail_list->setHeight175 );
  205.         $this->detail_list->makeScrollable();
  206.         $this->detail_list->disableDefaultClick();
  207.         
  208.         $this->detail_list->addQuickColumn('''edit''left'50);
  209.         $this->detail_list->addQuickColumn('''delete''left'50);
  210.         
  211.         // items
  212.         $this->detail_list->addQuickColumn('Cidade''cidade_id''left'150);
  213.         $this->detail_list->addQuickColumn('Nome''rec_nome''left'200);
  214.         $this->detail_list->addQuickColumn('Contato''rec_contato''left'200);
  215.         $this->detail_list->addQuickColumn('E-mail''rec_email''left'200);        
  216.         $this->detail_list->addQuickColumn('Função''rec_funcao''left'200);
  217.         $this->detail_list->addQuickColumn('Logradouro''rec_logradouro''left'200);
  218.         $this->detail_list->addQuickColumn('Complemento''rec_complemento''left'200);
  219.         $this->detail_list->addQuickColumn('Bairro''rec_bairro''left'200);
  220.         $this->detail_list->createModel();
  221.         
  222.         $row $table_detail->addRow();
  223.         $row->addCell($this->detail_list);
  224.         
  225.         // create an action button (save)
  226.         $save_button=new TButton('save');
  227.         $save_button->setAction(new TAction(array($this'onSave')), _t('Save'));
  228.         $save_button->setImage('ico_save.png');
  229.         // create an new button (edit with no parameters)
  230.         $new_button=new TButton('new');
  231.         $new_button->setAction(new TAction(array($this'onClear')), _t('New'));
  232.         $new_button->setImage('ico_new.png');
  233.         
  234.         // define form fields
  235.         $this->formFields   = array($id,$advogado_id,$indicacao_id,$cidade_id,$cli_nome,$cli_cnpj,$cli_logradouro,$cli_bairro,$cli_complemento,$cli_cep,$cli_envio_nf,$cli_dia_nf,$cli_envio_boleto,$cli_dia_boleto,$cli_valor,$cli_obs,$cli_indice,$cli_contrato_inicio,$cli_contrato_final,$detail_cidade_id,$detail_rec_nome,$detail_rec_email,$detail_rec_contato,$detail_rec_funcao,$detail_rec_logradouro,$detail_rec_complemento,$detail_rec_bairro);
  236.         $this->formFields[] = $btn_save_detail;
  237.         $this->formFields[] = $save_button;
  238.         $this->formFields[] = $new_button;
  239.         $this->formFields[] = $detail_id;
  240.         $this->form->setFields$this->formFields );
  241.         
  242.         $table_master->addRowSet( array($save_button$new_button), '''')->class 'tformaction'// CSS class
  243.         
  244.         // create the page container
  245.         $container = new TVBox;
  246.         $container->style 'width: 90%';
  247.         // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  248.         $container->add($this->form);
  249.         parent::add($container);
  250.     }
  251.     
  252.     
  253.     /**
  254.      * Clear form
  255.      * @param $param URL parameters
  256.      */
  257.     public function onClear($param)
  258.     {
  259.         $this->form->clear(TRUE);
  260.         TSession::setValue(__CLASS__.'_items', array());
  261.         $this->onReload$param );
  262.     }
  263.     
  264.     /**
  265.      * Save an item from form to session list
  266.      * @param $param URL parameters
  267.      */
  268.     public function onSaveDetail$param )
  269.     {
  270.         try
  271.         {
  272.             TTransaction::open('systemlaudo');
  273.             $data $this->form->getData();
  274.             
  275.             /** validation sample
  276.             if (! $data->fieldX)
  277.                 throw new Exception('The field fieldX is required');
  278.             **/
  279.             
  280.             $items TSession::getValue(__CLASS__.'_items');
  281.             $key = empty($data->detail_id) ? 'X'.mt_rand(10000000001999999999) : $data->detail_id;
  282.             
  283.             $items$key ] = array();
  284.             $items$key ]['id'] = $key;
  285.             $items$key ]['cidade_id'] = $data->detail_cidade_id;
  286.             $items$key ]['rec_nome'] = $data->detail_rec_nome;
  287.             $items$key ]['rec_email'] = $data->detail_rec_email;
  288.             $items$key ]['rec_contato'] = $data->detail_rec_contato;
  289.             $items$key ]['rec_funcao'] = $data->detail_rec_funcao;
  290.             $items$key ]['rec_logradouro'] = $data->detail_rec_logradouro;
  291.             $items$key ]['rec_complemento'] = $data->detail_rec_complemento;
  292.             $items$key ]['rec_bairro'] = $data->detail_rec_bairro;
  293.             
  294.             TSession::setValue(__CLASS__.'_items'$items);
  295.             
  296.             // clear detail form fields
  297.             $data->detail_id '';
  298.             $data->detail_cidade_id '';
  299.             $data->detail_rec_nome '';
  300.             $data->detail_rec_email '';
  301.             $data->detail_rec_contato '';
  302.             $data->detail_rec_funcao '';
  303.             $data->detail_rec_logradouro '';
  304.             $data->detail_rec_complemento '';
  305.             $data->detail_rec_bairro '';
  306.             
  307.             TTransaction::close();
  308.             $this->form->setData($data);
  309.             
  310.             $this->onReload$param ); // reload the items
  311.         }
  312.         catch (Exception $e)
  313.         {
  314.             $this->form->setData$this->form->getData());
  315.             new TMessage('error'$e->getMessage());
  316.         }
  317.     }
  318.     
  319.     /**
  320.      * Load an item from session list to detail form
  321.      * @param $param URL parameters
  322.      */
  323.     public function onEditDetail$param )
  324.     {
  325.         $data $this->form->getData();
  326.         
  327.         // read session items
  328.         $items TSession::getValue(__CLASS__.'_items');
  329.         
  330.         // get the session item
  331.         $item $items$param['item_key'] ];
  332.         
  333.         $data->detail_id $item['id'];
  334.         $data->detail_cidade_id $item['cidade_id'];
  335.         $data->detail_rec_nome $item['rec_nome'];
  336.         $data->detail_rec_email $item['rec_email'];
  337.         $data->detail_rec_contato $item['rec_contato'];
  338.         $data->detail_rec_funcao $item['rec_funcao'];
  339.         $data->detail_rec_logradouro $item['rec_logradouro'];
  340.         $data->detail_rec_complemento $item['rec_complemento'];
  341.         $data->detail_rec_bairro $item['rec_bairro'];
  342.         
  343.         // fill detail fields
  344.         $this->form->setData$data );
  345.     
  346.         $this->onReload$param );
  347.     }
  348.     
  349.     /**
  350.      * Delete an item from session list
  351.      * @param $param URL parameters
  352.      */
  353.     public function onDeleteDetail$param )
  354.     {
  355.         $data $this->form->getData();
  356.         
  357.         // reset items
  358.             $data->detail_cidade_id '';
  359.             $data->detail_rec_nome '';
  360.             $data->detail_rec_email '';
  361.             $data->detail_rec_contato '';
  362.             $data->detail_rec_funcao '';
  363.             $data->detail_rec_logradouro '';
  364.             $data->detail_rec_complemento '';
  365.             $data->detail_rec_bairro '';
  366.         
  367.         // clear form data
  368.         $this->form->setData$data );
  369.         
  370.         // read session items
  371.         $items TSession::getValue(__CLASS__.'_items');
  372.         
  373.         // delete the item from session
  374.         unset($items$param['item_key'] ] );
  375.         TSession::setValue(__CLASS__.'_items'$items);
  376.         
  377.         // reload items
  378.         $this->onReload$param );
  379.     }
  380.     
  381.     /**
  382.      * Load the items list from session
  383.      * @param $param URL parameters
  384.      */
  385.     public function onReload($param)
  386.     {
  387.         // read session items
  388.         $items TSession::getValue(__CLASS__.'_items');
  389.         
  390.         $this->detail_list->clear(); // clear detail list
  391.         $data $this->form->getData();
  392.         
  393.         if ($items)
  394.         {
  395.             $cont 1;
  396.             foreach ($items as $list_item_key => $list_item)
  397.             {
  398.                 $item_name 'prod_' $cont++;
  399.                 $item = new StdClass;
  400.                 
  401.                 // create action buttons
  402.                 $action_del = new TAction(array($this'onDeleteDetail'));
  403.                 $action_del->setParameter('item_key'$list_item_key);
  404.                 
  405.                 $action_edi = new TAction(array($this'onEditDetail'));
  406.                 $action_edi->setParameter('item_key'$list_item_key);
  407.                 
  408.                 $button_del = new TButton('delete_detail'.$cont);
  409.                 $button_del->class 'btn btn-default btn-sm';
  410.                 $button_del->setAction$action_del'' );
  411.                 $button_del->setImage('fa:trash-o red fa-lg');
  412.                 
  413.                 $button_edi = new TButton('edit_detail'.$cont);
  414.                 $button_edi->class 'btn btn-default btn-sm';
  415.                 $button_edi->setAction$action_edi'' );
  416.                 $button_edi->setImage('fa:edit blue fa-lg');
  417.                 
  418.                 $item->edit   $button_edi;
  419.                 $item->delete $button_del;
  420.                 
  421.                 $this->formFields$item_name.'_edit' ] = $item->edit;
  422.                 $this->formFields$item_name.'_delete' ] = $item->delete;
  423.                 
  424.                 // items
  425.                 $item->id $list_item['id'];
  426.                 $item->cidade_id $list_item['cidade_id'];
  427.                 $item->rec_nome $list_item['rec_nome'];
  428.                 $item->rec_email $list_item['rec_email'];
  429.                 $item->rec_contato $list_item['rec_contato'];
  430.                 $item->rec_funcao $list_item['rec_funcao'];
  431.                 $item->rec_logradouro $list_item['rec_logradouro'];
  432.                 $item->rec_complemento $list_item['rec_complemento'];
  433.                 $item->rec_bairro $list_item['rec_bairro'];
  434.                 
  435.                 $row $this->detail_list->addItem$item );
  436.                 $row->onmouseover='';
  437.                 $row->onmouseout='';
  438.             }
  439.             $this->form->setFields$this->formFields );
  440.         }
  441.         
  442.         $this->loaded TRUE;
  443.     }
  444.     
  445.     /**
  446.      * Load Master/Detail data from database to form/session
  447.      */
  448.     public function onEdit($param)
  449.     {
  450.         try
  451.         {
  452.             TTransaction::open('systemlaudo');
  453.             
  454.             if (isset($param['key']))
  455.             {
  456.                 $key $param['key'];
  457.                 
  458.                 $object = new Cliente($key);
  459.                 $items  Reclamada::where('cliente_id''='$key)->load();
  460.                 
  461.                 $session_items = array();
  462.                 foreach( $items as $item )
  463.                 {
  464.                     $item_key $item->id;
  465.                     $session_items[$item_key] = $item->toArray();
  466.                     $session_items[$item_key]['id'] = $item->id;
  467.                     $session_items[$item_key]['cidade_id'] = $item->cidade_id;
  468.                     $session_items[$item_key]['rec_nome'] = $item->rec_nome;
  469.                     $session_items[$item_key]['rec_email'] = $item->rec_email;
  470.                     $session_items[$item_key]['rec_contato'] = $item->rec_contato;
  471.                     $session_items[$item_key]['rec_funcao'] = $item->rec_funcao;
  472.                     $session_items[$item_key]['rec_logradouro'] = $item->rec_logradouro;
  473.                     $session_items[$item_key]['rec_complemento'] = $item->rec_complemento;
  474.                     $session_items[$item_key]['rec_bairro'] = $item->rec_bairro;
  475.                 }
  476.                 TSession::setValue(__CLASS__.'_items'$session_items);
  477.                 
  478.                 $this->form->setData($object); // fill the form with the active record data
  479.                 $this->onReload$param ); // reload items list
  480.                 TTransaction::close(); // close transaction
  481.             }
  482.             else
  483.             {
  484.                 $this->form->clear(TRUE);
  485.                 TSession::setValue(__CLASS__.'_items'null);
  486.                 $this->onReload$param );
  487.             }
  488.         }
  489.         catch (Exception $e// in case of exception
  490.         {
  491.             new TMessage('error'$e->getMessage());
  492.             TTransaction::rollback();
  493.         }
  494.     }
  495.     
  496.     /**
  497.      * Save the Master/Detail data from form/session to database
  498.      */
  499.     public function onSave()
  500.     {
  501.         try
  502.         {
  503.             // open a transaction with database
  504.             TTransaction::open('systemlaudo');
  505.             
  506.             $data $this->form->getData();
  507.             $master = new Cliente;            
  508.             $master->fromArray( (array) $data);
  509.             $this->form->validate(); // form validation
  510.             
  511.             $master->store(); // save master object
  512.             // delete details
  513.             $old_items Reclamada::where('cliente_id''='$master->id)->load();
  514.             
  515.             $keep_items = array();
  516.             
  517.             // get session items
  518.             $items TSession::getValue(__CLASS__.'_items');
  519.             
  520.             if( $items )
  521.             {
  522.                 foreach( $items as $item )
  523.                 {
  524.                     if (substr($item['id'],0,1) == 'X' // new record
  525.                     {
  526.                         $detail = new Reclamada;
  527.                     }
  528.                     else
  529.                     {
  530.                         //$detail = Reclamada::find($item['id']);
  531.                         $detail = new Reclamada;
  532.                         $detail->fromArray($item);
  533.                     }
  534. /*
  535.                     Com erros, formulário Mestre/Detalhe criando pelo Sdianti Studio 
  536.                     $detail->cidade_id  = $item['cidade_id'];
  537.                     $detail->rec_nome  = $item['rec_nome'];
  538.                     $detail->rec_email  = $item['rec_email'];
  539.                     $detail->rec_contato  = $item['rec_contato'];
  540.                     $detail->rec_funcao  = $item['rec_funcao'];
  541.                     $detail->rec_logradouro  = $item['rec_logradouro'];
  542.                     $detail->rec_complemento  = $item['rec_complemento'];
  543.                     $detail->rec_bairro  = $item['rec_bairro'];                    
  544. */                  
  545.                     $detail->cliente_id $master->id;
  546.                     $detail->store();
  547.                     
  548.                     $keep_items[] = $detail->id;
  549.                 }
  550.             }
  551.             
  552.             if ($old_items)
  553.             {
  554.                 foreach ($old_items as $old_item)
  555.                 {
  556.                     if (!in_array$old_item->id$keep_items))
  557.                     {
  558.                         $old_item->delete();
  559.                     }
  560.                 }
  561.             }
  562.             TTransaction::close(); // close the transaction
  563.             
  564.             // reload form and session items
  565.             $this->onEdit(array('key'=>$master->id));
  566.             
  567.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  568.         }
  569.         catch (Exception $e// in case of exception
  570.         {
  571.             new TMessage('error'$e->getMessage());
  572.             $this->form->setData$this->form->getData() ); // keep form data
  573.             TTransaction::rollback();
  574.         }
  575.     }
  576.     
  577.     /**
  578.      * Show the page
  579.      */
  580.     public function show()
  581.     {
  582.         // check if the datagrid is already loaded
  583.         if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  584.         {
  585.             $this->onReloadfunc_get_arg(0) );
  586.         }
  587.         parent::show();
  588.     }
  589. }
  590. ?>