+--------------------------------------------------------------------+
| CiviCRM version 4.6 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2014 |
+ | Copyright CiviCRM LLC (c) 2004-2015 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2014
+ * @copyright CiviCRM LLC (c) 2004-2015
* $Id$
*
*/
* @param bool $active
* Do you want only active memberships to.
* be returned
- *
+ * @param bool $relatedMemberships
* @return CRM_Member_BAO_Membership|null the found object or null
*/
- public static function &getValues(&$params, &$values, $active = FALSE) {
+ public static function &getValues(&$params, &$values, $active = FALSE, $relatedMemberships = FALSE) {
if (empty($params)) {
return NULL;
}
CRM_Core_DAO::storeValues($membership, $values[$membership->id]);
$memberships[$membership->id] = $membership;
+ if ($relatedMemberships && !empty($membership->owner_membership_id)) {
+ $values['owner_membership_ids'][] = $membership->owner_membership_id;
+ }
}
return $memberships;
$excludeIsAdmin = TRUE;
}
- $calcStatus = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($start_date, $end_date, $join_date,
- 'today', $excludeIsAdmin, CRM_Utils_Array::value('membership_type_id', $params), $params
- );
+ //CRM-15829 UPDATES
+ // When adding memberships to a contact and If a status is pending then there is no need to perform these calculations. Otherwise it will errernously not realise the pending state and set ot to NEW or GRACE depending on the date ranges.
+ if (isset($params['status_id']) && $params['status_id'] == 5) {
+ $calcStatus['id'] = $params['status_id'];
+ }
+ else {
+ $calcStatus = CRM_Member_BAO_MembershipStatus::getMembershipStatusByDate($start_date, $end_date, $join_date,
+ 'today', $excludeIsAdmin, CRM_Utils_Array::value('membership_type_id', $params), $params
+ );
+ }
+
if (empty($calcStatus)) {
// Redirect the form in case of error
// @todo this redirect in the BAO layer is really bad & should be moved to the form layer
if ($isProcessSeparateMembershipTransaction) {
try {
$lineItems = $form->_lineItem = $membershipLineItems;
+ if (empty($form->_params['auto_renew']) && !empty($membershipParams['is_recur'])) {
+ unset($membershipParams['is_recur']);
+ }
$membershipContribution = self::processSecondaryFinancialTransaction($contactID, $form, $membershipParams, $isTest, $membershipLineItems, CRM_Utils_Array::value('minimum_fee', $membershipDetails, 0), CRM_Utils_Array::value('financial_type_id', $membershipDetails));
}
catch (CRM_Core_Exception $e) {
// Do not send an email if Recurring transaction is done via Direct Mode
// Email will we sent when the IPN is received.
if (!empty($form->_params['is_recur']) && $form->_contributeMode == 'direct') {
- if (!empty($membershipContribution->trxn_id)) {
+ if (!empty($membershipContribution->trxn_id) && !isset($membershipContribution->payment_status_id)
+ || (!empty($membershipContribution->payment_status_id) && $membershipContribution->payment_status_id == 1)) {
try {
civicrm_api3('contribution', 'completetransaction', array(
'id' => $membershipContribution->id,
$modifiedID = NULL,
$customFieldsFormatted = NULL,
$numRenewTerms = 1,
- $membershipID = NULL
+ $membershipID = NULL,
+ $pending = FALSE
) {
$statusFormat = '%Y-%m-%d';
$format = '%Y%m%d';
$membershipTypeDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($membershipTypeID);
// check is it pending. - CRM-4555
- list($pending, $contributionRecurID, $changeToday, $membershipSource, $isPayLater, $campaignId) = self::extractFormValues($form, $changeToday, $membershipTypeDetails);
+ list($pending, $contributionRecurID, $changeToday, $membershipSource, $isPayLater, $campaignId) = self::extractFormValues($form, $changeToday, $membershipTypeDetails, $pending);
list($membership, $renewalMode, $dates) = self::renewMembership($contactID, $membershipTypeID, $is_test, $changeToday, $modifiedID, $customFieldsFormatted, $numRenewTerms, $membershipID, $pending, $allStatus, $membershipTypeDetails, $contributionRecurID, $format, $membershipSource, $ids, $statusFormat, $isPayLater, $campaignId);
$form->set('renewal_mode', $renewalMode);
if (!empty($dates)) {
$format
),
'membership_type_id' => $currentMembership['membership_type_id'],
- 'max_related' => $currentMembership['max_related'],
+ 'max_related' => CRM_Utils_Array::value('max_related', $currentMembership, 0),
);
$session = CRM_Core_Session::singleton();
// irrespective of the value, CRM-2888
$tempParams['cms_create_account'] = 0;
- $pending = $form->_params['is_pay_later'] ? (($minimumFee > 0.0) ? TRUE : FALSE) : FALSE;
+ //CRM-16165, scenarios are
+ // 1) If contribution is_pay_later and if contribution amount is > 0.0 we set pending = TRUE, vice-versa FALSE
+ // 2) If not pay later but auto-renewal membership is chosen then pending = TRUE as it later triggers
+ // pending recurring contribution, vice-versa FALSE
+ $pending = $form->_params['is_pay_later'] ? (($minimumFee > 0.0) ? TRUE : FALSE) : (!empty($form->_params['auto_renew']) ? TRUE : FALSE);
//set this variable as we are not creating pledge for
//separate membership payment contribution.
* @return array
*/
public static function createOrRenewMembership($membershipParams, $contactID, $customFieldsFormatted, $membershipID, $memType, $isTest, $numTerms, $membershipContribution, &$form) {
+ if (!empty($membershipContribution)) {
+ $pending = ($membershipContribution->contribution_status_id == 2) ? TRUE : FALSE;
+ }
$membership = self::renewMembershipFormWrapper($contactID, $memType,
$isTest, $form, NULL,
CRM_Utils_Array::value('cms_contactID', $membershipParams),
$customFieldsFormatted, $numTerms,
- $membershipID
+ $membershipID, $pending
);
if (!empty($membershipContribution)) {
*
* @return array
*/
- public static function extractFormValues($form, $changeToday, $membershipTypeDetails) {
- $pending = FALSE;
+ public static function extractFormValues($form, $changeToday, $membershipTypeDetails, $pending = FALSE) {
//@todo this is a BAO function & should not inspect the form - the form should do this
// & pass required params to the BAO
if (CRM_Utils_Array::value('minimum_fee', $membershipTypeDetails) > 0.0) {
- if (((isset($form->_contributeMode) && $form->_contributeMode == 'notify') || !empty($form->_params['is_pay_later']) ||
- (!empty($form->_params['is_recur']) && $form->_contributeMode == 'direct'
- )
+ if (((isset($form->_contributeMode) && $form->_contributeMode == 'notify') || !empty($form->_params['is_pay_later'])
) &&
- (($form->_values['is_monetary'] && $form->_amount > 0.0) || !empty($form->_params['separate_membership_payment']) ||
+ (($form->_values['is_monetary'] && $form->_amount > 0.0) ||
CRM_Utils_Array::value('record_contribution', $form->_params)
)
) {