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);
        }
예제 #2
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #9
0
        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);
        }