Esempio n. 1
0
    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}))
Esempio n. 2
0
    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))
Esempio n. 3
0
    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))
Esempio n. 4
0
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'))