%PDF- %PDF-
Direktori : /var/www/pjc/vendor/cknow/laravel-money/src/ |
Current File : /var/www/pjc/vendor/cknow/laravel-money/src/Money.php |
<?php namespace Cknow\Money; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Contracts\Support\Jsonable; use Illuminate\Contracts\Support\Renderable; use Illuminate\Support\Traits\Macroable; use JsonSerializable; /** * @mixin \Money\Money */ class Money implements Arrayable, Jsonable, JsonSerializable, Renderable { use CurrenciesTrait; use LocaleTrait; use MoneyFactory { MoneyFactory::__callStatic as factoryCallStatic; } use MoneyFormatterTrait; use MoneyParserTrait; use Macroable { Macroable::__call as macroCall; } /** * @var \Money\Money */ protected $money; /** * @var array */ protected $attributes = []; /** * Money. * * @param int|string|null $amount * @param \Money\Currency|string|null $currency */ public function __construct($amount = null, $currency = null) { $amount = is_null($amount) ? (int) $amount : $amount; $currency = Money::parseCurrency($currency ?: Money::getDefaultCurrency()); $this->money = new \Money\Money($amount, $currency); } /** * __call. * * @param string $method * @param array $arguments * @return \Cknow\Money\Money|\Cknow\Money\Money[]|mixed */ public function __call($method, array $arguments) { if (static::hasMacro($method)) { return $this->macroCall($method, $arguments); } if (! method_exists($this->money, $method)) { return $this; } $result = call_user_func_array([$this->money, $method], static::getArguments($arguments)); $methods = [ 'add', 'subtract', 'multiply', 'divide', 'mod', 'absolute', 'negative', 'allocate', 'allocateTo', ]; if (! in_array($method, $methods)) { return $result; } return static::convertResult($result); } /** * __toString. * * @return string */ public function __toString() { return $this->render(); } /** * __callStatic. * * @param string $method * @param array $arguments * @return \Cknow\Money\Money */ public static function __callStatic($method, array $arguments) { if (in_array($method, ['min', 'max', 'avg', 'sum'])) { $result = call_user_func_array([\Money\Money::class, $method], static::getArguments($arguments)); return static::convert($result); } return static::factoryCallStatic($method, $arguments); } /** * Convert. * * @param \Money\Money $instance * @return \Cknow\Money\Money */ public static function convert(\Money\Money $instance) { return static::fromMoney($instance); } /** * Get money. * * @return \Money\Money */ public function getMoney() { return $this->money; } /** * Attributes. * * @param array $attributes */ public function attributes(array $attributes = []) { $this->attributes = $attributes; } /** * Json serialize. * * @return array */ #[\ReturnTypeWillChange] public function jsonSerialize() { return array_merge( $this->attributes, $this->money->jsonSerialize(), ['formatted' => $this->render()] ); } /** * Get the instance as an array. * * @return array */ public function toArray() { return $this->jsonSerialize(); } /** * Convert the object to its JSON representation. * * @param int $options * @return string */ public function toJson($options = 0) { return json_encode($this->toArray(), $options); } /** * Get the evaluated contents of the object. * * @return string */ public function render() { return $this->format(); } /** * Get arguments. * * @param array $arguments * @return array */ private static function getArguments(array $arguments = []) { $args = []; foreach ($arguments as $argument) { $args[] = $argument instanceof static ? $argument->getMoney() : $argument; } return $args; } /** * Convert result. * * @param mixed $result * @return \Cknow\Money\Money|\Cknow\Money\Money[] */ private static function convertResult($result) { if (! is_array($result)) { return static::convert($result); } $results = []; foreach ($result as $item) { $results[] = static::convert($item); } return $results; } }