Exemplo n.º 1
0
        public override void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink)
        {
            base.UpdateCoffeeShopState(coffeeShopState, customer, drink);

            coffeeShopState.IncomeFromDrinks += drink.BasePrice;
            coffeeShopState.CoffeeSales.General++;
        }
        public string GenerateSummaryReport(ICoffeeShopState state)
        {
            var initialBeanCount = int.TryParse(ConfigurationManager.AppSettings["InitialBeanCount"], out var beanCount) ? beanCount : 1000;
            var profit           = state.IncomeFromDrinks - state.CostOfDrinks;

            var sb = new StringBuilder("Coffee Shop Summary")
                     .AppendLine(Environment.NewLine)

                     .AppendLine("Total customers: " + state.CoffeeSales.TotalSales)
                     .AppendLine("General sales: ".Indent() + state.CoffeeSales.General)
                     .AppendLine("Loyalty member sales: ".Indent() + state.CoffeeSales.Loyalty)
                     .AppendLine("Discount sales: ".Indent() + state.CoffeeSales.Discount)
                     .AppendLine("Employee Complimentary: ".Indent() + state.CoffeeSales.Complimentary + Environment.NewLine)

                     .AppendLine("Total revenue from drinks: " + state.IncomeFromDrinks)
                     .AppendLine("Total costs from drinks: " + state.CostOfDrinks)

                     .AppendLine(profit > 0
                    ? "Coffee Shop generating profit of: " + profit + Environment.NewLine
                    : "Coffee Shop losing money of: " + profit + Environment.NewLine)

                     .AppendLine("Total loyalty points given away: " + state.TotalLoyaltyPointsAccrued)
                     .AppendLine("Total loyalty points redeemed: " + state.TotalLoyaltyPointsRedeemed + Environment.NewLine)

                     .AppendLine("Beans used: " + (initialBeanCount - state.BeanCount))
                     .AppendLine("Beans remaining: " + state.BeanCount + Environment.NewLine)

                     .Append(profit > 20 && state.BeanCount > (initialBeanCount * 25) / 100
                    ? "Coffee Shop will open tomorrow"
                    : "Coffee Shop will not open tomorrow");

            return(sb.ToString());
        }
        public override void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink)
        {
            base.UpdateCoffeeShopState(coffeeShopState, customer, drink);

            coffeeShopState.IncomeFromDrinks += drink.BasePrice * 75 / 100;
            coffeeShopState.CoffeeSales.Discount++;
        }
Exemplo n.º 4
0
        public CoffeeShop(ICoffeeShopReportGenerator coffeeShopReportGenerator,
                          ICoffeeStrategyFactory coffeeStrategyFactory,
                          ICoffeeShopState coffeeShopState)
        {
            _coffeeShopReportGenerator = coffeeShopReportGenerator;
            _coffeeStrategyFactory     = coffeeStrategyFactory;
            _coffeeShopState           = coffeeShopState;

            Customers = new List <Customer>();
        }
        public virtual void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink)
        {
            if (coffeeShopState.BeanCount < drink.BeansPerCap)
            {
                throw new OutOfCoffeeBeansException(drink.Title, customer.Name);
            }

            coffeeShopState.CostOfDrinks += drink.BaseCost;
            coffeeShopState.BeanCount    -= drink.BeansPerCap;
        }
        public override void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink)
        {
            base.UpdateCoffeeShopState(coffeeShopState, customer, drink);

            var profit = coffeeShopState.IncomeFromDrinks - coffeeShopState.CostOfDrinks;

            if (profit >= 50 && customer.NumberOfComplimentaryDrinks > 0)
            {
                customer.NumberOfComplimentaryDrinks--;
                coffeeShopState.CoffeeSales.Complimentary++;
            }
            else
            {
                coffeeShopState.IncomeFromDrinks += drink.BasePrice;
                coffeeShopState.CoffeeSales.General++;
            }
        }
Exemplo n.º 7
0
        public override void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink)
        {
            base.UpdateCoffeeShopState(coffeeShopState, customer, drink);

            if (customer.IsUsingLoyaltyPoints)
            {
                var loyaltyPointsRedeemed = Convert.ToInt32(Math.Ceiling(drink.BasePrice));
                customer.LoyaltyPoints -= loyaltyPointsRedeemed;
                coffeeShopState.TotalLoyaltyPointsRedeemed += loyaltyPointsRedeemed;
            }
            else
            {
                coffeeShopState.TotalLoyaltyPointsAccrued += drink.LoyaltyPointsGained;
                coffeeShopState.IncomeFromDrinks          += drink.BasePrice;
            }

            coffeeShopState.CoffeeSales.Loyalty++;
        }
Exemplo n.º 8
0
 public void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink)
 {
     _customerCoffeeStrategy?.UpdateCoffeeShopState(coffeeShopState, customer, drink);
 }