private WinningBid CalculateNextBid(WinningBid winningbid, Offer offer) { WinningBid bid; if (winningbid.CanBeExceededBy(offer.MaximumBid)) { bid = new WinningBid(offer.Bidder, offer.MaximumBid, winningbid.CurrentAuctionPrice.BidIncrement(), offer.TimeOfOffer); } else { bid = new WinningBid(offer.Bidder, offer.MaximumBid, offer.MaximumBid, offer.TimeOfOffer); } return(bid); }
public void PlaceBidFor(Offer offer, DateTime currentTime) { if (StillInProgress(currentTime)) { if (FirstOffer()) { PlaceABidForTheFirst(offer); } else if (BidderIsIncreasingMaximumBidToNew(offer)) { WinningBid = WinningBid.RaiseMaximumBidTo(offer.MaximumBid); } else if (WinningBid.CanBeExceededBy(offer.MaximumBid)) { var newBids = new AutomaticBidder().GenerateNextSequenceOfBidsAfter(offer, WinningBid); foreach (var bid in newBids) { Place(bid); } } } }