Object of class Pedido could not be converted to string Boa noite, novamente preciso de ajuda.... To ajustando o código da aplicação tutor para um aplicação (trabalho de faculdade) e na hora de gravar a venda/pedido pelo função onSave() ta me dando esse alerta "Object of class Pedido could not be converted to string", onde diz que eu não posso converter para string o objeto da classe Pedido. Por falta de conhecimento e prática recorro a alg...
ML
Object of class Pedido could not be converted to string  
Fechado
Boa noite, novamente preciso de ajuda....

To ajustando o código da aplicação tutor para um aplicação (trabalho de faculdade) e na hora de gravar a venda/pedido pelo função onSave() ta me dando esse alerta "Object of class Pedido could not be converted to string", onde diz que eu não posso converter para string o objeto da classe Pedido. Por falta de conhecimento e prática recorro a alguém que possa me orientar.

public function onSave()
{
try
{
$this->form_cliente->validate(); // validate form data

$data = $this->form_cliente->getData();

TTransaction::open('conectabd');
$items = TSession::getValue('items'); // get items
if ($items)
{
$pedidoitem = new Pedido; // create a new Sale
$$pedidoitem->id_cliente = $data->id_cliente;
$pedidoitem->data_pedido = data_pedido('Y-m-d');
$total_pedido = 0;
foreach ($items as $item)
{
$item->preco_produto = str_replace(',', '', $item->preco_produto);
$item->total_produto = str_replace(',', '', $item->total_produto);
$total += str_replace(',', '', $item->total);

$pedido_item->addPedidoItem($item); // add the item to the Sale
}
$pedidoitem->total = $total;
$pedidoitem->store(); // store the Sale

// clear items
TSession::setValue('items', NULL);
$this->form_cliente->clear(); // clear form
new TMessage('info', 'Record saved successfully');
}
TTransaction::close();
$this->onReload();
}
catch (Exception $e)
{
new TMessage('error', $e->getMessage());
}
}

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


JM

Olá Marcelo

Veja qual linha esta dando o problema, geralmente este problema ocorre quando vc passa um valor para um campo do formulário que estava esperando uma widget Ex: TEntry ou Tlabel, vc pode criar um TLabel("Passar valor aqui") e inserir o label ao form.

Vlw
FC

Marcelo

quando colocar o código no forum coloque entre as tags '
 
  1. <?php e ?>
' fica mais fácil de uma olhada também se o campo no banco de dados está como number e se a variável está indo corretamente para isso de um var dump no objeto antes do store.

 
  1. <?php
  2. $pedidoitem->total = $total;
  3. var_dump($pedidoitem);
  4. $pedidoitem->store(); // store the Sale
  5. ?>

EM

Creio que seu problema esteja nos campos de valores:
<php
//transforme todos os campos que tenham valor para tipo igual ao do banco de dados, ou seja
//se o campo for double ou float use doubleVal() conforme exemplo abaixo
$item->preco_produto = doubleVal(str_replace(',', '', $item->preco_produto));
?>

Verifique sua função replace pq pode dar errado os valores se vc tiver valores com decimais.
EM

 
  1. <?php
  2. //transforme todos os campos que tenham valor para tipo igual ao do banco de dados, ou seja
  3. //se o campo for double ou float use doubleVal() conforme exemplo abaixo
  4. $item->preco_produto = doubleVal(str_replace(',', '', $item->preco_produto));
  5. ?>

ML

Pessoal fiz as alterações que você pediram o problema citado anteriormente não ocorreu mais. Agora ao tentar gravar a venda exibe a msg: Fatal error: Call to undefined function data_pedido(). Não consegui identificar o pq do erro.

 
  1. <?php
  2. public function onSave()
  3. {
  4. try
  5. {
  6. $this->form_cliente->validate(); // validate form data
  7. $data = $this->form_cliente->getData();
  8. TTransaction::open('conectabd');
  9. $items = TSession::getValue('items'); // get items
  10. if ($items)
  11. {
  12. $pedido = new Pedido; // create a new Sale
  13. $pedido->id_cliente = $data->id_cliente;
  14. $pedido->data_pedido = data_pedido('Y-m-d'); //problema nesta linha
  15. $total_pedido = 0;
  16. foreach ($items as $item)
  17. {
  18. $item->preco_produto = doubleVal(str_replace(',', '', $item->preco_produto));
  19. $item->total_produto = doubleVal(str_replace(',', '', $item->total_produto));
  20. $total_pedido += doubleVal(str_replace(',', '', $item->total_pedido));
  21. $pedido->addPedidoItem($item); // add the item to the Sale
  22. }
  23. $pedido->total = $total;
  24. $pedido->store(); // store the Sale
  25. // clear items
  26. TSession::setValue('items', NULL);
  27. $this->form_cliente->clear(); // clear form
  28. new TMessage('info', 'Gravado com sucesso!');
  29. }
  30. TTransaction::close();
  31. $this->onReload();
  32. }
  33. catch (Exception $e)
  34. {
  35. new TMessage('error', $e->getMessage());
  36. }
  37. }
  38. ?>
