Exemplo n.º 1
0
def order_create(request, product_id):
    cart = Cart(request)
    categories = Category.objects.all()
    product = get_object_or_404(Product, id=product_id)
    crypto_data = crypto_currencies()
    if request.user.is_authenticated:
        if request.method == 'POST':
            form = OrderCreateForm(request.POST)
            if form.is_valid():
                print("addrr===>> ", form['address'].value())
                order = Order.objects.create(
                    user=request.user,
                    address=form['address'].value()
                )
                print("----->>> ", order)

                OrderItem.objects.create(
                    author=request.user,
                    order=order,
                    product=product,
                    price=cart.get_item_price(product_id),
                    quantity=cart.get_item_quantity(product_id)
                )

                product = Product.objects.get(id=product_id)
                stock = product.stock - cart.get_item_quantity(product_id)
                Product.objects.filter(id=product_id).update(stock=stock)
                return HttpResponseRedirect(reverse('orders:pay', kwargs={'order_id': order.id, 'product_id': product_id}))
        else:
            form = OrderCreateForm()
        context = {
            'form': form,
            'categories': categories,
            'crypto_data': crypto_data,
            'product_id': int(product_id)
        }
        return render(request, 'orders/order/create.html', context)
    elif not request.user.is_authenticated:
        if request.method == 'POST':
            form = SignUpForm(request.POST)
            if form.is_valid():
                form.save()
                username = form.cleaned_data.get('username')
                raw_password = form.cleaned_data.get('password1')
                user = authenticate(username=username, password=raw_password)
                login(request, user)
                return redirect('orders:order_create')
            else:
                form = SignUpForm()
                return render(request, 'orders/order/create.html', {'form': form})
        else:
            form = SignUpForm()
            return render(request, 'orders/order/create.html', {'form': form})
Exemplo n.º 2
0
def search(request):
    if request.method == 'GET':
        message = len(Message.objects.filter(check=False))
        price = 0
        if request.GET.get('price'):
            price = int(request.GET.get('price'))

        country = request.GET.get('country', None)
        category = request.GET.get('category', None)
        category_id = Category.objects.filter(name=category)
        products = {}

        if price > 0 and category is '' and country is '':
            products = Product.objects.filter(Q(price__gte=price))
        elif category and price is 0 and country is '':
            print("===================================")
            products = Product.objects.filter(category__in=category_id)
        elif country and price is 0 and category is '':
            products = Product.objects.filter(country=country)
        elif price > 0 and category and country is '':
            products = Product.objects.filter(Q(price__gte=price),
                                              category__in=category_id)
        elif country and price > 0 and category is '':
            products = Product.objects.filter(Q(price__gte=price),
                                              country=country)
        elif country and category and price is 0:
            products = Product.objects.filter(country=country,
                                              category__in=category_id)
        elif price > 0 and category and country:
            products = Product.objects.filter(Q(price__gte=price),
                                              category__in=category_id,
                                              country=country)
        elif price is 0 and category is '' and country is '':
            products = Product.objects.all

        categories = Category.objects.all()
        # cryptocurrenies Data
        crypto_data = crypto_currencies()

        context = {
            'category': category,
            'categories': categories,
            'products': products,
            'crypto_data': crypto_data,
            'countries': countries,
            'new_message': message
        }
    else:
        raise Exception("405")
    return render(request, 'main/product/list.html', context)
Exemplo n.º 3
0
def cart_detail(request):
    cart = Cart(request)
    categories = Category.objects.all()
    crypto_data = crypto_currencies()
    message = len(Message.objects.filter(check=False))
    for item in cart:
        item['update_quantity_form'] = CartAddProductForm(
            initial={
                'quantity': item['quantity'],
                'update': True
            })
    context = {
        'cart': cart,
        'categories': categories,
        'crypto_data': crypto_data,
        'new_message': message
    }
    return render(request, 'cart/detail.html', context)
