Example #1
0
        public void UpdateVending()
        {
            Dictionary <string, VendingItem> products = fileRepo.GetAll();

            checkInventory = new CheckInventory(fileRepo);

            string input;

            Console.Write("Which item do you want to buy(ex. A1, A2...): ");
            input = Console.ReadLine().ToUpper();
            if (products.ContainsKey(input))                                  //Checks to make sure the option that the item selected is in the dictionary
            {
                bool inStock = checkInventory.CheckAvailableInventory(input); //check inventory
                if (inStock)
                {
                    bool enoughMoney = CalculateChange.SubtractMoney(input, fileRepo);//subtract money
                    if (!enoughMoney)
                    {
                        Console.Clear();
                        Console.Write("Curent Money: ");
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.Write("$" + CalculateChange.Money);
                        Console.WriteLine("\nYou do not have enough money.");
                        Console.ResetColor();
                        Console.ReadKey();
                    }
                    else
                    {
                        products[input].Inventory -= 1;

                        fileRepo.UpdateVending(products);

                        CalculateChange.GetQuartDimeNickPen(); //return change
                    }
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Product not in stock.");
                    Console.ResetColor();
                    Console.ReadKey();
                }
            }
            else
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("That is not a valid option. Going back to Menu.");
                Console.ResetColor();
                Console.ReadKey();
            }
        }
        private void Process()
        {
            var saleAmount   = saleTextBox.Text;
            var cashTendered = cashTextBox.Text;

            decimal sale;
            decimal cash;
            var     isSaleMoney = decimal.TryParse(saleAmount, out sale);
            var     isCashMoney = decimal.TryParse(cashTendered, out cash);

            var msg      = "";
            var cssClass = "";

            if (!(isSaleMoney && isCashMoney))
            {
                msg      = "AmountOfSale and CustomerGaveMe are both required. \r\nYou must enter dollars AND cents including the dot.";
                cssClass = "text-danger";
                FormatResultLabel(msg, cssClass);
            }
            else if (sale > 500.00M)
            {
                msg      = sale + " as Amount of Sale is OVER 500.00.";
                cssClass = "text-danger";
                FormatResultLabel(msg, cssClass);
                saleTextBox.Text = "";
            }
            else if (cash < sale)
            {
                msg      = "Excuse me, but you haven't given me enough money to cover the sale.";
                cssClass = "text-danger";
                FormatResultLabel(msg, cssClass);
                ClearMoneyLabelsAndImages();
            }
            else
            {
                var curChange = (cash - sale);

                _excludedList = GetExludedList();
                var excludeList = MoneyManager.CreateExcludeList(_excludedList.ToArray());
                var change      = CalculateChange.GetCorrectChange(curChange, excludeList);

                resultLabel.Text     = String.Format("Change: {0:C}", (sale - cash));
                resultLabel.CssClass = "text-success";

                SetMoneyDisplay(change, excludeList);
            }
        }
Example #3
0
        public void PullFromTillWithZeroCentsAndZeroDenominationTest()
        {
            var cents = 0M;
            var denominationToPull = 0M;
            var result             = decimal.Truncate(cents / denominationToPull);
            var remainder          = cents % denominationToPull;
            var expected           = new TillResult
            {
                Result    = result,
                Remainder = remainder,
            };

            var actual = CalculateChange.PullDenominationFromTill(cents, denominationToPull);

            Assert.AreEqual(expected.Result, actual.Result);
            Assert.AreEqual(expected.Remainder, actual.Remainder);
        }
Example #4
0
        public void Should_ReturnInsufficientCoins_When_CoinsAreMissingForTheBestChange()
        {
            IBox box = new Box(new Coin[6]
            {
                new Coin(CoinEnumerator.Coin1.ToByte(), 1),
                new Coin(CoinEnumerator.Coin5.ToByte(), 2),
                new Coin(CoinEnumerator.Coin10.ToByte(), 2),
                new Coin(CoinEnumerator.Coin25.ToByte(), 0),
                new Coin(CoinEnumerator.Coin50.ToByte(), 0),
                new Coin(CoinEnumerator.Coin100.ToByte(), 0)
            });

            int cents = 30;

            var calculateChange = new CalculateChange(box);
            var change          = calculateChange.Calculate(cents);

            change.MessageCode.Should().Be(nameof(AppConsts.InsufficientCoins));
        }
