Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Salvar em duas tabelas Boa Tarde pessoal, tudo bem? Estou desenvolvendo a parte de entrada de notas fiscais e gostaria que o sistema criasse automaticamente na tabela do financeiro. Como eu poderia fazer isso pelo Framework, há possibilidade no método onSave eu conseguir gravar esses dados na tabela do financeiro? Caso positivo, alguém poderia me dar uma luz de como fazer? Obrigado! Samuel de Vincenz...
SV
Salvar em duas tabelas  
Boa Tarde pessoal, tudo bem?

Estou desenvolvendo a parte de entrada de notas fiscais e gostaria que o sistema criasse automaticamente na tabela do financeiro.

Como eu poderia fazer isso pelo Framework, há possibilidade no método onSave eu conseguir gravar esses dados na tabela do financeiro?

Caso positivo, alguém poderia me dar uma luz de como fazer?


Obrigado!

Samuel de Vincenzo

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


MG

Samuel

Vc pode fazer assim:
Criar um "app/config/financeiro.ini" com as configurações de acesso ao financeiro.

  1. <?php
  2.     ...
  3.     TTransaction::open('banco1');
  4.     // salva os dados
  5.     TTransaction::close();
  6.     TTransaction::open('financeiro');
  7.     // grava os dados financeiro
  8.     TTransaction::close();
  9.     // catch TTransacton::rollback();
  10. ?>


SV

Opa Marcelo, Boa Tarde!

Mas esta tabela está dentro do banco da nota e tem como configurar o arquivo ini para abrir somente a tabela?


MC

Boa noite, é como o Marcelo disse acima, vc tem duas bases de dados, então vc tem que abrir duas conexões, o "BANCO1 ' e o "FINANCEIRO", sendo que na segunda transação, vc cria um objeto, passando o campo de relacionamento das duas tabelas.

  1. <?php 
  2.             TTransaction::open('SEU ARQUIVO INI QUE CONTENHA A TABELA NOTAS FISCAIS'); //  
  3.             
  4.             $this->form->validate(); // validate form data
  5.             
  6.             $object = new NOTASFISCAIS;  // Model que contenha os dados da tabela notas fiscais
  7.             //demais código
  8.              $object->store(); // save the object
  9.             
  10.             // get the generated id
  11.             //$data->id = $object->id;
  12.             
  13.             $this->form->setData($data); // fill form data
  14.             TTransaction::close(); // close the transaction
  15.             //abre outra transação
  16.             TTransaction::open('SEU ARQUIVO INI QUE CONTENHA A TABELA DO FINANCEIRO'); //  segunda transação com o BANCO
  17.           $object2 = new NOTASFISCAIS($object->id);  //Aqui está o segredo, vc abrir a outra tabela passando a chave estrangeira(relacionamento)
  18.             ///.....................demais código
  19.            $object2->store(); // save the object
  20.             
  21.            
  22.             TTransaction::close(); // close the transaction
  23. ?>
MG

Samuel, as conexões sempre são abertas com os bancos.
Você neste caso pode mapear (model), apenas a tabela do banco.
RA