Exemplo n.º 4
0
def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)
    message = len(Message.objects.filter(check=False))
    #message = len(Message.objects.all())
    form = LoginForm
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = Product.objects.filter(category=category)

    #cryptocurrenies Data
    crypto_data = crypto_currencies()

    ratings = {}
    sold_cnt = {}
    for product in products:
        rating_total = 0
        rating_count = 0
        for order_item in product.order_items.filter(order__paid='8'):
            for rating in order_item.ratings.all():
                rating_total += rating.total * order_item.quantity
                rating_count += rating.count * order_item.quantity
        ratings[product.
                id] = 0 if rating_count == 0 else rating_total / rating_count
        sold_cnt[product.id] = product.order_items.filter(
            order__paid='8').aggregate(Sum('quantity'))['quantity__sum']
        sold_cnt[product.id] = 0 if sold_cnt[product.id] is None else sold_cnt[
            product.id]

    context = {
        'category': category,
        'categories': categories,
        'products': products,
        'ratings': ratings,
        'sold_cnt': sold_cnt,
        # 'crypto_data': crypto_data,
        'countries': countries,
        'form': form,
        'new_message': message,
    }

    return render(request, 'main/product/list.html', context)
Exemplo n.º 5
0
def product_detail(request, id, slug):
    product = get_object_or_404(Product, id=id, slug=slug, available=True)
    cart_product_form = CartAddProductForm()
    product_stock = cart_product_form.get_product_stock(id)
    categories = Category.objects.all()
    crypto_data = crypto_currencies()
    message = len(Message.objects.filter(check=False))

    product_vendor = Product.objects.values('productOwnerID',
                                            'country').get(id=id)
    country = countries.name(product_vendor.get('country'))
    product_vendor = product_vendor.get('productOwnerID')

    vendor = User.objects.values('id', 'username').filter(id=product_vendor,
                                                          vendor=True)
    term_conditions = VendorTerm.objects.filter(userId=product_vendor)

    rating_total = 0
    rating_count = 0
    for order_item in product.order_items.filter(order__paid='8'):
        for rating in order_item.ratings.all():
            rating_total += rating.total * order_item.quantity
            rating_count += rating.count * order_item.quantity

    context = {
        'product': product,
        'categories': categories,
        'cart_product_form': cart_product_form,
        'product_stock': product_stock,
        'vendor': vendor[0],
        'avg_rating': 0 if rating_count == 0 else rating_total / rating_count,
        'country': country,
        'crypto_data': crypto_data,
        'new_message': message,
        'term_conditions': term_conditions[0]
    }
    return render(request, 'main/product/detail.html', context)
Exemplo n.º 6
0
def vendor_public_profile(request, vendor_id=None):
    if request.method == 'POST':
        if VendorFavorite.objects.filter(
                Q(vendor_id=vendor_id) & Q(user=request.user)).count() == 0:
            obj = VendorFavorite()
            obj.vendor_id = vendor_id
            obj.user_id = request.user.id
            obj.save()

            vendor_user = User.objects.filter(Q(id=vendor_id))
            msg = "%s was added to my favorite" % vendor_user[0].username
            messages.success(request, msg)
        else:
            vendor_user = User.objects.filter(Q(id=vendor_id))
            msg = "%s was already added to my favorite" % vendor_user[
                0].username
            messages.success(request, msg)

    vendor_products = Product.objects.filter(productOwnerID=vendor_id)
    rating_dict = {}
    rating_total_sum = 0
    rating_count_sum = 0
    sold_cnt = {}
    sold_cnt_sum = 0

    for product in vendor_products:
        rating_dict[product.name] = product
        rating_total = 0
        rating_count = 0
        for order_item in product.order_items.filter(order__paid='8'):
            for rating in order_item.ratings.all():
                rating_total += rating.total * order_item.quantity
                rating_count += rating.count * order_item.quantity

        rating_total_sum += rating_total
        rating_count_sum += rating_count
        rating_dict[
            product.
            name] = 0 if rating_count == 0 else rating_total / rating_count
        sold_cnt[product.id] = product.order_items.filter(
            order__paid='8').aggregate(Sum('quantity'))['quantity__sum']
        sold_cnt[product.id] = 0 if sold_cnt[product.id] is None else sold_cnt[
            product.id]
        sold_cnt_sum += sold_cnt[product.id]

    vendor_user = VendorUser.objects.filter(id=vendor_id)
    vendor_term = VendorTerm.objects.filter(userId=vendor_id)
    crypto_data = crypto_currencies()

    context = {
        "vendor_user":
        vendor_user[0],
        "vendor_term":
        vendor_term[0].description,
        "vendor_rating":
        rating_total_sum / rating_count_sum if rating_count_sum != 0 else 0,
        "vendor_sold_count":
        sold_cnt_sum,
        "total_trusts":
        vendor_user[0].total_trusts(),
        "total_untrusts":
        vendor_user[0].total_untrusts(),
        "rating_dict":
        rating_dict,
        "crypto_data":
        crypto_data
    }
    return render(request, 'profile/vendor_public_profile.html', context)