def match_install(install,install1,amount,t): install_res=Order() install_res.trantype=install.trantype install_res.subtrantype=install.subtrantype install_res.amount=amount install_res.userid=install.userid install_res.username=install.username install_res.userid_to=install1.userid install_res.username_to=install1.username install_res.ordercode_to=install1.ordercode install_res.status=1 install_res.confirmtime=install.confirmtime install_res.matchtime = t install_res.createtime = install.createtime install_res.img = install.img install_res.umark = install.umark install_res.save() return install_res
def post(self, request): # 获取到当前用户的id user = request.user # 获取到传入的参数 dict_data = json.loads(request.body.decode()) house_id = dict_data.get('house_id') start_date_str = dict_data.get('start_date') end_date_str = dict_data.get('end_date') # 校验参数 if not all([house_id, start_date_str, end_date_str]): return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) try: start_date = datetime.datetime.strptime(start_date_str, "%Y-%m-%d") end_date = datetime.datetime.strptime(end_date_str, "%Y-%m-%d") assert start_date < end_date, Exception('开始日期大于结束日期') # 计算出入住天数 days = (end_date - start_date).days except Exception as e: logger.error(e) return http.JsonResponse({"errno": RET.PARAMERR, "errmsg": "参数错误"}) # 判断房屋是否存在 try: house = House.objects.get(id=house_id) except Exception as e: logger.error(e) return http.JsonResponse({"errno": RET.NODATA, "errmsg": "房屋不存在"}) # 判断房屋是否是当前登录用户的 if user.id == house.user.id: return http.JsonResponse({ "errno": RET.ROLEERR, "errmsg": "不能订购自己的房间" }) # 查询是否存在冲突的订单 try: filters = { "house": house, "begin_date__lt": end_date, "end_date__gt": start_date } count = Order.objects.filter(**filters).count() except Exception as e: logger.error(e) return http.JsonResponse({"errno": RET.DBERR, "errmsg": "数据库查询错误"}) if count > 0: return http.JsonResponse({ "errno": RET.DATAERR, "errmsg": "房间已经被预定" }) amount = days * house.price # 生成订单的模型 order = Order() order.user = user order.house = house order.begin_date = start_date order.end_date = end_date order.days = days order.house_price = house.price order.amount = amount try: order.save() except Exception as e: logger.error(e) return http.JsonResponse({"errno": RET.DBERR, "errmsg": "数据库保存失败"}) return http.JsonResponse({ "errno": RET.OK, "errmsg": "发布成功", "data": { "order_id": order.pk } })
def checkout(request): # import pdb; pdb.set_trace() cart=Cart(request) if cart.count() == 0: return HttpResponseRedirect('/my-cart') profile = Profile.objects.get(user__username=request.user) form = DeliveryAddress(request.POST or None, instance=profile) delivery_form = DeliveryServiceForm(request.POST or None) tot_weight = request.session['total_weight'] if form.is_valid() and delivery_form.is_valid(): delivery_cost = delivery_form.cleaned_data['service'] tot_vat = request.POST.get('tot_vat') # import pdb; pdb.set_trace() # order data order = Order() order.user = request.user order.amount = float(cart.summary()) + float(delivery_cost.cost) + float(tot_vat) order.vat = float(tot_vat) order.status = 'NEW' order.order_notes = request.POST.get('notes') order.save() # order detail data for ca in cart: orderdetail = OrderDetail() orderdetail.order = order orderdetail.product = ca.product orderdetail.weight = ca.product.weight orderdetail.surcharge = ca.product.surcharge orderdetail.price = ca.unit_price orderdetail.qty = ca.quantity orderdetail.amount = ca.total_price orderdetail.save() # order delivery data orderdelivery = OrderDelivery () orderdelivery.order = order orderdelivery.first_name = form.cleaned_data['first_name'] orderdelivery.last_name = form.cleaned_data['last_name'] orderdelivery.business_name = form.cleaned_data['business_name'] orderdelivery.address_line1 = form.cleaned_data['address_line1'] orderdelivery.address_line2 = form.cleaned_data['address_line2'] orderdelivery.city = form.cleaned_data['city'] orderdelivery.state = form.cleaned_data['state'] orderdelivery.postcode = form.cleaned_data['postcode'] orderdelivery.country = form.cleaned_data['country'] orderdelivery.telephone = form.cleaned_data['telephone'] orderdelivery.service = delivery_cost.title orderdelivery.cost = delivery_cost.cost orderdelivery.weight = tot_weight orderdelivery.save() cart.clear() messages.success(request, "Your order was complete.") return HttpResponseRedirect('/orderreview/'+ order.order_no) try: check_band = PostageCountry.objects.get(country=profile.country) band = check_band.band request.session['vat'] = check_band.vat except: band = '' delivery_form.fields['service'] = forms.ModelChoiceField(required=True, queryset=PostageRate.objects.all().filter(band=band,active=True,weight_start__lte=tot_weight,weight_to__gte=tot_weight), widget=forms.Select(attrs={'class': 'form-control'})) data = {'form':form,'delivery_form':delivery_form} return render_to_response('order/checkout.html', data, context_instance=RequestContext(request, processors=[custom_proc]))
def post(self,request): data_dict = json.loads(request.body.decode()) house_id = data_dict.get('house_id') start_date = data_dict.get('start_date') end_date = data_dict.get('end_date') user = request.user #判断完整 if not all([house_id,start_date,end_date]): return JsonResponse({'errno': 400, 'errmsg': '缺少必传参数'}) #是否存在 try: house = House.objects.get(id=house_id) except Exception as e: return JsonResponse({"errno": 400, "errmsg": "房屋不存在"}) #是否房主 if user.id == house.user.id: return JsonResponse({"errno": 400, "errmsg": "是房主无法预定"}) #跳转页面 #判断是否传入错误数据 try: d1 = datetime.datetime.strptime(start_date, '%Y-%m-%d') d2 = datetime.datetime.strptime(end_date, '%Y-%m-%d') assert d1 < d2, Exception('开始日期大于结束日期') days = (d2 - d1).days if days < 0: return JsonResponse({'errno': 400, 'errmsg': '日期有误'}) except Exception as e: return JsonResponse({'errno': 400, 'errmsg': '参数有误'}) #开启事务 # with transaction.atomic(): # # save_id = transaction.savepoint() # try: amount = days * house.price if days < house.min_days: return JsonResponse({'errno': 400, 'errmsg': '住的时间太短'}) if days > house.max_days: return JsonResponse({'errno': 400, 'errmsg': '住的时间太长'}) order = Order() order.user_id = user.id order.house_id = house.id order.begin_date = d1 order.end_date = d2 order.days = days order.amount = amount order.house_price = house.price order.status = Order.ORDER_STATUS['WAIT_ACCEPT'] order.save() # order = Order.objects.create(user_id=user.id, # house_id=house_id, # begin_date=d1, # end_date=d2, # days=days, # amount=amount, # # # status=Order.ORDER_STATUS['PAID'], # price=house.price, # ) # 判断用户下单的时间段是否有别的订单 count = Order.objects.filter(house_id=house_id, begin_date__lte=end_date, end_date__gte=start_date).count() if count > 0: # 说明房子被别人预定 # transaction.savepoint_rollback(save_id) return JsonResponse({'errno': 400, 'errmsg': '房子已被预定'}) # except Exception as e: # transaction.savepoint_rollback(save_id) # return JsonResponse({'errno': 400, 'errmsg': '下单失败'}) #提交事务 # transaction.savepoint_commit(save_id) return JsonResponse({'errno': 0, 'errmsg': '添加订单成功', "data": {"order_id": order.pk}})