1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 15:13:29 +01:00
invoiceninja/app/Utils/Number.php

98 lines
2.8 KiB
PHP
Raw Normal View History

2019-08-28 04:36:53 +02:00
<?php
/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2020. Invoice Ninja LLC (https://invoiceninja.com)
2019-08-28 04:36:53 +02:00
*
* @license https://opensource.org/licenses/AAL
*/
namespace App\Utils;
2019-10-07 12:21:02 +02:00
use App\Models\Currency;
2019-08-28 04:36:53 +02:00
use Illuminate\Support\Facades\Log;
/**
* Class Number.
*/
class Number
{
/**
* @param float $value
* @param int $precision
*
* @return float
*/
public static function roundValue(float $value, int $precision = 2) : float
{
return round($value, $precision, PHP_ROUND_HALF_UP);
}
/**
* Formats a given value based on the clients currency
*
2019-08-28 04:36:53 +02:00
* @param float $value The number to be formatted
* @param object $currency The client currency object
*
2019-08-28 04:36:53 +02:00
* @return float The formatted value
*/
public static function formatValue($value, $currency) : float
{
$value = floatval($value);
$thousand = $currency->thousand_separator;
$decimal = $currency->decimal_separator;
$precision = $currency->precision;
return number_format($value, $precision, $decimal, $thousand);
}
/**
* Formats a given value based on the clients currency AND country
*
2019-08-28 04:36:53 +02:00
* @param floatval $value The number to be formatted
* @param object $currency The client currency object
* @param object $country The client country
*
2019-09-04 23:55:49 +02:00
* @return string The formatted value
2019-08-28 04:36:53 +02:00
*/
2019-09-11 05:46:23 +02:00
public static function formatMoney($value, $client) :string
2019-08-28 04:36:53 +02:00
{
$currency = $client->currency();
2019-10-07 12:21:02 +02:00
$thousand = $currency->thousand_separator;
$decimal = $currency->decimal_separator;
$precision = $currency->precision;
$code = $currency->code;
$swapSymbol = $currency->swap_currency_symbol;
2019-08-28 04:36:53 +02:00
/* Country settings override client settings */
if (isset($client->country->thousand_separator)) {
$thousand = $client->country->thousand_separator;
}
2019-08-28 04:36:53 +02:00
if (isset($client->country->decimal_separator)) {
$decimal = $client->country->decimal_separator;
}
if (isset($client->country->swap_currency_symbol)) {
$swapSymbol = $client->country->swap_currency_symbol;
}
2019-08-28 04:36:53 +02:00
$value = number_format($value, $precision, $decimal, $thousand);
$symbol = $currency->symbol;
2019-10-07 12:21:02 +02:00
if ($client->getSetting('show_currency_code') === true) {
2019-08-28 04:36:53 +02:00
return "{$value} {$code}";
} elseif ($swapSymbol) {
return "{$value} " . trim($symbol);
2019-10-07 12:21:02 +02:00
} elseif ($client->getSetting('show_currency_code') === false) {
2019-08-28 04:36:53 +02:00
return "{$symbol}{$value}";
} else {
return self::formatValue($value, $currency);
2019-08-28 04:36:53 +02:00
}
}
}