Pessoal, post antigo mas me ajudou nesse ponto. Estou usando para salvar mais de um detalhes no FORM mestre/detalhe. Alguem saberia me dizer pq meus dados master estão salvando 2x, ele não edita.

  1. <?php
  2. public function onSave()
  3.     {
  4.         try
  5.         {
  6.             // open a transaction with database
  7.             TTransaction::open('projeto');
  8.             
  9.             $data $this->form->getData();
  10.             $master = new TabelaVendas;
  11.             $master->fromArray( (array) $data);
  12.             $this->form->validate(); // form validation
  13.             
  14.             $master->store(); // save master object
  15.             // delete details
  16.             $old_items TabelaVendasProdutos::where('tabela_vendas_id''='$master->id)->load();
  17.                        
  18.             $keep_items = array();
  19.                       
  20.             // get session items
  21.             $items TSession::getValue(__CLASS__.'_items');
  22.                        
  23.             if( $items )
  24.             {
  25.                 foreach( $items as $item )
  26.                 {
  27.                     if (substr($item['id'],0,1) == 'X' // new record
  28.                     {
  29.                         $detail = new TabelaVendasProdutos;
  30.                     }
  31.                     else
  32.                     {
  33.                         $detail TabelaVendasProdutos::find($item['id']);
  34.                     }
  35.                     $detail->tabela_produtos_id  $item['tabela_produtos_id'];
  36.                     $detail->qtd_produto  $item['qtd_produto'];
  37.                     $detail->valor_produto  $item['valor_produto'];
  38.                     $detail->desconto_produto  $item['desconto_produto'];
  39.                     $detail->tabela_vendas_id $master->id;
  40.                     $detail->valor_total_produto = ($detail->qtd_produto * ($detail->valor_produto $detail->desconto_produto));
  41.                     $detail->store();
  42.                     
  43.                     $keep_items[] = $detail->id;
  44.                 }
  45.             }
  46.             
  47.             if ($old_items)
  48.             {
  49.                 foreach ($old_items as $old_item)
  50.                 {
  51.                     if (!in_array$old_item->id$keep_items))
  52.                     {
  53.                         $old_item->delete();
  54.                     }
  55.                 }
  56.             }
  57.     
  58.             TTransaction::close(); // close the transaction   
  59.       
  60.             // reload form and session items
  61.             $this->onEdit(array('key'=>$master->id));
  62.             
  63.             
  64.             // open a transaction with database
  65.             TTransaction::open('projeto');
  66.             
  67.             $data $this->form->getData();
  68.             $master2 = new TabelaVendas($master->id);
  69.             $master2->fromArray( (array) $data);
  70.             $this->form->validate(); // form validation
  71.             
  72.             $master2->store(); // save master object
  73.             // delete details
  74.             $old_items2 TabelaVendasServicos::where('tabela_vendas_id''='$master2->id)->load();
  75.             
  76.             $keep_items2 = array();
  77.             
  78.             // get session items
  79.             $items2 TSession::getValue(__CLASS__.'_items2');
  80.             
  81.             if( $items2 )
  82.             {
  83.                 foreach( $items2 as $item2 )
  84.                 {
  85.                     if (substr($item2['id'],0,1) == 'X' // new record
  86.                     {
  87.                         $detail2 = new TabelaVendasServicos;
  88.                     }
  89.                     else
  90.                     {
  91.                         $detail2 TabelaVendasServicos::find($item2['id']);
  92.                     }
  93.                     $detail2->tabela_servicos_id  $item2['tabela_servicos_id'];
  94.                     $detail2->qtd_servico  $item2['qtd_servico'];
  95.                     $detail2->valor_servico  $item2['valor_servico'];
  96.                     $detail2->desconto_servico  $item2['desconto_servico'];
  97.                     $detail2->tabela_vendas_id $master2->id;
  98.                     $detail2->valor_total_servico = ($detail2->qtd_servico * ($detail2->valor_servico $detail2->desconto_servico));
  99.                     $detail2->store();
  100.                     
  101.                     $master2->valor_total += ($detail->valor_total_produto $detail2->valor_total_servico);
  102.                     $keep_items2[] = $detail2->id;
  103.                 }
  104.                 
  105.                 $master2->store();
  106.             }
  107.             
  108.             if ($old_items2)
  109.             {
  110.                 foreach ($old_items2 as $old_item2)
  111.                 {
  112.                     if (!in_array$old_item2->id$keep_items2))
  113.                     {
  114.                         $old_item2->delete();
  115.                     }
  116.                 }
  117.             }
  118.             TTransaction::close(); // close the transaction
  119.             
  120.             // reload form and session items
  121.             $this->onEdit2(array('key'=>$master->id));
  122.             
  123.             
  124.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  125.         }
  126.         catch (Exception $e// in case of exception
  127.         {
  128.             new TMessage('error'$e->getMessage());
  129.             $this->form->setData$this->form->getData() ); // keep form data
  130.             TTransaction::rollback();
  131.         }     
  132.     }
  133. ?>
