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.
Método onEdit
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.
- <?php
- //Método onSalve
- public static function onSave($param)
- {
- try
- {
- $organizacao_id = TSession::getValue('organizacion_id'); // pega id da empresa
- $data_actual = date('Y-m-d H:i:s');
- $data = (int) $param['key'];
- TTransaction::open('centinel'); // open a transaction
- TTransaction::setLoggerFunction(function($param)
- {
- print $param.'<br/>';
- });
- if (!empty($data->id)) {
- }
- else{
- $pessoa = new Pessoa;
- $pessoa->nome = $param['nome'];
- $pessoa->data_nascimento = TDate::date2us($param['data_nascimento']);
- $pessoa->organizacao_id = $organizacao_id;
- $pessoa->tipo_pessoa_id = (int)1;
- $pessoa->criacao = $data_actual;
- $pessoa->atualizacao = $data_actual;
- $pessoa->store(); // save the object
- $pessoa_organizacao = new PessoaOrganizacao;
- $pessoa_organizacao->pessoa_id = $pessoa->id;
- $pessoa_organizacao->organizacao_id = $organizacao_id;
- $pessoa_organizacao->store();
- $cliente = new Cliente;
- $cliente->pessoa_id = $pessoa->id;
- $cliente->organizacao_id = $organizacao_id;
- $cliente->ativo = 1 ;
- $cliente->criacao = $data_actual;
- $cliente->atualizacao = $data_actual;
- $cliente->tipo_pessoa_id = (int)1;
- $cliente->store();
- if($cliente)
- {
- $fisica = new Fisica;
- $fisica->pessoa_id = $pessoa->id;
- $fisica->cpf = str_replace(".", "", $param['cpf']);
- $fisica->rg = str_replace(".", "", $param['rg']);
- $fisica->genero_id = $param['genero_id'];
- $fisica->civil_id = $param['estado_civil_id'];
- $fisica->etnia_id = $param['etnia_id'];
- $fisica->store();
- }
- if($fisica)
- {
- if(!empty($param['ddi']) And is_array($param['telefone']))
- {
- foreach($param['telefone'] as $row =>$contatos)
- {
- if (!empty($contatos))
- {
- //Adiciona contato
- $contato = new Contato;
- $contato->pessoa_id = $fisica->pessoa_id;
- $contato->ddi = $param['ddi'][$row];
- $contato->ddd = $param['dd'][$row];
- $contato->telefone = $param['telefone'][$row];
- $contato->tipo_telefone_id = $param['tipo_telefone_id'][$row];
- $contato->operadora_id = $param['operadora_id'][$row];
- $contato->store();
- }
- else{
- //Adiciona contato
- $contato = new Contato;
- $contato->pessoa_id = $fisica->pessoa_id;
- $contato->ddi = '0';
- $contato->ddd = '0';
- $contato->telefone = '0';
- $contato->store();
- }
- }
- }
- }
- //adiciona contato web
- if(!empty($param['email']) or $param['site'])
- {
- $contato_web = new ContatoWeb;
- $contato_web->pessoa_id = $pessoa->id;
- $contato_web->email = $param['email'];
- $contato_web->site = $param['site'];
- $contato_web->store();
- }
- else{
- $contato_web = new ContatoWeb;
- $contato_web->pessoa_id = $pessoa->id;
- $contato_web->email = '0';
- $contato_web->site = '0';
- $contato_web->store();
- }
- if(!empty($param['id_endereco']) And is_array($param['id_endereco']))
- {
- // show form values inside a window
- //$win = TWindow::create('Object id', 0.2, 0.3);
- foreach($param['id_endereco'] as $row =>$enderecos)
- {
- if (!empty($enderecos))
- {
- //$win->add('<pre>'.str_replace("\n", '<br/>', print_r($enderecos['id'], true) ).'</pre>' );
- $pessoa_endereco = new PessoaEndereco;
- $pessoa_endereco->pessoa_id = $pessoa->id;
- $pessoa_endereco->endereco_id = $param['id_endereco'][$row];
- $pessoa_endereco->tipo_endereco_id = $param['tipo_endereco_id'][$row];
- $pessoa_endereco->numero = $param['numero'][$row];
- $pessoa_endereco->complemento = $param['compl'][$row];
- $pessoa_endereco->criacao = $data_actual;
- $pessoa_endereco->atualizacao = $data_actual;
- $pessoa_endereco->store();
- }
- }
- //$win->show();
- }
- else{
- }
- }
- $data = new stdClass;
- $data->id = $cliente->id;
- TForm::sendData('frm_cliente_fisico', $data);
- TTransaction::close();// close the transaction
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage());
- TForm::sendData('frm_cliente_fisico', $param);// keep form data
- TTransaction::rollback();
- }
- }
- ?>
Método onEdit
- <?php
- function onEdit($param){
- try{
- if (isset($param['key']))
- {
- $key = $param['key'];
- $organizacao_id = TSession::getValue('organizacion_id');
- // open a transaction with database 'centinel'
- TTransaction::open('centinel');
- // instantiates object Cliente
- $clientes = Cliente::where('id','=',$key)
- ->where('organizacao_id','=',$organizacao_id)
- ->where('ativo','=',1)
- ->load();
- $cliente = $clientes[0];
- $pessoas = Pessoa::where('id','=',$cliente->pessoa_id)->load();
- $pessoa = $pessoas[0];
- // fill the form with the active record data
- $data->id = $cliente->id;
- $fisica = Fisica::where('pessoa_id','=',$cliente->pessoa_id)->load();
- $fisica_doc = $fisica[0];
- $this->form->setData($fisica_doc);
- if ($pessoa)
- {
- $this->table_contato->addSection('tbody');
- foreach ($pessoa->getContato() as $contato)
- {
- $this->addContatoRow($contato);
- }
- // create add button
- $add = new TButton('clone');
- $add->setLabel('Adicionar');
- $add->setImage('fa:plus-circle blue');
- $add->addFunction('ttable_clone_previous_row(this)');
- // add buttons in table
- $this->table_contato->addRowSet([$add]);
- }
- else
- {
- $this->onClear($param);
- }
- $contato_web = ContatoWeb::where('pessoa_id','=',$cliente->pessoa_id)->load();
- $contatoweb = $contato_web[0];
- $this->form->setData($contatoweb);
- //filtra endereco
- $criteria_pessoa_endereco = new TCriteria;
- $criteria_pessoa_endereco->add( new TFilter( 'pessoa_id', '=', $cliente->pessoa_id));
- $pessoa_enderecos = VwEnderecoCompleto::getObjects($criteria_pessoa_endereco);
- if ($pessoa_enderecos)
- {
- $this->table_endereco->addSection('tbody');
- foreach ($pessoa_enderecos as $pessoa_endereco)
- {
- $this->addEnderecoRow($pessoa_endereco);
- }
- $addEnder = new TButton('addEnd');
- $addEnder->setLabel('Adicionar');
- $addEnder->setImage('fa:plus-circle blue');
- $addEnder->addFunction('ttable_clone_previous_row(this)');
- //add buttons in table
- $this->table_endereco->addRowSet([$addEnder]);
- }
- else
- {
- $this->onClear($param);
- }
- $this->form->setData($pessoa);
- $this->form->setData($data);
- // close the transaction
- TTransaction::close();
- }
- else
- {
- $this->form->clear();
- }
- }
- catch (Exception $e) // in case of exception
- {
- // shows the exception error message
- new TMessage('error', '<b>Error</b> ' . $e->getMessage());
- // undo all pending operations
- TTransaction::rollback();
- }
- }
- ?>
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.
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.
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....
Felipe,
Sinceramente eu não entendi.