def get_cart(request): message = '' if request.POST: # 下单食物数量减少,创建order,购物车清空 cart_id = request.session.get('CART-ID') # 下单的食物count数量减少 items = models.Item.objects.filter(cart_id=cart_id).values( 'quantity', 'unit_price', 'object_id') total_price = 0 food_list = [] rest_set = set() # check if there more than one restaurant for item in items: food_id = item['object_id'] total_price += item['quantity'] * item['unit_price'] food = Food.objects.get(food_id=food_id) rest_set.add(food.RName) if len(rest_set) != 1: message = '商家必须相同' else: for item in items: food_id = item['object_id'] food = Food.objects.get(food_id=food_id) food.count -= 1 food_list.append(food) food.save() # 成功下单的cart cart = models.Cart.objects.get(id=cart_id) cart.checked_out = True cart.save() # 创建order new_order = Order() customer_id = Customer.objects.get( AName=request.session['user_name']) new_order.total_price = total_price new_order.save() new_order.foods.add(*food_list) new_order.restaurant_id = list(rest_set)[0] new_order.customer_id = customer_id new_order.address = Customer.objects.filter( AName=request.session['user_name']).values( 'address')[0]['address'] new_order.save() # 购物车清空 request.session['CART-ID'] = False new_cart = Cart(request) return redirect('/index/customer_order/') context = {'cart': Cart(request), 'message': message} return render(request, 'cart.html', context=context)
def make_order_view(request): try: cart_id = request.session['cart_id'] cart = Cart.objects.get(id=cart_id) request.session['total'] = cart.items.count() except: cart = Cart() cart.save() cart_id = cart.id request.session['cart_id'] = cart_id cart = Cart.objects.get(id=cart_id) comp_id = 0 for i in cart.items.all(): comp_id = i.product.owner.id break form = OrderForm(request.POST or None) if form.is_valid(): name = form.cleaned_data['name'] phone = form.cleaned_data['phone'] comments = form.cleaned_data['comments'] new_order = Order() new_order.user = request.user new_order.owner = Company.objects.get(id=comp_id) new_order.save() new_order.items.add(cart) new_order.name = name new_order.phone = phone new_order.comments = comments new_order.total = cart.cart_total new_order.save() slug = slugify( translit(unicode('заказ' + str(new_order.id)), reversed=True)) new_order.slug = slug new_order.save() path = 'media/files/' + new_order.slug + '.xlsx' new_order.path = path new_order.save() del request.session['cart_id'] del request.session['total'] return HttpResponseRedirect(reverse('thanks'))
def BasketResidentConvert(request, pk): product = Product.objects.all() instance = get_object_or_404(Resident, pk=pk) order_list = BasketResident.objects.filter(user_basket=instance) verifpoint = request.POST.get('verifpoint') date = datetime.date.today() start_week = date - datetime.timedelta(date.weekday()) end_week = start_week + datetime.timedelta(7) family = Resident.objects.filter(badge=instance.badge) pklist = [] for f in family: pklist.append(f.id) entries = Order.objects.filter(date__range=[start_week, end_week], order_user__in=pklist) point = 0 for p in entries: point += p.points pts = 0 can_save = True error = [] if not BasketResident.objects.filter(user_basket=instance).exists(): error.append("panier vide") can_save = False else: for p in order_list: pts += p.product.prod_limit * p.qty if p.qty > p.product.prod_stock: error.append("Stock insuffisant de : " + p.product.prod_name + " - Stock restant :" + str(p.product.prod_stock)) p.save() can_save = False if verifpoint: instance = get_object_or_404(Resident, pk=pk) family = Resident.objects.filter(badge=instance.badge) familynumber = family.count() user_points = get_object_or_404( LimitFamily, compo_family=str(familynumber)).point_by_week restant = user_points - point if pts > restant: error.append("limite de point dépassé, point restant :" + str(restant)) can_save = False else: pts = 0 if can_save: #for p in order_list : id = Order.objects.latest('id') title = "AMC_Shop_" + datetime.datetime.now().strftime( "%d%m%Y") + "_" + str((id.id + 1)) instance_order = Order(order_user=instance, title=title, points=pts) instance_order.save() for p in order_list: instance_item = OrderItem(product=p.product, order=instance_order, qty=p.qty) instance_item.save() p.delete() responseData = { 'error': error, 'verifpoint': verifpoint, #'entries':list(entries.values()), 'point': point, } return JsonResponse(responseData)