Beispiel #1
0
    def get_object(self, *args, **kwargs):
        self.request.session.set_expiry(0)
        cart_id = self.request.session.get("cart_id")
        if cart_id is not None:
            cart = Cart.objects.get(id=cart_id)
            if self.request.user.is_authenticated():
                cart.user = self.request.user
                cart.save()
            return cart

        if not self.request.user.is_authenticated():
            cart = Cart(subtotal=0.00)
            cart.save()
            cart_id = cart.id
            self.request.session["cart_id"] = cart_id
        else:
            cart = Cart.objects.filter(user=self.request.user)
            if cart.count() >= 1:
                cart = cart.first()
            else:
                cart = Cart(subtotal=0.00, user=self.request.user)
                cart.save()
            cart_id = cart.id
            self.request.session["cart_id"] = cart_id
            cart.save()
        return cart
Beispiel #2
0
    def get_delivery(self, obj):
        request = self.context.get("request")

        cart = Cart(user=request.user)
        seller_delivery_cart_item = CartItem(
            product=obj,
            quantity=1,
            delivery_option_id=DeliveryOption.SELLER,
            cart=cart)

        options = {
            "seller": seller_delivery_cart_item.seller_delivery_fee.netto,
            "pickup": Decimal("0.0"),
        }

        region_settings = get_setting(request.region.id)
        if region_settings.central_logistics_company:
            central_logistics_cart_item = CartItem(
                product=obj,
                quantity=1,
                delivery_option_id=DeliveryOption.CENTRAL_LOGISTICS,
                cart=cart,
            )
            options[
                "logistics"] = central_logistics_cart_item.central_logistic_delivery_fee.netto

        return options
Beispiel #3
0
def update_cart(request, product_id):
    request.session.set_expiry(120000)
    print(request.session.__dict__)
    try:
        the_id = request.session['cart_id']
    except:
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id
    cart = get_object_or_404(Cart, id=the_id)
    product = get_object_or_404(Product, id=product_id)
    product.amount = 1
    product.save()
    cart_item, created = CartItem.objects.get_or_create(product=product)

    if not cart_item in cart.items.all():
        cart_item.amount = 1
        cart_item.save()
        cart.items.add(cart_item)
    else:
        cart.items.remove(cart_item)

    new_total = 0.00
    for item in cart.items.all():
        new_total += float(item.get_full_price())
    request.session['items_total'] = cart.items.count()
    if not request.session['items_total']:
        return redirect('to_home_url')
    cart.total = new_total
    cart.save()
    return redirect('view_cart_url')
Beispiel #4
0
 def post(self, req):
     d = req.data
     username = d.get('username')
     email = d.get('email')
     pwd = d.get('password')
     user = User.objects.filter(email=email)
     if user:
         return Response({'error':
                          'An account with that email already exists.'},
                         status=409)
     user = User.objects.filter(username=username)
     if user:
         return Response({'error':
                          'An account with that username already exists.'},
                         status=409)
     if len(pwd) < settings.MIN_PASSWORD_LENGTH:
         return Response({'error':
                          'Password must be at least {} characters long'
                          .format(settings.MIN_PASSWORD_LENGTH)},
                           status=411)
     user = User.objects.create_user(username=username, email=email,
                                     password=pwd)
     if user is None:
         return Response({'error': 'There was an error creating the user.'},
                         status=500)
     cart = Cart(user=user)
     cart.save()
     url = req.build_absolute_uri('/auth/confirm-email')
     uid = user.id * settings.EMAIL_CONFIRM_HASH_NUM
     token = account_activation_token.make_token(user)
     url += '?token={}&uid={}'.format(token, uid)
     send_acct_confirm_email.delay(user.id, url)
     return Response({'user': user.to_json()})
Beispiel #5
0
 def prepare_new_user(self, data):
     email = data.get('email', None)
     if not self.email_is_used(email):
         new_user = self.create_new_user(data)
         Cart().create_cart_to_new_user(new_user)
         user = authenticate(username=data.get('username'),
                             password=data.get('password'))
         self.get_token(user)
         return new_user
     raise serializers.ValidationError(
         {'email_used': _('This email is already used.')})
