public JsonResult ExchangeFunds(int totalChange)
        {
            CashierDTO cashier = CoinCashierBL.BalanceBL.LoadBalance(1);

            try
            {
                List <CoinChangeDTO> coinChanges = CoinCashierBL.ExchangeBL.PerformSale(cashier, totalChange);

                return(Json(new
                {
                    resultCode = 0, // no error
                    exchangeResult = new ExchangeResultDTO()
                    {
                        resultChange = coinChanges,
                        cashier = cashier
                    }
                }));
            }
            catch (CannotProcessExchange)
            {
                return(Json(new
                {
                    resultCode = 1, // can't make change
                }));
            }
        }
Exemple #2
0
        public async Task <IActionResult> Connect([FromForm] CashierDTO cashierDTO)
        {
            var address = new IpAddress(cashierDTO.Ip, cashierDTO.Port);

            var connectCommand = new CashierConnectCommand(address, cashierDTO.StoredAmount);
            var cachierId      = await messageHandler.SendAsync(connectCommand, CancellationToken.None);

            return(StatusCode((int)HttpStatusCode.Created, cachierId));
        }
        public static void ResetCashier(int idCashier)
        {
            CashierDTO cashier = CoinCashierDAL.CashierDAL.GetCashier(idCashier);

            foreach (CoinBalanceDTO coinBalance in cashier.coinBalanceDTOs)
            {
                coinBalance.quantity = 0;
            }

            CoinCashierDAL.CoinBalanceDAL.UpdateCashierBalance(idCashier, cashier.coinBalanceDTOs);
        }
        public static CashierDTO GetCashier(int idCashier)
        {
            CashierDTO cashier = null;

            var dbConnection = SQLiteAccess.CreateConnection();

            dbConnection.Open();

            using (var dbCommand = new System.Data.SQLite.SQLiteCommand(dbConnection))
            {
                dbCommand.CommandText = @"
                    SELECT ID_CASHIER, DESCRIPTION
                        FROM CASHIER
                        WHERE ID_CASHIER = @ID_CASHIER";
                dbCommand.Parameters.AddWithValue("@ID_CASHIER", idCashier);

                /*
                 * IF YOU ARE GETTING AN EXCEPTION HERE IT'S PROBABLY BECAUSE I COULDN'T CONFIGURE THE DATABASE PROPERLY
                 * IT IS THE FILE "CoinCashierDB.db" IN CoinCashierDAL THAT IS NOT BEING COPYED TO WHERE VISUAL STUDIO RUN THE APPLICATION
                 * (the "WebSiteCoinCashier\bin" folder)
                 */

                using (var reader = dbCommand.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        cashier = new CashierDTO()
                        {
                            idCashier   = Convert.ToInt32(reader["ID_CASHIER"]),
                            description = reader["DESCRIPTION"].ToString()
                        };
                    }
                }
            }

            if (cashier != null)
            {
                cashier.coinBalanceDTOs = CoinBalanceDAL.GetCoinBalance(idCashier, dbConnection);
            }

            dbConnection.Close();
            dbConnection.Dispose();

            return(cashier);
        }
Exemple #5
0
        public static List <CoinChangeDTO> PerformSale(CashierDTO cashier, int totalChange)
        {
            cashier.coinBalanceDTOs = cashier.coinBalanceDTOs.OrderByDescending(it => it.coinValue).ToList();

            List <CoinBalanceDTO> newCoinBalances = null;

            if (PerformExchange(cashier.coinBalanceDTOs, totalChange, Int32.MaxValue, out newCoinBalances) == false)
            {
                throw new CannotProcessExchange();
            }

            List <CoinChangeDTO> change = CalculateChange(cashier, newCoinBalances);

            CoinCashierDAL.CoinBalanceDAL.UpdateCashierBalance(cashier.idCashier, newCoinBalances.Where(it => change.Any(ite => ite.coinValue == it.coinValue)).ToList());

            cashier.coinBalanceDTOs = newCoinBalances;

            return(change);
        }
Exemple #6
0
        private static List <CoinChangeDTO> CalculateChange(CashierDTO cashier, List <CoinBalanceDTO> newCoinBalances)
        {
            List <CoinChangeDTO> change = new List <CoinChangeDTO>();

            foreach (CoinBalanceDTO cashierCoinBalance in cashier.coinBalanceDTOs)
            {
                CoinBalanceDTO newCoinBalance = newCoinBalances.Single(it => it.idCoinBalance.Value == cashierCoinBalance.idCoinBalance.Value);

                if (newCoinBalance.quantity != cashierCoinBalance.quantity)
                {
                    change.Add(new CoinChangeDTO()
                    {
                        coinValue = cashierCoinBalance.coinValue,
                        quantity  = (cashierCoinBalance.quantity - newCoinBalance.quantity)
                    });
                }
            }

            return(change);
        }
        public static void RemoveFunds(int idCashier, int coinValue, int quantity)
        {
            CashierDTO cashier = CoinCashierDAL.CashierDAL.GetCashier(idCashier);

            CoinBalanceDTO coinBalance = cashier.coinBalanceDTOs.SingleOrDefault(it => it.coinValue == coinValue);

            if (coinBalance == null || coinBalance.idCoinBalance.HasValue == false)
            {
                throw new InvalidCoinValue();
            }
            else if (coinBalance.quantity < quantity)
            {
                throw new NotEnoughFunds();
            }
            else
            {
                coinBalance.quantity -= quantity;

                CoinCashierDAL.CoinBalanceDAL.UpdateCashierBalance(idCashier, coinBalance);
            }
        }
        public static void AddFunds(int idCashier, int coinValue, int quantity)
        {
            CashierDTO cashier = CoinCashierDAL.CashierDAL.GetCashier(idCashier);

            CoinBalanceDTO coinBalance = cashier.coinBalanceDTOs.SingleOrDefault(it => it.coinValue == coinValue);

            if (coinBalance == null || coinBalance.idCoinBalance.HasValue == false)
            {
                CoinCashierDAL.CoinBalanceDAL.InsertCoinBalance(idCashier, new CoinBalanceDTO()
                {
                    coinValue = coinValue,
                    quantity  = quantity
                });
            }
            else
            {
                coinBalance.quantity += quantity;

                CoinCashierDAL.CoinBalanceDAL.UpdateCoinBalance(idCashier, coinBalance);
            }
        }
        public ActionResult ExchangeResult(int totalChange)
        {
            CashierDTO cashier = CoinCashierBL.BalanceBL.LoadBalance(1);

            try
            {
                List <CoinChangeDTO> coinChanges = CoinCashierBL.ExchangeBL.PerformSale(cashier, totalChange);

                return(View(new ExchangeResultDTO()
                {
                    exchangeSuccessful = true,
                    resultChange = coinChanges,
                    cashier = cashier
                }));
            }
            catch (CannotProcessExchange)
            {
                return(View(new ExchangeResultDTO()
                {
                    exchangeSuccessful = false
                }));
            }
        }
        public ActionResult Balance()
        {
            CashierDTO cashier = CoinCashierBL.BalanceBL.LoadBalance(1);

            return(View(cashier));
        }