RA

Ao invés de excluir o master antigo e criar um novo com a edição ele cria um novo e não deleta os antigos.
SV

Opa Rafael, Bom dia. Blza.

Eu não abri 2 TTransaction, eu abri um só pois as tabelas estão no mesmo banco de dados, no evento On Save eu fui acrescentando conforme a quantidade de details eu tinha.

Segue o meu Onsave.

  1. <?php
  2.  /**
  3.      * Save the Master/Detail data from form/session to database
  4.      */
  5.     public function onSave()
  6.     {
  7.         try
  8.         {
  9.             // open a transaction with database
  10.             TTransaction::open('vinci');
  11.             
  12.             $data $this->form->getData();
  13.             $master = new SystemUnit;
  14.             $master->fromArray( (array) $data);
  15.             $this->form->validate(); // form validation
  16.             
  17.             $master->store(); // save master object
  18.             // delete details
  19.             $old_items SystemUnitEndereco::where('ID_EMPRESA''='$master->id)->load();
  20.             $old_itemst SystemUnitTelefone::where('ID_EMPRESA''='$master->id)->load();
  21.             $keep_items = array();
  22.             $keep_itemst = array();
  23.             
  24.             // get session items
  25.             $items TSession::getValue(__CLASS__.'_items');
  26.             $itemst TSession::getValue(__CLASS__.'_itemt');
  27.             if( $items )
  28.             {
  29.                 foreach( $items as $item )
  30.                 {
  31.                     if (substr($item['ID'],0,1) == 'X' // new record
  32.                     {
  33.                         $detail = new SystemUnitEndereco;
  34.                     }
  35.                     else
  36.                     {
  37.                         $detail SystemUnitEndereco::find($item['ID']);
  38.                     }
  39.                     $detail->LOGRADOURO  $item['LOGRADOURO'];
  40.                     $detail->NUMERO  $item['NUMERO'];
  41.                     $detail->COMPLEMENTO  $item['COMPLEMENTO'];
  42.                     $detail->BAIRRO  $item['BAIRRO'];
  43.                     $detail->CIDADE  $item['CIDADE'];
  44.                     $detail->CEP  $item['CEP'];
  45.                     $detail->FONE  $item['FONE'];
  46.                     $detail->MUNICIPIO_IBGE  $item['MUNICIPIO_IBGE'];
  47.                     $detail->UF  $item['UF'];
  48.                     $detail->PRINCIPAL  $item['PRINCIPAL'];
  49.                     $detail->ENTREGA  $item['ENTREGA'];
  50.                     $detail->COBRANCA  $item['COBRANCA'];
  51.                     $detail->CORRESPONDENCIA  $item['CORRESPONDENCIA'];
  52.                     $detail->ID_EMPRESA $master->id;
  53.                     $detail->store();
  54.                     
  55.                     $keep_items[] = $detail->ID;
  56.                 }
  57.             }
  58.             
  59.             if( $itemst )
  60.             {
  61.                 foreach( $itemst as $itemt )
  62.                 {
  63.                     if (substr($itemt['ID'],0,1) == 'X' // new record
  64.                     {
  65.                         $detail = new SystemUnitTelefone;
  66.                     }
  67.                     else
  68.                     {
  69.                         $detail SystemUnitTelefone::find($itemt['ID']);
  70.                     }
  71.                     $detail->TIPO  $itemt['TIPO'];
  72.                     $detail->NUMERO  $itemt['NUMERO'];
  73.                     $detail->OBSERVACAO  $itemt['OBSERVACAO'];
  74.                     $detail->ID_EMPRESA $master->id;
  75.                     $detail->store();
  76.                     
  77.                     $keep_itemst[] = $detail->ID;
  78.                 }
  79.             }
  80.             
  81.             if ($old_items)
  82.             {
  83.                 foreach ($old_items as $old_item)
  84.                 {
  85.                     if (!in_array$old_item->ID$keep_items))
  86.                     {
  87.                         $old_item->delete();
  88.                     }
  89.                 }
  90.             }
  91.             
  92.             if ($old_itemst)
  93.             {
  94.                 foreach ($old_itemst as $old_itemt)
  95.                 {
  96.                     if (!in_array$old_itemt->ID$keep_itemst))
  97.                     {
  98.                         $old_itemt->delete();
  99.                     }
  100.                 }
  101.             }
  102.             TTransaction::close(); // close the transaction
  103.             
  104.             // reload form and session items
  105.             $this->onEdit(array('key'=>$master->id));
  106.             
  107.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  108.         }
  109.         catch (Exception $e// in case of exception
  110.         {
  111.             new TMessage('error'$e->getMessage());
  112.             $this->form->setData$this->form->getData() ); // keep form data
  113.             TTransaction::rollback();
  114.         }
  115.     }
  116. ?>


