<?php
class Pedido {
public $numero;
public $cliente_id;
public $valor_total;
public $itens;
public function __construct($numero, $cliente_id, $valor_total, $itens) {
$this->numero = $numero;
$this->cliente_id = $cliente_id;
$this->valor_total = $valor_total;
$this->itens = $itens;
}
}
class Venda {
public $numero;
public $data;
public $cliente_id;
public $valor_total;
public $itens = [];
public function __construct($numero, $data, $cliente_id, $valor_total) {
$this->numero = $numero;
$this->data = $data;
$this->cliente_id = $cliente_id;
$this->valor_total = $valor_total;
}
public function addItem($item) {
$this->itens[] = $item;
}
}
class Item {
public $produto_id;
public $quantidade;
public $vr_unit;
public function __construct($produto_id, $quantidade, $vr_unit) {
$this->produto_id = $produto_id;
$this->quantidade = $quantidade;
$this->vr_unit = $vr_unit;
}
}
class Database {
private $pedidos = [];
private $vendas = [];
public function __construct() {
$this->seedData();
}
private function seedData() {
$this->pedidos = [
102 => new Pedido(102, 1, 55.50, [
new Item(1, 10, 5.00),
new Item(2, 5, 3.00),
new Item(3, 3, 1.50)
])
];
}
public function getPedido($numeroPedido) {
if (isset($this->pedidos[$numeroPedido])) { return $this->pedidos[$numeroPedido];
}
throw new Exception('Pedido não encontrado.');
}
public function saveVenda($venda) {
$this->vendas[$venda->numero] = $venda;
}
public function gerarNumeroVenda() {
return count($this->vendas) + 1001; }
public function getVendas() {
return $this->vendas;
}
}
class ImportaPedidoService {
private $db;
public function __construct($db) {
$this->db = $db;
}
public function importarPedido($numeroPedido) {
$pedido = $this->db->getPedido($numeroPedido);
$vendaNumero = $this->db->gerarNumeroVenda();
$venda = new Venda
($vendaNumero, date('Y-m-d'), $pedido->cliente_id, $pedido->valor_total);
foreach ($pedido->itens as $item) {
$venda->addItem(new Item($item->produto_id, $item->quantidade, $item->vr_unit));
}
$this->db->saveVenda($venda);
}
}
// Instanciação do serviço e execução
$db = new Database();
$service = new ImportaPedidoService($db);
try {
$service->importarPedido(102); // Número do pedido a ser importado
echo "Pedido importado com sucesso!\n";
// Exibir vendas importadas
$vendas = $db->getVendas();
foreach ($vendas as $venda) {
echo "Venda nº: " . $venda->numero . "\n";
echo "Data: " . $venda->data . "\n";
echo "Cliente ID: " . $venda->cliente_id . "\n";
echo "Valor Total: " . $venda->valor_total . "\n";
echo "Itens:\n";
foreach ($venda->itens as $item) {
echo "- Produto ID: " . $item->produto_id . ", Quantidade: " . $item->quantidade . ", Valor Unitário: " . $item->vr_unit . "\n";
}
echo "\n";
}
} catch (Exception $e) {
echo "Erro: " . $e->getMessage();
}
?>
PD9waHAKCmNsYXNzIFBlZGlkbyB7CiAgICBwdWJsaWMgJG51bWVybzsKICAgIHB1YmxpYyAkY2xpZW50ZV9pZDsKICAgIHB1YmxpYyAkdmFsb3JfdG90YWw7CiAgICBwdWJsaWMgJGl0ZW5zOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbnVtZXJvLCAkY2xpZW50ZV9pZCwgJHZhbG9yX3RvdGFsLCAkaXRlbnMpIHsKICAgICAgICAkdGhpcy0+bnVtZXJvID0gJG51bWVybzsKICAgICAgICAkdGhpcy0+Y2xpZW50ZV9pZCA9ICRjbGllbnRlX2lkOwogICAgICAgICR0aGlzLT52YWxvcl90b3RhbCA9ICR2YWxvcl90b3RhbDsKICAgICAgICAkdGhpcy0+aXRlbnMgPSAkaXRlbnM7CiAgICB9Cn0KCmNsYXNzIFZlbmRhIHsKICAgIHB1YmxpYyAkbnVtZXJvOwogICAgcHVibGljICRkYXRhOwogICAgcHVibGljICRjbGllbnRlX2lkOwogICAgcHVibGljICR2YWxvcl90b3RhbDsKICAgIHB1YmxpYyAkaXRlbnMgPSBbXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG51bWVybywgJGRhdGEsICRjbGllbnRlX2lkLCAkdmFsb3JfdG90YWwpIHsKICAgICAgICAkdGhpcy0+bnVtZXJvID0gJG51bWVybzsKICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOwogICAgICAgICR0aGlzLT5jbGllbnRlX2lkID0gJGNsaWVudGVfaWQ7CiAgICAgICAgJHRoaXMtPnZhbG9yX3RvdGFsID0gJHZhbG9yX3RvdGFsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRJdGVtKCRpdGVtKSB7CiAgICAgICAgJHRoaXMtPml0ZW5zW10gPSAkaXRlbTsKICAgIH0KfQoKY2xhc3MgSXRlbSB7CiAgICBwdWJsaWMgJHByb2R1dG9faWQ7CiAgICBwdWJsaWMgJHF1YW50aWRhZGU7CiAgICBwdWJsaWMgJHZyX3VuaXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwcm9kdXRvX2lkLCAkcXVhbnRpZGFkZSwgJHZyX3VuaXQpIHsKICAgICAgICAkdGhpcy0+cHJvZHV0b19pZCA9ICRwcm9kdXRvX2lkOwogICAgICAgICR0aGlzLT5xdWFudGlkYWRlID0gJHF1YW50aWRhZGU7CiAgICAgICAgJHRoaXMtPnZyX3VuaXQgPSAkdnJfdW5pdDsKICAgIH0KfQoKY2xhc3MgRGF0YWJhc2UgewogICAgcHJpdmF0ZSAkcGVkaWRvcyA9IFtdOwogICAgcHJpdmF0ZSAkdmVuZGFzID0gW107CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewogICAgICAgICR0aGlzLT5zZWVkRGF0YSgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gc2VlZERhdGEoKSB7CiAgICAgICAgJHRoaXMtPnBlZGlkb3MgPSBbCiAgICAgICAgICAgIDEwMiA9PiBuZXcgUGVkaWRvKDEwMiwgMSwgNTUuNTAsIFsKICAgICAgICAgICAgICAgIG5ldyBJdGVtKDEsIDEwLCA1LjAwKSwKICAgICAgICAgICAgICAgIG5ldyBJdGVtKDIsIDUsIDMuMDApLAogICAgICAgICAgICAgICAgbmV3IEl0ZW0oMywgMywgMS41MCkKICAgICAgICAgICAgXSkKICAgICAgICBdOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQZWRpZG8oJG51bWVyb1BlZGlkbykgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+cGVkaWRvc1skbnVtZXJvUGVkaWRvXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wZWRpZG9zWyRudW1lcm9QZWRpZG9dOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignUGVkaWRvIG7Do28gZW5jb250cmFkby4nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZVZlbmRhKCR2ZW5kYSkgewogICAgICAgICR0aGlzLT52ZW5kYXNbJHZlbmRhLT5udW1lcm9dID0gJHZlbmRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXJhck51bWVyb1ZlbmRhKCkgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+dmVuZGFzKSArIDEwMDE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFZlbmRhcygpIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnZlbmRhczsKICAgIH0KfQoKY2xhc3MgSW1wb3J0YVBlZGlkb1NlcnZpY2UgewogICAgcHJpdmF0ZSAkZGI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkYikgewogICAgICAgICR0aGlzLT5kYiA9ICRkYjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaW1wb3J0YXJQZWRpZG8oJG51bWVyb1BlZGlkbykgewogICAgICAgICRwZWRpZG8gPSAkdGhpcy0+ZGItPmdldFBlZGlkbygkbnVtZXJvUGVkaWRvKTsKICAgICAgICAkdmVuZGFOdW1lcm8gPSAkdGhpcy0+ZGItPmdlcmFyTnVtZXJvVmVuZGEoKTsKCiAgICAgICAgJHZlbmRhID0gbmV3IFZlbmRhKCR2ZW5kYU51bWVybywgZGF0ZSgnWS1tLWQnKSwgJHBlZGlkby0+Y2xpZW50ZV9pZCwgJHBlZGlkby0+dmFsb3JfdG90YWwpOwoKICAgICAgICBmb3JlYWNoICgkcGVkaWRvLT5pdGVucyBhcyAkaXRlbSkgewogICAgICAgICAgICAkdmVuZGEtPmFkZEl0ZW0obmV3IEl0ZW0oJGl0ZW0tPnByb2R1dG9faWQsICRpdGVtLT5xdWFudGlkYWRlLCAkaXRlbS0+dnJfdW5pdCkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmRiLT5zYXZlVmVuZGEoJHZlbmRhKTsKICAgIH0KfQoKLy8gSW5zdGFuY2lhw6fDo28gZG8gc2VydmnDp28gZSBleGVjdcOnw6NvCiRkYiA9IG5ldyBEYXRhYmFzZSgpOwokc2VydmljZSA9IG5ldyBJbXBvcnRhUGVkaWRvU2VydmljZSgkZGIpOwoKdHJ5IHsKICAgICRzZXJ2aWNlLT5pbXBvcnRhclBlZGlkbygxMDIpOyAvLyBOw7ptZXJvIGRvIHBlZGlkbyBhIHNlciBpbXBvcnRhZG8KICAgIGVjaG8gIlBlZGlkbyBpbXBvcnRhZG8gY29tIHN1Y2Vzc28hXG4iOwoKICAgIC8vIEV4aWJpciB2ZW5kYXMgaW1wb3J0YWRhcwogICAgJHZlbmRhcyA9ICRkYi0+Z2V0VmVuZGFzKCk7CiAgICBmb3JlYWNoICgkdmVuZGFzIGFzICR2ZW5kYSkgewogICAgICAgIGVjaG8gIlZlbmRhIG7CujogIiAuICR2ZW5kYS0+bnVtZXJvIC4gIlxuIjsKICAgICAgICBlY2hvICJEYXRhOiAiIC4gJHZlbmRhLT5kYXRhIC4gIlxuIjsKICAgICAgICBlY2hvICJDbGllbnRlIElEOiAiIC4gJHZlbmRhLT5jbGllbnRlX2lkIC4gIlxuIjsKICAgICAgICBlY2hvICJWYWxvciBUb3RhbDogIiAuICR2ZW5kYS0+dmFsb3JfdG90YWwgLiAiXG4iOwogICAgICAgIGVjaG8gIkl0ZW5zOlxuIjsKICAgICAgICBmb3JlYWNoICgkdmVuZGEtPml0ZW5zIGFzICRpdGVtKSB7CiAgICAgICAgICAgIGVjaG8gIi0gUHJvZHV0byBJRDogIiAuICRpdGVtLT5wcm9kdXRvX2lkIC4gIiwgUXVhbnRpZGFkZTogIiAuICRpdGVtLT5xdWFudGlkYWRlIC4gIiwgVmFsb3IgVW5pdMOhcmlvOiAiIC4gJGl0ZW0tPnZyX3VuaXQgLiAiXG4iOwogICAgICAgIH0KICAgICAgICBlY2hvICJcbiI7CiAgICB9Cn0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewogICAgZWNobyAiRXJybzogIiAuICRlLT5nZXRNZXNzYWdlKCk7Cn0KPz4K