+--------------------------------------------------------------------+
| CiviCRM version 4.7 |
+--------------------------------------------------------------------+
- | Copyright CiviCRM LLC (c) 2004-2015 |
+ | Copyright CiviCRM LLC (c) 2004-2016 |
+--------------------------------------------------------------------+
| This file is a part of CiviCRM. |
| |
/**
* @package CRM
- * @copyright CiviCRM LLC (c) 2004-2015
+ * @copyright CiviCRM LLC (c) 2004-2016
*/
class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant {
$session = CRM_Core_Session::singleton();
- // reset the group contact cache for this group
- CRM_Contact_BAO_GroupContactCache::remove();
+ CRM_Contact_BAO_GroupContactCache::opportunisticCacheFlush();
if (!empty($params['id'])) {
CRM_Utils_Hook::post('edit', 'Participant', $participantBAO->id, $participantBAO);
LEFT JOIN civicrm_contact ON (civicrm_participant.contact_id = civicrm_contact.id)
WHERE civicrm_participant.id = {$participantId}
";
- $dao = CRM_Core_DAO::executeQuery($query, CRM_Core_DAO::$_nullArray);
+ $dao = CRM_Core_DAO::executeQuery($query);
$details = array();
while ($dao->fetch()) {
return $additionalParticipantIds;
}
+ /**
+ * Get the amount for the undiscounted version of the field.
+ *
+ * Note this function is part of the refactoring process rather than the best approach.
+ *
+ * @param int $eventID
+ * @param int $discountedPriceFieldOptionID
+ * @param string $feeLevel (deprecated)
+ *
+ * @return null|string
+ */
+ public static function getUnDiscountedAmountForEventPriceSetFieldValue($eventID, $discountedPriceFieldOptionID, $feeLevel) {
+ $priceSetId = CRM_Price_BAO_PriceSet::getFor('civicrm_event', $eventID, NULL);
+ $params = array(
+ 1 => array($priceSetId, 'Integer'),
+ );
+ if ($discountedPriceFieldOptionID) {
+ $query = "SELECT cpfv.amount FROM `civicrm_price_field_value` cpfv
+LEFT JOIN civicrm_price_field cpf ON cpfv.price_field_id = cpf.id
+WHERE cpf.price_set_id = %1 AND cpfv.label = (SELECT label from civicrm_price_field_value WHERE id = %2)";
+ $params[2] = array($discountedPriceFieldOptionID, 'Integer');
+ }
+ else {
+ $feeLevel = current($feeLevel);
+ $query = "SELECT cpfv.amount FROM `civicrm_price_field_value` cpfv
+LEFT JOIN civicrm_price_field cpf ON cpfv.price_field_id = cpf.id
+WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2";
+ $params[2] = array($feeLevel, 'String');
+ }
+ return CRM_Core_DAO::singleValueQuery($query, $params);
+ }
+
/**
* Get the event fee info for given participant ids
* either from line item table / participant table.
* @param array $contributionParams
* Contribution params.
*
- * @param $feeLevel
- *
+ * @param string $feeLevel (deprecated)
+ * @param int $discountedPriceFieldOptionID
+ * ID of the civicrm_price_field_value field for the discount id.
*/
- public static function createDiscountTrxn($eventID, $contributionParams, $feeLevel) {
- // CRM-11124
+ public static function createDiscountTrxn($eventID, $contributionParams, $feeLevel, $discountedPriceFieldOptionID) {
+ $financialTypeID = $contributionParams['contribution']->financial_type_id;
+ $total_amount = $contributionParams['total_amount'];
+
$checkDiscount = CRM_Core_BAO_Discount::findSet($eventID, 'civicrm_event');
if (!empty($checkDiscount)) {
- $feeLevel = current($feeLevel);
- $priceSetId = CRM_Price_BAO_PriceSet::getFor('civicrm_event', $eventID, NULL);
- $query = "SELECT cpfv.amount FROM `civicrm_price_field_value` cpfv
-LEFT JOIN civicrm_price_field cpf ON cpfv.price_field_id = cpf.id
-WHERE cpf.price_set_id = %1 AND cpfv.label LIKE %2";
- $params = array(
- 1 => array($priceSetId, 'Integer'),
- 2 => array($feeLevel, 'String'),
- );
- $mainAmount = CRM_Core_DAO::singleValueQuery($query, $params);
+ $mainAmount = self::getUnDiscountedAmountForEventPriceSetFieldValue($eventID, $discountedPriceFieldOptionID, $feeLevel);
$relationTypeId = key(CRM_Core_PseudoConstant::accountOptionValues('account_relationship', NULL, " AND v.name LIKE 'Discounts Account is' "));
- $contributionParams['trxnParams']['from_financial_account_id'] = CRM_Contribute_PseudoConstant::financialAccountType(
- $contributionParams['contribution']->financial_type_id, $relationTypeId);
- if (!empty($contributionParams['trxnParams']['from_financial_account_id'])) {
- $contributionParams['trxnParams']['total_amount'] = $mainAmount - $contributionParams['total_amount'];
- $contributionParams['trxnParams']['payment_processor_id'] = NULL;
- $contributionParams['trxnParams']['payment_instrument_id'] = NULL;
- $contributionParams['trxnParams']['check_number'] = NULL;
- $contributionParams['trxnParams']['trxn_id'] = NULL;
- $contributionParams['trxnParams']['net_amount'] = NULL;
- $contributionParams['trxnParams']['fee_amount'] = NULL;
-
- CRM_Core_BAO_FinancialTrxn::create($contributionParams['trxnParams']);
+ $transactionParams['from_financial_account_id'] = CRM_Contribute_PseudoConstant::financialAccountType(
+ $financialTypeID, $relationTypeId);
+ if (!empty($transactionParams['trxnParams']['from_financial_account_id'])) {
+ $transactionParams['trxnParams']['total_amount'] = $mainAmount - $total_amount;
+ $transactionParams['trxnParams']['payment_processor_id'] = NULL;
+ $transactionParams['trxnParams']['payment_instrument_id'] = NULL;
+ $transactionParams['trxnParams']['check_number'] = NULL;
+ $transactionParams['trxnParams']['trxn_id'] = NULL;
+ $transactionParams['trxnParams']['net_amount'] = NULL;
+ $transactionParams['trxnParams']['fee_amount'] = NULL;
+ CRM_Core_BAO_FinancialTrxn::create($transactionParams);
}
}
}
SELECT fi.*, SUM(fi.amount) as differenceAmt, price_field_value_id, financial_type_id, tax_amount
FROM civicrm_financial_item fi LEFT JOIN civicrm_line_item li ON (li.id = fi.entity_id AND fi.entity_table = 'civicrm_line_item')
WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantId})
-GROUP BY li.entity_table, li.entity_id, price_field_value_id
+GROUP BY li.entity_table, li.entity_id, price_field_value_id, fi.id
";
$updateFinancialItemInfoDAO = CRM_Core_DAO::executeQuery($updateFinancialItem);
$trxn = CRM_Core_BAO_FinancialTrxn::getFinancialTrxnId($contributionId, 'DESC', TRUE);