RA

Samuel, muito bom vou testar aqui agora. Uma pergunta, como ficou seu onEdit(), show(), e onReload() ?
SV

Opa Rafael,

Então o evento show não modifiquei, ficou da mesma forma que o padrão.

No evento onReload e OnEdit fui acrescentando conforme a quantidade de details que tenho na tabela.

Veja os códigos:

  1. <?php
  2.     /**
  3.      * Load the items list from session
  4.      * @param $param URL parameters
  5.      */
  6.     public function onReload($param)
  7.     {
  8.         // read session items
  9.         $items TSession::getValue(__CLASS__.'_items');
  10.         $itemst TSession::getValue(__CLASS__.'_itemt');
  11.         
  12.         $this->detail_list->clear(); // clear detail list
  13.         $this->detail_list2->clear(); // clear detail list
  14.         
  15.         if ($items)
  16.         {
  17.             foreach ($items as $list_item)
  18.             {
  19.                 $item = (object) $list_item;
  20.                 
  21.                 $row $this->detail_list->addItem$item );
  22.                 $row->id $list_item['ID'];
  23.             }
  24.         }
  25.         
  26.         if ($itemst)
  27.         {
  28.             foreach ($itemst as $list_item1)
  29.             {
  30.                 $itemt = (object) $list_item1;
  31.                 
  32.                 $row $this->detail_list2->addItem$itemt );
  33.                 $row->id $list_item1['ID'];
  34.             }
  35.         }
  36.         
  37.         $this->loaded TRUE;
  38.     }
  39.     
  40.     /**
  41.      * Load Master/Detail data from database to form/session
  42.      */
  43.     public function onEdit($param)
  44.     {
  45.         try
  46.         {
  47.             TTransaction::open('vinci');
  48.             
  49.             if (isset($param['key']))
  50.             {
  51.                 $key $param['key'];
  52.                 
  53.                 $object = new SystemUnit($key);
  54.                 $items  SystemUnitEndereco::where('ID_EMPRESA''='$key)->load();
  55.                 $itemst SystemUnitTelefone::where('ID_EMPRESA''='$key)->load();
  56.                 var_dump($itemst);
  57.                 $session_items = array();
  58.                 $session_itemst = array();
  59.                 foreach( $items as $item )
  60.                 {
  61.                     $item_key $item->ID;
  62.                     $session_items[$item_key] = $item->toArray();
  63.                     $session_items[$item_key]['ID'] = $item->ID;
  64.                     $session_items[$item_key]['LOGRADOURO'] = $item->LOGRADOURO;
  65.                     $session_items[$item_key]['NUMERO'] = $item->NUMERO;
  66.                     $session_items[$item_key]['COMPLEMENTO'] = $item->COMPLEMENTO;
  67.                     $session_items[$item_key]['BAIRRO'] = $item->BAIRRO;
  68.                     $session_items[$item_key]['CIDADE'] = $item->CIDADE;
  69.                     $session_items[$item_key]['CEP'] = $item->CEP;
  70.                     $session_items[$item_key]['FONE'] = $item->FONE;
  71.                     $session_items[$item_key]['MUNICIPIO_IBGE'] = $item->MUNICIPIO_IBGE;
  72.                     $session_items[$item_key]['UF'] = $item->UF;
  73.                     $session_items[$item_key]['PRINCIPAL'] = $item->PRINCIPAL;
  74.                     $session_items[$item_key]['ENTREGA'] = $item->ENTREGA;
  75.                     $session_items[$item_key]['COBRANCA'] = $item->COBRANCA;
  76.                     $session_items[$item_key]['CORRESPONDENCIA'] = $item->CORRESPONDENCIA;
  77.                 }
  78.                 TSession::setValue(__CLASS__.'_items'$session_items);
  79.                 
  80.                 foreach( $itemst as $itet )
  81.                 {
  82.                     $itemt_key $itet->ID;
  83.                     $session_itemst[$itemt_key] = $itet->toArray();
  84.                     $session_itemst[$itemt_key]['ID'] = $itet->ID;
  85.                     $session_itemst[$itemt_key]['TIPO'] = $itet->TIPO;
  86.                     $session_itemst[$itemt_key]['NUMERO'] = $itet->NUMERO;
  87.                     $session_itemst[$itemt_key]['OBSERVACAO'] = $itet->OBSERVACAO;
  88.                     
  89.                 }
  90.                 TSession::setValue(__CLASS__.'_itemt'$session_itemst);
  91.                 var_dump$session_itemst);
  92.                 
  93.                 $this->form->setData($object); // fill the form with the active record data
  94.                 $this->onReload$param ); // reload items list
  95.                 TTransaction::close(); // close transaction
  96.             }
  97.             else
  98.             {
  99.                 $this->form->clear(TRUE);
  100.                 TSession::setValue(__CLASS__.'_items'null);
  101.                 TSession::setValue(__CLASS__.'_itemt'null);
  102.                 $this->onReload$param );
  103.             }
  104.         }
  105.         catch (Exception $e// in case of exception
  106.         {
  107.             new TMessage('error'$e->getMessage());
  108.             TTransaction::rollback();
  109.         }
  110.     }
  111.     
  112.     
  113. ?>
