def insert_cart(request, product_id): context = {} nItems = 0 if 'order_id' in request.session: order = Order.objects.get(id=request.session['order_id']) orderItem = OrderItem() product = Product.objects.get(id=product_id) orderItem.order = order orderItem.product = product orderItem.value = product.value orderItem.save() # context['order'] = order # context['orderItems'] = OrderItem.objects.filter(order__id=order.id) request.session['howItems'] = \ int(request.session['howItems']) + 1 else: order = Order() order.user = User.objects.get(id=request.user.id) order.save() orderItem = OrderItem() product = Product.objects.get(id=product_id) orderItem.order = order orderItem.product = product orderItem.value = product.value orderItem.save() # context['order'] = order # context['orderItems'] = OrderItem.objects.filter(order__id=order.id) request.session['order_id'] = order.id request.session['howItems'] = 1 return HttpResponseRedirect(resolve_url("/"))
def create_order(request, transaction_id): order = Order() checkout_form = CheckoutForm(request.POST, instance=order) order = checkout_form.save(commit=False) order.transaction_id = transaction_id order.ip_address = request.META.get('REMOTE_ADDR') order.user = None if request.user.is_authenticated: order.user = request.user order.status = Order.SUBMITTED order.save() # if the order save succeeded if order.pk: cart_items = cart.get_cart_items(request) for ci in cart_items: # create order item for each cart item oi = OrderItem() oi.order = order oi.quantity = ci.quantity oi.price = ci.price # now using @property oi.product = ci.product oi.save() # all set, empty cart cart.empty_cart(request) # save profile info for future orders if request.user.is_authenticated: profile.set(request) # return the new order object return order
def create_order(request): order = Order() checkout_form = CheckoutForm(request.POST, instance=order) order = checkout_form.save(commit=False) order.ip_address = request.META.get('REMOTE_ADDR') order.user = None if request.user.is_authenticated(): order.user = request.user order.status = Order.SUBMITTED order.save() # if the order save succeeded if order.pk: cart_items = cart.get_cart_items(request) for ci in cart_items: # create order item for each cart item oi = OrderItem() oi.order = order oi.quantity = ci.quantity oi.product = ci.product oi.save() # all set, empty cart cart.empty_cart(request) # save profile info for future orders if request.user.is_authenticated(): from accounts import profile profile.fill(request) # mail the managers mail_manager_subject = '{0} has been placed!'.format(order) mail_manager_message = '{0} has been placed by {1}.\n\nClick here: {2}'.format( order, order.user if order.user else 'anonymous', request.build_absolute_uri( reverse('admin:checkout_order_change', args=(order.pk, )))) mail_managers(mail_manager_subject, mail_manager_message) # mail the customer if order.email: # FIXME: someday make templates for these emails mail_customer_subject = 'Thank you for placing {0}!'.format(order.name) mail_customer_message = '{0} was placed by you. Click here for more details: {1}\n\nThank you for your order!\n\n{2}'.format( order.name, request.build_absolute_uri(order.get_absolute_url()), settings.SITE_NAME) send_mail(mail_customer_subject, mail_customer_message, settings.DEFAULT_FROM_EMAIL, [order.email]) # return the new order object return order
def create_order(request, transaction_id): """ if the POST to the payment gateway successfully billed the customer, create a new order containing each CartItem instance, save the order with the transaction ID from the gateway, and empty the shopping cart """ order = Order() checkout_form = CheckoutForm(request.POST, instance=order) order = checkout_form.save(commit=False) order.transaction_id = transaction_id order.ip_address = request.META.get('REMOTE_ADDR') order.user = None if request.user.is_authenticated(): order.user = request.user order.status = Order.SUBMITTED order.save() if order.pk: """ if the order save succeeded """ cart_items = carts.get_cart_items(request) for ci in cart_items: """ create order item for each cart item """ oi = OrderItem() oi.order = order oi.quantity = ci.quantity oi.price = ci.price # now using @property oi.product = ci.product oi.save() # all set, clear the cart carts.empty_cart(request) # save profile info for future orders if request.user.is_authenticated(): from accounts import profile profile.set(request) return order
def checkout(request): if request.method == 'GET': # request.session['braintree_client_token'] = braintree.ClientToken.generate() stripe_customer = stripe.Customer.retrieve( request.user.user.stripe_customer_id) payment_info = stripe_customer.sources.retrieve( stripe_customer.default_source) cart = request.session.get('cart', {}) new_cart = cart.copy() item_list = [] sold_item_list = [] total_price = 0 total_shipping = 0 for id in cart: try: item = Item.objects.get(pk=id) if item.sold == True: sold_item_list.append(item) del new_cart[id] else: item_list.append(item) total_price = total_price + item.price total_shipping = total_shipping + item.shipping_price except: pass final_total = total_shipping + total_price if sold_item_list: request.session['cart'] = new_cart return render( request, 'checkout/checkout.html', { 'sold_item_list': sold_item_list, 'items': item_list, 'total': final_total, 'sub_total': total_price, 'total_shipping': total_shipping, 'payment_information': payment_info }) else: print request.POST cart = request.session.get('cart', {}) new_cart = cart.copy() item_list = [] sold_item_list = [] total_price = 0 total_shipping = 0 final_total = 0 print cart print new_cart for id in cart: try: item = Item.objects.get(pk=id) if item.sold == True: sold_item_list.append(item) base_sold_email_template = open( os.path.join(PROJECT_ROOT, 'emails/reminder_email.html')).read() message = sendgrid.Mail( to=item.seller.email, subject='CampusThrift Buyer Reminder', html=base_sold_email_template, text='Body', from_email='*****@*****.**') sg.send(message) del new_cart[id] else: item_list.append(item) total_price = total_price + item.price total_shipping = total_shipping + item.shipping_price except: pass final_total = total_shipping + total_price if sold_item_list: request.session['cart'] = new_cart return render( request, 'checkout/checkout.html', { 'sold_item_list': sold_item_list, 'items': item_list, 'total': final_total, 'sub_total': total_price, 'total_shipping': total_shipping }) else: new_order = Order() new_order.buyer = request.user sub_total = 0 shipping_total = 0 final_total = 0 # for item in item_list: new_order_item = OrderItem() new_order_item.order = new_order new_order_item.item = item new_order_item.seller = item.user new_order_item.shipping_method = request.POST[str(item.pk) + '_ship_method'] new_order_item.price = item.price if int(request.POST[str(item.pk) + '_ship_method']) == 1: new_order_item.shipping_price = 0.00 new_order_item.order_item_total_price = new_order_item.price else: new_order_item.shipping_price = item.shipping_price shipping_total = shipping_total + item.shipping_price new_order_item.order_item_total_price = new_order_item.price + new_order_item.shipping_price sub_total = sub_total + item.price new_order_item.save() new_order.shipping_address = request.POST['address'] new_order.city = request.POST['city'] new_order.state = request.POST['state'] new_order.zip = request.POST['zip'] new_order.final_total = sub_total + shipping_total new_order.shipping_total = shipping_total new_order.sub_total = sub_total new_order.save() request.session['order'] = new_order.primary_key return redirect('confirm')
def checkout(request): ''' render checkout form and complete order and payment with user provided details ''' stripe_public_key = settings.STRIPE_PUBLIC_KEY stripe_secret_key = settings.STRIPE_SECRET_KEY if request.method == 'POST': form_data = { 'first_name': request.POST['first_name'], 'last_name': request.POST['first_name'], 'email_address': request.POST['email_address'], 'phone_number': request.POST['phone_number'], 'street_address1': request.POST['street_address1'], 'street_address2': request.POST['street_address2'], 'town_or_city': request.POST['town_or_city'], 'postcode': request.POST['postcode'], 'country': request.POST['country'], } current_basket = basket_content(request) total = current_basket['total'] order_form = OrderForm(form_data) if order_form.is_valid(): order = order_form.save() order.total = total order.save() if request.user.is_authenticated: basket_items = BasketItem.objects.filter( basket__owner=request.user) for basket_item in basket_items: order_item = OrderItem(order=order, product=basket_item.product, quantity=basket_item.quantity, colour=basket_item.colour) order_item.save() if 'save' in request.POST: profile = get_object_or_404(Profile, owner=request.user) profile_form = ProfileForm(form_data, instance=profile) if profile_form.is_valid(): profile_form.save() else: basket = request.session.get('basket', {}) for item in basket: product = Product.objects.get(pk=basket[item]['product']) quantity = basket[item]['quantity'] colour = None if Colour.objects.filter(pk=basket[item]['colour']).exists(): colour = Colour.objects.get(pk=basket[item]['colour']) order_item = OrderItem( order=order, product=product, quantity=quantity, colour=colour) order_item.save() return redirect(reverse('checkout_success', args=[order.order_number])) else: messages.error( request, 'There is an error in your form, please check your data') return redirect(reverse('checkout')) else: if request.user.is_authenticated: if BasketItem.objects.filter(basket__owner=request.user).exists(): basket = Basket.objects.get(owner=request.user) else: basket = None # if details were saved in profile, display them in the form if Profile.objects.filter(owner=request.user).exists(): profile = Profile.objects.get(owner=request.user) order_form = OrderForm(initial={ 'first_name': profile.first_name, 'last_name': profile.first_name, 'email_address': profile.email_address, 'phone_number': profile.phone_number, 'street_address1': profile.street_address1, 'street_address2': profile.street_address2, 'town_or_city': profile.town_or_city, 'postcode': profile.postcode, 'country': profile.country, }) else: basket = request.session.get('basket', {}) order_form = OrderForm() if not basket: messages.error( request, "There's nothing in your basket at the moment") return redirect(reverse('basket')) current_basket = basket_content(request) total = current_basket['total'] stripe_total = round(total * 100) stripe.api_key = stripe_secret_key intent = stripe.PaymentIntent.create( amount=stripe_total, currency=settings.STRIPE_CURRENCY, ) context = { 'order_form': order_form, 'stripe_public_key': stripe_public_key, 'client_secret': intent.client_secret, } return render(request, 'checkout.html', context)