예제 #1
0
파일: order.py 프로젝트: zlisaiki/zss
    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})
예제 #3
0
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, )))
예제 #4
0
    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
예제 #5
0
 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
         }
     })
예제 #6
0
    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, '导入失败'
예제 #7
0
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()