%PDF- %PDF-
| Direktori : /var/www/pjc/vendor/cknow/laravel-money/src/ |
| Current File : /var/www/pjc/vendor/cknow/laravel-money/src/MoneyFormatterTrait.php |
<?php
namespace Cknow\Money;
use Cknow\Money\Formatters\CurrencySymbolMoneyFormatter;
use InvalidArgumentException;
use Money\Currencies;
use Money\Currencies\BitcoinCurrencies;
use Money\Formatter\AggregateMoneyFormatter;
use Money\Formatter\BitcoinMoneyFormatter;
use Money\Formatter\DecimalMoneyFormatter;
use Money\Formatter\IntlLocalizedDecimalFormatter;
use Money\Formatter\IntlMoneyFormatter;
use Money\MoneyFormatter;
use NumberFormatter;
trait MoneyFormatterTrait
{
/**
* Format.
*
* @param string|null $locale
* @param \Money\Currencies|null $currencies
* @param int $style
* @return string
*
* @throws \InvalidArgumentException
*/
public function format($locale = null, Currencies $currencies = null, $style = NumberFormatter::CURRENCY)
{
$defaultFormatter = config('money.defaultFormatter');
if (is_null($defaultFormatter)) {
return $this->formatByIntl($locale, $currencies, $style);
}
$formatter = null;
if (is_string($defaultFormatter)) {
$formatter = app($defaultFormatter);
}
if (is_array($defaultFormatter) && count($defaultFormatter) === 2) {
$formatter = app($defaultFormatter[0], $defaultFormatter[1]);
}
if ($formatter instanceof MoneyFormatter) {
return $this->formatByFormatter($formatter);
}
throw new InvalidArgumentException(sprintf('Invalid default formatter %s', json_encode($defaultFormatter)));
}
/**
* Format by aggregate.
*
* @param MoneyFormatter[] $formatters
* @return string
*/
public function formatByAggregate(array $formatters)
{
$formatter = new AggregateMoneyFormatter($formatters);
return $this->formatByFormatter($formatter);
}
/**
* Format by bitcoin.
*
* @param int $fractionDigits
* @param \Money\Currencies|null $currencies
* @return string
*/
public function formatByBitcoin($fractionDigits = 2, Currencies $currencies = null)
{
$formatter = new BitcoinMoneyFormatter($fractionDigits, $currencies ?: new BitcoinCurrencies());
return $this->formatByFormatter($formatter);
}
/**
* Format by currency symbol.
*
* @param bool $right
* @param string|null $locale
* @param \Money\Currencies $currencies
* @return string
*/
public function formatByCurrencySymbol($right = false, $locale = null, Currencies $currencies = null)
{
$formatter = new CurrencySymbolMoneyFormatter($right, $locale ?: static::getLocale(), $currencies ?: static::getCurrencies());
return $this->formatByFormatter($formatter);
}
/**
* Format by decimal.
*
* @param \Money\Currencies|null $currencies
* @return string
*/
public function formatByDecimal(Currencies $currencies = null)
{
$formatter = new DecimalMoneyFormatter($currencies ?: static::getCurrencies());
return $this->formatByFormatter($formatter);
}
/**
* Format by intl.
*
* @param string|null $locale
* @param \Money\Currencies|null $currencies
* @param int $style
* @return string
*/
public function formatByIntl($locale = null, Currencies $currencies = null, $style = NumberFormatter::CURRENCY)
{
$numberFormatter = new NumberFormatter($locale ?: static::getLocale(), $style);
$formatter = new IntlMoneyFormatter($numberFormatter, $currencies ?: static::getCurrencies());
return $this->formatByFormatter($formatter);
}
/**
* Format by intl localized decimal.
*
* @param string|null $locale
* @param \Money\Currencies|null $currencies
* @param int $style
* @return string
*/
public function formatByIntlLocalizedDecimal(
$locale = null,
Currencies $currencies = null,
$style = NumberFormatter::CURRENCY
) {
$numberFormatter = new NumberFormatter($locale ?: static::getLocale(), $style);
$formatter = new IntlLocalizedDecimalFormatter($numberFormatter, $currencies ?: static::getCurrencies());
return $this->formatByFormatter($formatter);
}
/**
* Format by formatter.
*
* @param \Money\MoneyFormatter $formatter
* @return string
*/
public function formatByFormatter(MoneyFormatter $formatter)
{
return $formatter->format($this->money);
}
}