Example #1
0
 def confirm_payment(self, order, amount, transaction_id, payment_method,
                     save=True):
     """
     Marks the specified amount for the given order as paid.
     This allows to hook in more complex behaviors (like saving a history
     of payments in a Payment model)
     The optional save argument allows backends to explicitly not save the
     order yet
     """
     OrderPayment.objects.create(
         order=order,
         # How much was paid with this particular transfer
         amount=Decimal(amount),
         transaction_id=transaction_id,
         payment_method=payment_method)
     
     if save and self.is_order_paid(order):
         # Set the order status:
         order.status = Order.COMPLETED
         order.save()
         completed.send(sender=self, order=order)
 
         # Empty the customers basket, to reflect that the purchase was
         # completed
         cart_object = Cart.objects.get(user=order.user)
         cart_object.empty()
Example #2
0
    def confirm_payment(self, order, amount, transaction_id, payment_method,
                        save=True):
        """
        Marks the specified amount for the given order as paid.
        This allows to hook in more complex behaviors (like saving a history
        of payments in a Payment model)
        The optional save argument allows backends to explicitly not save the
        order yet
        """
        OrderPayment.objects.create(
            order=order,
            # How much was paid with this particular transfer
            amount=Decimal(amount),
            transaction_id=transaction_id,
            payment_method=payment_method)
        
        if save and self.is_order_paid(order):
            # Set the order status:
            order.status = Order.COMPLETED
            order.save()

            # empty the related cart
            try:
                cart = Cart.objects.get(pk=order.cart_pk)
                cart.empty()
            except Cart.DoesNotExist:
                pass

            completed.send(sender=self, order=order)
Example #3
0
    def get_context_data(self, **kwargs):
        ctx = super(ShopTemplateView, self).get_context_data(**kwargs)

        # Set the order status:
        order = get_order_from_request(self.request)

        if order:
            order.status = Order.COMPLETED
            order.save()

        else:
            order = Order.objects.get_latest_for_user(self.request.user)
            #TODO: Is this ever the case?
        ctx.update({
            'order': order,
        })

        # TODO: move away from shop!!
        # ctx.update({'downloads': [1], })

        completed.send(sender=self, order=order)

        # Empty the customers basket, to reflect that the purchase was
        # completed
        cart_object = get_or_create_cart(self.request)
        cart_object.empty()

        return ctx
Example #4
0
    def get_context_data(self, **kwargs):
        ctx = super(ShopTemplateView, self).get_context_data(**kwargs)

        # Set the order status:
        order = get_order_from_request(self.request)

        
        if order:
            order.status = Order.COMPLETED
            order.save()
            
        else:
            order = Order.objects.get_latest_for_user(self.request.user)
            #TODO: Is this ever the case?
        ctx.update({'order': order, })
        
        # TODO: move away from shop!!
        # ctx.update({'downloads': [1], })

        
        completed.send(sender=self, order=order)

        # Empty the customers basket, to reflect that the purchase was
        # completed
        cart_object = get_or_create_cart(self.request)
        cart_object.empty()

        return ctx
Example #5
0
    def save_related(self, request, form, formset, change):
        super(OrderAdmin, self).save_related(request, form, formset, change)

        if form.instance:
            if form.instance.status != Order.SHIPPED:
                if not form.instance.is_completed() and form.instance.is_paid():
                    form.instance.status = Order.COMPLETED
                    form.instance.save()
                    completed.send(sender=self, order=form.instance)
    def get_context_data(self, **kwargs):
        ctx = super(ShopTemplateView, self).get_context_data(**kwargs)

        # Set the order status:
        order = get_order_from_request(self.request)
        order.status = Order.COMPLETED
        order.save()
        completed.send(sender=self, order=order)

        return ctx
Example #7
0
    def save_model(self, request, order, form, change):
        instance = Order.objects.get(pk=order.pk)
        super(OrderAdmin, self).save_model(request, order, form, change)

        if instance.status != order.status:
            if order.status == Order.COMPLETED:
                completed.send(sender=self, order=order)
            elif order.status == Order.SHIPPED:
                shipped.send(sender=self, order=order)
            elif order.status == Order.CANCELLED:
                cancelled.send(sender=self, order=order)
Example #8
0
    def save_model(self, request, order, form, change):

        if change:
            pre_save_status = Order.objects.get(pk=order.pk).status
            post_save_status = order.status

        super(OrderAdmin, self).save_model(request, order, form, change)

        if post_save_status == Order.SHIPPED and pre_save_status != Order.SHIPPED:
            shipped.send(sender=self, order=order)

        if post_save_status == Order.COMPLETED and pre_save_status != Order.COMPLETED:
            completed.send(sender=self, order=order)
Example #9
0
    def get_context_data(self, **kwargs):
        ctx = super(ShopTemplateView, self).get_context_data(**kwargs)

        # Set the order status:
        order = get_order_from_request(self.request)
        order.status = Order.COMPLETED
        order.save()
        completed.send(sender=self, order=order)

        # Empty the customers basket, to reflect that the purchase was completed
        cart_object = get_or_create_cart(self.request)
        cart_object.empty()

        return ctx
Example #10
0
    def handle_order_notifications(self, data):

        order_id = data.get(PayerXMLDocument.ORDER_ID_URL_PARAMETER_NAME,
                            data.get('payer_merchant_reference_id', None))
        payment_method = data.get('payer_payment_type', 'unknown')
        transaction_id = data.get('payer_payment_id', data.get('payread_payment_id', None))
        callback_type = data.get('payer_callback_type', '').lower()
        # testmode = bool(data.get('payer_testmode', 'false') == 'true')
        # added_fee = data.get('payer_added_fee', 0)

        if order_id is not None:

            order = Order.objects.get(pk=order_id)

            if callback_type == 'auth':

                # Payment approved, update order status, empty cart
                order.status = Order.CONFIRMED
                order.save()

                try:
                    cart = Cart.objects.get(pk=order.cart_pk)
                    cart.empty()
                except Cart.DoesNotExist:
                    pass

                confirmed.send(sender=self, order=order)

            elif callback_type == 'settle':

                # Payment completed, update order status, add payment
                order.status = Order.COMPLETED

                self.shop.confirm_payment(order, self.shop.get_order_total(order), transaction_id,
                                          u"Payer %s (%s)" % (unicode(self.backend_name).lower(), payment_method,))

                completed.send(sender=self, order=order)
Example #11
0
 def save_model(self, request, order, form, change):
     super(OrderAdmin, self).save_model(request, order, form, change)
     if not order.is_completed() and order.is_paid():
         order.status = Order.COMPLETED
         order.save()
         completed.send(sender=self, order=order)
Example #12
0
 def save_model(self, request, order, form, change):
     super(OrderAdmin, self).save_model(request, order, form, change)
     if not order.is_completed() and order.is_paid():
         order.status = Order.COMPLETED
         order.save()
         completed.send(sender=self, order=order)