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


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. $this->form->setData($fisica_doc);
  23. if ($pessoa)
  24. {
  25. $this->table_contato->addSection('tbody');
  26. foreach ($pessoa->getContato() as $contato)
  27. {
  28. $this->addContatoRow($contato);
  29. }
  30. // create add button
  31. $add = new TButton('clone');
  32. $add->setLabel('Adicionar');
  33. $add->setImage('fa:plus-circle blue');
  34. $add->addFunction('ttable_clone_previous_row(this)');
  35. // add buttons in table
  36. $this->table_contato->addRowSet([$add]);
  37. }
  38. else
  39. {
  40. $this->onClear($param);
  41. }
  42. $contato_web = ContatoWeb::where('pessoa_id','=',$cliente->pessoa_id)->load();
  43. $contatoweb = $contato_web[0];
  44. $this->form->setData($contatoweb);
  45. //filtra endereco
  46. $criteria_pessoa_endereco = new TCriteria;
  47. $criteria_pessoa_endereco->add( new TFilter( 'pessoa_id', '=', $cliente->pessoa_id));
  48. $pessoa_enderecos = VwEnderecoCompleto::getObjects($criteria_pessoa_endereco);
  49. if ($pessoa_enderecos)
  50. {
  51. $this->table_endereco->addSection('tbody');
  52. foreach ($pessoa_enderecos as $pessoa_endereco)
  53. {
  54. $this->addEnderecoRow($pessoa_endereco);
  55. }
  56. $addEnder = new TButton('addEnd');
  57. $addEnder->setLabel('Adicionar');
  58. $addEnder->setImage('fa:plus-circle blue');
  59. $addEnder->addFunction('ttable_clone_previous_row(this)');
  60. //add buttons in table
  61. $this->table_endereco->addRowSet([$addEnder]);
  62. }
  63. else
  64. {
  65. $this->onClear($param);
  66. }
  67. $this->form->setData($pessoa);
  68. $this->form->setData($data);
  69. // close the transaction
  70. TTransaction::close();
  71. }
  72. else
  73. {
  74. $this->form->clear();
  75. }
  76. }
  77. catch (Exception $e) // in case of exception
  78. {
  79. // shows the exception error message
  80. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  81. // undo all pending operations
  82. TTransaction::rollback();
  83. }
  84. }
  85. ?>



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 (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.