Beispiel #6
0
 def get_object(self, *args, **kwargs):
     self.request.session.set_expiry(0)
     cart_id = self.request.session.get("cart_id")
     if cart_id == None:
         cart = Cart()
         cart.subtotal = 0
         cart.save()
         cart_id = cart.id
         self.request.session["cart_id"] = cart_id
     cart = Cart.objects.get(id=cart_id)
     return cart
Beispiel #7
0
def retrived_cart(request):
    try:
        the_id = request.session['cart_id']
    except:
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id
    cart = Cart.objects.get(id=the_id)

    return cart
Beispiel #8
0
    def get_cart(self):
        data, cart_obj, response_status = self.get_cart_from_token()
        if cart_obj == None or not cart_obj.active:
            cart = Cart()
            cart.tax_percentage = 0.075
            if self.request.user.is_authenticated():
                cart.user = self.request.user
            cart.save()
            data = {"cart_id": str(cart.id)}
            self.create_token(data)
            cart_obj = cart

        return cart_obj
Beispiel #9
0
 def get_object(self, *args, **kwargs):
     self.request.session.set_expiry(0)
     cart_id = self.request.session.get("cart_id")
     if cart_id == None:
         cart = Cart()
         cart.save()
         cart_id = cart.id
         self.request.session["cart_id"] = cart.id
     cart = Cart.objects.get(id=cart_id)
     if self.request.user.is_authenticated():
         cart.user = self.request.user
         cart.save()
     return cart
Beispiel #10
0
    def get_cart(self, *args, **kwargs):
        cart_id = self.request.session.get('cart_id')
        if cart_id is None:
            cart = Cart()
            cart.save()
            cart_id = cart.id
            self.request.session['cart_id'] = cart_id

        cart = Cart.objects.get(id=cart_id)
        if self.request.user.is_authenticated():  # Login user
            # if the cart is not belong to the current login user,
            # start a new cart
            if cart.user is not None and cart.user != self.request.user:
                cart = Cart()
                cart.save()
                self.request.session['cart_id'] = cart.id
            cart.user = self.request.user
            cart.save()
        else:  # Guest user
            if cart.user:
                pass  # Required Login or remind user to start a new session
        return cart
Beispiel #11
0
 def get_object(self, *args, **kwargs):
     self.request.session.set_expiry(0)  #5 minutes
     cart_id = self.request.session.get("cart_id")
     if cart_id == None:
         print("cart is none...")
         cart = Cart()
         cart.tax_percentage = 0.075
         cart.save()
         cart_id = cart.id
         self.request.session["cart_id"] = cart_id
     cart = Cart.objects.get(id=cart_id)
     if self.request.user.is_authenticated:
         cart.user = self.request.user
         cart.save()
     return cart
Beispiel #12
0
    def get_object(self, *args, **kwargs):
        self.request.session.set_expiry(0)  # until the browser closes
        cart_id = self.request.session.get('cart_id', None)
        if not cart_id:
            # Create cart
            cart = Cart()
            cart.save()
            cart_id = cart.id
            self.request.session['cart_id'] = cart_id

        cart = Cart.objects.get(id=cart_id)
        if self.request.user.is_authenticated():
            cart.user = self.request.user
            cart.save()
        return cart
Beispiel #13
0
    def get_object(self, *args, **kwargs):
        # Expire the session after 5 mins - put 300
        # To expire once the browser is closed use 0
        self.request.session.set_expiry(0)
        cart_id = self.request.session.get("cart_id")
        if cart_id is None:
            cart = Cart()
            cart.save()
            cart_id = cart.id
            self.request.session["cart_id"] = cart_id

        cart = Cart.objects.get(id=cart_id)
        if self.request.user.is_authenticated():
            cart.user = self.request.user
            cart.save()
        return cart
Beispiel #14
0
    def get_object(self, *args, **kwargs):
        self.request.session.set_expiry(
            0)  # close the session when browser close
        cart_id = self.request.session.get('cart_id')
        if cart_id is None:
            cart = Cart()
            cart.save()
            cart_id = cart.id
            self.request.session['cart_id'] = cart_id

        cart = Cart.objects.get(id=cart_id)
        if self.request.user.is_authenticated():
            cart.user = self.request.user
            cart.save()

        return cart
