Beispiel #1
0
    def get(self, *args, **kwargs):
        from cart.cart import CART_ID
        from cart.models import Cart as CartModel

        self.order_obj = Order(self.request)
        # clear pre-existing items
        self.order_obj.clear()
        if CART_ID in self.request.session and CartModel.objects.filter(
                pk=self.request.session[CART_ID]).count():
            cart = CartModel.objects.get(pk=self.request.session[CART_ID])
            for item in cart.item_set.all():
                try:
                    self.order_obj.add(item.unit_price,
                                       product=item.product,
                                       attributes=item.attributes,
                                       quantity=item.quantity)
                except:
                    self.order_obj.add(item["amount"],
                                       attributes=item.get("attributes", ""),
                                       description=item["description"],
                                       quantity=item.get("quantity", 1))

            self.order_obj.update_totals()
        if not self.order_obj.order.items.count():
            return redirect(self.empty_redirect)
        return super(CartCheckoutView, self).get(*args, **kwargs)
Beispiel #2
0
 def get(self, *args, **kwargs):
     self.order_obj = Order(self.request)
     if not self.order_obj.order.items.count():
         return redirect(self.empty_redirect)
     if (not self.request.user.is_authenticated()
             and not CHECKOUT["ANONYMOUS_CHECKOUT"]):
         self.form_class = self.form_class_signup
     return super(CheckoutView, self).get(*args, **kwargs)
Beispiel #3
0
    def post(self, *args, **kwargs):
        self.order_obj = Order(self.request)
        try:
            self.transaction = self.order_obj.get_transactions().latest()
        except:
            # this may not be acceptable
            self.transaction = None
        if not self.order_obj.can_complete():
            return self.invalid_order()

        if self.order_obj.total == 0:
            success = True
        elif self.order_obj.order.is_subscription:
            item = self.order_obj.order.items.all()[0]
            success, data = self.processor.create_subscription(
                customer_id=self.transaction.reference_number,
                plan_id=item.subscription_plan,
                price=self.transaction.amount)
        else:
            success, data = self.processor.charge(
                self.order_obj.total,
                customer_id=self.transaction.reference_number)

        if not success:
            self.transaction.status = self.transaction.FAILED
            self.transaction.received_data = str(data)
            self.transaction.save()
            signals.confirm_attempt.send(sender=None,
                                         order=self.order_obj.order,
                                         transaction=self.transaction)
            messages.add_message(
                self.request, self.messages["processing_failed"]["level"],
                self.messages["processing_failed"]["text"].format(data))
        else:
            self.transaction.status = self.transaction.COMPLETE
            self.transaction.save()
            if self.order_obj.order.is_subscription:
                signals.subscribe.send(sender=ConfirmView,
                                       order=self.order_obj.order,
                                       transaction=self.transaction,
                                       request=self.request)
            else:
                signals.charge.send(sender=ConfirmView,
                                    order=self.order_obj.order,
                                    transaction=self.transaction,
                                    request=self.request)

            self.order_obj.update_status(OrderModel.COMPLETE)
            signals.order_complete.send(sender=ConfirmView,
                                        order=self.order_obj.order)
            if ORDER_ID in self.request.session:
                del self.request.session[ORDER_ID]

            self.after_order()

            return redirect(self.get_success_url(self.order_obj.order))

        return self.render_to_response(self.get_context_data())
Beispiel #4
0
def lookup_discount_code(request):
    amount = 0
    order_obj = Order(request)
    total = order_obj.total
    order_obj.apply_discount(request.POST.get("discount_code"))
    new_total = order_obj.total
    amount = float(total) - float(new_total)
    ret = {"amount": str(amount), "total": str(new_total)}
    if order_obj.order.discount:
        ret.update({"description": order_obj.order.discount.description})
    return HttpResponse(json.dumps(ret), mimetype="application/json")
Beispiel #5
0
    def get(self, *args, **kwargs):
        self.order_obj = Order(self.request)
        if not self.order_obj.can_complete():
            return self.invalid_order()
        try:
            self.transaction = self.order_obj.get_transactions().latest()
        except:
            # this may not be acceptable
            self.transaction = None

        return super(ConfirmView, self).get(*args, **kwargs)
Beispiel #6
0
    def post(self, *args, **kwargs):
        self.order_obj = Order(self.request)
        if (not self.request.user.is_authenticated()
                and not CHECKOUT["ANONYMOUS_CHECKOUT"]):
            self.form_class = self.form_class_signup
        incoming = self.retrieve_item()

        if self.request.POST.get("discount_code"):
            self.order_obj.apply_discount(
                self.request.POST.get("discount_code"))
            if self.order_obj.total == 0:
                self.order_obj.update_status(OrderModel.PENDING_PAYMENT)
                # goal: remove payment-related requirements if
                # no payment is necessary
                for field in self.form_class.base_fields.keys():
                    if field in PaymentForm.base_fields.keys():
                        self.form_class.base_fields[field].required = False

        return self.post_handler(incoming, *args, **kwargs)