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})
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)
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)
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)
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)
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)