// 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');
- $activityParam = array(
- 'subject' => "Status changed from {$allStatus[$oldStatus]} to {$allStatus[$membership->status_id]}",
- 'source_contact_id' => $membershipLog['modified_id'],
- 'target_contact_id' => $membership->contact_id,
- 'source_record_id' => $membership->id,
- 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Membership Status'),
- 'status_id' => 2,
- 'priority_id' => 2,
- 'activity_date_time' => date('Y-m-d H:i:s'),
+ 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' => 'Normal',
+ )
);
- civicrm_api3('activity', 'create', $activityParam);
}
if (isset($membership->membership_type_id) && $membership->membership_type_id != $oldType) {
$membershipTypes = CRM_Member_BAO_Membership::buildOptions('membership_type_id', 'get');
- $activityParam = array(
- 'subject' => "Type changed from {$membershipTypes[$oldType]} to {$membershipTypes[$membership->membership_type_id]}",
- 'source_contact_id' => $membershipLog['modified_id'],
- 'target_contact_id' => $membership->contact_id,
- 'source_record_id' => $membership->id,
- 'activity_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Change Membership Type'),
- 'status_id' => 2,
- 'priority_id' => 2,
- 'activity_date_time' => date('Y-m-d H:i:s'),
+ CRM_Activity_BAO_Activity::addActivity($membership,
+ 'Change Membership Type',
+ NULL,
+ array(
+ 'subject' => "Type changed from {$membershipTypes[$oldType]} to {$membershipTypes[$membership->membership_type_id]}",
+ 'source_contact_id' => $membershipLog['modified_id'],
+ 'priority_id' => 'Normal',
+ )
);
- civicrm_api3('activity', 'create', $activityParam);
}
+
+ 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, $activityParams);
CRM_Utils_Hook::post('create', 'Membership', $membership->id, $membership);
}
* @param array $ids
* Deprecated parameter The array that holds all the db ids.
* @param bool $skipRedirect
- * @param string $activityType
*
* @throws CRM_Core_Exception
*
* @return CRM_Member_BAO_Membership|CRM_Core_Error
*/
- public static function create(&$params, &$ids, $skipRedirect = FALSE, $activityType = 'Membership Signup') {
+ public static function create(&$params, &$ids, $skipRedirect = FALSE) {
// always calculate status if is_override/skipStatusCal is not true.
// giving respect to is_override during import. CRM-4012
));
}
- // add activity record only during create mode and renew mode
- // also add activity if status changed CRM-3984 and CRM-2521
- if (empty($ids['membership']) ||
- $activityType == 'Membership Renewal' || !empty($params['createActivity'])
- ) {
- if (!empty($ids['membership'])) {
- $data = array();
- CRM_Core_DAO::commonRetrieveAll('CRM_Member_DAO_Membership',
- 'id',
- $membership->id,
- $data,
- array('contact_id', 'membership_type_id', 'source')
- );
-
- $membership->contact_id = $data[$membership->id]['contact_id'];
- $membership->membership_type_id = $data[$membership->id]['membership_type_id'];
- $membership->source = CRM_Utils_Array::value('source', $data[$membership->id]);
- }
-
- // since we are going to create activity record w/
- // individual contact as a target in case of on behalf signup,
- // so get the copy of organization id, CRM-5551
- $realMembershipContactId = $membership->contact_id;
-
- // create activity source = individual, target = org CRM-4027
- $targetContactID = NULL;
- if (!empty($params['is_for_organization'])) {
- $targetContactID = $membership->contact_id;
- $membership->contact_id = CRM_Utils_Array::value('userId', $ids);
- }
-
- if (empty($membership->contact_id) && (!empty($membership->owner_membership_id))) {
- $membership->contact_id = $realMembershipContactId;
- }
-
- if (!empty($ids['membership']) && $activityType != 'Membership Signup') {
- CRM_Activity_BAO_Activity::addActivity($membership, $activityType, $targetContactID);
- }
- elseif (empty($ids['membership'])) {
- CRM_Activity_BAO_Activity::addActivity($membership, $activityType, $targetContactID);
- }
-
- // we might created activity record w/ individual
- // contact as target so update membership object w/
- // original organization id, CRM-5551
- $membership->contact_id = $realMembershipContactId;
- }
-
$transaction->commit();
self::createRelatedMemberships($params, $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(
$fields = array_merge($fields, $expFieldMembership);
$membershipStatus = array(
'membership_status' => array(
- 'title' => 'Membership Status',
+ 'title' => ts('Membership Status'),
'name' => 'membership_status',
'type' => CRM_Utils_Type::T_STRING,
'where' => 'civicrm_membership_status.name',
$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);
}
}
$is_test, $membershipID, TRUE
);
if ($currentMembership) {
- $activityType = 'Membership Renewal';
$renewalMode = TRUE;
// Do NOT do anything.
'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;
}
- $membership = self::create($memParams, $ids, FALSE, $activityType);
+
+ $membership = self::create($memParams, $ids, FALSE);
return array($membership, $renewalMode, $dates);
}
if (!empty($currentMembership['id'])) {
$ids['membership'] = $currentMembership['id'];
}
+ $memParams['membership_activity_status'] = ($pending || $isPayLater) ? 'Scheduled' : 'Completed';
}
//CRM-4555
if ($pending) {
}
else {
// NEW Membership
-
- $activityType = 'Membership Signup';
$memParams = array(
'contact_id' => $contactID,
'membership_type_id' => $membershipTypeID,
// Load all line items & process all in membership. Don't do in contribution.
// Relevant tests in api_v3_ContributionPageTest.
$memParams['line_item'] = $lineItems;
- $membership = self::create($memParams, $ids, FALSE, $activityType);
+ $membership = self::create($memParams, $ids, FALSE);
// not sure why this statement is here, seems quite odd :( - Lobo: 12/26/2010
// related to: http://forum.civicrm.org/index.php/topic,11416.msg49072.html#msg49072
*
* @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;
}
'tax_amount',
'skipLineItem',
'contribution_recur_id',
+ 'pan_truncation',
+ 'card_type_id',
);
foreach ($recordContribution as $f) {
$contributionParams[$f] = CRM_Utils_Array::value($f, $params);