Beispiel #15
0
    def get_object(self, *args, **kwargs):
        self.request.session.set_expiry(0)  # 1800 seconds = 1800.
        cart_id = self.request.session.get("cart_id")

        # if session doesn't have Cart, create the Cart AND set the session [ "cart_id" ]
        if cart_id == None:
            new_cart = Cart()
            new_cart.save()
            cart_id = new_cart.id
            # = Cart.objects.create()
            self.request.session["cart_id"] = new_cart.id
        # Get the Cart. new Cart or existing Cart
        cart = Cart.objects.get(id=cart_id)

        # if user authenticated, set the user of the cart
        if self.request.user.is_authenticated():
            # cart = Cart.objects.get(id=cart_id, user=request.user)
            cart.user = self.request.user
            cart.save()

        return cart
Beispiel #16
0
 def register_user(self,
                   seed,
                   is_staff=False,
                   with_cart=False,
                   email_verified=False):
     """
     Helper to create a user object.
     :param seed: int
     """
     username = '******'.format(seed)
     email = '{}@example.com'.format(username)
     user = User(username=username, email=email)
     user.set_password('pass')
     if is_staff:
         user.is_staff = True
     if email_verified:
         user.email_verified = True
     user.save()
     if with_cart:
         cart = Cart(user=user)
         cart.save()
     return user
Beispiel #17
0
	def get_object(self, *args, **kwargs):
		self.request.session.set_expiry(0) #session expires on window close or 300 -> 5 min
		cart_id = self.request.session.get("cart_id")
		if cart_id == None:
			cart = Cart()
			cart.save()
			cart_id = cart.id
			self.request.session["cart_id"] = cart_id
		cart = Cart.objects.get(id=cart_id)
		if self.request.user.is_authenticated():
			cart.user = self.request.user
			cart.save()

		citems = CartItem.objects.filter(cart=cart)
		for citem in citems:
			if citem.item.available_quantity <= 0:
				citem.out_of_stock = True
				citem.line_item_total = 0.0
			else:
				citem.out_of_stock = False
			citem.save()
		cart.update_subtotal()
		return cart
Beispiel #18
0
def add_to_cart(request, slug):
    #Session is set to expire in 5 mins = 3000
    request.session.set_expiry(3000)
    # PRODUCT QUANTITY
    try:
        the_id = request.session['cart_id']
    except:
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id

    cart = Cart.objects.get(id=the_id)
    #ITEMS IN CART
    try:
        product = Product.objects.get(slug=slug)
    except Product.DoesNotExist:
        pass
    except:
        pass
    product_var = []  #product_var

    if request.method == "POST":
        qty = request.POST['qty']
        for item in request.POST:
            key = item
            val = request.POST[key]
        cart_item = CartItem.objects.create(cart=cart, product=product)
        print(cart_item)
        cart_item.quantity = qty
        # saving notes in a dictionary
        cart_item.save()
        # success message
        return redirect(reverse("cart"))
    #error message
    return redirect(reverse("cart"))
