// reset the group contact cache since smart groups might be affected due to this
CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush();
+ $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
+ $activityParams = array(
+ 'status_id' => CRM_Utils_Array::value('membership_activity_status', $params, 'Completed'),
+ );
+ if (in_array($allStatus[$membership->status_id], array('Pending', 'Grace'))) {
+ $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'])) {
$targetContactID = CRM_Utils_Array::value('userId', $ids);
}
if ($id) {
if ($membership->status_id != $oldStatus) {
- $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
CRM_Activity_BAO_Activity::addActivity($membership,
'Change Membership Status',
NULL,
array(
'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$membership->status_id]}",
'source_contact_id' => $membershipLog['modified_id'],
- 'priority_id' => 2,
+ 'priority_id' => 'Normal',
)
);
}
array(
'subject' => "Type changed from {$membershipTypes[$oldType]} to {$membershipTypes[$membership->membership_type_id]}",
'source_contact_id' => $membershipLog['modified_id'],
- 'priority_id' => 2,
+ 'priority_id' => 'Normal',
)
);
}
- // via Contribution.completeOrder membership.create is called again to ensure correct data has been
- // copied to the related membership. but there is a sideffect of this new membership workflow as a
- // 'Membership Renewal' Activity is created. We can avoid this on basis of is_override=FALSE condition
- if (CRM_Utils_Array::value('is_override', $params) != 'null') {
- CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Renewal', $targetContactID);
+
+ foreach (array('Membership Signup', 'Membership Renewal') as $activityType) {
+ $activityParams['id'] = CRM_Utils_Array::value('id',
+ civicrm_api3('Activity', 'Get',
+ array(
+ 'source_record_id' => $membership->id,
+ 'activity_type_id' => $activityType,
+ 'status_id' => 'Scheduled',
+ )
+ )
+ );
+ // 1. Update Schedule Membership Signup/Renwal activity to completed on successful payment of pending membership
+ // 2. OR Create renewal activity scheduled if its membership renewal will be paid later
+ if (!empty($params['membership_activity_status']) && (!empty($activityParams['id']) || $activityType == 'Membership Renewal')) {
+ CRM_Activity_BAO_Activity::addActivity($membership, $activityType, $targetContactID, $activityParams);
+ break;
+ }
}
+
CRM_Utils_Hook::post('edit', 'Membership', $membership->id, $membership);
}
else {
- CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Signup', $targetContactID);
+ CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Signup', $targetContactID, $activityParams);
CRM_Utils_Hook::post('create', 'Membership', $membership->id, $membership);
}
}
//avoid pending membership as current membership: CRM-3027
- $statusIds[] = array_search('Pending', CRM_Member_PseudoConstant::membershipStatus());
+ $statusIds = array(array_search('Pending', CRM_Member_PseudoConstant::membershipStatus()));
if (!$membershipId) {
// CRM-15475
$statusIds[] = array_search(
$currentMembership['today_date'] = $today;
if ($status['id'] !== $currentMembership['status_id']) {
+ $oldStatus = $currentMembership['status_id'];
$memberDAO = new CRM_Member_DAO_Membership();
$memberDAO->id = $currentMembership['id'];
$memberDAO->find(TRUE);
else {
$logParams['modified_id'] = $currentMembership['contact_id'];
}
+
+ //Create activity for status change.
+ $allStatus = CRM_Member_BAO_Membership::buildOptions('status_id', 'get');
+ CRM_Activity_BAO_Activity::addActivity($memberDAO,
+ 'Change Membership Status',
+ NULL,
+ array(
+ 'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$status['id']]}",
+ 'source_contact_id' => $logParams['modified_id'],
+ 'priority_id' => 'Normal',
+ )
+ );
+
CRM_Member_BAO_MembershipLog::add($logParams, CRM_Core_DAO::$_nullArray);
}
}
'join_date' => $currentMembership['join_date'],
'membership_type_id' => $membershipTypeID,
'max_related' => !empty($membershipTypeDetails['max_related']) ? $membershipTypeDetails['max_related'] : NULL,
+ 'membership_activity_status' => ($pending || $isPayLater) ? 'Scheduled' : 'Completed',
);
if ($contributionRecurID) {
$memParams['contribution_recur_id'] = $contributionRecurID;
if (!empty($currentMembership['id'])) {
$ids['membership'] = $currentMembership['id'];
}
+ $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed';
}
//CRM-4555
if ($pending) {
*
* @param int $membershipId
* Membership id.
+ * @all bool
+ * if more than one payment associated with membership id need to be returned.
*
* @return int
* contribution id
*/
- public static function getMembershipContributionId($membershipId) {
+ public static function getMembershipContributionId($membershipId, $all = FALSE) {
$membershipPayment = new CRM_Member_DAO_MembershipPayment();
$membershipPayment->membership_id = $membershipId;
+ if ($all && $membershipPayment->find()) {
+ $contributionIds = array();
+ while ($membershipPayment->fetch()) {
+ $contributionIds[] = $membershipPayment->contribution_id;
+ }
+ return $contributionIds;
+ }
+
if ($membershipPayment->find(TRUE)) {
return $membershipPayment->contribution_id;
}