示例#1
0
def detail(request, product_id):
    product = Product.objects.get(pk=product_id)

    if request.method == 'POST':
        form = CartItemForm(request.POST)
        if form.is_valid():
            user = User.objects.get(username=request.user)
            try:
                cart = Cart.objects.get(user=user)
            except Cart.DoesNotExist:
                cart = Cart()
                cart.user = user
                cart.save()

            item = CartItem()
            item.product = product
            item.quantity = form.cleaned_data['quantity']
            item.save()

            cart.item.add(item)

            return redirect('products:index')

    else:
        form = CartItemForm()

    return render(request, 'products/detail.html', {
        'form': form,
        'product': product
    })
示例#2
0
def add_to_cart(request):
    """ function that takes a POST request and adds a product instance to the current customer's shopping cart """
    postdata = request.POST.copy()
    # get product slug from post data, return blank if empty
    product_slug = postdata.get('product_slug', '')
    # get quantity added, return 1 if empty
    quantity = postdata.get('quantity', 1)
    # fetch the product or return a missing page error
    p = get_object_or_404(Product, slug=product_slug)
    # get products in cart
    cart_products = get_cart_items(request)
    product_in_cart = False
    # check to see if item is already in cart
    for cart_item in cart_products:
        if cart_item.product.id == p.id:
            # update the quantity if found
            cart_item.augment_quantity(quantity)
            product_in_cart = True
    if not product_in_cart:
        # create and save a new cart item
        ci = CartItem()
        ci.product = p
        ci.quantity = quantity
        ci.cart_id = _cart_id(request)
        ci.save()
示例#3
0
    def post(self, request, order_id, *args, **kwargs):
        """
        재주문을 하는 API 
        """
        try:
            order_obj = Order.objects.get(id=order_id)
        except Order.DoesNotExist:
            return JsonResponse(status=HTTPStatus.NOT_FOUND,
                                data={'message': '주문 id를 찾을 수 없습니다.'})

        if not order_obj.cart_id:
            return JsonResponse(status=HTTPStatus.NOT_FOUND,
                                data={'message': '해당 주문은 요식이로 구매하였습니다.'})

        user = self.request.user
        new_cart = Cart.objects.create(user=user)
        menu_id_list = list(
            CartItem.objects.filter(cart_id=order_obj.cart_id).values_list(
                'menu__id', flat=True))
        cart_item_list = [
            CartItem(menu_id=menu_id, cart=new_cart, quantity=1)
            for menu_id in menu_id_list
        ]

        CartItem.objects.bulk_create(cart_item_list)

        return JsonResponse(status=HTTPStatus.OK,
                            data={'message': "재주문할 새로운 주문표를 생성하였습니다."})
示例#4
0
def update_cart_items(request):
    if request.method == 'GET':
        return HttpResponse('no access')
    elif request.method == 'POST':
        cart_manager = CartManager(request)
        import ast
        dict_request_body = ast.literal_eval(request.body.decode("UTF-8"))
        product_url = dict_request_body['product']
        try:
            product_id_with_slashes = re.search(r'\/[0-9]{1,6}\/', product_url).group()
            product_id = re.search(r'[0-9]{1,6}', product_id_with_slashes).group()
            product_id = int(product_id)
            product = Product.objects.get(pk = product_id)
            try:
                cart_item_being_updated = CartItem.objects.get(product = product, cart = cart_manager.cart)
                cart_item_being_updated.quantity += 1
                cart_item_being_updated.save()
            except:
                # if we get here means cart item doesnt exist so we make a new one with quanitity of 1
                new_cart_item = CartItem(cart = cart_manager.cart, product = product)
                new_cart_item.save()
        except:
            HttpResponse('someone is messing with the hidden html input fields D:')
            
        return HttpResponse('updated cart items')
示例#5
0
文件: views.py 项目: jazdelu/minibobi
def add(request):
    if request.GET:
        cart = ''
        product = ''
        is_exist = False
        try:
            cart = Cart.objects.get(id=request.session.get("cart"))
            product = Product.objects.get(id=int(request.GET['pid']))
        except:
            raise Http404

        item = CartItem()
        item.product = product
        item.cart = cart
        item.quantity = int(request.GET['quantity'])
        item.color = Color.objects.get(id=int(request.GET['color']))
        item.size = Size.objects.get(id=int(request.GET['size']))

        for i in CartItem.objects.filter(cart=cart).filter(product=product):
            if i.is_same_spec(item):
                i.quantity += item.quantity
                i.save()
                break
        else:
            item.save()

        return HttpResponseRedirect("/cart/")
