// 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);
//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;
}
}
$template->assign('first_name', $this->_relatedObjects['contact']->first_name);
$template->assign('last_name', $this->_relatedObjects['contact']->last_name);
$template->assign('displayName', $this->_relatedObjects['contact']->display_name);
- if (!empty($values['lineItem']) && !empty($this->_relatedObjects['membership'])) {
- $values['useForMember'] = TRUE;
- }
+
+ // For some unit tests contribution cannot contain paymentProcessor information
+ $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()));
+
//assign honor information to receipt message
$softRecord = CRM_Contribute_BAO_ContributionSoft::getSoftContribution($this->id);
CRM_Utils_Date::processDate($this->receive_date)
);
$values['receipt_date'] = (empty($this->receipt_date) ? NULL : $this->receipt_date);
- $template->assign('contributeMode', 'notify');
$template->assign('action', $this->is_test ? 1024 : 1);
$template->assign('receipt_text',
CRM_Utils_Array::value('receipt_text',
// also make it available as return value
self::recordAlwaysAccountsReceivable($trxnParams, $params);
$return = $financialTxn = CRM_Core_BAO_FinancialTrxn::create($trxnParams);
- $params['entity_id'] = self::$_trxnIDs[] = $financialTxn->id;
+ $params['entity_id'] = $financialTxn->id;
+ if (empty($params['partial_payment_total']) && empty($params['partial_amount_pay'])) {
+ self::$_trxnIDs[] = $financialTxn->id;
+ }
}
}
// record line items and financial items
CRM_Event_BAO_Participant::createDiscountTrxn($eventID, $params, $feeLevel);
}
unset($params['line_item']);
-
+ self::$_trxnIDs = NULL;
return $return;
}
if (!empty($contribution->source)) {
return $contribution->source;
}
- elseif (!empty($contribution->contribution_page_id)) {
+ elseif (!empty($contribution->contribution_page_id) && is_numeric($contribution->contribution_page_id)) {
$contributionPageTitle = civicrm_api3('ContributionPage', 'getvalue', array(
'id' => $contribution->contribution_page_id,
'return' => 'title',
* in entity financial trxn table
*
* @param array $params
- * array of contribution params.
- * @param object $trxn
- * CRM_Financial_DAO_FinancialTrxn object
- * @param array $contribution
+ *
+ * @param Integer $trxnId
+ *
+ * @param float $contributionTotalAmount
*
*/
- public static function assignProportionalLineItems($params, $trxn, $contribution) {
+ public static function assignProportionalLineItems($params, $trxnId, $contributionTotalAmount) {
$lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['contribution_id']);
if (!empty($lineItems)) {
// get financial item
}
$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']);
+ $paid = $value['line_total'] * ($params['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') {
$statusId = $contributionParams['contribution']->contribution_status_id;
$contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
$contributionStatus = empty($statusId) ? NULL : $contributionStatuses[$statusId];
+ $previousContributionStatus = empty($contributionParams['prevContribution']) ? NULL : $contributionStatuses[$contributionParams['prevContribution']->contribution_status_id];
// Return if contribution status is not completed.
- if ($contributionStatus != 'Completed') {
+ if (!($contributionStatus == 'Completed' && (empty($previousContributionStatus)
+ || (!empty($previousContributionStatus) && $previousContributionStatus == 'Pending'
+ && $contributionParams['prevContribution']->is_pay_later == 0
+ )))
+ ) {
return NULL;
}
+
$params = $trxnParams;
$financialTypeID = CRM_Utils_Array::value('financial_type_id', $contributionParams) ? $contributionParams['financial_type_id'] : $contributionParams['prevContribution']->financial_type_id;
$relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' "));