chore: reformat code.

This commit is contained in:
James Cole
2023-06-21 12:34:58 +02:00
parent 8d87abde64
commit 3dcb35710b
799 changed files with 23319 additions and 22173 deletions

View File

@@ -54,21 +54,11 @@ class AccountRepository implements AccountRepositoryInterface
{
private User $user;
/**
* @param array $types
*
* @return int
*/
public function count(array $types): int
{
return $this->user->accounts()->accountTypeIn($types)->count();
}
/**
* Moved here from account CRUD.
*
* @param Account $account
* @param Account|null $moveTo
* @param Account $account
* @param Account|null $moveTo
*
* @return bool
*
@@ -86,7 +76,7 @@ class AccountRepository implements AccountRepositoryInterface
/**
* Find account with same name OR same IBAN or both, but not the same type or ID.
*
* @param Collection $accounts
* @param Collection $accounts
*
* @return Collection
*/
@@ -117,16 +107,6 @@ class AccountRepository implements AccountRepositoryInterface
return $result;
}
/**
* @param int $accountId
*
* @return Account|null
*/
public function find(int $accountId): ?Account
{
return $this->user->accounts()->find($accountId);
}
/**
* @inheritDoc
*/
@@ -153,8 +133,8 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param string $iban
* @param array $types
* @param string $iban
* @param array $types
*
* @return Account|null
*/
@@ -172,8 +152,8 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param string $name
* @param array $types
* @param string $name
* @param array $types
*
* @return Account|null
*/
@@ -200,32 +180,10 @@ class AccountRepository implements AccountRepositoryInterface
return $account;
}
/**
* @param Account $account
*
* @return TransactionCurrency|null
*/
public function getAccountCurrency(Account $account): ?TransactionCurrency
{
$type = $account->accountType->type;
$list = config('firefly.valid_currency_account_types');
// return null if not in this list.
if (!in_array($type, $list, true)) {
return null;
}
$currencyId = (int)$this->getMetaValue($account, 'currency_id');
if ($currencyId > 0) {
return TransactionCurrency::find($currencyId);
}
return null;
}
/**
* Return account type or null if not found.
*
* @param string $type
* @param string $type
*
* @return AccountType|null
*/
@@ -235,7 +193,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param array $accountIds
* @param array $accountIds
*
* @return Collection
*/
@@ -254,39 +212,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param array $types
* @param array|null $sort
*
* @return Collection
*/
public function getAccountsByType(array $types, ?array $sort = []): Collection
{
$res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types);
$query = $this->user->accounts();
if (0 !== count($types)) {
$query->accountTypeIn($types);
}
// add sort parameters. At this point they're filtered to allowed fields to sort by:
if (0 !== count($sort)) {
foreach ($sort as $param) {
$query->orderBy($param[0], $param[1]);
}
}
if (0 === count($sort)) {
if (0 !== count($res)) {
$query->orderBy('accounts.order', 'ASC');
}
$query->orderBy('accounts.active', 'DESC');
$query->orderBy('accounts.name', 'ASC');
}
return $query->get(['accounts.*']);
}
/**
* @param array $types
* @param array $types
*
* @return Collection
*/
@@ -349,6 +275,16 @@ class AccountRepository implements AccountRepositoryInterface
return $factory->findOrCreate('Cash account', $type->type);
}
/**
* @param User|Authenticatable|null $user
*/
public function setUser(User | Authenticatable | null $user): void
{
if (null !== $user) {
$this->user = $user;
}
}
/**
* @inheritDoc
*/
@@ -362,7 +298,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param array $types
* @param array $types
*
* @return Collection
*/
@@ -395,35 +331,10 @@ class AccountRepository implements AccountRepositoryInterface
return $account->locations()->first();
}
/**
* Return meta value for account. Null if not found.
*
* @param Account $account
* @param string $field
*
* @return null|string
*/
public function getMetaValue(Account $account, string $field): ?string
{
$result = $account->accountMeta->filter(
function (AccountMeta $meta) use ($field) {
return strtolower($meta->name) === strtolower($field);
}
);
if (0 === $result->count()) {
return null;
}
if (1 === $result->count()) {
return (string)$result->first()->data;
}
return null;
}
/**
* Get note text or null.
*
* @param Account $account
* @param Account $account
*
* @return null|string
*/
@@ -432,23 +343,10 @@ class AccountRepository implements AccountRepositoryInterface
return $account->notes()->first()?->text;
}
/**
* @param Account $account
*
* @return TransactionJournal|null
*/
public function getOpeningBalance(Account $account): ?TransactionJournal
{
return TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->where('transactions.account_id', $account->id)
->transactionTypes([TransactionType::OPENING_BALANCE])
->first(['transaction_journals.*']);
}
/**
* Returns the amount of the opening balance for this account.
*
* @param Account $account
* @param Account $account
*
* @return string|null
*/
@@ -472,7 +370,7 @@ class AccountRepository implements AccountRepositoryInterface
/**
* Return date of opening balance as string or null.
*
* @param Account $account
* @param Account $account
*
* @return null|string
*/
@@ -485,7 +383,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param Account $account
* @param Account $account
*
* @return TransactionGroup|null
*/
@@ -497,7 +395,20 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param Account $account
* @param Account $account
*
* @return TransactionJournal|null
*/
public function getOpeningBalance(Account $account): ?TransactionJournal
{
return TransactionJournal::leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id')
->where('transactions.account_id', $account->id)
->transactionTypes([TransactionType::OPENING_BALANCE])
->first(['transaction_journals.*']);
}
/**
* @param Account $account
*
* @return Collection
*/
@@ -507,7 +418,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param Account $account
* @param Account $account
*
* @return Account|null
*
@@ -549,6 +460,73 @@ class AccountRepository implements AccountRepositoryInterface
return $factory->create($data);
}
/**
* @param Account $account
*
* @return TransactionCurrency|null
*/
public function getAccountCurrency(Account $account): ?TransactionCurrency
{
$type = $account->accountType->type;
$list = config('firefly.valid_currency_account_types');
// return null if not in this list.
if (!in_array($type, $list, true)) {
return null;
}
$currencyId = (int)$this->getMetaValue($account, 'currency_id');
if ($currencyId > 0) {
return TransactionCurrency::find($currencyId);
}
return null;
}
/**
* Return meta value for account. Null if not found.
*
* @param Account $account
* @param string $field
*
* @return null|string
*/
public function getMetaValue(Account $account, string $field): ?string
{
$result = $account->accountMeta->filter(
function (AccountMeta $meta) use ($field) {
return strtolower($meta->name) === strtolower($field);
}
);
if (0 === $result->count()) {
return null;
}
if (1 === $result->count()) {
return (string)$result->first()->data;
}
return null;
}
/**
* @param array $types
*
* @return int
*/
public function count(array $types): int
{
return $this->user->accounts()->accountTypeIn($types)->count();
}
/**
* @param int $accountId
*
* @return Account|null
*/
public function find(int $accountId): ?Account
{
return $this->user->accounts()->find($accountId);
}
/**
* @inheritDoc
*/
@@ -566,7 +544,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param Account $account
* @param Account $account
*
* @return bool
*/
@@ -602,10 +580,56 @@ class AccountRepository implements AccountRepositoryInterface
return $order;
}
/**
* @param array $types
* @param array|null $sort
*
* @return Collection
*/
public function getAccountsByType(array $types, ?array $sort = []): Collection
{
$res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types);
$query = $this->user->accounts();
if (0 !== count($types)) {
$query->accountTypeIn($types);
}
// add sort parameters. At this point they're filtered to allowed fields to sort by:
if (0 !== count($sort)) {
foreach ($sort as $param) {
$query->orderBy($param[0], $param[1]);
}
}
if (0 === count($sort)) {
if (0 !== count($res)) {
$query->orderBy('accounts.order', 'ASC');
}
$query->orderBy('accounts.active', 'DESC');
$query->orderBy('accounts.name', 'ASC');
}
return $query->get(['accounts.*']);
}
/**
* Returns the date of the very first transaction in this account.
*
* @param Account $account
* @param Account $account
*
* @return Carbon|null
*/
public function oldestJournalDate(Account $account): ?Carbon
{
$journal = $this->oldestJournal($account);
return $journal?->date;
}
/**
* Returns the date of the very first transaction in this account.
*
* @param Account $account
*
* @return TransactionJournal|null
*/
@@ -625,20 +649,6 @@ class AccountRepository implements AccountRepositoryInterface
return null;
}
/**
* Returns the date of the very first transaction in this account.
*
* @param Account $account
*
* @return Carbon|null
*/
public function oldestJournalDate(Account $account): ?Carbon
{
$journal = $this->oldestJournal($account);
return $journal?->date;
}
/**
* @inheritDoc
*/
@@ -670,9 +680,9 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param string $query
* @param array $types
* @param int $limit
* @param string $query
* @param array $types
* @param int $limit
*
* @return Collection
*/
@@ -739,17 +749,7 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param User|Authenticatable|null $user
*/
public function setUser(User|Authenticatable|null $user): void
{
if (null !== $user) {
$this->user = $user;
}
}
/**
* @param array $data
* @param array $data
*
* @return Account
* @throws FireflyException
@@ -765,8 +765,8 @@ class AccountRepository implements AccountRepositoryInterface
}
/**
* @param Account $account
* @param array $data
* @param Account $account
* @param array $data
*
* @return Account
* @throws FireflyException

View File

@@ -42,7 +42,7 @@ interface AccountRepositoryInterface
/**
* Moved here from account CRUD.
*
* @param array $types
* @param array $types
*
* @return int
*/
@@ -52,8 +52,8 @@ interface AccountRepositoryInterface
/**
* Moved here from account CRUD.
*
* @param Account $account
* @param Account|null $moveTo
* @param Account $account
* @param Account|null $moveTo
*
* @return bool
*/
@@ -62,45 +62,45 @@ interface AccountRepositoryInterface
/**
* Find account with same name OR same IBAN or both, but not the same type or ID.
*
* @param Collection $accounts
* @param Collection $accounts
*
* @return Collection
*/
public function expandWithDoubles(Collection $accounts): Collection;
/**
* @param int $accountId
* @param int $accountId
*
* @return Account|null
*/
public function find(int $accountId): ?Account;
/**
* @param string $number
* @param array $types
* @param string $number
* @param array $types
*
* @return Account|null
*/
public function findByAccountNumber(string $number, array $types): ?Account;
/**
* @param string $iban
* @param array $types
* @param string $iban
* @param array $types
*
* @return Account|null
*/
public function findByIbanNull(string $iban, array $types): ?Account;
/**
* @param string $name
* @param array $types
* @param string $name
* @param array $types
*
* @return Account|null
*/
public function findByName(string $name, array $types): ?Account;
/**
* @param Account $account
* @param Account $account
*
* @return TransactionCurrency|null
*/
@@ -109,36 +109,36 @@ interface AccountRepositoryInterface
/**
* Return account type or null if not found.
*
* @param string $type
* @param string $type
*
* @return AccountType|null
*/
public function getAccountTypeByType(string $type): ?AccountType;
/**
* @param array $accountIds
* @param array $accountIds
*
* @return Collection
*/
public function getAccountsById(array $accountIds): Collection;
/**
* @param array $types
* @param array|null $sort
* @param array $types
* @param array|null $sort
*
* @return Collection
*/
public function getAccountsByType(array $types, ?array $sort = []): Collection;
/**
* @param array $types
* @param array $types
*
* @return Collection
*/
public function getActiveAccountsByType(array $types): Collection;
/**
* @param Account $account
* @param Account $account
*
* @return Collection
*/
@@ -150,14 +150,14 @@ interface AccountRepositoryInterface
public function getCashAccount(): Account;
/**
* @param Account $account
* @param Account $account
*
* @return TransactionGroup|null
*/
public function getCreditTransactionGroup(Account $account): ?TransactionGroup;
/**
* @param array $types
* @param array $types
*
* @return Collection
*/
@@ -166,7 +166,7 @@ interface AccountRepositoryInterface
/**
* Get account location, if any.
*
* @param Account $account
* @param Account $account
*
* @return Location|null
*/
@@ -175,8 +175,8 @@ interface AccountRepositoryInterface
/**
* Return meta value for account. Null if not found.
*
* @param Account $account
* @param string $field
* @param Account $account
* @param string $field
*
* @return null|string
*/
@@ -185,14 +185,14 @@ interface AccountRepositoryInterface
/**
* Get note text or null.
*
* @param Account $account
* @param Account $account
*
* @return null|string
*/
public function getNoteText(Account $account): ?string;
/**
* @param Account $account
* @param Account $account
*
* @return TransactionJournal|null
*
@@ -202,7 +202,7 @@ interface AccountRepositoryInterface
/**
* Returns the amount of the opening balance for this account.
*
* @param Account $account
* @param Account $account
*
* @return string|null
*/
@@ -211,21 +211,21 @@ interface AccountRepositoryInterface
/**
* Return date of opening balance as string or null.
*
* @param Account $account
* @param Account $account
*
* @return null|string
*/
public function getOpeningBalanceDate(Account $account): ?string;
/**
* @param Account $account
* @param Account $account
*
* @return TransactionGroup|null
*/
public function getOpeningBalanceGroup(Account $account): ?TransactionGroup;
/**
* @param Account $account
* @param Account $account
*
* @return Collection
*/
@@ -234,28 +234,28 @@ interface AccountRepositoryInterface
/**
* Find or create the opposing reconciliation account.
*
* @param Account $account
* @param Account $account
*
* @return Account|null
*/
public function getReconciliation(Account $account): ?Account;
/**
* @param Account $account
* @param Account $account
*
* @return Collection
*/
public function getUsedCurrencies(Account $account): Collection;
/**
* @param Account $account
* @param Account $account
*
* @return bool
*/
public function isLiability(Account $account): bool;
/**
* @param string $type
* @param string $type
*
* @return int
*/
@@ -264,7 +264,7 @@ interface AccountRepositoryInterface
/**
* Returns the date of the very first transaction in this account.
*
* @param Account $account
* @param Account $account
*
* @return TransactionJournal|null
*/
@@ -273,7 +273,7 @@ interface AccountRepositoryInterface
/**
* Returns the date of the very first transaction in this account.
*
* @param Account $account
* @param Account $account
*
* @return Carbon|null
*/
@@ -285,38 +285,38 @@ interface AccountRepositoryInterface
public function resetAccountOrder(): void;
/**
* @param string $query
* @param array $types
* @param int $limit
* @param string $query
* @param array $types
* @param int $limit
*
* @return Collection
*/
public function searchAccount(string $query, array $types, int $limit): Collection;
/**
* @param string $query
* @param array $types
* @param int $limit
* @param string $query
* @param array $types
* @param int $limit
*
* @return Collection
*/
public function searchAccountNr(string $query, array $types, int $limit): Collection;
/**
* @param User|Authenticatable|null $user
* @param User|Authenticatable|null $user
*/
public function setUser(User|Authenticatable|null $user): void;
public function setUser(User | Authenticatable | null $user): void;
/**
* @param array $data
* @param array $data
*
* @return Account
*/
public function store(array $data): Account;
/**
* @param Account $account
* @param array $data
* @param Account $account
* @param array $data
*
* @return Account
*/

