def import_orders(self, filename, user_id, platform): ''' 批量导入订单 :param filename:文件名(绝对路径) :param user_id: 用户id :param platform: 订单平台 :return: ''' try: file = open(filename, 'r') reader = csv.reader(file) orders = [] users = [] for line in reader: if '订单编号' in line: continue order = Order() order.id = line[0].strip('=').strip('"') order.user_id = user_id order.platform = platform order.amount = float(line[6]) order.status = ORDER_STATUS[line[10]] order.add_time = datetime.strptime(line[17], '%Y-%m-%d %H:%M:%S') order.remark = line[23] order.count = int(line[24]) order.shop_id = int(line[25]) orders.append(order) user = Customer() user.username = line[1] user.bid = user_id # 商家id user.alipay = line[2] user.realname = line[12] user.address = line[13] user.mobile = line[16].strip("'") users.append(user) file.close() Order.objects.bulk_create(orders) # 批量导入订单信息 Customer.objects.bulk_create(users) # 批量导入买家信息 os.remove(filename) except Exception as e: return False return True
def create_order(request, product_id): product = Product.objects.get(product_id=product_id) logged_in_user = get_object_or_404(Customer, username=str(request.user)) email = Email.objects.get(email_id=1) gst = GST.objects.get(id=1) if request.method == "POST": obj = Order() obj.order_id obj.user = logged_in_user obj.course = product obj.amount = product.product_price obj.gst_amount = product.product_price * gst.gst obj.final_amount = obj.amount + obj.gst_amount obj.order_date obj.save() template = get_template('orders/orderplaced.html') data = { "order_id": str(obj.order_id), "user": obj.user, "course": obj.course, "order_date":datetime.now().date(), "amount": obj.amount, "gst": obj.gst_amount, "final_amount": obj.final_amount } html = template.render(data) result = BytesIO() pdf = pisa.pisaDocument(BytesIO(html.encode("ISO-8859-1")), result) pdf = result.getvalue() filename = 'Invoice_' + data['order_id'] + '.pdf' template = get_template('orders/orderplaced.html') # Email for order placement email = EmailMessage( email.email_subject, email.email_body.format(obj.user, obj.order_id, obj.course, datetime.now().date()), email.email_sender, [obj.user.email, '*****@*****.**']) email.attach(filename, pdf, 'application/pdf') email.send() messages.info(request,"Course Ordered!!!") return redirect('products:home') return render(request, 'orders/customers/createorder.html', {'product':product})
def save(request): from orders.models import Order import time order = Order() order.customer_name = request.POST.get('customer_name', '') order.customer_email = request.POST.get('customer_email', '') order.customer_mobile = request.POST.get('customer_mobile', '') order.amount = request.POST.get('amount', 0) order.total = request.POST.get('total', 0) order.unit_value = request.POST.get('unit_value', 0) order.status = 'CREATED' order.reference = str(int(time.time())) order.save() return HttpResponseRedirect(reverse('detail', args=(order.id, )))
def create(self, validated_data): assistants_data = validated_data.pop('assistants') student = self.context.get('view').student payment = self.context.get('payment') validated_data.update({ 'student': student, 'status': self.context.get('status'), 'payment': self.context.get('payment'), 'coupon': self.context.get('coupon'), }) order = Order(**validated_data) calendar = order.calendar try: organizer_regimen = calendar.activity.organizer.bank_info.regimen \ if calendar.activity.organizer.bank_info else None except OrganizerBankInfo.DoesNotExist: organizer_regimen = None package_id = self.context.get('request').data.get('package') package = calendar.packages.get(id=package_id) if package_id else None base_amount = package.price if package \ and calendar.activity.is_open else calendar.session_price order.package_quantity, order.package_type = [package.quantity, package.type] if package \ else [None, None] order.amount = base_amount * order.quantity # if not calendar.is_free: is_free = calendar.is_free fee_detail = Order.get_fee_detail(order, is_free, payment, organizer_regimen) order.fee_detail = fee_detail order.fee = fee_detail.get('total_fee') order.save() for assistant in assistants_data: instance = Assistant(order=order, **assistant) instance.save() return order
def post(self, request): # 获取当前用户 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.PARAMERR, 'errmsg': '房屋不存在' }) # 判断房屋是否是用户登陆的 if user.id == house.user.id: return http.JsonResponse({ 'errno': RET.PARAMERR, '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.PARAMERR, 'errmsg': '数据库查询错误' }) if count > 0: return http.JsonResponse({ 'errno': RET.PARAMERR, '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 import_orders(self, filename, user_id, platform): ''' 批量导入订单 :param filename:文件名(绝对路径) :param user_id: 用户id :param platform: 订单平台 :return: ''' try: file = open(filename, 'r') reader = csv.reader(file) orders = [] customers = [] usernames = [] ordernos = [] for line in reader: if '订单编号' in line: continue customer = Customer() customer.username = line[1] customer.seller_id = user_id # 商家id customer.alipay = line[2] customer.realname = line[12] customer.address = line[13] customer.mobile = line[16].strip("'") usernames.append(customer.username) customers.append(customer) order = Order() order.id = line[0].strip('=').strip('"') order.seller_id = user_id order.customer_name = customer.username order.platform = platform order.amount = float(line[6]) order.status = ORDER_STATUS[line[10]] order.add_time = datetime.strptime(line[17], '%Y-%m-%d %H:%M:%S') order.remark = line[23] order.count = int(line[24]) order.shop_id = int(line[25]) ordernos.append(order.id) orders.append(order) file.close() os.remove(filename) # 排除已存在的会员 exists_usernames = Customer.objects.filter(seller_id=user_id, username__in=usernames) \ .values_list('username', flat=True) exists_usernames = list(exists_usernames) customers = list( filter(lambda u: u.username not in exists_usernames, customers)) # 排除已存在的订单 exists_ordernos = Order.objects.filter(seller_id=user_id, id__in=ordernos) \ .values_list('id', flat=True) exists_ordernos = list(exists_ordernos) orders = list(filter(lambda o: o.id not in exists_ordernos, orders)) customer_ids = list(Customer.objects.values_list('id', flat=True)) if len(customer_ids) == 0: customer_ids.append(0) if len(customers) > 0: Customer.objects.bulk_create(customers) # 批量导入买家信息 new_customers = Customer.objects.exclude( id__in=customer_ids).values('id', 'username') for order in orders: for customer in new_customers: if order.customer_name == customer['username']: order.customer_id = customer['id'] if len(orders) > 0: Order.objects.bulk_create(orders) # 批量导入订单信息 msg = '成功导入订单:{0}条 成功导入会员:{1}位'.format(len(orders), len(customers)) return True, msg except Exception as e: return False, '导入失败'
from urllib.request import urlopen from xml.etree import cElementTree as et from orders.models import Order url = 'http://test.lengow.io/orders-test.xml' dom = et.parse(urlopen(url)) root = dom.getroot() for node in root[1]: order = Order() for element in node: if element.tag =='marketplace' and element.tag != 'None': order.marketplace = element.text if element.tag == 'order_amount' and element.tag != 'None': order.amount = float(element.text) if element.tag == 'order_shipping' and element.tag != 'None': order.shipping = float(element.text) if element.tag == 'billing_address': for child in element: if child.tag == 'billing_address' and child.text != 'None': order.address = child.text if child.tag == 'billing_lastname' and child.text != 'None': order.last_name = child.text if child.tag == 'billing_city' and child.text != 'None': order.city = child.text order.save()