X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FContribute%2FForm%2FContribution%2FConfirm.php;h=7978e02a0dadaa265bcb706e00a7bff8dd9e5f53;hb=1fa961e3e8412c4e81d66bc3b8a8b0a850c39f0d;hp=25bd3f1ae2963837f951643336306bf9750f32ac;hpb=db89844a9c76000502a24414cbdbe602b389bb4f;p=civicrm-core.git diff --git a/CRM/Contribute/Form/Contribution/Confirm.php b/CRM/Contribute/Form/Contribution/Confirm.php index 25bd3f1ae2..7978e02a0d 100644 --- a/CRM/Contribute/Form/Contribution/Confirm.php +++ b/CRM/Contribute/Form/Contribution/Confirm.php @@ -65,23 +65,16 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * @param $contributionPageId * @param $nonDeductibleAmount * @param $campaignId - * * @param $isMonetary - * * @param $pending * @param $paymentProcessorOutcome * @param $receiptDate - * * @param $recurringContributionID * @param $isTest - * * @param $addressID - * * @param $softCreditToID - * * @param $lineItems * - * @internal param $financialType * @return array */ public static function getContributionParams($params, $contactID, $financialTypeID, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $isMonetary, $pending, @@ -94,6 +87,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr 'receive_date' => (CRM_Utils_Array::value('receive_date', $params)) ? CRM_Utils_Date::processDate($params['receive_date']) : date('YmdHis'), 'non_deductible_amount' => $nonDeductibleAmount, 'total_amount' => $params['amount'], + 'tax_amount' => CRM_Utils_Array::value('tax_amount', $params), 'amount_level' => CRM_Utils_Array::value('amount_level', $params), 'invoice_id' => $params['invoiceID'], 'currency' => $params['currencyID'], @@ -165,7 +159,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } /** - * Function to set variables up before form is built + * set variables up before form is built * * @return void * @access public @@ -253,6 +247,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $this->_params['ip_address'] = CRM_Utils_System::ipAddress(); $this->_params['amount'] = $this->get('amount'); + $this->_params['tax_amount'] = $this->get('tax_amount'); $this->_useForMember = $this->get('useForMember'); @@ -443,7 +438,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } /** - * Function to actually build the form + * Build the form object * * @return void * @access public @@ -469,6 +464,24 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $amount_block_is_active = $this->get('amount_block_is_active'); $this->assign('amount_block_is_active', $amount_block_is_active); + $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings'); + $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); + if ($invoicing) { + $getTaxDetails = FALSE; + $taxTerm = CRM_Utils_Array::value('tax_term', $invoiceSettings); + foreach ($this->_lineItem as $key => $value) { + foreach ($value as $v) { + if (isset($v['tax_rate'])) { + if ($v['tax_rate'] != '') { + $getTaxDetails = TRUE; + } + } + } + } + $this->assign('getTaxDetails', $getTaxDetails); + $this->assign('taxTerm', $taxTerm); + $this->assign('totalTaxAmount', $params['tax_amount']); + } if (!empty($params['selectProduct']) && $params['selectProduct'] != 'no_thanks') { $option = CRM_Utils_Array::value('options_' . $params['selectProduct'], $params); $productID = $params['selectProduct']; @@ -586,7 +599,14 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // Recursively set defaults for nested fields if (isset($contact[$name]) && is_array($contact[$name]) && ($name == 'onbehalf' || $name == 'honor')) { foreach ($contact[$name] as $fieldName => $fieldValue) { - $defaults["{$name}[{$fieldName}]"] = $fieldValue; + if (is_array($fieldValue) && !in_array($this->_fields[$name][$fieldName]['html_type'], array('Multi-Select','AdvMulti-Select'))) { + foreach ($fieldValue as $key => $value) { + $defaults["{$name}[{$fieldName}][{$key}]"] = $value; + } + } + else { + $defaults["{$name}[{$fieldName}]"] = $fieldValue; + } } } elseif (isset($contact[$name])) { @@ -630,7 +650,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } /** - * This function sets the default values for the form. Note that in edit/view mode + * Set default values for the form. Note that in edit/view mode * the default values are retrieved from the database * * @access public @@ -647,7 +667,10 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr */ public function postProcess() { $contactID = $this->getContactID(); - + $isPayLater = $this->_params['is_pay_later']; + if ($this->_params['payment_processor'] == 0) { + $this->_params['is_pay_later'] = $isPayLater = TRUE; + } // add a description field at the very beginning $this->_params['description'] = ts('Online Contribution') . ': ' . (($this->_pcpInfo['title']) ? $this->_pcpInfo['title'] : $this->_values['title']); @@ -698,7 +721,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr //unset the billing parameters if it is pay later mode //to avoid creation of billing location - if ($params['is_pay_later']) { + if ($isPayLater && !$this->_isBillingAddressRequiredForPayLater) { $billingFields = array( 'billing_first_name', 'billing_middle_name', @@ -974,7 +997,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } } - $this->processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems); + $this->processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems, $isPayLater); if (!$this->_amount > 0.0 || !$membershipParams['amount']) { // we need to explicitly create a CMS user in case of free memberships // since it is done under processConfirm for paid memberships @@ -1003,16 +1026,41 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } $fieldTypes = array('Contact', 'Organization', 'Contribution'); } + $financialTypeID = $this->wrangleFinancialTypeID($contributionTypeId); CRM_Contribute_BAO_Contribution_Utils::processConfirm($this, $paymentParams, $premiumParams, $contactID, - $contributionTypeId, + $financialTypeID, 'contribution', - $fieldTypes + $fieldTypes, + ($this->_mode == 'test') ? 1 : 0, + $isPayLater ); } } + /** + * This wrangling of the financialType ID was happening in a shared function rather than in the form it relates to & hence has been moved to that form + * Pledges are not relevant to the membership code so that portion will not go onto the membership form. + * + * Comments from previous refactor indicate doubt as to what was going on + * @param $contributionTypeId + * + * @return null|string + */ + function wrangleFinancialTypeID($contributionTypeId) { + if (isset($paymentParams['financial_type'])) { + $contributionTypeId = $paymentParams['financial_type']; + } + elseif (!empty($this->_values['pledge_id'])) { + $contributionTypeId = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_Pledge', + $this->_values['pledge_id'], + 'financial_type_id' + ); + } + return $contributionTypeId; + } + /** * Process the form * @@ -1141,7 +1189,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr /** * Process the contribution * - * @param $form + * @param CRM_Core_Form $form * @param array $params * @param array $result * @param integer $contactID @@ -1184,7 +1232,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // a better fix would be to set the values in the respective forms rather than require // a function being shared by two forms to deal with their respective values // moving it to the BAO & not taking the $form as a param would make sense here. - if(!isset($params['is_email_receipt'])){ + if(!isset($params['is_email_receipt']) && !empty($form->_values['is_email_receipt'])){ $params['is_email_receipt'] = CRM_Utils_Array::value( 'is_email_receipt', $form->_values ); } $recurringContributionID = self::processRecurringContribution($form, $params, $contactID, $financialType, $online); @@ -1273,11 +1321,37 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } if (isset($params['amount'])) { + $isMonetary = NULL; + if (!empty($form->_values['is_monetary'])) { + $isMonetary = $form->_values['is_monetary']; + } $contribParams = self::getContributionParams( - $params, $contactID, $financialType->id, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $form->_values['is_monetary'], $pending, $result, $receiptDate, + $params, $contactID, $financialType->id, $online, $contributionPageId, $nonDeductibleAmount, $campaignId, $isMonetary, $pending, $result, $receiptDate, $recurringContributionID, $isTest, $addressID, $contribSoftContactId, $lineItems ); $contribution = CRM_Contribute_BAO_Contribution::add($contribParams); + + $invoiceSettings = CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::CONTRIBUTE_PREFERENCES_NAME,'contribution_invoice_settings'); + $invoicing = CRM_Utils_Array::value('invoicing', $invoiceSettings); + if ($invoicing) { + $totalTaxAmount = 0; + $dataArray = array(); + foreach ($form->_lineItem as $lineItemKey => $lineItemValue) { + foreach ($lineItemValue as $key => $value) { + if (isset($value['tax_amount']) && isset($value['tax_rate'])) { + if (isset($dataArray[$value['tax_rate']])) { + $dataArray[$value['tax_rate']] = $dataArray[$value['tax_rate']] + CRM_Utils_Array::value('tax_amount', $value); + } + else { + $dataArray[$value['tax_rate']] = CRM_Utils_Array::value('tax_amount', $value); + } + } + } + } + $smarty = CRM_Core_Smarty::singleton(); + $smarty->assign('dataArray', $dataArray); + $smarty->assign('totalTaxAmount', $params['tax_amount']); + } if (is_a($contribution, 'CRM_Core_Error')) { $message = CRM_Core_Error::getMessages($contribution); CRM_Core_Error::fatal($message); @@ -1440,6 +1514,13 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr /** * Create the recurring contribution record * + * @param CRM_Core_Form $form + * @param array $params + * @param integer $contactID + * @param string $contributionType + * @param bool $online + * + * @return mixed */ static function processRecurringContribution(&$form, &$params, $contactID, $contributionType, $online = TRUE) { // return if this page is not set for recurring @@ -1460,7 +1541,8 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr // CRM-14354: For an auto-renewing membership with an additional contribution, // if separate payments is not enabled, make sure only the membership fee recurs - if ($form->_membershipBlock['is_separate_payment'] === '0' + if (!empty($form->_membershipBlock) + && $form->_membershipBlock['is_separate_payment'] === '0' && isset($params['selectMembership']) && $form->_values['is_allow_other_amount'] == '1' ) { @@ -1518,14 +1600,14 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } /** - * Function to add on behalf of organization and it's location + * add on behalf of organization and it's location * * @param $behalfOrganization array array of organization info * @param $contactID int individual contact id. One * who is doing the process of signup / contribution. * * @param $values array form values array - * @param $params + * @param array $params * @param null $fields * * @return void @@ -1664,7 +1746,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * Function used to se pcp related defaults / params * This is used by contribution and also event pcps * - * @param object $page form object + * @param CRM_Core_Form $page form object * @param array $params associated array * * @return array @@ -1702,8 +1784,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * @param array $fieldTypes * @param array $premiumParams * @param array $membershipLineItems line items specifically relating to memberships + * @param $isPayLater */ - public function processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems) { + public function processMembership($membershipParams, $contactID, $customFieldsFormatted, $fieldTypes, $premiumParams, $membershipLineItems, $isPayLater) { try { $membershipTypeIDs = (array) $membershipParams['selectMembership']; $membershipTypes = CRM_Member_BAO_Membership::buildMembershipTypeValues($this, $membershipTypeIDs); @@ -1729,7 +1812,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr CRM_Member_BAO_Membership::postProcessMembership($membershipParams, $contactID, $this, $premiumParams, $customFieldsFormatted, $fieldTypes, $membershipType, $membershipTypeIDs, $isPaidMembership, $this->_membershipId, $isProcessSeparateMembershipTransaction, $contributionTypeId, - $membershipLineItems + $membershipLineItems, $isPayLater ); $this->assign('membership_assign', TRUE); $this->set('membershipTypeID', $membershipParams['selectMembership']); @@ -1768,8 +1851,6 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr * * @param $priceSetID * - * @internal param $isQuickConfig - * @internal param $priceField */ public function setFormAmountFields($priceSetID) { $isQuickConfig = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_params['priceSetId'], 'is_quick_config'); @@ -1823,6 +1904,11 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr } } + /** + * @param array $params + * + * @throws CiviCRM_API3_Exception + */ static function submit($params) { $form = new CRM_Contribute_Form_Contribution_Confirm(); $form->_id = $params['id']; @@ -1852,6 +1938,9 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr $form->_contributeMode = 'notify'; } } + else { + $form->_params['payment_processor'] = 0; + } $priceFields = $priceFields[$priceSetID]['fields']; CRM_Price_BAO_PriceSet::processAmount($priceFields, $paramsProcessedForForm, $lineItems, 'civicrm_contribution'); $form->_lineItem = array($priceSetID => $lineItems);