//AddBidLogCurrent public BidLogCurrent AddBidLogCurrent(long auction_id, int quantity, long user_id, bool isproxy, decimal amount, decimal maxamount, bool isproxyraise, string IP) { BidLogCurrent log = new BidLogCurrent(); try { dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = quantity; log.User_ID = user_id; log.IsProxy = isproxy; log.MaxBid = maxamount; log.Amount = amount; log.IP = String.IsNullOrEmpty(IP) ? Consts.UsersIPAddress : IP; log.Auction_ID = auction_id; log.DateMade = DateTime.Now; log.IsProxyRaise = isproxyraise; SubmitChages(); } catch (Exception ex) { Logger.LogException(ex); return(null); } return(log); }
//ResolveProxyBiddingSituation public void ResolveProxyBiddingSituation(long auction_id, long user_id, bool isproxy, BiddingObject placedBid, BidCurrent lastTop, decimal aprice, List <BidLogCurrent> newbidlogs) { if (placedBid.Bid == null || placedBid.BidLog == null || lastTop == null) { return; } //List<BidCurrent> bids = dataContext.BidCurrents.Where(B => B.Auction_ID == auction_id && B.ID != placedBid.Bid.ID && B.User_ID != user_id).OrderBy(B3 => B3.DateMade).OrderByDescending(B2 => B2.MaxBid).OrderByDescending(B1 => B1.Amount).ToList(); List <BidCurrent> bids = dataContext.spBid_BidsExceptCurrent(auction_id, placedBid.Bid.ID, user_id).ToList(); if (bids.Count() == 0) { return; } decimal price = (lastTop == null) ? aprice : lastTop.Amount; decimal Increment = Consts.GetIncrement(price); BidCurrent queryBid = bids.FirstOrDefault(); if (placedBid.Bid.IsProxy && placedBid.Bid.Amount <= (queryBid.MaxBid + Consts.ErrorRangeAmount)) { if (queryBid.MaxBid + Increment >= (placedBid.Bid.MaxBid + Consts.ErrorRangeAmount)) { //Can't overBid placedBid.BidLog.Amount = placedBid.Bid.Amount = placedBid.Bid.MaxBid; } else { Increment = Consts.GetIncrement(queryBid.MaxBid); if (Increment + queryBid.MaxBid + Consts.ErrorRangeAmount > placedBid.Bid.MaxBid) { placedBid.BidLog.Amount = placedBid.Bid.Amount = placedBid.Bid.MaxBid; } else if (placedBid.Bid.User_ID != lastTop.User_ID) { placedBid.BidLog.Amount = placedBid.Bid.Amount = queryBid.MaxBid + Increment; } } } foreach (BidCurrent runner in bids) { if (!runner.IsProxy) { continue; } if ((runner.MaxBid == placedBid.Bid.MaxBid) || (Math.Abs(runner.MaxBid - placedBid.Bid.MaxBid) < Consts.ErrorRangeAmount)) { runner.Amount = placedBid.Bid.MaxBid; } else { Increment = Consts.GetIncrement(placedBid.Bid.MaxBid); if (runner.MaxBid >= placedBid.Bid.MaxBid + Increment + Consts.ErrorRangeAmount) { runner.Amount = placedBid.Bid.MaxBid + Increment; } else { if (runner.Amount != runner.MaxBid) { BidLogCurrent log = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = runner.Quantity; log.User_ID = runner.User_ID; log.IsProxy = runner.IsProxy; log.MaxBid = runner.MaxBid; log.Amount = runner.MaxBid; log.IP = runner.IP; log.Auction_ID = runner.Auction_ID; log.DateMade = DateTime.Now; log.IsProxyRaise = false; newbidlogs.Add(log); } runner.Amount = runner.MaxBid; } } } SubmitChages(); }
//AddBidLogCurrent public BidLogCurrent AddBidLogCurrent(long auction_id, int quantity, long user_id, bool isproxy, decimal amount, decimal maxamount, bool isproxyraise, string IP) { BidLogCurrent log = new BidLogCurrent(); try { dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = quantity; log.User_ID = user_id; log.IsProxy = isproxy; log.MaxBid = maxamount; log.Amount = amount; log.IP = String.IsNullOrEmpty(IP) ? Consts.UsersIPAddress : IP; log.Auction_ID = auction_id; log.DateMade = DateTime.Now; log.IsProxyRaise = isproxyraise; SubmitChages(); } catch (Exception ex) { Logger.LogException(ex); return null; } return log; }
//PlaceSingleBid public BiddingObject PlaceSingleBid(long auction_id, bool isproxy, decimal amount, long user_id, int quantity, bool isproxyraise, decimal aprice, BidCurrent prevUsersBid, BidCurrent lastTop) { BidCurrent newBid; bool isHighBidder = (lastTop != null) ? lastTop.User_ID == user_id : false; amount = (lastTop != null && ((long)amount == (long)lastTop.MaxBid || Math.Abs(lastTop.MaxBid - amount) < Consts.ErrorRangeAmount)) ? lastTop.MaxBid : amount; if (prevUsersBid != null) { newBid = prevUsersBid; } else { newBid = new BidCurrent(); dataContext.BidCurrents.InsertOnSubmit(newBid); } if (!isproxy) { newBid.Amount = amount; if (newBid.MaxBid > amount) { newBid.IsProxy = true; } else { newBid.MaxBid = amount; newBid.IsProxy = false; } } else { decimal price = (lastTop == null) ? aprice : lastTop.Amount; newBid.MaxBid = (newBid.MaxBid < amount) ? amount : newBid.MaxBid; newBid.Amount = (price + Consts.GetIncrement(price) <= newBid.MaxBid) ? price : newBid.MaxBid; newBid.Amount += (lastTop != null && !isHighBidder && newBid.Amount + Consts.GetIncrement(price) <= newBid.MaxBid) ? Consts.GetIncrement(price) : 0; newBid.IsProxy = true; } newBid.Auction_ID = auction_id; newBid.User_ID = user_id; newBid.Quantity = quantity; newBid.DateMade = DateTime.Now; newBid.IP = Consts.UsersIPAddress; newBid.IsActive = true; BidLogCurrent log = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = quantity; log.User_ID = newBid.User_ID; log.IsProxy = isproxy; log.MaxBid = newBid.MaxBid; log.Amount = newBid.Amount; log.IP = newBid.IP; log.Auction_ID = newBid.Auction_ID; log.DateMade = DateTime.Now; log.IsProxyRaise = isproxyraise; SubmitChages(); return(new BiddingObject { Bid = newBid, BidLog = log }); }
//PlaceSingleBid public BiddingObject PlaceSingleBid(long auction_id, bool isproxy, decimal amount, long user_id, int quantity, bool isproxyraise, decimal aprice, BidCurrent prevUsersBid, BidCurrent lastTop) { BidCurrent newBid; bool isHighBidder = (lastTop != null) ? lastTop.User_ID == user_id : false; amount = (lastTop != null && ((long)amount == (long)lastTop.MaxBid || Math.Abs(lastTop.MaxBid - amount) < Consts.ErrorRangeAmount)) ? lastTop.MaxBid : amount; if (prevUsersBid != null) newBid = prevUsersBid; else { newBid = new BidCurrent(); dataContext.BidCurrents.InsertOnSubmit(newBid); } if (!isproxy) { newBid.Amount = amount; if (newBid.MaxBid > amount) newBid.IsProxy = true; else { newBid.MaxBid = amount; newBid.IsProxy = false; } } else { decimal price = (lastTop == null) ? aprice : lastTop.Amount; newBid.MaxBid = (newBid.MaxBid < amount) ? amount : newBid.MaxBid; newBid.Amount = (price + Consts.GetIncrement(price) <= newBid.MaxBid) ? price : newBid.MaxBid; newBid.Amount += (lastTop != null && !isHighBidder && newBid.Amount + Consts.GetIncrement(price) <= newBid.MaxBid) ? Consts.GetIncrement(price) : 0; newBid.IsProxy = true; } newBid.Auction_ID = auction_id; newBid.User_ID = user_id; newBid.Quantity = quantity; newBid.DateMade = DateTime.Now; newBid.IP = Consts.UsersIPAddress; newBid.IsActive = true; BidLogCurrent log = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = quantity; log.User_ID = newBid.User_ID; log.IsProxy = isproxy; log.MaxBid = newBid.MaxBid; log.Amount = newBid.Amount; log.IP = newBid.IP; log.Auction_ID = newBid.Auction_ID; log.DateMade = DateTime.Now; log.IsProxyRaise = isproxyraise; SubmitChages(); return new BiddingObject { Bid = newBid, BidLog = log }; }
//ResolveProxyBiddingSituation public void ResolveProxyBiddingSituation(long auction_id, long user_id, bool isproxy, BiddingObject placedBid, BidCurrent lastTop, decimal aprice, List<BidLogCurrent> newbidlogs) { if (placedBid.Bid == null || placedBid.BidLog == null || lastTop == null) return; //List<BidCurrent> bids = dataContext.BidCurrents.Where(B => B.Auction_ID == auction_id && B.ID != placedBid.Bid.ID && B.User_ID != user_id).OrderBy(B3 => B3.DateMade).OrderByDescending(B2 => B2.MaxBid).OrderByDescending(B1 => B1.Amount).ToList(); List<BidCurrent> bids = dataContext.spBid_BidsExceptCurrent(auction_id, placedBid.Bid.ID, user_id).ToList(); if (bids.Count() == 0) return; decimal price = (lastTop == null) ? aprice : lastTop.Amount; decimal Increment = Consts.GetIncrement(price); BidCurrent queryBid = bids.FirstOrDefault(); if (placedBid.Bid.IsProxy && placedBid.Bid.Amount <= (queryBid.MaxBid+ Consts.ErrorRangeAmount)) { if (queryBid.MaxBid + Increment >= (placedBid.Bid.MaxBid+ Consts.ErrorRangeAmount)) { //Can't overBid placedBid.BidLog.Amount = placedBid.Bid.Amount = placedBid.Bid.MaxBid; } else { Increment = Consts.GetIncrement(queryBid.MaxBid); if (Increment + queryBid.MaxBid + Consts.ErrorRangeAmount > placedBid.Bid.MaxBid) placedBid.BidLog.Amount = placedBid.Bid.Amount = placedBid.Bid.MaxBid; else if (placedBid.Bid.User_ID != lastTop.User_ID) placedBid.BidLog.Amount = placedBid.Bid.Amount = queryBid.MaxBid + Increment; } } foreach (BidCurrent runner in bids) { if (!runner.IsProxy) continue; if ((runner.MaxBid == placedBid.Bid.MaxBid) || (Math.Abs(runner.MaxBid - placedBid.Bid.MaxBid) < Consts.ErrorRangeAmount)) runner.Amount = placedBid.Bid.MaxBid; else { Increment = Consts.GetIncrement(placedBid.Bid.MaxBid); if (runner.MaxBid >= placedBid.Bid.MaxBid + Increment + Consts.ErrorRangeAmount) runner.Amount = placedBid.Bid.MaxBid + Increment; else { if (runner.Amount != runner.MaxBid) { BidLogCurrent log = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = runner.Quantity; log.User_ID = runner.User_ID; log.IsProxy = runner.IsProxy; log.MaxBid = runner.MaxBid; log.Amount = runner.MaxBid; log.IP = runner.IP; log.Auction_ID = runner.Auction_ID; log.DateMade = DateTime.Now; log.IsProxyRaise = false; newbidlogs.Add(log); } runner.Amount = runner.MaxBid; } } } SubmitChages(); }
//ResolveProxyBiddingSituation private void ResolveProxyBiddingSituation(long auction_id, long user_id, bool isproxy, BiddingObject placedBid, BidCurrent lastTop, decimal aprice, List<BidLogCurrent> newbidlogs) { if (placedBid.Bid == null || placedBid.BidLog == null || lastTop == null) { return; } var bids = dataContext.spBid_BidsExceptCurrent(auction_id, placedBid.Bid.ID, user_id).ToList(); if (bids.Count() == 0) { return; } var price = (lastTop == null) ? aprice : lastTop.Amount; var Increment = Consts.GetIncrement(price); var queryBid = bids.FirstOrDefault(); if (placedBid.Bid.IsProxy && placedBid.Bid.Amount <= (queryBid.MaxBid + Consts.ErrorRangeAmount)) { if (queryBid.MaxBid + Increment >= (placedBid.Bid.MaxBid + Consts.ErrorRangeAmount)) { //Can't overBid placedBid.BidLog.Amount = placedBid.Bid.Amount = placedBid.Bid.MaxBid; } else { Increment = Consts.GetIncrement(queryBid.MaxBid); if (Increment + queryBid.MaxBid + Consts.ErrorRangeAmount > placedBid.Bid.MaxBid) { placedBid.BidLog.Amount = placedBid.Bid.Amount = placedBid.Bid.MaxBid; } else if (placedBid.Bid.User_ID != lastTop.User_ID) { placedBid.BidLog.Amount = placedBid.Bid.Amount = queryBid.MaxBid + Increment; } } } foreach (var runner in bids) { if (!runner.IsProxy) { continue; } if ((runner.MaxBid == placedBid.Bid.MaxBid) || (Math.Abs(runner.MaxBid - placedBid.Bid.MaxBid) < Consts.ErrorRangeAmount)) { runner.Amount = placedBid.Bid.MaxBid; } else { Increment = Consts.GetIncrement(placedBid.Bid.MaxBid); if (runner.MaxBid >= placedBid.Bid.MaxBid + Increment + Consts.ErrorRangeAmount) { runner.Amount = placedBid.Bid.MaxBid + Increment; } else { if (runner.Amount != runner.MaxBid) { var log = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = runner.Quantity; log.User_ID = runner.User_ID; log.IsProxy = runner.IsProxy; log.MaxBid = runner.MaxBid; log.Amount = runner.MaxBid; log.IP = runner.IP; log.Auction_ID = runner.Auction_ID; log.DateMade = DateTime.Now; log.IsProxyRaise = false; newbidlogs.Add(log); } runner.Amount = runner.MaxBid; } } } GeneralRepository.SubmitChanges(dataContext); }
//AddBidLogCurrent private BidLogCurrent AddBidLogCurrent(long auction_id, int quantity, long user_id, bool isproxy, decimal amount, decimal maxamount, bool isproxyraise, string IP) { var log = new BidLogCurrent(); try { dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = quantity; log.User_ID = user_id; log.IsProxy = isproxy; log.MaxBid = maxamount; log.Amount = amount; log.IP = String.IsNullOrEmpty(IP) ? Consts.UsersIPAddress : IP; log.Auction_ID = auction_id; log.DateMade = DateTime.Now; log.IsProxyRaise = isproxyraise; GeneralRepository.SubmitChanges(dataContext); } catch { return null; } return log; }
//UpdateBid public JsonExecuteResult UpdateBid(long auction_id, long UserID, decimal Amount, decimal MaxBid, int Quantity, DateTime DateMade, bool IsProxy, string Comments, string IP, bool IsProxyRaise, long bid_id) { try { var auction = dataContext.Auctions.SingleOrDefault(A => A.ID == auction_id); if (auction == null) { throw new Exception("The auction doesn't exist."); } if (!auction.Event.IsCurrent && auction.Event.CloseStep == 2) { throw new Exception("You can't add/edit this bid. The auction is not open."); } var bd = dataContext.BidLogCurrents.FirstOrDefault(B => B.ID == bid_id); if (bd == null) { bd = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(bd); } bd.Auction_ID = auction_id; bd.Amount = Amount; bd.DateMade = DateMade; bd.IP = IP; bd.IsProxy = auction.AuctionType_ID == (byte) Consts.AuctionType.Normal ? IsProxy : false; bd.IsProxyRaise = auction.AuctionType_ID == (byte) Consts.AuctionType.Normal ? IsProxyRaise : false; bd.MaxBid = MaxBid; bd.Quantity = Quantity; bd.User_ID = UserID; bd.IsAutoBid = false; GeneralRepository.SubmitChanges(dataContext); } catch (Exception ex) { return new JsonExecuteResult(JsonExecuteResultTypes.ERROR, ex.Message); } return new JsonExecuteResult(JsonExecuteResultTypes.SUCCESS); }
//PlaceMultipleBids public List <BidCurrent> PlaceMultipleBids(long auction_id, bool isproxy, decimal amount, long user_id, int quantity) { dataContext.CommandTimeout = 600000; List <BidCurrent> newBids = dataContext.spBid_UserTopBid(user_id, auction_id).ToList(); List <int> newItems = new List <int>(1); int count = newBids.Count; if (newBids.Count < quantity) { for (int i = count; i < quantity; i++) { newBids.Add(new BidCurrent()); newItems.Add(i); } } else if (newBids.Count > quantity) { for (int i = count - 1; i >= quantity; i--) { newBids[i].Comments = String.Format("(-/-)"); newBids[i].Quantity = 0; newBids[i].MaxBid = 0; newBids[i].IsActive = false; } newBids.RemoveRange(quantity, newBids.Count - quantity); } count = 0; BidLogCurrent log; foreach (BidCurrent bid in newBids) { bid.IsProxy = isproxy; bid.Amount = (bid.Amount <= amount) ? amount : bid.Amount; bid.MaxBid = amount * quantity; bid.Auction_ID = auction_id; bid.User_ID = user_id; bid.Quantity = quantity; bid.DateMade = DateTime.Now; bid.IsActive = true; bid.IP = Consts.UsersIPAddress; bid.ItemNumber = ++count; bid.Comments = String.Format("({0}/{1})", bid.ItemNumber, quantity); log = new BidLogCurrent(); dataContext.BidLogCurrents.InsertOnSubmit(log); log.Quantity = bid.Quantity; log.User_ID = bid.User_ID; log.IsProxy = bid.IsProxy; log.MaxBid = bid.MaxBid; log.Amount = bid.Amount; log.IP = bid.IP; log.Auction_ID = bid.Auction_ID; log.DateMade = DateTime.Now; log.ItemNumber = bid.ItemNumber; log.Comments = bid.Comments; } foreach (int t in newItems) { dataContext.BidCurrents.InsertOnSubmit(newBids[t]); } SubmitChages(); return(newBids); }
//AddWinnerToAuction public JsonExecuteResult AddWinnerToAuction(long auction_id, long user_id) { try { Auction auction = GetAuction(auction_id); if (auction.Status != (byte)Consts.AuctionStatus.Closed) throw new Exception("This lot is not closed."); if (auction.Event.CloseStep != 1) throw new Exception("You can't use this functionality to add the winner on this lot."); if (auction.Bids.Any()) throw new Exception("You can't add the winner for this lot, because this lot has already a winner"); User user = dataContext.Users.SingleOrDefault(U => U.ID == user_id); if (user == null) throw new Exception("This user doesn't exists"); if (user.UserStatus_ID != (byte)Consts.UserStatus.Active) throw new Exception("This user can't be a winner because his status is not active."); if (user.UserType_ID != (byte)Consts.UserTypes.Buyer && user.UserType_ID != (byte)Consts.UserTypes.SellerBuyer) throw new Exception("This user can't be a winner because his isn't a buyer."); Bid bid = new Bid(); bid.Amount = bid.MaxBid = auction.Price; bid.Auction_ID = auction_id; bid.DateMade = auction.EndDate.AddMinutes(-1); bid.IP = Consts.UsersIPAddress; bid.IsProxy = false; bid.Quantity = auction.Quantity; bid.User_ID = user_id; dataContext.Bids.InsertOnSubmit(bid); BidCurrent bidcur = new BidCurrent(); bidcur.Amount = bidcur.MaxBid = auction.Price; bidcur.Auction_ID = auction_id; bidcur.DateMade = auction.EndDate.AddMinutes(-1); bidcur.IP = Consts.UsersIPAddress; bidcur.IsProxy = false; bidcur.Quantity = auction.Quantity; bidcur.User_ID = user_id; bidcur.IsActive = true; dataContext.BidCurrents.InsertOnSubmit(bidcur); BidLog blog = new BidLog { Amount = bid.Amount, Auction_ID = bid.Auction_ID, DateMade = bid.DateMade, IP = bid.IP, IsProxy = bid.IsProxy, IsProxyRaise = false, MaxBid = bid.MaxBid, Quantity = bid.Quantity, User_ID = bid.User_ID }; dataContext.BidLogs.InsertOnSubmit(blog); BidLogCurrent blogcur = new BidLogCurrent { Amount = bid.Amount, Auction_ID = bid.Auction_ID, DateMade = bid.DateMade, IP = bid.IP, IsProxy = bid.IsProxy, IsProxyRaise = false, MaxBid = bid.MaxBid, Quantity = bid.Quantity, User_ID = bid.User_ID }; dataContext.BidLogCurrents.InsertOnSubmit(blogcur); BidWatchCurrent bw = new BidWatchCurrent { Auction_ID = auction_id, User_ID = user_id }; dataContext.BidWatchCurrents.InsertOnSubmit(bw); EventRegistration er = dataContext.spSelect_EventRegistration(auction.Event_ID, user_id).SingleOrDefault(); if (er == null) dataContext.EventRegistrations.InsertOnSubmit(new EventRegistration { Event_ID = auction.Event_ID, User_ID = user_id }); GeneralRepository.SubmitChanges(dataContext); UpdateAuctionBiddingResult(bid.Auction_ID, bid.User_ID, bid.Amount, bid.MaxBid); try { System.Net.WebClient client = new System.Net.WebClient(); client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); client.OpenRead(Consts.CacheClearFrontendIP + Consts.FrontEndClearARPMethod + "/" + auction_id.ToString()); } catch (Exception ex) { Logger.LogException("[" + Consts.CacheClearFrontendIP + Consts.FrontEndClearARPMethod + "/" + auction_id.ToString() + "]", ex); } } catch (Exception ex) { return new JsonExecuteResult(JsonExecuteResultTypes.ERROR, ex.Message); } return new JsonExecuteResult(JsonExecuteResultTypes.SUCCESS); }