mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Fixes for formatting of quantity column
This commit is contained in:
parent
76525ceacf
commit
b72222c3c7
@ -54,17 +54,33 @@ class Number
|
||||
* Formats a given value based on the clients currency.
|
||||
*
|
||||
* @param float $value The number to be formatted
|
||||
* @param object $currency The client currency object
|
||||
*
|
||||
* @return string The formatted value
|
||||
*/
|
||||
public static function formatValueNoTrailingZeroes($value, $currency) :string
|
||||
public static function formatValueNoTrailingZeroes($value, $entity) :string
|
||||
{
|
||||
$value = floatval($value);
|
||||
|
||||
$currency = $entity->currency();
|
||||
|
||||
$thousand = $currency->thousand_separator;
|
||||
$decimal = $currency->decimal_separator;
|
||||
$precision = $currency->precision;
|
||||
// $precision = $currency->precision;
|
||||
|
||||
if ($entity instanceof Company) {
|
||||
$country = $entity->country();
|
||||
} else {
|
||||
$country = $entity->country;
|
||||
}
|
||||
|
||||
/* Country settings override client settings */
|
||||
if (isset($country->thousand_separator) && strlen($country->thousand_separator) >= 1) {
|
||||
$thousand = $country->thousand_separator;
|
||||
}
|
||||
|
||||
if (isset($country->decimal_separator) && strlen($country->decimal_separator) >= 1) {
|
||||
$decimal = $country->decimal_separator;
|
||||
}
|
||||
|
||||
$precision = 10;
|
||||
|
||||
|
@ -306,7 +306,7 @@ trait MakesInvoiceValues
|
||||
$data[$key][$table_type.".{$_table_type}4"] = strlen($item->custom_value4) >= 1 ? $helpers->formatCustomFieldValue($this->company->custom_fields, "{$_table_type}4", $item->custom_value4, $entity) : '';
|
||||
|
||||
if ($item->quantity > 0 || $item->cost > 0) {
|
||||
$data[$key][$table_type.'.quantity'] = Number::formatValueNoTrailingZeroes($item->quantity, $entity_currency);
|
||||
$data[$key][$table_type.'.quantity'] = Number::formatValueNoTrailingZeroes($item->quantity, $entity);
|
||||
|
||||
$data[$key][$table_type.'.unit_cost'] = Number::formatMoneyNoRounding($item->cost, $entity);
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\Country;
|
||||
use App\Utils\Number;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
@ -401,4 +402,89 @@ class ClientApiTest extends TestCase
|
||||
|
||||
$response->assertStatus(302);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsTwo()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.05, $currency);
|
||||
|
||||
$this->assertEquals(0.05, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsThree()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.005, $currency);
|
||||
|
||||
$this->assertEquals(0.005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsFour()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.0005, $currency);
|
||||
|
||||
$this->assertEquals(0.0005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsFive()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.00005, $currency);
|
||||
|
||||
$this->assertEquals(0.00005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsSix()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.000005, $currency);
|
||||
|
||||
$this->assertEquals(0.000005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsSeven()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.0000005, $currency);
|
||||
|
||||
$this->assertEquals(0.0000005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsEight()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.00000005, $currency);
|
||||
|
||||
$this->assertEquals(0.00000005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingPositive()
|
||||
{
|
||||
$currency = $this->company;
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.5, $currency);
|
||||
$this->assertEquals(1.5, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.50, $currency);
|
||||
$this->assertEquals(1.5, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.500, $currency);
|
||||
$this->assertEquals(1.5, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.50005, $currency);
|
||||
$this->assertEquals(1.50005, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.50000005, $currency);
|
||||
$this->assertEquals(1.50000005, $x);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -89,18 +89,6 @@ class NumberTest extends TestCase
|
||||
$this->assertEquals(2.15, $rounded);
|
||||
}
|
||||
|
||||
//this method proved an error! removing this method from production
|
||||
// public function testImportFloatConversion()
|
||||
// {
|
||||
|
||||
// $amount = '€7,99';
|
||||
|
||||
// $converted_amount = Number::parseStringFloat($amount);
|
||||
|
||||
// $this->assertEquals(799, $converted_amount);
|
||||
|
||||
// }
|
||||
|
||||
public function testParsingStringCurrency()
|
||||
{
|
||||
$amount = '€7,99';
|
||||
@ -110,86 +98,4 @@ class NumberTest extends TestCase
|
||||
$this->assertEquals(7.99, $converted_amount);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsTwo()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.05, $currency);
|
||||
|
||||
$this->assertEquals(0.05, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsThree()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.005, $currency);
|
||||
|
||||
$this->assertEquals(0.005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsFour()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.0005, $currency);
|
||||
|
||||
$this->assertEquals(0.0005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsFive()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.00005, $currency);
|
||||
|
||||
$this->assertEquals(0.00005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsSix()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.000005, $currency);
|
||||
|
||||
$this->assertEquals(0.000005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsSeven()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.0000005, $currency);
|
||||
|
||||
$this->assertEquals(0.0000005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingDecimalsEight()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(0.00000005, $currency);
|
||||
|
||||
$this->assertEquals(0.00000005, $x);
|
||||
}
|
||||
|
||||
public function testRoundingPositive()
|
||||
{
|
||||
$currency = Currency::find(1);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.5, $currency);
|
||||
$this->assertEquals(1.5, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.50, $currency);
|
||||
$this->assertEquals(1.5, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.500, $currency);
|
||||
$this->assertEquals(1.5, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.50005, $currency);
|
||||
$this->assertEquals(1.50005, $x);
|
||||
|
||||
$x = Number::formatValueNoTrailingZeroes(1.50000005, $currency);
|
||||
$this->assertEquals(1.50000005, $x);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user