예제 #1
0
    def get(self):
        form = CouponForm()
        if request.args.get('status') == str(COUPON_STATUS["ALL"]):
            coupons = list(
                Information.objects(user_id=current_user.id).first().coupon)
            for i in range(len(coupons) - 1, -1, -1):
                if coupons[i].status == COUPON_STATUS[
                        "EXPIRED"] or Order.objects(
                            buyer_id=current_user.id,
                            coupon_id=coupons[i].id,
                            status__ne=ORDER_STATUS["CANCEL"]).first() != None:
                    del coupons[i]
            status = COUPON_STATUS["ALL"]
        else:
            coupons = Coupon.objects(
                id__nin=[
                    coupon.id for coupon in Information.objects(
                        user_id=current_user.id).first().coupon
                ],
                begin_time__lte=datetime.datetime.utcnow() +
                datetime.timedelta(hours=8),
                status=COUPON_STATUS["ACTIVE"])
            status = None

        return render_template('user/coupon/list.html',
                               status=status,
                               coupons=coupons,
                               form=form,
                               COUPON_STATUS=COUPON_STATUS)
예제 #2
0
def validate_coupon(form, coupon_id):
    coupon = Coupon.objects(id=coupon_id.data,
                            begin_time__lte=datetime.datetime.utcnow() +
                            datetime.timedelta(hours=8),
                            status=COUPON_STATUS["ACTIVE"]).first()

    if coupon == None:
        raise ValidationError('此優惠券不存在')
    elif Information.objects(user_id=current_user.id,
                             coupon__contain=coupon).first() != None:
        raise ValidationError('此優惠券已兌換')
예제 #3
0
    def post(self):
        form = CouponForm()

        if form.validate_on_submit():
            information = Information.objects(user_id=current_user.id).first()
            coupon = Coupon.objects(id=form.coupon_id.data).first()
            information.coupon.append(coupon)
            information.save()

            return redirect(url_for('user.coupon',
                                    status=COUPON_STATUS["ALL"]))

        return self.get()
예제 #4
0
    def get(self):
        addForm = CouponForm()
        form = CouponManageForm()

        coupons = Coupon.objects()
        status = COUPON_STATUS["ALL"]
        if request.args.get("status") == str(COUPON_STATUS["ACTIVE"]):
            coupons = Coupon.objects(status=COUPON_STATUS["ACTIVE"])
            status = COUPON_STATUS["ACTIVE"]
        elif request.args.get("status") == str(COUPON_STATUS["NO_ACTIVE"]):
            coupons = Coupon.objects(status=COUPON_STATUS["NO_ACTIVE"])
            status = COUPON_STATUS["NO_ACTIVE"]
        elif request.args.get("status") == str(COUPON_STATUS["EXPIRED"]):
            coupons = Coupon.objects(status=COUPON_STATUS["EXPIRED"])
            status = COUPON_STATUS["EXPIRED"]

        return render_template('admin/management/coupon.html',
                               addForm=addForm,
                               form=form,
                               coupons=coupons,
                               status=status,
                               COUPON_STATUS=COUPON_STATUS)
예제 #5
0
    def post(self):
        form = CartForm()
        checkedProducts = request.form.getlist("productCheck")

        information = Information.objects(user_id=current_user.id).first()
        products = Product.objects(id__in=checkedProducts,
                                   seller_id__ne=current_user.id,
                                   status=0,
                                   bidding=False)
        total_price = 0
        coupon_dict = dict()
        for product in products:
            try:
                coupon = Coupon.objects(
                    id=request.form.get(str(product.id))).first()
            except:
                coupon = None
            if coupon in information.coupon and Order.objects(
                    buyer_id=current_user.id,
                    coupon_id=coupon.id,
                    status__ne=ORDER_STATUS["CANCEL"]).first() == None:
                total_price += max(
                    0, int(product.price * product.discount - coupon.discount))
                coupon_dict[product.id] = coupon.id
            else:
                total_price += int(product.price * product.discount)
                coupon_dict[product.id] = None

        if current_user.hicoin >= total_price:
            current_user.hicoin -= total_price
            current_user.save()
            for product in products:
                Order(buyer_id=current_user.id,
                      product_id=product.id,
                      coupon_id=coupon_dict[product.id]).save()
                product.status = 1
                product.save()
                information.cart.remove(product)
                information.save()

        return redirect(url_for('user.purchase_list', status='4'))
