X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FForm%2FContribution.php;h=aa27d772043eb6a49913aaf7d93aca1cc5ecb6b9;hb=03b412ae5b8d7047f8e378038a32fe731b6e7fb0;hp=cdb5d94e7f136015b70ce522c63925ff6515aa58;hpb=c47248f46761fe02e1a060dcb331b44d882f71cb;p=civicrm-core.git diff --git a/CRM/Contribute/Form/Contribution.php b/CRM/Contribute/Form/Contribution.php index cdb5d94e7f..aa27d77204 100644 --- a/CRM/Contribute/Form/Contribution.php +++ b/CRM/Contribute/Form/Contribution.php @@ -39,7 +39,7 @@ */ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditPayment { /** - * the id of the contribution that we are proceessing + * the id of the contribution that we are processing * * @var int * @public @@ -47,12 +47,16 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP public $_id; /** - * the id of the premium that we are proceessing + * the id of the premium that we are processing * * @var int * @public */ public $_premiumID = NULL; + + /** + * @var CRM_Contribute_DAO_ContributionProduct + */ public $_productDAO = NULL; /** @@ -104,6 +108,14 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP */ public $_options; + /** + * Storage of parameters from form + * + * @var array + * @public + */ + public $_params; + /** * Store the contribution Type ID * @@ -125,22 +137,84 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP public $_context; + /** + * Parameter with confusing name + * @todo what is it? + * @var string + */ + public $_compContext; + public $_compId; + /** + * Possible From email addresses + * @var array + */ + public $_fromEmails; + + /** + * ID of from email + * @var integer + */ + public $fromEmailId; /* * Store the line items if price set used. */ public $_lineItems; /** - * @var soft credit info + * line item + * @todo explain why we use lineItem & lineItems + * @var array + */ + public $_lineItem; + + /** + * @var array soft credit info */ public $_softCreditInfo; protected $_formType; + + /** + * @todo what on earth does cdType stand for???? + * @var + */ protected $_cdType; public $_honoreeProfileType; + /** + * logged in user's email + * @var string + */ + public $userEmail; + + /** + * Price set ID + * @var integer + */ + public $_priceSetId; + + + /** + * Price set as an array + * @var array + */ + public $_priceSet; + + /** + * form defaults + * @todo can we define this a as protected? can we define higher up the chain + * @var array + */ + public $_defaults; + + /** + * User display name + * + * @var string + */ + public $userDisplayName; /** * Function to set variables up before form is built * @@ -163,8 +237,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP return; } - $config = CRM_Core_Config::singleton(); - $this->_formType = CRM_Utils_Array::value('formType', $_GET); // get price set id. @@ -224,7 +296,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP return; } - if (in_array('CiviPledge', $config->enableComponents) && !$this->_formType) { + if (in_array('CiviPledge', CRM_Core_Config::singleton()->enableComponents) && !$this->_formType) { $this->preProcessPledge(); } @@ -291,7 +363,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $defaults['option_type'] = 1; } - $fields = array(); if ($this->_action & CRM_Core_Action::DELETE) { return $defaults; } @@ -322,7 +393,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } // Set $newCredit variable in template to control whether link to credit card mode is included - CRM_Core_Payment::allowBackofficeCreditCard($this); + $this->assign('newCredit', CRM_Core_Config::isEnabledBackOfficeCreditCardPayments()); // fix the display of the monetary value, CRM-4038 if (isset($defaults['total_amount'])) { @@ -429,9 +500,20 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP CRM_Custom_Form_CustomData::buildQuickForm($this); return; } + $allPanes = array(); + //tax rate from financialType + $this->assign('taxRates', json_encode(CRM_Core_PseudoConstant::getTaxRates())); // build price set form. $buildPriceSet = FALSE; + $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings'); + $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); + + // display tax amount on edit contribution page + if ($invoicing && $this->_action & CRM_Core_Action::UPDATE && isset($this->_values['tax_amount'])) { + $this->assign('totalTaxAmount', $this->_values['tax_amount']); + } + if (empty($this->_lineItems) && ($this->_priceSetId || !empty($_POST['price_set_id'])) ) { @@ -606,7 +688,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP TRUE, array('onChange' => "CRM.buildCustomData( 'Contribution', this.value );") ); - + $paymentInstrument = FALSE; if (!$this->_mode) { $paymentInstrument = $this->add('select', 'payment_instrument_id', ts('Paid By'), @@ -852,9 +934,11 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP /** * global form rule * - * @param array $fields the input form values - * @param array $files the uploaded files if any - * @param array $options additional user data + * @param array $fields the input form values + * @param array $files the uploaded files if any + * @param $self + * + * @internal param array $options additional user data * * @return true if no errors, else array of errors * @access public @@ -922,6 +1006,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP */ public function postProcess() { $session = CRM_Core_Session::singleton(); + $sendReceipt = $pId = $contribution = FALSE; + $softParams = $softIDs =array(); + if ($this->_action & CRM_Core_Action::DELETE) { CRM_Contribute_BAO_Contribution::deleteContribution($this->_id); $session->replaceUserContext(CRM_Utils_System::url('civicrm/contact/view', @@ -942,9 +1029,23 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } } + // assign dataArray for contribution receipts + $dataArray = array(); + foreach ($this->_lineItems as $key => $value) { + foreach ($value as $v) { + if (isset($dataArray[$v['tax_rate']])) { + $dataArray[$v['tax_rate']] = $dataArray[$v['tax_rate']] + CRM_Utils_Array::value('tax_amount', $v); + } + else { + $dataArray[$v['tax_rate']] = CRM_Utils_Array::value('tax_amount', $v); + } + } + } + $smarty = CRM_Core_Smarty::singleton(); + $smarty->assign('dataArray', $dataArray); + // process price set and get total amount and line items. $lineItem = array(); - $priceSetId = $pId = NULL; $priceSetId = CRM_Utils_Array::value('price_set_id', $submittedValues); if (empty($priceSetId) && !$this->_id) { $this->_priceSetId = $priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', 'default_contribution_amount', 'id', 'name'); @@ -989,14 +1090,15 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $lineItems[$id]['id'] = $id; } $itemId = key($lineItems); - $fieldType = NULL; if ($itemId && !empty($lineItems[$itemId]['price_field_id'])) { - $fieldType = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItems[$itemId]['price_field_id'], 'html_type'); + $this->_priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItems[$itemId]['price_field_id'], 'price_set_id'); + } + + if ($this->_priceSetId && CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_priceSetId, 'is_quick_config')) { + $lineItems[$itemId]['unit_price'] = $lineItems[$itemId]['line_total'] = CRM_Utils_Rule::cleanMoney(CRM_Utils_Array::value('total_amount', $submittedValues)); } - $lineItems[$itemId]['unit_price'] = $lineItems[$itemId]['line_total'] = CRM_Utils_Rule::cleanMoney(CRM_Utils_Array::value('total_amount', $submittedValues)); // 10117 update th line items for participants if (!empty($lineItems[$itemId]['price_field_id'])) { - $this->_priceSetId = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceField', $lineItems[$itemId]['price_field_id'], 'price_set_id'); $lineItem[$this->_priceSetId] = $lineItems; } } @@ -1004,9 +1106,9 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if ($this->_priceSetId && CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_priceSetId, 'is_quick_config')) { $isQuickConfig = 1; } - //CRM-11529 for quick config backoffice transactions + //CRM-11529 for quick config back office transactions //when financial_type_id is passed in form, update the - //lineitems with the financial type selected in form + //line items with the financial type selected in form if ($isQuickConfig && !empty($submittedValues['financial_type_id']) && CRM_Utils_Array::value($this->_priceSetId, $lineItem) ) { foreach ($lineItem[$this->_priceSetId] as &$values) { @@ -1039,7 +1141,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } else { //build soft credit params - $softParams = $softIDs =array(); foreach ($submittedValues['soft_credit_contact_id'] as $key => $val) { if ($val && $submittedValues['soft_credit_amount'][$key]) { $softParams[$key]['contact_id'] = $val; @@ -1061,7 +1162,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP //Credit Card Contribution. if ($this->_mode) { - $this->processCreditCard($submittedValues, $config, $session, $pId, $lineItem); + $this->processCreditCard($submittedValues, $config, $session, $lineItem); } else { //Offline Contribution. @@ -1142,19 +1243,19 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } $params['line_item'] = $lineItem; $params['payment_processor_id'] = $params['payment_processor'] = CRM_Utils_Array::value('id', $this->_paymentProcessor); + if (CRM_Utils_Array::value('tax_amount', $submittedValues)) { + $params['tax_amount'] = $submittedValues['tax_amount']; + } //create contribution. if ($isQuickConfig) { $params['is_quick_config'] = 1; } // CRM-11956 - // if non_deductible_amount exists i.e. Additional Details fieldset was opened [and staff typed something] -> keep it. - if (isset($params['non_deductible_amount']) && (!empty($params['non_deductible_amount']))) { - $params['non_deductible_amount'] = $params['non_deductible_amount']; - } + // if non_deductible_amount exists i.e. Additional Details field set was opened [and staff typed something] - // if non_deductible_amount does NOT exist - then calculate it depending on: // $ContributionType->is_deductible and whether there is a product (premium). - else { + if (!isset($params['non_deductible_amount']) || (!empty($params['non_deductible_amount']))) { $contributionType = new CRM_Financial_DAO_FinancialType(); $contributionType->id = $params['financial_type_id']; if (!$contributionType->find(TRUE)) { @@ -1324,7 +1425,16 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } } - public function processCreditCard($submittedValues, $config, $session, $pId, $lineItem) { + /** + * @param $submittedValues + * @param $config + * @param $session CRM_Core_Session + * @param $lineItem + * + * @throws CRM_Core_Exception + */ + public function processCreditCard($submittedValues, $config, $session, $lineItem) { + $sendReceipt = $contribution = FALSE; $unsetParams = array( 'trxn_id', 'payment_instrument_id', @@ -1343,7 +1453,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $this->_lineItem = $lineItem; } - //Get the rquire fields value only. + //Get the require fields value only. $params = $this->_params = $submittedValues; $this->_paymentProcessor = CRM_Financial_BAO_PaymentProcessor::getPayment($this->_params['payment_processor_id'], @@ -1370,7 +1480,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $params['email-Primary'] = $this->userEmail; // now set the values for the billing location. - foreach ($this->_fields as $name => $dontCare) { + foreach (array_keys($this->_fields) as $name) { $fields[$name] = 1; } @@ -1402,7 +1512,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP $ctype ); - // add all the additioanl payment params we need + // add all the additional payment params we need $this->_params["state_province-{$this->_bltID}"] = $this->_params["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($this->_params["billing_state_province_id-{$this->_bltID}"]); $this->_params["country-{$this->_bltID}"] = $this->_params["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($this->_params["billing_country_id-{$this->_bltID}"]); @@ -1469,9 +1579,6 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP if (!empty($this->_params['receive_date'])) { $paymentParams['receive_date'] = $this->_params['receive_date']; } - if (!empty($this->_params['receive_date'])) { - $paymentParams['receive_date'] = $this->_params['receive_date']; - } $result = NULL; @@ -1495,7 +1602,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP } if ($paymentParams['amount'] > 0.0) { - // force a reget of the payment processor in case the form changed it, CRM-7179 + // force a re-get of the payment processor in case the form changed it, CRM-7179 $payment = CRM_Core_Payment::singleton($this->_mode, $this->_paymentProcessor, $this, TRUE); $result = $payment->doDirectPayment($paymentParams); }