SV

Opa Rafael,

Então o evento show não modifiquei, ficou da mesma forma que o padrão.

No evento onReload e OnEdit fui acrescentando conforme a quantidade de details que tenho na tabela.

Veja os códigos:

  1. <?php
  2.     /**
  3.      * Load the items list from session
  4.      * @param $param URL parameters
  5.      */
  6.     public function onReload($param)
  7.     {
  8.         // read session items
  9.         $items TSession::getValue(__CLASS__.'_items');
  10.         $itemst TSession::getValue(__CLASS__.'_itemt');
  11.         
  12.         $this->detail_list->clear(); // clear detail list
  13.         $this->detail_list2->clear(); // clear detail list
  14.         
  15.         if ($items)
  16.         {
  17.             foreach ($items as $list_item)
  18.             {
  19.                 $item = (object) $list_item;
  20.                 
  21.                 $row $this->detail_list->addItem$item );
  22.                 $row->id $list_item['ID'];
  23.             }
  24.         }
  25.         
  26.         if ($itemst)
  27.         {
  28.             foreach ($itemst as $list_item1)
  29.             {
  30.                 $itemt = (object) $list_item1;
  31.                 
  32.                 $row $this->detail_list2->addItem$itemt );
  33.                 $row->id $list_item1['ID'];
  34.             }
  35.         }
  36.         
  37.         $this->loaded TRUE;
  38.     }
  39.     
  40.     /**
  41.      * Load Master/Detail data from database to form/session
  42.      */
  43.     public function onEdit($param)
  44.     {
  45.         try
  46.         {
  47.             TTransaction::open('vinci');
  48.             
  49.             if (isset($param['key']))
  50.             {
  51.                 $key $param['key'];
  52.                 
  53.                 $object = new SystemUnit($key);
  54.                 $items  SystemUnitEndereco::where('ID_EMPRESA''='$key)->load();
  55.                 $itemst SystemUnitTelefone::where('ID_EMPRESA''='$key)->load();
  56.                 var_dump($itemst);
  57.                 $session_items = array();
  58.                 $session_itemst = array();
  59.                 foreach( $items as $item )
  60.                 {
  61.                     $item_key $item->ID;
  62.                     $session_items[$item_key] = $item->toArray();
  63.                     $session_items[$item_key]['ID'] = $item->ID;
  64.                     $session_items[$item_key]['LOGRADOURO'] = $item->LOGRADOURO;
  65.                     $session_items[$item_key]['NUMERO'] = $item->NUMERO;
  66.                     $session_items[$item_key]['COMPLEMENTO'] = $item->COMPLEMENTO;
  67.                     $session_items[$item_key]['BAIRRO'] = $item->BAIRRO;
  68.                     $session_items[$item_key]['CIDADE'] = $item->CIDADE;
  69.                     $session_items[$item_key]['CEP'] = $item->CEP;
  70.                     $session_items[$item_key]['FONE'] = $item->FONE;
  71.                     $session_items[$item_key]['MUNICIPIO_IBGE'] = $item->MUNICIPIO_IBGE;
  72.                     $session_items[$item_key]['UF'] = $item->UF;
  73.                     $session_items[$item_key]['PRINCIPAL'] = $item->PRINCIPAL;
  74.                     $session_items[$item_key]['ENTREGA'] = $item->ENTREGA;
  75.                     $session_items[$item_key]['COBRANCA'] = $item->COBRANCA;
  76.                     $session_items[$item_key]['CORRESPONDENCIA'] = $item->CORRESPONDENCIA;
  77.                 }
  78.                 TSession::setValue(__CLASS__.'_items'$session_items);
  79.                 
  80.                 foreach( $itemst as $itet )
  81.                 {
  82.                     $itemt_key $itet->ID;
  83.                     $session_itemst[$itemt_key] = $itet->toArray();
  84.                     $session_itemst[$itemt_key]['ID'] = $itet->ID;
  85.                     $session_itemst[$itemt_key]['TIPO'] = $itet->TIPO;
  86.                     $session_itemst[$itemt_key]['NUMERO'] = $itet->NUMERO;
  87.                     $session_itemst[$itemt_key]['OBSERVACAO'] = $itet->OBSERVACAO;
  88.                     
  89.                 }
  90.                 TSession::setValue(__CLASS__.'_itemt'$session_itemst);
  91.                 var_dump$session_itemst);
  92.                 
  93.                 $this->form->setData($object); // fill the form with the active record data
  94.                 $this->onReload$param ); // reload items list
  95.                 TTransaction::close(); // close transaction
  96.             }
  97.             else
  98.             {
  99.                 $this->form->clear(TRUE);
  100.                 TSession::setValue(__CLASS__.'_items'null);
  101.                 TSession::setValue(__CLASS__.'_itemt'null);
  102.                 $this->onReload$param );
  103.             }
  104.         }
  105.         catch (Exception $e// in case of exception
  106.         {
  107.             new TMessage('error'$e->getMessage());
  108.             TTransaction::rollback();
  109.         }
  110.     }
  111.     
  112.     
  113. ?>
