Skip to content

Commit

Permalink
CRM-21245: Incorrect Contribution status 'Pending Refund'
Browse files Browse the repository at this point in the history
  • Loading branch information
monishdeb committed Dec 18, 2017
1 parent c865af6 commit 6654d2e
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 18 deletions.
2 changes: 1 addition & 1 deletion CRM/Event/Form/ParticipantFeeSelection.php
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ public function postProcess() {

$feeBlock = $this->_values['fee'];
$lineItems = $this->_values['line_items'];
CRM_Price_BAO_LineItem::changeFeeSelections($params, $this->_participantId, 'participant', $this->_contributionId, $feeBlock, $lineItems, $this->_paidAmount);
CRM_Price_BAO_LineItem::changeFeeSelections($params, $this->_participantId, 'participant', $this->_contributionId, $feeBlock, $lineItems);
$this->contributionAmt = CRM_Core_DAO::getFieldValue('CRM_Contribute_BAO_Contribution', $this->_contributionId, 'total_amount');
// email sending
if (!empty($params['send_receipt'])) {
Expand Down
5 changes: 2 additions & 3 deletions CRM/Member/Form/Membership.php
Original file line number Diff line number Diff line change
Expand Up @@ -1730,16 +1730,15 @@ protected function updateContributionOnMembershipTypeChange($inputParams, $membe

// add price field information in $inputParams
self::addPriceFieldByMembershipType($inputParams, $priceSetDetails['fields'], $membership->membership_type_id);
// paid amount
$paidAmount = CRM_Utils_Array::value('paid', CRM_Contribute_BAO_Contribution::getPaymentInfo($membership->id, 'membership'));

// update related contribution and financial records
CRM_Price_BAO_LineItem::changeFeeSelections(
$inputParams,
$membership->id,
'membership',
$contributionID,
$priceSetDetails['fields'],
$lineItems, $paidAmount
$lineItems
);
CRM_Core_Session::setStatus(ts('Associated contribution is updated on membership type change.'), ts('Success'), 'success');
}
Expand Down
18 changes: 4 additions & 14 deletions CRM/Price/BAO/LineItem.php
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,6 @@ public static function getLineItemArray(&$params, $entityId = NULL, $entityTable
* @param int $contributionId
* @param $feeBlock
* @param array $lineItems
* @param $paidAmount
*
*/
public static function changeFeeSelections(
Expand All @@ -620,8 +619,7 @@ public static function changeFeeSelections(
$entity,
$contributionId,
$feeBlock,
$lineItems,
$paidAmount
$lineItems
) {
$entityTable = "civicrm_" . $entity;
CRM_Price_BAO_PriceSet::processAmount($feeBlock,
Expand Down Expand Up @@ -694,9 +692,7 @@ public static function changeFeeSelections(
if (!empty($amountLevel)) {
$updateAmountLevel = CRM_Core_DAO::VALUE_SEPARATOR . implode(CRM_Core_DAO::VALUE_SEPARATOR, $amountLevel) . $displayParticipantCount . CRM_Core_DAO::VALUE_SEPARATOR;
}
$trxn = $lineItemObj->recordAdjustedAmt($updatedAmount, $paidAmount, $contributionId, $taxAmount, $updateAmountLevel);

$contributionStatus = CRM_Core_PseudoConstant::getName('CRM_Contribute_DAO_Contribution', 'contribution_status_id', CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $contributionId, 'contribution_status_id'));
$trxn = $lineItemObj->_recordAdjustedAmt($updatedAmount, $contributionId, $taxAmount, $updateAmountLevel);

if (!empty($financialItemsArray)) {
foreach ($financialItemsArray as $updateFinancialItemInfoValues) {
Expand Down Expand Up @@ -1063,21 +1059,15 @@ protected function getRelatedCancelFinancialTrxn($financialItemID) {
* Record adjusted amount.
*
* @param int $updatedAmount
* @param int $paidAmount
* @param int $contributionId
*
* @param int $taxAmount
* @param bool $updateAmountLevel
*
* @return bool|\CRM_Core_BAO_FinancialTrxn
*/
protected function recordAdjustedAmt($updatedAmount, $paidAmount, $contributionId, $taxAmount = NULL, $updateAmountLevel = NULL) {
$pendingAmount = CRM_Core_BAO_FinancialTrxn::getBalanceTrxnAmt($contributionId);
$pendingAmount = CRM_Utils_Array::value('total_amount', $pendingAmount, 0);
protected function _recordAdjustedAmt($updatedAmount, $contributionId, $taxAmount = NULL, $updateAmountLevel = NULL) {
$paidAmount = CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId);
$balanceAmt = $updatedAmount - $paidAmount;
if ($paidAmount != $pendingAmount) {
$balanceAmt -= $pendingAmount;
}

$contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
$partiallyPaidStatusId = array_search('Partially paid', $contributionStatuses);
Expand Down
14 changes: 14 additions & 0 deletions tests/phpunit/CRM/Event/BAO/CRM19273Test.php
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,20 @@ public function testCRM19273() {
$this->balanceCheck($this->_veryExpensive);
}

/**
* CRM-21245: Test that Contribution status doesn't changed to 'Pending Refund' from 'Partially Paid' if the partially paid amount is lower then newly selected fee amount
*/
public function testCRM21245() {
$this->registerParticipantAndPay(50);
$partiallyPaidContribuitonStatus = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Partially paid');
$this->assertEquals($this->callAPISuccessGetValue('Contribution', array('id' => $this->contributionID, 'return' => 'contribution_status_id')), $partiallyPaidContribuitonStatus);

$priceSetParams['price_1'] = 3;
$lineItem = CRM_Price_BAO_LineItem::getLineItems($this->_participantId, 'participant');
CRM_Price_BAO_LineItem::changeFeeSelections($priceSetParams, $this->_participantId, 'participant', $this->_contributionId, $this->_feeBlock, $lineItem);
$this->assertEquals($this->callAPISuccessGetValue('Contribution', array('id' => $this->_contributionId, 'return' => 'contribution_status_id')), $partiallyPaidContribuitonStatus);
}

/**
* Test that proper financial items are recorded for cancelled line items
*/
Expand Down

0 comments on commit 6654d2e

Please sign in to comment.