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) => {
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({
'plan_id': config.scriptData.subscription_plan_id
'plan_id': planId
});
};

View file

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

View file

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

View file

@ -90,7 +90,12 @@ class CartBootstrap {
PayPalCommerceGateway.data_client_id.has_subscriptions
&& 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) {
this.gateway.button.is_disabled = true;

View file

@ -106,7 +106,11 @@ class CheckoutBootstap {
PayPalCommerceGateway.data_client_id.has_subscriptions
&& 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) {
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(),
'vault_v3_enabled' => $this->vault_v3_enabled,
'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(),
'locations_with_subscription_product' => $this->subscription_helper->locations_with_subscription_product(),
'enforce_vault' => $this->has_subscriptions(),

View file

@ -315,4 +315,29 @@ class SubscriptionHelper {
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 '';
}
}