rounding_mode for money type

This commit is contained in:
Sergey Yastrebov 2018-04-03 14:23:01 +03:00
parent e6302e2c92
commit f3b142420f
3 changed files with 30 additions and 1 deletions

View File

@ -5,6 +5,7 @@ CHANGELOG
-----
* added `input=datetime_immutable` to DateType, TimeType, DateTimeType
* added `rounding_mode` option to MoneyType
4.0.0
-----

View File

@ -12,6 +12,7 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\DataTransformer\MoneyToLocalizedStringTransformer;
@ -31,7 +32,7 @@ class MoneyType extends AbstractType
->addViewTransformer(new MoneyToLocalizedStringTransformer(
$options['scale'],
$options['grouping'],
null,
$options['rounding_mode'],
$options['divisor']
))
;
@ -53,11 +54,22 @@ class MoneyType extends AbstractType
$resolver->setDefaults(array(
'scale' => 2,
'grouping' => false,
'rounding_mode' => NumberToLocalizedStringTransformer::ROUND_HALF_UP,
'divisor' => 1,
'currency' => 'EUR',
'compound' => false,
));
$resolver->setAllowedValues('rounding_mode', array(
NumberToLocalizedStringTransformer::ROUND_FLOOR,
NumberToLocalizedStringTransformer::ROUND_DOWN,
NumberToLocalizedStringTransformer::ROUND_HALF_DOWN,
NumberToLocalizedStringTransformer::ROUND_HALF_EVEN,
NumberToLocalizedStringTransformer::ROUND_HALF_UP,
NumberToLocalizedStringTransformer::ROUND_UP,
NumberToLocalizedStringTransformer::ROUND_CEILING,
));
$resolver->setAllowedTypes('scale', 'int');
}

View File

@ -70,4 +70,20 @@ class MoneyTypeTest extends BaseTypeTest
$this->assertSame('{{ widget }}', $view->vars['money_pattern']);
}
public function testDefaultFormattingWithDefaultRounding()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array('scale' => 0));
$form->setData('12345.54321');
$this->assertSame('12346', $form->createView()->vars['value']);
}
public function testDefaultFormattingWithSpecifiedRounding()
{
$form = $this->factory->create(static::TESTED_TYPE, null, array('scale' => 0, 'rounding_mode' => \NumberFormatter::ROUND_DOWN));
$form->setData('12345.54321');
$this->assertSame('12345', $form->createView()->vars['value']);
}
}