예제 #6
0
def check_time():
    app.config['DISCOUNT_COUNTER'] -= 1
    if app.config['DISCOUNT_COUNTER'] <= 0:
        app.config['DISCOUNT_COUNTER'] = 3600
        products = Product.objects(bidding=False,
                                   status=PRODUCT_STATUS["SELLING"])
        for product in products:
            product.discount = 1
            product.save()
        if len(list(products)) <= 4:
            for product in products:
                product.discount = 0.85
                product.save()
        else:
            discount_list = []
            while len(discount_list) < 4:
                products = list(products)
                idx = random.randint(0, len(products) - 1)
                if idx not in discount_list:
                    products[idx].discount = 0.85
                    products[idx].save()
                    discount_list.append(idx)

    products = Product.objects(status=PRODUCT_STATUS["SELLING"],
                               bid__due_time__lte=datetime.datetime.utcnow() +
                               datetime.timedelta(hours=8))

    for product in products:
        if product.bid.buyer_id is None:
            product.status = PRODUCT_STATUS["REMOVE"]
            product.save()
            sellBiddingNtf(product, PRODUCT_STATUS["REMOVE"])
        else:
            user = User.objects(id=product.bid.buyer_id.id).first()
            product.status = PRODUCT_STATUS["SOLD"]
            user.hicoin -= product.bid.now_price
            Order(buyer_id=user.id,
                  product_id=product.id,
                  status=ORDER_STATUS["TRANSFERING"]).save()
            user.save()
            product.save()
            soldProduct(product, ORDER_STATUS["TRANSFERING"])
            boughtNtf(product, ORDER_STATUS["TRANSFERING"])

    orders = Order.objects(status=ORDER_STATUS["RECEIPTING"],
                           transfer_time__lte=datetime.datetime.utcnow() +
                           datetime.timedelta(hours=-64))
    for order in orders:
        order.finish_time = datetime.datetime.utcnow() + datetime.timedelta(
            hours=8)
        order.buyer_rating = 5
        order.buyer_comment = ""
        order.status = ORDER_STATUS["COMPLETE"]
        user = User.objects(id=order.product_id.seller_id.id).first()
        if order.product_id.bidding is True:
            user.hicoin += int(order.product_id.bid.now_price * 0.88)
        else:
            user.hicoin += int(order.product_id.price * 0.88)
        order.save()
        user.save()
        soldProduct(order.product_id, ORDER_STATUS["COMPLETE"])
        boughtNtf(order.product_id, ORDER_STATUS["COMPLETE"])

    coupons = Coupon.objects(status__ne=COUPON_STATUS["EXPIRED"],
                             due_time__lte=datetime.datetime.utcnow() +
                             datetime.timedelta(hours=8))
    for coupon in coupons:
        coupon.status = COUPON_STATUS["EXPIRED"]
        coupon.save()
예제 #7
0
def get_coupon():
    form = Count().validate_for_api()
    coupon = Coupon.get_all_coupon(form.count.data, form.page.data)
    return jsonify(coupon)
