Merge pull request #2156 from woocommerce/PCP-2920-incorrect-pricing-issue-with-variable-subscriptions-in-pay-pal-subscriptions-mode

Incorrect Pricing Issue with Variable Subscriptions in PayPal Subscriptions Mode (2920)
This commit is contained in:
Emili Castells 2024-04-18 10:10:27 +02:00 committed by GitHub
commit f0bb72d421
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 47 additions and 7 deletions

View file

@ -120,8 +120,13 @@ const PayPalComponent = ({
}; };
const createSubscription = async (data, actions) => { const createSubscription = async (data, actions) => {
let planId = config.scriptData.subscription_plan_id;
if (config.scriptData.variable_paypal_subscription_variation_from_cart !== '') {
planId = config.scriptData.variable_paypal_subscription_variation_from_cart;
}
return actions.subscription.create({ return actions.subscription.create({
'plan_id': config.scriptData.subscription_plan_id 'plan_id': planId
}); });
}; };

View file

@ -9,11 +9,11 @@ class CartActionHandler {
this.errorHandler = errorHandler; this.errorHandler = errorHandler;
} }
subscriptionsConfiguration() { subscriptionsConfiguration(subscription_plan_id) {
return { return {
createSubscription: (data, actions) => { createSubscription: (data, actions) => {
return actions.subscription.create({ return actions.subscription.create({
'plan_id': this.config.subscription_plan_id 'plan_id': subscription_plan_id
}); });
}, },
onApprove: (data, actions) => { onApprove: (data, actions) => {

View file

@ -12,7 +12,7 @@ class CheckoutActionHandler {
this.spinner = spinner; this.spinner = spinner;
} }
subscriptionsConfiguration() { subscriptionsConfiguration(subscription_plan_id) {
return { return {
createSubscription: async (data, actions) => { createSubscription: async (data, actions) => {
try { try {
@ -22,7 +22,7 @@ class CheckoutActionHandler {
} }
return actions.subscription.create({ return actions.subscription.create({
'plan_id': this.config.subscription_plan_id 'plan_id': subscription_plan_id
}); });
}, },
onApprove: (data, actions) => { onApprove: (data, actions) => {

View file

@ -90,7 +90,12 @@ class CartBootstrap {
PayPalCommerceGateway.data_client_id.has_subscriptions PayPalCommerceGateway.data_client_id.has_subscriptions
&& PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled && PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled
) { ) {
this.renderer.render(actionHandler.subscriptionsConfiguration()); let subscription_plan_id = PayPalCommerceGateway.subscription_plan_id
if(PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart !== '') {
subscription_plan_id = PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart
}
this.renderer.render(actionHandler.subscriptionsConfiguration(subscription_plan_id));
if(!PayPalCommerceGateway.subscription_product_allowed) { if(!PayPalCommerceGateway.subscription_product_allowed) {
this.gateway.button.is_disabled = true; this.gateway.button.is_disabled = true;

View file

@ -106,7 +106,11 @@ class CheckoutBootstap {
PayPalCommerceGateway.data_client_id.has_subscriptions PayPalCommerceGateway.data_client_id.has_subscriptions
&& PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled && PayPalCommerceGateway.data_client_id.paypal_subscriptions_enabled
) { ) {
this.renderer.render(actionHandler.subscriptionsConfiguration(), {}, actionHandler.configuration()); let subscription_plan_id = PayPalCommerceGateway.subscription_plan_id
if(PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart !== '') {
subscription_plan_id = PayPalCommerceGateway.variable_paypal_subscription_variation_from_cart
}
this.renderer.render(actionHandler.subscriptionsConfiguration(subscription_plan_id), {}, actionHandler.configuration());
if(!PayPalCommerceGateway.subscription_product_allowed) { if(!PayPalCommerceGateway.subscription_product_allowed) {
this.gateway.button.is_disabled = true; this.gateway.button.is_disabled = true;

View file

@ -1111,6 +1111,7 @@ document.querySelector("#payment").before(document.querySelector("#ppcp-messages
'subscription_plan_id' => $this->subscription_helper->paypal_subscription_id(), 'subscription_plan_id' => $this->subscription_helper->paypal_subscription_id(),
'vault_v3_enabled' => $this->vault_v3_enabled, 'vault_v3_enabled' => $this->vault_v3_enabled,
'variable_paypal_subscription_variations' => $this->subscription_helper->variable_paypal_subscription_variations(), 'variable_paypal_subscription_variations' => $this->subscription_helper->variable_paypal_subscription_variations(),
'variable_paypal_subscription_variation_from_cart' => $this->subscription_helper->paypal_subscription_variation_from_cart(),
'subscription_product_allowed' => $this->subscription_helper->checkout_subscription_product_allowed(), 'subscription_product_allowed' => $this->subscription_helper->checkout_subscription_product_allowed(),
'locations_with_subscription_product' => $this->subscription_helper->locations_with_subscription_product(), 'locations_with_subscription_product' => $this->subscription_helper->locations_with_subscription_product(),
'enforce_vault' => $this->has_subscriptions(), 'enforce_vault' => $this->has_subscriptions(),

View file

@ -315,4 +315,29 @@ class SubscriptionHelper {
return ''; return '';
} }
/**
* Returns the variation subscription plan id from the cart.
*
* @return string
*/
public function paypal_subscription_variation_from_cart(): string {
$cart = WC()->cart ?? null;
if ( ! $cart || $cart->is_empty() ) {
return '';
}
$items = $cart->get_cart_contents();
foreach ( $items as $item ) {
$variation_id = $item['variation_id'] ?? 0;
if ( $variation_id ) {
$variation_product = wc_get_product( $variation_id ) ?? '';
if ( $variation_product && $variation_product->meta_exists( 'ppcp_subscription_plan' ) ) {
return $variation_product->get_meta( 'ppcp_subscription_plan' )['id'];
}
}
}
return '';
}
} }