Skip to content

Commit

Permalink
Switch recordAdditionalPayment fully over to api
Browse files Browse the repository at this point in the history
Use payment.create api from recordAdditionalPayment form as
part of general consolidation
  • Loading branch information
eileenmcnaughton committed Jul 16, 2019
1 parent 7cc1a4e commit 14deae4
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 52 deletions.
34 changes: 0 additions & 34 deletions CRM/Contribute/BAO/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
34 changes: 19 additions & 15 deletions CRM/Contribute/Form/AdditionalPayment.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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');
Expand Down Expand Up @@ -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) {
Expand Down
4 changes: 1 addition & 3 deletions CRM/Financial/BAO/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -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']];
Expand Down Expand Up @@ -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) {
Expand Down
6 changes: 6 additions & 0 deletions api/v3/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,
],
];
}

Expand Down

0 comments on commit 14deae4

Please sign in to comment.