diff --git a/CRM/Financial/BAO/Payment.php b/CRM/Financial/BAO/Payment.php index a591539118b3..abddab5671f8 100644 --- a/CRM/Financial/BAO/Payment.php +++ b/CRM/Financial/BAO/Payment.php @@ -53,12 +53,11 @@ class CRM_Financial_BAO_Payment { * @throws \CRM_Core_Exception */ public static function create($params) { + $paymentType = CRM_Utils_Array::value('payment_type', $params, 'owed'); $contribution = civicrm_api3('Contribution', 'getsingle', ['id' => $params['contribution_id']]); - $contributionStatus = CRM_Contribute_PseudoConstant::contributionStatus($contribution['contribution_status_id'], 'name'); - // Check if pending contribution $fullyPaidPayLater = FALSE; - if ($contributionStatus == 'Pending') { + if ($contribution['contribution_status'] == 'Pending') { $cmp = bccomp($contribution['total_amount'], $params['total_amount'], 5); // Total payment amount is the whole amount paid against pending contribution if ($cmp == 0 || $cmp == -1) { @@ -74,12 +73,14 @@ public static function create($params) { [ 'id' => $contribution['id'], 'contribution_status_id' => 'Partially paid', + 'is_pay_later' => 0, ] ); } } if (!$fullyPaidPayLater) { - $trxn = CRM_Core_BAO_FinancialTrxn::getPartialPaymentTrxn($contribution, $params); + unset($params['id']); + $trxn = CRM_Contribute_BAO_Contribution::recordAdditionalPayment($params['contribution_id'], $params, $paymentType, CRM_Utils_Array::value('participant_id', $params)); if (CRM_Utils_Array::value('line_item', $params) && !empty($trxn)) { foreach ($params['line_item'] as $values) { foreach ($values as $id => $amount) { @@ -110,10 +111,15 @@ public static function create($params) { } } elseif (!empty($trxn)) { - CRM_Contribute_BAO_Contribution::assignProportionalLineItems($params, $trxn->id, $contribution['total_amount']); + $defaults = []; + $fetchParams = ['id' => $params['contribution_id']]; + $contributionDAO = CRM_Contribute_BAO_Contribution::retrieve($fetchParams, $defaults, $fetchParams); + CRM_Contribute_BAO_Contribution::addPayments(array($contributionDAO), $contribution['contribution_status_id']); } } - + if (!empty($params['is_email_receipt'])) { + self::sendConfirmation($params); + } return $trxn; } @@ -125,13 +131,11 @@ public static function create($params) { * @return bool */ public static function sendConfirmation($params) { - if (empty($params['is_email_receipt'])) { - return; - } $templateVars = array(); self::assignVariablesToTemplate($templateVars, $params); // send message template $fromEmails = CRM_Core_BAO_Email::getFromEmail(); + $sendTemplateParams = array( 'groupName' => 'msg_tpl_workflow_contribution', 'valueName' => 'payment_or_refund_notification', @@ -149,6 +153,7 @@ public static function sendConfirmation($params) { if (!empty($params['from_email_address']) && array_key_exists($params['from_email_address'], $fromEmails)) { $receiptFrom = $params['from_email_address']; } + $sendTemplateParams['from'] = $receiptFrom; $sendTemplateParams['toName'] = CRM_Utils_Array::value('contributorDisplayName', $templateVars); $sendTemplateParams['toEmail'] = $templateVars['contributorEmail']; @@ -162,11 +167,10 @@ public static function sendConfirmation($params) { * * @param array $templateVars * @param array $params - * - * @return array */ public static function assignVariablesToTemplate(&$templateVars, $params) { - $templateVars = self::getTemplateVars($params); + $templateVars = self::filterUntestedTemplateVariables($params); + $template = CRM_Core_Smarty::singleton(); if (CRM_Utils_Array::value('component', $templateVars) == 'event') { // fetch event information from participant ID using API @@ -175,6 +179,7 @@ public static function assignVariablesToTemplate(&$templateVars, $params) { 'id' => $templateVars['id'], )); $event = civicrm_api3('Event', 'getsingle', array('id' => $eventId)); + $template->assign('event', $event); $template->assign('isShowLocation', $event['is_show_location']); if (CRM_Utils_Array::value('is_show_location', $event) == 1) { @@ -189,6 +194,7 @@ public static function assignVariablesToTemplate(&$templateVars, $params) { $paymentConfig['confirm_email_text'] = CRM_Utils_Array::value('confirm_email_text', $event); $template->assign('paymentConfig', $paymentConfig); } + $template->assign('component', CRM_Utils_Array::value('component', $templateVars)); $template->assign('totalAmount', CRM_Utils_Array::value('amtTotal', $templateVars)); $isRefund = ($templateVars['paymentType'] == 'refund') ? TRUE : FALSE; @@ -205,6 +211,7 @@ public static function assignVariablesToTemplate(&$templateVars, $params) { $template->assign('paymentsComplete', $paymentsComplete); } $template->assign('contactDisplayName', CRM_Utils_Array::value('contributorDisplayName', $templateVars)); + // assign trxn details $template->assign('trxn_id', CRM_Utils_Array::value('trxn_id', $params)); $template->assign('receive_date', CRM_Utils_Array::value('trxn_date', $params)); @@ -224,6 +231,7 @@ public static function assignVariablesToTemplate(&$templateVars, $params) { )); } } + /** * Function to form template variables. * diff --git a/tests/phpunit/CRM/Contribute/Form/AdditionalPaymentTest.php b/tests/phpunit/CRM/Contribute/Form/AdditionalPaymentTest.php index 8bf35e260938..ef8850955463 100644 --- a/tests/phpunit/CRM/Contribute/Form/AdditionalPaymentTest.php +++ b/tests/phpunit/CRM/Contribute/Form/AdditionalPaymentTest.php @@ -137,7 +137,7 @@ public function testAddPaymentUsingCreditCardForPartialyPaidContribution() { $this->checkResults(array(30, 70), 2); $mut->assertSubjects(['Payment Receipt -']); $mut->checkMailLog([ - 'Dear Anthony Anderson', + 'Dear ' . CRM_Contact_BAO_Contact::displayName($this->_individualId), 'Payment Details', 'Total Fees: $ 100.00', 'This Payment Amount: $ 70.00',