2018-06-29 16:51:36 +02:00
{% extends "zerver/portico.html" %}
2019-10-23 07:46:34 +02:00
{% set entrypoint = "billing" %}
2018-01-13 19:38:13 +01:00
2022-09-06 12:04:03 +02:00
{% block title %}
< title > {{ _("Billing") }} | Zulip< / title >
{% endblock %}
2023-10-28 15:23:58 +02:00
{% block portico_content %}
2023-11-08 09:50:11 +01:00
< div id = "billing-page" class = "register-account flex full-page" >
< div class = "center-block new-style" >
2023-11-13 15:14:38 +01:00
{% if admin_access and has_active_plan %}
2023-11-23 16:02:39 +01:00
{% if is_sponsorship_pending %}
< div class = "alert alert-success billing-page-success" id = "billing-sponsorship-pending-message-top" >
This organization has requested sponsorship for a < a href = "/plans/" > Zulip Cloud Standard< / a > plan. < a href = "mailto:support@zulip.com" > Contact Zulip support< / a > with any questions or updates.
< / div >
{% endif %}
2023-11-13 15:56:10 +01:00
{% if success_message %}
< div class = "alert alert-success billing-page-success" id = "billing-success-message-top" > {{ success_message }}< / div >
{% endif %}
2023-11-08 09:50:11 +01:00
< div class = "pitch" >
< h1 > Zulip Cloud billing for {{ org_name }}< / h1 >
< / div >
< div class = "alert alert-danger" id = "error-message-box" > < / div >
< input type = "hidden" name = "csrfmiddlewaretoken" value = "{{ csrf_token }}" / >
< div class = "white-box" >
< div id = "billing-page-details" >
< div class = "input-box billing-page-field no-validation" >
2023-11-20 07:17:53 +01:00
< label for = "org-current-plan" class = "inline-block label-title" > Your plan< / label >
< div id = "org-current-plan" class = "not-editable-realm-field" >
2023-11-25 14:44:47 +01:00
{% if free_trial or downgrade_at_end_of_free_trial %}
2023-11-22 11:42:03 +01:00
{{ plan_name }} < i > (free trial)< / i >
2023-11-08 08:00:34 +01:00
{% else %}
2023-11-08 09:50:11 +01:00
{{ plan_name }}
2023-11-08 08:00:34 +01:00
{% endif %}
< / div >
2023-11-08 09:50:11 +01:00
< / div >
2023-11-20 13:01:25 +01:00
< div class = "input-box billing-page-field no-validation org-billing-frequency-wrapper"
data-current-billing-frequency="{{ billing_frequency }}"
{%if free_trial %}data-free-trial="true"{% endif %}
{%if downgrade_at_end_of_cycle %}data-downgrade-eoc="true"{% endif %}
{%if switch_to_monthly_at_end_of_cycle %}data-switch-to-monthly-eoc="true"{% endif %}
{%if switch_to_annual_at_end_of_cycle %}data-switch-to-annual-eoc="true"{% endif %}>
< label for = "org-billing-frequency" > Billing frequency< / label >
2023-11-26 15:41:28 +01:00
{% if downgrade_at_end_of_free_trial or downgrade_at_end_of_cycle %}
2023-11-20 13:01:25 +01:00
< div class = "not-editable-realm-field" >
2023-11-08 09:50:11 +01:00
{{ billing_frequency }}
2023-11-20 13:01:25 +01:00
< / div >
{% elif switch_to_annual_at_end_of_cycle %}
< select name = "schedule" id = "org-billing-frequency-annual" class = "billing-frequency-select" >
< option value = "Monthly" > Monthly< / option >
< option value = "Annual" selected > Annual< / option >
< / select >
< div class = "billing-frequency-message not-editable-realm-field" >
2023-11-08 09:50:11 +01:00
Your plan will switch to annual billing on {{ renewal_date }}.
2023-11-08 08:01:40 +01:00
< / div >
2023-11-20 13:01:25 +01:00
{%elif switch_to_monthly_at_end_of_cycle %}
< select name = "schedule" id = "org-billing-frequency-monthly" class = "billing-frequency-select" >
< option value = "Monthly" selected > Monthly< / option >
< option value = "Annual" > Annual< / option >
< / select >
< div class = "billing-frequency-message not-editable-realm-field" >
Your plan will switch to monthly billing on {{ renewal_date }}.
< / div >
{% else %}
< select name = "schedule" id = "org-billing-frequency-default" class = "billing-frequency-select" >
< option value = "Monthly" { % if billing_frequency = = " Monthly " % } selected { % endif % } > Monthly< / option >
< option value = "Annual" { % if billing_frequency = = " Annual " % } selected { % endif % } > Annual< / option >
< / select >
{% endif %}
< button id = "org-billing-frequency-confirm-button" class = "hide" >
< span class = "billing-button-text" > Update< / span >
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
< div id = "org-billing-frequency-change-error" class = "alert alert-danger billing-page-error" > < / div >
2023-11-08 09:50:11 +01:00
< / div >
2023-11-08 11:29:40 +01:00
{% if automanage_licenses %}
2023-11-08 09:50:11 +01:00
< div class = "input-box billing-page-field no-validation" >
< label for = "automatic-license-count" class = "inline-block label-title" >
Number of licenses
< a href = "/help/zulip-cloud-billing#what-is-the-difference-between-automatic-and-manual-billing" target = "_blank" rel = "noopener noreferrer" >
< i class = "fa fa-question-circle-o" aria-hidden = "true" > < / i >
< / a >
< / label >
< div id = "automatic-license-count" class = "not-editable-realm-field" >
{{ licenses }} (managed automatically)
< / div >
2023-11-08 11:29:40 +01:00
< / div >
{% else %}
< div class = "input-box billing-page-field no-validation input-box-number" >
2023-11-08 09:50:11 +01:00
< label for = "current-manual-license-count" class = "inline-block label-title" >
Number of licenses for current billing period
< a href = "/help/zulip-cloud-billing#what-is-the-difference-between-automatic-and-manual-billing" target = "_blank" rel = "noopener noreferrer" >
< i class = "fa fa-question-circle-o" aria-hidden = "true" > < / i >
< / a >
< / label >
2023-11-08 11:29:40 +01:00
< div class = "number-input-with-label" >
2023-11-08 14:58:35 +01:00
< form id = "current-license-change-form" >
< input min = "{{ licenses }}" type = "number" name = "licenses" autocomplete = "off" id = "current-manual-license-count" class = "short-width-number-input" data-original-value = "{{ licenses }}" value = "{{ licenses }}" required / >
< / form >
2023-11-08 11:29:40 +01:00
< span class = "licence-count-in-use" > licenses ({{ seat_count }} in use)< / span >
2023-11-12 05:08:17 +01:00
< button id = "current-manual-license-count-update-button" class = "license-count-update-button hide" >
2023-11-08 09:50:11 +01:00
< span class = "billing-button-text" > Update< / span >
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
< / div >
2023-11-08 14:58:35 +01:00
< div id = "current-license-change-error" class = "alert alert-danger billing-page-error" > < / div >
2023-11-08 11:29:40 +01:00
< / div >
{% if not downgrade_at_end_of_cycle %}
< div class = "input-box billing-page-field no-validation input-box-number" >
2023-11-08 09:50:11 +01:00
< label for = "next-manual-license-count" class = "inline-block label-title" >
Number of licenses for next billing period
< a href = "/help/zulip-cloud-billing#what-is-the-difference-between-automatic-and-manual-billing" target = "_blank" rel = "noopener noreferrer" >
< i class = "fa fa-question-circle-o" aria-hidden = "true" > < / i >
< / a >
< / label >
2023-11-08 11:29:40 +01:00
< div class = "number-input-with-label" >
2023-11-08 14:58:35 +01:00
< form id = "next-license-change-form" >
< input type = "number" name = "licenses_at_next_renewal" autocomplete = "off" id = "next-manual-license-count" class = "short-width-number-input" data-original-value = "{{ licenses_at_next_renewal }}" value = "{{ licenses_at_next_renewal }}" required / >
< / form >
2023-11-08 11:29:40 +01:00
< span class = "licence-count-in-use" > licenses ({{ seat_count }} in use)< / span >
2023-11-12 05:08:17 +01:00
< button id = "next-manual-license-count-update-button" class = "license-count-update-button hide" >
2023-11-08 09:50:11 +01:00
< span class = "billing-button-text" > Update< / span >
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
2018-06-29 16:51:36 +02:00
< / div >
2023-11-08 14:58:35 +01:00
< div id = "next-license-change-error" class = "alert alert-danger billing-page-error" > < / div >
2023-11-08 11:29:40 +01:00
< / div >
{% endif %}
{% endif %}
2023-11-08 09:50:11 +01:00
< div id = "cardchange-error" class = "alert alert-danger" > < / div >
< div class = "input-box billing-page-field no-validation" >
< label for = "customer-payment-method" class = "inline-block label-title" > Payment method< / label >
2023-11-08 11:42:05 +01:00
< div id = "customer-payment-method" class = "not-editable-realm-field" >
2023-11-08 09:50:11 +01:00
{{ payment_method }}
< / div >
2020-05-22 15:42:46 +02:00
< / div >
2023-11-08 11:42:05 +01:00
{% if charge_automatically %}
< div class = "user-stripe-card-update input-box billing-page-field no-validation" >
2023-11-08 15:59:03 +01:00
< button class = "user-stripe-card-update-button" id = "update-card-button" >
2023-11-08 11:42:05 +01:00
< span class = "billing-button-text" > Update card< / span >
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
< / div >
{% endif %}
2023-11-08 12:08:22 +01:00
< div class = "input-box billing-page-field no-validation" >
< div class = "next-payment-info not-editable-realm-field" >
{% if renewal_amount %}
2023-11-22 11:42:03 +01:00
{% if downgrade_at_end_of_cycle %}
2023-11-08 12:08:22 +01:00
Your organization will be downgraded to < strong > Zulip Cloud Free< / strong > at the end of the current billing
period (< strong > {{ renewal_date }}< / strong > ). You will lose access to unlimited search history and
< a href = "/plans/" > other features< / a > of your current plan.
2023-11-25 14:44:47 +01:00
{% elif downgrade_at_end_of_free_trial %}
Your organization will be downgraded to < strong > Zulip Cloud Free< / strong > at the end of the free trial
(< strong > {{ renewal_date }}< / strong > ). You will lose access to unlimited search history and
< a href = "/plans/" > other features< / a > of your current plan.
2023-11-08 12:08:22 +01:00
{% else %}
{% if charge_automatically %}
Your plan will automatically renew on < strong > {{ renewal_date }}< / strong > .
{% else %}
Your next invoice is due on < strong > {{ renewal_date }}< / strong > .
{% endif %}
< br / >
2023-11-09 12:12:44 +01:00
Expected charge: < strong > ${{ renewal_amount }}< / strong >
2023-11-12 05:40:19 +01:00
{% if not fixed_price %}
2023-11-20 13:01:25 +01:00
(${{ price_per_license }} x {{ licenses_at_next_renewal }} {{ 'user' if licenses_at_next_renewal == 1 else 'users' }} x
{% if switch_to_annual_at_end_of_cycle %}
12 months
{% elif switch_to_monthly_at_end_of_cycle %}
1 month
{% else %}
{{ "1 month" if billing_frequency == "Monthly" else "12 months" }}
{% endif %})
2023-11-23 18:05:06 +01:00
{% if discount_percent %}
< br / >
< i class = "billing-page-discount" > (includes {{ discount_percent }}% discount)< / i >
{% endif %}
2023-11-12 05:40:19 +01:00
{% endif %}
2023-11-08 12:08:22 +01:00
{% endif %}
2023-11-08 09:50:11 +01:00
{% else %}
2023-11-08 12:08:22 +01:00
Your plan ends on < strong > {{ renewal_date }}< / strong > , and does not renew.
2023-11-08 09:50:11 +01:00
{% endif %}
2023-11-08 12:08:22 +01:00
< / div >
2023-11-08 09:50:11 +01:00
< / div >
< div class = "input-box no-validation billing-page-field" >
< label for = "billing-contact" class = "inline-block label-title" > Billing contact< / label >
< div id = "billing-contact" class = "not-editable-realm-field" >
< a href = "mailto:{{ stripe_email }}" > {{ stripe_email }}< / a >
< / div >
< / div >
< div id = "planchange-error" class = "alert alert-danger" > < / div >
< div id = "planchange-input-section" >
2023-11-25 14:44:47 +01:00
{% if free_trial and not downgrade_at_end_of_free_trial %}
2023-11-09 15:15:19 +01:00
< div class = "end-free-trial plan-toggle-action input-box billing-page-field no-validation" id = "end-free-trial" >
< button class = "end-free-trial-button plan-toggle-action-button" >
2023-11-25 14:44:47 +01:00
< span class = "billing-button-text" > Cancel plan< / span >
2023-11-08 09:50:11 +01:00
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
< / div >
2023-11-25 14:44:47 +01:00
{% elif downgrade_at_end_of_cycle or downgrade_at_end_of_free_trial %}
2023-11-08 16:52:43 +01:00
< div class = "reactivate-current-plan plan-toggle-action input-box billing-page-field no-validation" id = "reactivate-subscription" >
2023-11-08 12:08:37 +01:00
< button class = "reactivate-current-plan-button plan-toggle-action-button" >
2023-11-25 14:44:47 +01:00
< span class = "billing-button-text" >
{% if downgrade_at_end_of_free_trial %}
Cancel downgrade
{% else %}
Reactivate subscription
{% endif %}
< / span >
2023-11-08 09:50:11 +01:00
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
< / div >
2023-11-08 16:52:43 +01:00
{% else %}
< div class = "cancel-current-plan plan-toggle-action input-box billing-page-field no-validation" id = "cancel-subscription" >
2023-11-08 12:08:37 +01:00
< button class = "cancel-current-plan-button plan-toggle-action-button" >
2023-11-08 09:50:11 +01:00
< span class = "billing-button-text" > Cancel plan< / span >
< object class = "loader billing-button-loader" type = "image/svg+xml" data = "{{ static('images/loading/loader-white.svg') }}" > < / object >
< / button >
< / div >
{% endif %}
2020-04-03 16:17:34 +02:00
< / div >
2023-11-08 16:52:43 +01:00
< form id = "planchange-form" >
{% if free_trial %}
2023-11-25 14:44:47 +01:00
< input name = "status" type = "hidden" value = "{{ CustomerPlan.DOWNGRADE_AT_END_OF_FREE_TRIAL }}" / >
{% elif downgrade_at_end_of_free_trial %}
< input name = "status" type = "hidden" value = "{{ CustomerPlan.FREE_TRIAL }}" / >
2023-11-08 16:52:43 +01:00
{% elif downgrade_at_end_of_cycle %}
< input name = "status" type = "hidden" value = "{{ CustomerPlan.ACTIVE }}" / >
{% else %}
< input name = "status" type = "hidden" value = "{{ CustomerPlan.DOWNGRADE_AT_END_OF_CYCLE }}" / >
{% endif %}
< / form >
2023-11-08 09:50:11 +01:00
< / div >
< / div >
< hr / >
< div class = "support-link" >
< p >
To make changes to your plan or view your billing history < a href = "mailto:support@zulip.com" > contact Zulip support< / a > .
< / p >
< / div >
{% else %}
2023-11-08 17:38:47 +01:00
<!-- For sponsored or sponsorship pending organizations we redirect to /sponsorship page. -->
<!-- For organizations on free plan we redirect to /plans page. -->
2023-11-13 15:14:38 +01:00
< div class = "billing-status-page" >
< div class = "pitch" >
< h1 > Zulip Cloud billing for {{ org_name }}< / h1 >
< / div >
< div class = "white-box" >
< p >
You must be an organization owner or a billing administrator to view this page.
< / p >
< / div >
< / div >
2023-11-08 09:50:11 +01:00
{% endif %}
2018-01-13 19:38:13 +01:00
< / div >
< / div >
2023-11-09 15:15:19 +01:00
< div id = "confirm-end-free-trial" class = "micromodal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "dialog_title" >
< header class = "modal__header" >
< h1 class = "modal__title dialog_heading" >
2023-11-27 09:14:44 +01:00
Downgrade {{ org_name }} to Zulip Cloud Free?
2023-11-09 15:15:19 +01:00
< / h1 >
< button class = "modal__close" aria-label = "{{ _('Close modal') }}" data-micromodal-close > < / button >
< / header >
< main class = "modal__content" >
< p >
2023-11-27 09:14:44 +01:00
Your organization will be downgraded to < strong > Zulip Cloud Free< / strong > at the end of your free trial
2023-11-25 14:44:47 +01:00
({{ renewal_date }}). You will lose access to unlimited search history and
< a href = "/plans/" > other features< / a >
of your current plan. Are you sure you want to continue?
2023-11-09 15:15:19 +01:00
< / p >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn dialog_exit_button" aria-label = "{{ '(Close this dialog window)' }}" data-micromodal-close > {{ _('Cancel') }}< / button >
< button class = "modal__btn dialog_submit_button" >
2023-11-25 14:44:47 +01:00
< span > {{ _('Downgrade') }}< / span >
2023-11-09 15:15:19 +01:00
< / button >
< / footer >
< / div >
< / div >
< / div >
2023-11-09 12:03:40 +01:00
< div id = "confirm-licenses-modal-increase" class = "micromodal" aria-hidden = "true" >
2023-09-28 12:33:10 +02:00
< div class = "modal__overlay" tabindex = "-1" >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "dialog_title" >
< header class = "modal__header" >
< h1 class = "modal__title dialog_heading" >
2023-11-09 12:03:40 +01:00
Confirm adding licenses
2023-09-28 12:33:10 +02:00
< / h1 >
< button class = "modal__close" aria-label = "{{ _('Close modal') }}" data-micromodal-close > < / button >
< / header >
< main class = "modal__content" >
< p >
2023-11-09 12:03:40 +01:00
Are you sure you want to increase the number of licenses from
< b > < span class = "current_license_count_holder" > < / span > < / b > to
< b > < span class = "new_license_count_holder" > < / span > < / b > ?
2023-09-28 12:33:10 +02:00
< / p >
< p >
2023-11-09 12:03:40 +01:00
You will be charged for
< b > < span class = "difference_license_count_holder" > < / span > < / b > additional licenses.
< / p >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn dialog_exit_button" aria-label = "{{ '(Close this dialog window)' }}" data-micromodal-close > {{ _('Cancel') }}< / button >
< button class = "modal__btn dialog_submit_button" >
< span > {{ _('Confirm') }}< / span >
< / button >
< / footer >
< / div >
< / div >
< / div >
< div id = "confirm-licenses-modal-decrease" class = "micromodal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "dialog_title" >
< header class = "modal__header" >
< h1 class = "modal__title dialog_heading" >
Confirm decreasing licenses
< / h1 >
< button class = "modal__close" aria-label = "{{ _('Close modal') }}" data-micromodal-close > < / button >
< / header >
< main class = "modal__content" >
< p >
Are you sure you want to decrease the number of licenses from
< b > < span class = "current_license_count_holder" > < / span > < / b > to
< b > < span class = "new_license_count_holder" > < / span > < / b > ?
< / p >
< p >
Your organization will be limited to at most
< b > < span class = "new_license_count_holder" > < / span > < / b > users.
2023-09-28 12:33:10 +02:00
< / p >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn dialog_exit_button" aria-label = "{{ '(Close this dialog window)' }}" data-micromodal-close > {{ _('Cancel') }}< / button >
< button class = "modal__btn dialog_submit_button" >
< span > {{ _('Confirm') }}< / span >
< / button >
< / footer >
< / div >
2020-12-23 17:08:27 +01:00
< / div >
< / div >
2023-11-08 08:21:11 +01:00
< div id = "confirm-cancel-subscription-modal" class = "micromodal" aria-hidden = "true" >
< div class = "modal__overlay" tabindex = "-1" >
< div class = "modal__container" role = "dialog" aria-modal = "true" aria-labelledby = "dialog_title" >
< header class = "modal__header" >
< h1 class = "modal__title dialog_heading" >
2023-11-09 12:12:44 +01:00
Downgrade {{ org_name }} to Zulip Cloud Free?
2023-11-08 08:21:11 +01:00
< / h1 >
< button class = "modal__close" aria-label = "{{ _('Close modal') }}" data-micromodal-close > < / button >
< / header >
< main class = "modal__content" >
< p >
2023-11-08 17:38:47 +01:00
Your organization will be downgraded to < strong > Zulip Cloud Free< / strong > at the end of the current billing
2023-11-08 09:50:11 +01:00
period ({{ renewal_date }}). You will lose access to unlimited search history and
2023-11-09 12:12:44 +01:00
< a href = "/plans/" > other features< / a >
2023-11-08 08:21:11 +01:00
of your current plan. Are you sure you want to continue?
< / p >
< / main >
< footer class = "modal__footer" >
< button class = "modal__btn dialog_exit_button" aria-label = "{{ '(Close this dialog window)' }}" data-micromodal-close > {{ _('Never mind') }}< / button >
< button class = "modal__btn dialog_submit_button" >
< span > {{ _('Downgrade') }}< / span >
< / button >
< / footer >
< / div >
< / div >
< / div >
2018-01-13 19:38:13 +01:00
{% endblock %}