示例#6
0
    def post(self, request, *args, **kwargs):
        cart = self.get_object()

        product_id = int(request.POST.get("item"))
        qty = int(request.POST.get("qty", 1))

        if product_id is not None:
            product = get_object_or_404(Product, pk=product_id)
            message = request.POST.get("request_message", "")
            print("Request msg: " + str(message))

            if qty < 1:
                data = {
                    'success': False,
                    'errorMsg': 'Quantity cannot be less than 1',
                    'errorCode': '400'
                }
            else:
                cart_item = CartItem(cart=cart, product=product)
                cart_item.quantity = qty
                cart_item.intention = message
                cart_item.save()

                data = {'success': True}
        else:
            data = {
                'success': False,
                'errorMsg': 'Item id not provided',
                'errorCode': '400'
            }

        return JsonResponse(data=data)
示例#7
0
 def post(self, request):
     cart_id = request.session.get("cart_id")
     data = json.loads(request.body)
     items = data['items']
     if not items:
         print("List empty")
     else:
         if cart_id == None:
             cart = Cart()
             cart.user = User.objects.get(id=data['user'])
             cart.save()
             cart_id = cart.id
             request.session['cart_id'] = cart_id
         else:
             cart = Cart.objects.get(id=cart_id)
         for item in items:
             cart_item = CartItem()
             cart_item.cart = cart
             cart_item.item = get_object_or_404(Product.objects.all(),pk=item['itemid'])
             cart_item.quantity = item['quantity']
             cart_item.save()
             cart.items.add(cart_item)
         cart.save()
         # data = serializers.serialize('json', [cart,])
         # struct = json.loads(data)
         # data = json.dumps(struct[0])
         data = CartSerializer(Cart.objects.get(id=cart.id)).data
         # data2 = CartItemSerializer(cart.cartitem_set.all()).data
         # print (d)
     return Response({'data':data})
示例#8
0
def cart_detail(request):
    cart = Cart(request)
    for item in cart:
        item['update_quantity_form'] = CartItem(initial={
            'quantity': item['quantity'],
            'update': True
        })
    return render(request, 'cart/detail.html', {'cart': cart})
示例#9
0
 def add(self, product, quantity=1):
     # Add a product to the cart or update its quantity.
     if self.cart_item.filter(product=product):
         self._update_quantity_cart(product, quantity)
     else:
         cart_item = CartItem(cart=self.cart,
                              product=product,
                              price=product.retail_price,
                              quantity=quantity)
         cart_item.save()
示例#10
0
def cart_add(request, product_id):
    cart = Cart(request)
    product = get_object_or_404(Product, id=product_id)
    form = CartItem(request.POST)
    if form.is_valid():
        cd = form.cleaned_data
        cart.add(product=product,
                 quantity=cd['quantity'],
                 update_quantity=cd['update'])
    return redirect('cart:cart_detail')
示例#11
0
 def setUp(self):
     self.client = Client()
     home_url = reverse('catalog_home')
     self.checkout_url = reverse('checkout')
     self.client.get(home_url)
     # need to create customer with a shopping cart first
     self.item = CartItem()
     product = Product.active.all()[0]
     self.item.product = product
     self.item.cart_id = self.client.session[cart.CART_ID_SESSION_KEY]
     self.item.quantity = 1
     self.item.save()
示例#12
0
    def add(self, goodsid, colorid, sizeid, count, *args, **kwargs):

        # 获取购物项的唯一标示
        key = self.__get_key(goodsid, colorid, sizeid)

        # session   {'cart':{key1:item}}

        # session('cart',[{key1:cartitem,key2:cartitem}])
        if key in self.session[self.cart_name]:
            self.update(goodsid, colorid, sizeid, count, *args, **kwargs)
        else:

            self.session[self.cart_name][key] = CartItem(goodsid=goodsid, colorid=colorid, sizeid=sizeid, count=count)