JM

Olá Marcelo

Onde vc colocou data_pedido vc esta chamando uma função se vc não criou da este erro, neste caso vc pode criar uma função com este nome ou vc pode usar a função nativa do php para pegar a data atual.
 
  1. <?php
  2. date('Y-m-d');
  3. ?>

Vlw
ML

Jackson,

Segui sua orientação e me deparei com a seguinte msg ao tentar gravar a venda: Argument 1 passed to Pedido::addPedidoItem() must be an instance of PedidoItem, instance of Produto given, called in C:xampphtdocsMisterChefappcontrolPedidoForm.class.php on line 244 and defined.

 
  1. <?php
  2. public function onSave()
  3. {
  4. try
  5. {
  6. $this->form_cliente->validate(); // validate form data
  7. $data = $this->form_cliente->getData();
  8. TTransaction::open('conectabd');
  9. $items = TSession::getValue('items'); // get items
  10. if ($items)
  11. {
  12. $pedido = new Pedido; // create a new Sale
  13. $pedido->id_cliente = $data->id_cliente;
  14. $pedido->date = date('Y-m-d');
  15. $total_pedido = 0;
  16. foreach ($items as $item)
  17. {
  18. $item->preco_produto = doubleVal(str_replace(',', '', $item->preco_produto));
  19. $item->total_produto = doubleVal(str_replace(',', '', $item->total_produto));
  20. $total_pedido += doubleVal(str_replace(',', '', $item->total_pedido));
  21. $pedido->addPedidoItem($item); // problema ocorrendo nessa linha.
  22. }
  23. $pedido->total = $total;
  24. $pedido->store(); // store the Sale
  25. // clear items
  26. TSession::setValue('items', NULL);
  27. $this->form_cliente->clear(); // clear form
  28. new TMessage('info', 'Gravado com sucesso!');
  29. }
  30. TTransaction::close();
  31. $this->onReload();
  32. }
  33. catch (Exception $e)
  34. {
  35. new TMessage('error', $e->getMessage());
  36. }
  37. }
  38. ?>


O model PedidoItem está abaixo:
 
  1. <?php
  2. /**
  3. * SaleItem Active Record
  4. * @author <your-name-here>
  5. */
  6. class PedidoItem extends TRecord
  7. {
  8. const TABLENAME = 'tbpedidoitem';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'max'; // {max, serial}
  11. private $produto;
  12. /**
  13. * Constructor method
  14. */
  15. public function __construct($id = NULL)
  16. {
  17. parent::__construct($id);
  18. parent::addAttribute('preco_pedidoitem');
  19. parent::addAttribute('qtde_pedidoitem');
  20. parent::addAttribute('desconto_pedidoitem');
  21. parent::addAttribute('total_pedidoitem');
  22. parent::addAttribute('id_produtoitem');
  23. parent::addAttribute('id_pedido');
  24. }
  25. /**
  26. * Method set_product
  27. * Sample of usage: $sale_item->product = $object;
  28. * @param $object Instance of Product
  29. */
  30. public function set_product(Produto $object)
  31. {
  32. $this->produto = $object;
  33. $this->id_produto = $object->id_produto;
  34. }
  35. /**
  36. * Method get_product
  37. * Sample of usage: $sale_item->product->attribute;
  38. * @returns Product instance
  39. */
  40. public function get_product()
  41. {
  42. // loads the associated object
  43. if (empty($this->produto))
  44. $this->produto = new Produto($this->id_produto);
  45. // returns the associated object
  46. return $this->produto;
  47. }
  48. }
  49. ?>


Minha falta de conhecimento/experiencia de iniciante está me limitando a resolver essa situação... Peço apoio aos colegas que puderem me ajudar...
PD

Você deve ter coisas na variável de sessão que não sejam objetos PedidoItem:
TSession::getValue('items');

Confira o trecho do código onde você alimenta a variável de sessão.
O erro deve estar ali.