選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

JournalEntryCollection.php 1.0KB

12345678910111213141516171819202122232425262728293031323334353637
  1. <?php
  2. namespace App\Collections\Accounting;
  3. use App\Enums\Accounting\JournalEntryType;
  4. use App\Models\Accounting\JournalEntry;
  5. use App\Utilities\Currency\CurrencyAccessor;
  6. use App\ValueObjects\Money;
  7. use Illuminate\Database\Eloquent\Collection;
  8. class JournalEntryCollection extends Collection
  9. {
  10. public function sumDebits(): Money
  11. {
  12. $total = $this->where('type', JournalEntryType::Debit)
  13. ->sum(static function (JournalEntry $item) {
  14. return $item->rawValue('amount');
  15. });
  16. return new Money($total, CurrencyAccessor::getDefaultCurrency());
  17. }
  18. public function sumCredits(): Money
  19. {
  20. $total = $this->where('type', JournalEntryType::Credit)
  21. ->sum(static function (JournalEntry $item) {
  22. return $item->rawValue('amount');
  23. });
  24. return new Money($total, CurrencyAccessor::getDefaultCurrency());
  25. }
  26. public function areBalanced(): bool
  27. {
  28. return $this->sumDebits()->getAmount() === $this->sumCredits()->getAmount();
  29. }
  30. }