Пример #1
0
 /**
  * takes an associative array and creates a financial transaction object
  *
  * @param array  $params (reference ) an assoc array of name/value pairs
  *
  * @return object CRM_Core_BAO_FinancialTrxn object
  * @access public
  * @static
  */
 static function create(&$params)
 {
     $trxn = new CRM_Core_DAO_FinancialTrxn();
     $trxn->copyValues($params);
     require_once 'CRM/Utils/Rule.php';
     if (!CRM_Utils_Rule::currencyCode($trxn->currency)) {
         require_once 'CRM/Core/Config.php';
         $config = CRM_Core_Config::singleton();
         $trxn->currency = $config->defaultCurrency;
     }
     // if a transaction already exists for a contribution id, lets get the finTrxnId and entityFinTrxId
     $fids = self::getFinancialTrxnIds($params['contribution_id'], 'civicrm_contribution');
     if ($fids['financialTrxnId']) {
         $trxn->id = $fids['financialTrxnId'];
     }
     $trxn->save();
     $contributionAmount = CRM_Utils_Array::value('net_amount', $params);
     if (!$contributionAmount && isset($params['total_amount'])) {
         $contributionAmount = $params['total_amount'];
     }
     // save to entity_financial_trxn table
     $entity_financial_trxn_params = array('entity_table' => "civicrm_contribution", 'entity_id' => $params['contribution_id'], 'financial_trxn_id' => $trxn->id, 'amount' => $contributionAmount, 'currency' => $trxn->currency);
     $entity_trxn =& new CRM_Core_DAO_EntityFinancialTrxn();
     $entity_trxn->copyValues($entity_financial_trxn_params);
     if ($fids['entityFinancialTrxnId']) {
         $entity_trxn->id = $fids['entityFinancialTrxnId'];
     }
     $entity_trxn->save();
     return $trxn;
 }
 /**
  * adds $value['foo_display'] for each $value['foo'] enum from civicrm_financial_trxn
  *
  * @param array $values (reference)  the array up for enhancing
  * @return void
  */
 static function addDisplayEnums(&$values)
 {
     $enumFields =& CRM_Core_DAO_FinancialTrxn::getEnums();
     foreach ($enumFields as $enum) {
         if (isset($values[$enum])) {
             $values[$enum . '_display'] = CRM_Core_DAO_FinancialTrxn::tsEnum($enum, $values[$enum]);
         }
     }
 }
 function make_payment(&$params)
 {
     $config = CRM_Core_Config::singleton();
     if (isset($params["billing_state_province_id-{$this->_bltID}"]) && $params["billing_state_province_id-{$this->_bltID}"]) {
         $params["billing_state_province-{$this->_bltID}"] = CRM_Core_PseudoConstant::stateProvinceAbbreviation($params["billing_state_province_id-{$this->_bltID}"]);
     }
     if (isset($params["billing_country_id-{$this->_bltID}"]) && $params["billing_country_id-{$this->_bltID}"]) {
         $params["billing_country-{$this->_bltID}"] = CRM_Core_PseudoConstant::countryIsoCode($params["billing_country_id-{$this->_bltID}"]);
     }
     $params['ip_address'] = CRM_Utils_System::ipAddress();
     $params['currencyID'] = $config->defaultCurrency;
     $params['payment_action'] = 'Sale';
     $payment =& CRM_Core_Payment::singleton($this->_mode, $this->_paymentProcessor, $this);
     CRM_Core_Payment_Form::mapParams($this->_bltID, $params, $params, TRUE);
     $params['month'] = $params['credit_card_exp_date']['M'];
     $params['year'] = $params['credit_card_exp_date']['Y'];
     $result =& $payment->doDirectPayment($params);
     if (is_a($result, 'CRM_Core_Error')) {
         CRM_Core_Error::displaySessionError($result);
         CRM_Utils_System::redirect(CRM_Utils_System::url('civicrm/event/cart_checkout', "_qf_Payment_display=1&qfKey={$this->controller->_key}", TRUE, NULL, FALSE));
         return;
     } elseif (!$result['trxn_id']) {
         CRM_Core_Error::fatal(ts("Financial institution didn't return a transaction id."));
     }
     $trxnParams = array('trxn_date' => $params['now'], 'trxn_type' => 'Debit', 'total_amount' => $params['amount'], 'fee_amount' => CRM_Utils_Array::value('fee_amount', $result), 'net_amount' => CRM_Utils_Array::value('net_amount', $result, $params['amount']), 'currency' => CRM_Utils_Array::value('currencyID', $params), 'payment_processor' => $this->_paymentProcessor['payment_processor_type'], 'trxn_id' => $result['trxn_id']);
     $trxn = new CRM_Core_DAO_FinancialTrxn();
     $trxn->copyValues($trxnParams);
     if (!CRM_Utils_Rule::currencyCode($trxn->currency)) {
         $config = CRM_Core_Config::singleton();
         $trxn->currency = $config->defaultCurrency;
     }
     $trxn->save();
     return $trxn;
 }