1
resposta

Desconto por venda casada não está funcionando

Olá amigos!

Implementei a classe DescontoPorVendaCasada, mas na hora do teste ela não funciona. Já tentei descobrir onde está o erro, mas ainda não consegui. Poderiam me ajudar?

Segue meu código:

class DescontoPorVendaCasada implements Desconto {

        private $proximoDesconto;

        public function desconto(Orcamento $orcamento) {
            if ($this->aconteceuVendaCasadaEm($orcamento)) {
                return $orcamento->getValor() * 0.05;
            } else {
                return $this->proximoDesconto->desconto($orcamento);
            }
        }

        private function aconteceuVendaCasadaEm(Orcamento $orcamento) {
            return $this->existe("caneta", $orcamento) && $this->existe("lapis", $orcamento);
        }

        private function existe($nomeDoItem, Orcamento $orcamento) {
            foreach ($orcamento->getItens() as $item) {
                if ($item->getNome() == $nomeDoItem) {
                    return true;
                }
                return false;
            }
        }

        public function setProximo(Desconto $desconto) {
            $this->proximoDesconto = $desconto;
        }
    }

require_once "Desconto.php";
    require_once "Desconto500Reais.php";
    require_once "Desconto5Itens.php";
    require_once "DescontoPorVendaCasada.php";
    require_once "SemDesconto.php";

    class CalculadorDeDescontos {

        public function calcula(Orcamento $orcamento) {
            $d1 = new Desconto5Itens();
            $d2 = new Desconto500Reais();
            $d3 = new DescontoPorVendaCasada();
            $dfim = new SemDesconto();

            $d1->setProximo($d2);
            $d2->setProximo($d3);
            $d3->setProximo($dfim);

            $valorDoDesconto = $d1->desconto($orcamento);
            return $valorDoDesconto;
        }
    }

require_once "Orcamento.php";
    require_once "Item.php";
    require_once "CalculadorDeDescontos.php";

    $orcamento = new Orcamento(300);
    $item1 = new Item('sapato', 100);
    $item2 = new Item('bone', 50);
    $item3 = new Item('bermuda', 50);
    $item4 = new Item('caneta', 50);
    $item5 = new Item('lapis', 50);
    //$item6 = new Item('caderno', 10);

    $orcamento->addItem($item1);
    $orcamento->addItem($item2);
    $orcamento->addItem($item3);
    $orcamento->addItem($item4);
    $orcamento->addItem($item5);
    //$orcamento->addItem($item6);

    $calculadora = new CalculadorDeDescontos();

    echo "Valor: " . $orcamento->getValor() . "<br />";
    echo "Desconto: R$ " . $calculadora->calcula($orcamento);

interface Desconto {

        public function desconto(Orcamento $orcamento);
        public function setProximo(Desconto $desconto);
    }

class Orcamento {

    private $valor;
    private $itens;

    function __construct($novoValor) {
      $this->valor = $novoValor;
      $this->itens = array();
    }

    public function getValor() {
      return $this->valor;
    }

    public function getItens() {
        return $this->itens;
    }

    public function addItem(Item $item) {
        $this->itens[] = $item;
    }
  }

class Item {

        private $nome;
        private $valor;

        public function __construct($nome, $valor) {
            $this->nome = $nome;
            $this->valor = $valor;
        }

        public function getNome() {
            return $this->nome;
        }

        public function getValor() {
            return $this->valor;
        }
    }
1 resposta

Oi Gustavo, é muito código e pouca dica do que está acontecendo :). Dá algum erro? Já usou uns echo para descobrir até onde o código está funcionando normalmente? Tenta stressar um pouco mais o erro para postar mais informação aqui.