| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | 
							- <?php
 - 
 - namespace App\ValueObjects;
 - 
 - use App\Utilities\Currency\CurrencyAccessor;
 - use App\Utilities\Currency\CurrencyConverter;
 - 
 - class Money
 - {
 -     private ?int $convertedAmount = null;
 - 
 -     public function __construct(
 -         private readonly int $amount,
 -         private ?string $currencyCode,
 -     ) {
 -         $this->currencyCode = $currencyCode ?: CurrencyAccessor::getDefaultCurrency();
 -     }
 - 
 -     public function getAmount(): int
 -     {
 -         return $this->amount;
 -     }
 - 
 -     public function getCurrencyCode(): string
 -     {
 -         return $this->currencyCode;
 -     }
 - 
 -     public function getEffectiveAmount(): int
 -     {
 -         return $this->convertedAmount ?? $this->amount;
 -     }
 - 
 -     public function getConvertedAmount(): ?int
 -     {
 -         return $this->convertedAmount;
 -     }
 - 
 -     public function getValue(): float
 -     {
 -         return money($this->amount, $this->currencyCode)->getValue();
 -     }
 - 
 -     public function format(): string
 -     {
 -         return money($this->getEffectiveAmount(), $this->getCurrencyCode())->format();
 -     }
 - 
 -     public function formatInDefaultCurrency(): string
 -     {
 -         return money($this->getEffectiveAmount(), CurrencyAccessor::getDefaultCurrency())->format();
 -     }
 - 
 -     public function formatSimple(): string
 -     {
 -         return money($this->getEffectiveAmount(), $this->getCurrencyCode())->formatSimple();
 -     }
 - 
 -     public function formatWithCode(bool $codeBefore = false): string
 -     {
 -         return money($this->getEffectiveAmount(), $this->getCurrencyCode())->formatWithCode($codeBefore);
 -     }
 - 
 -     public function convert(): self
 -     {
 -         // The journal entry sums are stored in the default currency not the account currency (transaction amounts are stored in the account currency)
 -         $fromCurrency = CurrencyAccessor::getDefaultCurrency();
 -         $toCurrency = $this->currencyCode;
 - 
 -         if ($fromCurrency !== $toCurrency) {
 -             $this->convertedAmount = CurrencyConverter::convertBalance($this->amount, $fromCurrency, $toCurrency);
 -         }
 - 
 -         return $this;
 -     }
 - 
 -     public function __toString(): string
 -     {
 -         return $this->formatSimple();
 -     }
 - }
 
 
  |