),
);
+ // CRM-17787
+ $campaignTitle = array(
+ 'contribution_campaign_title' => array(
+ 'title' => ts('Campaign Title'),
+ 'name' => 'campaign_title',
+ 'where' => 'civicrm_campaign.title',
+ 'data_type' => CRM_Utils_Type::T_STRING,
+ ),
+ );
$softCreditFields = array(
'contribution_soft_credit_name' => array(
'name' => 'contribution_soft_credit_name',
);
$fields = array_merge($impFields, $typeField, $contributionStatus, $contributionPage, $optionField, $expFieldProduct,
- $expFieldsContrib, $contributionNote, $contributionRecurId, $extraFields, $softCreditFields, $financialAccount, $premiums,
+ $expFieldsContrib, $contributionNote, $contributionRecurId, $extraFields, $softCreditFields, $financialAccount, $premiums, $campaignTitle,
CRM_Core_BAO_CustomField::getFieldsForImport('Contribution', FALSE, FALSE, FALSE, $checkPermission)
);
*
* @return null|object
*/
- public static function recordAdditionalPayment($contributionId, $trxnsData, $paymentType = 'owed', $participantId = NULL) {
+ public static function recordAdditionalPayment($contributionId, $trxnsData, $paymentType = 'owed', $participantId = NULL, $updateStatus = TRUE) {
$statusId = CRM_Core_OptionGroup::getValue('contribution_status', 'Completed', 'name');
$getInfoOf['id'] = $contributionId;
$defaults = array();
$contributionDAO = CRM_Contribute_BAO_Contribution::retrieve($getInfoOf, $defaults, CRM_Core_DAO::$_nullArray);
+ if (!$participantId) {
+ $participantId = CRM_Core_DAO::getFieldValue('CRM_Event_DAO_ParticipantPayment', $contributionId, 'participant_id');
+ }
if ($paymentType == 'owed') {
// build params for recording financial trxn entry
// the reason because it performs 'status change' related code execution for financial records
// which in 'Pending Refund' => 'Completed' is not useful, instead specific financial record updates
// are coded below i.e. just updating financial_item status to 'Paid'
- $contributionDetails = CRM_Core_DAO::setFieldValue('CRM_Contribute_BAO_Contribution', $contributionId, 'contribution_status_id', $statusId);
-
+ if ($updateStatus) {
+ $contributionDetails = CRM_Core_DAO::setFieldValue('CRM_Contribute_BAO_Contribution', $contributionId, 'contribution_status_id', $statusId);
+ }
// add financial item entry
$financialItemStatus = CRM_Core_PseudoConstant::get('CRM_Financial_DAO_FinancialItem', 'status_id');
$getLine['entity_id'] = $contributionDAO->id;
empty($params['skipLineItem']) && !$isLineItem
) {
$taxRateParams = $taxRates[$params['financial_type_id']];
- $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount($params['total_amount'], $taxRateParams);
+ $taxAmount = CRM_Contribute_BAO_Contribution_Utils::calculateTaxAmount(CRM_Utils_Array::value('total_amount', $params), $taxRateParams);
$params['tax_amount'] = round($taxAmount['tax_amount'], 2);
// Get Line Item on update of contribution
$params['line_item'][$setID][$priceFieldID]['tax_amount'] = $params['tax_amount'];
}
}
- $params['total_amount'] = $params['total_amount'] + $params['tax_amount'];
+ $params['total_amount'] = CRM_Utils_Array::value('total_amount', $params) + $params['tax_amount'];
}
elseif (isset($params['api.line_item.create'])) {
// Update total amount of contribution using lineItem
*
*/
public static function addPayments($lineItems, $contributions) {
- // get financial trxn which is a payment
+ // get financial trxn which is a payment
$ftSql = "SELECT ft.id
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'
while ($dao->fetch()) {
$ftIds[$dao->price_field_value_id] = $dao->id;
}
+
+ $params = array(
+ 'entity_table' => 'civicrm_financial_item',
+ 'financial_trxn_id' => $ftId,
+ );
foreach ($lineItems as $key => $value) {
$paid = $value['line_total'] * ($contribution->net_amount / $contribution->total_amount);
// Record Entity Financial Trxn
- $params = array(
- 'entity_table' => 'civicrm_financial_item',
- 'financial_trxn_id' => $ftId,
- 'amount' => $paid,
- 'entity_id' => $ftIds[$value['price_field_value_id']],
- );
- $entityTrxn = new CRM_Financial_DAO_EntityFinancialTrxn();
- $entityTrxn->copyValues($params);
- $entityTrxn->save();
+ $params['amount'] = round($paid, 2);
+ $params['entity_id'] = $ftIds[$value['price_field_value_id']];
+
+ civicrm_api3('EntityFinancialTrxn', 'create', $params);
+ }
+ }
+ }
+
+ /**
+ * 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
+ *
+ */
+ public static function assignProportionalLineItems($params, $trxn, $contribution) {
+ $lineItems = CRM_Price_BAO_LineItem::getLineItemsByContributionID($params['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
+ WHERE li.contribution_id = %1";
+ $dao = CRM_Core_DAO::executeQuery($sql, array(1 => array($params['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,
+ );
+ foreach ($lineItems as $key => $value) {
+ $paid = $value['line_total'] * ($params['total_amount'] / $contribution['total_amount']);
+ // Record Entity Financial Trxn
+ $eftParams['amount'] = round($paid, 2);
+ $eftParams['entity_id'] = $ftIds[$value['price_field_value_id']];
+
+ civicrm_api3('EntityFinancialTrxn', 'create', $eftParams);
+ }
+ }
+ }
+
+ /**
+ * Function use to check check line items
+ *
+ * @param array $params
+ * array of order params.
+ *
+ * @return string
+ */
+ public static function checkLineItems(&$params) {
+ $totalAmount = CRM_Utils_Array::value('total_amount', $params);
+ $lineItemAmount = 0;
+ foreach ($params['line_items'] as &$lineItems) {
+ foreach ($lineItems['line_item'] as &$item) {
+ if (empty($item['financial_type_id'])) {
+ $item['financial_type_id'] = $params['financial_type_id'];
+ }
+ $lineItemAmount += $item['line_total'];
}
}
+ if (!isset($totalAmount)) {
+ $params['total_amount'] = $lineItemAmount;
+ }
+ elseif ($totalAmount != $lineItemAmount) {
+ return "Line item total doesn't match with total amount.";
+ }
+ return NULL;
}
}