Conheça as melhorias da versão 8.0, 8.1, 8.2!
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 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 (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. $this->form->validate(); // validate form data
  4. $object = new NOTASFISCAIS; // Model que contenha os dados da tabela notas fiscais
  5. //demais código
  6. $object->store(); // save the object
  7. // get the generated id
  8. //$data->id = $object->id;
  9. $this->form->setData($data); // fill form data
  10. TTransaction::close(); // close the transaction
  11. //abre outra transação
  12. TTransaction::open('SEU ARQUIVO INI QUE CONTENHA A TABELA DO FINANCEIRO'); // segunda transação com o BANCO
  13. $object2 = new NOTASFISCAIS($object->id); //Aqui está o segredo, vc abrir a outra tabela passando a chave estrangeira(relacionamento)
  14. ///.....................demais código
  15. $object2->store(); // save the object
  16. TTransaction::close(); // close the transaction
  17. ?>
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. $data = $this->form->getData();
  9. $master = new TabelaVendas;
  10. $master->fromArray( (array) $data);
  11. $this->form->validate(); // form validation
  12. $master->store(); // save master object
  13. // delete details
  14. $old_items = TabelaVendasProdutos::where('tabela_vendas_id', '=', $master->id)->load();
  15. $keep_items = array();
  16. // get session items
  17. $items = TSession::getValue(__CLASS__.'_items');
  18. if( $items )
  19. {
  20. foreach( $items as $item )
  21. {
  22. if (substr($item['id'],0,1) == 'X' ) // new record
  23. {
  24. $detail = new TabelaVendasProdutos;
  25. }
  26. else
  27. {
  28. $detail = TabelaVendasProdutos::find($item['id']);
  29. }
  30. $detail->tabela_produtos_id = $item['tabela_produtos_id'];
  31. $detail->qtd_produto = $item['qtd_produto'];
  32. $detail->valor_produto = $item['valor_produto'];
  33. $detail->desconto_produto = $item['desconto_produto'];
  34. $detail->tabela_vendas_id = $master->id;
  35. $detail->valor_total_produto = ($detail->qtd_produto * ($detail->valor_produto - $detail->desconto_produto));
  36. $detail->store();
  37. $keep_items[] = $detail->id;
  38. }
  39. }
  40. if ($old_items)
  41. {
  42. foreach ($old_items as $old_item)
  43. {
  44. if (!in_array( $old_item->id, $keep_items))
  45. {
  46. $old_item->delete();
  47. }
  48. }
  49. }
  50. TTransaction::close(); // close the transaction
  51. // reload form and session items
  52. $this->onEdit(array('key'=>$master->id));
  53. // open a transaction with database
  54. TTransaction::open('projeto');
  55. $data = $this->form->getData();
  56. $master2 = new TabelaVendas($master->id);
  57. $master2->fromArray( (array) $data);
  58. $this->form->validate(); // form validation
  59. $master2->store(); // save master object
  60. // delete details
  61. $old_items2 = TabelaVendasServicos::where('tabela_vendas_id', '=', $master2->id)->load();
  62. $keep_items2 = array();
  63. // get session items
  64. $items2 = TSession::getValue(__CLASS__.'_items2');
  65. if( $items2 )
  66. {
  67. foreach( $items2 as $item2 )
  68. {
  69. if (substr($item2['id'],0,1) == 'X' ) // new record
  70. {
  71. $detail2 = new TabelaVendasServicos;
  72. }
  73. else
  74. {
  75. $detail2 = TabelaVendasServicos::find($item2['id']);
  76. }
  77. $detail2->tabela_servicos_id = $item2['tabela_servicos_id'];
  78. $detail2->qtd_servico = $item2['qtd_servico'];
  79. $detail2->valor_servico = $item2['valor_servico'];
  80. $detail2->desconto_servico = $item2['desconto_servico'];
  81. $detail2->tabela_vendas_id = $master2->id;
  82. $detail2->valor_total_servico = ($detail2->qtd_servico * ($detail2->valor_servico - $detail2->desconto_servico));
  83. $detail2->store();
  84. $master2->valor_total += ($detail->valor_total_produto + $detail2->valor_total_servico);
  85. $keep_items2[] = $detail2->id;
  86. }
  87. $master2->store();
  88. }
  89. if ($old_items2)
  90. {
  91. foreach ($old_items2 as $old_item2)
  92. {
  93. if (!in_array( $old_item2->id, $keep_items2))
  94. {
  95. $old_item2->delete();
  96. }
  97. }
  98. }
  99. TTransaction::close(); // close the transaction
  100. // reload form and session items
  101. $this->onEdit2(array('key'=>$master->id));
  102. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  103. }
  104. catch (Exception $e) // in case of exception
  105. {
  106. new TMessage('error', $e->getMessage());
  107. $this->form->setData( $this->form->getData() ); // keep form data
  108. TTransaction::rollback();
  109. }
  110. }
  111. ?>
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. $data = $this->form->getData();
  12. $master = new SystemUnit;
  13. $master->fromArray( (array) $data);
  14. $this->form->validate(); // form validation
  15. $master->store(); // save master object
  16. // delete details
  17. $old_items = SystemUnitEndereco::where('ID_EMPRESA', '=', $master->id)->load();
  18. $old_itemst = SystemUnitTelefone::where('ID_EMPRESA', '=', $master->id)->load();
  19. $keep_items = array();
  20. $keep_itemst = array();
  21. // get session items
  22. $items = TSession::getValue(__CLASS__.'_items');
  23. $itemst = TSession::getValue(__CLASS__.'_itemt');
  24. if( $items )
  25. {
  26. foreach( $items as $item )
  27. {
  28. if (substr($item['ID'],0,1) == 'X' ) // new record
  29. {
  30. $detail = new SystemUnitEndereco;
  31. }
  32. else
  33. {
  34. $detail = SystemUnitEndereco::find($item['ID']);
  35. }
  36. $detail->LOGRADOURO = $item['LOGRADOURO'];
  37. $detail->NUMERO = $item['NUMERO'];
  38. $detail->COMPLEMENTO = $item['COMPLEMENTO'];
  39. $detail->BAIRRO = $item['BAIRRO'];
  40. $detail->CIDADE = $item['CIDADE'];
  41. $detail->CEP = $item['CEP'];
  42. $detail->FONE = $item['FONE'];
  43. $detail->MUNICIPIO_IBGE = $item['MUNICIPIO_IBGE'];
  44. $detail->UF = $item['UF'];
  45. $detail->PRINCIPAL = $item['PRINCIPAL'];
  46. $detail->ENTREGA = $item['ENTREGA'];
  47. $detail->COBRANCA = $item['COBRANCA'];
  48. $detail->CORRESPONDENCIA = $item['CORRESPONDENCIA'];
  49. $detail->ID_EMPRESA = $master->id;
  50. $detail->store();
  51. $keep_items[] = $detail->ID;
  52. }
  53. }
  54. if( $itemst )
  55. {
  56. foreach( $itemst as $itemt )
  57. {
  58. if (substr($itemt['ID'],0,1) == 'X' ) // new record
  59. {
  60. $detail = new SystemUnitTelefone;
  61. }
  62. else
  63. {
  64. $detail = SystemUnitTelefone::find($itemt['ID']);
  65. }
  66. $detail->TIPO = $itemt['TIPO'];
  67. $detail->NUMERO = $itemt['NUMERO'];
  68. $detail->OBSERVACAO = $itemt['OBSERVACAO'];
  69. $detail->ID_EMPRESA = $master->id;
  70. $detail->store();
  71. $keep_itemst[] = $detail->ID;
  72. }
  73. }
  74. if ($old_items)
  75. {
  76. foreach ($old_items as $old_item)
  77. {
  78. if (!in_array( $old_item->ID, $keep_items))
  79. {
  80. $old_item->delete();
  81. }
  82. }
  83. }
  84. if ($old_itemst)
  85. {
  86. foreach ($old_itemst as $old_itemt)
  87. {
  88. if (!in_array( $old_itemt->ID, $keep_itemst))
  89. {
  90. $old_itemt->delete();
  91. }
  92. }
  93. }
  94. TTransaction::close(); // close the transaction
  95. // reload form and session items
  96. $this->onEdit(array('key'=>$master->id));
  97. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  98. }
  99. catch (Exception $e) // in case of exception
  100. {
  101. new TMessage('error', $e->getMessage());
  102. $this->form->setData( $this->form->getData() ); // keep form data
  103. TTransaction::rollback();
  104. }
  105. }
  106. ?>


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. $this->detail_list->clear(); // clear detail list
  12. $this->detail_list2->clear(); // clear detail list
  13. if ($items)
  14. {
  15. foreach ($items as $list_item)
  16. {
  17. $item = (object) $list_item;
  18. $row = $this->detail_list->addItem( $item );
  19. $row->id = $list_item['ID'];
  20. }
  21. }
  22. if ($itemst)
  23. {
  24. foreach ($itemst as $list_item1)
  25. {
  26. $itemt = (object) $list_item1;
  27. $row = $this->detail_list2->addItem( $itemt );
  28. $row->id = $list_item1['ID'];
  29. }
  30. }
  31. $this->loaded = TRUE;
  32. }
  33. /**
  34. * Load Master/Detail data from database to form/session
  35. */
  36. public function onEdit($param)
  37. {
  38. try
  39. {
  40. TTransaction::open('vinci');
  41. if (isset($param['key']))
  42. {
  43. $key = $param['key'];
  44. $object = new SystemUnit($key);
  45. $items = SystemUnitEndereco::where('ID_EMPRESA', '=', $key)->load();
  46. $itemst = SystemUnitTelefone::where('ID_EMPRESA', '=', $key)->load();
  47. var_dump($itemst);
  48. $session_items = array();
  49. $session_itemst = array();
  50. foreach( $items as $item )
  51. {
  52. $item_key = $item->ID;
  53. $session_items[$item_key] = $item->toArray();
  54. $session_items[$item_key]['ID'] = $item->ID;
  55. $session_items[$item_key]['LOGRADOURO'] = $item->LOGRADOURO;
  56. $session_items[$item_key]['NUMERO'] = $item->NUMERO;
  57. $session_items[$item_key]['COMPLEMENTO'] = $item->COMPLEMENTO;
  58. $session_items[$item_key]['BAIRRO'] = $item->BAIRRO;
  59. $session_items[$item_key]['CIDADE'] = $item->CIDADE;
  60. $session_items[$item_key]['CEP'] = $item->CEP;
  61. $session_items[$item_key]['FONE'] = $item->FONE;
  62. $session_items[$item_key]['MUNICIPIO_IBGE'] = $item->MUNICIPIO_IBGE;
  63. $session_items[$item_key]['UF'] = $item->UF;
  64. $session_items[$item_key]['PRINCIPAL'] = $item->PRINCIPAL;
  65. $session_items[$item_key]['ENTREGA'] = $item->ENTREGA;
  66. $session_items[$item_key]['COBRANCA'] = $item->COBRANCA;
  67. $session_items[$item_key]['CORRESPONDENCIA'] = $item->CORRESPONDENCIA;
  68. }
  69. TSession::setValue(__CLASS__.'_items', $session_items);
  70. foreach( $itemst as $itet )
  71. {
  72. $itemt_key = $itet->ID;
  73. $session_itemst[$itemt_key] = $itet->toArray();
  74. $session_itemst[$itemt_key]['ID'] = $itet->ID;
  75. $session_itemst[$itemt_key]['TIPO'] = $itet->TIPO;
  76. $session_itemst[$itemt_key]['NUMERO'] = $itet->NUMERO;
  77. $session_itemst[$itemt_key]['OBSERVACAO'] = $itet->OBSERVACAO;
  78. }
  79. TSession::setValue(__CLASS__.'_itemt', $session_itemst);
  80. var_dump( $session_itemst);
  81. $this->form->setData($object); // fill the form with the active record data
  82. $this->onReload( $param ); // reload items list
  83. TTransaction::close(); // close transaction
  84. }
  85. else
  86. {
  87. $this->form->clear(TRUE);
  88. TSession::setValue(__CLASS__.'_items', null);
  89. TSession::setValue(__CLASS__.'_itemt', null);
  90. $this->onReload( $param );
  91. }
  92. }
  93. catch (Exception $e) // in case of exception
  94. {
  95. new TMessage('error', $e->getMessage());
  96. TTransaction::rollback();
  97. }
  98. }
  99. ?>
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. $this->detail_list->clear(); // clear detail list
  12. $this->detail_list2->clear(); // clear detail list
  13. if ($items)
  14. {
  15. foreach ($items as $list_item)
  16. {
  17. $item = (object) $list_item;
  18. $row = $this->detail_list->addItem( $item );
  19. $row->id = $list_item['ID'];
  20. }
  21. }
  22. if ($itemst)
  23. {
  24. foreach ($itemst as $list_item1)
  25. {
  26. $itemt = (object) $list_item1;
  27. $row = $this->detail_list2->addItem( $itemt );
  28. $row->id = $list_item1['ID'];
  29. }
  30. }
  31. $this->loaded = TRUE;
  32. }
  33. /**
  34. * Load Master/Detail data from database to form/session
  35. */
  36. public function onEdit($param)
  37. {
  38. try
  39. {
  40. TTransaction::open('vinci');
  41. if (isset($param['key']))
  42. {
  43. $key = $param['key'];
  44. $object = new SystemUnit($key);
  45. $items = SystemUnitEndereco::where('ID_EMPRESA', '=', $key)->load();
  46. $itemst = SystemUnitTelefone::where('ID_EMPRESA', '=', $key)->load();
  47. var_dump($itemst);
  48. $session_items = array();
  49. $session_itemst = array();
  50. foreach( $items as $item )
  51. {
  52. $item_key = $item->ID;
  53. $session_items[$item_key] = $item->toArray();
  54. $session_items[$item_key]['ID'] = $item->ID;
  55. $session_items[$item_key]['LOGRADOURO'] = $item->LOGRADOURO;
  56. $session_items[$item_key]['NUMERO'] = $item->NUMERO;
  57. $session_items[$item_key]['COMPLEMENTO'] = $item->COMPLEMENTO;
  58. $session_items[$item_key]['BAIRRO'] = $item->BAIRRO;
  59. $session_items[$item_key]['CIDADE'] = $item->CIDADE;
  60. $session_items[$item_key]['CEP'] = $item->CEP;
  61. $session_items[$item_key]['FONE'] = $item->FONE;
  62. $session_items[$item_key]['MUNICIPIO_IBGE'] = $item->MUNICIPIO_IBGE;
  63. $session_items[$item_key]['UF'] = $item->UF;
  64. $session_items[$item_key]['PRINCIPAL'] = $item->PRINCIPAL;
  65. $session_items[$item_key]['ENTREGA'] = $item->ENTREGA;
  66. $session_items[$item_key]['COBRANCA'] = $item->COBRANCA;
  67. $session_items[$item_key]['CORRESPONDENCIA'] = $item->CORRESPONDENCIA;
  68. }
  69. TSession::setValue(__CLASS__.'_items', $session_items);
  70. foreach( $itemst as $itet )
  71. {
  72. $itemt_key = $itet->ID;
  73. $session_itemst[$itemt_key] = $itet->toArray();
  74. $session_itemst[$itemt_key]['ID'] = $itet->ID;
  75. $session_itemst[$itemt_key]['TIPO'] = $itet->TIPO;
  76. $session_itemst[$itemt_key]['NUMERO'] = $itet->NUMERO;
  77. $session_itemst[$itemt_key]['OBSERVACAO'] = $itet->OBSERVACAO;
  78. }
  79. TSession::setValue(__CLASS__.'_itemt', $session_itemst);
  80. var_dump( $session_itemst);
  81. $this->form->setData($object); // fill the form with the active record data
  82. $this->onReload( $param ); // reload items list
  83. TTransaction::close(); // close transaction
  84. }
  85. else
  86. {
  87. $this->form->clear(TRUE);
  88. TSession::setValue(__CLASS__.'_items', null);
  89. TSession::setValue(__CLASS__.'_itemt', null);
  90. $this->onReload( $param );
  91. }
  92. }
  93. catch (Exception $e) // in case of exception
  94. {
  95. new TMessage('error', $e->getMessage());
  96. TTransaction::rollback();
  97. }
  98. }
  99. ?>
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. $data = $this->form->getData();
  9. $master = new TabelaVendas;
  10. $master->fromArray( (array) $data);
  11. $this->form->validate(); // form validation
  12. $master->store(); // save master object
  13. // delete details
  14. $old_items1 = TabelaVendasProdutos::where('tabela_vendas_id', '=', $master->id)->load();
  15. $old_items2 = TabelaVendasServicos::where('tabela_vendas_id', '=', $master->id)->load();
  16. $old_items3 = TabelaVendasFinanceiro::where('tabela_vendas_id', '=', $master->id)->load();
  17. $keep_items1 = array();
  18. $keep_items2 = array();
  19. $keep_items3 = array();
  20. // get session items
  21. $items1 = TSession::getValue(__CLASS__.'_item1');
  22. $items2 = TSession::getValue(__CLASS__.'_item2');
  23. $items3 = TSession::getValue(__CLASS__.'_item3');
  24. if( $items1 )
  25. {
  26. foreach( $items1 as $item1 )
  27. {
  28. if (substr($item1['id'],0,1) == 'X' ) // new record
  29. {
  30. $detail1 = new TabelaVendasProdutos;
  31. }
  32. else
  33. {
  34. $detail1 = TabelaVendasProdutos::find($item1['id']);
  35. }
  36. $detail1->tabela_produtos_id = $item1['tabela_produtos_id'];
  37. $detail1->qtd_produto = $item1['qtd_produto'];
  38. $detail1->valor_produto = $item1['valor_produto'];
  39. $detail1->desconto_produto = $item1['desconto_produto'];
  40. $detail1->tabela_vendas_id = $master->id;
  41. $detail1->valor_total_produto = ($detail1->qtd_produto * ($detail1->valor_produto - $detail1->desconto_produto));
  42. $detail1->store();
  43. $master->valor_total += $detail1->valor_total_produto;
  44. $keep_items1[] = $detail1->id;
  45. }
  46. $master->store();
  47. }
  48. if( $items2 )
  49. {
  50. foreach( $items2 as $item2 )
  51. {
  52. if (substr($item2['id'],0,1) == 'X' ) // new record
  53. {
  54. $detail2 = new TabelaVendasServicos;
  55. }
  56. else
  57. {
  58. $detail2 = TabelaVendasServicos::find($item2['id']);
  59. }
  60. $detail2->tabela_servicos_id = $item2['tabela_servicos_id'];
  61. $detail2->qtd_servico = $item2['qtd_servico'];
  62. $detail2->valor_servico = $item2['valor_servico'];
  63. $detail2->desconto_servico = $item2['desconto_servico'];
  64. $detail2->tabela_vendas_id = $master->id;
  65. $detail2->valor_total_servico = ($detail2->qtd_servico * ($detail2->valor_servico - $detail2->desconto_servico));
  66. $detail2->store();
  67. $master->valor_total += $detail2->valor_total_servico;
  68. $keep_items2[] = $detail2->id;
  69. }
  70. $master->store();
  71. }
  72. if( $items3 )
  73. {
  74. foreach( $items3 as $item3 )
  75. {
  76. if (substr($item3['id'],0,1) == 'X' ) // new record
  77. {
  78. $detail3 = new TabelaVendasFinanceiro;
  79. }
  80. else
  81. {
  82. $detail3 = TabelaVendasFinanceiro::find($item3['id']);
  83. }
  84. $detail3->parcelas = $item3['parcelas'];
  85. $detail3->valor_parcelas = $item3['valor_parcelas'];
  86. $detail3->valor_total = $item3['valor_total'];
  87. $detail3->data_pagamento = $item3['data_pagamento'];
  88. $detail3->forma_pagamento_id = $item3['forma_pagamento_id'];
  89. $detail3->status_pagamento = $item3['status_pagamento'];
  90. $detail3->tabela_vendas_id = $master->id;
  91. $detail3->store();
  92. $keep_items3[] = $detail3->id;
  93. }
  94. }
  95. //$master->valor_total = ($detail->valor_total_produto + $detail->valor_total_servico);
  96. //$master->store();
  97. if ($old_items1)
  98. {
  99. foreach ($old_items1 as $old_item1)
  100. {
  101. if (!in_array( $old_item1->id, $keep_items1))
  102. {
  103. $old_item1->delete();
  104. }
  105. }
  106. }
  107. if ($old_items2)
  108. {
  109. foreach ($old_items2 as $old_item2)
  110. {
  111. if (!in_array( $old_item2->id, $keep_items2))
  112. {
  113. $old_item2->delete();
  114. }
  115. }
  116. }
  117. if ($old_items3)
  118. {
  119. foreach ($old_items3 as $old_item3)
  120. {
  121. if (!in_array( $old_item3->id, $keep_items3))
  122. {
  123. $old_item3->delete();
  124. }
  125. }
  126. }
  127. TTransaction::close(); // close the transaction
  128. // reload form and session items
  129. $this->onEdit(array('key'=>$master->id));
  130. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  131. }
  132. catch (Exception $e) // in case of exception
  133. {
  134. new TMessage('error', $e->getMessage());
  135. $this->form->setData( $this->form->getData() ); // keep form data
  136. TTransaction::rollback();
  137. }
  138. }
  139. ?>
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. $master->valor_total += $detail1->valor_total_produto;
  22. $keep_items1[] = $detail1->id;
  23. }
  24. $master->store(); <-- Não tem necessidade, aqui você está pedindo para o sistema cadastrar os dados contido na
  25. Variável $master todas as vezes.
  26. }
  27. ?>


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?