Exemplo n.º 1
0
def handle_promo():
    """Handle Promo Code."""
    data = request.get_json()
    code = data.get('code')
    user = data['user'] if data.get('user') else {}
    user = User.get(user['id']) if user.get('id') is not None else None
    if code is not None:
        if code == '123456':
            return jsonify({
                'must_pay': True,
                'six_month': False,
                'twenty_five': False
            })
        elif code == 'test25':
            return jsonify({
                'must_pay': True,
                'six_month': False,
                'twenty_five': True
            })
        elif user:
            code = PromoCode.query.filter_by(code=code.lower(),
                                             active=True).first()
            if code:
                if code.prepaid and (not code.single_use or not code.redeemed):
                    if user.stripe_subscription:
                        stripe.Subscription.delete(user.stripe_subscription)

                    user.activate_promo(code.id)
                    code.redeemed = True
                    code.active = not code.single_use
                    db.session.commit()

                    Activity.redeem_promo(user.id, code.fundraiser_id
                                          is not None)

                    return jsonify({
                        'must_pay': False,
                        'six_month': code.six_month,
                        'twenty_five': code.twenty_five
                    })
                elif not code.prepaid and (not code.single_use or
                                           (not code.redeemed)):
                    activity = Activity.query.filter_by(
                        user_id=user.id, code=code.code).first()
                    if activity is None:
                        Activity.redeem_promo(user.id, code.code)
                    return jsonify({
                        'must_pay': True,
                        'six_month': code.six_month,
                        'twenty_five': code.twenty_five
                    })
                else:
                    return jsonify(
                        {'error': 'This code has already been redeemed.'})
    return jsonify({'error': 'Invalid: Please check your code and try again.'})