def post(request): if "product" not in request.POST or "quantity" not in request.POST: raise Http404("Product or quantity not in POST data") product_id = request.POST["product"] quantity = int(request.POST["quantity"]) try: product = Product.objects.get(id=product_id) except: raise Http404("Product ID not in database") Cart(request=request).update_quantity(product_id, quantity) context = make_context(request=request) recommendations = get_recommended_products(product=product) context.update({ 'added_to_cart': product, 'quantity': quantity, 'recommendations': recommendations }) paginate_products(context, page=request.GET.get('page')) return render(request, 'product_catalog.html', context)
def get(request): context = make_context(request, include_stalls_and_products=False) user = request.user customer = Customer.objects.get(user=user) context.update({"customer": customer}) return render(request, 'customer_profile.html', context)
def get(request): context = make_context(request, include_stalls_and_products=False) user = request.user customer = Customer.objects.get(user=user) context["waitlists"] = Waitlist.objects.filter(customer=customer) return render(request, 'customer_waitlist.html', context)
def get(request, stall_id): try: stall = Stall.objects.get(id=stall_id) except: raise Http404("Stall does not exist") context = make_context(request, active_stall=stall) paginate_products(context, page=request.GET.get('page')) return render(request, 'product_catalog.html', context)
def post(request): try: Customer.objects.get(user=request.user) except: Http404('Could not get Customer object') order_id = request.POST.get('order-id') order = Order.objects.get(id=order_id) context = make_context(request, include_stalls_and_products=False) has_error = False if request.FILES.get('deposit-slip') is None: has_error = True context["photo_error"] = True if request.POST.get("date") is None: has_error = True context["date_error"] = True print(has_error) if (not has_error): date_paid = request.POST.get('date') photo = request.FILES.get('deposit-slip') order.submit_customer_payment(deposit_photo=photo, payment_date=date_paid) context.update({"photo_error": False, "date_error": True}) return redirect(f"/orders/{order_id}/") customer = Customer.objects.get(user=request.user) orders = Order.objects.all().filter(customer=customer) pending_orders = orders.filter(status="P") approved_orders = orders.filter(status="A") shipped_orders = orders.filter(status="S") cancelled_orders = orders.filter(status="C") expand = order.get_status_display().lower() line_items = OrderLineItems.objects.all().filter(parent_order=order_id) context.update({ "line_items": line_items, "active_order": order, "customer": customer, "total_price": order.total_price, "orders": { "pending": pending_orders, "processing": approved_orders, "shipped": shipped_orders, "cancelled": cancelled_orders, }, "expand": expand }) return render(request, 'customer_orders.html', context)
def get(request): user = request.user customer = Customer.objects.get(user=user) cart = Cart(request=request) line_items = cart.line_items if len(line_items) == 0: return redirect("/") quantity_errors = [] out_of_stock_errors = [] dead_products = [] total_price = 0.00 for line_item in line_items: product_id = line_item.product.id stock_count = line_item.product.quantity # Check if product is activated if not line_item.product.is_active: dead_products.append(line_item.product) cart.remove_product(product_id) line_items.remove(line_item) continue # Check if product is in stock if stock_count == 0: out_of_stock_errors.append(line_item.product) cart.remove_product(product_id) line_items.remove(line_item) continue # Check if inventory can support cart quantity if stock_count < line_item.quantity: quantity_errors.append(line_item.product) cart.update_quantity(product_id, quantity=stock_count) line_item.quantity = stock_count total_price += float( line_item.product.current_price) * line_item.quantity context = make_context(request) context.update({ "total_price": total_price, "line_items": line_items, "customer": customer, "out_of_stock_errors": out_of_stock_errors, "quantity_errors": quantity_errors, "dead_products": dead_products }) return render(request, 'checkout.html', context)
def get(request): context = make_context(request) user = request.user customer = Customer.objects.get(user=user) products_wished = Wishlist.wishlist_products_for_customer(customer) context.update({ "customer": customer, "products": products_wished, "wishlist": products_wished }) return render(request, 'customer_wishlist.html', context)
def search(request): if request.method != 'GET': return redirect('/') key = request.GET["search-query"] products = Product.objects.filter( Q(name__icontains=key) | Q(description__icontains=key)).filter( is_active=True).order_by("pk").reverse() context = make_context(request) context["products"] = products context["search_term"] = key # paginate_products(context, page=request.GET.get('page')) # TODO: Figure out solution for query param &search=page= return render(request, 'product_catalog.html', context)
def get(request): cart = Cart(request=request) if not cart.is_approved: print("Cart is not approved") return redirect("/checkout/cart/") customer = Customer.objects.get(user=request.user) order = cart.convert_to_order(customer=customer) expire.apply_async(args=(order.id, ), countdown=0) cart.reset_cart() context = make_context(request) context["total_price"] = order.total_price return render(request, 'purchase.html', context)
def get(request, product_id): # This is the delete function for waitlists delete = request.GET.get('delete') context = make_context(request, include_stalls_and_products=False) customer = Customer.objects.get(user=request.user) waitlists = list(Waitlist.objects.filter(customer=customer)) context["waitlists"] = waitlists if not delete: return render(request, 'customer_waitlist.html', context) for waitlist in waitlists: if waitlist.product.id == int(product_id): waitlists.remove(waitlist) waitlist.delete() return render(request, 'customer_waitlist.html', context)
def post(request, product_id): user = request.user customer = Customer.objects.get(user=user) try: product = Product.objects.get(id=product_id) except: raise Http404 # Waitlist only products that are out of stock if product.quantity == 0: Waitlist.objects.get_or_create(customer=customer, product=product) context = make_context(request) context.update({'waitlisted': product}) return render(request, 'product_catalog.html', context)
def get(request): context = make_context(request, include_stalls_and_products=False) user = request.user customer = Customer.objects.get(user=user) orders = Order.objects.all().filter(customer=customer) pending_orders = orders.filter(status="P") approved_orders = orders.filter(status="A") shipped_orders = orders.filter(status="S") cancelled_orders = orders.filter(status="C") context.update({ "customer": customer, "expand": "pending", "orders": { "pending": pending_orders, "processing": approved_orders, "shipped": shipped_orders, "cancelled": cancelled_orders, } }) return render(request, 'customer_orders.html', context)
def get(request, order_id): context = make_context(request, include_stalls_and_products=False) user = request.user customer = Customer.objects.get(user=user) try: order = Order.objects.get(id=order_id) line_items = OrderLineItems.objects.all().filter( parent_order=order_id) except: raise Http404("Something went wrong") orders = Order.objects.all().filter(customer=customer) pending_orders = orders.filter(status="P") approved_orders = orders.filter(status="A") shipped_orders = orders.filter(status="S") cancelled_orders = orders.filter(status="C") expand = order.get_status_display().lower() context.update({ "line_items": line_items, "active_order": order, "customer": customer, "total_price": order.total_price, "orders": { "pending": pending_orders, "processing": approved_orders, "shipped": shipped_orders, "cancelled": cancelled_orders, }, "expand": expand }) return render(request, 'customer_orders.html', context)
def get(request): context = make_context(request) paginate_products(context, page=request.GET.get('page')) return render(request, 'product_catalog.html', context)
def get(request): cart = Cart(request=request) context = make_context(request) context.update({"cart": cart}) return render(request, 'cart.html', context)