Lançado Adianti Framework 7.6!
Clique aqui para saber mais
OnEdit duplicando dados Ola, Pessoal, ao tentar editar item dado é cadastrado como um novo item, não estou conseguindo identificar onde estou errando. Alguém pode me ajudar ? Segue código abaixo. ...
RB
OnEdit duplicando dados  
Ola,

Pessoal, ao tentar editar item dado é cadastrado como um novo item, não estou conseguindo identificar onde estou errando.

Alguém pode me ajudar ?

Segue código abaixo.

  1. <?php
  2. //Método onSalve
  3. public static function onSave($param)
  4.   {
  5.       try
  6.         {
  7.           $organizacao_id TSession::getValue('organizacion_id'); // pega id da empresa
  8.           $data_actual date('Y-m-d H:i:s');
  9.           $data = (int) $param['key'];
  10.           TTransaction::open('centinel'); // open a transaction
  11.           TTransaction::setLoggerFunction(function($param)
  12.           {
  13.             print $param.'<br/>';
  14.           });
  15.           if (!empty($data->id)) {
  16.             
  17.           }
  18.           else{
  19.           $pessoa = new Pessoa;
  20.           $pessoa->nome            $param['nome'];
  21.           $pessoa->data_nascimento TDate::date2us($param['data_nascimento']);
  22.           $pessoa->organizacao_id  $organizacao_id;
  23.           $pessoa->tipo_pessoa_id  = (int)1;
  24.           $pessoa->criacao         $data_actual;
  25.           $pessoa->atualizacao     $data_actual;
  26.           $pessoa->store(); // save the object
  27.           $pessoa_organizacao = new PessoaOrganizacao;
  28.           $pessoa_organizacao->pessoa_id      $pessoa->id;
  29.           $pessoa_organizacao->organizacao_id $organizacao_id;
  30.           $pessoa_organizacao->store();
  31.           $cliente = new Cliente;
  32.           $cliente->pessoa_id      $pessoa->id;
  33.           $cliente->organizacao_id $organizacao_id;
  34.           $cliente->ativo ;
  35.           $cliente->criacao         $data_actual;
  36.           $cliente->atualizacao     $data_actual;
  37.           $cliente->tipo_pessoa_id  = (int)1;
  38.           $cliente->store();
  39.           if($cliente)
  40.           {
  41.             $fisica = new Fisica;
  42.             $fisica->pessoa_id      $pessoa->id;
  43.             $fisica->cpf            str_replace("."""$param['cpf']);
  44.             $fisica->rg             str_replace("."""$param['rg']);
  45.             $fisica->genero_id      $param['genero_id'];
  46.             $fisica->civil_id       $param['estado_civil_id'];
  47.             $fisica->etnia_id       $param['etnia_id'];
  48.             $fisica->store();
  49.           }
  50.           if($fisica)
  51.           {
  52.             if(!empty($param['ddi'])  And is_array($param['telefone']))
  53.             {
  54.               foreach($param['telefone'] as $row =>$contatos)
  55.               {
  56.                 if (!empty($contatos))
  57.                 {
  58.                   //Adiciona contato
  59.                   $contato = new Contato;
  60.                   $contato->pessoa_id        $fisica->pessoa_id;
  61.                   $contato->ddi              $param['ddi'][$row];
  62.                   $contato->ddd              $param['dd'][$row];
  63.                   $contato->telefone         $param['telefone'][$row];
  64.                   $contato->tipo_telefone_id $param['tipo_telefone_id'][$row];
  65.                   $contato->operadora_id     $param['operadora_id'][$row];
  66.                   $contato->store();
  67.                 }
  68.                 else{
  69.                   //Adiciona contato
  70.                   $contato = new Contato;
  71.                   $contato->pessoa_id        $fisica->pessoa_id;
  72.                   $contato->ddi              '0';
  73.                   $contato->ddd              '0';
  74.                   $contato->telefone         '0';
  75.                   $contato->store();
  76.                 }
  77.               }
  78.             }
  79.           }
  80.           //adiciona contato web
  81.           if(!empty($param['email']) or $param['site'])
  82.           {
  83.             $contato_web = new ContatoWeb;
  84.             $contato_web->pessoa_id $pessoa->id;
  85.             $contato_web->email     $param['email'];
  86.             $contato_web->site      $param['site'];
  87.             $contato_web->store();
  88.           }
  89.           else{
  90.             $contato_web = new ContatoWeb;
  91.             $contato_web->pessoa_id $pessoa->id;
  92.             $contato_web->email '0';
  93.             $contato_web->site '0';
  94.             $contato_web->store();
  95.           }
  96.            if(!empty($param['id_endereco'])  And is_array($param['id_endereco']))
  97.             {
  98.                 // show form values inside a window
  99.                //$win = TWindow::create('Object id', 0.2, 0.3);
  100.                 foreach($param['id_endereco'] as $row =>$enderecos)
  101.                 {
  102.                     if (!empty($enderecos))
  103.                     {
  104.                       //$win->add('<pre>'.str_replace("\n", '<br/>', print_r($enderecos['id'], true) ).'</pre>' );
  105.                         $pessoa_endereco = new PessoaEndereco;
  106.                         $pessoa_endereco->pessoa_id           $pessoa->id;
  107.                         $pessoa_endereco->endereco_id         $param['id_endereco'][$row];
  108.                         $pessoa_endereco->tipo_endereco_id    $param['tipo_endereco_id'][$row];
  109.                         $pessoa_endereco->numero              $param['numero'][$row];
  110.                         $pessoa_endereco->complemento         $param['compl'][$row];
  111.                         $pessoa_endereco->criacao             $data_actual;
  112.                         $pessoa_endereco->atualizacao         $data_actual;
  113.                         $pessoa_endereco->store();
  114.                     }
  115.                 }
  116.                 //$win->show();
  117.             }
  118.             else{
  119.             }
  120.           }
  121.         $data = new stdClass;
  122.         $data->id $cliente->id;
  123.         TForm::sendData('frm_cliente_fisico'$data);   
  124.         TTransaction::close();// close the transaction
  125.       }
  126.       catch (Exception $e// in case of exception
  127.       {
  128.         new TMessage('error'$e->getMessage());
  129.         TForm::sendData('frm_cliente_fisico'$param);// keep form data
  130.         TTransaction::rollback();
  131.       }
  132.   }
  133. ?>


Método onEdit

  1. <?php
  2. function onEdit($param){
  3.         try{
  4.             if (isset($param['key']))
  5.             {
  6.               $key $param['key'];
  7.               $organizacao_id TSession::getValue('organizacion_id');
  8.                 // open a transaction with database 'centinel'
  9.                 TTransaction::open('centinel');
  10.                 // instantiates object Cliente
  11.                 $clientes Cliente::where('id','=',$key)
  12.                                    ->where('organizacao_id','=',$organizacao_id)
  13.                                    ->where('ativo','=',1)
  14.                                    ->load();
  15.                 $cliente $clientes[0];           
  16.                 $pessoas Pessoa::where('id','=',$cliente->pessoa_id)->load();
  17.                 $pessoa $pessoas[0]; 
  18.                 // fill the form with the active record data
  19.                 $data->id $cliente->id;   
  20.                 $fisica Fisica::where('pessoa_id','=',$cliente->pessoa_id)->load();
  21.                 $fisica_doc $fisica[0];
  22.                 
  23.                 $this->form->setData($fisica_doc);
  24.                 if ($pessoa
  25.                 {
  26.                   $this->table_contato->addSection('tbody');
  27.                   foreach ($pessoa->getContato() as $contato
  28.                   {
  29.                     $this->addContatoRow($contato);
  30.                   }
  31.                   // create add button
  32.                   $add = new TButton('clone');
  33.                   $add->setLabel('Adicionar');
  34.                   $add->setImage('fa:plus-circle blue');
  35.                   $add->addFunction('ttable_clone_previous_row(this)');
  36.                             
  37.                   // add buttons in table
  38.                   $this->table_contato->addRowSet([$add]);
  39.                 }  
  40.                 else
  41.                 {
  42.                     $this->onClear($param);
  43.                 }
  44.                 $contato_web ContatoWeb::where('pessoa_id','=',$cliente->pessoa_id)->load();
  45.                 $contatoweb $contato_web[0];
  46.                 $this->form->setData($contatoweb);
  47.                 //filtra endereco
  48.                 $criteria_pessoa_endereco = new TCriteria;
  49.                 $criteria_pessoa_endereco->add( new TFilter'pessoa_id''='$cliente->pessoa_id));
  50.                 $pessoa_enderecos VwEnderecoCompleto::getObjects($criteria_pessoa_endereco);
  51.                 if ($pessoa_enderecos)
  52.                 {
  53.                   $this->table_endereco->addSection('tbody');
  54.                   foreach ($pessoa_enderecos as $pessoa_endereco)
  55.                   { 
  56.                       $this->addEnderecoRow($pessoa_endereco);
  57.                   }                  
  58.                  
  59.                   $addEnder = new TButton('addEnd');
  60.                   $addEnder->setLabel('Adicionar');
  61.                   $addEnder->setImage('fa:plus-circle blue');
  62.                   $addEnder->addFunction('ttable_clone_previous_row(this)');
  63.                           
  64.                 //add buttons in table
  65.                   $this->table_endereco->addRowSet([$addEnder]);
  66.                 }
  67.                 else
  68.                 {
  69.                     $this->onClear($param);
  70.                 }
  71.                 $this->form->setData($pessoa);
  72.                 $this->form->setData($data);                
  73.                 // close the transaction
  74.                 TTransaction::close();
  75.             }
  76.             else
  77.             {
  78.                 $this->form->clear();
  79.             }
  80.         }
  81.         catch (Exception $e// in case of exception
  82.         {
  83.             // shows the exception error message
  84.             new TMessage('error''<b>Error</b> ' $e->getMessage());
  85.             // undo all pending operations
  86.             TTransaction::rollback();
  87.         }
  88.     }
  89. ?>



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


FC

Rapaz que tanto $this->form->setData( ) no seu onEdit, pelo que consegui entender vc faz o processo de carregar o form varias vezes verifica se o id está sendo carregado senão ele vai duplicar mesmo, outra coisa está usando uma static para onSave vc está misturando sistemas desktop com web procure salvar com o post usar as static para calculo interações etc...

Acho que podia repensar a metodologia usada, pois vc tem metade gravado na sessão e metade no banco salve tudo na sessão e depois quando for gravar faça pelo post do form assim terá um sistema mais integro.
RB

Felipe,

Esta foi a maneira que consegui carregar todos os dados das tabela relacionadas, e quanto ao método onSave estático, deixei assim para que os dados do endereço e contato permaneçam no form ao salvar.
FC

Oi Rubens

Como te falei acredito que essa não seja a melhor maneira vou tentar explicar para manter o form prenchido basta recuperar e reenviar os dados então se fizer assim já resolve.
$this->form->setData($this->form->getData())

Outra coisa vc está trabalhando orientado a objetos então use o lazy load exemplo no seu onEdit

$objeto = new stdClass;
$objeto->cliente->contatoweb->nome
TForm::sendData('seuform', $objeto);

Assim terá menos conexões melhor desempenho etc....
RB

Felipe,

Sinceramente eu não entendi.