示例#13
0
文件: views.py 项目: sibastr/Web-1
def add_to_cart(request, **kwargs):
    product = Product.objects.filter(id=kwargs.get('pk')).first()
    cart = Cart.objects.get(user=request.user)

    if product.id not in cart.cartitem_set.all().values_list(
            'product', flat=True) and product.displayed and product.in_stock:
        new_cart_item = CartItem(cart=cart, product=product)
        new_cart_item.save()
        print('ITEM ADDED TO CART')
    else:
        print('ITEM ALREADY IN CART')

    return redirect(request.META.get('HTTP_REFERER', 'shop-home'))
示例#14
0
def signup_user(request):
    if request.user.is_authenticated:
        return redirect("/")
    if request.method == "POST":
        try:
            user = User.objects.create_user(request.POST['userName'], request.POST['email'], request.POST['password'])
            user.save()
            cart = CartItem(user=user, items={})
            cart.save()
            login(request, user)
            return redirect("/")
        except IntegrityError:
            return render(request, "signup.html", {"error": "User name Already exist try different name"})
    return render(request, "signup.html")
示例#15
0
def add_orderitem_to_cart(orderitem, request):
    quantity = orderitem.quantity
    p = get_object_or_404(Product, slug=orderitem.product.slug)
    cart_products = get_cart_items(request)
    product_in_cart = False
    for cart_item in cart_products:
        if cart_item.product.id == p.id:
            cart_item.augment_quantity(quantity)
            product_in_cart = True
    if not product_in_cart:
        ci = CartItem()
        ci.product = p
        ci.quantity = quantity
        ci.cart_id = _cart_id(request)
        ci.save()
示例#16
0
def add_to_cart(request):
    postdata = request.POST.copy()
    product_slug = postdata.get('product_slug', '')
    print('add_to_cart')
    quantity = postdata.get('quantity', 1)
    p = get_object_or_404(Product, slug=product_slug)
    cart_products = get_cart_items(request)
    product_in_cart = False
    for cart_item in cart_products:
        if cart_item.product.id == p.id:
            cart_item.augment_quantity(quantity)
            product_in_cart = True
    if not product_in_cart:
        ci = CartItem()
        ci.product = p
        ci.quantity = quantity
        ci.cart_id = _cart_id(request)
        ci.save()
示例#17
0
 def dispatch(self, request, *args, **kwargs):
     items = request.POST.getlist('item', None)
     user = request.user
     r = Favorite.objects.filter(user=user, item__in=items)
     if 'remove' in request.POST:
         r.delete()
     if 'add2cart' in request.POST:
         cart = get_current_cart(request)
         for item_id in items:
             item = Item.objects.get(id=item_id)
             try:
                 cart_item = CartItem.objects.filter(cart=cart,
                                                     item=item)[0]
                 cart_item.quantity += 1
             except IndexError:
                 cart_item = CartItem(cart=cart, item=item, quantity=1)
             cart_item.save()
         r.delete()
     return super(ActionView, self).dispatch(request, *args, **kwargs)
示例#18
0
def add_to_cart(request):
    postdata = request.POST.copy()
    product_id = postdata.get('product_id')
    quantity = postdata.get('quantity', 1)
    size_id = postdata.get('size_id', 1)
    p = get_object_or_404(Flower, id=product_id)
    s = get_object_or_404(Size, id=size_id)
    products = get_cart_items(request)
    in_cart = False
    for item in products:
        if item.product.id != p.id and item.size.id != s.id:
            item.augment_quantity(quantity)
            in_cart = True
    if not in_cart:
        item = CartItem()
        item.product = p
        item.quantity = quantity
        item.cart_id = _cart_id(request)
        item.size = s
        item.save()
示例#19
0
    def post(self, request, *args, **kwargs):
        """ If request is POST, redirect to cart list page
            """
        cart = self.get_object()

        product_id = int(request.POST.get("item"))
        qty = int(request.POST.get("qty", 1))

        if product_id is not None:
            product = get_object_or_404(Product, pk=product_id)
            message = request.POST.get("request_message", "")
            # print("Request msg: " + str(message))

            cart_item = CartItem(cart=cart, product=product)
            cart_item.quantity = qty
            cart_item.intention = message
            if "request_attachment" in request.FILES:
                cart_item.attachment = request.FILES["request_attachment"]
            cart_item.save()

        return HttpResponseRedirect(reverse('cart:list'))
