fork download
  1. <?php
  2.  
  3. class Pedido {
  4. public $numero;
  5. public $cliente_id;
  6. public $valor_total;
  7. public $itens;
  8.  
  9. public function __construct($numero, $cliente_id, $valor_total, $itens) {
  10. $this->numero = $numero;
  11. $this->cliente_id = $cliente_id;
  12. $this->valor_total = $valor_total;
  13. $this->itens = $itens;
  14. }
  15. }
  16.  
  17. class Venda {
  18. public $numero;
  19. public $data;
  20. public $cliente_id;
  21. public $valor_total;
  22. public $itens = [];
  23.  
  24. public function __construct($numero, $data, $cliente_id, $valor_total) {
  25. $this->numero = $numero;
  26. $this->data = $data;
  27. $this->cliente_id = $cliente_id;
  28. $this->valor_total = $valor_total;
  29. }
  30.  
  31. public function addItem($item) {
  32. $this->itens[] = $item;
  33. }
  34. }
  35.  
  36. class Item {
  37. public $produto_id;
  38. public $quantidade;
  39. public $vr_unit;
  40.  
  41. public function __construct($produto_id, $quantidade, $vr_unit) {
  42. $this->produto_id = $produto_id;
  43. $this->quantidade = $quantidade;
  44. $this->vr_unit = $vr_unit;
  45. }
  46. }
  47.  
  48. class Database {
  49. private $pedidos = [];
  50. private $vendas = [];
  51.  
  52. public function __construct() {
  53. $this->seedData();
  54. }
  55.  
  56. private function seedData() {
  57. $this->pedidos = [
  58. 102 => new Pedido(102, 1, 55.50, [
  59. new Item(1, 10, 5.00),
  60. new Item(2, 5, 3.00),
  61. new Item(3, 3, 1.50)
  62. ])
  63. ];
  64. }
  65.  
  66. public function getPedido($numeroPedido) {
  67. if (isset($this->pedidos[$numeroPedido])) {
  68. return $this->pedidos[$numeroPedido];
  69. }
  70.  
  71. throw new Exception('Pedido não encontrado.');
  72. }
  73.  
  74. public function saveVenda($venda) {
  75. $this->vendas[$venda->numero] = $venda;
  76. }
  77.  
  78. public function gerarNumeroVenda() {
  79. return count($this->vendas) + 1001;
  80. }
  81.  
  82. public function getVendas() {
  83. return $this->vendas;
  84. }
  85. }
  86.  
  87. class ImportaPedidoService {
  88. private $db;
  89.  
  90. public function __construct($db) {
  91. $this->db = $db;
  92. }
  93.  
  94. public function importarPedido($numeroPedido) {
  95. $pedido = $this->db->getPedido($numeroPedido);
  96. $vendaNumero = $this->db->gerarNumeroVenda();
  97.  
  98. $venda = new Venda($vendaNumero, date('Y-m-d'), $pedido->cliente_id, $pedido->valor_total);
  99.  
  100. foreach ($pedido->itens as $item) {
  101. $venda->addItem(new Item($item->produto_id, $item->quantidade, $item->vr_unit));
  102. }
  103.  
  104. $this->db->saveVenda($venda);
  105. }
  106. }
  107.  
  108. // Instanciação do serviço e execução
  109. $db = new Database();
  110. $service = new ImportaPedidoService($db);
  111.  
  112. try {
  113. $service->importarPedido(102); // Número do pedido a ser importado
  114. echo "Pedido importado com sucesso!\n";
  115.  
  116. // Exibir vendas importadas
  117. $vendas = $db->getVendas();
  118. foreach ($vendas as $venda) {
  119. echo "Venda nº: " . $venda->numero . "\n";
  120. echo "Data: " . $venda->data . "\n";
  121. echo "Cliente ID: " . $venda->cliente_id . "\n";
  122. echo "Valor Total: " . $venda->valor_total . "\n";
  123. echo "Itens:\n";
  124. foreach ($venda->itens as $item) {
  125. echo "- Produto ID: " . $item->produto_id . ", Quantidade: " . $item->quantidade . ", Valor Unitário: " . $item->vr_unit . "\n";
  126. }
  127. echo "\n";
  128. }
  129. } catch (Exception $e) {
  130. echo "Erro: " . $e->getMessage();
  131. }
  132. ?>
  133.  
Success #stdin #stdout 0.03s 26204KB
stdin
Standard input is empty
stdout
Pedido importado com sucesso!
Venda nº: 1001
Data: 2024-07-19
Cliente ID: 1
Valor Total: 55.5
Itens:
- Produto ID: 1, Quantidade: 10, Valor Unitário: 5
- Produto ID: 2, Quantidade: 5, Valor Unitário: 3
- Produto ID: 3, Quantidade: 3, Valor Unitário: 1.5