Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CRM-17647 fix for submitting payment with thousand separator #11548

Merged
merged 2 commits into from
Jan 22, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions CRM/Contribute/Form/AbstractEditPayment.php
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,15 @@ class CRM_Contribute_Form_AbstractEditPayment extends CRM_Contact_Form_Task {
*/
public $billingFieldSets = array();

/**
* Monetary fields that may be submitted.
*
* These should get a standardised format in the beginPostProcess function.
*
* These fields are common to many forms. Some may override this.
*/
protected $submittableMoneyFields = ['total_amount', 'net_amount', 'non_deductible_amount', 'fee_amount'];

/**
* Pre process function with common actions.
*/
Expand Down Expand Up @@ -562,6 +571,11 @@ protected function beginPostProcess() {
$this->_params['ip_address'] = CRM_Utils_System::ipAddress();

self::formatCreditCardDetails($this->_params);
foreach ($this->submittableMoneyFields as $moneyField) {
if (isset($this->_params[$moneyField])) {
$this->_params[$moneyField] = CRM_Utils_Rule::cleanMoney($this->_params[$moneyField]);
}
}
}

/**
Expand Down
8 changes: 8 additions & 0 deletions CRM/Contribute/Form/Contribution.php
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,13 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP
*/
protected $statusMessageTitle;

/**
* Explicitly declare the form context.
*/
public function getDefaultContext() {
return 'create';
}

/**
* Set variables up before form is built.
*/
Expand Down Expand Up @@ -1420,6 +1427,7 @@ protected function submit($submittedValues, $action, $pledgePaymentID) {
// would cause breakage for negative values in some cases.
$submittedValues['total_amount'] = CRM_Utils_Array::value('amount', $submittedValues);
}

if ($this->_id) {
if ($this->_compId) {
if ($this->_context == 'participant') {
Expand Down
1 change: 1 addition & 0 deletions CRM/Member/BAO/Membership.php
Original file line number Diff line number Diff line change
Expand Up @@ -2400,6 +2400,7 @@ public static function recordMembershipContribution(&$params, $ids = array()) {
$contributionParams['receipt_date'] = (CRM_Utils_Array::value('receipt_date', $params)) ? $params['receipt_date'] : 'null';
$contributionParams['source'] = CRM_Utils_Array::value('contribution_source', $params);
$contributionParams['non_deductible_amount'] = 'null';
$contributionParams['skipCleanMoney'] = TRUE;
$contributionParams['payment_processor'] = CRM_Utils_Array::value('payment_processor_id', $params);
$contributionSoftParams = CRM_Utils_Array::value('soft_credit', $params);
$recordContribution = array(
Expand Down
11 changes: 9 additions & 2 deletions tests/phpunit/CRM/Contribute/Form/ContributionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -143,11 +143,16 @@ public function tearDown() {

/**
* Test the submit function on the contribution page.
*
* @param string $thousandSeparator
*
* @dataProvider getThousandSeparators
*/
public function testSubmit() {
public function testSubmit($thousandSeparator) {
$this->setCurrencySeparators($thousandSeparator);
$form = new CRM_Contribute_Form_Contribution();
$form->testSubmit(array(
'total_amount' => 50,
'total_amount' => $this->formatMoneyInput(1234),
'financial_type_id' => 1,
'receive_date' => '04/21/2015',
'receive_date_time' => '11:27PM',
Expand All @@ -158,6 +163,8 @@ public function testSubmit() {
CRM_Core_Action::ADD);
$contribution = $this->callAPISuccessGetSingle('Contribution', array('contact_id' => $this->_individualId));
$this->assertEmpty($contribution['amount_level']);
$this->assertEquals(1234, $contribution['total_amount']);
$this->assertEquals(1234, $contribution['net_amount']);
}

/**
Expand Down
27 changes: 19 additions & 8 deletions tests/phpunit/CRM/Event/Form/ParticipantTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,14 @@ public function testSubmitUpaidPriceChangeWhileStillPending() {
/**
* Initial test of submit function.
*
* @param string $thousandSeparator
*
* @dataProvider getThousandSeparators
*
* @throws \Exception
*/
public function testSubmitWithPayment() {
public function testSubmitWithPayment($thousandSeparator) {
$this->setCurrencySeparators($thousandSeparator);
$form = $this->getForm(array('is_monetary' => 1, 'financial_type_id' => 1));
$form->_mode = 'Live';
$form->_quickConfig = TRUE;
Expand Down Expand Up @@ -156,23 +161,28 @@ public function testSubmitWithPayment() {
13 => 1,
),
'amount_level' => 'Too much',
'fee_amount' => 55,
'total_amount' => 55,
'fee_amount' => $this->formatMoneyInput(1550.55),
'total_amount' => $this->formatMoneyInput(1550.55),
'from_email_address' => '[email protected]',
'send_receipt' => 1,
'receipt_text' => '',
));
$participants = $this->callAPISuccess('Participant', 'get', array());
$this->assertEquals(1, $participants['count']);
$contribution = $this->callAPISuccessGetSingle('Contribution', array());
$this->assertEquals(55, $contribution['total_amount']);
$this->assertEquals(1550.55, $contribution['total_amount']);
$this->assertEquals('Debit Card', $contribution['payment_instrument']);
}

/**
* Test offline participant mail.
*
* @param string $thousandSeparator
*
* @dataProvider getThousandSeparators
*/
public function testParticipantOfflineReceipt() {
public function testParticipantOfflineReceipt($thousandSeparator) {
$this->setCurrencySeparators($thousandSeparator);
$mut = new CiviMailUtils($this, TRUE);

//Get workflow id of event_offline receipt.
Expand All @@ -197,11 +207,12 @@ public function testParticipantOfflineReceipt() {
'msg_html' => $newMsg,
));

$this->testSubmitWithPayment();
$this->testSubmitWithPayment($thousandSeparator);
//Check if type is correctly populated in mails.
$mail = $mut->checkMailLog(array(
$mail = $mut->checkMailLog([
'<p>Test event type - 1</p>',
)
$this->formatMoneyInput(1550.55),
]
);
}

Expand Down
13 changes: 9 additions & 4 deletions tests/phpunit/CRM/Member/Form/MembershipTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -430,8 +430,13 @@ public function testFormRuleFixedJoin6MonthsAgo() {

/**
* Test the submit function of the membership form.
*
* @param string $thousandSeparator
*
* @dataProvider getThousandSeparators
*/
public function testSubmit() {
public function testSubmit($thousandSeparator) {
$this->setCurrencySeparators($thousandSeparator);
$form = $this->getForm();
$form->preProcess();
$this->mut = new CiviMailUtils($this, TRUE);
Expand All @@ -448,7 +453,7 @@ public function testSubmit() {
'max_related' => '',
'num_terms' => '1',
'source' => '',
'total_amount' => '50.00',
'total_amount' => $this->formatMoneyInput(1234.56),
'financial_type_id' => '2', //Member dues, see data.xml
'soft_credit_type_id' => '',
'soft_credit_contact_id' => '',
Expand Down Expand Up @@ -500,15 +505,15 @@ public function testSubmit() {

$this->_checkFinancialRecords(array(
'id' => $contribution['id'],
'total_amount' => 50,
'total_amount' => 1234.56,
'financial_account_id' => 2,
'payment_instrument_id' => $this->callAPISuccessGetValue('PaymentProcessor', array(
'id' => $this->_paymentProcessorID,
'return' => 'payment_instrument_id',
)),
), 'online');
$this->mut->checkMailLog(array(
'50',
CRM_Utils_Money::format('1234.56'),
'Receipt text',
));
$this->mut->stop();
Expand Down