public decimal AplicarDesconto(decimal precoProduto, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoAposDesconto = 0; decimal descontoPorFidelidade = (tempoDeContaEmAnos > 5) ? (decimal)5 / 100 : (decimal)tempoDeContaEmAnos / 100; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: precoAposDesconto = precoProduto; break; case StatusContaCliente.ClienteComum: precoAposDesconto = (precoProduto - (0.1m * precoProduto)) - descontoPorFidelidade * (precoProduto - (0.1m * precoProduto)); break; case StatusContaCliente.ClienteEspecial: precoAposDesconto = (0.7m * precoProduto) - descontoPorFidelidade * (0.7m * precoProduto); break; case StatusContaCliente.ClienteVip: precoAposDesconto = (precoProduto - (0.5m * precoProduto)) - descontoPorFidelidade * (precoProduto - (0.5m * precoProduto)); break; default: throw new NotImplementedException(); } return(precoAposDesconto); }
public ICalculaDescontoStatusConta GetCalculoDescontoStatusConta(StatusContaCliente statusContaCliente) { ICalculaDescontoStatusConta calcular; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: calcular = new ClienteNaoRegistradoDesconto(); break; case StatusContaCliente.ClienteComum: calcular = new ClienteComumDesconto(); break; case StatusContaCliente.ClienteEspecial: calcular = new ClienteEspecialDesconto(); break; case StatusContaCliente.ClinteVip: calcular = new ClienteVIPDesconto(); break; default: throw new NotImplementedException(); } return(calcular); }
public ICalculaDescontoStatusConta GetCalculoDescontoStatusConta(StatusContaCliente statusContaCliente) { ICalculaDescontoStatusConta calculaDescontoStatusConta; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: calculaDescontoStatusConta = new CalculaDescontoClienteNaoRegistrado(); break; case StatusContaCliente.ClienteComum: // 2- Calcula o desconto por status de conta de cliente calculaDescontoStatusConta = new CalculaDescontoClienteComum(); break; case StatusContaCliente.ClienteEspecial: // 2- Calcula o desconto por status de conta de cliente calculaDescontoStatusConta = new CalculaDescontoClienteEspecial(); break; case StatusContaCliente.ClienteVip: // 2- Calcula o desconto por status de conta de cliente calculaDescontoStatusConta = new CalculoDescontoClienteVip(); break; default: throw new NotImplementedException(); } return(calculaDescontoStatusConta); }
public decimal AplicarDesconto(decimal preco, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoDepoisDoDesconto = 0; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: precoDepoisDoDesconto = new ClienteNaoRegistrado().AplicarDescontoStatusConta(preco); break; case StatusContaCliente.ClienteComum: precoDepoisDoDesconto = new ClienteComum().AplicarDescontoStatusConta(preco); precoDepoisDoDesconto = descontoFidelidade.AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteEspecial: precoDepoisDoDesconto = new ClienteEspecial().AplicarDescontoStatusConta(preco); precoDepoisDoDesconto = descontoFidelidade.AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteVIP: precoDepoisDoDesconto = new ClienteVIP().AplicarDescontoStatusConta(preco); precoDepoisDoDesconto = descontoFidelidade.AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); break; default: throw new NotImplementedException(); } return(precoDepoisDoDesconto); }
public decimal AplicarDesconto(decimal preco, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoDepoisDoDesconto = 0; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: precoDepoisDoDesconto = preco; break; case StatusContaCliente.ClienteComum: precoDepoisDoDesconto = (preco - (Constantes.DESCONTO_CLIENTE_COMUM * preco)); precoDepoisDoDesconto = descontoFidelidade.AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteEspecial: precoDepoisDoDesconto = (preco - (Constantes.DESCONTO_CLIENTE_ESPECIAL * preco)); precoDepoisDoDesconto = descontoFidelidade.AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteVIP: precoDepoisDoDesconto = (preco - (Constantes.DESCONTO_CLIENTE_VIP * preco)); precoDepoisDoDesconto = descontoFidelidade.AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); break; default: throw new NotImplementedException(); } return(precoDepoisDoDesconto); }
public decimal AplicarDesconto(decimal precoProduto, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoDepoisDoDesconto = 0; precoDepoisDoDesconto = _calculaDescontoStatusContaFactory. GetCalculoDescontoStatusConta(statusContaCliente).AplicarDescontoStatusConta(precoProduto); precoDepoisDoDesconto = _calculaDescontoFidelidade. AplicarDescontoFidelidade(precoDepoisDoDesconto, tempoDeContaEmAnos); return(precoDepoisDoDesconto); }
public decimal AplicarDesconto(decimal precoProduto, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoAposDesconto = 0; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: precoAposDesconto = new CalculaDescontoClienteNaoRegistrado().AplicaDescontoStatusConta(precoProduto); precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteComum: // 2- Calcula o desconto por status de conta de cliente precoAposDesconto = new CalculaDescontoClienteComum().AplicaDescontoStatusConta(precoProduto); // 1- Calcula o desconto por fidelidade precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteEspecial: // 2- Calcula o desconto por status de conta de cliente precoAposDesconto = new CalculaDescontoClienteEspecial().AplicaDescontoStatusConta(precoProduto); // 1- Calcula o desconto por fidelidade precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteVip: // 2- Calcula o desconto por status de conta de cliente precoAposDesconto = new CalculoDescontoClienteVip().AplicaDescontoStatusConta(precoProduto); // 1- Calcula o desconto por fidelidade precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; default: throw new NotImplementedException(); } return(precoAposDesconto); }
public decimal AplicarDesconto(decimal precoProduto, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoAposDesconto = 0; decimal descontoPorFidelidade = (tempoDeContaEmAnos > Constantes.DESCONTO_MAXIMO_POR_FIDELIDADE) ? (decimal)5 / 100 : (decimal)tempoDeContaEmAnos / 100; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: precoAposDesconto = precoProduto; break; case StatusContaCliente.ClienteComum: //precoAposDesconto = (precoProduto - (0.1m * precoProduto)) - descontoPorFidelidade * (precoProduto - (0.1m * precoProduto)); precoAposDesconto = (precoProduto - (Constantes.DESCONTO_CLIENTE_COMUM * precoProduto)); precoAposDesconto = precoAposDesconto - (descontoPorFidelidade * precoAposDesconto); break; case StatusContaCliente.ClienteEspecial: //precoAposDesconto = (0.7m * precoProduto) - descontoPorFidelidade * (0.7m * precoProduto); precoAposDesconto = (precoProduto - (Constantes.DESCONTO_CLIENTE_ESPECIAL * precoProduto)); precoAposDesconto = precoAposDesconto - (descontoPorFidelidade * precoAposDesconto); break; case StatusContaCliente.ClienteVip: //precoAposDesconto = (precoProduto - (0.5m * precoProduto)) - descontoPorFidelidade * (precoProduto - (0.5m * precoProduto)); precoAposDesconto = (precoProduto - (Constantes.DESCONTO_CLIENTE_VIP * precoProduto)); precoAposDesconto = precoAposDesconto - (descontoPorFidelidade * precoAposDesconto); break; default: throw new NotImplementedException(); } return(precoAposDesconto); }
public decimal AplicarDesconto(decimal precoProduto, StatusContaCliente statusContaCliente, int tempoDeContaEmAnos) { decimal precoAposDesconto = 0; switch (statusContaCliente) { case StatusContaCliente.NaoRegistrado: precoAposDesconto = precoProduto; break; case StatusContaCliente.ClienteComum: // 2- Calcula o desconto por status de conta de cliente precoAposDesconto = (precoProduto - (Constantes.DESCONTO_CLIENTE_COMUM * precoProduto)); // 1- Calcula o desconto por fidelidade precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteEspecial: // 2- Calcula o desconto por status de conta de cliente precoAposDesconto = (precoProduto - (Constantes.DESCONTO_CLIENTE_ESPECIAL * precoProduto)); // 1- Calcula o desconto por fidelidade precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; case StatusContaCliente.ClienteVip: // 2- Calcula o desconto por status de conta de cliente precoAposDesconto = (precoProduto - (Constantes.DESCONTO_CLIENTE_VIP * precoProduto)); // 1- Calcula o desconto por fidelidade precoAposDesconto = _descontoFidelidade.AplicaDescontoFidelidade(precoProduto, tempoDeContaEmAnos); break; default: throw new NotImplementedException(); } return(precoAposDesconto); }