Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

JournalEntryRepository.php 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. namespace App\Repositories\Accounting;
  3. use App\Models\Accounting\Account;
  4. use Illuminate\Database\Eloquent\Builder;
  5. use Illuminate\Support\Carbon;
  6. class JournalEntryRepository
  7. {
  8. public function sumAmounts(Account $account, string $type, ?string $startDate = null, ?string $endDate = null): int
  9. {
  10. $query = $account->journalEntries()->where('type', $type);
  11. $startDateCarbon = Carbon::parse($startDate)->startOfDay();
  12. $endDateCarbon = Carbon::parse($endDate)->endOfDay();
  13. if ($startDate && $endDate) {
  14. $query->whereHas('transaction', static function (Builder $query) use ($startDateCarbon, $endDateCarbon) {
  15. $query->whereBetween('posted_at', [$startDateCarbon, $endDateCarbon]);
  16. });
  17. } elseif ($startDate) {
  18. $query->whereHas('transaction', static function (Builder $query) use ($startDateCarbon) {
  19. $query->where('posted_at', '<=', $startDateCarbon);
  20. });
  21. }
  22. return $query->sum('amount');
  23. }
  24. public function sumDebitAmounts(Account $account, string $startDate, ?string $endDate = null): int
  25. {
  26. return $this->sumAmounts($account, 'debit', $startDate, $endDate);
  27. }
  28. public function sumCreditAmounts(Account $account, string $startDate, ?string $endDate = null): int
  29. {
  30. return $this->sumAmounts($account, 'credit', $startDate, $endDate);
  31. }
  32. }