def add_subscription_type(): json_dict = request.json if 'plan' not in json_dict: return Responses.OPERATION_FAILED(Messages.NEEDED_FIELD_EMPTY) if 'price' not in json_dict: return Responses.OPERATION_FAILED(Messages.NEEDED_FIELD_EMPTY) existing_item = SubscriptionType.get_items(plan=json_dict['plan']) if len(existing_item) > 0: return Responses.OBJECT_EXIST() item = SubscriptionType(json_dict['plan'], json_dict['price']) error = item.insert_as_new_item(json_dict, ['plan', 'price']) if len(error) > 0: return Responses.OPERATION_FAILED(error) return res(item.as_dict())
def confirm_user_subscription(token): secret_key = ConfigValues.get_config_value( 'EMAIL_PASSWORD_RESET_SECRET_KEY') confirm_serializer = URLSafeTimedSerializer(secret_key) try: email = confirm_serializer.loads(token, salt='email-confirm', max_age=3600) except SignatureExpired: return Responses.TOKEN_EXPIRED() json_dict = request.json email = json_dict['email'] user = User.get_user_by_email(email) if not user: return Responses.NOT_EXIST() subscription_type = json_dict['subscription_type'] subscription = SubscriptionType.get_items(subscription_type) start_date = date.today() end_date = start_date + relativedelta(months=int(1)) #end_date = start_date + relativedelta(months=int(subscription.plan)) user_subscription = UserSubscription(user.id, end_date, subscription.id) error = user_subscription.update() if len(error) > 0: Responses.OPERATION_FAILED() user.subscribed = True user_error = user.update() if len(user_error) > 0: Responses.OPERATION_FAILED() return Responses.SUCCESS()
def get_subscription_types(plan=None): """ get_subscription_types gets all subscription types """ page, per_page = get_page_from_args() items = SubscriptionType.get_items(plan=plan, page=page, per_page=per_page) return res([item.as_dict() for item in items])
def delete_subscription_types(plan=None): """ get_subscription_types gets all subscription types """ page, per_page = get_page_from_args() item = SubscriptionType.get_items(plan=plan, page=page, per_page=per_page) error = item[0].delete() if len(error) > 0: return Responses.OPERATION_FAILED() return Responses.SUCCESS()
def update_subscription_type(plan): """ update_subscription_type updates subscription type by using duration in months Args: plan (string): Returns: (string,int): update succesful, otherwise response no need to update """ item = SubscriptionType.get_items(plan=plan)[0] if not item: return Responses.NOT_EXIST() json_dict = request.json if len(item.update(json_dict)) > 0: return Responses.OPERATION_FAILED() return Responses.SUCCESS()
def user_subscribe(): json_dict = request.json email = json_dict['email'] user = User.get_user_by_email(email) if not user: return Responses.NOT_EXIST() if not user.email_confirmed: return Responses.UNCONFIRMED_USER() subscription_type = json_dict['subscription_type'] subscription = SubscriptionType.get_items(plan=subscription_type)[0] subscription_price = subscription.price start_date = date.today() end_date = start_date + relativedelta(months=1) user_subscription_detail = UserSubscriptionDetail(start_date, end_date, subscription.plan, subscription_price) return res(user_subscription_detail.as_dict())
MAIL_DEFAULT_SENDER = ConfigValues('MAIL_DEFAULT_SENDER', '*****@*****.**') EMAIL_PASSWORD_RESET_SECRET_KEY = ConfigValues( 'EMAIL_PASSWORD_RESET_SECRET_KEY', 'Thisisasecret!') SIB_KEY = ConfigValues('SIB_KEY', 'gzryVUPZHa1GW7n6') CLIENT_ID = ConfigValues('CLIENT_ID', 'f65017461657dc4') ACCESS_TOKEN = ConfigValues( 'ACCESS_TOKEN', '9dae131233c5e028255318571703a409a524583e') BEARER_REFRESH_TOKEN = ConfigValues( 'REFRESH_TOKEN', '86a42f98ad7a1703e7619d7c1abace0fd43288af') IMGUR_ACCOUNT_ID = ConfigValues('IMGUR_ACCOUNT_ID', '127525815') IMGUR_ACCOUNT_USERNAME = ConfigValues('IMGUR_ACCOUNT_USERNAME', 'adayahouse') STRIPE_PUBLISHABLE_KEY = ConfigValues('STRIPE_PK', '') STRIPE_S_KEY = ConfigValues('STRIPE_SK', '') subtype = SubscriptionType(plan='Adaya Lite', price=10) subtype2 = SubscriptionType(plan='Adaya Lifestyle', price=40) subtype.stripe_subscription_product = 'prod_HKKYExqtgZlZ0R' subtype.stripe_price = 'price_HKKb1y8VgSax36' subtype2.stripe_subscription_product = 'prod_HKKboFqONk8aba' subtype2.stripe_price = 'price_HKKcUelIoiOo5m' usersubscription = UserSubscription() usersubscription.user_id = 2 usersubscription.start_date = datetime.now() usersubscription.end_date = datetime.strptime('06-02-2020 05:58:00', '%d-%m-%Y %H:%M:%S') usersubscription.subscription_type = subtype food_category = ProductCategory('food') clothes_category = ProductCategory('cloth') food_article = ArticleCategory('food-article') clothes_article = ArticleCategory('cloth-article')
def create_subscription(): json_dict = request.json subscription_type = json_dict['subscription_type'] subType = SubscriptionType.get_items(plan=subscription_type) subscriptionType = {} if(len(subType) > 0): subscriptionType = subType[0] subscription_type_id = subscriptionType.id subscription_price = subscriptionType.stripe_price user_id = json_dict['user_id'] user = User.query.get(user_id) try: stripe.PaymentMethod.attach( json_dict['paymentMethodId'], customer=json_dict['customer_id'], ) # Set the default payment method on the customer stripe.Customer.modify(json_dict['customer_id'], invoice_settings={ 'default_payment_method': json_dict['paymentMethodId'], }, email=user.email, name=user.firstname ) # Create the subscription subscription = stripe.Subscription.create( customer=json_dict['customer_id'], items=[ { 'price': subscription_price } ], expand=['latest_invoice.payment_intent'], ) print("Subscription object") user_subscription_dict = {} if(subscription.latest_invoice.payment_intent.status == 'succeeded'): subscription_dict = jsonify(subscription).json user_subscription_dict['user_id'] = json_dict['user_id'] user_subscription_dict['subscription_id'] = subscription_dict['id'] user_subscription_dict['subscription_type_id'] = subscription_type_id s_date = datetime.fromtimestamp(subscription_dict['current_period_start']) user_subscription_dict['current_start_date'] = s_date e_date = datetime.fromtimestamp(subscription_dict['current_period_end']) user_subscription_dict['current_end_date'] = e_date user_subscription_dict['type_object'] = subscription_dict['object'] user_subscription_dict['application_fee_percent'] = subscription_dict['application_fee_percent'] user_subscription_dict['billing_cycle_anchor'] = subscription_dict['billing_cycle_anchor'] user_subscription_dict['billing_thresholds'] = subscription_dict['billing_thresholds'] user_subscription_dict['cancel_at'] = subscription_dict['cancel_at'] user_subscription_dict['cancel_at_period_end'] = subscription_dict['cancel_at_period_end'] user_subscription_dict['canceled_at'] = subscription_dict['canceled_at'] user_subscription_dict['collection_method'] = subscription_dict['collection_method'] userSubscription = UserSubscription.get_subscription(user_id=user_id) if len(userSubscription) > 0: userSubscription[0].update(user_subscription_dict) else: newUserSubscription = UserSubscription() newUserSubscription.update(user_subscription_dict) user.update({'subscribed':1}) start_date = userSubscription.current_start_date.strftime('%Y-%m-%d %H:%M:%S') if subscriptionType.plan == 'Adaya Lite': #adayalite Payment.send_subscription_confirmation_email_adayalite(user_email=user.email, user_name=user.firstname, subscription_start=start_date) if subscriptionType.plan == 'Adaya Lifestyle': #adayalifestyle Payment.send_subscription_confirmation_email_adayalifestyle(user_email=user.email, user_name=user.firstname, subscription_start=start_date) return jsonify(subscription).json except Exception as e: return jsonify(error={'message': str(e)}), 200
variation3.product_id = x variation3.price = 40 variation3.stock = 1 db.session.add(variation) db.session.add(variation1) db.session.add(variation2) db.session.add(variation3) voucher = Voucher('HAO20') voucher.discount_fixed_amount = 5 voucher.product_id = 3 voucher.redeem_by = datetime.strptime('13-4-2020', '%d-%m-%Y') voucher2 = Voucher('LUO20') voucher2.discount_fixed_amount = 20 voucher2.product_id = 5 voucher2.redeem_by = datetime.strptime('18-4-2020', '%d-%m-%Y') subtype = SubscriptionType(duration=1, price=10) subtype2 = SubscriptionType(duration=6, price=40) usersubscription = UserSubscription() usersubscription.user_id = 2 usersubscription.start_date = datetime.now() usersubscription.end_date = datetime.strptime('06-02-2020 05:58:00', '%d-%m-%Y %H:%M:%S') usersubscription.subscription_type = subtype db.session.add(max_no_products_per_order) db.session.add(min_duration_of_rental) db.session.add(max_duration_of_rental) db.session.add(max_no_of_vouchers) db.session.add(MAIL_USERNAME) db.session.add(MAIL_PASSWORD) db.session.add(MAIL_SERVER) db.session.add(MAIL_PORT)
def init_database(): db = AC().db # Create the database and the database table db.create_all() member = Role("member") admin = Role("admin") user = User("*****@*****.**", "1q2w3e4r") user.email_confirmed = True user2 = User("*****@*****.**", "1q2w3e4r") user3 = User("*****@*****.**", "1q2w3e4r") user4 = User("*****@*****.**", "1q2w3e4r") user.role = admin user2.email_confirmed = True user2.subscribed = True user3.email_confirmed = True user3.subscribed = True user4.email_confirmed = False max_no_products_per_month = ConfigValues('max_no_products_per_month', 20) max_no_free_products_adayalite_user = ConfigValues( 'max_no_free_products_adayalite_user', 4) max_no_of_items_per_order_adayalifestyle = ConfigValues( 'max_no_of_items_per_order_adayalifestyle', 4) max_no_products_per_order = ConfigValues('max_no_products_per_order', 4) min_duration_of_rental = ConfigValues('min_duration_of_rental', 4) max_duration_of_rental = ConfigValues('max_duration_of_rental', 7) max_no_of_vouchers = ConfigValues('max_no_of_vouchers', 2) MAIL_USERNAME = ConfigValues('MAIL_USERNAME', '*****@*****.**') MAIL_PASSWORD = ConfigValues('MAIL_PASSWORD', 'adaya1234') MAIL_SERVER = ConfigValues('MAIL_SERVER', 'smtp.gmail.com') MAIL_PORT = ConfigValues('MAIL_PORT', 465) MAIL_DEFAULT_SENDER = ConfigValues('MAIL_DEFAULT_SENDER', '*****@*****.**') EMAIL_PASSWORD_RESET_SECRET_KEY = ConfigValues( 'EMAIL_PASSWORD_RESET_SECRET_KEY', 'Thisisasecret!') SIB_KEY = ConfigValues('SIB_KEY', 'gzryVUPZHa1GW7n6') subtype = SubscriptionType(plan='Adaya Lite', price=10) subtype2 = SubscriptionType(plan='Adaya Premium', price=40) usersubscription = UserSubscription() usersubscription.user_id = 2 usersubscription.current_start_date = datetime.now() usersubscription.current_end_date = datetime.strptime( '2020-09-06 05:58:00', '%Y-%m-%d %H:%M:%S') usersubscription.subscription_type = subtype usersubscription2 = UserSubscription() usersubscription2.user_id = 3 usersubscription2.current_start_date = datetime.now() usersubscription2.current_end_date = datetime.strptime( '2020-08-06 05:58:00', '%Y-%m-%d %H:%M:%S') usersubscription2.subscription_type = subtype2 voucher = Voucher('HAO20') voucher.discount_fixed_amount = 100 voucher.product_id = 3 voucher.redeem_by = datetime.strptime('2020-8-13 00:00:00', '%Y-%m-%d %H:%M:%S') voucher2 = Voucher('LUO20') voucher2.discount_fixed_amount = 8.00 voucher2.product_id = 1 voucher2.redeem_by = datetime.strptime('2020-8-13 00:00:00', '%Y-%m-%d %H:%M:%S') for x in range(1, 11): variation = Variation('S') variation.product_id = x variation.price = 10 variation.stock = 1 variation1 = Variation('M') variation1.product_id = x variation1.price = 20 variation1.stock = 1 variation2 = Variation('L') variation2.product_id = x variation2.price = 30 variation2.stock = 1 variation3 = Variation('XL') variation3.product_id = x variation3.price = 40 variation3.stock = 1 db.session.add(variation) db.session.add(variation1) db.session.add(variation2) db.session.add(variation3) db.session.add(max_no_products_per_order) db.session.add(max_no_products_per_month) db.session.add(max_no_free_products_adayalite_user) db.session.add(max_no_of_items_per_order_adayalifestyle) db.session.add(min_duration_of_rental) db.session.add(max_duration_of_rental) db.session.add(max_no_of_vouchers) db.session.add(MAIL_USERNAME) db.session.add(MAIL_PASSWORD) db.session.add(MAIL_SERVER) db.session.add(MAIL_PORT) db.session.add(MAIL_DEFAULT_SENDER) db.session.add(EMAIL_PASSWORD_RESET_SECRET_KEY) db.session.add(SIB_KEY) db.session.add(voucher) db.session.add(voucher2) db.session.add(member) db.session.add(user) db.session.add(user2) db.session.add(user3) db.session.add(user4) db.session.add(subtype) db.session.add(subtype2) db.session.add(usersubscription) db.session.add(usersubscription2) food_category = ProductCategory('food') clothes_category = ProductCategory('cloth') food_article = ArticleCategory('food-article') clothes_article = ArticleCategory('cloth-article') status = ArticleStatus('draft') order_status = OrderStatus('completed') db.session.add(order_status) db.session.add(food_article) db.session.add(clothes_article) db.session.add(food_category) db.session.add(clothes_category) for x in range(10): product = Product('Haoluo') article = Article(randomString(10)) order = Order() order_item = OrderItem() order_item.quantity = 1 order_item.variation_id = 2 order_item.start_date = datetime.strptime('2020-4-1 00:00:00', '%Y-%m-%d %H:%M:%S') order_item.end_date = datetime.strptime('2020-4-8 00:00:00', '%Y-%m-%d %H:%M:%S') order.order_items = [] order.order_items.append(order_item) article_category = food_article category = food_category if x % 2 == 0: category = clothes_category article_category = clothes_article product.category = category article.category = article_category article.status = status db.session.add(order) db.session.add(product) db.session.add(order_item) db.session.add(article) db.session.commit() yield db db.drop_all()