RA

Samuel, meu MASTER ainda continua mantendo as linhas antigas e salvando a nova. Nos detalhes está 100%, ele até atualiza para o novo id/master criado. O que pode ser?
SV

Opa Rafael, Blza.

Como está o seu método OnSave?

Deixa eu dar uma olhada.

Aguardo
RA

  1. <?php
  2. public function onSave()
  3.     {
  4.         try
  5.         {
  6.             // open a transaction with database
  7.             TTransaction::open('projeto');
  8.             
  9.             $data $this->form->getData();
  10.             $master = new TabelaVendas;
  11.             $master->fromArray( (array) $data);
  12.             $this->form->validate(); // form validation
  13.             
  14.             $master->store(); // save master object
  15.             
  16.             // delete details
  17.             $old_items1 TabelaVendasProdutos::where('tabela_vendas_id''='$master->id)->load();
  18.             $old_items2 TabelaVendasServicos::where('tabela_vendas_id''='$master->id)->load();
  19.             $old_items3 TabelaVendasFinanceiro::where('tabela_vendas_id''='$master->id)->load();
  20.                        
  21.             $keep_items1 = array();
  22.             $keep_items2 = array();  
  23.             $keep_items3 = array();         
  24.                       
  25.             // get session items
  26.             $items1 TSession::getValue(__CLASS__.'_item1');
  27.             $items2 TSession::getValue(__CLASS__.'_item2');
  28.             $items3 TSession::getValue(__CLASS__.'_item3');
  29.                        
  30.             if( $items1 )
  31.             {
  32.                 foreach( $items1 as $item1 )
  33.                 {
  34.                     if (substr($item1['id'],0,1) == 'X' // new record
  35.                     {
  36.                         $detail1 = new TabelaVendasProdutos;
  37.                     }
  38.                     else
  39.                     {
  40.                         $detail1 TabelaVendasProdutos::find($item1['id']);
  41.                     }
  42.                     $detail1->tabela_produtos_id  $item1['tabela_produtos_id'];
  43.                     $detail1->qtd_produto  $item1['qtd_produto'];
  44.                     $detail1->valor_produto  $item1['valor_produto'];
  45.                     $detail1->desconto_produto  $item1['desconto_produto'];
  46.                     $detail1->tabela_vendas_id $master->id;
  47.                     $detail1->valor_total_produto = ($detail1->qtd_produto * ($detail1->valor_produto $detail1->desconto_produto));
  48.                     $detail1->store();
  49.                     
  50.                     $master->valor_total += $detail1->valor_total_produto;
  51.                     $keep_items1[] = $detail1->id;
  52.                 }
  53.                 $master->store();
  54.             }
  55.             
  56.             if( $items2 )
  57.             {
  58.                 foreach( $items2 as $item2 )
  59.                 {
  60.                     if (substr($item2['id'],0,1) == 'X' // new record
  61.                     {
  62.                         $detail2 = new TabelaVendasServicos;
  63.                     }
  64.                     else
  65.                     {
  66.                         $detail2 TabelaVendasServicos::find($item2['id']);
  67.                     }
  68.                     $detail2->tabela_servicos_id  $item2['tabela_servicos_id'];
  69.                     $detail2->qtd_servico  $item2['qtd_servico'];
  70.                     $detail2->valor_servico  $item2['valor_servico'];
  71.                     $detail2->desconto_servico  $item2['desconto_servico'];
  72.                     $detail2->tabela_vendas_id $master->id;
  73.                     $detail2->valor_total_servico = ($detail2->qtd_servico * ($detail2->valor_servico $detail2->desconto_servico));
  74.                     $detail2->store();
  75.                     $master->valor_total += $detail2->valor_total_servico;
  76.                     $keep_items2[] = $detail2->id;
  77.                 }
  78.                 $master->store();  
  79.             }
  80.             
  81.             if( $items3 )
  82.             {
  83.                 foreach( $items3 as $item3 )
  84.                 {
  85.                     if (substr($item3['id'],0,1) == 'X' // new record
  86.                     {
  87.                         $detail3 = new TabelaVendasFinanceiro;
  88.                     }
  89.                     else
  90.                     {
  91.                         $detail3 TabelaVendasFinanceiro::find($item3['id']);
  92.                     }
  93.                     $detail3->parcelas  $item3['parcelas'];
  94.                     $detail3->valor_parcelas  $item3['valor_parcelas'];
  95.                     $detail3->valor_total  $item3['valor_total'];                                     
  96.                     $detail3->data_pagamento  $item3['data_pagamento'];
  97.                     $detail3->forma_pagamento_id  $item3['forma_pagamento_id'];
  98.                     $detail3->status_pagamento  $item3['status_pagamento'];
  99.                     $detail3->tabela_vendas_id $master->id;
  100.                     $detail3->store();
  101.                                         
  102.                     $keep_items3[] = $detail3->id;
  103.                 }
  104.             }
  105.             
  106.             //$master->valor_total = ($detail->valor_total_produto + $detail->valor_total_servico);
  107.             //$master->store();
  108.             
  109.             if ($old_items1)
  110.             {
  111.                 foreach ($old_items1 as $old_item1)
  112.                 {
  113.                     if (!in_array$old_item1->id$keep_items1))
  114.                     {
  115.                         $old_item1->delete();
  116.                     }
  117.                 }
  118.             }
  119.             
  120.             if ($old_items2)
  121.             {
  122.                 foreach ($old_items2 as $old_item2)
  123.                 {
  124.                     if (!in_array$old_item2->id$keep_items2))
  125.                     {
  126.                         $old_item2->delete();
  127.                     }
  128.                 }
  129.             }
  130.             
  131.             if ($old_items3)
  132.             {
  133.                 foreach ($old_items3 as $old_item3)
  134.                 {
  135.                     if (!in_array$old_item3->id$keep_items3))
  136.                     {
  137.                         $old_item3->delete();
  138.                     }
  139.                 }
  140.             }
  141.     
  142.             TTransaction::close(); // close the transaction   
  143.       
  144.             // reload form and session items
  145.             $this->onEdit(array('key'=>$master->id));
  146.           
  147.             new TMessage('info'TAdiantiCoreTranslator::translate('Record saved'));
  148.         }
  149.         catch (Exception $e// in case of exception
  150.         {
  151.             new TMessage('error'$e->getMessage());
  152.             $this->form->setData$this->form->getData() ); // keep form data
  153.             TTransaction::rollback();
  154.         }     
  155.     }
  156. ?>
