diff --git a/api/v3/StripeSubscription.php b/api/v3/StripeSubscription.php index 9c0b288d0d845da3d574d6f0f8175e91d2419d73..ffcdedffb73203fc6526d1a3521e22fca815b8d7 100644 --- a/api/v3/StripeSubscription.php +++ b/api/v3/StripeSubscription.php @@ -87,7 +87,24 @@ function civicrm_api3_stripe_subscription_updatetransactionids() { throw new CiviCRM_API3_Exception('Table civicrm_stripe_subscriptions is not used in Stripe >=5.2 and does not exist on your install. This API will be removed in a future release.'); } - $sql = "SELECT subscription_id, contribution_recur_id FROM civicrm_stripe_subscriptions"; + $sql = "SELECT + sub.subscription_id, + COALESCE( + sub.contribution_recur_id, + recur.contribution_recur_id + ) AS contribution_recur_id + FROM civicrm_stripe_subscriptions AS sub + JOIN ( + SELECT + MAX(r.id) AS contribution_recur_id, + r.trxn_id + FROM civicrm_contribution_recur AS r + WHERE + r.trxn_id IS NOT NULL + GROUP BY + r.trxn_id + HAVING COUNT(*) = 1 + ) AS recur ON sub.invoice_id = recur.trxn_id"; $dao = CRM_Core_DAO::executeQuery($sql); $counts = [ 'success' => 0,