update to lifetime membership does not clear the end date
authorJitendra Purohit <jitendra@fuzion.co.nz>
Wed, 3 Mar 2021 12:44:55 +0000 (18:14 +0530)
committerJitendra Purohit <jitendra@fuzion.co.nz>
Wed, 3 Mar 2021 12:58:34 +0000 (18:28 +0530)
CRM/Member/BAO/Membership.php
tests/phpunit/CRM/Member/Form/MembershipTest.php

index 471a15e39416b86d7a100c94c145ffa92f07502e..a3f77a558e886c88575d7fd993128e1e98d0f2a0 100644 (file)
@@ -246,6 +246,11 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    * @throws CRM_Core_Exception
    */
   public static function create(&$params, $ids = []) {
+    $isLifeTime = FALSE;
+    if (!empty($params['membership_type_id'])) {
+      $memTypeDetails = CRM_Member_BAO_MembershipType::getMembershipType($params['membership_type_id']);
+      $isLifeTime = $memTypeDetails['duration_unit'] === 'lifetime' ? TRUE : FALSE;
+    }
     // always calculate status if is_override/skipStatusCal is not true.
     // giving respect to is_override during import.  CRM-4012
 
@@ -260,7 +265,7 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
           // @todo enable this once core is using the api.
           // CRM_Core_Error::deprecatedWarning('Relying on the BAO to clean up dates is deprecated. Call membership create via the api');
         }
-        if (!empty($params['id']) && empty($params[$dateField])) {
+        if (!empty($params['id']) && empty($params[$dateField]) && !($isLifeTime && $dateField == 'end_date')) {
           $fieldsToLoad[] = $dateField;
         }
       }
index 3a00ecbe26190d398178b4514b37c215844c5d06..f07bfb90e29baeac449cb38a2a97c13f19787421 100644 (file)
@@ -672,6 +672,13 @@ class CRM_Member_Form_MembershipTest extends CiviUnitTestCase {
     $this->assertEquals(50, $payment['paid']);
     // balance remaining
     $this->assertEquals(-25, $payment['balance']);
+
+    //Update to lifetime membership.
+    $params['membership_type_id'] = [$this->ids['contact']['organization'], $this->ids['membership_type']['lifetime']];
+    $form->testSubmit($params);
+    $membership = $this->callAPISuccessGetSingle('Membership', ['contact_id' => $this->_individualId]);
+    $this->assertEquals($this->ids['membership_type']['lifetime'], $membership['membership_type_id']);
+    $this->assertTrue(empty($membership['end_date']), 'Lifetime Membership on the individual has an End date.');
   }
 
   /**