From 4ff927bc0bde9e2cb905faeab001ceaf0fc3dfc4 Mon Sep 17 00:00:00 2001 From: eileenmcnaugton Date: Tue, 4 Aug 2015 01:38:46 +1200 Subject: [PATCH] CRM-16523 refactor completetransation to call hooks --- CRM/Contribute/BAO/Contribution.php | 58 ++++----------- api/v3/MembershipLog.php | 88 +++++++++++++++++++++++ tests/phpunit/api/v3/ContributionTest.php | 24 ++++++- 3 files changed, 124 insertions(+), 46 deletions(-) create mode 100644 api/v3/MembershipLog.php diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index fe12852abb..95ed819381 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -2250,9 +2250,8 @@ WHERE contribution_id = %1 "; * @throws Exception */ public function composeMessageArray(&$input, &$ids, &$values, $recur = FALSE, $returnMessageText = TRUE) { - if (empty($this->_relatedObjects)) { - $this->loadRelatedObjects($input, $ids); - } + $this->loadRelatedObjects($input, $ids); + if (empty($this->_component)) { $this->_component = CRM_Utils_Array::value('component', $input); } @@ -4004,11 +4003,14 @@ WHERE con.id = {$contributionId} } if (!empty($memberships)) { - $membershipsUpdate = array(); foreach ($memberships as $membershipTypeIdKey => $membership) { - $membershipParams = (array) $membership; if ($membership) { - $format = '%Y%m%d'; + $membershipParams = array( + 'id' => $membership->id, + 'contact_id' => $membership->contact_id, + 'is_test' => $membership->is_test, + 'membership_type_id' => $membership->membership_type_id, + ); $currentMembership = CRM_Member_BAO_Membership::getContactMembership($membershipParams['contact_id'], $membershipParams['membership_type_id'], @@ -4032,7 +4034,10 @@ LIMIT 1;"; } $dao->free(); - $num_terms = $contribution->getNumTermsByContributionAndMembershipType($membershipParams['membership_type_id'], $primaryContributionID); + $membershipParams['num_terms'] = $contribution->getNumTermsByContributionAndMembershipType( + $membershipParams['membership_type_id'], + $primaryContributionID + ); if ($currentMembership) { /* * Fixed FOR CRM-4433 @@ -4044,16 +4049,11 @@ LIMIT 1;"; // @todo - we should pass membership_type_id instead of null here but not // adding as not sure of testing $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($membershipParams['id'], - $changeDate, NULL, $num_terms + $changeDate, NULL, $membershipParams['num_terms'] ); $dates['join_date'] = $currentMembership['join_date']; } - else { - $membershipParams = array_merge($membershipParams, - CRM_Member_BAO_MembershipType::getDatesForMembershipType($membershipParams['membership_type_id'], NULL, NULL, NULL, $num_terms) - ); - } //get the status for membership. $calcStatus = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($dates['start_date'], @@ -4071,40 +4071,10 @@ LIMIT 1;"; $membershipParams['is_override'] = FALSE; civicrm_api3('Membership', 'create', $membershipParams); - $membershipLog = $membershipParams; - - $logStartDate = $membershipParams['start_date']; - if (!empty($dates['log_start_date'])) { - $logStartDate = CRM_Utils_Date::customFormat($dates['log_start_date'], $format); - $logStartDate = CRM_Utils_Date::isoToMysql($logStartDate); - } - - $membershipLog['start_date'] = $logStartDate; - $membershipLog['membership_id'] = $membership->id; - $membershipLog['modified_id'] = $membership->contact_id; - $membershipLog['modified_date'] = date('Ymd'); - $membershipLog['membership_type_id'] = $membership->membership_type_id; - - CRM_Member_BAO_MembershipLog::add($membershipLog, CRM_Core_DAO::$_nullArray); - //update related Memberships. CRM_Member_BAO_Membership::updateRelatedMemberships($membership->id, $membershipParams); - - //update the membership type key of membership relatedObjects array - //if it has changed after membership update - if ($membershipTypeIdKey != $membership->membership_type_id) { - $membershipsUpdate[$membership->membership_type_id] = $membership; - $contribution->_relatedObjects['membership'][$membership->membership_type_id] = $membership; - unset($contribution->_relatedObjects['membership'][$membershipTypeIdKey]); - unset($memberships[$membershipTypeIdKey]); - } } } - //update the memberships object with updated membershipTypeId data - //if membershipTypeId has changed after membership update - if (!empty($membershipsUpdate)) { - $memberships = $memberships + $membershipsUpdate; - } } } else { @@ -4340,7 +4310,7 @@ LIMIT 1;"; * @return array */ public static function sendMail(&$input, &$ids, &$objects, &$values, $recur = FALSE, $returnMessageText = FALSE) { - $contribution = &$objects['contribution']; + $contribution = $objects['contribution']; $input['is_recur'] = $recur; // set receipt from e-mail and name in value if (!$returnMessageText) { diff --git a/api/v3/MembershipLog.php b/api/v3/MembershipLog.php new file mode 100644 index 0000000000..d3307b10d7 --- /dev/null +++ b/api/v3/MembershipLog.php @@ -0,0 +1,88 @@ +createPriceSetWithPage('membership'); + $stateOfGrace = $this->callAPISuccess('MembershipStatus', 'getvalue', array( + 'name' => 'Grace', + 'return' => 'id') + ); $this->setUpPendingContribution($this->_ids['price_field_value'][0]); + $membership = $this->callAPISuccess('membership', 'getsingle', array('id' => $this->_ids['membership'])); + $logs = $this->callAPISuccess('MembershipLog', 'get', array( + 'membership_id' => $this->_ids['membership'], + )); + $this->assertEquals(1, $logs['count']); + $this->assertEquals($stateOfGrace, $membership['status_id']); $this->callAPISuccess('contribution', 'completetransaction', array('id' => $this->_ids['contribution'])); $membership = $this->callAPISuccess('membership', 'getsingle', array('id' => $this->_ids['membership'])); $this->assertEquals(date('Y-m-d', strtotime('yesterday + 1 year')), $membership['end_date']); + $this->callAPISuccessGetSingle('LineItem', array( + 'entity_id' => $this->_ids['membership'], + 'entity_table' => 'civicrm_membership', + )); + $logs = $this->callAPISuccess('MembershipLog', 'get', array( + 'membership_id' => $this->_ids['membership'], + )); + $this->assertEquals(2, $logs['count']); + $this->assertNotEquals($stateOfGrace, $logs['values'][2]['status_id']); $this->cleanUpAfterPriceSets(); } @@ -1661,6 +1680,7 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'membership_type_id' => $this->_ids['membership_type'], 'start_date' => 'yesterday - 1 year', 'end_date' => 'yesterday', + 'join_date' => 'yesterday - 1 year', )); $contribution = $this->callAPISuccess('contribution', 'create', array( 'domain_id' => 1, @@ -1916,8 +1936,8 @@ class api_v3_ContributionTest extends CiviUnitTestCase { } /** - * @param $contribution - * @param $context + * @param array $contribution + * @param string $context * @param int $instrumentId */ public function _checkFinancialTrxn($contribution, $context, $instrumentId = NULL) { -- 2.25.1