/**
* Function to process payment after confirmation
*
- * @param object $form form object
- * @param array $paymentParams array with payment related key
+ * @param object $form form object
+ * @param array $paymentParams array with payment related key
* value pairs
- * @param array $premiumParams array with premium related key
+ * @param array $premiumParams array with premium related key
* value pairs
- * @param int $contactID contact id
- * @param int $contributionTypeId financial type id
- * @param int $component component id
+ * @param int $contactID contact id
+ * @param int $contributionTypeId financial type id
+ * @param int|string $component component id
+ *
+ * @param null $fieldTypes
*
* @return array associated array
*
$fieldTypes = NULL
) {
CRM_Core_Payment_Form::mapParams($form->_bltID, $form->_params, $paymentParams, TRUE);
+ $isTest = ($form->_mode == 'test') ? 1 : 0;
+ $lineItems = $form->_lineItem;
+
+ //do overrides that should have been done in the calling function -
+ // @todo the calling function should pass the correct
+ // variable for $contributionTypeId as it's impossible to debug what is happening in each flow here
+ // but we need to ensure it is doing so before we remove this cruft
- $contributionType = new CRM_Financial_DAO_FinancialType();
if (isset($paymentParams['financial_type'])) {
- $contributionType->id = $paymentParams['financial_type'];
+ $contributionTypeId = $paymentParams['financial_type'];
}
elseif (!empty($form->_values['pledge_id'])) {
- $contributionType->id = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_Pledge',
+ $contributionTypeId = CRM_Core_DAO::getFieldValue('CRM_Pledge_DAO_Pledge',
$form->_values['pledge_id'],
'financial_type_id'
);
}
- else {
- $contributionType->id = $contributionTypeId;
- }
+
+ $contributionType = new CRM_Financial_DAO_FinancialType();
+ $contributionType->id = $contributionTypeId;
if (!$contributionType->find(TRUE)) {
+ //@todo - surely this check was part of the 4.3 upgrade & can go now?
CRM_Core_Error::fatal('Could not find a system table');
}
// add some financial type details to the params list
// if folks need to use it
- $paymentParams['contributionType_name'] = $form->_params['contributionType_name'] = $contributionType->name;
+ //CRM-15297 - contributionType is obsolete - pass financial type as well so people can deprecate it
+ $paymentParams['financialType_name'] = $paymentParams['contributionType_name'] = $form->_params['contributionType_name'] = $contributionType->name;
//CRM-11456
- $paymentParams['contributionType_accounting_code'] = $form->_params['contributionType_accounting_code'] = CRM_Financial_BAO_FinancialAccount::getAccountingCode($contributionType->id);
+ $paymentParams['financialType_accounting_code'] = $paymentParams['contributionType_accounting_code'] = $form->_params['contributionType_accounting_code'] = CRM_Financial_BAO_FinancialAccount::getAccountingCode($contributionTypeId);
$paymentParams['contributionPageID'] = $form->_params['contributionPageID'] = $form->_values['id'];
NULL,
$contactID,
$contributionType,
- TRUE, TRUE, TRUE
+ TRUE, TRUE,
+ $isTest,
+ $lineItems
);
if ($contribution) {
$form->_params['contributionID'] = $contribution->id;
}
- $form->_params['contributionTypeID'] = $contributionType->id;
+ $form->_params['contributionTypeID'] = $contributionTypeId;
$form->_params['item_name'] = $form->_params['description'];
$form->_params['receive_date'] = $now;
else {
if (!$form->_params['is_pay_later']) {
if (is_object($payment)) {
- // call postprocess hook before leaving
+ // call postProcess hook before leaving
$form->postProcessHook();
// this does not return
$result = &$payment->doTransferCheckout($form->_params, 'contribute');
NULL,
$contactID,
$contributionType,
- TRUE, TRUE, TRUE
+ TRUE, TRUE,
+ $isTest,
+ $lineItems
);
// restore cached values (part of fix for CRM-14354)
}
$paymentParams['contributionID'] = $contribution->id;
- $paymentParams['contributionTypeID'] = $contribution->financial_type_id;
+ //CRM-15297 deprecate contributionTypeID
+ $paymentParams['financialTypeID'] = $paymentParams['contributionTypeID'] = $contribution->financial_type_id;
$paymentParams['contributionPageID'] = $contribution->contribution_page_id;
if ($form->_values['is_recur'] && $contribution->contribution_recur_id) {
if (is_a($result, 'CRM_Core_Error')) {
//make sure to cleanup db for recurring case.
+ //@todo this clean up has always been controversial as many orgs prefer to see failed transactions.
+ // most recent discussion has been that they should be retained and this could be altered
if (!empty($paymentParams['contributionID'])) {
CRM_Contribute_BAO_Contribution::deleteContribution($paymentParams['contributionID']);
}
// result has all the stuff we need
// lets archive it to a financial transaction
+ //@todo - this is done in 2 places - can't we just do it once straight after retrieving contribution type -
+ // when would this be a bad thing?
if ($contributionType->is_deductible) {
$form->assign('is_deductible', TRUE);
$form->set('is_deductible', TRUE);
$contribution = CRM_Contribute_Form_Contribution_Confirm::processContribution($form,
$form->_params, $result,
$contactID, $contributionType,
- TRUE, $pending, TRUE
+ $pending, TRUE,
+ $isTest,
+ $lineItems
);
}
$form->postProcessPremium($premiumParams, $contribution);
-
+ if (is_array($result) && !empty($result['trxn_id'])) {
+ $contribution->trxn_id = $result['trxn_id'];
+ }
$membershipResult[1] = $contribution;
}
return $params;
}
+ /**
+ * @param $params
+ * @param $contactID
+ * @param $mail
+ */
static function createCMSUser(&$params, $contactID, $mail) {
// lets ensure we only create one CMS user
static $created = FALSE;
}
}
+ /**
+ * @param $params
+ * @param string $type
+ *
+ * @return bool
+ */
static function _fillCommonParams(&$params, $type = 'paypal') {
if (array_key_exists('transaction', $params)) {
$transaction = &$params['transaction'];
return TRUE;
}
+ /**
+ * @param $apiParams
+ * @param $mapper
+ * @param string $type
+ * @param bool $category
+ *
+ * @return array
+ */
static function formatAPIParams($apiParams, $mapper, $type = 'paypal', $category = TRUE) {
$type = strtolower($type);
}
}
+ /**
+ * @param $params
+ *
+ * @return bool
+ */
static function processAPIContribution($params) {
if (empty($params) || array_key_exists('error', $params)) {
return FALSE;
return TRUE;
}
+ /**
+ * @param $contactID
+ *
+ * @return mixed
+ */
static function getFirstLastDetails($contactID) {
static $_cache;
}
return $_cache[$contactID];
}
+
+ /**
+ * Calculate the tax amount based on given tax rate.
+ *
+ * @param float $amount amount of field.
+ * @param float $taxRate tax rate of selected financial account for field.
+ *
+ * @return array array of tax amount
+ *
+ * @access public
+ * @static
+ *
+ */
+ public static function calculateTaxAmount($amount, $taxRate) {
+ $taxAmount = array();
+ $taxAmount['tax_amount'] = ($taxRate/100) * CRM_Utils_Rule::cleanMoney($amount);
+
+ return $taxAmount;
+ }
}