示例#20
0
def add(request):
    if request.method == "POST" and request.user.is_authenticated:
        profile = Profile.objects.filter(user=request.user)[0]
        cart = list(
            filter(lambda x: x.is_active,
                   Cart.objects.filter(profile=profile)))
        cartItem = CartItem()
        if len(cart) > 0:
            cartItem.cart = cart[0]
        else:
            cart = Cart()
            cart.profile = profile
            cart.total = 0.0
            cart.save()
            cartItem.cart = cart
        cartItem.quantity = int(request.POST.get('id_quantity'))
        cartItem.material = request.POST.get('id_material')
        cartItem.good = Good.objects.get(id=request.POST.get('id_good_id'))
        cartItem.save()
        return redirect('/good/{0}'.format(request.POST.get('id_good_id')))
    else:
        return HttpResponseBadRequest()
示例#21
0
def add_to_cart(request):
    postdata = request.POST.copy()
    # get product slug from post data, return blank if empty
    product_slug = postdata.get("product_slug", "")
    # get quantity added, return 1 if empty
    quantity = postdata.get("quantity", 1)
    # fetch the product or return a missing page error
    p = get_object_or_404(Product, slug=product_slug)
    # get products in cart
    cart_products = get_cart_items(request)
    product_in_cart = False
    # check to see if item is already in cart
    for cart_item in cart_products:
        if cart_item.product.id == p.id:
            # update the quantity if found
            cart_item.augment_quantity(quantity)
            product_in_cart = True
    if not product_in_cart:
        # create and save a new cart item
        ci = CartItem()
        ci.product = p
        ci.quantity = quantity
        ci.cart_id = _cart_id(request)
        ci.save()
示例#22
0
def cart(request):
    if request.method == "POST":
        if request.POST['menu_item'] == 'Pizza':
            form = PizzaForm(request.POST)

            if form.is_valid():
                form = form.cleaned_data
                # Get the form data to build a Pizza and CartItem
                menu = "Pizza"
                style = form['style']
                size = form['size']
                is_special = False
                if 'is_special' in request.POST:
                    is_special = True
                num_toppings = form['num_toppings']
                topping_list = []
                for topping in form['toppings']:
                    topping_list.append(str(topping))
                toppings = ", ".join(topping_list)

                # Lookup price
                if is_special:
                    # numtoppings doesn't matter
                    menu_pizza = Pizza.objects.get(style=style,
                                                   size=size,
                                                   is_special=is_special)
                else:
                    menu_pizza = Pizza.objects.get(style=style,
                                                   size=size,
                                                   num_toppings=num_toppings,
                                                   is_special=is_special)
                price = menu_pizza.price
                print(price)

                # Create the Cart Item
                order = CartItem(menu=menu,
                                 size=size,
                                 style=style,
                                 additional=toppings,
                                 is_special=is_special,
                                 user_id=request.user.id,
                                 price=price)
                order.save()

        elif request.POST['menu_item'] == 'Sub':
            form = SubForm(request.POST)
            if form.is_valid():
                form = form.cleaned_data
                menu = 'Sub'
                ingredients = form['ingredients']
                size = form['size']
                extras_list = []
                added_cost = Decimal(0.00)
                for extra in form['extras']:
                    extras_list.append(str(extra))
                    added_cost += extra.added_cost

                extras = ", ".join(extras_list)

                # Lookup price
                menu_sub = Sub.objects.get(ingredients=ingredients, size=size)
                price = menu_sub.price + Decimal(added_cost)

                # Create the Cart Item
                order = CartItem(menu=menu,
                                 size=size,
                                 style=ingredients,
                                 additional=extras,
                                 is_special=False,
                                 user_id=request.user.id,
                                 price=price)
                order.save()

            redirect('index')
        elif request.POST['menu_item'] == 'Pasta':
            form = PastaForm(request.POST)
            if form.is_valid():
                form = form.cleaned_data
                menu = 'Pasta'
                style = form['style']

                # Lookup price
                menu_pasta = Pasta.objects.get(style=style)
                price = menu_pasta.price

                # Create the Cart Item
                order = CartItem(menu=menu,
                                 style=style,
                                 user_id=request.user.id,
                                 price=price)
                order.save()
        elif request.POST['menu_item'] == 'Salad':
            form = SaladForm(request.POST)
            if form.is_valid():
                form = form.cleaned_data
                menu = 'Salad'
                style = form['style']

                # Lookup price
                menu_salad = Salad.objects.get(style=style)
                price = menu_salad.price

                # Create the Cart Item
                order = CartItem(menu=menu,
                                 style=style,
                                 user_id=request.user.id,
                                 price=price)
                order.save()
        elif request.POST['menu_item'] == 'DinnerPlatter':
            form = DinnerPlatterForm(request.POST)
            if form.is_valid():
                form = form.cleaned_data
                menu = 'DinnerPlatter'
                style = form['style']
                size = form['size']

                # Lookup price
                menu_dinner_platter = DinnerPlatter.objects.get(style=style,
                                                                size=size)
                price = menu_dinner_platter.price

                # Create the Cart Item
                order = CartItem(menu=menu,
                                 style=style,
                                 size=size,
                                 user_id=request.user.id,
                                 price=price)
                order.save()
        else:
            print("Post Error")
            redirect('index')

        cart_items = get_cart_items(request)
        if cart_items:
            total_cost = Decimal(
                cart_items.aggregate(Sum('price'))['price__sum'])
        else:
            total_cost = 0

        context = {
            'cart_items': cart_items,
            'num_cart_items': cart_items.count(),
            'total_cost': total_cost
        }

        return render(request, 'cart/cart.html', context)

    else:

        # Display Shopping Cart for GET request
        cart_items = get_cart_items(request)
        if cart_items:
            total_cost = Decimal(
                cart_items.aggregate(Sum('price'))['price__sum'])
        else:
            total_cost = 0

        context = {
            'cart_items': cart_items,
            'num_cart_items': cart_items.count(),
            'total_cost': total_cost
        }
        return render(request, 'cart/cart.html', context)
