From 650b79b438b8cdf408f4471cca59e2f79ffb577b Mon Sep 17 00:00:00 2001 From: "deb.monish" Date: Fri, 4 Aug 2017 18:14:02 +0530 Subject: [PATCH] concatenate check_number and trxn_id in contribution --- CRM/Financial/Form/PaymentEdit.php | 31 +++++++++++ .../CRM/Financial/Form/PaymentEditTest.php | 51 ++++++++++++++++++- 2 files changed, 81 insertions(+), 1 deletion(-) diff --git a/CRM/Financial/Form/PaymentEdit.php b/CRM/Financial/Form/PaymentEdit.php index 368de6c553..72e97e7eb2 100644 --- a/CRM/Financial/Form/PaymentEdit.php +++ b/CRM/Financial/Form/PaymentEdit.php @@ -217,6 +217,8 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { // simply update the financial trxn civicrm_api3('FinancialTrxn', 'create', $submittedValues); } + + self::updateRelatedContribution($submittedValues, $this->_contributionID); } /** @@ -232,6 +234,35 @@ class CRM_Financial_Form_PaymentEdit extends CRM_Core_Form { $this->submit($params); } + /** + * Function to update contribution's check_number and trxn_id by + * concatenating values from financial trxn's check_number and trxn_id respectively + * + * @param array $params + * @param int $contributionID + */ + public static function updateRelatedContribution($params, $contributionID) { + $contributionDAO = new CRM_Contribute_DAO_Contribution(); + $contributionDAO->id = $contributionID; + $contributionDAO->find(TRUE); + + foreach (array('trxn_id', 'check_number') as $fieldName) { + if (!empty($params[$fieldName])) { + if (!empty($contributionDAO->$fieldName)) { + $values = explode(',', $contributionDAO->$fieldName); + // if submitted check_number or trxn_id value is + // already present then ignore else add to $values array + if (!in_array($params[$fieldName], $values)) { + $values[] = $params[$fieldName]; + } + $contributionDAO->$fieldName = implode(',', $values); + } + } + } + + $contributionDAO->save(); + } + /** * Get payment fields */ diff --git a/tests/phpunit/CRM/Financial/Form/PaymentEditTest.php b/tests/phpunit/CRM/Financial/Form/PaymentEditTest.php index cea667b581..e68771d13f 100644 --- a/tests/phpunit/CRM/Financial/Form/PaymentEditTest.php +++ b/tests/phpunit/CRM/Financial/Form/PaymentEditTest.php @@ -62,7 +62,7 @@ class CRM_Financial_Form_PaymentEditTest extends CiviUnitTestCase { 'receive_date' => '04/21/2015', 'receive_date_time' => '11:27PM', 'contact_id' => $this->_individualID, - 'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Check'), + 'payment_instrument_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check'), 'check_number' => '123XA', 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'), ), @@ -118,4 +118,53 @@ class CRM_Financial_Form_PaymentEditTest extends CiviUnitTestCase { } } + /** + * Test to ensure that multiple check_numbers are concatenated + * and stored in related contribution's check_number + */ + public function testSubmitOnCheckNumberChange() { + // CASE 1: Submit contribution using Check as payment instrument and check_number as '123XA' + $checkNumber1 = '123XA'; + $checkPaymentInstrumentID = CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'payment_instrument_id', 'Check'); + // First create a contribution using 'Check' as payment instrument + $form = new CRM_Contribute_Form_Contribution(); + $form->testSubmit(array( + 'total_amount' => 50, + 'financial_type_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'financial_type_id', 'Donation'), + 'receive_date' => '04/21/2015', + 'receive_date_time' => '11:27PM', + 'contact_id' => $this->_individualID, + 'payment_instrument_id' => $checkPaymentInstrumentID, + 'check_number' => $checkNumber1, + 'contribution_status_id' => CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Completed'), + ), + CRM_Core_Action::ADD); + $contribution = $this->callAPISuccessGetSingle('Contribution', array('contact_id' => $this->_individualID)); + $payments = CRM_Contribute_BAO_Contribution::getPaymentInfo($contribution['id'], 'contribute', TRUE); + $financialTrxnInfo = $payments['transaction'][0]; + + // CASE 2: Submit payment details via edit form and changed check_number to '456XA', + // ensure that contribution's check_number has concatenated check-numbers + $checkNumber2 = '456XA'; + // build parameters which changed payment instrument and tran date values + $params = array( + 'id' => $financialTrxnInfo['id'], + 'payment_instrument_id' => $checkPaymentInstrumentID, + 'check_number' => $checkNumber2, + 'trxn_date' => date('Y-m-d H:i:s'), + 'contribution_id' => $contribution['id'], + ); + $form = new CRM_Financial_Form_PaymentEdit(); + $form->testSubmit($params); + $contribution = $this->callAPISuccessGetSingle('Contribution', array('id' => $contribution['id'])); + $expectedConcatanatedCheckNumbers = implode(',', array($checkNumber1, $checkNumber2)); + $this->assertEquals($expectedConcatanatedCheckNumbers, $contribution['check_number']); + + // CASE 3: Submit payment details via edit form without any change, + // ensure that contribution's check_number concatenated value isn't changed + $form->testSubmit($params); + $contribution = $this->callAPISuccessGetSingle('Contribution', array('id' => $contribution['id'])); + $this->assertEquals($expectedConcatanatedCheckNumbers, $contribution['check_number']); + } + } -- 2.25.1