From 82bee9d59851192be6dc544915566a6536b271fe Mon Sep 17 00:00:00 2001 From: Dave Greenberg Date: Wed, 20 Nov 2013 16:00:13 -0800 Subject: [PATCH] CRM-13786 - Fix calc of membership end date when join date is in the past (for fixed period memberships). ---------------------------------------- * CRM-13786: Membership End Date not calculated properly for fixed period MembershipTypes http://issues.civicrm.org/jira/browse/CRM-13786 --- CRM/Member/BAO/MembershipType.php | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/CRM/Member/BAO/MembershipType.php b/CRM/Member/BAO/MembershipType.php index c8218459d1..bd78d455fb 100644 --- a/CRM/Member/BAO/MembershipType.php +++ b/CRM/Member/BAO/MembershipType.php @@ -315,15 +315,12 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { $actualStartDate = $startDate; } elseif (CRM_Utils_Array::value('period_type', $membershipTypeDetails) == 'fixed') { - //calculate start date - - // today is always join date, in case of Online join date - // is equal to current system date - $toDay = explode('-', $joinDate); - - // get year from join date + // calculate start date + // if !$startDate then use $joinDate + $toDay = explode('-', (empty($startDate) ? $joinDate : $startDate)); $year = $toDay[0]; $month = $toDay[1]; + $day = $toDay[2]; if ($membershipTypeDetails['duration_unit'] == 'year') { @@ -333,7 +330,12 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { ); $startDay = substr($membershipTypeDetails['fixed_period_start_day'], -2); - $fixedStartDate = date('Y-m-d', mktime(0, 0, 0, $startMonth, $startDay, $year)); + if (date('Y-m-d', mktime(0, 0, 0, $startMonth, $startDay, $year)) <= date('Y-m-d', mktime(0, 0, 0, $month, $day, $year))) { + $fixedStartDate = date('Y-m-d', mktime(0, 0, 0, $startMonth, $startDay, $year)); + } + else { + $fixedStartDate = date('Y-m-d', mktime(0, 0, 0, $startMonth, $startDay, $year - 1)); + } //get start rollover day $rolloverMonth = substr($membershipTypeDetails['fixed_period_rollover_day'], 0, @@ -353,11 +355,6 @@ class CRM_Member_BAO_MembershipType extends CRM_Member_DAO_MembershipType { //store original fixed rollover date as per current year. $actualRolloverDate = $fixedRolloverDate; - //make sure membership should not start in future. - if ($joinDate < $actualStartDate) { - $actualStartDate = date('Y-m-d', mktime(0, 0, 0, $startMonth, $startDay, $year - 1)); - } - //get the fixed end date here. $dateParts = explode('-', $actualStartDate); $fixedEndDate = date('Y-m-d', mktime(0, 0, 0, -- 2.25.1