From 41dcb974b885dbb525654ee99405ae61806dcfc1 Mon Sep 17 00:00:00 2001 From: jitendrapurohit Date: Tue, 25 Oct 2016 11:57:36 +0530 Subject: [PATCH] CRM-18503 - Membership join_date is incorrectly set by CiviContribute sign-up page --- CRM/Member/BAO/MembershipType.php | 4 +++ tests/phpunit/api/v3/MembershipTest.php | 44 +++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/CRM/Member/BAO/MembershipType.php b/CRM/Member/BAO/MembershipType.php index 322a03521f..fcc5597e75 100644 --- a/CRM/Member/BAO/MembershipType.php +++ b/CRM/Member/BAO/MembershipType.php @@ -604,6 +604,10 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { $membershipDates['start_date'] = $renewalDates['start_date']; $membershipDates['end_date'] = $renewalDates['end_date']; $membershipDates['log_start_date'] = $renewalDates['start_date']; + // CRM-18503 - set join_date as today in case the membership type is fixed. + if ($membershipTypeDetails['period_type'] == 'fixed' && !isset($membershipDates['join_date'])) { + $membershipDates['join_date'] = $renewalDates['join_date']; + } } if (!isset($membershipDates['join_date'])) { $membershipDates['join_date'] = $membershipDates['start_date']; diff --git a/tests/phpunit/api/v3/MembershipTest.php b/tests/phpunit/api/v3/MembershipTest.php index a8dabe9183..bb58aaadf2 100644 --- a/tests/phpunit/api/v3/MembershipTest.php +++ b/tests/phpunit/api/v3/MembershipTest.php @@ -1118,6 +1118,50 @@ class api_v3_MembershipTest extends CiviUnitTestCase { $this->assertEquals('2014-02-28', $result['end_date']); } + /** + * CRM-18503 - Test membership join date is correctly set for fixed memberships. + */ + public function testMembershipJoinDateFixed() { + $memStatus = CRM_Member_PseudoConstant::membershipStatus(); + // Update the fixed membership type to 1 year duration. + $this->callAPISuccess('membership_type', 'create', array('id' => $this->_membershipTypeID2, 'duration_interval' => 1)); + $contactId = $this->createLoggedInUser(); + // Create membership with 'Pending' status. + $params = array( + 'contact_id' => $contactId, + 'membership_type_id' => $this->_membershipTypeID2, + 'source' => 'test membership', + 'is_pay_later' => 0, + 'status_id' => array_search('Pending', $memStatus), + 'skipStatusCal' => 1, + 'is_for_organization' => 1, + ); + $ids = array(); + $membership = CRM_Member_BAO_Membership::create($params, $ids); + + // Update membership to 'Completed' and check the dates. + $memParams = array( + 'id' => $membership->id, + 'contact_id' => $contactId, + 'is_test' => 0, + 'membership_type_id' => $this->_membershipTypeID2, + 'num_terms' => 1, + 'status_id' => array_search('New', $memStatus), + ); + $result = $this->callAPISuccess('Membership', 'create', $memParams); + + $expectedDates = array( + 'join_date' => date('Ymd'), + 'start_date' => date('Ymd',strtotime(date('Y-03-01'))), + 'end_date' => date('Ymd',strtotime(date('Y-03-01') . '+ 1 year - 1 day')), + ); + foreach ($result['values'] as $values) { + foreach ($expectedDates as $date => $val) { + $this->assertEquals($val, $values[$date]); + } + } + } + /** * Test correct end and start dates are calculated for fixed multi year memberships. * -- 2.25.1