rounding_mode for money type
This commit is contained in:
parent
e6302e2c92
commit
f3b142420f
@ -5,6 +5,7 @@ CHANGELOG
|
||||
-----
|
||||
|
||||
* added `input=datetime_immutable` to DateType, TimeType, DateTimeType
|
||||
* added `rounding_mode` option to MoneyType
|
||||
|
||||
4.0.0
|
||||
-----
|
||||
|
@ -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');
|
||||
}
|
||||
|
||||
|
@ -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']);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user