예제 #8
0
def coupon_acquire():
    """获取优惠券"""
    g.page_type = 'form'

    form = request.form
    mobile = form.get('mobile', '').strip()
    cb_id = toint(form.get('cb_id', '0'))
    coupon_id = toint(form.get('coupon_id', '0'))

    if cb_id <= 0:
        return u'参数出错'

    coupon_batch = CouponBatch.query.get(cb_id)
    if coupon_batch is None:
        return u'优惠券批次不存在'

    mobile = mobile.replace('\r', '')
    mobile_list = mobile.split('\n')
    index, mobile_count = 0, len(mobile_list)
    for m in mobile_list:
        if not ismobile(m):
            log_info('[GiveCoupon] mobile is not correct. mobile:%s' % m)

        user = User.query.filter(User.mobile == m).first()
        if user is None:
            log_info('[GiveCoupon] user not found. mobile:%s' % m)
            continue

        # once = User.query.filter(User.uid == Coupon.uid).\
        #         filter(User.mobile == m).\
        #         filter(Coupon.cb_id == cb_id).first()

        # if once is not None:
        #     log_info('[GiveCoupon] user can only get coupon_banch for once. mobile:%s' % m)
        #     continue

        index += 1
        log_info('[GiveCoupon] %d/%d cb_id:%d, mobile:%s' %
                 (index, mobile_count, cb_id, m))

        coupon_batch.give_num += 1
        coupon_batch.update_time = int(time.time())

        begin_time, end_time = coupon_batch.begin_time, coupon_batch.end_time
        if coupon_batch.valid_days > 0:
            begin_time = get_today_unixtime()
            end_time = begin_time + coupon_batch.valid_days * 24 * 60 * 60

        coupon = Coupon()
        coupon.is_valid = 1
        coupon.add_time = int(time.time())
        coupon.uid = user.uid
        coupon.begin_time = begin_time
        coupon.end_time = end_time
        coupon.cb_id = coupon_batch.cb_id
        coupon.coupon_name = coupon_batch.coupon_name
        coupon.coupon_amount = coupon_batch.coupon_amount
        coupon.limit_amount = coupon_batch.limit_amount
        coupon.limit_goods = coupon_batch.limit_goods
        coupon.limit_goods_name = coupon_batch.limit_goods_name
        coupon.coupon_from = coupon_batch.coupon_from
        db.session.add(coupon)
        if index % 50 == 0:
            db.session.commit()

        # 发送推送
        xps = XingePushService()
        xps.push_user(user.uid,
                      u'101计划',
                      u'系统赠送您一张' + coupon_batch.coupon_name, {
                          'trans_id': 0,
                          'trans_type': 'me'
                      },
                      client_flag='USER')

    if index % 50 != 0:
        db.session.commit()

    return redirect(url_for('coupon.user_coupon'))
예제 #9
0
    def post(self):
        addForm = CouponForm()
        form = CouponManageForm()

        coupons = Coupon.objects()
        status = COUPON_STATUS["ALL"]
        if request.args.get("status") == str(COUPON_STATUS["ACTIVE"]):
            coupons = Coupon.objects(status=COUPON_STATUS["ACTIVE"])
            status = COUPON_STATUS["ACTIVE"]
        elif request.args.get("status") == str(COUPON_STATUS["NO_ACTIVE"]):
            coupons = Coupon.objects(status=COUPON_STATUS["NO_ACTIVE"])
            status = COUPON_STATUS["NO_ACTIVE"]
        elif request.args.get("status") == str(COUPON_STATUS["EXPIRED"]):
            coupons = Coupon.objects(status=COUPON_STATUS["EXPIRED"])
            status = COUPON_STATUS["EXPIRED"]

        if addForm.validate_on_submit():
            coupon = Coupon(title=addForm.title.data,
                            detail=addForm.detail.data,
                            discount=addForm.discount.data,
                            begin_time=addForm.begin_time.data,
                            due_time=addForm.due_time.data)
            coupon.save()
            return redirect(url_for("admin.coupon"))

        if form.validate_on_submit():
            coupon = Coupon.objects(id=form.coupon_id.data,
                                    due_time__gte=datetime.datetime.utcnow() +
                                    datetime.timedelta(hours=8)).first()

            if coupon == None:
                return "error"
            elif coupon.status == COUPON_STATUS["ACTIVE"]:
                coupon.status = COUPON_STATUS["NO_ACTIVE"]
                coupon.save()
                return "發放"
            elif coupon.status == COUPON_STATUS["NO_ACTIVE"]:
                coupon.status = COUPON_STATUS["ACTIVE"]
                coupon.save()
                return "停發"
            else:
                return "error"

        return render_template('admin/management/coupon.html',
                               addForm=addForm,
                               form=form,
                               coupons=coupons,
                               status=status,
                               COUPON_STATUS=COUPON_STATUS)