示例#1
0
        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);                                
         }                      
示例#2
0
 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;
 }
示例#3
0
 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));
         }                                                   
     }     
 }
示例#4
0
        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);
            }
        }
示例#5
0
 private void RegisterFirst(Bid bid)
 {
     if (IsFirstBid() && bid.MaximumBid.IsGreaterThanOrEqualTo(StartingPrice)) 
         Place(new WinningBid(bid.Bidder, bid.MaximumBid, StartingPrice, bid.TimeOfOffer));            
 }
示例#6
0
 private bool BidderIsIncreasingMaximumBid(Bid bid)
 {
     return WinningBid.WasMadeBy(bid.Bidder) && bid.MaximumBid.IsGreaterThan(WinningBid.MaximumBid);
 }
示例#7
0
 private bool BidderIsIncreasingMaximumBid(Bid bid)
 {
     return(WinningBid.WasMadeBy(bid.Bidder) && bid.MaximumBid.IsGreaterThan(WinningBid.MaximumBid));
 }