//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!"); } }
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); }
private bool TemItemMaiorQue100ReaisNo(Orcamento orcamento) { return orcamento.Itens.Any(item => item.Valor > 100.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"); }
public abstract double Calcula(Orcamento orcamento);
public void Finaliza(Orcamento orcamento) { // daqui posso ir para o estado de finalizado orcamento.EstadoAtual = new Finalizado(); }
public void Aprova(Orcamento orcamento) { // jah estou em aprovacao throw new Exception("Orçamento já está em estado de aprovação"); }
protected override double MinimaTaxacao(Orcamento orcamento) { return orcamento.Valor * (0.01 * orcamento.Itens.Count); }
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."); }
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); }
public void AplicaDescontoExtra(Orcamento orcamento) { orcamento.Valor -= orcamento.Valor * 0.02; }
protected double CalculoDoOutroImposto(Orcamento orcamento) { // tratando o caso do proximo imposto nao existir! if (OutroImposto == null) return 0; return OutroImposto.Calcula(orcamento); }
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(); }
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."); }