diff --git a/cloud/routes.py b/cloud/routes.py index def1565..7509d17 100644 --- a/cloud/routes.py +++ b/cloud/routes.py @@ -347,25 +347,45 @@ def billing(): """ from . import store + log.debug('START OF REQUEST') + if current_user.has_role('protected'): return abort(404) # TODO: make this 403, handle template properly - api = system_util.pillar_api() - user = User.find(current_user.objectid, api=api) - groups = [] - if user.groups: - for group_id in user.groups: - group = Group.find(group_id, api=api) - groups.append(group.name) - store_user = store.fetch_subscription_info(user.email) - if store_user is None: - expiration_date = 'Unable to reach Blender Store to check' + expiration_date = 'No subscription to expire' + + # Classify the user based on their roles and capabilities + cap_subs = current_user.has_cap('subscriber') + if current_user.has_role('demo'): + user_cls = 'demo' + elif not cap_subs and current_user.has_cap('can-renew-subscription'): + # This user has an inactive but renewable subscription. + user_cls = 'subscriber-expired' + elif cap_subs: + if current_user.has_role('subscriber'): + # This user pays for their own subscription. Only in this case do we need to fetch + # the expiration date from the Store. + user_cls = 'subscriber' + store_user = store.fetch_subscription_info(current_user.email) + if store_user is None: + expiration_date = 'Unable to reach Blender Store to check' + else: + expiration_date = store_user['expiration_date'][:10] + + elif current_user.has_role('org-subscriber'): + # An organisation pays for this subscription. + user_cls = 'subscriber-org' + else: + # This user gets the subscription cap from somewhere else (like an organisation). + user_cls = 'subscriber-other' else: - expiration_date = store_user['expiration_date'][:10] + user_cls = 'outsider' return render_template( 'users/settings/billing.html', - expiration_date=expiration_date, groups=groups, title='billing') + user_cls=user_cls, + expiration_date=expiration_date, + title='billing') @blueprint.route('/terms-and-conditions') diff --git a/src/templates/users/settings/billing.pug b/src/templates/users/settings/billing.pug index 634d43f..52f2006 100644 --- a/src/templates/users/settings/billing.pug +++ b/src/templates/users/settings/billing.pug @@ -9,16 +9,30 @@ style(type='text/css'). | {% block settings_page_title %}Subscription{% endblock %} | {% block settings_page_content %} -| {% set renew_url = url_for('cloud.renew_subscription') %} -| {% if current_user.has_cap('can-renew-subscription') %} -| {% if current_user.has_cap('subscriber') %} -h3.subscription-active - i.pi-check - | Your subscription is active -h4 Thank you for supporting us! + +//-------------------------------------------------------------------------------------------------- +| {% if user_cls == 'demo' %} +h3.subscription-demo + i.pi-heart-filled + | You have a free account hr -p Subscription expires on: {{ expiration_date }} -| {% else %} +p. + You have full access to the Blender Cloud, provided by the Blender Institute. This account is + meant for free evaluation of the service. Get in touch with + #[a(href="mailto:cloudsupport@blender.org") cloudsupport@blender.org] if you have any questions. + +//-------------------------------------------------------------------------------------------------- +| {% elif user_cls == 'outsider' %} +h3.subscription-missing + i.pi-info + | You do not have an active subscription. +hr +h3 + a(href="https://store.blender.org/product/membership/") Get full access to Blender Cloud now! + +//-------------------------------------------------------------------------------------------------- +| {% elif user_cls == 'subscriber-expired' %} +| {% set renew_url = url_for('cloud.renew_subscription') %} h3.subscription-missing i.pi-info a(href="{{renew_url}}") Your subscription can be renewed @@ -26,26 +40,27 @@ hr p.text-danger Subscription expired on: {{ expiration_date }} p a.btn.btn-success(href="{{renew_url}}") Renew now -| {% endif %} +//-------------------------------------------------------------------------------------------------- +| {% elif current_user.has_cap('subscriber') %} +h3.subscription-active + i.pi-check + | Your subscription is active + +//--------------------------------- +| {% if user_cls == 'subscriber' %} +h4 Thank you for supporting us! +hr +p Subscription expires on: {{ expiration_date }} p a(href="{{ config['EXTERNAL_SUBSCRIPTIONS_MANAGEMENT_SERVER'] | urljoin('my-account/subscriptions/') }}") Manage your subscription on Blender Store -| {% elif 'demo' in groups %} -h3.subscription-demo - i.pi-heart-filled - | You have a free account +//--------------------------------- +| {% elif user_cls == 'subscriber-org' %} +p Your organisation provides you with your subscription. +| {% endif %} -hr - -p You have full access to the Blender Cloud, provided by the Blender Institute. This account is meant for free evaluation of the service. Get in touch with #[a(href="mailto:cloudsupport@blender.org") cloudsupport@blender.org] if you have any questions. - -| {% else %} -h3.subscription-missing - i.pi-info - | You do not have an active subscription. -h3 - a(href="https://store.blender.org/product/membership/") Get full access to Blender Cloud now! +//-------------------------------------------------------------------------------------------------- | {% endif %} hr