Skip to content
Snippets Groups Projects
Commit cbd38308 authored by jaapjansma's avatar jaapjansma
Browse files

Fixed subtract field

parent 2359660f
No related branches found
No related tags found
No related merge requests found
......@@ -224,13 +224,15 @@ abstract class CalculationFieldOutputHandler extends AbstractFieldOutputHandler
}
$value = $this->doCalculation($values);
$formattedValue = $value;
if (is_numeric($this->number_of_decimals)) {
if (is_numeric($this->number_of_decimals) && $value != null) {
$formattedValue = number_format($value, $this->number_of_decimals, $this->decimal_sep, $this->thousand_sep);
}
$formattedValue = $this->prefix.$formattedValue.$this->suffix;
if ($formattedValue != null) {
$formattedValue = $this->prefix . $formattedValue . $this->suffix;
}
$output = new FieldOutput($value);
$output->formattedValue = $formattedValue;
return $output;
}
}
\ No newline at end of file
}
......@@ -6,10 +6,247 @@
namespace Civi\DataProcessor\FieldOutputHandler\Calculations;
use Civi\Api4\Phone;
use Civi\DataProcessor\DataSpecification\FieldSpecification;
use Civi\DataProcessor\Exception\DataSourceNotFoundException;
use Civi\DataProcessor\Exception\FieldNotFoundException;
use Civi\DataProcessor\FieldOutputHandler\AbstractFieldOutputHandler;
use Civi\DataProcessor\FieldOutputHandler\FieldOutput;
class SubtractFieldOutputHandler extends CalculationFieldOutputHandler {
use CRM_Dataprocessor_ExtensionUtil as E;
class SubtractFieldOutputHandler extends AbstractFieldOutputHandler {
/**
* @var \Civi\DataProcessor\DataSpecification\FieldSpecification
*/
protected $outputFieldSpec;
/**
* @var \Civi\DataProcessor\DataSpecification\FieldSpecification[]
*/
protected $inputFieldSpec1 = array();
/**
* @var \Civi\DataProcessor\DataSpecification\FieldSpecification[]
*/
protected $inputFieldSpec2 = array();
protected $prefix = '';
protected $suffix = '';
protected $number_of_decimals = '';
protected $decimal_sep = '';
protected $thousand_sep = '';
/**
* @return \Civi\DataProcessor\DataSpecification\FieldSpecification
*/
public function getOutputFieldSpecification() {
return $this->outputFieldSpec;
}
/**
* Returns the data type of this field
*
* @return String
*/
protected function getType() {
return 'Float';
}
/**
* Initialize the processor
*
* @param String $alias
* @param String $title
* @param array $configuration
* @param \Civi\DataProcessor\ProcessorType\AbstractProcessorType $processorType
*/
public function initialize($alias, $title, $configuration) {
$this->inputFieldSpec1 = $this->initializeField($configuration['field1'], $title);
$this->inputFieldSpec2 = $this->initializeField($configuration['field2'], $title);
$this->outputFieldSpec = new FieldSpecification($alias, 'Float', $title, null, $alias);
if (isset($configuration['number_of_decimals'])) {
$this->number_of_decimals = $configuration['number_of_decimals'];
}
if (isset($configuration['decimal_separator'])) {
$this->decimal_sep = $configuration['decimal_separator'];
}
if (isset($configuration['thousand_separator'])) {
$this->thousand_sep = $configuration['thousand_separator'];
}
if (isset($configuration['prefix'])) {
$this->prefix = $configuration['prefix'];
}
if (isset($configuration['suffix'])) {
$this->suffix = $configuration['suffix'];
}
}
protected function initializeField($field, $title) {
list($datasourceName, $field) = explode('::', $field, 2);
$dataSource = $this->dataProcessor->getDataSourceByName($datasourceName);
if (!$dataSource) {
throw new DataSourceNotFoundException(E::ts("Field %1 requires data source '%2' which could not be found. Did you rename or deleted the data source?", array(1=>$title, 2=>$datasourceName)));
}
$inputFieldSpec = $dataSource->getAvailableFields()
->getFieldSpecificationByName($field);
if (!$inputFieldSpec) {
throw new FieldNotFoundException(E::ts("Field %1 requires a field with the name '%2' in the data source '%3'. Did you change the data source type?", [
1 => $title,
2 => $field,
3 => $datasourceName
]));
}
$dataSource->ensureFieldInSource($inputFieldSpec);
return $inputFieldSpec;
}
/**
* Returns true when this handler has additional configuration.
*
* @return bool
*/
public function hasConfiguration() {
return true;
}
/**
* When this handler has additional configuration you can add
* the fields on the form with this function.
*
* @param \CRM_Core_Form $form
* @param array $field
*/
public function buildConfigurationForm(\CRM_Core_Form $form, $field=array()) {
$fieldSelect = $this->getFieldOptions($field['data_processor_id']);
$form->add('select', 'field1', E::ts('Field 1'), $fieldSelect, true, array(
'style' => 'min-width:250px',
'class' => 'crm-select2 huge data-processor-field-for-name',
'placeholder' => E::ts('- select -'),
'multiple' => false,
));
$form->add('select', 'field2', E::ts('Field 2'), $fieldSelect, true, array(
'style' => 'min-width:250px',
'class' => 'crm-select2 huge data-processor-field-for-name',
'placeholder' => E::ts('- select -'),
'multiple' => false,
));
$form->add('text', 'number_of_decimals', E::ts('Number of decimals'), false);
$form->add('text', 'decimal_separator', E::ts('Decimal separator'), false);
$form->add('text', 'thousand_separator', E::ts('Thousand separator'), false);
$form->add('text', 'prefix', E::ts('Prefix (e.g. €)'), false);
$form->add('text', 'suffix', E::ts('Suffix (e.g. $)'), false);
if (isset($field['configuration'])) {
$configuration = $field['configuration'];
$defaults = array();
if (isset($configuration['field1'])) {
$defaults['field1'] = $configuration['field1'];
}
if (isset($configuration['field2'])) {
$defaults['field2'] = $configuration['field2'];
}
if (isset($configuration['number_of_decimals'])) {
$defaults['number_of_decimals'] = $configuration['number_of_decimals'];
}
if (isset($configuration['decimal_separator'])) {
$defaults['decimal_separator'] = $configuration['decimal_separator'];
}
if (isset($configuration['thousand_separator'])) {
$defaults['thousand_separator'] = $configuration['thousand_separator'];
}
if (isset($configuration['prefix'])) {
$defaults['prefix'] = $configuration['prefix'];
}
if (isset($configuration['suffix'])) {
$defaults['suffix'] = $configuration['suffix'];
}
$form->setDefaults($defaults);
}
}
/**
* When this handler has configuration specify the template file name
* for the configuration form.
*
* @return false|string
*/
public function getConfigurationTemplateFileName() {
return "CRM/Dataprocessor/Form/Field/Configuration/CalculationSubtractFieldOutputHandler.tpl";
}
/**
* Process the submitted values and create a configuration array
*
* @param $submittedValues
* @return array
*/
public function processConfiguration($submittedValues) {
$configuration['field1'] = $submittedValues['field1'];
$configuration['field2'] = $submittedValues['field2'];
$configuration['number_of_decimals'] = $submittedValues['number_of_decimals'];
$configuration['decimal_separator'] = $submittedValues['decimal_separator'];
$configuration['thousand_separator'] = $submittedValues['thousand_separator'];
$configuration['prefix'] = $submittedValues['prefix'];
$configuration['suffix'] = $submittedValues['suffix'];
return $configuration;
}
/**
* Returns all possible fields
*
* @param $data_processor_id
*
* @return array
* @throws \Exception
*/
protected function getFieldOptions($data_processor_id) {
$fieldSelect = \CRM_Dataprocessor_Utils_DataSourceFields::getAvailableFieldsInDataSources($data_processor_id, array($this, 'isFieldValid'));
return $fieldSelect;
}
/**
* Callback function for determining whether this field could be handled by this output handler.
*
* @param \Civi\DataProcessor\DataSpecification\FieldSpecification $field
* @return bool
*/
public function isFieldValid(FieldSpecification $field) {
return true;
}
/**
* Returns the formatted value
*
* @param $rawRecord
* @param $formattedRecord
*
* @return \Civi\DataProcessor\FieldOutputHandler\FieldOutput
*/
public function formatField($rawRecord, $formattedRecord) {
$values = array();
$values[] = $rawRecord[$this->inputFieldSpec1->alias];
$values[] = $rawRecord[$this->inputFieldSpec2->alias];
$value = $this->doCalculation($values);
$formattedValue = $value;
if (is_numeric($this->number_of_decimals) && $value != null) {
$formattedValue = number_format($value, $this->number_of_decimals, $this->decimal_sep, $this->thousand_sep);
}
if ($formattedValue != null) {
$formattedValue = $this->prefix . $formattedValue . $this->suffix;
}
$output = new FieldOutput($value);
$output->formattedValue = $formattedValue;
return $output;
}
/**
* @param array $values
......@@ -19,6 +256,9 @@ class SubtractFieldOutputHandler extends CalculationFieldOutputHandler {
$value = 0;
$i =0;
foreach($values as $v) {
if ($v === null) {
return null;
}
if ($i == 0) {
$value = $v;
} else {
......@@ -29,4 +269,4 @@ class SubtractFieldOutputHandler extends CalculationFieldOutputHandler {
return $value;
}
}
\ No newline at end of file
}
{crmScope extensionKey='dataprocessor'}
<div class="crm-section">
<div class="label">{$form.field1.label}</div>
<div class="content">{$form.field1.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.field2.label}</div>
<div class="content">{$form.field2.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.number_of_decimals.label}</div>
<div class="content">{$form.number_of_decimals.html}
<p class="description">{ts}Leave empty for no formatting{/ts}</p>
</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.decimal_separator.label}</div>
<div class="content">{$form.decimal_separator.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.thousand_separator.label}</div>
<div class="content">{$form.thousand_separator.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.prefix.label}</div>
<div class="content">{$form.prefix.html}</div>
<div class="clear"></div>
</div>
<div class="crm-section">
<div class="label">{$form.suffix.label}</div>
<div class="content">{$form.suffix.html}</div>
<div class="clear"></div>
</div>
{/crmScope}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment