X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FEvent%2FBAO%2FParticipant.php;h=49921a411e938aed2d9d0df83efae17642b79100;hb=b44f82bd262ef92b3b3fee5b40e60cbe9ae9af43;hp=60d8b7d560d5f76fdd25899862c4e990089030be;hpb=278b27fc7f21e647b4e33a4c73639920b8dfe4fe;p=civicrm-core.git diff --git a/CRM/Event/BAO/Participant.php b/CRM/Event/BAO/Participant.php index 60d8b7d560..49921a411e 100644 --- a/CRM/Event/BAO/Participant.php +++ b/CRM/Event/BAO/Participant.php @@ -3,7 +3,7 @@ +--------------------------------------------------------------------+ | CiviCRM version 4.7 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2015 | + | Copyright CiviCRM LLC (c) 2004-2016 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -28,7 +28,7 @@ /** * @package CRM - * @copyright CiviCRM LLC (c) 2004-2015 + * @copyright CiviCRM LLC (c) 2004-2016 */ class CRM_Event_BAO_Participant extends CRM_Event_DAO_Participant { @@ -138,8 +138,7 @@ 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); @@ -801,7 +800,7 @@ FROM civicrm_participant 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()) { @@ -1040,6 +1039,38 @@ WHERE civicrm_participant.id = {$participantId} 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. @@ -1790,36 +1821,29 @@ WHERE civicrm_participant.contact_id = {$contactID} AND * @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); } } } @@ -1907,7 +1931,7 @@ WHERE (li.entity_table = 'civicrm_participant' AND li.entity_id = {$participantI 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);