Skip to content

Commit

Permalink
Merge pull request #20495 from eileenmcnaughton/lines
Browse files Browse the repository at this point in the history
Use line items to look up memberships
  • Loading branch information
seamuslee001 authored Jun 7, 2021
2 parents cfd9c71 + 435fc64 commit 96f012e
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 25 deletions.
33 changes: 24 additions & 9 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,29 @@ public static function getToFinancialAccount($contribution, $params) {
* @param int $contributionID
*
* @return array
* @throws \API_Exception
*/
protected static function getRelatedMemberships($contributionID) {
$membershipPayments = civicrm_api3('MembershipPayment', 'get', [
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'));

$doubleCheckParams = [
'return' => 'membership_id',
'contribution_id' => (int) $contributionID,
])['values'];
$membershipIDs = [];
foreach ($membershipPayments as $membershipPayment) {
$membershipIDs[] = $membershipPayment['membership_id'];
'contribution_id' => $contributionID,
];
if (!empty($membershipIDs)) {
$doubleCheckParams['membership_id'] = ['NOT IN' => $membershipIDs];
}
$membershipPayments = civicrm_api3('MembershipPayment', 'get', $doubleCheckParams)['values'];
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 +4432,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 +4756,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
2 changes: 1 addition & 1 deletion tests/phpunit/CRM/Contribute/BAO/ContributionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ public function testAnnualQueryWithFinancialACLsEnabled() {
/**
* Test the annual query returns a correct result when multiple line items are present.
*/
public function testAnnualWithMultipleLineItems() {
public function testAnnualWithMultipleLineItems(): void {
$contactID = $this->createLoggedInUserWithFinancialACL();
$this->createContributionWithTwoLineItemsAgainstPriceSet([
'contact_id' => $contactID,
Expand Down
17 changes: 2 additions & 15 deletions tests/phpunit/api/v3/ContributionPageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -852,24 +852,11 @@ public function doSubmitMembershipPriceSetPaymentPaymentProcessorRecurInstantPay
$expectedMembershipStatus = 5;
}

$submitParams = [
'price_' . $this->_ids['price_field'][0] => reset($this->_ids['price_field_value']),
'id' => (int) $this->_ids['contribution_page'],
'amount' => 10,
'billing_first_name' => 'Billy',
'billing_middle_name' => 'Goat',
'billing_last_name' => 'Gruff',
'email' => 'billy@goat.gruff',
'selectMembership' => $this->ids['MembershipType'],
'payment_processor_id' => 1,
'credit_card_number' => '4111111111111111',
'credit_card_type' => 'Visa',
'credit_card_exp_date' => ['M' => 9, 'Y' => 2040],
'cvv2' => 123,
$submitParams = array_merge($this->getSubmitParamsMembership(TRUE), [
'is_recur' => 1,
'frequency_interval' => 1,
'frequency_unit' => $this->params['recur_frequency_unit'],
];
]);

$this->callAPIAndDocument('ContributionPage', 'submit', $submitParams, __FUNCTION__, __FILE__, 'submit contribution page');
$contribution = $this->callAPISuccess('contribution', 'getsingle', [
Expand Down

0 comments on commit 96f012e

Please sign in to comment.