Skip to content
Snippets Groups Projects
Commit b81ee58c authored by Pradeep Nayak's avatar Pradeep Nayak
Browse files

-- CRM-13968, Added code to handle transaction for In progress contribution status

----------------------------------------
* CRM-13968: Contributions with "In Progress" status can't be edited and saved
  http://issues.civicrm.org/jira/browse/CRM-13968
parent f73acc78
No related branches found
No related tags found
No related merge requests found
......@@ -2526,7 +2526,8 @@ WHERE contribution_id = %1 ";
if (CRM_Utils_Array::value('contribution_status_id', $params) != array_search('Failed', $contributionStatuses) &&
!(CRM_Utils_Array::value('contribution_status_id', $params) == array_search('Pending', $contributionStatuses) && !$params['contribution']->is_pay_later)) {
$skipRecords = TRUE;
if (CRM_Utils_Array::value('contribution_status_id', $params) == array_search('Pending', $contributionStatuses)) {
$pendingStatus = array(array_search('Pending', $contributionStatuses), array_search('In Progress', $contributionStatuses));
if (in_array(CRM_Utils_Array::value('contribution_status_id', $params), $pendingStatus)) {
$relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Accounts Receivable Account is' "));
$params['to_financial_account_id'] = CRM_Contribute_PseudoConstant::financialAccountType($params['financial_type_id'], $relationTypeId);
}
......@@ -2583,7 +2584,7 @@ WHERE contribution_id = %1 ";
$newFinancialAccount = CRM_Contribute_PseudoConstant::financialAccountType($params['financial_type_id'], $incomeTypeId);
if ($oldFinancialAccount != $newFinancialAccount) {
$params['total_amount'] = 0;
if ($params['contribution']->contribution_status_id == array_search('Pending', $contributionStatuses)) {
if (in_array($params['contribution']->contribution_status_id, $pendingStatus)) {
$params['trxnParams']['to_financial_account_id'] = CRM_Contribute_PseudoConstant::financialAccountType(
$params['prevContribution']->financial_type_id, $relationTypeId);
}
......@@ -2622,7 +2623,7 @@ WHERE contribution_id = %1 ";
//check if status is changed from Pending to Completed
// do not update payment instrument changes for Pending to Completed
if (!($params['contribution']->contribution_status_id == array_search('Completed', $contributionStatuses) &&
$params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatuses))) {
in_array($params['prevContribution']->contribution_status_id, $pendingStatus))) {
// for all other statuses create new financial records
self::updateFinancialAccounts($params, 'changePaymentInstrument');
$params['total_amount'] = $params['trxnParams']['total_amount'] = $trxnParams['total_amount'];
......@@ -2713,8 +2714,9 @@ WHERE contribution_id = %1 ";
$itemAmount = $trxnID = NULL;
//get all the statuses
$contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
if ($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus) &&
$params['contribution']->contribution_status_id == array_search('Completed', $contributionStatus)
if (($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)
|| $params['prevContribution']->contribution_status_id == array_search('In Progress', $contributionStatus))
&& $params['contribution']->contribution_status_id == array_search('Completed', $contributionStatus)
&& $context == 'changePaymentInstrument') {
return;
}
......@@ -2727,12 +2729,11 @@ WHERE contribution_id = %1 ";
if ($params['prevContribution']->contribution_status_id == array_search('Completed', $contributionStatus)
&& ($params['contribution']->contribution_status_id == array_search('Refunded', $contributionStatus)
|| $params['contribution']->contribution_status_id == array_search('Cancelled', $contributionStatus))) {
|| $params['contribution']->contribution_status_id == array_search('Cancelled', $contributionStatus))) {
$params['trxnParams']['total_amount'] = - $params['total_amount'];
}
elseif ($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)
&& $params['prevContribution']->is_pay_later) {
elseif (($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)
&& $params['prevContribution']->is_pay_later) || $params['prevContribution']->contribution_status_id == array_search('In Progress', $contributionStatus)) {
$financialTypeID = CRM_Utils_Array::value('financial_type_id', $params) ? $params['financial_type_id'] : $params['prevContribution']->financial_type_id;
if ($params['contribution']->contribution_status_id == array_search('Cancelled', $contributionStatus)) {
$params['trxnParams']['to_financial_account_id'] = NULL;
......@@ -2761,8 +2762,9 @@ WHERE contribution_id = %1 ";
$params['entity_id'] = $trxn->id;
if ($context == 'changedStatus') {
if (($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)) &&
($params['contribution']->contribution_status_id == array_search('Completed', $contributionStatus))) {
if (($params['prevContribution']->contribution_status_id == array_search('Pending', $contributionStatus)
|| $params['prevContribution']->contribution_status_id == array_search('In Progress', $contributionStatus))
&& ($params['contribution']->contribution_status_id == array_search('Completed', $contributionStatus))) {
$query = "UPDATE civicrm_financial_item SET status_id = %1 WHERE entity_id = %2 and entity_table = 'civicrm_line_item'";
$sql = "SELECT id, amount FROM civicrm_financial_item WHERE entity_id = %1 and entity_table = 'civicrm_line_item'";
......
......@@ -79,10 +79,12 @@ class CRM_Financial_BAO_FinancialItem extends CRM_Financial_DAO_FinancialItem {
static function add($lineItem, $contribution) {
$contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
$financialItemStatus = CRM_Core_PseudoConstant::get('CRM_Financial_DAO_FinancialItem', 'status_id');
$itemStatus = NULL;
if ($contribution->contribution_status_id == array_search('Completed', $contributionStatuses)) {
$itemStatus = array_search('Paid', $financialItemStatus);
}
elseif ($contribution->contribution_status_id == array_search('Pending', $contributionStatuses)) {
elseif ($contribution->contribution_status_id == array_search('Pending', $contributionStatuses)
|| $contribution->contribution_status_id == array_search('In Progress', $contributionStatuses)) {
$itemStatus = array_search('Unpaid', $financialItemStatus);
}
$params = array(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment