From 98f0683a390094e7975a4ea4c2daa821db255a78 Mon Sep 17 00:00:00 2001 From: Jitendra Purohit Date: Wed, 10 May 2017 16:25:46 +0530 Subject: [PATCH] Additional fixes related to creation of activities on membership signup/renewal --- CRM/Activity/BAO/Activity.php | 3 +-- CRM/Contribute/BAO/Contribution.php | 2 +- CRM/Member/BAO/Membership.php | 5 +++-- tests/phpunit/api/v3/ContributionTest.php | 11 +++++++++-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/CRM/Activity/BAO/Activity.php b/CRM/Activity/BAO/Activity.php index 2300856904..9784aff363 100644 --- a/CRM/Activity/BAO/Activity.php +++ b/CRM/Activity/BAO/Activity.php @@ -2067,6 +2067,7 @@ WHERE activity.id IN ($activityIds)"; if ($activity->contribution_status_id != 1) { return NULL; } + $activityType = $component = 'Contribution'; // retrieve existing activity based on source_record_id and activity_type if (empty($params['id'])) { @@ -2081,14 +2082,12 @@ WHERE activity.id IN ($activityIds)"; } $date = CRM_Utils_Date::isoToMysql($activity->receive_date); - $activityType = $component = 'Contribution'; } $activityParams = array( 'source_contact_id' => $activity->contact_id, 'source_record_id' => $activity->id, 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', $activityType), - 'target_contact_id' => $activity->contact_id, 'activity_date_time' => $date, 'is_test' => $activity->is_test, 'status_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', 'Completed'), diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 211c164cf9..4629db2ed2 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -1868,6 +1868,7 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ // CRM-15735-to update the membership status as per the contribution receive date $joinDate = NULL; + $oldStatus = $membership->status_id; if (!empty($params['receive_date'])) { $joinDate = $params['receive_date']; $status = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($membership->start_date, @@ -1883,7 +1884,6 @@ LEFT JOIN civicrm_contribution contribution ON ( componentPayment.contribution_ } if ($currentMembership) { - $oldStatus = $currentMembership['status_id']; CRM_Member_BAO_Membership::fixMembershipStatusBeforeRenew($currentMembership, NULL); $dates = CRM_Member_BAO_MembershipType::getRenewalDatesForMembershipType($membership->id, NULL, NULL, $numterms); $dates['join_date'] = CRM_Utils_Date::customFormat($currentMembership['join_date'], $format); diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index de95c516ae..07716ced10 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -144,8 +144,9 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership { 'status_id' => CRM_Utils_Array::value('membership_activity_status', $params, 'Completed'), ); if (in_array($allStatus[$membership->status_id], array('Pending', 'Grace'))) { - $activityParams['status_id'] = CRM_Core_OptionGroup::getValue('activity_status', 'Scheduled', 'name'); + $activityParams['status_id'] = 'Scheduled'; } + $activityParams['status_id'] = CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_status_id', $activityParams['status_id']); $targetContactID = $membership->contact_id; if (!empty($params['is_for_organization'])) { @@ -1853,7 +1854,7 @@ INNER JOIN civicrm_contact contact ON ( contact.id = membership.contact_id AND 'join_date' => $currentMembership['join_date'], 'membership_type_id' => $membershipTypeID, 'max_related' => !empty($membershipTypeDetails['max_related']) ? $membershipTypeDetails['max_related'] : NULL, - 'membership_activity_status' => $isPayLater ? 'Scheduled' : 'Completed', + 'membership_activity_status' => ($pending || $isPayLater) ? 'Scheduled' : 'Completed', ); if ($contributionRecurID) { $memParams['contribution_recur_id'] = $contributionRecurID; diff --git a/tests/phpunit/api/v3/ContributionTest.php b/tests/phpunit/api/v3/ContributionTest.php index 64214fe1a6..b2b838f138 100644 --- a/tests/phpunit/api/v3/ContributionTest.php +++ b/tests/phpunit/api/v3/ContributionTest.php @@ -2751,6 +2751,13 @@ class api_v3_ContributionTest extends CiviUnitTestCase { )); $this->assertEquals(2, $logs['count']); $this->assertNotEquals($stateOfGrace, $logs['values'][2]['status_id']); + //Assert only three activities are created. + $activities = CRM_Activity_BAO_Activity::getContactActivity($this->_ids['contact']); + $this->assertEquals(3, count($activities)); + $activityNames = array_flip(CRM_Utils_Array::collect('activity_name', $activities)); + $this->assertArrayHasKey('Contribution', $activityNames); + $this->assertArrayHasKey('Membership Signup', $activityNames); + $this->assertArrayHasKey('Change Membership Status', $activityNames); $this->cleanUpAfterPriceSets(); } @@ -2877,8 +2884,8 @@ class api_v3_ContributionTest extends CiviUnitTestCase { 'financial_type_id' => 1, 'payment_instrument_id' => 'Credit Card', 'non_deductible_amount' => 10.00, - 'trxn_id' => 'jdhfi88', - 'invoice_id' => 'djfhiewuyr', + 'trxn_id' => 'jdhfi' . rand(1, 100), + 'invoice_id' => 'djfhiew' . rand(5, 100), 'source' => 'SSF', 'contribution_status_id' => 2, 'contribution_page_id' => $this->_ids['contribution_page'], -- 2.25.1