// Figure out number of terms
$numterms = 1;
- $lineitems = CRM_Price_BAO_LineItem::getLineItems($contributionId, 'contribution');
+ $lineitems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($contributionId);
foreach ($lineitems as $lineitem) {
if ($membership->membership_type_id == CRM_Utils_Array::value('membership_type_id', $lineitem)) {
$numterms = CRM_Utils_Array::value('membership_num_terms', $lineitem);
//update related Memberships.
CRM_Member_BAO_Membership::updateRelatedMemberships($membership->id, $formattedParams);
+ //CRM-19678: No Membership Renewal Activity is created when a Pay Later is set to Completed
+ CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Renewal', $membership->contact_id);
+
$updateResult['membership_end_date'] = CRM_Utils_Date::customFormat($dates['end_date'],
'%B %E%f, %Y'
);
//CRM-18805 -- Contribution page not recorded on recurring transactions, Recurring contribution payments
//do not create CC or BCC emails or profile notifications.
//The if is just to be safe. Not sure if we can ever arrive with this unset
- if (isset($contribution->contribution_page_id)) {
+ // but per CRM-19478 it seems it can be 'null'
+ if (isset($contribution->contribution_page_id) && is_numeric($contribution->contribution_page_id)) {
$contributionParams['contribution_page_id'] = $contribution->contribution_page_id;
}
}
// set lineItem for contribution
if ($this->id) {
- $lineItem = CRM_Price_BAO_LineItem::getLineItems($this->id, 'contribution', 1);
- if (!empty($lineItem)) {
- $itemId = key($lineItem);
- foreach ($lineItem as &$eachItem) {
+ $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($this->id);
+ if (!empty($lineItems)) {
+ $firstLineItem = reset($lineItems);
+ $priceSet = civicrm_api3('PriceSet', 'getsingle', array('id' => $firstLineItem['price_set_id'], 'return' => 'is_quick_config, id'));
+ $values['priceSetID'] = $priceSet['id'];
+ foreach ($lineItems as &$eachItem) {
if (isset($this->_relatedObjects['membership'])
&& is_array($this->_relatedObjects['membership'])
&& array_key_exists($eachItem['membership_type_id'], $this->_relatedObjects['membership'])) {
$eachItem['start_date'] = CRM_Utils_Date::customFormat($this->_relatedObjects['membership'][$eachItem['membership_type_id']]->start_date);
$eachItem['end_date'] = CRM_Utils_Date::customFormat($this->_relatedObjects['membership'][$eachItem['membership_type_id']]->end_date);
}
+ // This is actually used in conjunction with is_quick_config in the template & we should deprecate it.
+ // However, that does create upgrade pain so would be better to be phased in.
+ $values['useForMember'] = !$priceSet['is_quick_config'];
}
- $values['lineItem'][0] = $lineItem;
- $values['priceSetID'] = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItem[$itemId]['price_field_id'], 'price_set_id');
+ $values['lineItem'][0] = $lineItems;
}
}
$billingMode = empty($this->_relatedObjects['paymentProcessor']) ? CRM_Core_Payment::BILLING_MODE_NOTIFY : $this->_relatedObjects['paymentProcessor']['billing_mode'];
$template->assign('contributeMode', CRM_Utils_Array::value($billingMode, CRM_Core_SelectValues::contributeMode()));
- if (!empty($values['lineItem']) && !empty($this->_relatedObjects['membership'])) {
- $values['useForMember'] = TRUE;
- }
//assign honor information to receipt message
$softRecord = CRM_Contribute_BAO_ContributionSoft::getSoftContribution($this->id);
'payment_instrument_id' => CRM_Utils_Array::value('payment_instrument_id', $params, $params['contribution']->payment_instrument_id),
'check_number' => CRM_Utils_Array::value('check_number', $params),
);
- if ($contributionStatus == 'Refunded' || $contributionStatus == 'Chargeback') {
+ if ($contributionStatus == 'Refunded' || $contributionStatus == 'Chargeback' || $contributionStatus == 'Cancelled') {
$trxnParams['trxn_date'] = !empty($params['contribution']->cancel_date) ? $params['contribution']->cancel_date : date('YmdHis');
if (isset($params['refund_trxn_id'])) {
// CRM-17751 allow a separate trxn_id for the refund to be passed in via api & form.
if ($input['component'] == 'contribute') {
if ($contribution->contribution_page_id) {
// Figure out what we gain from this.
+ // Note that we may have overwritten the is_email_receipt input, fix that below.
CRM_Contribute_BAO_ContributionPage::setValues($contribution->contribution_page_id, $values);
}
elseif ($recurContrib && $recurringContributionID) {
$values['title'] = $source = ts('Offline Recurring Contribution');
}
- if ($recurContrib && $recurringContributionID && !isset($input['is_email_receipt'])) {
+ if (isset($input['is_email_receipt'])) {
+ // CRM-19601 - we may have overwritten this above.
+ $values['is_email_receipt'] = $input['is_email_receipt'];
+ }
+ elseif ($recurContrib && $recurringContributionID) {
//CRM-13273 - is_email_receipt setting on recurring contribution should take precedence over contribution page setting
// but CRM-16124 if $input['is_email_receipt'] is set then that should not be overridden.
$values['is_email_receipt'] = $recurContrib->is_email_receipt;
$var = TRUE;
CRM_Member_BAO_Membership::createRelatedMemberships($var, $var, TRUE);
civicrm_api3('Membership', 'create', $membershipParams);
+ //CRM-19600: Add Membership Renewal activity
+ CRM_Activity_BAO_Activity::addActivity($membership, 'Membership Renewal', $membership->contact_id);
}
}
}
FROM civicrm_membership_payment
WHERE contribution_id = %1 ";
$params = array(1 => array($this->id, 'Integer'));
+ $ids['membership'] = (array) CRM_Utils_Array::value('membership', $ids, array());
$dao = CRM_Core_DAO::executeQuery($query, $params);
while ($dao->fetch()) {
- if ($dao->membership_id) {
- if (!is_array($ids['membership'])) {
- $ids['membership'] = array();
- }
- $ids['membership'][] = $dao->membership_id;
+ if ($dao->membership_id && !in_array($dao->membership_id, $ids['membership'])) {
+ $ids['membership'][$dao->membership_id] = $dao->membership_id;
}
}
* Function to add payments for contribution
* for Partially Paid status
*
- * @param array $lineItems
* @param array $contributions
* @param array $contributionStatusId
*
*/
- public static function addPayments($lineItems, $contributions, $contributionStatusId = NULL) {
+ public static function addPayments($contributions, $contributionStatusId = NULL) {
// get financial trxn which is a payment
$ftSql = "SELECT ft.id, ft.total_amount
FROM civicrm_financial_trxn ft
INNER JOIN civicrm_entity_financial_trxn eft ON eft.financial_trxn_id = ft.id AND eft.entity_table = 'civicrm_contribution'
WHERE eft.entity_id = %1 AND ft.is_payment = 1 ORDER BY ft.id DESC LIMIT 1";
- $sql = "SELECT fi.id, li.price_field_value_id
- FROM civicrm_financial_item fi
- INNER JOIN civicrm_line_item li ON li.id = fi.entity_id
- WHERE li.contribution_id = %1";
$contributionStatus = CRM_Core_PseudoConstant::get('CRM_Contribute_DAO_Contribution', 'contribution_status_id', array(
'labelColumn' => 'name',
));
}
$ftDao = CRM_Core_DAO::executeQuery($ftSql, array(1 => array($contribution->id, 'Integer')));
$ftDao->fetch();
- $trxnAmount = $ftDao->total_amount;
- $ftId = $ftDao->id;
- // get financial item
- $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($contribution->id, 'Integer')));
- while ($dao->fetch()) {
- $ftIds[$dao->price_field_value_id] = $dao->id;
- }
-
- $params = array(
- 'entity_table' => 'civicrm_financial_item',
- 'financial_trxn_id' => $ftId,
+ // store financial item Proportionaly.
+ $trxnParams = array(
+ 'total_amount' => $ftDao->total_amount,
+ 'contribution_id' => $contribution->id,
);
- foreach ($lineItems as $key => $value) {
- if ($value['qty'] == 0) {
- continue;
- }
- $paid = $value['line_total'] * ($trxnAmount / $contribution->total_amount);
- // Record Entity Financial Trxn
- $params['amount'] = round($paid, 2);
- $params['entity_id'] = $ftIds[$value['price_field_value_id']];
-
- civicrm_api3('EntityFinancialTrxn', 'create', $params);
- }
+ self::assignProportionalLineItems($trxnParams, $ftDao->id, $contribution->total_amount);
}
}
* Function use to store line item proportionaly in
* in entity financial trxn table
*
- * @param array $params
- * array of contribution params.
- * @param object $trxn
- * CRM_Financial_DAO_FinancialTrxn object
- * @param array $contribution
+ * @param array $trxnParams
+ *
+ * @param Integer $trxnId
+ *
+ * @param float $contributionTotalAmount
*
*/
- public static function assignProportionalLineItems($params, $trxn, $contribution) {
- $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution_id']);
+ public static function assignProportionalLineItems($trxnParams, $trxnId, $contributionTotalAmount) {
+ $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($trxnParams['contribution_id']);
if (!empty($lineItems)) {
// get financial item
$sql = "SELECT fi.id, li.price_field_value_id
FROM civicrm_financial_item fi
INNER JOIN civicrm_line_item li ON li.id = fi.entity_id and fi.entity_table = 'civicrm_line_item'
WHERE li.contribution_id = %1";
- $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($params['contribution_id'], 'Integer')));
+ $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($trxnParams['contribution_id'], 'Integer')));
while ($dao->fetch()) {
$ftIds[$dao->price_field_value_id] = $dao->id;
}
$eftParams = array(
'entity_table' => 'civicrm_financial_item',
- 'financial_trxn_id' => $trxn->id,
+ 'financial_trxn_id' => $trxnId,
);
foreach ($lineItems as $key => $value) {
- $paid = $value['line_total'] * ($params['total_amount'] / $contribution['total_amount']);
+ if ($value['qty'] == 0) {
+ continue;
+ }
+ $paid = $value['line_total'] * ($trxnParams['total_amount'] / $contributionTotalAmount);
// Record Entity Financial Trxn
$eftParams['amount'] = round($paid, 2);
$eftParams['entity_id'] = $ftIds[$value['price_field_value_id']];
*/
public static function allowUpdateRevenueRecognitionDate($contributionId) {
// get line item for contribution
- $lineItems = CRM_Price_BAO_LineItem::getLineItems($contributionId, 'contribution', NULL, TRUE, TRUE);
+ $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($contributionId);
// check if line item is for membership or participant
foreach ($lineItems as $items) {
if ($items['entity_table'] == 'civicrm_participant') {