示例#23
0
def signin(request):
    next_url = request.GET.get('next')

    if request.user.is_authenticated:
        return redirect("shop:home")
    if request.method == 'POST':
        form = SignInForm(request.POST)
        if form.is_valid():
            # check authentication
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password')
            if User.objects.filter(email=email):
                user = User.objects.filter(email=email)[0]
                # check password
                matched = check_password(password, user.password)
                if matched:
                    # valid user
                    # take cart from session and persist # it in db

                    if not Cart.objects.filter(user=user):
                        cart = Cart(user=user)
                        cart.save()
                    else:
                        cart = Cart.objects.get(user=user)

                    session_cart = request.session.get(
                        settings.CART_SESSION_ID)

                    if session_cart:
                        for item_id, item in session_cart.items():
                            product = Product.objects.get(id=int(item_id))

                            if CartItem.objects.filter(product=product,
                                                       cart=cart):
                                item_in_cart = CartItem.objects.filter(
                                    product=product, cart=cart)[0]
                                # then the product already # exists
                                # so increase the quantity
                                item_in_cart.price = float(item['price'])
                                item_in_cart.quantity += int(item['quantity'])
                                item_in_cart.save()
                            else:
                                # if item is not present in the cart, then add it
                                new_item = CartItem(product=product,
                                                    price=float(item['price']),
                                                    quantity=int(
                                                        item['quantity']),
                                                    cart=cart)

                                new_item.save()

                        # destroy all items from the session
                        del request.session[settings.CART_SESSION_ID]
                    # login
                    login(request, user)
                    messages.add_message(request, messages.SUCCESS,
                                         "Signed In successfully!")
                    return redirect(next_url) if next_url else redirect(
                        "shop:home")
                else:
                    messages.add_message(request, messages.ERROR,
                                         "Email or Password doesn't match!")
            else:
                messages.add_message(request, messages.ERROR,
                                     "Email or Password doesn't match!")
    else:
        form = SignInForm()
    return render(request, 'auth/signin.html', {'form': form})