Skip to content

Commit

Permalink
Use line items to look up memberships
Browse files Browse the repository at this point in the history
This still checks the membership payment but creates some noise if there are validity issues
  • Loading branch information
eileenmcnaughton committed Jun 3, 2021
1 parent 5d1ca59 commit 2e888eb
Showing 1 changed file with 19 additions and 7 deletions.
26 changes: 19 additions & 7 deletions CRM/Contribute/BAO/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Civi\Api4\ActivityContact;
use Civi\Api4\Contribution;
use Civi\Api4\ContributionRecur;
use Civi\Api4\LineItem;
use Civi\Api4\PaymentProcessor;
use Civi\Api4\PledgePayment;

Expand Down Expand Up @@ -922,15 +923,26 @@ public static function getToFinancialAccount($contribution, $params) {
* @param int $contributionID
*
* @return array
* @throws \API_Exception
*/
protected static function getRelatedMemberships($contributionID) {
protected static function getRelatedMemberships(int $contributionID): array {
$membershipIDs = array_keys((array) LineItem::get(FALSE)
->addWhere('contribution_id', '=', $contributionID)
->addWhere('entity_table', '=', 'civicrm_membership')
->addSelect('entity_id')
->execute()->indexBy('entity_id'));

$membershipPayments = civicrm_api3('MembershipPayment', 'get', [
'return' => 'membership_id',
'contribution_id' => (int) $contributionID,
'contribution_id' => $contributionID,
'membership_id' => ['NOT IN' => $membershipIDs],
])['values'];
$membershipIDs = [];
foreach ($membershipPayments as $membershipPayment) {
$membershipIDs[] = $membershipPayment['membership_id'];
if (!empty($membershipPayments)) {
$membershipIDs = [];
CRM_Core_Error::deprecatedWarning('Not having valid line items for membership payments is invalid.');
foreach ($membershipPayments as $membershipPayment) {
$membershipIDs[] = $membershipPayment['membership_id'];
}
}
if (empty($membershipIDs)) {
return [];
Expand Down Expand Up @@ -4417,7 +4429,7 @@ public static function assignProportionalLineItems($trxnParams, $trxnId, $contri
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($trxnParams['contribution_id']);
if (!empty($lineItems)) {
// get financial item
list($ftIds, $taxItems) = self::getLastFinancialItemIds($trxnParams['contribution_id']);
[$ftIds, $taxItems] = self::getLastFinancialItemIds($trxnParams['contribution_id']);
$entityParams = [
'contribution_total_amount' => $contributionTotalAmount,
'trxn_total_amount' => $trxnParams['total_amount'],
Expand Down Expand Up @@ -4741,7 +4753,7 @@ protected static function isPaymentInstrumentChange(&$params, $pendingStatuses)
* @throws \CiviCRM_API3_Exception
*/
public static function updateMembershipBasedOnCompletionOfContribution($contributionID, $changeDate) {
$memberships = self::getRelatedMemberships($contributionID);
$memberships = self::getRelatedMemberships((int) $contributionID);
foreach ($memberships as $membership) {
$membershipParams = [
'id' => $membership['id'],
Expand Down

0 comments on commit 2e888eb

Please sign in to comment.