View File

@@ -43,9 +43,9 @@ class AccountTasker implements AccountTaskerInterface
private User $user;
/**
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
*
* @return array
* @throws FireflyException
@@ -116,9 +116,9 @@ class AccountTasker implements AccountTaskerInterface
}
/**
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
* @throws FireflyException
@@ -153,51 +153,7 @@ class AccountTasker implements AccountTaskerInterface
}
/**
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
* @throws FireflyException
* @throws JsonException
*/
public function getIncomeReport(Carbon $start, Carbon $end, Collection $accounts): array
{
// get all incomes for the given accounts in the given period!
// also transfers!
// get all transactions:
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setDestinationAccounts($accounts)->setRange($start, $end);
$collector->excludeSourceAccounts($accounts);
$collector->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])->withAccountInformation();
$report = $this->groupIncomeBySource($collector->getExtractedJournals());
// sort the result
// Obtain a list of columns
$sum = [];
foreach ($report['accounts'] as $accountId => $row) {
$sum[$accountId] = (float)$row['sum']; // intentional float
}
array_multisort($sum, SORT_DESC, $report['accounts']);
return $report;
}
/**
* @param User|Authenticatable|null $user
*/
public function setUser(User|Authenticatable|null $user): void
{
if (null !== $user) {
$this->user = $user;
}
}
/**
* @param array $array
* @param array $array
*
* @return array
* @throws FireflyException
@@ -260,7 +216,41 @@ class AccountTasker implements AccountTaskerInterface
}
/**
* @param array $array
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
* @throws FireflyException
* @throws JsonException
*/
public function getIncomeReport(Carbon $start, Carbon $end, Collection $accounts): array
{
// get all incomes for the given accounts in the given period!
// also transfers!
// get all transactions:
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setDestinationAccounts($accounts)->setRange($start, $end);
$collector->excludeSourceAccounts($accounts);
$collector->setTypes([TransactionType::DEPOSIT, TransactionType::TRANSFER])->withAccountInformation();
$report = $this->groupIncomeBySource($collector->getExtractedJournals());
// sort the result
// Obtain a list of columns
$sum = [];
foreach ($report['accounts'] as $accountId => $row) {
$sum[$accountId] = (float)$row['sum']; // intentional float
}
array_multisort($sum, SORT_DESC, $report['accounts']);
return $report;
}
/**
* @param array $array
*
* @return array
* @throws FireflyException
@@ -320,4 +310,14 @@ class AccountTasker implements AccountTaskerInterface
return $report;
}
/**
* @param User|Authenticatable|null $user
*/
public function setUser(User | Authenticatable | null $user): void
{
if (null !== $user) {
$this->user = $user;
}
}
}

