<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.4 |
+ | CiviCRM version 4.5 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2013 |
+ | Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
*
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2013
+ * @copyright CiviCRM LLC (c) 2004-2014
* $Id$
*
*/
*/
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
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;
/**
*/
public $_options;
+ /**
+ * Storage of parameters from form
+ *
+ * @var array
+ * @public
+ */
+ public $_params;
+
/**
* Store the contribution Type ID
*
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
*
return;
}
- $config = CRM_Core_Config::singleton();
-
$this->_formType = CRM_Utils_Array::value('formType', $_GET);
// get price set id.
return;
}
- if (in_array('CiviPledge', $config->enableComponents) && !$this->_formType) {
+ if (in_array('CiviPledge', CRM_Core_Config::singleton()->enableComponents) && !$this->_formType) {
$this->preProcessPledge();
}
$defaults['option_type'] = 1;
}
- $fields = array();
if ($this->_action & CRM_Core_Action::DELETE) {
return $defaults;
}
}
// 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'])) {
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']))
) {
TRUE,
array('onChange' => "CRM.buildCustomData( 'Contribution', this.value );")
);
-
+ $paymentInstrument = FALSE;
if (!$this->_mode) {
$paymentInstrument = $this->add('select', 'payment_instrument_id',
ts('Paid By'),
unset($status[CRM_Utils_Array::key('Overdue', $statusName)]);
}
}
-
+
if ($this->_id) {
$contributionStatus = CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_Contribution', $this->_id, 'contribution_status_id');
$name = CRM_Utils_Array::value($contributionStatus, $statusName);
/**
* 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
*/
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',
}
}
+ // 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');
$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;
}
}
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) {
$pcp[$f] = CRM_Utils_Array::value($f, $submittedValues);
}
}
+
+ $isEmpty = array_keys(array_flip($submittedValues['soft_credit_contact_id']));
+ if ($this->_id && count($isEmpty) == 1 && key($isEmpty) == NULL) {
+ //Delete existing soft credit records if soft credit list is empty on update
+ CRM_Contribute_BAO_ContributionSoft::del(array('contribution_id' => $this->_id));
+ }
else {
- $isEmpty = array_keys(array_flip($submittedValues['soft_credit_contact_id']));
- if ($this->_id && count($isEmpty) == 1 && key($isEmpty) == NULL) {
- //Delete existing soft credit records if soft credit list is empty on update
- CRM_Contribute_BAO_ContributionSoft::del(array('contribution_id' => $this->_id));
- }
- 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;
- $softParams[$key]['amount'] = CRM_Utils_Rule::cleanMoney($submittedValues['soft_credit_amount'][$key]);
- $softParams[$key]['soft_credit_type_id'] = $submittedValues['soft_credit_type'][$key];
- if (!empty($submittedValues['soft_credit_id'][$key])) {
- $softIDs[] = $softParams[$key]['id'] = $submittedValues['soft_credit_id'][$key];
- }
+ //build soft credit params
+ foreach ($submittedValues['soft_credit_contact_id'] as $key => $val) {
+ if ($val && $submittedValues['soft_credit_amount'][$key]) {
+ $softParams[$key]['contact_id'] = $val;
+ $softParams[$key]['amount'] = CRM_Utils_Rule::cleanMoney($submittedValues['soft_credit_amount'][$key]);
+ $softParams[$key]['soft_credit_type_id'] = $submittedValues['soft_credit_type'][$key];
+ if (!empty($submittedValues['soft_credit_id'][$key])) {
+ $softIDs[] = $softParams[$key]['id'] = $submittedValues['soft_credit_id'][$key];
}
}
}
//Credit Card Contribution.
if ($this->_mode) {
- $this->processCreditCard($submittedValues, $config, $session, $pId, $lineItem);
+ $this->processCreditCard($submittedValues, $config, $session, $lineItem);
}
else {
//Offline Contribution.
}
$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)) {
}
}
- 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',
$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'],
$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;
}
$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}"]);
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;
}
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);
}