예제 #1
0
def order_refund_by_admin(order_id):
    order = Order.find_by_id(order_id)

    if not order:
        return render.not_found()

    reason = json.loads(request.data).get('reason', CANCEL_REASON_ADMIN)
    refund_money = json.loads(request.data).get('money')

    if refund_money is None:
        return render.error('missing argument: money')

    refund_money = int_money(refund_money)
    if refund_money == 0:
        return render.error('Refund money can not be 0')

    remained_money = order.cash_amount - Refund.order_refund_total(order.id)
    if refund_money > remained_money:
        return render.error('not enough money to refund')

    # refund
    if not refund_order(order, refund_money, reason, [], charge):
        return render.error('refund error')

    return render.ok('refund successfully')
예제 #2
0
def orders_index():
    type = request.args.get('type', None)
    page = int(request.args.get('page', 0))
    count = abs(int(request.args.get('count', 0)))
    offset = count * (page - 1)
    if offset < 0:
        offset = 0

    orders = Order.select().order_by(Order.id.desc())
    if (type == 'paid'):
        orders = orders.where(Order.status == Order.PAID, Order.canceled == False)
    elif (type == 'confirmed'):
        orders = orders.where(Order.status == Order.CONFIRMED, Order.canceled == False)
    elif (type == 'delivering'):
        orders = orders.where(Order.status == Order.IN_DELIVERY, Order.canceled == False)
    elif (type == 'delivered'):
        orders = orders.where(Order.status == Order.DELIVERED, Order.canceled == False)
    elif (type == 'canceled'):
        orders = orders.where(Order.canceled == True)

    total_count = orders.count()

    if (type != 'confirmed'):
        orders = orders.limit(count).offset(offset)

    result = []
    for o in orders:
        result.append(o.details())

    return render.ok({'orders': result, 'total': total_count, 'classfied': classified_count()})
예제 #3
0
def order_confirm_by_admin(order_id):
    order = Order.find_by_id(order_id)
    if not order:
        return render.not_found()
    order.confirm()

    return render.ok('CONFIRMED')
예제 #4
0
def order_start_deliver(order_id):
    order = Order.find_by_id(order_id)
    if not order:
        return render.not_found()
    try:
        order.depart()
    except:
        return render.error("not able to depart")
    return render.ok('IN_DELIVERY')
예제 #5
0
def order_cancel_by_admin(order_id):
    order = Order.find_by_id(order_id)

    if not order:
        return render.not_found()

    reason = json.loads(request.data).get('reason', CANCEL_REASON_ADMIN)
    cancel_order(order, charge, reason)

    return render.ok()
예제 #6
0
def order_receive_express(order_id):
    order = Order.find_by_id(order_id)
    if not order:
        return render.not_found()
    # code = json.loads(request.data).get('code', None)

    # TODO: when need authorize order.code, change it.
    # if code == order.code:
    if True:
        order.delivered()
        return render.ok('DELIVERED')
    else:
        return render.error('wrong code')
예제 #7
0
def orders_of_days():
    #    data = json.loads(request.data or '{}')
    #    if data is None:
    #        return render.error("Nothing input")
    #    if 'days' not in data:
    #        return render.error("Invalid format")

#    duration = abs(int(data.get('days', 0)))

    duration = abs(int(request.args.get('days', 0)))

#    orders = Order.select().where(Order.status >= Order.PAID, Order.canceled == False, (datetime.datetime.now()  - Order.create_time).days == duration)

    today = datetime.date.today()
    now = datetime.datetime.now()
    today_zero_time = datetime.datetime(now.year,now.month,now.day,0,0,0)
    #datetime.datetime.strftime(today, '%Y-%m-%d %H:%M:%S')

    orders = Order.select().where(Order.status >= Order.PAID, Order.canceled == False, Order.create_time>= (today_zero_time-datetime.timedelta(days = duration)) )

    re = []
    for n in range(0,duration):
        if duration == 0:
            duration_orders = orders
        else:
            duration_orders = orders.where( Order.create_time>= (today_zero_time-datetime.timedelta(days = n)), Order.create_time < (today_zero_time-datetime.timedelta(days = n-1)) )
        if duration_orders is None:
            continue

        count = duration_orders.count()

        total_price = 0
        for o in duration_orders:
            total_price += o.cash_amount

#total_price = sum(duration_orders.items.cash_amount)
        result = {}
        result['date'] = today-datetime.timedelta(days = n)
        result['count'] = count
        result['total_price'] = total_price
        re.append(result)

    return render.ok(re)
예제 #8
0
def servers_index():

    return render.ok()
예제 #9
0
def order_show(order_id):
    order = Order.find_by_id(order_id)
    return render.ok(order.details())