View File

@@ -34,34 +34,34 @@ use Illuminate\Support\Collection;
interface AccountTaskerInterface
{
/**
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
*
* @return array
*/
public function getAccountReport(Collection $accounts, Carbon $start, Carbon $end): array;
/**
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
*/
public function getExpenseReport(Carbon $start, Carbon $end, Collection $accounts): array;
/**
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
*/
public function getIncomeReport(Carbon $start, Carbon $end, Collection $accounts): array;
/**
* @param User|Authenticatable|null $user
* @param User|Authenticatable|null $user
*/
public function setUser(User|Authenticatable|null $user): void;
public function setUser(User | Authenticatable | null $user): void;
}

View File

@@ -44,9 +44,9 @@ class OperationsRepository implements OperationsRepositoryInterface
* which have the specified accounts. It's grouped per currency, with as few details in the array
* as possible. Amounts are always negative.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
*/
@@ -57,141 +57,13 @@ class OperationsRepository implements OperationsRepositoryInterface
return $this->sortByCurrency($journals, 'negative');
}
/**
* This method returns a list of all the deposit transaction journals (as arrays) set in that period
* which have the specified accounts. It's grouped per currency, with as few details in the array
* as possible. Amounts are always positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
*
* @return array
*/
public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array
{
$journals = $this->getTransactions($start, $end, $accounts, TransactionType::DEPOSIT);
return $this->sortByCurrency($journals, 'positive');
}
/**
* @param User|Authenticatable|null $user
*/
public function setUser(User|Authenticatable|null $user): void
{
if (null !== $user) {
$this->user = $user;
}
}
/**
* @inheritDoc
*/
public function sumExpenses(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::WITHDRAWAL, $start, $end, $accounts, $expense, $currency);
return $this->groupByCurrency($journals, 'negative');
}
/**
* @inheritDoc
*/
public function sumExpensesByDestination(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::WITHDRAWAL, $start, $end, $accounts, $expense, $currency);
return $this->groupByDirection($journals, 'destination', 'negative');
}
/**
* @inheritDoc
*/
public function sumExpensesBySource(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::WITHDRAWAL, $start, $end, $accounts, $expense, $currency);
return $this->groupByDirection($journals, 'source', 'negative');
}
/**
* @inheritDoc
*/
public function sumIncome(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::DEPOSIT, $start, $end, $accounts, $revenue, $currency);
return $this->groupByCurrency($journals, 'positive');
}
/**
* @inheritDoc
*/
public function sumIncomeByDestination(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::DEPOSIT, $start, $end, $accounts, $revenue, $currency);
return $this->groupByDirection($journals, 'destination', 'positive');
}
/**
* @inheritDoc
*/
public function sumIncomeBySource(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::DEPOSIT, $start, $end, $accounts, $revenue, $currency);
return $this->groupByDirection($journals, 'source', 'positive');
}
/**
* @inheritDoc
*/
public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null, ?TransactionCurrency $currency = null): array
{
$journals = $this->getTransactionsForSum(TransactionType::TRANSFER, $start, $end, $accounts, null, $currency);
return $this->groupByEither($journals);
}
/**
* Collect transactions with some parameters
*
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param string $type
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param string $type
*
* @return array
*/
@@ -207,21 +79,107 @@ class OperationsRepository implements OperationsRepositoryInterface
}
/**
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $opposing
* @param TransactionCurrency|null $currency
* @param string $type
* @param User|Authenticatable|null $user
*/
public function setUser(User | Authenticatable | null $user): void
{
if (null !== $user) {
$this->user = $user;
}
}
/**
* @param array $journals
* @param string $direction
*
* @return array
*/
private function sortByCurrency(array $journals, string $direction): array
{
$array = [];
foreach ($journals as $journal) {
$currencyId = (int)$journal['currency_id'];
$journalId = (int)$journal['transaction_journal_id'];
$array[$currencyId] = $array[$currencyId] ?? [
'currency_id' => $journal['currency_id'],
'currency_name' => $journal['currency_name'],
'currency_symbol' => $journal['currency_symbol'],
'currency_code' => $journal['currency_code'],
'currency_decimal_places' => $journal['currency_decimal_places'],
'transaction_journals' => [],
];
$array[$currencyId]['transaction_journals'][$journalId] = [
'amount' => app('steam')->$direction((string)$journal['amount']),
'date' => $journal['date'],
'transaction_journal_id' => $journalId,
'budget_name' => $journal['budget_name'],
'category_name' => $journal['category_name'],
'source_account_id' => $journal['source_account_id'],
'source_account_name' => $journal['source_account_name'],
'source_account_iban' => $journal['source_account_iban'],
'destination_account_id' => $journal['destination_account_id'],
'destination_account_name' => $journal['destination_account_name'],
'destination_account_iban' => $journal['destination_account_iban'],
'tags' => $journal['tags'],
'description' => $journal['description'],
'transaction_group_id' => $journal['transaction_group_id'],
];
}
return $array;
}
/**
* This method returns a list of all the deposit transaction journals (as arrays) set in that period
* which have the specified accounts. It's grouped per currency, with as few details in the array
* as possible. Amounts are always positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
*
* @return array
*/
public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array
{
$journals = $this->getTransactions($start, $end, $accounts, TransactionType::DEPOSIT);
return $this->sortByCurrency($journals, 'positive');
}
/**
* @inheritDoc
*/
public function sumExpenses(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::WITHDRAWAL, $start, $end, $accounts, $expense, $currency);
return $this->groupByCurrency($journals, 'negative');
}
/**
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $opposing
* @param TransactionCurrency|null $currency
* @param string $type
*
* @return array
*/
private function getTransactionsForSum(
string $type,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $opposing = null,
string $type,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $opposing = null,
?TransactionCurrency $currency = null
): array {
$start->startOfDay();
@@ -291,8 +249,8 @@ class OperationsRepository implements OperationsRepositoryInterface
}
/**
* @param array $journals
* @param string $direction
* @param array $journals
* @param string $direction
*
* @return array
*/
@@ -331,9 +289,24 @@ class OperationsRepository implements OperationsRepositoryInterface
}
/**
* @param array $journals
* @param string $direction
* @param string $method
* @inheritDoc
*/
public function sumExpensesByDestination(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::WITHDRAWAL, $start, $end, $accounts, $expense, $currency);
return $this->groupByDirection($journals, 'destination', 'negative');
}
/**
* @param array $journals
* @param string $direction
* @param string $method
*
* @return array
*/
@@ -378,7 +351,77 @@ class OperationsRepository implements OperationsRepositoryInterface
}
/**
* @param array $journals
* @inheritDoc
*/
public function sumExpensesBySource(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::WITHDRAWAL, $start, $end, $accounts, $expense, $currency);
return $this->groupByDirection($journals, 'source', 'negative');
}
/**
* @inheritDoc
*/
public function sumIncome(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::DEPOSIT, $start, $end, $accounts, $revenue, $currency);
return $this->groupByCurrency($journals, 'positive');
}
/**
* @inheritDoc
*/
public function sumIncomeByDestination(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::DEPOSIT, $start, $end, $accounts, $revenue, $currency);
return $this->groupByDirection($journals, 'destination', 'positive');
}
/**
* @inheritDoc
*/
public function sumIncomeBySource(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array {
$journals = $this->getTransactionsForSum(TransactionType::DEPOSIT, $start, $end, $accounts, $revenue, $currency);
return $this->groupByDirection($journals, 'source', 'positive');
}
/**
* @inheritDoc
*/
public function sumTransfers(Carbon $start, Carbon $end, ?Collection $accounts = null, ?TransactionCurrency $currency = null): array
{
$journals = $this->getTransactionsForSum(TransactionType::TRANSFER, $start, $end, $accounts, null, $currency);
return $this->groupByEither($journals);
}
/**
* @param array $journals
*
* @return array
*/
@@ -401,8 +444,8 @@ class OperationsRepository implements OperationsRepositoryInterface
}
/**
* @param array $return
* @param array $journal
* @param array $return
* @param array $journal
*
* @return array
*/
@@ -497,47 +540,4 @@ class OperationsRepository implements OperationsRepositoryInterface
return $return;
}
/**
* @param array $journals
* @param string $direction
*
* @return array
*/
private function sortByCurrency(array $journals, string $direction): array
{
$array = [];
foreach ($journals as $journal) {
$currencyId = (int)$journal['currency_id'];
$journalId = (int)$journal['transaction_journal_id'];
$array[$currencyId] = $array[$currencyId] ?? [
'currency_id' => $journal['currency_id'],
'currency_name' => $journal['currency_name'],
'currency_symbol' => $journal['currency_symbol'],
'currency_code' => $journal['currency_code'],
'currency_decimal_places' => $journal['currency_decimal_places'],
'transaction_journals' => [],
];
$array[$currencyId]['transaction_journals'][$journalId] = [
'amount' => app('steam')->$direction((string)$journal['amount']),
'date' => $journal['date'],
'transaction_journal_id' => $journalId,
'budget_name' => $journal['budget_name'],
'category_name' => $journal['category_name'],
'source_account_id' => $journal['source_account_id'],
'source_account_name' => $journal['source_account_name'],
'source_account_iban' => $journal['source_account_iban'],
'destination_account_id' => $journal['destination_account_id'],
'destination_account_name' => $journal['destination_account_name'],
'destination_account_iban' => $journal['destination_account_iban'],
'tags' => $journal['tags'],
'description' => $journal['description'],
'transaction_group_id' => $journal['transaction_group_id'],
];
}
return $array;
}
}