Example #5
0
        public void ExchangeMoney_Should_Be_Satisfied_By_92Cents()
        {
            IBox box = new Box(new Coin[6]
            {
                new Coin(CoinEnumerator.Coin1.ToByte(), 2),
                new Coin(CoinEnumerator.Coin5.ToByte(), 3),
                new Coin(CoinEnumerator.Coin10.ToByte(), 4),
                new Coin(CoinEnumerator.Coin25.ToByte(), 5),
                new Coin(CoinEnumerator.Coin50.ToByte(), 6),
                new Coin(CoinEnumerator.Coin100.ToByte(), 7)
            });

            int cents = 92;

            var calculateChange = new CalculateChange(box);
            var change          = calculateChange.Calculate(cents);

            change.Coins.Should().Be($"0{_decimalSeparator}01 | 0{_decimalSeparator}01 | 0{_decimalSeparator}05 " +
                                     $"| 0{_decimalSeparator}10 | 0{_decimalSeparator}25 | 0{_decimalSeparator}50");
        }
Example #6
0
        public void GetCorrectChangeWithOneHundredThirtySixDollarsAndSixteenCents_ExcludeHundredAndTwentyAndTenAndFiveAndOneAndDimeAndNickelTest()
        {
            var cents      = 136.16M;
            var resultList = new List <TillMoney>();
            var moneyList  = _moneyList;

            foreach (var denom in moneyList)
            {
                var tillMoney = new TillMoney {
                    Name = denom.Name, PluralName = denom.PluralName
                };
                switch (denom.Name)
                {
                case Enums.CurrencyType.Hundred:
                    break;

                case Enums.CurrencyType.Twenty:
                    break;

                case Enums.CurrencyType.Ten:
                    break;

                case Enums.CurrencyType.Five:
                    break;

                case Enums.CurrencyType.One:
                    break;

                case Enums.CurrencyType.Dime:
                    break;

                case Enums.CurrencyType.Nickel:
                    break;

                case Enums.CurrencyType.Penny:
                    tillMoney.Val = 13616;
                    resultList.Add(tillMoney);
                    break;
                }
            }
            var expected = resultList;

            var excludeList = MoneyManager.CreateExcludeList(
                new CurrencyHundred(),
                new CurrencyTwenty(),
                new CurrencyTen(),
                new CurrencyFive(),
                new CurrencyOne(),
                new CurrencyDime(),
                new CurrencyNickel()
                );
            var actual = CalculateChange.GetCorrectChange(cents, excludeList);

            Assert.AreEqual(expected.Count, actual.Count);

            for (int i = 0; i < actual.Count; i++)
            {
                Assert.AreEqual(expected[i].Name, actual[i].Name);
                Assert.AreEqual(expected[i].Val, actual[i].Val);
                Assert.AreEqual(expected[i].PluralName, actual[i].PluralName);
            }
        }
Example #7
0
        public void GetCorrectChangeWithOneHundredSixDollarsAndFortyEightCents_EmptyExcludeListTest()
        {
            var cents      = 106.48M;
            var resultList = new List <TillMoney>();
            var moneyList  = _moneyList;

            foreach (var denom in moneyList)
            {
                var tillMoney = new TillMoney {
                    Name = denom.Name, PluralName = denom.PluralName
                };
                switch (denom.Name)
                {
                case Enums.CurrencyType.Hundred:
                    tillMoney.Val = 1;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.Twenty:
                    tillMoney.Val = 0;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.Ten:
                    tillMoney.Val = 0;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.Five:
                    tillMoney.Val = 1;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.One:
                    tillMoney.Val = 1;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.Dime:
                    tillMoney.Val = 4;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.Nickel:
                    tillMoney.Val = 1;
                    resultList.Add(tillMoney);
                    break;

                case Enums.CurrencyType.Penny:
                    tillMoney.Val = 3;
                    resultList.Add(tillMoney);
                    break;
                }
            }
            var expected = resultList;

            var actual = CalculateChange.GetCorrectChange(cents, MoneyManager.CreateExcludeList());

            Assert.AreEqual(expected.Count, actual.Count);

            for (int i = 0; i < actual.Count; i++)
            {
                Assert.AreEqual(expected[i].Name, actual[i].Name);
                Assert.AreEqual(expected[i].Val, actual[i].Val);
                Assert.AreEqual(expected[i].PluralName, actual[i].PluralName);
            }
        }