diff --git a/app/views/api/v1/models/_account.json.jbuilder b/app/views/api/v1/models/_account.json.jbuilder index af9235b4b..ba74e5c94 100644 --- a/app/views/api/v1/models/_account.json.jbuilder +++ b/app/views/api/v1/models/_account.json.jbuilder @@ -6,6 +6,10 @@ if resource.custom_attributes.present? json.subscribed_quantity resource.custom_attributes['subscribed_quantity'] json.subscription_status resource.custom_attributes['subscription_status'] json.subscription_ends_on resource.custom_attributes['subscription_ends_on'] + json.stripe_subscription_id resource.custom_attributes['stripe_subscription_id'] if resource.custom_attributes['stripe_subscription_id'].present? + json.pending_stripe_pricing_plan_id resource.custom_attributes['pending_stripe_pricing_plan_id'] if resource.custom_attributes['pending_stripe_pricing_plan_id'].present? + json.pending_subscription_quantity resource.custom_attributes['pending_subscription_quantity'] if resource.custom_attributes['pending_subscription_quantity'].present? + json.next_billing_date resource.custom_attributes['next_billing_date'] if resource.custom_attributes['next_billing_date'].present? json.industry resource.custom_attributes['industry'] if resource.custom_attributes['industry'].present? json.company_size resource.custom_attributes['company_size'] if resource.custom_attributes['company_size'].present? json.timezone resource.custom_attributes['timezone'] if resource.custom_attributes['timezone'].present? diff --git a/enterprise/app/services/enterprise/billing/v2/change_plan_service.rb b/enterprise/app/services/enterprise/billing/v2/change_plan_service.rb index e300b83e7..8e3ff74fe 100644 --- a/enterprise/app/services/enterprise/billing/v2/change_plan_service.rb +++ b/enterprise/app/services/enterprise/billing/v2/change_plan_service.rb @@ -27,6 +27,7 @@ class Enterprise::Billing::V2::ChangePlanService < Enterprise::Billing::V2::Base def create_change_plan_intent(new_pricing_plan_id, quantity) subscription_id = fetch_subscription_id cadence_id = fetch_cadence_from_subscription(subscription_id) + store_next_billing_date(cadence_id) plan_version = fetch_new_plan_version(new_pricing_plan_id) lookup_key = fetch_plan_lookup_key(new_pricing_plan_id) component_config = { lookup_key: lookup_key, quantity: quantity } @@ -120,10 +121,25 @@ class Enterprise::Billing::V2::ChangePlanService < Enterprise::Billing::V2::Base ) end + def retrieve_billing_cadence(cadence_id) + StripeV2Client.request( + :get, + "/v2/billing/cadences/#{cadence_id}", + {}, + stripe_api_options + ) + end + + def store_next_billing_date(cadence_id) + cadence = retrieve_billing_cadence(cadence_id) + @next_billing_date = extract_attribute(cadence, :next_billing_date) + end + def update_account_plan(new_pricing_plan_id, quantity) attributes = { 'pending_stripe_pricing_plan_id' => new_pricing_plan_id, - 'pending_subscription_quantity' => quantity + 'pending_subscription_quantity' => quantity, + 'next_billing_date' => @next_billing_date } # Add plan name from catalog diff --git a/enterprise/app/services/enterprise/billing/v2/subscription_provisioning_service.rb b/enterprise/app/services/enterprise/billing/v2/subscription_provisioning_service.rb index 741ad3b99..66c76262d 100644 --- a/enterprise/app/services/enterprise/billing/v2/subscription_provisioning_service.rb +++ b/enterprise/app/services/enterprise/billing/v2/subscription_provisioning_service.rb @@ -120,7 +120,9 @@ class Enterprise::Billing::V2::SubscriptionProvisioningService < Enterprise::Bil 'subscription_status' => 'active', 'pending_subscription_quantity' => nil, 'pending_subscription_pricing_plan' => nil, - 'billing_cadence' => billing_cadence + 'billing_cadence' => billing_cadence, + 'next_billing_date' => nil, + 'pending_stripe_pricing_plan_id' => nil } attributes['stripe_pricing_plan_id'] = pricing_plan_id if pricing_plan_id.present? diff --git a/enterprise/app/services/enterprise/billing/v2/update_subscription_service.rb b/enterprise/app/services/enterprise/billing/v2/update_subscription_service.rb index a4f10b127..0f6328fe5 100644 --- a/enterprise/app/services/enterprise/billing/v2/update_subscription_service.rb +++ b/enterprise/app/services/enterprise/billing/v2/update_subscription_service.rb @@ -29,11 +29,11 @@ class Enterprise::Billing::V2::UpdateSubscriptionService < Enterprise::Billing:: subscription_id = fetch_subscription_id subscription = retrieve_pricing_plan_subscription(subscription_id) cadence_id, plan_id, plan_version = extract_subscription_details(subscription) + store_next_billing_date(cadence_id) lookup_key = fetch_plan_lookup_key(plan_id) component_config = { lookup_key: lookup_key, quantity: quantity } params = build_modify_params(subscription_id, cadence_id, plan_id, plan_version, component_config) - log_modify_intent(params) StripeV2Client.request(:post, '/v2/billing/intents', params, stripe_api_options) end @@ -81,11 +81,6 @@ class Enterprise::Billing::V2::UpdateSubscriptionService < Enterprise::Billing:: } end - def log_modify_intent(params) - Rails.logger.info "Create modify intent params: #{params.inspect}" - Rails.logger.info "Stripe API options: #{stripe_api_options.inspect}" - end - def reserve_billing_intent(billing_intent) StripeV2Client.request( :post, @@ -113,9 +108,24 @@ class Enterprise::Billing::V2::UpdateSubscriptionService < Enterprise::Billing:: ) end + def retrieve_billing_cadence(cadence_id) + StripeV2Client.request( + :get, + "/v2/billing/cadences/#{cadence_id}", + {}, + stripe_api_options + ) + end + + def store_next_billing_date(cadence_id) + cadence = retrieve_billing_cadence(cadence_id) + @next_billing_date = extract_attribute(cadence, :next_billing_date) + end + def update_account_quantity(quantity) update_custom_attributes({ - 'pending_subscription_quantity' => quantity + 'pending_subscription_quantity' => quantity, + 'next_billing_date' => @next_billing_date }) end