collab: Enable automatic tax calculation for all new subscriptions (#34720)

Release Notes:

- N/A

---------

Co-authored-by: Marshall Bowers <git@maxdeviant.com>
This commit is contained in:
morgankrey 2025-07-18 16:42:48 -05:00 committed by GitHub
parent 70bde54a2c
commit 4bdac8026c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 26 additions and 8 deletions

View file

@ -11,8 +11,8 @@ use crate::Result;
use crate::db::billing_subscription::SubscriptionKind; use crate::db::billing_subscription::SubscriptionKind;
use crate::llm::AGENT_EXTENDED_TRIAL_FEATURE_FLAG; use crate::llm::AGENT_EXTENDED_TRIAL_FEATURE_FLAG;
use crate::stripe_client::{ use crate::stripe_client::{
RealStripeClient, StripeBillingAddressCollection, StripeCheckoutSessionMode, RealStripeClient, StripeAutomaticTax, StripeBillingAddressCollection,
StripeCheckoutSessionPaymentMethodCollection, StripeClient, StripeCheckoutSessionMode, StripeCheckoutSessionPaymentMethodCollection, StripeClient,
StripeCreateCheckoutSessionLineItems, StripeCreateCheckoutSessionParams, StripeCreateCheckoutSessionLineItems, StripeCreateCheckoutSessionParams,
StripeCreateCheckoutSessionSubscriptionData, StripeCreateMeterEventParams, StripeCreateCheckoutSessionSubscriptionData, StripeCreateMeterEventParams,
StripeCreateMeterEventPayload, StripeCreateSubscriptionItems, StripeCreateSubscriptionParams, StripeCreateMeterEventPayload, StripeCreateSubscriptionItems, StripeCreateSubscriptionParams,
@ -344,6 +344,7 @@ impl StripeBilling {
price: Some(zed_free_price_id), price: Some(zed_free_price_id),
quantity: Some(1), quantity: Some(1),
}], }],
automatic_tax: Some(StripeAutomaticTax { enabled: true }),
}; };
let subscription = self.client.create_subscription(params).await?; let subscription = self.client.create_subscription(params).await?;

View file

@ -73,6 +73,7 @@ pub enum StripeCancellationDetailsReason {
pub struct StripeCreateSubscriptionParams { pub struct StripeCreateSubscriptionParams {
pub customer: StripeCustomerId, pub customer: StripeCustomerId,
pub items: Vec<StripeCreateSubscriptionItems>, pub items: Vec<StripeCreateSubscriptionItems>,
pub automatic_tax: Option<StripeAutomaticTax>,
} }
#[derive(Debug)] #[derive(Debug)]
@ -224,6 +225,11 @@ pub struct StripeTaxIdCollection {
pub enabled: bool, pub enabled: bool,
} }
#[derive(Debug, Clone)]
pub struct StripeAutomaticTax {
pub enabled: bool,
}
#[derive(Debug)] #[derive(Debug)]
pub struct StripeCheckoutSession { pub struct StripeCheckoutSession {
pub url: Option<String>, pub url: Option<String>,

View file

@ -10,16 +10,17 @@ use stripe::{
CreateCheckoutSessionSubscriptionData, CreateCheckoutSessionSubscriptionDataTrialSettings, CreateCheckoutSessionSubscriptionData, CreateCheckoutSessionSubscriptionDataTrialSettings,
CreateCheckoutSessionSubscriptionDataTrialSettingsEndBehavior, CreateCheckoutSessionSubscriptionDataTrialSettingsEndBehavior,
CreateCheckoutSessionSubscriptionDataTrialSettingsEndBehaviorMissingPaymentMethod, CreateCheckoutSessionSubscriptionDataTrialSettingsEndBehaviorMissingPaymentMethod,
CreateCustomer, Customer, CustomerId, ListCustomers, Price, PriceId, Recurring, Subscription, CreateCustomer, CreateSubscriptionAutomaticTax, Customer, CustomerId, ListCustomers, Price,
SubscriptionId, SubscriptionItem, SubscriptionItemId, UpdateCustomer, UpdateSubscriptionItems, PriceId, Recurring, Subscription, SubscriptionId, SubscriptionItem, SubscriptionItemId,
UpdateSubscriptionTrialSettings, UpdateSubscriptionTrialSettingsEndBehavior, UpdateCustomer, UpdateSubscriptionItems, UpdateSubscriptionTrialSettings,
UpdateSubscriptionTrialSettingsEndBehavior,
UpdateSubscriptionTrialSettingsEndBehaviorMissingPaymentMethod, UpdateSubscriptionTrialSettingsEndBehaviorMissingPaymentMethod,
}; };
use crate::stripe_client::{ use crate::stripe_client::{
CreateCustomerParams, StripeBillingAddressCollection, StripeCancellationDetails, CreateCustomerParams, StripeAutomaticTax, StripeBillingAddressCollection,
StripeCancellationDetailsReason, StripeCheckoutSession, StripeCheckoutSessionMode, StripeCancellationDetails, StripeCancellationDetailsReason, StripeCheckoutSession,
StripeCheckoutSessionPaymentMethodCollection, StripeClient, StripeCheckoutSessionMode, StripeCheckoutSessionPaymentMethodCollection, StripeClient,
StripeCreateCheckoutSessionLineItems, StripeCreateCheckoutSessionParams, StripeCreateCheckoutSessionLineItems, StripeCreateCheckoutSessionParams,
StripeCreateCheckoutSessionSubscriptionData, StripeCreateMeterEventParams, StripeCreateCheckoutSessionSubscriptionData, StripeCreateMeterEventParams,
StripeCreateSubscriptionParams, StripeCustomer, StripeCustomerId, StripeCustomerUpdate, StripeCreateSubscriptionParams, StripeCustomer, StripeCustomerId, StripeCustomerUpdate,
@ -151,6 +152,7 @@ impl StripeClient for RealStripeClient {
}) })
.collect(), .collect(),
); );
create_subscription.automatic_tax = params.automatic_tax.map(Into::into);
let subscription = Subscription::create(&self.client, create_subscription).await?; let subscription = Subscription::create(&self.client, create_subscription).await?;
@ -366,6 +368,15 @@ impl From<SubscriptionItem> for StripeSubscriptionItem {
} }
} }
impl From<StripeAutomaticTax> for CreateSubscriptionAutomaticTax {
fn from(value: StripeAutomaticTax) -> Self {
Self {
enabled: value.enabled,
liability: None,
}
}
}
impl From<StripeSubscriptionTrialSettings> for UpdateSubscriptionTrialSettings { impl From<StripeSubscriptionTrialSettings> for UpdateSubscriptionTrialSettings {
fn from(value: StripeSubscriptionTrialSettings) -> Self { fn from(value: StripeSubscriptionTrialSettings) -> Self {
Self { Self {