def add_order(cart, customer, **kwargs): """Add order data to the `Order` object. Return `Order` object. """ order = Order(cart=cart, user=cart.user, payment_id=id_payment_subscription, payment_reference=id_payment_customer) if "payment_id" in kwargs: order.payment_id = kwargs["payment_id"] if "payment_reference" in kwargs: order.payment_reference = kwargs["payment_reference"] if plan is not None: order.subscription = True order.subscription_status = result["status"] order.subscription_plan = plan order.subscription_enddate = plan.get_expire() order.save()
def process_checkout(request): """View to handle the Form Submit of the Checkout. This is where all data from the Checkout is processed and used to create an Order. """ # Validate Data, if failed, return checkout view again and display errors. errors = process.validate_checkout(request) if errors is not True: return checkout(request, errors) # Get the cart that is being checked out cart = process.get_cart(request) # Check if the checkout is a subscription or a normal transaction plan = process.get_plan(request) # Add User Data user = process.add_customer(request) # Add Address Data address = process.add_address(request) # Add Order Data order = Order( cart=cart, user=user, payment_option=request.POST.get('payment-option', None) ) if plan is not None: order.subscription = True order.subscription_plan = plan order.subscription_enddate = plan.get_expire() # Try uncommenting this line, to see if we can still process the transaction witout a saved order in the database. order.save() # Save the order before we do the transaction, in case of error. # Add Custom Fields Data custom_fields = process.add_custom_fields(request, order) # Complete Transaction transaction_result = process.do_transaction(request, order) if 'error' not in transaction_result: print "Transaction Results are: %s" % transaction_result order.payment_status = transaction_result['payment_status'] order.save() # Send confirmation email to the customer. try: order.send_confirmation() except Exception as ex: print "Error sending confirmation: %s" % ex.message # Callback to the payment module used when order is saved. payments[order.payment_option].order_success(order) # Reset Cart del request.session['id_cart'] return HttpResponseRedirect(reverse('shop:thank_you')) else: return HttpResponseRedirect(reverse('shop:checkout')+"?error=%s" % transaction_result['error'])