コード例 #1
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
    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)
コード例 #5
0
    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)
コード例 #6
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
    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)
コード例 #7
0
    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)
コード例 #8
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
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)
コード例 #9
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
 def get(request):
     context = make_context(request)
     paginate_products(context, page=request.GET.get('page'))
     return render(request, 'product_catalog.html', context)
コード例 #15
0
ファイル: views.py プロジェクト: skeithtan/iris-online-store
    def get(request):
        cart = Cart(request=request)

        context = make_context(request)
        context.update({"cart": cart})
        return render(request, 'cart.html', context)