From 1d17985a86a32929b82eae179786cb7b7ae708d3 Mon Sep 17 00:00:00 2001 From: Ruben Rodriguez Date: Mon, 12 Mar 2018 19:47:35 -0400 Subject: [PATCH] BIG HACK: Corrected frequency calculation for new members --- CRM/Contribute/Form/ContributionBase.php | 9 ++++++++- CRM/Price/BAO/PriceSet.php | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CRM/Contribute/Form/ContributionBase.php b/CRM/Contribute/Form/ContributionBase.php index f9bd0a3677..cf3df15a85 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -1163,7 +1163,14 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form { $this->_params['is_recur'] = $this->_values['is_recur'] = 1; // check if price set is not quick config if (!empty($this->_params['priceSetId']) && !CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $this->_params['priceSetId'], 'is_quick_config')) { - list($this->_params['frequency_interval'], $this->_params['frequency_unit']) = CRM_Price_BAO_PriceSet::getRecurDetails($this->_params['priceSetId']); + + // based on Lisa's commit 520680c63f7b886643e80c2400d9e9b6f1a1fd52 + // Extract the ids for all of the line items that have been chosen. + $priceFieldValueIds = array_keys($this->_lineItem[$this->_params['priceSetId']])[0]; + if (empty($priceFieldValueIds)) + $priceFieldValueIds = array_keys($this->_params['price_126'])[0]; + list($this->_params['frequency_interval'], $this->_params['frequency_unit']) = CRM_Price_BAO_PriceSet::getRecurDetails($this->_params['priceSetId'], $priceFieldValueIds); + //list($this->_params['frequency_interval'], $this->_params['frequency_unit']) = CRM_Price_BAO_PriceSet::getRecurDetails($this->_params['priceSetId']); } else { // FIXME: set interval and unit based on selected membership type diff --git a/CRM/Price/BAO/PriceSet.php b/CRM/Price/BAO/PriceSet.php index c4ce573223..0ae7522956 100644 --- a/CRM/Price/BAO/PriceSet.php +++ b/CRM/Price/BAO/PriceSet.php @@ -1261,13 +1261,14 @@ GROUP BY mt.member_of_contact_id "; * @return array * associate array of frequency interval and unit */ - public static function getRecurDetails($priceSetId) { + public static function getRecurDetails($priceSetId, $priceFieldValueIds) { $query = 'SELECT mt.duration_interval, mt.duration_unit FROM civicrm_price_field_value pfv INNER JOIN civicrm_membership_type mt ON pfv.membership_type_id = mt.id INNER JOIN civicrm_price_field pf ON pfv.price_field_id = pf.id - WHERE pf.price_set_id = %1 LIMIT 1'; + WHERE pf.price_set_id = %1 AND pfv.id = ' + . $priceFieldValueIds . ' LIMIT 1'; $params = [1 => [$priceSetId, 'Integer']]; $dao = CRM_Core_DAO::executeQuery($query, $params); -- 2.25.1