*/
protected $_useForMember;
+ /**
+ * Set the price Set Id (only used in tests)
+ */
+ public function setPriceSetId($priceSetId) {
+ $this->_sid = $priceSetId;
+ }
+
/**
* Set variables up before form is built.
*/
public function postProcess() {
// store the submitted values in an array
$params = $this->controller->exportValues('Field');
+ $params['id'] = $this->getEntityId();
+ $priceField = $this->submit($params);
+ if (!is_a($priceField, 'CRM_Core_Error')) {
+ // Required by extensions implementing the postProcess hook (to get the ID of new entities)
+ $this->setEntityId($priceField->id);
+ CRM_Core_Session::setStatus(ts('Price Field \'%1\' has been saved.', [1 => $priceField->label]), ts('Saved'), 'success');
+ }
+ $buttonName = $this->controller->getButtonName();
+ $session = CRM_Core_Session::singleton();
+ if ($buttonName == $this->getButtonName('next', 'new')) {
+ CRM_Core_Session::setStatus(ts(' You can add another price set field.'), '', 'info');
+ $session->replaceUserContext(CRM_Utils_System::url('civicrm/admin/price/field', 'reset=1&action=add&sid=' . $this->_sid));
+ }
+ else {
+ $session->replaceUserContext(CRM_Utils_System::url('civicrm/admin/price/field', 'reset=1&action=browse&sid=' . $this->_sid));
+ }
+ }
+
+ public function submit($params) {
$params['price'] = CRM_Utils_Rule::cleanMoney($params['price']);
foreach ($params['option_amount'] as $key => $amount) {
$params['option_amount'][$key] = CRM_Utils_Rule::cleanMoney($amount);
$params['option_visibility_id'] = [1 => CRM_Utils_Array::value('visibility_id', $params)];
}
- $params['id'] = $this->getEntityId();
-
$params['membership_num_terms'] = (!empty($params['membership_type_id'])) ? CRM_Utils_Array::value('membership_num_terms', $params, 1) : NULL;
$priceField = CRM_Price_BAO_PriceField::create($params);
-
- if (!is_a($priceField, 'CRM_Core_Error')) {
- // Required by extensions implementing the postProcess hook (to get the ID of new entities)
- $this->setEntityId($priceField->id);
- CRM_Core_Session::setStatus(ts('Price Field \'%1\' has been saved.', [1 => $priceField->label]), ts('Saved'), 'success');
- }
- $buttonName = $this->controller->getButtonName();
- $session = CRM_Core_Session::singleton();
- if ($buttonName == $this->getButtonName('next', 'new')) {
- CRM_Core_Session::setStatus(ts(' You can add another price set field.'), '', 'info');
- $session->replaceUserContext(CRM_Utils_System::url('civicrm/admin/price/field', 'reset=1&action=add&sid=' . $this->_sid));
- }
- else {
- $session->replaceUserContext(CRM_Utils_System::url('civicrm/admin/price/field', 'reset=1&action=browse&sid=' . $this->_sid));
- }
+ return $priceField;
}
}
$this->assertTrue(array_key_exists('visibility_id', $validationResult));
}
+ /**
+ * Test submitting a large float value is stored correctly in the db.
+ *
+ * @param string $thousandSeparator
+ * punctuation used to refer to thousands.
+ *
+ * @dataProvider getThousandSeparators
+ */
+ public function testLargeFloatOptionValue($thousandSeparator) {
+ $this->setCurrencySeparators($thousandSeparator);
+ $thousands = Civi::settings()->get('monetaryThousandSeparator');
+ $decimal = Civi::settings()->get('monetaryDecimalPoint');
+ $paramsSet['title'] = 'Price Set' . substr(sha1(rand()), 0, 7);
+ $paramsSet['name'] = CRM_Utils_String::titleToVar($paramsSet['title']);
+ $paramsSet['is_active'] = TRUE;
+ $paramsSet['financial_type_id'] = 'Event Fee';
+ $paramsSet['extends'] = 1;
+ $priceSet = $this->callAPISuccess('price_set', 'create', $paramsSet);
+ $form = new CRM_Price_Form_Field();
+ $form->_action = CRM_Core_Action::ADD;
+ $form->setPriceSetId($priceSet['id']);
+ $this->publicFieldParams['option_label'][1] = 'Large Float';
+ $this->publicFieldParams['option_amount'][1] = '123' . $thousands . '456' . $thousands . '789' . $decimal . '987654321';
+ $this->publicFieldParams['option_visibility_id'][1] = $this->visibilityOptionsKeys['public'];
+ $priceField = $form->submit($this->publicFieldParams);
+ $priceOptions = $this->callAPISuccess('PriceFieldValue', 'get', ['price_field_id' => $priceField->id]);
+ $this->assertEquals(123456789.987654321, $priceOptions['values'][$priceOptions['id']]['amount']);
+ }
+
private function initializeFieldParameters($params) {
$defaultParams = [
'label' => 'Price Field',
'is_enter_qty' => 1,
'financial_type_id' => $this->getFinancialTypeId('Event Fee'),
'visibility_id' => $this->visibilityOptionsKeys['public'],
+ 'price' => 10,
];
for ($index = 1; $index <= CRM_Price_Form_Field::NUM_OPTION; $index++) {