'membership_id'
);
}
-
+
$params['skipLineItem'] = TRUE;
-
+
//record contribution for this membership
if (!empty($params['contribution_status_id']) && empty($params['relate_contribution_id'])) {
$memInfo = array_merge($params, array('membership_id' => $membership->id));
$params['contribution'] = self::recordMembershipContribution($memInfo, $ids);
}
-
- if (CRM_Utils_Array::value('lineItems', $params) && empty($params['contributionId'])) {
- CRM_Price_BAO_LineItem::processPriceSet($membership->id, $params['lineItems'], CRM_Utils_Array::value('contribution', $params));
+
+ if (!empty($params['lineItems'])) {
+ $params['line_item'] = $params['lineItems'];
+ }
+
+ //do cleanup line items if membership edit the Membership type.
+ if (empty($ids['contribution']) && !empty($ids['membership'])) {
+ CRM_Price_BAO_LineItem::deleteLineItems($ids['membership'], 'civicrm_membership');
+ }
+
+ if (!empty($params['line_item']) && empty($ids['contribution'])) {
+ CRM_Price_BAO_LineItem::processPriceSet($membership->id, $params['line_item'], CRM_Utils_Array::value('contribution', $params));
}
//insert payment record for this membership
if (!empty($params['relate_contribution_id'])) {
- $mpDAO = new CRM_Member_DAO_MembershipPayment();
- $mpDAO->membership_id = $membership->id;
- $mpDAO->contribution_id = $params['relate_contribution_id'];
- if (!($mpDAO->find(TRUE))) {
- CRM_Utils_Hook::pre('create', 'MembershipPayment', NULL, $mpDAO);
- $mpDAO->save();
- CRM_Utils_Hook::post('create', 'MembershipPayment', $mpDAO->id, $mpDAO);
- }
+ CRM_Member_BAO_MembershipPayment::create(array('membership_id' => $membership->id, 'contribution_id' => $params['relate_contribution_id']));
}
// add activity record only during create mode and renew mode
* @param int $membershipId membership id
* @param int $contactId contact id
*
- * @param const $action
+ * @param integer $action
*
* @return Array array of contact_id of all related contacts.
* @static
*
* @param array $membershipDetails
*
- * @param array $membershipTypeID
+ * @param array $membershipTypeIDs
*
* @param bool $isPaidMembership
- * @param integer $membershipID
+ * @param array $membershipID
*
* @param $isProcessSeparateMembershipTransaction
*
* @access public
*/
public static function postProcessMembership($membershipParams, $contactID, &$form, $premiumParams,
- $customFieldsFormatted = NULL, $includeFieldTypes = NULL, $membershipDetails, $membershipTypeID, $isPaidMembership, $membershipID,
+ $customFieldsFormatted = NULL, $includeFieldTypes = NULL, $membershipDetails, $membershipTypeIDs, $isPaidMembership, $membershipID,
$isProcessSeparateMembershipTransaction, $defaultContributionTypeID, $membershipLineItems) {
$result = $membershipContribution = NULL;
$isTest = CRM_Utils_Array::value('is_test', $membershipParams, FALSE);
$errors = $createdMemberships = array();
-
- $membershipLineItem = array();
- if (is_array($membershipTypeID)) {
- foreach ($form->_lineItem[$form->_priceSetId] as $key => $line) {
- if (!empty($line['membership_type_id'])) {
- $membershipLineItem[$line['membership_type_id']] = $line;
- unset($form->_lineItem[$form->_priceSetId][$key]);
- }
- }
- if (empty($form->_lineItem[$form->_priceSetId])) {
- $membershipParams['skipLineItem'] = TRUE;
- }
+
+ if (CRM_Utils_Array::value('membership_source', $form->_params)) {
+ $membershipParams['contribution_source'] = $form->_params['membership_source'];
}
-
+
if ($isPaidMembership) {
$result = CRM_Contribute_BAO_Contribution_Utils::processConfirm($form, $membershipParams,
$premiumParams, $contactID,
$form->_params['campaign_id'] = $membershipParams['onbehalf']['member_campaign_id'];
}
//@todo it should no longer be possible for it to get to this point & membership to not be an array
- if (is_array($membershipTypeID)) {
+ if (is_array($membershipTypeIDs) && !empty($membershipContributionID)) {
$typesTerms = CRM_Utils_Array::value('types_terms', $membershipParams, array());
- foreach ($membershipTypeID as $memType) {
+ foreach ($membershipTypeIDs as $memType) {
$numTerms = CRM_Utils_Array::value($memType, $typesTerms, 1);
$createdMemberships[$memType] = self::createOrRenewMembership($membershipParams, $contactID, $customFieldsFormatted, $membershipID, $memType, $isTest, $numTerms, $membershipContribution, $form);
- if (CRM_Utils_Array::value($memType, $membershipLineItem)) {
- CRM_Price_BAO_LineItem::processPriceSet($createdMemberships[$memType]->id, array($form->_priceSetId => array($membershipLineItem[$memType])), $membershipContribution);
- $form->_lineItem[$form->_priceSetId][] = $membershipLineItem[$memType];
- }
}
if ($form->_priceSetId && !empty($form->_useForMember) && !empty($form->_lineItem)) {
foreach ($form->_lineItem[$form->_priceSetId] as & $priceFieldOp) {
isset($createdMemberships[$priceFieldOp['membership_type_id']])
) {
$membershipOb = $createdMemberships[$priceFieldOp['membership_type_id']];
- $priceFieldOp['start_date'] = $membershipOb->start_date ? CRM_Utils_Date::customFormat($membershipOb->start_date, '%d%f %b, %Y') : '-';
- $priceFieldOp['end_date'] = $membershipOb->end_date ? CRM_Utils_Date::customFormat($membershipOb->end_date, '%d%f %b, %Y') : '-';
+ $priceFieldOp['start_date'] = $membershipOb->start_date ? CRM_Utils_Date::customFormat($membershipOb->start_date, '%B %E%f, %Y') : '-';
+ $priceFieldOp['end_date'] = $membershipOb->end_date ? CRM_Utils_Date::customFormat($membershipOb->end_date, '%B %E%f, %Y') : '-';
}
else {
$priceFieldOp['start_date'] = $priceFieldOp['end_date'] = 'N/A';
}
if(count($createdMemberships) == 1) {
//presumably this is only relevant for exactly 1 membership
- $form->_params['membershipID'] = $form->_values['membership_id'] = $createdMembership->id;
+ $form->_params['membershipID'] = $createdMembership->id;
}
+ //CRM-15232: Check if membership is created and on the basis of it use
+ //membership reciept template to send payment reciept
+ if (count($createdMemberships)) {
+ $form->_values['isMembership'] = TRUE;
+ }
if ($form->_contributeMode == 'notify') {
if ($form->_values['is_monetary'] && $form->_amount > 0.0 && !$form->_params['is_pay_later']) {
// call postProcess hook before leaving
// 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)) {
+ try {
+ civicrm_api3('contribution', 'completetransaction', array('id' => $membershipContribution->id, 'trxn_id' => $membershipContribution->trxn_id));
+ }
+ catch (CiviCRM_API3_Exception $e) {
+ // if for any reason it is already completed this will fail - e.g extensions hacking around core not completing transactions prior to CRM-15296
+ // so let's be gentle here
+ CRM_Core_Error::debug_log_message('contribution ' . $membershipContribution->id . ' not completed with trxn_id ' . $membershipContribution->trxn_id . ' and message ' . $e->getMessage());
+ }
+ }
return;
}
* then status will be updated based on existing start and end
* dates and log will be added for the status change.
*
- * @param array $currentMembership referance to the array
+ * @param array $currentMembership reference to the array
* containing all values of
* the current membership
* @param array $changeToday array of month, day, year
*
* @param $contactID
* @param CRM_Contribute_Form_Contribution_Confirm $form
- * @param $membershipDetails
* @param $tempParams
* @param $isTest
*
+ * @param $lineItems
+ * @param $minimumFee
+ * @param $financialTypeID
+ *
* @throws CRM_Core_Exception
+ * @throws Exception
+ * @internal param $membershipDetails
* @return CRM_Contribute_BAO_Contribution
*/
public static function processSecondaryFinancialTransaction($contactID, &$form, $tempParams, $isTest, $lineItems, $minimumFee, $financialTypeID) {
$form->set('membership_trx_id', $result['trxn_id']);
$form->set('membership_amount', $minimumFee);
+ $form->assign('membership_trx_id', $result['trxn_id']);
+ $form->assign('membership_amount', $minimumFee);
+
// we don't need to create the user twice, so lets disable cms_create_account
// irrespective of the value, CRM-2888
$tempParams['cms_create_account'] = 0;
$format
),
'membership_type_id' => $membershipTypeID,
- 'max_related' => $membershipTypeDetails['max_related'],
+ 'max_related' => !empty($membershipTypeDetails['max_related']) ? $membershipTypeDetails['max_related'] : NULL,
);
$session = CRM_Core_Session::singleton();
// If we have an authenticated session, set modified_id to that user's contact_id, else set to membership.contact_id
$contributionParams['receipt_date'] = (CRM_Utils_Array::value('receipt_date', $params)) ? $params['receipt_date'] : 'null';
$contributionParams['source'] = CRM_Utils_Array::value('contribution_source', $params);
$contributionParams['non_deductible_amount'] = 'null';
+ $contributionParams['payment_processor'] = CRM_Utils_Array::value('payment_processor_id', $params);
$contributionSoftParams = CRM_Utils_Array::value('soft_credit', $params);
$recordContribution = array(
'contact_id', 'total_amount', 'receive_date', 'financial_type_id',
'payment_instrument_id', 'trxn_id', 'invoice_id', 'is_test',
'contribution_status_id', 'check_number', 'campaign_id', 'is_pay_later',
- 'membership_id', 'skipLineItem'
+ 'membership_id', 'tax_amount', 'skipLineItem'
);
foreach ($recordContribution as $f) {
$contributionParams[$f] = CRM_Utils_Array::value($f, $params);
$contribution = CRM_Contribute_BAO_Contribution::create($contributionParams, $ids);
- //CRM-13981, create new soft-credit record as to record payment from differnt person for this membership
+ //CRM-13981, create new soft-credit record as to record payment from different person for this membership
if (!empty($contributionSoftParams)) {
- $contributionSoftParams['contribution_id'] = $contribution->id;
- $contributionSoftParams['currency'] = $contribution->currency;
- $contributionSoftParams['amount'] = $contribution->total_amount;
- CRM_Contribute_BAO_ContributionSoft::add($contributionSoftParams);
+ if (!empty($params['batch_id'])) {
+ foreach ($contributionSoftParams as $contributionSoft) {
+ $contributionSoft['contribution_id'] = $contribution->id;
+ $contributionSoft['currency'] = $contribution->currency;
+ CRM_Contribute_BAO_ContributionSoft::add($contributionSoft);
+ }
+ }
+ else {
+ $contributionSoftParams['contribution_id'] = $contribution->id;
+ $contributionSoftParams['currency'] = $contribution->currency;
+ $contributionSoftParams['amount'] = $contribution->total_amount;
+ CRM_Contribute_BAO_ContributionSoft::add($contributionSoftParams);
+ }
}
// store contribution id
//insert payment record for this membership
if (empty($ids['contribution']) || !empty($params['is_recur'])) {
- $mpDAO = new CRM_Member_DAO_MembershipPayment();
- $mpDAO->membership_id = $membershipId;
- $mpDAO->contribution_id = $contribution->id;
- if (!empty($params['is_recur'])) {
- $mpDAO->find();
- }
-
- CRM_Utils_Hook::pre('create', 'MembershipPayment', NULL, $mpDAO);
- $mpDAO->save();
- CRM_Utils_Hook::post('create', 'MembershipPayment', $mpDAO->id, $mpDAO);
+ CRM_Member_BAO_MembershipPayment::create(array('membership_id' => $membershipId, 'contribution_id' => $contribution->id));
}
return $contribution;
}