Fixed the income report.

This commit is contained in:
James Cole
2016-05-15 17:46:53 +02:00
parent 5cd1e7c100
commit eedf6a07f0
8 changed files with 63 additions and 8 deletions

View File

@@ -300,6 +300,44 @@ class AccountRepository implements AccountRepositoryInterface
return $accounts;
}
/**
* This method will call AccountRepositoryInterface::journalsInPeriod and get all deposits made by the given $accounts,
* as well as the transfers that move away from those $accounts. This is a slightly sharper selection
* than made by journalsInPeriod itself.
*
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
*
* @see AccountRepositoryInterface::journalsInPeriod
*
* @return Collection
*/
public function incomesInPeriod(Collection $accounts, Carbon $start, Carbon $end): Collection
{
$types = [TransactionType::DEPOSIT, TransactionType::TRANSFER];
$journals = $this->journalsInPeriod($accounts, $types, $start, $end);
$accountIds = $accounts->pluck('id')->toArray();
// filter because some of these journals are
$journals = $journals->filter(
function (TransactionJournal $journal) use ($accountIds) {
if ($journal->transaction_type_type == TransactionType::DEPOSIT) {
return $journal;
}
/*
* The destination of a transfer must be one of the $accounts in order to
* be included. Otherwise, it would not be income.
*/
if (in_array($journal->destination_account_id, $accountIds)) {
return $journal;
}
}
);
return $journals;
}
/**
* @param Collection $accounts
* @param array $types
@@ -337,7 +375,10 @@ class AccountRepository implements AccountRepositoryInterface
}
// that should do it:
$complete = $query->get(TransactionJournal::queryFields());
$fields = TransactionJournal::queryFields();
$fields[] = 'source.account_id as source_account_id';
$fields[] = 'destination.account_id as destination_account_id';
$complete = $query->get($fields);
return $complete;
}

View File

@@ -8,7 +8,6 @@ use FireflyIII\Models\Account;
use FireflyIII\Models\AccountMeta;
use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
/**
@@ -108,6 +107,21 @@ interface AccountRepositoryInterface
*/
public function getSavingsAccounts(Carbon $start, Carbon $end): Collection;
/**
* This method will call AccountRepositoryInterface::journalsInPeriod and get all deposits made by the given $accounts,
* as well as the transfers that move away from those $accounts. This is a slightly sharper selection
* than made by journalsInPeriod itself.
*
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
*
* @see AccountRepositoryInterface::journalsInPeriod
*
* @return Collection
*/
public function incomesInPeriod(Collection $accounts, Carbon $start, Carbon $end): Collection;
/**
* @param Collection $accounts
* @param array $types