View File

@@ -39,9 +39,9 @@ interface OperationsRepositoryInterface
* which have the specified accounts. It's grouped per currency, with as few details in the array
* as possible. Amounts are always negative.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection $accounts
*
* @return array
*/
@@ -52,140 +52,144 @@ interface OperationsRepositoryInterface
* which have the specified accounts. It's grouped per currency, with as few details in the array
* as possible. Amounts are always positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
*
* @return array
*/
public function listIncome(Carbon $start, Carbon $end, ?Collection $accounts = null): array;
/**
* @param User|Authenticatable|null $user
* @param User|Authenticatable|null $user
*/
public function setUser(User|Authenticatable|null $user): void;
public function setUser(User | Authenticatable | null $user): void;
/**
* Sum of withdrawal journals in period for a set of accounts, grouped per currency. Amounts are always negative.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $expense
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $expense
* @param TransactionCurrency|null $currency
*
* @return array
*/
public function sumExpenses(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array;
/**
* Sum of withdrawal journals in period for a set of accounts, grouped per destination / currency. Amounts are always negative.
* Sum of withdrawal journals in period for a set of accounts, grouped per destination / currency. Amounts are
* always negative.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $expense
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $expense
* @param TransactionCurrency|null $currency
*
* @return array
*/
public function sumExpensesByDestination(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array;
/**
* Sum of withdrawal journals in period for a set of accounts, grouped per source / currency. Amounts are always negative.
* Sum of withdrawal journals in period for a set of accounts, grouped per source / currency. Amounts are always
* negative.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $expense
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $expense
* @param TransactionCurrency|null $currency
*
* @return array
*/
public function sumExpensesBySource(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $expense = null,
?TransactionCurrency $currency = null
): array;
/**
* Sum of income journals in period for a set of accounts, grouped per currency. Amounts are always positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $revenue
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $revenue
* @param TransactionCurrency|null $currency
*
* @return array
*/
public function sumIncome(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array;
/**
* Sum of income journals in period for a set of accounts, grouped per destination + currency. Amounts are always positive.
* Sum of income journals in period for a set of accounts, grouped per destination + currency. Amounts are always
* positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $revenue
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $revenue
* @param TransactionCurrency|null $currency
*
* @return array
*/
public function sumIncomeByDestination(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array;
/**
* Sum of income journals in period for a set of accounts, grouped per source + currency. Amounts are always positive.
* Sum of income journals in period for a set of accounts, grouped per source + currency. Amounts are always
* positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $revenue
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param Collection|null $revenue
* @param TransactionCurrency|null $currency
*
* @return array
*/
public function sumIncomeBySource(
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
Carbon $start,
Carbon $end,
?Collection $accounts = null,
?Collection $revenue = null,
?TransactionCurrency $currency = null
): array;
/**
* Sum of transfers in period for a set of accounts, grouped per currency. Amounts are always positive.
*
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param TransactionCurrency|null $currency
* @param Carbon $start
* @param Carbon $end
* @param Collection|null $accounts
* @param TransactionCurrency|null $currency
*
* @return array
*/