public List <TransferHistory> GetTransferHistory(int userID) { List <TransferHistory> historyList = new List <TransferHistory>(); List <Transfer> tranferData = transferDAO.TransferHistory(userID); foreach (Transfer rawInfo in tranferData) { TransferHistory history = new TransferHistory(); history.Amount = rawInfo.Amount; history.TransferID = rawInfo.ID; if (userID == rawInfo.FromUserID) { history.Username = GetUserName(rawInfo.ToUserID); history.Direction = "To"; } else { history.Username = GetUserName(rawInfo.ToUserID); history.Direction = "From"; } historyList.Add(history); } return(historyList); }
/// <summary> /// Get amount of transfer the user can do /// </summary> /// <param name="transfer"></param> /// <param name="transfers"></param> /// <param name="limit"></param> /// <returns></returns> private decimal GetLimitForThisTransfer(TransferHistory transfer, IList <TransferHistory> transfers, decimal limit) { var transferLimit = transfers.Where(t => t.UserId == transfer.UserId && t.CurrencyCode == transfer.CurrencyCode && t.Date.Month == transfer.Date.Month).Sum(t => t.ExchangeAmount); return(limit - transferLimit); }
private void comboBoxCurrency_SelectedIndexChanged(object sender, EventArgs e) { //Update Transfers TransferHistory th = sortableListViewTransfers.Tag as TransferHistory; if (null != th) { ShowTransfers(th); } }
public override void OnSaveData() { base.OnSaveData(); if (managers.loading.currentMode == AppMode.Game) { var data = TransferHistory.SaveData(); this.SaveData(data.Id, data); } }
protected override object DoImpl() { //if (_pl == null) { ReportProgress(10, "Getting complete transfer history"); _th = _thb.GetTransfers((uint)TeamId); ReportProgress(100, "done"); } return(_th); }
private void AdjustCurrency(TransferHistory th) { Currency newCurrency = comboBoxCurrency.SelectedItem as Currency; if (newCurrency != null) { foreach (Transfer t in th.SafeEnum()) { t.Price.ConvertTo(newCurrency); } } }
private decimal GetLimitForThisTransfer(TransferHistory transfer) { var limit = _transferLimits.FirstOrDefault(t => t.UserId == transfer.UserId && t.CurrencyCode == transfer.CurrencyCode && t.Date.Month == transfer.Date.Month); if (limit == null) { throw new System.Exception("This user cannot perform a transfer, limit is not defined"); } return(limit.Limit); }
public IActionResult Post([FromBody] TransferHistory transfer) { try { transfer.Date = DateTime.Now; var result = _validateTransfer.MakeTransaction(transfer).ToString(); return(Ok($"{result} {transfer.CurrencyCode}")); } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public void UserHasNoLimitTest(string currency, decimal amount) { var transfer = new TransferHistory() { UserId = 1, CurrencyCode = currency, ExchangeAmount = amount, Date = DateTime.Now }; var data = GetDataMock(); var currencyService = GetCurrencyServiceMock(currency); var transactionService = new TransferService(GetListOfLimits(), data.Object, currencyService.Object); Assert.Throws <Exception>(() => { var amountExchanged = transactionService.MakeTransaction(transfer); }); }
public decimal MakeTransaction(TransferHistory transfer) { var exchangeAmount = GetExchangeAmount(transfer.ExchangeAmount, transfer.CurrencyCode); var listOfPreviousTransactions = _dataConnection.GetTransfers().GetAll().ToList(); if (IsUnderTheLimit(exchangeAmount, transfer, listOfPreviousTransactions)) { transfer.ExchangeAmount = exchangeAmount; SaveTransaction(transfer); return(transfer.ExchangeAmount); } else { throw new Exception("This user can not perform this transfer. This purchase is over the limit for this user"); } }
public async Task <ActionResult> CreateTransfer(TransferHistory model) { if (ModelState.IsValid) { // Scrape matches from both teams. await _program.GetTeamDetails(model.NewTeamId); await _program.GetTeamDetails(model.OldTeamId); model.NewTeamName = _db.Team.FirstOrDefault(k => k.TeamId == model.NewTeamId).TeamName; model.OldTeamName = _db.Team.FirstOrDefault(k => k.TeamId == model.OldTeamId).TeamName; _db.TransferHistory.Add(model); _db.SaveChanges(); } return(RedirectToAction("TransferHistory")); }
public void TransactionSuccesWithPreviousDataTest(string currency, decimal amount, decimal expectedAmountExchanged) { var transfer = new TransferHistory() { UserId = 12, CurrencyCode = currency, ExchangeAmount = amount, Date = DateTime.Now }; var data = GetDataMock(); var currencyService = GetCurrencyServiceMock(currency); var transactionService = new TransferService(GetListOfLimits(), data.Object, currencyService.Object); var amountExchanged = transactionService.MakeTransaction(transfer); Assert.Equal(expectedAmountExchanged, amountExchanged); }
private bool IsUnderTheLimit(decimal exchangeAmount, TransferHistory transfer, IList <TransferHistory> transfers) { bool result = false; decimal limit = GetLimitForThisTransfer(transfer); if (TransferIsDoable(limit, exchangeAmount)) { if (TransferByUserDoesNotExist(transfer, transfers)) { result = true; } else { var transferLimit = GetLimitForThisTransfer(transfer, transfers, limit); result = TransferIsDoable(transferLimit, exchangeAmount); } } return(result); }
// 解析转会记录,缓存到PlayerEntity中 public void Process(ITakerReptile.Dto.BaseData data) { BRData bd = data as BRData; PlayerTransferParam param = bd.Param as PlayerTransferParam; CheckSetHistoryParam(param); string txt; if (!HtmlDecode(bd.Html, out txt)) { return; } var xml = new XmlHelper(txt); // 解析成各个数据块 var cdataFlag = "//c"; var cdata = xml.GetValue(cdataFlag); if (string.IsNullOrEmpty(cdata)) { return; } var root = GetHtmlRoot(cdata); var tbody = root.SelectSingleNode("//tbody"); var player = PlayerEntityManager.AddOrGetCacheEntity <PlayerEntity>(param.PlayerId); foreach (var node in tbody.ChildNodes) { TransferHistory th = new TransferHistory(); th.TeamId = RegexGetStr(node.ChildNodes[0].InnerHtml, "teamid','", "',"); th.DuringTime = node.ChildNodes[1].InnerText; th.Description = node.ChildNodes[2].InnerText; player.CompareSetTransferHistory(th); } }
public override void OnLoadData() { base.OnLoadData(); if (managers.loading.currentMode == AppMode.Game) { try { // Always try to load the latest version if possible. if (TransferHistoryv1.TryLoadData(this, out TransferHistoryv1 data)) { TransferHistory.LoadData(data); } else { TransferHistory.Clear(); } } catch (Exception ex) { Logger.LogException(ex); } } }
public int WriteTransferHistory(TransferHistory history) { int ret = 0; try { string sql = "insert into TransferHistory values(@FromAccountNum, @ToAccountNum, GETDATE(), @Amount, @CheckingAccountNumber)"; List<DbParameter> PList = new List<DbParameter>(); SqlParameter p1 = new SqlParameter("@FromAccountNum", SqlDbType.VarChar, 50); SqlParameter p2 = new SqlParameter("@ToAccountNum", SqlDbType.VarChar, 50); //SqlParameter p3 = new SqlParameter("@Date", SqlDbType.DateTime); SqlParameter p4 = new SqlParameter("@Amount", SqlDbType.Decimal); SqlParameter p5 = new SqlParameter("@CheckingAccountNumber", SqlDbType.VarChar, 50); p1.Value = history.FromAccountNum; p2.Value = history.ToAccountNum; //p3.Value = history.TransferDate; p4.Value = history.Amount; p5.Value = history.CheckingAccountNumber; PList.Add(p1); PList.Add(p2); //PList.Add(p3); PList.Add(p4); PList.Add(p5); ret = _dac.InsOrUpdOrDel(sql, PList); } catch(Exception ex) { throw ex; } return ret; }
public bool TransferChkToSav(string chkAcctNum, string savAcctNum, double amt) { // to do //string CONNSTR = ConfigurationManager.ConnectionStrings["BANKDBCONN"].ConnectionString; //bool res = false; //SqlConnection conn = new SqlConnection(CONNSTR); //using (IDbTransaction tran = conn.BeginTransaction()) //{ // try // { // // your code // tran.Commit(); // } // catch // { // tran.Rollback(); // throw; // } //} try { using (TransactionScope tran = new TransactionScope()) { if (amt <= 0) throw new Exception("Transfer amt should be bigger than 0."); double chkbalance = GetCheckingBalance(chkAcctNum); if(chkbalance >= amt) { UpdateAccountingBalance(chkAcctNum, chkbalance - amt); double savbalance = GetSavingBalance(savAcctNum); UpdateSavingBalance(savAcctNum, savbalance + amt); TransferHistory history = new TransferHistory(); history.FromAccountNum = chkAcctNum; history.ToAccountNum = savAcctNum; history.Amount = (decimal)amt; history.CheckingAccountNumber = chkAcctNum; WriteTransferHistory(history); } else { throw new Exception("no enogh balance."); } tran.Complete(); } } catch (Exception ex) { throw ex; } return true; }
private void FillChart(TransferHistory th) { #if !MONO chartBySeason.Series.Clear(); chartBySeason.ResetAutoValues(); if (th == null || th.Team == null) { return; } chartBySeason.SuspendLayout(); // attach the shown data to the chart chartBySeason.Tag = th; Series boughtSeries = new Series("Bought") { ChartType = SeriesChartType.Column }; Series soldSeries = new Series("Sold") { ChartType = SeriesChartType.Column }; int startSeason = new HtTime(th.From).Season; int endSeason = new HtTime(th.To).Season; for (int season = startSeason; season <= endSeason; ++season) { IEnumerable <Transfer> transfersOfSeason = th.Transfers.SafeEnum().Where(t => new HtTime(t.Date).Season == season); IEnumerable <Transfer> buys = transfersOfSeason.Where(t => t.Buyer != null && t.Buyer.ID == th.Team.ID); IEnumerable <Transfer> sales = transfersOfSeason.Where(t => t.Seller != null && t.Seller.ID == th.Team.ID); int noBuys = buys.Count(); int noSales = sales.Count(); Money amountBuys = new Money(0); Money amountSales = new Money(0); // ORIGINAL IMPLEMENTATION: //buys.ForEach(t => amountBuys += t.Price); //sales.ForEach(t => amountSales += t.Price); // REASON FOR CHANGE: // The transfer price should be right-hand-side to avoid showing the initial currency of amountBuys/Sales buys.ForEach(t => amountBuys = t.Price + amountBuys); sales.ForEach(t => amountSales = t.Price + amountSales); StringBuilder toolBuilder = new StringBuilder("Season ").Append(season).AppendLine() .Append("Number of buys: ").Append(noBuys).AppendLine() .Append("Amount of buys: ").AppendLine(amountBuys.ToString()) .Append("Number of sales: ").Append(noSales).AppendLine() .Append("Amount of sales: ").AppendLine(amountSales.ToString()); boughtSeries.Points.Add(new DataPoint(season, amountBuys.Amount) { ToolTip = toolBuilder.ToString() }); soldSeries.Points.Add(new DataPoint(season, amountSales.Amount) { ToolTip = toolBuilder.ToString() }); } chartBySeason.Series.Add(boughtSeries); chartBySeason.Series.Add(soldSeries); chartBySeason.ResumeLayout(); #endif }
public void ShowTransfers(TransferHistory th) { AdjustCurrency(th); FillList(th); FillChart(th); }
private void SaveTransaction(TransferHistory transfer) { _dataConnection.GetTransfers().Add(transfer); }
private void FillList(TransferHistory th) { sortableListViewTransfers.Items.Clear(); if (th == null || th.Team == null) { return; } sortableListViewTransfers.SuspendLayout(); //attach the shown data to the list sortableListViewTransfers.Tag = th; int teamId = th.Team.ID; foreach (Transfer t in th.Transfers.SafeEnum()) { // TODO: handle players which are "bought" and "sold" correctly if (t.Seller.ID == t.Buyer.ID) { continue; } ListViewItem item = new ListViewItem(t.Date.ToShortDateString()); item.Tag = t.Date; item.SubItems[0].Tag = item.Tag; object value = 0; value = new HtTime(t.Date); item.SubItems.Add(new ListViewItem.ListViewSubItem(item, (value != null) ? value.ToString() : "-") { Tag = value }); value = (teamId == t.Buyer.ID) ? "bought" : "sold"; item.SubItems.Add(new ListViewItem.ListViewSubItem(item, value.ToString()) { Tag = value }); value = t.Player; item.SubItems.Add(new ListViewItem.ListViewSubItem(item, (value != null) ? value.ToString() : "-") { Tag = value }); value = (teamId == t.Buyer.ID) ? t.Seller : t.Buyer; item.SubItems.Add(new ListViewItem.ListViewSubItem(item, (value != null) ? value.ToString() : "-") { Tag = value }); value = t.Price; item.SubItems.Add(new ListViewItem.ListViewSubItem(item, (value != null) ? value.ToString() : "-") { Tag = value }); sortableListViewTransfers.Items.Add(item); } sortableListViewTransfers.ResumeLayout(); }
private void UpdateMatches(int teamId, DateTime?startDate, DateTime?endDate) { //_pwd.Show(); BackgroundWorker bgw = new BackgroundWorker(); ITask getMatchesTask; if (startDate != null && endDate != null) { getMatchesTask = new PleaseWaitTaskDecorator( new GetMatchesTask(teamId, startDate, endDate, Environment.DataBridgeFactory.MatchArchiveBridge, Environment.DataBridgeFactory.MatchDetailsBridge)); } else { getMatchesTask = new PleaseWaitTaskDecorator( new GetMatchesTask(teamId, Environment.DataBridgeFactory.TeamDetailsBridge, Environment.DataBridgeFactory.MatchArchiveBridge, Environment.DataBridgeFactory.MatchDetailsBridge)); } ITask getPlayersTask = new PleaseWaitTaskDecorator( new GetPlayersTask(teamId, Environment.DataBridgeFactory.PlayersBridge)); ITask getTransfersTask = new PleaseWaitTaskDecorator( new GetTransfersTask(teamId, Environment.DataBridgeFactory.TransfersBridge)); bgw.DoWork += (s, e1) => { getMatchesTask.Do(); getPlayersTask.Do(); getTransfersTask.Do(); }; bgw.RunWorkerCompleted += (s, e2) => { //_pwd.Hide(); if (e2.Error != null) { MessageBox.Show(e2.Error.ToString()); } else { SaveDo(() => { _matches = ((IEnumerable <MatchDetails>)getMatchesTask.Result).SafeEnum(); _players = ((IEnumerable <Player>)getPlayersTask.Result).SafeEnum(); _transfers = (TransferHistory)getTransfersTask.Result; UpdateAll(this, new EventArgs()); }); } }; bgw.RunWorkerAsync(); }
/// <summary> /// check if the user has not make a transfer yet /// </summary> /// <param name="transfer"></param> /// <param name="transfers"></param> /// <returns></returns> private bool TransferByUserDoesNotExist(TransferHistory transfer, IList <TransferHistory> transfers) { var exist = transfers.Any(t => t.UserId == transfer.UserId); return(!exist); }
public async Task <BankUserUpdateModel> Transfer( int fromUserId, int toUserId, decimal amount, byte[] fromAccountTimestamp, byte[] toAccountTimestamp) { var updateStateModel = new BankUserUpdateModel(); if (amount <= 0) { updateStateModel.ErrorList.Add("TranferAmount", "The amount must be larger than 0."); updateStateModel.ErrorList.Add(string.Empty, "Unable to save changes."); return(updateStateModel); } var accountToTransfer = await this.GetAccountById(fromUserId); if (accountToTransfer == null) { updateStateModel.ErrorList.Add(string.Empty, "Unable to save changes. The transfer account was deleted by another user."); return(updateStateModel); } if (accountToTransfer.Balance - amount < 0) { updateStateModel.ErrorList.Add("TranferAmount", "The withdraw amount must be larger or equals the balance amount."); updateStateModel.ErrorList.Add(string.Empty, "Unable to save changes."); return(updateStateModel); } var accountToReceive = await this.GetAccountById(toUserId); if (accountToReceive == null) { updateStateModel.ErrorList.Add(string.Empty, "Unable to save changes. The received account was deleted by another user."); return(updateStateModel); } try { using (var transaction = _context.Database.BeginTransaction()) { // create TransferHistory record var transferHistoryRecord = new TransferHistory { FromUserID = accountToTransfer.ID, ToUserID = accountToReceive.ID, CreatedDate = DateTime.Now, Amount = amount }; _context.TranferHistories.Add(transferHistoryRecord); // transfer the amount into Account accountToTransfer.Balance = accountToTransfer.Balance - amount; accountToReceive.Balance = accountToReceive.Balance + amount; // set the Timestamp value for the retrieved Account. This Timestamp value will be compared to detech concurrence issue _context.Entry(accountToTransfer).Property("Timestamp").OriginalValue = fromAccountTimestamp; _context.Entry(accountToReceive).Property("Timestamp").OriginalValue = toAccountTimestamp; await _context.SaveChangesAsync(); transaction.Commit(); } } catch (DbUpdateConcurrencyException ex) { updateStateModel.ErrorList.Add(string.Empty, "The transfer is failed."); foreach (var exceptionEntry in ex.Entries) { var userId = ((BankUser)exceptionEntry.Entity).ID; // Using a NoTracking query means we get the entity but it is not tracked by the context // and will not be merged with existing entities in the context. var modifiedEntityInDatabase = await _context.BankUsers .AsNoTracking() .SingleAsync(d => d.ID == userId); var latestEntityInDb = _context.Entry(modifiedEntityInDatabase); // get the latest Balance amount of the Account from Database var latestBalance = (Decimal)latestEntityInDb.Property("Balance").CurrentValue; if (userId == accountToTransfer.ID && latestBalance != accountToTransfer.Balance) { updateStateModel.ErrorList.Add("FromUser.Balance", $"Current value: {latestBalance:c}"); } if (userId == accountToReceive.ID && latestBalance != accountToReceive.Balance) { updateStateModel.ErrorList.Add("ToUser.Balance", $"Current value: {latestBalance:c}"); } } } return(updateStateModel); }