public async Task <IActionResult> Edit(int id, [Bind("ID,FwdDate,BankName,AuctionBidID,FwdRate,AmountBid,CouponAmount,WinAmount")] WinResults winResults)
        {
            if (id != winResults.ID)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(winResults);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!WinResultsExists(winResults.ID))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["AuctionBidID"] = new SelectList(_context.AuctionBids, "ID", "ID", winResults.AuctionBidID);
            return(View(winResults));
        }
        public async Task <IActionResult> Create([Bind("ID,FwdDate,BankName,AuctionBidID,FwdRate,AmountBid,CouponAmount,WinAmount")] WinResults winResults)
        {
            if (ModelState.IsValid)
            {
                _context.Add(winResults);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["AuctionBidID"] = new SelectList(_context.AuctionBids, "ID", "ID", winResults.AuctionBidID);
            return(View(winResults));
        }
Exemple #3
0
        // Convert DataTable rows to Object
        public WinResults ConvertRowToWinResult(DataRow dr)
        {
            WinResults winResult = new WinResults();

            winResult.AuctionBidID = Convert.ToInt16(dr["ID"]);
            winResult.FwdDate      = Convert.ToDateTime(dr["FwdDate"]);
            winResult.CouponAmount = Convert.ToDecimal(dr["CouponAmount"]);
            winResult.BankName     = Convert.ToString(dr["BankName"]);
            winResult.AmountBid    = Convert.ToDecimal(dr["AmountBid"]);
            winResult.FwdRate      = Convert.ToDouble(dr["FwdRate"]);
            winResult.WinAmount    = Convert.ToDecimal(dr["awarded_amount"]);
            winResult.BatchRef     = Convert.ToString(dr["BatchRef"]);

            return(winResult);
        }
Exemple #4
0
        public async Task <IActionResult> PerAuctionRun(BankPercViewModel data)
        {
            var testTotal = new Double();

            foreach (var item in data.perbank)
            {
                testTotal += Convert.ToDouble(item.Percent);
            }
            //Get a list of dates in this Batch
            List <DateTime> res = (from a in _context.AuctionBids
                                   where a.BatchRef.ToString() == data.bidBatch
                                   orderby a.FwdDate
                                   select a.FwdDate).Distinct().ToList();

            // Delete wins before running auction again
            _context.WinResults.Where(w => w.BatchRef == data.bidBatch).ToList().ForEach(p => _context.WinResults.Remove(p));

            if (testTotal == 100)
            {
                foreach (var date in res)
                {
                    IQueryable <AuctionBid> bids = from j in _context.AuctionBids
                                                   where j.FwdDate == date
                                                   select j;
                    DataTable dTable = new DataTable();
                    dTable.Columns.Add("ID", typeof(int));
                    dTable.Columns.Add("FwdDate", typeof(DateTime));
                    dTable.Columns.Add("CouponAmount", typeof(decimal));
                    dTable.Columns.Add("BankName", typeof(string));
                    dTable.Columns.Add("AmountBid", typeof(decimal));
                    dTable.Columns.Add("FwdRate", typeof(double));
                    dTable.Columns.Add("awarded_amount", typeof(decimal));
                    dTable.Columns.Add("BatchRef", typeof(string));
                    foreach (var row in bids)
                    {
                        Decimal ratio = new Decimal();
                        ratio = Convert.ToDecimal(data.perbank.Where(x => x.BankName == row.BankName).Select(x => x.Percent).First());
                        DataRow dRow = dTable.NewRow();
                        dRow[0] = row.ID;
                        dRow[1] = row.FwdDate;
                        dRow[2] = row.CouponAmount;
                        dRow[3] = row.BankName;
                        dRow[4] = row.AmountBid;
                        dRow[5] = row.FwdRate;
                        dRow[6] = row.CouponAmount * ratio / 100;
                        dRow[7] = row.BatchRef;

                        dTable.Rows.Add(dRow);
                    }

                    // Convert Date wins to object and write to entity
                    foreach (DataRow row in dTable.Rows)
                    {
                        WinResults convertedObject = ConvertRowToWinResult(row);
                        if (convertedObject.WinAmount != 0)
                        {
                            _context.WinResults.Add(convertedObject);
                        }
                    }
                    await _context.SaveChangesAsync();
                }
                return(RedirectToAction("Index", "WinResults"));
            }
            else
            {
                ViewData["Message"] = "The total of the percentages is more or less than 100.";
                return(View());
            }
        }
Exemple #5
0
        // Run Auction for a Batch
        public async Task <IActionResult> RunAuction(string bidBatch, string auctionType)
        {
            //Get a list of dates in this Batch
            List <DateTime> res = (from a in _context.AuctionBids
                                   where a.BatchRef.ToString() == bidBatch
                                   orderby a.FwdDate
                                   select a.FwdDate).Distinct().ToList();

            // Delete wins before running auction again
            _context.WinResults.Where(x => x.BatchRef == bidBatch).ForEach(p => _context.WinResults.Remove(p));

            if (auctionType == "bestrate")
            {
                foreach (var date in res)
                {
                    // Direct SQL to pick winners for a date
                    string connectionString = "Server=JEROME-SBOOK\\SQLEXPRESS01;Database=MathaRx;Trusted_Connection=True;MultipleActiveResultSets=true;";
                    string sqlQry           = "select ID, FwdDate, CouponAmount, BankName, AmountBid, FwdRate, BatchRef, case when remainder < 0 then remainder_1 else " +
                                              "AmountBid end awarded_amount from (select *, LAG(remainder) over(order by FwdRate desc) remainder_1 " +
                                              "from (select ID, FwdDate, CouponAmount, BankName, AmountBid, FwdRate, BatchRef, SUM(AmountBid) over (order by FwdRate desc) rtotal, " +
                                              "CouponAmount - SUM(AmountBid) over (order by FwdRate desc) as remainder from AuctionBid where FwdDate=@fwdDate and BatchRef=@batchRef) tb) a where case when remainder < 0 then remainder_1 else AmountBid end >= 0";
                    using (SqlConnection conn = new SqlConnection(connectionString))
                    {
                        using (SqlCommand comm = new SqlCommand(null, conn))
                        {
                            conn.Open();
                            comm.CommandText = sqlQry;
                            SqlParameter param1 = comm.Parameters.Add("@fwdDate", SqlDbType.DateTime2, 8);
                            SqlParameter param2 = comm.Parameters.Add("@batchRef", SqlDbType.NVarChar, 100);

                            param1.Value = date;
                            param2.Value = bidBatch;

                            comm.Prepare();
                            SqlDataReader reader = comm.ExecuteReader();
                            DataTable     dt     = new DataTable();

                            dt.Load(reader);
                            conn.Close();

                            // Convert Date wins to object and write to entity
                            foreach (DataRow row in dt.Rows)
                            {
                                WinResults convertedObject = ConvertRowToWinResult(row);
                                if (convertedObject.WinAmount != 0)
                                {
                                    _context.WinResults.Add(convertedObject);
                                }
                            }
                            await _context.SaveChangesAsync();
                        }
                    }
                }
            }
            else if (auctionType == "waverage")
            {
                foreach (var date in res)
                {
                    IQueryable <AuctionBid> bids = from j in _context.AuctionBids
                                                   where j.FwdDate == date
                                                   select j;
                    var totalAmt = bids.Select(x => x.AmountBid).Sum();
                    var bidArray = bids.ToArray();

                    DataTable dTable = new DataTable();
                    dTable.Columns.Add("ID", typeof(int));
                    dTable.Columns.Add("FwdDate", typeof(DateTime));
                    dTable.Columns.Add("CouponAmount", typeof(decimal));
                    dTable.Columns.Add("BankName", typeof(string));
                    dTable.Columns.Add("AmountBid", typeof(decimal));
                    dTable.Columns.Add("FwdRate", typeof(double));
                    dTable.Columns.Add("awarded_amount", typeof(decimal));
                    dTable.Columns.Add("BatchRef", typeof(string));

                    foreach (var row in bids)
                    {
                        DataRow dRow = dTable.NewRow();
                        dRow[0] = row.ID;
                        dRow[1] = row.FwdDate;
                        dRow[2] = row.CouponAmount;
                        dRow[3] = row.BankName;
                        dRow[4] = row.AmountBid;
                        dRow[5] = row.FwdRate;
                        dRow[6] = row.AmountBid / totalAmt * row.CouponAmount;
                        dRow[7] = row.BatchRef;

                        dTable.Rows.Add(dRow);
                    }

                    // Convert Date wins to object and write to entity
                    foreach (DataRow row in dTable.Rows)
                    {
                        WinResults convertedObject = ConvertRowToWinResult(row);
                        if (convertedObject.WinAmount != 0)
                        {
                            _context.WinResults.Add(convertedObject);
                        }
                    }
                    await _context.SaveChangesAsync();
                }
            }
            else if (auctionType == "percentage")
            {
                List <string> banks = (from d in _context.AuctionBids
                                       select d.BankName).Distinct().ToList();

                var bankQ = _context.AuctionBids.Select(u => u.BankName).Distinct().ToList();

                BankPercViewModel bankVM = new BankPercViewModel();
                bankVM.ID = 1;
                foreach (var item in bankQ)
                {
                    bankVM.perbank.Add(new BankPercent {
                        BankName = item, Percent = "", ID = 1
                    });
                }

                bankVM.bidBatch = bidBatch;


                return(View(bankVM));
            }
            return(RedirectToAction("Index", "WinResults"));
        }