From dfd10cd7c7d58f48466dbf75352539da685bb740 Mon Sep 17 00:00:00 2001 From: Kartik Kathuria Date: Fri, 6 Mar 2020 02:18:31 +0530 Subject: [PATCH] Shifted UpdateMemberhsip to BAO Layer Signed-off-by: Kartik Kathuria --- CRM/Contact/Form/Contact.php | 103 +--------------------------------- CRM/Member/BAO/Membership.php | 101 +++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 102 deletions(-) diff --git a/CRM/Contact/Form/Contact.php b/CRM/Contact/Form/Contact.php index df3a342e4a..314f3ea878 100644 --- a/CRM/Contact/Form/Contact.php +++ b/CRM/Contact/Form/Contact.php @@ -914,7 +914,7 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { 'is_deceased' => CRM_Utils_Array::value('is_deceased', $params, FALSE), 'deceased_date' => CRM_Utils_Array::value('deceased_date', $params, NULL), ]; - $updateMembershipMsg = $this->updateMembershipStatus($deceasedParams, $this->_contactType); + $updateMembershipMsg = CRM_Member_BAO_Membership::updateMembershipStatus($deceasedParams, $this->_contactType); } // action is taken depending upon the mode @@ -1394,105 +1394,4 @@ class CRM_Contact_Form_Contact extends CRM_Core_Form { return "$number$str"; } - /** - * Update membership status to deceased. - * function return the status message for updated membership. - * - * @param array $deceasedParams - * - contact id - * - is_deceased - * - deceased_date - * - * @param string $contactType - * - * @return null|string - * $updateMembershipMsg string status message for updated membership. - */ - public function updateMembershipStatus($deceasedParams, $contactType) { - $updateMembershipMsg = NULL; - $contactId = CRM_Utils_Array::value('contact_id', $deceasedParams); - $deceasedDate = CRM_Utils_Array::value('deceased_date', $deceasedParams); - - // process to set membership status to deceased for both active/inactive membership - if ($contactId && - $contactType === 'Individual' && !empty($deceasedParams['is_deceased']) - ) { - - $session = CRM_Core_Session::singleton(); - $userId = $session->get('userID'); - if (!$userId) { - $userId = $contactId; - } - - // get deceased status id - $allStatus = CRM_Member_PseudoConstant::membershipStatus(); - $deceasedStatusId = array_search('Deceased', $allStatus); - if (!$deceasedStatusId) { - return $updateMembershipMsg; - } - - $today = time(); - if ($deceasedDate && strtotime($deceasedDate) > $today) { - return $updateMembershipMsg; - } - - // get non deceased membership - $dao = new CRM_Member_DAO_Membership(); - $dao->contact_id = $contactId; - $dao->whereAdd("status_id != $deceasedStatusId"); - $dao->find(); - $activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'name'); - $allStatus = CRM_Member_PseudoConstant::membershipStatus(); - $memCount = 0; - while ($dao->fetch()) { - // update status to deceased (for both active/inactive membership ) - CRM_Core_DAO::setFieldValue('CRM_Member_DAO_Membership', $dao->id, - 'status_id', $deceasedStatusId - ); - - // add membership log - $membershipLog = [ - 'membership_id' => $dao->id, - 'status_id' => $deceasedStatusId, - 'start_date' => CRM_Utils_Date::isoToMysql($dao->start_date), - 'end_date' => CRM_Utils_Date::isoToMysql($dao->end_date), - 'modified_id' => $userId, - 'modified_date' => date('Ymd'), - 'membership_type_id' => $dao->membership_type_id, - 'max_related' => $dao->max_related, - ]; - - CRM_Member_BAO_MembershipLog::add($membershipLog); - - //create activity when membership status is changed - $activityParam = [ - 'subject' => "Status changed from {$allStatus[$dao->status_id]} to {$allStatus[$deceasedStatusId]}", - 'source_contact_id' => $userId, - 'target_contact_id' => $dao->contact_id, - 'source_record_id' => $dao->id, - 'activity_type_id' => array_search('Change Membership Status', $activityTypes), - 'status_id' => 2, - 'version' => 3, - 'priority_id' => 2, - 'activity_date_time' => date('Y-m-d H:i:s'), - 'is_auto' => 0, - 'is_current_revision' => 1, - 'is_deleted' => 0, - ]; - $activityResult = civicrm_api('activity', 'create', $activityParam); - - $memCount++; - } - - // set status msg - if ($memCount) { - $updateMembershipMsg = ts("%1 Current membership(s) for this contact have been set to 'Deceased' status.", - [1 => $memCount] - ); - } - } - - return $updateMembershipMsg; - } - } diff --git a/CRM/Member/BAO/Membership.php b/CRM/Member/BAO/Membership.php index 6ec0a602cd..ef8f156264 100644 --- a/CRM/Member/BAO/Membership.php +++ b/CRM/Member/BAO/Membership.php @@ -2669,4 +2669,105 @@ WHERE civicrm_membership.is_test = 0 $sqlQueries = array_merge($sqlQueries, $newSql); } + /** + * Update membership status to deceased. + * function return the status message for updated membership. + * + * @param array $deceasedParams + * - contact id + * - is_deceased + * - deceased_date + * + * @param string $contactType + * + * @return null|string + * $updateMembershipMsg string status message for updated membership. + */ + public static function updateMembershipStatus($deceasedParams, $contactType) { + $updateMembershipMsg = NULL; + $contactId = CRM_Utils_Array::value('contact_id', $deceasedParams); + $deceasedDate = CRM_Utils_Array::value('deceased_date', $deceasedParams); + + // process to set membership status to deceased for both active/inactive membership + if ($contactId && + $contactType === 'Individual' && + !empty($deceasedParams['is_deceased']) + ) { + + $session = CRM_Core_Session::singleton(); + $userId = $session->get('userID'); + if (!$userId) { + $userId = $contactId; + } + + // get deceased status id + $allStatus = CRM_Member_PseudoConstant::membershipStatus(); + $deceasedStatusId = array_search('Deceased', $allStatus); + if (!$deceasedStatusId) { + return $updateMembershipMsg; + } + + $today = time(); + if ($deceasedDate && strtotime($deceasedDate) > $today) { + return $updateMembershipMsg; + } + + // get non deceased membership + $dao = new CRM_Member_DAO_Membership(); + $dao->contact_id = $contactId; + $dao->whereAdd("status_id != $deceasedStatusId"); + $dao->find(); + $activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'name'); + $allStatus = CRM_Member_PseudoConstant::membershipStatus(); + $memCount = 0; + while ($dao->fetch()) { + // update status to deceased (for both active/inactive membership ) + CRM_Core_DAO::setFieldValue('CRM_Member_DAO_Membership', $dao->id, + 'status_id', $deceasedStatusId + ); + + // add membership log + $membershipLog = [ + 'membership_id' => $dao->id, + 'status_id' => $deceasedStatusId, + 'start_date' => CRM_Utils_Date::isoToMysql($dao->start_date), + 'end_date' => CRM_Utils_Date::isoToMysql($dao->end_date), + 'modified_id' => $userId, + 'modified_date' => date('Ymd'), + 'membership_type_id' => $dao->membership_type_id, + 'max_related' => $dao->max_related, + ]; + + CRM_Member_BAO_MembershipLog::add($membershipLog); + + //create activity when membership status is changed + $activityParam = [ + 'subject' => "Status changed from {$allStatus[$dao->status_id]} to {$allStatus[$deceasedStatusId]}", + 'source_contact_id' => $userId, + 'target_contact_id' => $dao->contact_id, + 'source_record_id' => $dao->id, + 'activity_type_id' => array_search('Change Membership Status', $activityTypes), + 'status_id' => 2, + 'version' => 3, + 'priority_id' => 2, + 'activity_date_time' => date('Y-m-d H:i:s'), + 'is_auto' => 0, + 'is_current_revision' => 1, + 'is_deleted' => 0, + ]; + $activityResult = civicrm_api('activity', 'create', $activityParam); + + $memCount++; + } + + // set status msg + if ($memCount) { + $updateMembershipMsg = ts("%1 Current membership(s) for this contact have been set to 'Deceased' status.", + [1 => $memCount] + ); + } + } + + return $updateMembershipMsg; + } } -- 2.25.1