//Desconto de 7% caso o valor da compra seja maior que 500,00 reais.
 public double Desconta(Orcamento orcamento)
 {
     if (orcamento.Valor > 500.0)
     {
         return orcamento.Valor*0.07;
     }
     else
     {
         return Proximo.Desconta(orcamento);
     }
 }
 public void AplicaDescontoExtra(Orcamento orcamento)
 {
     if (!descontoAplicado)
     {
         orcamento.Valor -= orcamento.Valor * 0.05;
         descontoAplicado = true;
     }
     else
     {
         throw new Exception("Desconto já aplicado!");
     }
 }
예제 #3
0
        protected override bool DeveUsarMaximaTaxacao(Orcamento orcamento)
        {
            /*Crie o imposto IHIT, que tem a seguinte regra: caso existam 2 ítens com o mesmo nome, o imposto deve ser de 13% mais R$100,00.
             * Caso contrário, o valor do imposto deverá ser (1% * o número de ítens no orçamento).*/

            IList<String> noOrcamento = new List<string>();

            foreach (Item item in orcamento.Itens)
            {
                if (noOrcamento.Contains(item.Nome)) return true;
                else noOrcamento.Add(item.Nome);
            }

            return false;
        }
        public double Calcula(Orcamento orcamento)
        {
            /* 1) Desconto de 10% para mais de 5 ítens;
             * 2) Desconto de 7% caso o valor da compra seja maior que 500,00 reais.*/
            Desconto d1 = new DescontoPorCincoItens();
            Desconto d2 = new DescontoPorMaisDeQuinhentosReais();
            Desconto d3 =  new DescontoPorVendaCasada();
            Desconto d4 = new SemDesconto();

            d1.Proximo = d2;
            d2.Proximo = d3;
            d3.Proximo = d4;

            return d1.Desconta(orcamento);
        }
예제 #5
0
 private bool TemItemMaiorQue100ReaisNo(Orcamento orcamento)
 {
     return orcamento.Itens.Any(item => item.Valor > 100.0);
 }
예제 #6
0
 protected override double MinimaTaxacao(Orcamento orcamento)
 {
     //6
     return orcamento.Valor*0.06;
 }
 public void Reprova(Orcamento orcamento)
 {
     throw new Exception("Não pode alterar o estado.");
 }
 public void Finaliza(Orcamento orcamento)
 {
     // daqui não posso ir direto para finalizado
     throw new Exception("Orcamento em aprovação não podem ir para finalizado diretamente");
 }
예제 #9
0
 public abstract double Calcula(Orcamento orcamento);
예제 #10
0
 public void Finaliza(Orcamento orcamento)
 {
     // daqui posso ir para o estado de finalizado
     orcamento.EstadoAtual = new Finalizado();
 }
예제 #11
0
 public void Aprova(Orcamento orcamento)
 {
     // jah estou em aprovacao
     throw new Exception("Orçamento já está em estado de aprovação");
 }
예제 #12
0
 protected override double MinimaTaxacao(Orcamento orcamento)
 {
     return orcamento.Valor * (0.01 * orcamento.Itens.Count);
 }
예제 #13
0
 protected override double MaximaTaxacao(Orcamento orcamento)
 {
     return orcamento.Valor * 0.13 + 100;
 }
 public void AplicaDescontoExtra(Orcamento orcamento)
 {
     throw new Exception("Não pode alterar o estado.");
 }
예제 #15
0
 public void Reprova(Orcamento orcamento)
 {
     // nao pode ser reprovado agora!
     throw new Exception("Orçamento está em estado de aprovação e não pode ser reprovado");
 }
 public void RealizaCalculo(Orcamento orcamento, IImposto imposto)
 {
     double valor = imposto.Calcula(orcamento);
     Console.WriteLine(valor);
 }
예제 #17
0
 public void AplicaDescontoExtra(Orcamento orcamento)
 {
     orcamento.Valor -= orcamento.Valor * 0.02;
 }
예제 #18
0
 protected double CalculoDoOutroImposto(Orcamento orcamento)
 {
     // tratando o caso do proximo imposto nao existir!
     if (OutroImposto == null) return 0;
     return OutroImposto.Calcula(orcamento);
 }
예제 #19
0
 protected override bool DeveUsarMaximaTaxacao(Orcamento orcamento)
 {
     //caso o valor do orçamento seja maior que 500,00 e algum item tiver valor superior a 100,00
     return orcamento.Valor > 500 && TemItemMaiorQue100ReaisNo(orcamento);
 }
 public void Aprova(Orcamento orcamento)
 {
     // desse estado posso ir para o estado de aprovado
     orcamento.EstadoAtual = new Aprovado();
 }
예제 #21
0
 protected override double MaximaTaxacao(Orcamento orcamento)
 {
     // 10%
     return orcamento.Valor * 0.1;
 }
 public void Reprova(Orcamento orcamento)
 {
     // desse estado posso ir para o estado de reprovado tambem
     orcamento.EstadoAtual = new Reprovado();
 }
 public void Finaliza(Orcamento orcamento)
 {
     throw new Exception("Não pode alterar o estado.");
 }