public void Bid(Guid auctionId, Guid memberId, decimal amount, DateTime dateOfBid) { var auction = _auctions.FindBy(auctionId); var bidAmount = new Money(amount); var offer = new Bid(memberId, bidAmount, dateOfBid); auction.PlaceBidFor(offer, dateOfBid); }
public WinningBid DetermineWinningBidIncrement(Bid newbid) { if (this.CanMeetOrExceedBidIncrement(this.MaximumBid) && this.CanMeetOrExceedBidIncrement(newbid.MaximumBid)) { return DetermineWinnerFromProxyBidding(this, newbid); } else if (this.CanMeetOrExceedBidIncrement(newbid.MaximumBid)) { return CreateNewBid(newbid.Bidder, CurrentAuctionPrice.BidIncrement(), newbid.MaximumBid, newbid.TimeOfOffer); } else return this; }
public void PlaceBidFor(Bid bid, DateTime currentTime) { if (StillInProgress(currentTime)) { if (IsFirstBid()) RegisterFirst(bid); else if (BidderIsIncreasingMaximumBid(bid)) WinningBid = WinningBid.RaiseMaximumBidTo(bid.MaximumBid); else if (WinningBid.CanMeetOrExceedBidIncrement(bid.MaximumBid)) { Place(WinningBid.DetermineWinningBidIncrement(bid)); } } }
private WinningBid DetermineWinnerFromProxyBidding(WinningBid winningBid, Bid newbid) { WinningBid nextIncrement; if (winningBid.MaxBidCanBeExceededBy(newbid.MaximumBid)) { nextIncrement = CreateNewBid(this.Bidder, this.MaximumBid, this.MaximumBid, this.TimeOfBid); if (nextIncrement.CanMeetOrExceedBidIncrement(newbid.MaximumBid)) return CreateNewBid(newbid.Bidder, nextIncrement.CurrentAuctionPrice.BidIncrement(), newbid.MaximumBid, newbid.TimeOfOffer); else return CreateNewBid(newbid.Bidder, newbid.MaximumBid, newbid.MaximumBid, newbid.TimeOfOffer); } else { nextIncrement = CreateNewBid(newbid.Bidder, newbid.MaximumBid, newbid.MaximumBid, newbid.TimeOfOffer); if (nextIncrement.CanMeetOrExceedBidIncrement(winningBid.MaximumBid)) return CreateNewBid(winningBid.Bidder, nextIncrement.CurrentAuctionPrice.BidIncrement(), winningBid.MaximumBid, winningBid.TimeOfBid); else return CreateNewBid(winningBid.Bidder, winningBid.MaximumBid, winningBid.MaximumBid, winningBid.TimeOfBid); } }
private void RegisterFirst(Bid bid) { if (IsFirstBid() && bid.MaximumBid.IsGreaterThanOrEqualTo(StartingPrice)) Place(new WinningBid(bid.Bidder, bid.MaximumBid, StartingPrice, bid.TimeOfOffer)); }
private bool BidderIsIncreasingMaximumBid(Bid bid) { return WinningBid.WasMadeBy(bid.Bidder) && bid.MaximumBid.IsGreaterThan(WinningBid.MaximumBid); }
private bool BidderIsIncreasingMaximumBid(Bid bid) { return(WinningBid.WasMadeBy(bid.Bidder) && bid.MaximumBid.IsGreaterThan(WinningBid.MaximumBid)); }