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()
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)
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
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
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
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)
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)
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
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)
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)