Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ef298ec

Browse files
ChangePlacesjaviereguiluz
authored andcommitted
Working on EasyCorp#3795 PercentField now has setRoundingMode
1 parent cb62416 commit ef298ec

3 files changed

Lines changed: 60 additions & 1 deletion

File tree

src/Field/Configurator/PercentConfigurator.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,21 @@
77
use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
88
use EasyCorp\Bundle\EasyAdminBundle\Dto\FieldDto;
99
use EasyCorp\Bundle\EasyAdminBundle\Field\PercentField;
10+
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
1011

1112
/**
1213
* @author Javier Eguiluz <[email protected]>
1314
*/
1415
final class PercentConfigurator implements FieldConfiguratorInterface
1516
{
17+
18+
private $intlFormatter;
19+
20+
public function __construct(IntlFormatter $intlFormatter)
21+
{
22+
$this->intlFormatter = $intlFormatter;
23+
}
24+
1625
public function supports(FieldDto $field, EntityDto $entityDto): bool
1726
{
1827
return PercentField::class === $field->getFieldFqcn();
@@ -35,4 +44,26 @@ public function configure(FieldDto $field, EntityDto $entityDto, AdminContext $c
3544
$value = $field->getValue();
3645
$field->setFormattedValue(sprintf('%s%s', $isStoredAsFractional ? 100 * $value : $value, $symbol));
3746
}
47+
48+
public function setRoundingMode(int $mode): self
49+
{
50+
$validModes = [
51+
'ROUND_DOWN' => NumberToLocalizedStringTransformer::ROUND_DOWN,
52+
'ROUND_FLOOR' => NumberToLocalizedStringTransformer::ROUND_FLOOR,
53+
'ROUND_UP' => NumberToLocalizedStringTransformer::ROUND_UP,
54+
'ROUND_CEILING' => NumberToLocalizedStringTransformer::ROUND_CEILING,
55+
'ROUND_HALF_DOWN' => NumberToLocalizedStringTransformer::ROUND_HALF_DOWN,
56+
'ROUND_HALF_EVEN' => NumberToLocalizedStringTransformer::ROUND_HALF_EVEN,
57+
'ROUND_HALF_UP' => NumberToLocalizedStringTransformer::ROUND_HALF_UP,
58+
];
59+
60+
if (!\in_array($mode, $validModes, true)) {
61+
throw new \InvalidArgumentException(sprintf('The argument of the "%s()" method must be the value of any of the following constants from the %s class: %s.', __METHOD__, NumberToLocalizedStringTransformer::class, implode(', ', array_keys($validModes))));
62+
}
63+
64+
$this->setCustomOption(self::OPTION_ROUNDING_MODE, $mode);
65+
66+
return $this;
67+
}
68+
3869
}

src/Field/PercentField.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use EasyCorp\Bundle\EasyAdminBundle\Contracts\Field\FieldInterface;
66
use Symfony\Component\Form\Extension\Core\Type\PercentType;
7+
use Symfony\Component\Form\Extension\Core\DataTransformer\NumberToLocalizedStringTransformer;
78

89
/**
910
* @author Javier Eguiluz <[email protected]>
@@ -15,6 +16,8 @@ final class PercentField implements FieldInterface
1516
public const OPTION_NUM_DECIMALS = 'numDecimals';
1617
public const OPTION_STORED_AS_FRACTIONAL = 'storedAsFractional';
1718
public const OPTION_SYMBOL = 'symbol';
19+
public const OPTION_ROUNDING_MODE = 'roundingMode';
20+
1821

1922
public static function new(string $propertyName, ?string $label = null): self
2023
{
@@ -27,7 +30,9 @@ public static function new(string $propertyName, ?string $label = null): self
2730
->setTextAlign('right')
2831
->setCustomOption(self::OPTION_NUM_DECIMALS, 0)
2932
->setCustomOption(self::OPTION_STORED_AS_FRACTIONAL, true)
30-
->setCustomOption(self::OPTION_SYMBOL, '%');
33+
->setCustomOption(self::OPTION_SYMBOL, '%')
34+
->setCustomOption(self::OPTION_ROUNDING_MODE, NumberToLocalizedStringTransformer::ROUND_HALF_UP)
35+
;
3136
}
3237

3338
public function setNumDecimals(int $num): self
@@ -61,4 +66,26 @@ public function setSymbol($symbolOrFalse): self
6166

6267
return $this;
6368
}
69+
70+
public function setRoundingMode(int $mode): self
71+
{
72+
$validModes = [
73+
'ROUND_DOWN' => NumberToLocalizedStringTransformer::ROUND_DOWN,
74+
'ROUND_FLOOR' => NumberToLocalizedStringTransformer::ROUND_FLOOR,
75+
'ROUND_UP' => NumberToLocalizedStringTransformer::ROUND_UP,
76+
'ROUND_CEILING' => NumberToLocalizedStringTransformer::ROUND_CEILING,
77+
'ROUND_HALF_DOWN' => NumberToLocalizedStringTransformer::ROUND_HALF_DOWN,
78+
'ROUND_HALF_EVEN' => NumberToLocalizedStringTransformer::ROUND_HALF_EVEN,
79+
'ROUND_HALF_UP' => NumberToLocalizedStringTransformer::ROUND_HALF_UP,
80+
];
81+
82+
if (!\in_array($mode, $validModes, true)) {
83+
throw new \InvalidArgumentException(sprintf('The argument of the "%s()" method must be the value of any of the following constants from the %s class: %s.', __METHOD__, NumberToLocalizedStringTransformer::class, implode(', ', array_keys($validModes))));
84+
}
85+
86+
$this->setCustomOption(self::OPTION_ROUNDING_MODE, $mode);
87+
88+
return $this;
89+
}
90+
6491
}

src/Resources/config/services.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@
318318
->arg(0, new Reference(IntlFormatter::class))
319319

320320
->set(PercentConfigurator::class)
321+
->arg(0, new Reference(IntlFormatter::class))
321322

322323
->set(ChoiceConfigurator::class)
323324
->arg(0, new Reference('translator'))

0 commit comments

Comments
 (0)