From de4618d02fbdffd774e7a34047590921c4c5bf4f Mon Sep 17 00:00:00 2001 From: Kyle Johnson Date: Fri, 14 Jul 2023 10:15:44 +0100 Subject: [PATCH] feat: Adjust AWS payment settings (#2400) * Adjust AWS payment settings * Lint * Add enum and db migration for new payment method * Add payment modal message --------- Co-authored-by: Ben Rometsch --- .../0042_alter_subscription_payment_method.py | 18 ++++++++++++++++++ api/organisations/subscriptions/constants.py | 2 ++ frontend/common/stores/account-store.js | 3 +++ frontend/web/components/modals/Payment.js | 18 +++++++++++++++++- .../pages/OrganisationSettingsPage.js | 8 ++++++-- 5 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 api/organisations/migrations/0042_alter_subscription_payment_method.py diff --git a/api/organisations/migrations/0042_alter_subscription_payment_method.py b/api/organisations/migrations/0042_alter_subscription_payment_method.py new file mode 100644 index 000000000000..7c721dd81d79 --- /dev/null +++ b/api/organisations/migrations/0042_alter_subscription_payment_method.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.20 on 2023-07-07 14:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organisations', '0041_merge_20230621_0946'), + ] + + operations = [ + migrations.AlterField( + model_name='subscription', + name='payment_method', + field=models.CharField(blank=True, choices=[('CHARGEBEE', 'Chargebee'), ('XERO', 'Xero'), ('AWS_MARKETPLACE', 'AWS Marketplace')], max_length=20, null=True), + ), + ] diff --git a/api/organisations/subscriptions/constants.py b/api/organisations/subscriptions/constants.py index 0d055dfbefa3..e259b506f73d 100644 --- a/api/organisations/subscriptions/constants.py +++ b/api/organisations/subscriptions/constants.py @@ -11,9 +11,11 @@ CHARGEBEE = "CHARGEBEE" XERO = "XERO" +AWS_MARKETPLACE = "AWS_MARKETPLACE" SUBSCRIPTION_PAYMENT_METHODS = [ (CHARGEBEE, "Chargebee"), (XERO, "Xero"), + (AWS_MARKETPLACE, "AWS Marketplace"), ] FREE_PLAN_SUBSCRIPTION_METADATA = BaseSubscriptionMetadata( diff --git a/frontend/common/stores/account-store.js b/frontend/common/stores/account-store.js index 45afd89680d6..593201d4f922 100644 --- a/frontend/common/stores/account-store.js +++ b/frontend/common/stores/account-store.js @@ -419,6 +419,9 @@ const store = Object.assign({}, BaseStore, { getOrganisations() { return store.model && store.model.organisations }, + getPaymentMethod() { + return store.organisation?.subscription?.payment_method + }, getPlans() { if (!store.model) return [] return _.filter( diff --git a/frontend/web/components/modals/Payment.js b/frontend/web/components/modals/Payment.js index 8598aa9d7a7e..f49bd4f5abaf 100644 --- a/frontend/web/components/modals/Payment.js +++ b/frontend/web/components/modals/Payment.js @@ -3,11 +3,13 @@ import makeAsyncScriptLoader from 'react-async-script' import _data from 'common/data/base/_data' import ConfigProvider from 'common/providers/ConfigProvider' import Constants from 'common/constants' +import InfoMessage from '../InfoMessage'; const PaymentButton = (props) => { const activeSubscription = AccountStore.getOrganisationPlan( AccountStore.getOrganisation().id, ) + if ( Utils.getFlagsmithHasFeature('upgrade_subscription') && activeSubscription @@ -67,7 +69,21 @@ const PaymentModal = class extends Component { } render() { const viewOnly = this.props.viewOnly - + const isAWS = AccountStore.getPaymentMethod() === 'AWS_MARKETPLACE' + if (isAWS) { + return ( + + Customers with AWS Marketplace subscriptions will need to{' '} + + contact us + + + ) + } return (
diff --git a/frontend/web/components/pages/OrganisationSettingsPage.js b/frontend/web/components/pages/OrganisationSettingsPage.js index 1e1c47968a51..45ea4e2266a7 100644 --- a/frontend/web/components/pages/OrganisationSettingsPage.js +++ b/frontend/web/components/pages/OrganisationSettingsPage.js @@ -287,8 +287,11 @@ const OrganisationSettingsPage = class extends Component { }) => { const { max_seats } = subscriptionMeta || organisation.subscription || { max_seats: 1 } + const isAWS = + AccountStore.getPaymentMethod() === 'AWS_MARKETPLACE' const { chargebee_email } = subscriptionMeta || {} - const autoSeats = Utils.getPlansPermission('AUTO_SEATS') + const autoSeats = + !isAWS && Utils.getPlansPermission('AUTO_SEATS') const usedSeats = paymentsEnabled && organisation.num_seats >= max_seats const overSeats = @@ -296,6 +299,7 @@ const OrganisationSettingsPage = class extends Component { const needsUpgradeForAdditionalSeats = (overSeats && (!verifySeatsLimit || !autoSeats)) || (!autoSeats && usedSeats) + return (
- {paymentsEnabled && ( + {paymentsEnabled && !isAWS && (