From 14deae4c238b884a72e82ca07d9bd253dd498fe1 Mon Sep 17 00:00:00 2001 From: eileen Date: Mon, 3 Jun 2019 11:40:44 +1200 Subject: [PATCH] Switch recordAdditionalPayment fully over to api Use payment.create api from recordAdditionalPayment form as part of general consolidation --- CRM/Contribute/BAO/Contribution.php | 34 ----------------------- CRM/Contribute/Form/AdditionalPayment.php | 34 +++++++++++++---------- CRM/Financial/BAO/Payment.php | 4 +-- api/v3/Payment.php | 6 ++++ 4 files changed, 26 insertions(+), 52 deletions(-) diff --git a/CRM/Contribute/BAO/Contribution.php b/CRM/Contribute/BAO/Contribution.php index 82a3e3d6828f..3990f7c77bb6 100644 --- a/CRM/Contribute/BAO/Contribution.php +++ b/CRM/Contribute/BAO/Contribution.php @@ -3985,40 +3985,6 @@ public static function validateFinancialType($financialTypeId, $relationName = ' return FALSE; } - /** - * Function to record additional payment for partial and refund contributions. - * - * @param int $contributionId - * is the invoice contribution id (got created after processing participant payment). - * @param array $trxnsData - * to take user provided input of transaction details. - * @param string $paymentType - * 'owed' for purpose of recording partial payments, 'refund' for purpose of recording refund payments. - * @param int $participantId - * @param bool $updateStatus - * - * @return int - * - * @throws \CRM_Core_Exception - * @throws \CiviCRM_API3_Exception - */ - public static function recordAdditionalPayment($contributionId, $trxnsData, $paymentType = 'owed', $participantId = NULL, $updateStatus = TRUE) { - - if ($paymentType == 'owed') { - $financialTrxn = CRM_Financial_BAO_Payment::recordPayment($contributionId, $trxnsData, $participantId); - if (!empty($financialTrxn)) { - self::recordPaymentActivity($contributionId, $participantId, $financialTrxn->total_amount, $financialTrxn->currency, $financialTrxn->trxn_date); - return $financialTrxn->id; - } - } - elseif ($paymentType == 'refund') { - $trxnsData['total_amount'] = -$trxnsData['total_amount']; - $trxnsData['participant_id'] = $participantId; - $trxnsData['contribution_id'] = $contributionId; - return civicrm_api3('Payment', 'create', $trxnsData)['id']; - } - } - /** * @param int $targetCid * @param $activityType diff --git a/CRM/Contribute/Form/AdditionalPayment.php b/CRM/Contribute/Form/AdditionalPayment.php index f34854f59785..fdb7c478f3a9 100644 --- a/CRM/Contribute/Form/AdditionalPayment.php +++ b/CRM/Contribute/Form/AdditionalPayment.php @@ -73,6 +73,11 @@ class CRM_Contribute_Form_AdditionalPayment extends CRM_Contribute_Form_Abstract public $_action = NULL; + /** + * Pre process form. + * + * @throws \CRM_Core_Exception + */ public function preProcess() { $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this, TRUE); @@ -118,11 +123,11 @@ public function preProcess() { $this->_paymentType = 'owed'; } else { - CRM_Core_Error::fatal(ts('No payment information found for this record')); + throw new CRM_Core_Exception(ts('No payment information found for this record')); } if (!empty($this->_mode) && $this->_paymentType == 'refund') { - CRM_Core_Error::fatal(ts('Credit card payment is not for Refund payments use')); + throw new CRM_Core_Exception(ts('Credit card payment is not for Refund payments use')); } list($this->_contributorDisplayName, $this->_contributorEmail) = CRM_Contact_BAO_Contact_Location::getEmailDetails($this->_contactID); @@ -139,6 +144,8 @@ public function preProcess() { * Is this function being called from a datatable selector. * * If so we don't want to show the buttons. + * + * @throws \CRM_Core_Exception */ protected function isBeingCalledFromSelectorContext() { return CRM_Utils_Request::retrieve('selector', 'Positive'); @@ -356,19 +363,16 @@ public function submit($submittedValues) { $this->processCreditCard(); } - $defaults = []; - $contribution = civicrm_api3('Contribution', 'getsingle', [ - 'return' => ["contribution_status_id"], - 'id' => $this->_contributionId, - ]); - $contributionStatusId = CRM_Utils_Array::value('contribution_status_id', $contribution); - $paymentID = CRM_Contribute_BAO_Contribution::recordAdditionalPayment($this->_contributionId, $this->_params, $this->_paymentType, $participantId); - // Fetch the contribution & do proportional line item assignment - $params = ['id' => $this->_contributionId]; - $contribution = CRM_Contribute_BAO_Contribution::retrieve($params, $defaults, $params); - // @todo - this line needs to be moved to the Payment.create api - it's not form layer appropriate. - // testing required. - CRM_Contribute_BAO_Contribution::addPayments([$contribution], $contributionStatusId); + $trxnsData = $this->_params; + if ($this->_paymentType == 'refund') { + $trxnsData['total_amount'] = -$trxnsData['total_amount']; + } + $trxnsData['participant_id'] = $participantId; + $trxnsData['contribution_id'] = $this->_contributionId; + // From the + $trxnsData['is_send_contribution_notification'] = FALSE; + $paymentID = civicrm_api3('Payment', 'create', $trxnsData)['id']; + if ($this->_contributionId && CRM_Core_Permission::access('CiviMember')) { $membershipPaymentCount = civicrm_api3('MembershipPayment', 'getCount', ['contribution_id' => $this->_contributionId]); if ($membershipPaymentCount) { diff --git a/CRM/Financial/BAO/Payment.php b/CRM/Financial/BAO/Payment.php index a4de716b08c2..c75c235ddaa2 100644 --- a/CRM/Financial/BAO/Payment.php +++ b/CRM/Financial/BAO/Payment.php @@ -164,7 +164,7 @@ public static function create($params) { ); } else { - civicrm_api3('Contribution', 'completetransaction', ['id' => $contribution['id']]); + civicrm_api3('Contribution', 'completetransaction', ['id' => $contribution['id'], 'is_email_receipt' => $params['is_send_contribution_notification']]); // Get the trxn $trxnId = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contribution['id'], 'DESC'); $ftParams = ['id' => $trxnId['financialTrxnId']]; @@ -362,8 +362,6 @@ public static function filterUntestedTemplateVariables($params) { * @param $updateStatus * - deprecate this param * - * @todo - make this protected once recordAdditionalPayment no longer calls it. - * * @return CRM_Financial_DAO_FinancialTrxn */ protected static function recordRefundPayment($contributionId, $trxnData, $updateStatus) { diff --git a/api/v3/Payment.php b/api/v3/Payment.php index a2deaf562c77..6dce0bc5e050 100644 --- a/api/v3/Payment.php +++ b/api/v3/Payment.php @@ -178,6 +178,12 @@ function _civicrm_api3_payment_create_spec(&$params) { 'title' => ts('Cancel Date'), 'type' => CRM_Utils_Type::T_DATE + CRM_Utils_Type::T_TIME, ], + 'is_send_contribution_notification' => [ + 'title' => ts('Send out notifications based on contribution status change?'), + 'description' => ts('Most commonly this equates to emails relating to the contribution, event, etcwhen a payment completes a contribution'), + 'type' => CRM_Utils_Type::T_BOOLEAN, + 'api.default' => TRUE, + ], ]; }