def post(self, request, *args, **kwargs): auction = Item.objects.get(pk=request.POST.get('auction')) if auction.status != 'AC': messages.info(request, "The auction is not active.", 'danger') return HttpResponseRedirect( reverse('auction-details', kwargs={'pk': auction.pk})) if request.user == auction.creator: messages.info(request, "Sellers can't bid their own auctions.", 'danger') return HttpResponseRedirect( reverse('auction-details', kwargs={'pk': auction.pk})) bid = Bid() bid.user = request.user bid.auction = auction bid_amount = float(request.POST.get('price')) try: bid_amount = Decimal(bid_amount).quantize(Decimal('0.01')) except (DecimalException, InvalidOperation): messages.info(request, 'Invalid value for a bid.', 'danger') return HttpResponseRedirect( reverse('auction-details', kwargs={'pk': auction.pk})) top_bid = auction.bids.order_by('price').last() if top_bid is None and bid_amount > auction.price or top_bid and bid_amount > top_bid.price: bid.price = bid_amount else: messages.info(request, 'Place a higher bid than the current top bid.', 'danger') return HttpResponseRedirect( reverse('auction-details', kwargs={'pk': auction.pk})) bid.save() mail.send_mail("A new bid has been placed.", "A new greater bid has been succesfully placed!", '*****@*****.**', [auction.creator]) if top_bid.user: mail.send_mail("Your bid has been replaced.", "Your bid has beend replaced by a higher bid!", '*****@*****.**', [top_bid.user]) messages.success(request, 'Bid placed succesfully.') return HttpResponseRedirect( reverse('auction-details', kwargs={'pk': bid.auction.id}))
def bid(cls, request, auction_id): # DZIALA form = BidForm(request.POST) if form.is_valid(): price = form.cleaned_data["bid"] current_user = ShopUser.objects.get(user__pk=request.user.pk) auction = AuctionItem.objects.get(pk=auction_id) if auction.current_price < price: bid = Bid() bid.user = current_user bid.item = auction bid.date = datetime.now() bid.price = price bid.save() auction.bids.add(bid) auction.current_price = price auction.save() return HttpResponseRedirect('/aukcje/%s/' % str(auction_id))
def bid(request, item_id): auction = Auction.objects.get(pk=item_id) if auction.version != request.session["version"]: return HttpResponse( "Someone else is currently bidding on this item, try again later.") if auction.status == "active": if request.method == "POST": if request.user.is_authenticated: bid_form = BidForm(request.POST) if bid_form.is_valid(): new_bid = Bid() new_bid.price = bid_form.cleaned_data['new_price'] new_bid.auction_id = item_id new_bid.bidder = request.user if (float(auction.minimum_price) + 0.01) > float( new_bid.price) or (float(auction.highbid) + 0.01) > float(new_bid.price): msg = _( "Bid must be at least 0.01 higher than minimum price or previous bid." ) messages.add_message(request, messages.ERROR, msg) #print("Bid has to be at least 0.01 higher than minimum price or previous bid.") return HttpResponseRedirect(reverse('index')) previous_bidder = auction.highbidder auction.highbid = new_bid.price auction.highbidder = request.user.username new_bid.save() auction.save() # Check for previous bidder and notify via email if previous_bidder != "None": previous_bidder_email = User.objects.get( username=previous_bidder) send_mail( "Outbid", "Your have been outbid on the following item: " + auction.title, "*****@*****.**", [previous_bidder_email.email], fail_silently=False) # Notify new bidder send_mail("New bid", "Your bid on " + auction.title + " has been recieved", "*****@*****.**", [request.user.email], fail_silently=False) # Notify the seller send_mail("New bid", "A new bid " + str(new_bid.price) + " has been placed on you auction: " + auction.title, "*****@*****.**", [auction.seller.email], fail_silently=False) print("New bid recieved on ", auction.title, " with the amount of ", new_bid.price) return HttpResponseRedirect(reverse('index')) else: print("Incorrect bid given") return render(request, "bid.html", {"bid_form": bid_form}) else: print("Unauthenticated user tried to place a bid") return HttpResponseRedirect(reverse('signin')) else: if float(auction.highbid) == 0: price = auction.minimum_price auction.highbid = float(price) auction.save() else: price = float(auction.minimum_price) bid_form = BidForm() return render(request, "bid.html", { "bid_form": bid_form, "auction": auction, "price": price }) else: # Auction is not active, return to home page return HttpResponseRedirect(reverse('index'))