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++; }
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++; } }
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++; }
public void UpdateCoffeeShopState(ICoffeeShopState coffeeShopState, Customer customer, Drink drink) { _customerCoffeeStrategy?.UpdateCoffeeShopState(coffeeShopState, customer, drink); }