allow 4 decimals for rounded rates (#3596)

This commit is contained in:
Kevin Papst
2022-10-24 16:21:57 +02:00
committed by GitHub
parent e5614b92a0
commit 8b4828f236
5 changed files with 47 additions and 17 deletions

View File

@@ -24,7 +24,7 @@ class Util
public static function calculateRate(float $hourlyRate, int $seconds): float
{
$rate = (float) ($hourlyRate * ($seconds / 3600));
$rate = round($rate, 2);
$rate = round($rate, 4);
return $rate;
}

View File

@@ -347,7 +347,7 @@ class TimesheetControllerTest extends APIControllerBaseTest
'exported' => true,
'metaFields' => [],
'hourlyRate' => 137.21,
'rate' => 1772.3,
'rate' => 1772.2958,
'internalRate' => 0.0,
];

View File

@@ -249,7 +249,7 @@ class RateCalculatorTest extends TestCase
[
31837,
[],
663.27
663.2708
],
[
31837,
@@ -263,7 +263,7 @@ class RateCalculatorTest extends TestCase
'factor' => 1.5
],
],
1326.54
1326.5417
],
[
31837,
@@ -277,7 +277,7 @@ class RateCalculatorTest extends TestCase
'factor' => 1.5
],
],
2321.45
2321.4479
],
];
}

View File

@@ -248,7 +248,7 @@ class RateServiceTest extends TestCase
[
31837,
[],
663.27
663.2708
],
[
31837,
@@ -262,7 +262,7 @@ class RateServiceTest extends TestCase
'factor' => 1.5
],
],
1326.54
1326.5417
],
[
31837,
@@ -276,7 +276,7 @@ class RateServiceTest extends TestCase
'factor' => 1.5
],
],
2321.45
2321.4479
],
];
}

View File

@@ -28,16 +28,46 @@ class UtilTest extends TestCase
public function getRateCalculationData()
{
yield [0, 0, 0];
yield [1, 100, 0.03];
yield [1, 100, 0.0278];
yield [1, 900, 0.25];
yield [1, 1800, 0.5];
yield [10000, 1, 2.78];
yield [736, 123.45, 25.15];
yield [736, 123, 25.15];
yield [7360, 1234.99, 2522.84];
yield [7360, 1234, 2522.84];
yield [7360.34, 1234, 2522.96];
yield [7360.01, 1234, 2522.85];
yield [7360.99, 1234, 2523.18];
yield [10000, 1, 2.7778];
yield [736, 123, 25.1467];
yield [7360, 1234, 2522.8444];
yield [7360.34, 1234, 2522.961];
yield [7360.01, 1234, 2522.8479];
yield [7360.99, 1234, 2523.1838];
}
public function testCalculateRateWithRounding()
{
$total = 0.00;
$seconds = 0;
$repeat = 130;
for ($a = 0; $a < $repeat; $a++) {
$inputs = [
900,
1600,
4200,
8763,
3300,
600,
1300,
1837,
4217,
5400,
3283,
600,
];
foreach ($inputs as $i) {
$seconds += $i;
$total += Util::calculateRate(114.75, $i);
}
}
self::assertEquals(36000 * $repeat, $seconds);
self::assertEquals(1147.50 * $repeat, $total);
}
}