Example #1
0
        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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        private void comboBoxCurrency_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Update Transfers
            TransferHistory th = sortableListViewTransfers.Tag as TransferHistory;

            if (null != th)
            {
                ShowTransfers(th);
            }
        }
Example #4
0
        public override void OnSaveData()
        {
            base.OnSaveData();

            if (managers.loading.currentMode == AppMode.Game)
            {
                var data = TransferHistory.SaveData();
                this.SaveData(data.Id, data);
            }
        }
Example #5
0
        protected override object DoImpl()
        {
            //if (_pl == null)
            {
                ReportProgress(10, "Getting complete transfer history");
                _th = _thb.GetTransfers((uint)TeamId);
                ReportProgress(100, "done");
            }

            return(_th);
        }
Example #6
0
        private void AdjustCurrency(TransferHistory th)
        {
            Currency newCurrency = comboBoxCurrency.SelectedItem as Currency;

            if (newCurrency != null)
            {
                foreach (Transfer t in th.SafeEnum())
                {
                    t.Price.ConvertTo(newCurrency);
                }
            }
        }
Example #7
0
        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);
        }
Example #8
0
 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));
     }
 }
Example #9
0
        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); });
        }
Example #10
0
        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");
            }
        }
Example #11
0
        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"));
        }
Example #12
0
        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);
        }
Example #13
0
        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);
            }
        }
Example #15
0
        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);
                }
            }
        }
Example #16
0
    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;
    }
Example #17
0
    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;
    }
Example #18
0
        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
        }
Example #19
0
 public void ShowTransfers(TransferHistory th)
 {
     AdjustCurrency(th);
     FillList(th);
     FillChart(th);
 }
Example #20
0
 private void SaveTransaction(TransferHistory transfer)
 {
     _dataConnection.GetTransfers().Add(transfer);
 }
Example #21
0
        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();
        }
Example #22
0
        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();
        }
Example #23
0
        /// <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);
        }
Example #24
0
        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);
        }