Beispiel #19
0
def edit(request, pizza_id):
    if request.method == "POST":
        try:
            the_id = request.session['cart_id']
        except:
            new_cart = Cart()
            new_cart.save()
            request.session['totalprice'] = 0
            request.session['cart_id'] = new_cart.id
            the_id = new_cart.id
        cart = Cart.objects.get(id=the_id)
        pizza = Pizzas.objects.get(id=pizza_id)

        changed_pizza = {
            'crust': request.POST['crust'],
            'toppings': sorted(request.POST.getlist('toppings')),
            'sauceBase': request.POST['sauceBase'],
            'diameter': request.POST['diameter']
        }

        ingr = literal_eval(pizza.ingredients)
        ingr['toppings'] = sorted(ingr['toppings'])
        if ingr == changed_pizza:
            cart_item, created = CartItem.objects.get_or_create(cart=cart,
                                                                pizzas=pizza)
            cart_item.line_total = pizza.price
        else:
            cart_item, created = CartItem.objects.get_or_create(
                cart=cart, pizzas=pizza, changes=str(changed_pizza))
            price = 5
            for topping in changed_pizza['toppings']:
                if topping[:3] == 'TME':
                    elem = Meat.objects.get(id=topping).price
                elif topping[:3] == 'TMU':
                    elem = Mushrooms.objects.get(id=topping).price
                elif topping[:3] == 'TFR':
                    elem = Fruits.objects.get(id=topping).price
                elif topping[:3] == 'TFI':
                    elem = Fish.objects.get(id=topping).price
                elif topping[:2] == 'TV':
                    elem = Vegetables.objects.get(id=topping).price
                elif topping[:2] == 'TS':
                    elem = Sauce.objects.get(id=topping).price
                else:
                    elem = Cheese.objects.get(id=topping).price
                price += elem
            price += Diameter.objects.get(id=changed_pizza['diameter']).price
            cart_item.price_changed = round(price, 2)
            cart_item.line_total = cart_item.price_changed

        cart_item.quantity += 1

        request.session['totalprice'] += cart_item.line_total
        cart_item.save()

        return HttpResponseRedirect(reverse("home"))

    else:
        pizza = Pizzas.objects.get(id=pizza_id)
        initial_toppings = literal_eval(pizza.ingredients)['toppings']
        initial_crust = literal_eval(pizza.ingredients)['crust']
        initial_sauceBase = literal_eval(pizza.ingredients)['sauceBase']
        initial_diameter = literal_eval(pizza.ingredients)['diameter']

        cheeses = Cheese.objects.all()
        crusts = Crust.objects.all()
        diameters = Diameter.objects.all()
        fish = Fish.objects.all()
        fruits = Fruits.objects.all()
        meats = Meat.objects.all()
        mushrooms = Mushrooms.objects.all()
        sauces = Sauce.objects.all()
        sauceBases = Saucebase.objects.all()
        vegetables = Vegetables.objects.all()

        new_toppings = list(
            itertools.zip_longest(cheeses, fish, fruits, meats, mushrooms,
                                  sauces, vegetables))

        context = {
            'pizza_id': pizza_id,
            'toppings': new_toppings,
            'crusts': crusts,
            'diameters': diameters,
            'sauceBases': sauceBases,
            'initial_toppings': initial_toppings,
            'initial_crust': initial_crust,
            'initial_sauceBase': initial_sauceBase,
            'initial_diameter': initial_diameter,
        }
        template = 'pizzaApp/edit.html'
        return render(request, template, context)
Beispiel #20
0
def add_to_cart(request, slug):
    request.session.set_expiry(120000)

    try:
        the_id = request.session['cart_id']
    except:
        new_cart = Cart()
        new_cart.save()
        request.session['cart_id'] = new_cart.id
        the_id = new_cart.id
    cart = Cart.objects.get(id=the_id)
    try:
        product = Product.objects.get(slug=slug)
    except Product.DoesNotExist:
        pass
    except:
        pass

    product_var = []  #product variation

    if request.method == 'POST':
        qty = request.POST['qty']
        for item in request.POST:
            key = item
            val = request.POST[key]
            try:
                v = Variation.objects.get(product=product,
                                          category__iexact=key,
                                          title__iexact=val)
                product_var.append(v)
                print(v)
            except:
                pass
        cart_item = CartItem.objects.create(cart=cart, product=product)
        if len(product_var) > 0:
            cart_item.variations.add(*product_var)
        cart_item.quantity = qty
        cart_item.save()
        new_total = 0.00
        for item in cart.cartitem_set.all():
            line_total = float(item.product.price) * item.quantity
            new_total += line_total
        request.session['items_total'] = cart.cartitem_set.count()
        print(cart.cartitem_set.count())
        cart_item.line_total = line_total
        print(cart_item.line_total)
        cart_item.save()

        try:
            the_id = request.session['cart_id']
            if the_id:
                cart = Cart.objects.get(id=the_id)
                print(cart)
                print('now it works')

        except:
            the_id = None
            return redirect(reverse('cart'))
        try:
            new_order = Order.objects.get(cart=cart)
        except Order.DoesNotExist:
            new_order = Order()
            new_order.cart = cart
            new_order.user = request.user
            new_order.order_id = id_generator()
            new_order.save()
        except:
            #work on some error message
            message.warning(request, 'You do not have an active order.')
            return redirect(reverse('cart'))
        #assign address
        #run credit card
        if new_order.status == 'Finished':
            del request.session['cart_id']
            del request.session['items_total']
            return redirect(reverse('cart'))

        return redirect(reverse('cart'))

    return redirect(reverse('cart'))