From 9d086eb799f23d49654f226079fdeb8ddf38e366 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 4b77747f9c..6dbbeac429 100644 --- a/CRM/Contribute/Form/ContributionBase.php +++ b/CRM/Contribute/Form/ContributionBase.php @@ -1387,7 +1387,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 9ecd3afde7..915be02f0b 100644 --- a/CRM/Price/BAO/PriceSet.php +++ b/CRM/Price/BAO/PriceSet.php @@ -1330,13 +1330,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