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 })); } }
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); }
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); }
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)); }