SV

Opa Rafael, Boa Noite!

O problema está aqui:

  1. <?php
  2.     if( $items1 )
  3.             {
  4.                 foreach( $items1 as $item1 )
  5.                 {
  6.                     if (substr($item1['id'],0,1) == 'X' // new record
  7.                     {
  8.                         $detail1 = new TabelaVendasProdutos;
  9.                     }
  10.                     else
  11.                     {
  12.                         $detail1 TabelaVendasProdutos::find($item1['id']);
  13.                     }
  14.                     $detail1->tabela_produtos_id  $item1['tabela_produtos_id'];
  15.                     $detail1->qtd_produto  $item1['qtd_produto'];
  16.                     $detail1->valor_produto  $item1['valor_produto'];
  17.                     $detail1->desconto_produto  $item1['desconto_produto'];
  18.                     $detail1->tabela_vendas_id $master->id;
  19.                     $detail1->valor_total_produto = ($detail1->qtd_produto * ($detail1->valor_produto $detail1->desconto_produto));
  20.                     $detail1->store();
  21.                     
  22.                     $master->valor_total += $detail1->valor_total_produto;
  23.                     $keep_items1[] = $detail1->id;
  24.                 }
  25.                 $master->store();  <-- Não tem necessidadeaqui você está pedindo para o sistema cadastrar os dados contido na 
  26.                                                    Variável $master todas as vezes.
  27.             }
  28. ?>


Retire todos os $master->store() dos if $items1 e $items2 e deixe somente lá em cima depois do $this->form->validate();


Mande noticias se resolveu.

Abraços

Samuel Vincenzo
RA

Samuel, deu certo, agora salva somente 1x no master, mas me tira uma duvida. Quando faço uma edição meu master mantem a linha que editei e cria uma nova, isso acontece na tabela de produtos. Na view que criei ele so mostra o ultimo registro salvo. Isso é normal? Não deveria ter excluido os antigos?