From 3e6a1f4ad1a6fd106a7ba159402956843d6350e6 Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Sun, 3 May 2015 21:12:09 +1200 Subject: [PATCH] CRM-16367 (Backoffice contribution page) get premium code under unit test --- CRM/Contribute/Form/AdditionalInfo.php | 49 ++++++++++--------- CRM/Contribute/Form/Contribution.php | 36 +++++++------- .../CRM/Contribute/Form/ContributionTest.php | 33 +++++++++++++ 3 files changed, 76 insertions(+), 42 deletions(-) diff --git a/CRM/Contribute/Form/AdditionalInfo.php b/CRM/Contribute/Form/AdditionalInfo.php index 0366d4fbfa..8da21e9c8e 100644 --- a/CRM/Contribute/Form/AdditionalInfo.php +++ b/CRM/Contribute/Form/AdditionalInfo.php @@ -37,10 +37,13 @@ class CRM_Contribute_Form_AdditionalInfo { /** * Build the form object for Premium Information. * + * Called from the CRM_Contribute_Form_Contribute function and seemingly nowhere else. * - * @param CRM_Core_Form $form + * Probably this should be on the form that uses it since it is not used on multiple forms. * - * @return void + * Putting it on this class doesn't seem to reduce complexity. + * + * @param CRM_Core_Form $form */ public static function buildPremium(&$form) { //premium section @@ -193,59 +196,59 @@ class CRM_Contribute_Form_AdditionalInfo { /** * Process the Premium Information. * - * * @param array $params * @param int $contributionID * @param int $premiumID * @param array $options - * @return void */ - public static function processPremium(&$params, $contributionID, $premiumID = NULL, $options = array()) { + public static function processPremium($params, $contributionID, $premiumID = NULL, $options = array()) { + $selectedProductID = $params['product_name'][0]; + $selectedProductOptionID = $params['product_name'][1]; + $dao = new CRM_Contribute_DAO_ContributionProduct(); $dao->contribution_id = $contributionID; - $dao->product_id = $params['product_name'][0]; + $dao->product_id = $selectedProductID; $dao->fulfilled_date = CRM_Utils_Date::processDate($params['fulfilled_date'], NULL, TRUE); $isDeleted = FALSE; + //CRM-11106 $premiumParams = array( - 'id' => $params['product_name'][0], + 'id' => $selectedProductID, ); + $productDetails = array(); CRM_Contribute_BAO_ManagePremiums::retrieve($premiumParams, $productDetails); $dao->financial_type_id = CRM_Utils_Array::value('financial_type_id', $productDetails); - if (!empty($options[$params['product_name'][0]])) { - $dao->product_option = $options[$params['product_name'][0]][$params['product_name'][1]]; + if (!empty($options[$selectedProductID])) { + $dao->product_option = $options[$selectedProductID][$selectedProductOptionID]; } if ($premiumID) { - $premoumDAO = new CRM_Contribute_DAO_ContributionProduct(); - $premoumDAO->id = $premiumID; - $premoumDAO->find(TRUE); - if ($premoumDAO->product_id == $params['product_name'][0]) { + $ContributionProduct = new CRM_Contribute_DAO_ContributionProduct(); + $ContributionProduct->id = $premiumID; + $ContributionProduct->find(TRUE); + if ($ContributionProduct->product_id == $selectedProductID) { $dao->id = $premiumID; - $premium = $dao->save(); } else { - $premoumDAO->delete(); + $ContributionProduct->delete(); $isDeleted = TRUE; - $premium = $dao->save(); } } - else { - $premium = $dao->save(); - } + + $dao->save(); //CRM-11106 if ($premiumID == NULL || $isDeleted) { - $params = array( + $premiumParams = array( 'cost' => CRM_Utils_Array::value('cost', $productDetails), 'currency' => CRM_Utils_Array::value('currency', $productDetails), 'financial_type_id' => CRM_Utils_Array::value('financial_type_id', $productDetails), 'contributionId' => $contributionID, ); if ($isDeleted) { - $params['oldPremium']['product_id'] = $premoumDAO->product_id; - $params['oldPremium']['contribution_id'] = $premoumDAO->contribution_id; + $premiumParams['oldPremium']['product_id'] = $ContributionProduct->product_id; + $premiumParams['oldPremium']['contribution_id'] = $ContributionProduct->contribution_id; } - CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($params); + CRM_Core_BAO_FinancialTrxn::createPremiumTrxn($premiumParams); } } diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index 58dceac36c..2d4688c2cf 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -213,9 +213,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP /** * Status message to be shown to the user. * - * @var string + * @var array */ - protected $statusMessage; + protected $statusMessage = array(); /** * Status message title to be shown to the user. @@ -499,6 +499,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP * Build the form object. */ public function buildQuickForm() { + //@todo document the purpose of cdType (if still in use) if ($this->_cdType) { CRM_Custom_Form_CustomData::buildQuickForm($this); @@ -1297,15 +1298,16 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if ($contribution->id && isset($params['note'])) { CRM_Contribute_Form_AdditionalInfo::processNote($params, $contactID, $contribution->id, NULL); } + //process premium if ($contribution->id && isset($params['product_name'][0])) { CRM_Contribute_Form_AdditionalInfo::processPremium($params, $contribution->id, NULL, $this->_options); } if ($contribution->id) { - $this->statusMessage = ts('The contribution record has been processed.'); + array_unshift($this->statusMessage, ts('The contribution record has been processed.')); if (!empty($this->_params['is_email_receipt']) && $sendReceipt) { - $this->statusMessage .= ' ' . ts('A receipt has been emailed to the contributor.'); + $this->statusMessage[] = ts('A receipt has been emailed to the contributor.'); } $this->statusMessageTitle = ts('Complete'); } @@ -1427,6 +1429,8 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $existingContribution ); + CRM_Contribute_Form_AdditionalInfo::buildPremium($this); + $this->submit(array_merge($defaults, $params), $action, CRM_Utils_Array::value('pledge_payment_id', $params)); } @@ -1445,6 +1449,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP protected function submit($submittedValues, $action, $pledgePaymentID) { $softParams = $softIDs = array(); $pId = $contribution = $isRelatedId = FALSE; + if (!empty($submittedValues['price_set_id']) && $action & CRM_Core_Action::UPDATE) { $line = CRM_Price_BAO_LineItem::getLineItems($this->_id, 'contribution'); $lineID = key($line); @@ -1609,6 +1614,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if (!empty($submittedValues['contact_id'])) { $this->_contactID = $submittedValues['contact_id']; } + $formValues = $submittedValues; // Credit Card Contribution. if ($this->_mode) { @@ -1619,11 +1625,10 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $submittedValues = $this->unsetCreditCardFields($submittedValues); // get the required field value only. - $formValues = $submittedValues; + $params = $ids = array(); $params['contact_id'] = $this->_contactID; - $params['currency'] = $this->getCurrency($submittedValues); $fields = array( @@ -1748,9 +1753,8 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $contribution = CRM_Contribute_BAO_Contribution::create($params, $ids); // process associated membership / participant, CRM-4395 - $relatedComponentStatusMsg = NULL; if ($contribution->id && $action & CRM_Core_Action::UPDATE) { - $relatedComponentStatusMsg = $this->updateRelatedComponent($contribution->id, + $this->statusMessage[] = $this->updateRelatedComponent($contribution->id, $contribution->contribution_status_id, CRM_Utils_Array::value('contribution_status_id', $this->_values @@ -1770,7 +1774,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->_premiumID, $this->_options ); } - $this->statusMessage = ts('The contribution record has been saved.'); + array_unshift($this->statusMessage, ts('The contribution record has been saved.')); $this->invoicingPostProcessHook($submittedValues, $action, $lineItem); @@ -1784,21 +1788,15 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP // to get 'from email id' for send receipt $this->fromEmailId = $formValues['from_email_address']; if (CRM_Contribute_Form_AdditionalInfo::emailReceipt($this, $formValues)) { - $this->statusMessage .= ' ' . ts('A receipt has been emailed to the contributor.'); + $this->statusMessage[] = ts('A receipt has been emailed to the contributor.'); } } - if ($relatedComponentStatusMsg) { - $this->statusMessage .= ' ' . $relatedComponentStatusMsg; - } $this->statusMessageTitle = ts('Saved'); - - //Offline Contribution ends. } - - CRM_Core_Session::setStatus($this->statusMessage, $this->statusMessageTitle, 'success'); + CRM_Core_Session::setStatus(implode(' ', $this->statusMessage), $this->statusMessageTitle, 'success'); CRM_Contribute_BAO_Contribution::updateRelatedPledge( $action, @@ -1806,9 +1804,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $contribution->id, (CRM_Utils_Array::value('option_type', $formValues) == 2) ? TRUE : FALSE, $formValues['total_amount'], - $this->_defaults['total_amount'], + CRM_Utils_Array::value('total_amount', $this->_defaults), $formValues['contribution_status_id'], - $this->_defaults['contribution_status_id'] + CRM_Utils_Array::value('contribution_status_id', $this->_defaults) ); return $contribution; } diff --git a/tests/phpunit/CRM/Contribute/Form/ContributionTest.php b/tests/phpunit/CRM/Contribute/Form/ContributionTest.php index 519d363eb3..984d21c4f9 100644 --- a/tests/phpunit/CRM/Contribute/Form/ContributionTest.php +++ b/tests/phpunit/CRM/Contribute/Form/ContributionTest.php @@ -70,6 +70,13 @@ class CRM_Contribute_Form_ContributionTest extends CiviUnitTestCase { */ protected $paymentInstruments = array(); + /** + * Products. + * + * @var array + */ + protected $products = array(); + /** * Setup function. */ @@ -114,6 +121,12 @@ class CRM_Contribute_Form_ContributionTest extends CiviUnitTestCase { ); $instruments = $this->callAPISuccess('contribution', 'getoptions', array('field' => 'payment_instrument_id')); $this->paymentInstruments = $instruments['values']; + $product1 = $this->callAPISuccess('product', 'create', array( + 'name' => 'Smurf', + 'options' => 'brainy smurf, clumsy smurf, papa smurf', + )); + + $this->products[] = $product1['values'][$product1['id']]; } /** @@ -223,4 +236,24 @@ class CRM_Contribute_Form_ContributionTest extends CiviUnitTestCase { $this->assertEquals(1, $pledgePayment['status_id']); } + /** + * Test functions involving premiums. + */ + public function testPremiumUpdate() { + $form = new CRM_Contribute_Form_Contribution(); + $form->testSubmit(array( + 'total_amount' => 50, + 'financial_type_id' => 1, + 'receive_date' => '04/21/2015', + 'receive_date_time' => '11:27PM', + 'contact_id' => $this->_individualId, + 'payment_instrument_id' => array_search('Check', $this->paymentInstruments), + 'contribution_status_id' => 1, + 'product_name' => array($this->products[0]['id'], 1), + 'fulfilled_date' => '', + ), CRM_Core_Action::ADD); + $contributionProduct = $this->callAPISuccess('contribution_product', 'getsingle', array()); + $this->assertEquals('clumsy smurf', $contributionProduct['product_option']); + } + } -- 2.25.1