Compare commits

..

9 Commits

Author SHA1 Message Date
github-actions
ddfededf02 Auto commit for release 'branch-v6.2' on 2024-12-23 2024-12-23 08:40:29 +01:00
James Cole
e1785898ba Add notes to audit report. 2024-12-23 08:35:33 +01:00
James Cole
ae09200f42 Fix import 2024-12-23 08:26:35 +01:00
James Cole
847984f678 New rule triggers for account balance. 2024-12-23 08:22:54 +01:00
James Cole
42305672ac Merge branch 'v6.2' of github.com:firefly-iii/firefly-iii into v6.2 2024-12-23 07:14:12 +01:00
James Cole
25a56d9f72 Chart no longer as a line chart. 2024-12-23 07:13:59 +01:00
github-actions
8f9f08b96f Auto commit for release 'branch-v6.2' on 2024-12-23 2024-12-23 07:01:44 +01:00
James Cole
3c65b46aa5 Merge branch 'v6.2' of github.com:firefly-iii/firefly-iii into v6.2
# Conflicts:
#	app/Support/Steam.php
2024-12-23 06:56:31 +01:00
James Cole
1cf9c76329 Fix array bug. 2024-12-23 06:55:14 +01:00
18 changed files with 3182 additions and 2929 deletions

View File

@@ -30,8 +30,8 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account;
use FireflyIII\Models\AccountType;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Support\Facades\Steam;
use FireflyIII\Support\Http\Api\AccountFilter;
use FireflyIII\Support\Steam;
use FireflyIII\User;
use Illuminate\Http\JsonResponse;

View File

@@ -83,6 +83,9 @@ class MonthReportGenerator implements ReportGeneratorInterface
'create_date',
'update_date',
// more
'notes',
// date fields.
'interest_date',
'book_date',
@@ -126,7 +129,7 @@ class MonthReportGenerator implements ReportGeneratorInterface
/** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class);
$collector->setAccounts(new Collection([$account]))->setRange($this->start, $this->end)->withAccountInformation()
->withBudgetInformation()->withCategoryInformation()->withBillInformation()
->withBudgetInformation()->withCategoryInformation()->withBillInformation()->withNotes()
;
$journals = $collector->getExtractedJournals();
$journals = array_reverse($journals, true);

View File

@@ -25,8 +25,11 @@ declare(strict_types=1);
namespace FireflyIII\Helpers\Collector\Extensions;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Account;
use FireflyIII\Support\Facades\Steam;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Log;
/**
* Trait AccountCollection
@@ -228,4 +231,76 @@ trait AccountCollection
return $this;
}
#[\Override]
public function accountBalanceIs(string $direction, string $operator, string $value): GroupCollectorInterface
{
Log::warning(sprintf('GroupCollector will be SLOW: accountBalanceIs: "%s" "%s" "%s"', $direction, $operator, $value));
/**
* @param int $index
* @param array $object
*
* @return bool
*/
$filter = static function (array $object) use ($direction, $operator, $value): bool {
/** @var array $transaction */
foreach ($object['transactions'] as $transaction) {
$key = sprintf('%s_account_id', $direction);
$accountId = $transaction[$key] ?? 0;
if (0 === $accountId) {
return false;
}
// in theory, this could lead to finding other users accounts.
$balance = Steam::finalAccountBalance(Account::find($accountId), $transaction['date']);
$result = bccomp($balance['balance'], $value);
Log::debug(sprintf('"%s" vs "%s" is %d', $balance['balance'], $value, $result));
switch ($operator) {
default:
Log::error(sprintf('GroupCollector: accountBalanceIs: unknown operator "%s"', $operator));
return false;
case '==':
Log::debug('Expect result to be 0 (equal)');
return 0 === $result;
case '!=':
Log::debug('Expect result to be -1 or 1 (not equal)');
return 0 !== $result;
case '>':
Log::debug('Expect result to be 1 (greater then)');
return 1 === $result;
case '>=':
Log::debug('Expect result to be 0 or 1 (greater then or equal)');
return -1 !== $result;
case '<':
Log::debug('Expect result to be -1 (less than)');
return -1 === $result;
case '<=':
Log::debug('Expect result to be -1 or 0 (less than or equal)');
return 1 !== $result;
}
// if($balance['balance'] $operator $value) {
// }
}
return false;
};
$this->postFilters[] = $filter;
return $this;
}
}

View File

@@ -732,4 +732,6 @@ interface GroupCollectorInterface
public function yearIs(string $year): self;
public function yearIsNot(string $year): self;
public function accountBalanceIs(string $direction, string $operator, string $value): self;
}

View File

@@ -93,6 +93,8 @@ class IndexController extends Controller
$endBalances = app('steam')->finalAccountsBalance($accounts, $end);
$activities = app('steam')->getLastActivities($ids);
$accounts->each(
function (Account $account) use ($activities, $startBalances, $endBalances): void {
$account->lastActivityDate = $this->isInArrayDate($activities, $account->id);
@@ -152,7 +154,6 @@ class IndexController extends Controller
$startBalances = app('steam')->finalAccountsBalance($accounts, $start);
$endBalances = app('steam')->finalAccountsBalance($accounts, $end);
$activities = app('steam')->getLastActivities($ids);
$accounts->each(
function (Account $account) use ($activities, $startBalances, $endBalances): void {
$interest = (string) $this->repository->getMetaValue($account, 'interest');

View File

@@ -102,7 +102,7 @@ class AccountController extends Controller
$tempData = [];
// grab all accounts and names
$accounts = $this->accountRepository->getAccountsByType([AccountType::EXPENSE]);
$accounts = $this->accountRepository->getAccountsByType([AccountTypeEnum::EXPENSE->value]);
$accountNames = $this->extractNames($accounts);
// grab all balances
@@ -114,7 +114,9 @@ class AccountController extends Controller
$accountId = (int) $accountId;
// loop each expense entry (each entry can be a different currency).
foreach ($expenses as $currencyCode => $endAmount) {
if (3 !== strlen($currencyCode)) {
continue;
}
// see if there is an accompanying start amount.
// grab the difference and find the currency.
$startAmount = (string) ($startBalances[$accountId][$currencyCode] ?? '0');
@@ -131,6 +133,14 @@ class AccountController extends Controller
}
}
}
// recreate currencies, but on ID instead of code.
$newCurrencies = [];
foreach ($currencies as $currency) {
$newCurrencies[$currency->id] = $currency;
}
$currencies = $newCurrencies;
// sort temp array by amount.
$amounts = array_column($tempData, 'diff_float');
@@ -157,7 +167,7 @@ class AccountController extends Controller
foreach ($tempData as $entry) {
$currencyId = $entry['currency_id'];
$name = $entry['name'];
$chartData[$currencyId]['entries'][$name] = $entry['difference'];
$chartData[$currencyId]['entries'][$name] = (float) $entry['difference'];
}
$data = $this->generator->multiSet($chartData);
@@ -509,11 +519,16 @@ class AccountController extends Controller
$startBalances = app('steam')->finalAccountsBalance($accounts, $start);
$endBalances = app('steam')->finalAccountsBalance($accounts, $end);
// loop the end balances. This is an array for each account ($expenses)
foreach ($endBalances as $accountId => $expenses) {
$accountId = (int) $accountId;
// loop each expense entry (each entry can be a different currency).
foreach ($expenses as $currencyCode => $endAmount) {
if (3 !== strlen($currencyCode)) {
continue;
}
// see if there is an accompanying start amount.
// grab the difference and find the currency.
@@ -532,6 +547,13 @@ class AccountController extends Controller
}
}
// recreate currencies, but on ID instead of code.
$newCurrencies = [];
foreach ($currencies as $currency) {
$newCurrencies[$currency->id] = $currency;
}
$currencies = $newCurrencies;
// sort temp array by amount.
$amounts = array_column($tempData, 'diff_float');
array_multisort($amounts, SORT_ASC, $tempData);

View File

@@ -46,6 +46,6 @@ trait BasicDataSupport
*/
protected function isInArrayDate(array $array, int $entryId): ?Carbon
{
return $array[$entryId]['balance'] ?? null;
return $array[$entryId] ?? null;
}
}

View File

@@ -568,13 +568,13 @@ trait PeriodOverview
}
$entries[]
= [
'title' => $title,
'route' => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
'total_transactions' => count($spent) + count($earned) + count($transferred),
'spent' => $this->groupByCurrency($spent),
'earned' => $this->groupByCurrency($earned),
'transferred' => $this->groupByCurrency($transferred),
];
'title' => $title,
'route' => route('transactions.index', [$transactionType, $currentDate['start']->format('Y-m-d'), $currentDate['end']->format('Y-m-d')]),
'total_transactions' => count($spent) + count($earned) + count($transferred),
'spent' => $this->groupByCurrency($spent),
'earned' => $this->groupByCurrency($earned),
'transferred' => $this->groupByCurrency($transferred),
];
}
return $entries;

View File

@@ -213,16 +213,16 @@ class BudgetReportGenerator
// make sum information:
$this->report['sums'][$currencyId]
??= [
'budgeted' => '0',
'spent' => '0',
'left' => '0',
'overspent' => '0',
'currency_id' => $currencyId,
'currency_code' => $limitCurrency->code,
'currency_name' => $limitCurrency->name,
'currency_symbol' => $limitCurrency->symbol,
'currency_decimal_places' => $limitCurrency->decimal_places,
];
'budgeted' => '0',
'spent' => '0',
'left' => '0',
'overspent' => '0',
'currency_id' => $currencyId,
'currency_code' => $limitCurrency->code,
'currency_name' => $limitCurrency->name,
'currency_symbol' => $limitCurrency->symbol,
'currency_decimal_places' => $limitCurrency->decimal_places,
];
$this->report['sums'][$currencyId]['budgeted'] = bcadd($this->report['sums'][$currencyId]['budgeted'], $limit->amount);
$this->report['sums'][$currencyId]['spent'] = bcadd($this->report['sums'][$currencyId]['spent'], $spent);
$this->report['sums'][$currencyId]['left'] = bcadd($this->report['sums'][$currencyId]['left'], bcadd($limit->amount, $spent));

View File

@@ -1822,6 +1822,74 @@ class OperatorQuerySearch implements SearchInterface
case 'sepa_ct_is':
$this->collector->setSepaCT($value);
break;
case 'source_balance_gte':
case '-source_balance_lt':
$this->collector->accountBalanceIs('source', '>=', $value);
break;
case '-source_balance_gte':
case 'source_balance_lt':
$this->collector->accountBalanceIs('source', '<', $value);
break;
case 'source_balance_gt':
case '-source_balance_lte':
$this->collector->accountBalanceIs('source', '>', $value);
break;
case '-source_balance_gt':
case 'source_balance_lte':
$this->collector->accountBalanceIs('source', '<=', $value);
break;
case 'source_balance_is':
$this->collector->accountBalanceIs('source', '==', $value);
break;
case '-source_balance_is':
$this->collector->accountBalanceIs('source', '!=', $value);
break;
case 'destination_balance_gte':
case '-destination_balance_lt':
$this->collector->accountBalanceIs('destination', '>=', $value);
break;
case '-destination_balance_gte':
case 'destination_balance_lt':
$this->collector->accountBalanceIs('destination', '<', $value);
break;
case 'destination_balance_gt':
case '-destination_balance_lte':
$this->collector->accountBalanceIs('destination', '>', $value);
break;
case '-destination_balance_gt':
case 'destination_balance_lte':
$this->collector->accountBalanceIs('destination', '<=', $value);
break;
case 'destination_balance_is':
$this->collector->accountBalanceIs('destination', '==', $value);
break;
case '-destination_balance_is':
$this->collector->accountBalanceIs('destination', '!=', $value);
break;
}

View File

@@ -275,10 +275,10 @@ class Steam
->get(['transactions.amount'])->toArray()
;
$return['balance'] = $this->sumTransactions($array, 'amount');
Log::debug(sprintf('balance is %s', $return['balance']));
// Log::debug(sprintf('balance is %s', $return['balance']));
// add virtual balance:
$return['balance'] = bcadd('' === (string) $account->virtual_balance ? '0' : $account->virtual_balance, $return['balance']);
Log::debug(sprintf('balance is %s (with virtual balance)', $return['balance']));
// Log::debug(sprintf('balance is %s (with virtual balance)', $return['balance']));
// then, native balance (if necessary(
if ($native->id !== $currency->id) {
@@ -288,9 +288,9 @@ class Steam
->get(['transactions.native_amount'])->toArray()
;
$return['native_balance'] = $this->sumTransactions($array, 'native_amount');
Log::debug(sprintf('native_balance is %s', $return['native_balance']));
// Log::debug(sprintf('native_balance is %s', $return['native_balance']));
$return['native_balance'] = bcadd('' === (string) $account->native_virtual_balance ? '0' : $account->native_virtual_balance, $return['balance']);
Log::debug(sprintf('native_balance is %s (with virtual balance)', $return['native_balance']));
// Log::debug(sprintf('native_balance is %s (with virtual balance)', $return['native_balance']));
}
// balance(s) in other currencies.
@@ -301,7 +301,7 @@ class Steam
->get(['transaction_currencies.code', 'transactions.amount'])->toArray()
;
$others = $this->groupAndSumTransactions($array, 'code', 'amount');
Log::debug('All others are (joined)', $others);
// Log::debug('All others are (joined)', $others);
return array_merge($return, $others);
}
@@ -351,9 +351,9 @@ class Steam
/** @var Transaction $entry */
foreach ($set as $entry) {
$date = new Carbon($entry->max_date, config('app.timezone'));
$date = new Carbon($entry->max_date, config('app.timezone'));
$date->setTimezone(config('app.timezone'));
$list[$entry->account_id] = $date;
$list[(int)$entry->account_id] = $date;
}
return $list;

View File

@@ -24,221 +24,233 @@ declare(strict_types=1);
return [
'operators' => [
'user_action' => ['alias' => false, 'needs_context' => true],
'account_id' => ['alias' => false, 'needs_context' => true],
'reconciled' => ['alias' => false, 'needs_context' => false],
'source_account_id' => ['alias' => false, 'needs_context' => true],
'destination_account_id' => ['alias' => false, 'needs_context' => true],
'transaction_type' => ['alias' => false, 'needs_context' => true],
'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true],
'tag_is' => ['alias' => false, 'needs_context' => true],
'tag_is_not' => ['alias' => false, 'needs_context' => true],
'tag' => ['alias' => true, 'alias_for' => 'tag_is', 'needs_context' => true],
'tag_contains' => ['alias' => false, 'needs_context' => true],
'tag_ends' => ['alias' => false, 'needs_context' => true],
'tag_starts' => ['alias' => false, 'needs_context' => true],
'description_is' => ['alias' => false, 'needs_context' => true],
'description' => ['alias' => true, 'alias_for' => 'description_is', 'needs_context' => true],
'description_contains' => ['alias' => false, 'needs_context' => true],
'description_ends' => ['alias' => false, 'needs_context' => true],
'description_starts' => ['alias' => false, 'needs_context' => true],
'notes_is' => ['alias' => false, 'needs_context' => true],
'notes_are' => ['alias' => true, 'alias_for' => 'notes_is', 'needs_context' => true],
'notes_contains' => ['alias' => false, 'needs_context' => true],
'notes_contain' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true],
'notes' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true],
'notes_ends' => ['alias' => false, 'needs_context' => true],
'notes_end' => ['alias' => true, 'alias_for' => 'notes_ends', 'needs_context' => true],
'notes_starts' => ['alias' => false, 'needs_context' => true],
'notes_start' => ['alias' => true, 'alias_for' => 'notes_starts', 'needs_context' => true],
'source_account_is' => ['alias' => false, 'needs_context' => true],
'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true],
'source_account_contains' => ['alias' => false, 'needs_context' => true],
'source' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true],
'from' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true],
'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true],
'source_account_ends' => ['alias' => false, 'needs_context' => true],
'from_account_ends' => ['alias' => true, 'alias_for' => 'source_account_ends', 'needs_context' => true],
'source_account_starts' => ['alias' => false, 'needs_context' => true],
'from_account_starts' => ['alias' => true, 'alias_for' => 'source_account_starts', 'needs_context' => true],
'source_account_nr_is' => ['alias' => false, 'needs_context' => true],
'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true],
'source_account_nr_contains' => ['alias' => false, 'needs_context' => true],
'from_account_nr_contains' => ['alias' => true, 'alias_for' => 'source_account_nr_contains', 'needs_context' => true],
'source_account_nr_ends' => ['alias' => false, 'needs_context' => true],
'from_account_nr_ends' => ['alias' => true, 'alias_for' => 'source_account_nr_ends', 'needs_context' => true],
'source_account_nr_starts' => ['alias' => false, 'needs_context' => true],
'from_account_nr_starts' => ['alias' => true, 'alias_for' => 'source_account_nr_starts', 'needs_context' => true],
'destination_account_is' => ['alias' => false, 'needs_context' => true],
'to_account_is' => ['alias' => true, 'alias_for' => 'destination_account_is', 'needs_context' => true],
'destination_account_contains' => ['alias' => false, 'needs_context' => true],
'destination' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true],
'to' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true],
'to_account_contains' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true],
'destination_account_ends' => ['alias' => false, 'needs_context' => true],
'to_account_ends' => ['alias' => true, 'alias_for' => 'destination_account_ends', 'needs_context' => true],
'destination_account_starts' => ['alias' => false, 'needs_context' => true],
'to_account_starts' => ['alias' => true, 'alias_for' => 'destination_account_starts', 'needs_context' => true],
'destination_account_nr_is' => ['alias' => false, 'needs_context' => true],
'to_account_nr_is' => ['alias' => true, 'alias_for' => 'destination_account_nr_is', 'needs_context' => true],
'destination_account_nr_contains' => ['alias' => false, 'needs_context' => true],
'to_account_nr_contains' => ['alias' => true, 'alias_for' => 'destination_account_nr_contains', 'needs_context' => true],
'destination_account_nr_ends' => ['alias' => false, 'needs_context' => true],
'to_account_nr_ends' => ['alias' => true, 'alias_for' => 'destination_account_nr_ends', 'needs_context' => true],
'destination_account_nr_starts' => ['alias' => false, 'needs_context' => true],
'to_account_nr_starts' => ['alias' => true, 'alias_for' => 'destination_account_nr_starts', 'needs_context' => true],
'account_is' => ['alias' => false, 'needs_context' => true],
'account_contains' => ['alias' => false, 'needs_context' => true],
'account_ends' => ['alias' => false, 'needs_context' => true],
'account_starts' => ['alias' => false, 'needs_context' => true],
'account_nr_is' => ['alias' => false, 'needs_context' => true],
'account_nr_contains' => ['alias' => false, 'needs_context' => true],
'account_nr_ends' => ['alias' => false, 'needs_context' => true],
'account_nr_starts' => ['alias' => false, 'needs_context' => true],
'category_is' => ['alias' => false, 'needs_context' => true],
'category_contains' => ['alias' => false, 'needs_context' => true],
'category' => ['alias' => true, 'alias_for' => 'category_contains', 'needs_context' => true],
'category_ends' => ['alias' => false, 'needs_context' => true],
'category_starts' => ['alias' => false, 'needs_context' => true],
'budget_is' => ['alias' => false, 'needs_context' => true],
'budget_contains' => ['alias' => false, 'needs_context' => true],
'budget' => ['alias' => true, 'alias_for' => 'budget_contains', 'needs_context' => true],
'budget_ends' => ['alias' => false, 'needs_context' => true],
'budget_starts' => ['alias' => false, 'needs_context' => true],
'bill_is' => ['alias' => false, 'needs_context' => true],
'bill_contains' => ['alias' => false, 'needs_context' => true],
'bill' => ['alias' => true, 'alias_for' => 'bill_contains', 'needs_context' => true],
'bill_ends' => ['alias' => false, 'needs_context' => true],
'bill_starts' => ['alias' => false, 'needs_context' => true],
'external_id_is' => ['alias' => false, 'needs_context' => true],
'external_id_contains' => ['alias' => false, 'needs_context' => true],
'external_id' => ['alias' => true, 'alias_for' => 'external_id_contains', 'needs_context' => true],
'external_id_ends' => ['alias' => false, 'needs_context' => true],
'external_id_starts' => ['alias' => false, 'needs_context' => true],
'internal_reference_is' => ['alias' => false, 'needs_context' => true],
'internal_reference_contains' => ['alias' => false, 'needs_context' => true],
'internal_reference' => ['alias' => true, 'alias_for' => 'internal_reference_contains', 'needs_context' => true],
'internal_reference_ends' => ['alias' => false, 'needs_context' => true],
'internal_reference_starts' => ['alias' => false, 'needs_context' => true],
'external_url_is' => ['alias' => false, 'needs_context' => true],
'external_url_contains' => ['alias' => false, 'needs_context' => true],
'external_url' => ['alias' => true, 'alias_for' => 'external_url_contains', 'needs_context' => true],
'external_url_ends' => ['alias' => false, 'needs_context' => true],
'external_url_starts' => ['alias' => false, 'needs_context' => true],
'has_attachments' => ['alias' => false, 'needs_context' => false],
'has_any_category' => ['alias' => false, 'needs_context' => false],
'has_any_budget' => ['alias' => false, 'needs_context' => false],
'has_any_bill' => ['alias' => false, 'needs_context' => false],
'has_any_tag' => ['alias' => false, 'needs_context' => false],
'any_notes' => ['alias' => false, 'needs_context' => false],
'has_any_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false],
'has_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false],
'any_external_url' => ['alias' => false, 'needs_context' => false],
'has_any_external_url' => ['alias' => true, 'alias_for' => 'any_external_url', 'needs_context' => false],
'has_no_attachments' => ['alias' => false, 'needs_context' => false],
'has_no_category' => ['alias' => false, 'needs_context' => false],
'has_no_budget' => ['alias' => false, 'needs_context' => false],
'has_no_bill' => ['alias' => false, 'needs_context' => false],
'has_no_tag' => ['alias' => false, 'needs_context' => false],
'no_notes' => ['alias' => false, 'needs_context' => false],
'no_external_url' => ['alias' => false, 'needs_context' => false],
'source_is_cash' => ['alias' => false, 'needs_context' => false],
'destination_is_cash' => ['alias' => false, 'needs_context' => false],
'account_is_cash' => ['alias' => false, 'needs_context' => false],
'currency_is' => ['alias' => false, 'needs_context' => true],
'foreign_currency_is' => ['alias' => false, 'needs_context' => true],
'id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true],
'journal_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true],
'recurrence_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true],
'date_on' => ['alias' => false, 'needs_context' => true],
'date' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true],
'date_is' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true],
'on' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true],
'date_before' => ['alias' => false, 'needs_context' => true],
'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true],
'date_after' => ['alias' => false, 'needs_context' => true],
'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true],
'interest_date_on' => ['alias' => false, 'needs_context' => true],
'interest_date' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true],
'interest_date_is' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true],
'interest_date_before' => ['alias' => false, 'needs_context' => true],
'interest_date_after' => ['alias' => false, 'needs_context' => true],
'book_date_on' => ['alias' => false, 'needs_context' => true],
'book_date' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true],
'book_date_is' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true],
'book_date_before' => ['alias' => false, 'needs_context' => true],
'book_date_after' => ['alias' => false, 'needs_context' => true],
'process_date_on' => ['alias' => false, 'needs_context' => true],
'process_date' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true],
'process_date_is' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true],
'process_date_before' => ['alias' => false, 'needs_context' => true],
'process_date_after' => ['alias' => false, 'needs_context' => true],
'due_date_on' => ['alias' => false, 'needs_context' => true],
'due_date' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true],
'due_date_is' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true],
'due_date_before' => ['alias' => false, 'needs_context' => true],
'due_date_after' => ['alias' => false, 'needs_context' => true],
'payment_date_on' => ['alias' => false, 'needs_context' => true],
'payment_date' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true],
'payment_date_is' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true],
'payment_date_before' => ['alias' => false, 'needs_context' => true],
'payment_date_after' => ['alias' => false, 'needs_context' => true],
'invoice_date_on' => ['alias' => false, 'needs_context' => true],
'invoice_date' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true],
'invoice_date_is' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true],
'invoice_date_before' => ['alias' => false, 'needs_context' => true],
'invoice_date_after' => ['alias' => false, 'needs_context' => true],
'created_at_on' => ['alias' => false, 'needs_context' => true],
'created_at' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true],
'created_at_is' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true],
'created_at_before' => ['alias' => false, 'needs_context' => true],
'created_at_after' => ['alias' => false, 'needs_context' => true],
'updated_at_on' => ['alias' => false, 'needs_context' => true],
'updated_at' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true],
'updated_at_is' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true],
'updated_at_before' => ['alias' => false, 'needs_context' => true],
'updated_at_after' => ['alias' => false, 'needs_context' => true],
'created_on_on' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true],
'created_on' => ['alias' => true, 'alias_for' => 'created_at', 'needs_context' => true],
'created_on_before' => ['alias' => true, 'alias_for' => 'created_at_before', 'needs_context' => true],
'created_on_after' => ['alias' => true, 'alias_for' => 'created_at_after', 'needs_context' => true],
'updated_on_on' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true],
'updated_on' => ['alias' => true, 'alias_for' => 'updated_at', 'needs_context' => true],
'updated_on_before' => ['alias' => true, 'alias_for' => 'updated_at_before', 'needs_context' => true],
'updated_on_after' => ['alias' => true, 'alias_for' => 'updated_at_after', 'needs_context' => true],
'amount_is' => ['alias' => false, 'needs_context' => true],
'amount' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true],
'amount_exactly' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true],
'amount_less' => ['alias' => false, 'needs_context' => true],
'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true],
'less' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true],
'amount_more' => ['alias' => false, 'needs_context' => true],
'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true],
'more' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true],
'foreign_amount_is' => ['alias' => false, 'needs_context' => true],
'foreign_amount' => ['alias' => true, 'alias_for' => 'foreign_amount_is', 'needs_context' => true],
'foreign_amount_less' => ['alias' => false, 'needs_context' => true],
'foreign_amount_max' => ['alias' => true, 'alias_for' => 'foreign_amount_less', 'needs_context' => true],
'foreign_amount_more' => ['alias' => false, 'needs_context' => true],
'foreign_amount_min' => ['alias' => true, 'alias_for' => 'foreign_amount_more', 'needs_context' => true],
'attachment_name_is' => ['alias' => false, 'needs_context' => true],
'attachment' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true],
'attachment_is' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true],
'attachment_name' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true],
'attachment_name_contains' => ['alias' => false, 'needs_context' => true],
'attachment_name_starts' => ['alias' => false, 'needs_context' => true],
'attachment_name_ends' => ['alias' => false, 'needs_context' => true],
'attachment_notes' => ['alias' => true, 'alias_for' => 'attachment_notes_are', 'needs_context' => true],
'attachment_notes_are' => ['alias' => false, 'needs_context' => true],
'attachment_notes_contains' => ['alias' => false, 'needs_context' => true],
'attachment_notes_contain' => ['alias' => true, 'alias_for' => 'attachment_notes_contains', 'needs_context' => true],
'attachment_notes_starts' => ['alias' => false, 'needs_context' => true],
'attachment_notes_start' => ['alias' => true, 'alias_for' => 'attachment_notes_starts', 'needs_context' => true],
'attachment_notes_ends' => ['alias' => false, 'needs_context' => true],
'attachment_notes_end' => ['alias' => true, 'alias_for' => 'attachment_notes_ends', 'needs_context' => true],
'exists' => ['alias' => false, 'needs_context' => false],
'sepa_ct_is' => ['alias' => false, 'needs_context' => true],
'no_external_id' => ['alias' => false, 'needs_context' => false],
'any_external_id' => ['alias' => false, 'needs_context' => false],
'user_action' => ['alias' => false, 'needs_context' => true],
'account_id' => ['alias' => false, 'needs_context' => true],
'reconciled' => ['alias' => false, 'needs_context' => false],
'source_account_id' => ['alias' => false, 'needs_context' => true],
'destination_account_id' => ['alias' => false, 'needs_context' => true],
'transaction_type' => ['alias' => false, 'needs_context' => true],
'type' => ['alias' => true, 'alias_for' => 'transaction_type', 'needs_context' => true],
'tag_is' => ['alias' => false, 'needs_context' => true],
'tag_is_not' => ['alias' => false, 'needs_context' => true],
'tag' => ['alias' => true, 'alias_for' => 'tag_is', 'needs_context' => true],
'tag_contains' => ['alias' => false, 'needs_context' => true],
'tag_ends' => ['alias' => false, 'needs_context' => true],
'tag_starts' => ['alias' => false, 'needs_context' => true],
'description_is' => ['alias' => false, 'needs_context' => true],
'description' => ['alias' => true, 'alias_for' => 'description_is', 'needs_context' => true],
'description_contains' => ['alias' => false, 'needs_context' => true],
'description_ends' => ['alias' => false, 'needs_context' => true],
'description_starts' => ['alias' => false, 'needs_context' => true],
'notes_is' => ['alias' => false, 'needs_context' => true],
'notes_are' => ['alias' => true, 'alias_for' => 'notes_is', 'needs_context' => true],
'notes_contains' => ['alias' => false, 'needs_context' => true],
'notes_contain' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true],
'notes' => ['alias' => true, 'alias_for' => 'notes_contains', 'needs_context' => true],
'notes_ends' => ['alias' => false, 'needs_context' => true],
'notes_end' => ['alias' => true, 'alias_for' => 'notes_ends', 'needs_context' => true],
'notes_starts' => ['alias' => false, 'needs_context' => true],
'notes_start' => ['alias' => true, 'alias_for' => 'notes_starts', 'needs_context' => true],
'source_account_is' => ['alias' => false, 'needs_context' => true],
'from_account_is' => ['alias' => true, 'alias_for' => 'source_account_is', 'needs_context' => true],
'source_account_contains' => ['alias' => false, 'needs_context' => true],
'source' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true],
'from' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true],
'from_account_contains' => ['alias' => true, 'alias_for' => 'source_account_contains', 'needs_context' => true],
'source_account_ends' => ['alias' => false, 'needs_context' => true],
'from_account_ends' => ['alias' => true, 'alias_for' => 'source_account_ends', 'needs_context' => true],
'source_account_starts' => ['alias' => false, 'needs_context' => true],
'from_account_starts' => ['alias' => true, 'alias_for' => 'source_account_starts', 'needs_context' => true],
'source_account_nr_is' => ['alias' => false, 'needs_context' => true],
'from_account_nr_is' => ['alias' => true, 'alias_for' => 'source_account_nr_is', 'needs_context' => true],
'source_account_nr_contains' => ['alias' => false, 'needs_context' => true],
'from_account_nr_contains' => ['alias' => true, 'alias_for' => 'source_account_nr_contains', 'needs_context' => true],
'source_account_nr_ends' => ['alias' => false, 'needs_context' => true],
'from_account_nr_ends' => ['alias' => true, 'alias_for' => 'source_account_nr_ends', 'needs_context' => true],
'source_account_nr_starts' => ['alias' => false, 'needs_context' => true],
'from_account_nr_starts' => ['alias' => true, 'alias_for' => 'source_account_nr_starts', 'needs_context' => true],
'destination_account_is' => ['alias' => false, 'needs_context' => true],
'to_account_is' => ['alias' => true, 'alias_for' => 'destination_account_is', 'needs_context' => true],
'destination_account_contains' => ['alias' => false, 'needs_context' => true],
'destination' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true],
'to' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true],
'to_account_contains' => ['alias' => true, 'alias_for' => 'destination_account_contains', 'needs_context' => true],
'destination_account_ends' => ['alias' => false, 'needs_context' => true],
'to_account_ends' => ['alias' => true, 'alias_for' => 'destination_account_ends', 'needs_context' => true],
'destination_account_starts' => ['alias' => false, 'needs_context' => true],
'to_account_starts' => ['alias' => true, 'alias_for' => 'destination_account_starts', 'needs_context' => true],
'destination_account_nr_is' => ['alias' => false, 'needs_context' => true],
'to_account_nr_is' => ['alias' => true, 'alias_for' => 'destination_account_nr_is', 'needs_context' => true],
'destination_account_nr_contains' => ['alias' => false, 'needs_context' => true],
'to_account_nr_contains' => ['alias' => true, 'alias_for' => 'destination_account_nr_contains', 'needs_context' => true],
'destination_account_nr_ends' => ['alias' => false, 'needs_context' => true],
'to_account_nr_ends' => ['alias' => true, 'alias_for' => 'destination_account_nr_ends', 'needs_context' => true],
'destination_account_nr_starts' => ['alias' => false, 'needs_context' => true],
'to_account_nr_starts' => ['alias' => true, 'alias_for' => 'destination_account_nr_starts', 'needs_context' => true],
'account_is' => ['alias' => false, 'needs_context' => true],
'account_contains' => ['alias' => false, 'needs_context' => true],
'account_ends' => ['alias' => false, 'needs_context' => true],
'account_starts' => ['alias' => false, 'needs_context' => true],
'account_nr_is' => ['alias' => false, 'needs_context' => true],
'account_nr_contains' => ['alias' => false, 'needs_context' => true],
'account_nr_ends' => ['alias' => false, 'needs_context' => true],
'account_nr_starts' => ['alias' => false, 'needs_context' => true],
'category_is' => ['alias' => false, 'needs_context' => true],
'category_contains' => ['alias' => false, 'needs_context' => true],
'category' => ['alias' => true, 'alias_for' => 'category_contains', 'needs_context' => true],
'category_ends' => ['alias' => false, 'needs_context' => true],
'category_starts' => ['alias' => false, 'needs_context' => true],
'budget_is' => ['alias' => false, 'needs_context' => true],
'budget_contains' => ['alias' => false, 'needs_context' => true],
'budget' => ['alias' => true, 'alias_for' => 'budget_contains', 'needs_context' => true],
'budget_ends' => ['alias' => false, 'needs_context' => true],
'budget_starts' => ['alias' => false, 'needs_context' => true],
'bill_is' => ['alias' => false, 'needs_context' => true],
'bill_contains' => ['alias' => false, 'needs_context' => true],
'bill' => ['alias' => true, 'alias_for' => 'bill_contains', 'needs_context' => true],
'bill_ends' => ['alias' => false, 'needs_context' => true],
'bill_starts' => ['alias' => false, 'needs_context' => true],
'external_id_is' => ['alias' => false, 'needs_context' => true],
'external_id_contains' => ['alias' => false, 'needs_context' => true],
'external_id' => ['alias' => true, 'alias_for' => 'external_id_contains', 'needs_context' => true],
'external_id_ends' => ['alias' => false, 'needs_context' => true],
'external_id_starts' => ['alias' => false, 'needs_context' => true],
'internal_reference_is' => ['alias' => false, 'needs_context' => true],
'internal_reference_contains' => ['alias' => false, 'needs_context' => true],
'internal_reference' => ['alias' => true, 'alias_for' => 'internal_reference_contains', 'needs_context' => true],
'internal_reference_ends' => ['alias' => false, 'needs_context' => true],
'internal_reference_starts' => ['alias' => false, 'needs_context' => true],
'external_url_is' => ['alias' => false, 'needs_context' => true],
'external_url_contains' => ['alias' => false, 'needs_context' => true],
'external_url' => ['alias' => true, 'alias_for' => 'external_url_contains', 'needs_context' => true],
'external_url_ends' => ['alias' => false, 'needs_context' => true],
'external_url_starts' => ['alias' => false, 'needs_context' => true],
'has_attachments' => ['alias' => false, 'needs_context' => false],
'has_any_category' => ['alias' => false, 'needs_context' => false],
'has_any_budget' => ['alias' => false, 'needs_context' => false],
'has_any_bill' => ['alias' => false, 'needs_context' => false],
'has_any_tag' => ['alias' => false, 'needs_context' => false],
'any_notes' => ['alias' => false, 'needs_context' => false],
'has_any_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false],
'has_notes' => ['alias' => true, 'alias_for' => 'any_notes', 'needs_context' => false],
'any_external_url' => ['alias' => false, 'needs_context' => false],
'has_any_external_url' => ['alias' => true, 'alias_for' => 'any_external_url', 'needs_context' => false],
'has_no_attachments' => ['alias' => false, 'needs_context' => false],
'has_no_category' => ['alias' => false, 'needs_context' => false],
'has_no_budget' => ['alias' => false, 'needs_context' => false],
'has_no_bill' => ['alias' => false, 'needs_context' => false],
'has_no_tag' => ['alias' => false, 'needs_context' => false],
'no_notes' => ['alias' => false, 'needs_context' => false],
'no_external_url' => ['alias' => false, 'needs_context' => false],
'source_is_cash' => ['alias' => false, 'needs_context' => false],
'destination_is_cash' => ['alias' => false, 'needs_context' => false],
'account_is_cash' => ['alias' => false, 'needs_context' => false],
'currency_is' => ['alias' => false, 'needs_context' => true],
'foreign_currency_is' => ['alias' => false, 'needs_context' => true],
'id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true],
'journal_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true],
'recurrence_id' => ['alias' => false, 'trigger_class' => '', 'needs_context' => true],
'date_on' => ['alias' => false, 'needs_context' => true],
'date' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true],
'date_is' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true],
'on' => ['alias' => true, 'alias_for' => 'date_on', 'needs_context' => true],
'date_before' => ['alias' => false, 'needs_context' => true],
'before' => ['alias' => true, 'alias_for' => 'date_before', 'needs_context' => true],
'date_after' => ['alias' => false, 'needs_context' => true],
'after' => ['alias' => true, 'alias_for' => 'date_after', 'needs_context' => true],
'interest_date_on' => ['alias' => false, 'needs_context' => true],
'interest_date' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true],
'interest_date_is' => ['alias' => true, 'alias_for' => 'interest_date_on', 'needs_context' => true],
'interest_date_before' => ['alias' => false, 'needs_context' => true],
'interest_date_after' => ['alias' => false, 'needs_context' => true],
'book_date_on' => ['alias' => false, 'needs_context' => true],
'book_date' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true],
'book_date_is' => ['alias' => true, 'alias_for' => 'book_date_on', 'needs_context' => true],
'book_date_before' => ['alias' => false, 'needs_context' => true],
'book_date_after' => ['alias' => false, 'needs_context' => true],
'process_date_on' => ['alias' => false, 'needs_context' => true],
'process_date' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true],
'process_date_is' => ['alias' => true, 'alias_for' => 'process_date_on', 'needs_context' => true],
'process_date_before' => ['alias' => false, 'needs_context' => true],
'process_date_after' => ['alias' => false, 'needs_context' => true],
'due_date_on' => ['alias' => false, 'needs_context' => true],
'due_date' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true],
'due_date_is' => ['alias' => true, 'alias_for' => 'due_date_on', 'needs_context' => true],
'due_date_before' => ['alias' => false, 'needs_context' => true],
'due_date_after' => ['alias' => false, 'needs_context' => true],
'payment_date_on' => ['alias' => false, 'needs_context' => true],
'payment_date' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true],
'payment_date_is' => ['alias' => true, 'alias_for' => 'payment_date_on', 'needs_context' => true],
'payment_date_before' => ['alias' => false, 'needs_context' => true],
'payment_date_after' => ['alias' => false, 'needs_context' => true],
'invoice_date_on' => ['alias' => false, 'needs_context' => true],
'invoice_date' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true],
'invoice_date_is' => ['alias' => true, 'alias_for' => 'invoice_date_on', 'needs_context' => true],
'invoice_date_before' => ['alias' => false, 'needs_context' => true],
'invoice_date_after' => ['alias' => false, 'needs_context' => true],
'created_at_on' => ['alias' => false, 'needs_context' => true],
'created_at' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true],
'created_at_is' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true],
'created_at_before' => ['alias' => false, 'needs_context' => true],
'created_at_after' => ['alias' => false, 'needs_context' => true],
'updated_at_on' => ['alias' => false, 'needs_context' => true],
'updated_at' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true],
'updated_at_is' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true],
'updated_at_before' => ['alias' => false, 'needs_context' => true],
'updated_at_after' => ['alias' => false, 'needs_context' => true],
'created_on_on' => ['alias' => true, 'alias_for' => 'created_at_on', 'needs_context' => true],
'created_on' => ['alias' => true, 'alias_for' => 'created_at', 'needs_context' => true],
'created_on_before' => ['alias' => true, 'alias_for' => 'created_at_before', 'needs_context' => true],
'created_on_after' => ['alias' => true, 'alias_for' => 'created_at_after', 'needs_context' => true],
'updated_on_on' => ['alias' => true, 'alias_for' => 'updated_at_on', 'needs_context' => true],
'updated_on' => ['alias' => true, 'alias_for' => 'updated_at', 'needs_context' => true],
'updated_on_before' => ['alias' => true, 'alias_for' => 'updated_at_before', 'needs_context' => true],
'updated_on_after' => ['alias' => true, 'alias_for' => 'updated_at_after', 'needs_context' => true],
'amount_is' => ['alias' => false, 'needs_context' => true],
'amount' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true],
'amount_exactly' => ['alias' => true, 'alias_for' => 'amount_is', 'needs_context' => true],
'amount_less' => ['alias' => false, 'needs_context' => true],
'amount_max' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true],
'less' => ['alias' => true, 'alias_for' => 'amount_less', 'needs_context' => true],
'amount_more' => ['alias' => false, 'needs_context' => true],
'amount_min' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true],
'more' => ['alias' => true, 'alias_for' => 'amount_more', 'needs_context' => true],
'foreign_amount_is' => ['alias' => false, 'needs_context' => true],
'foreign_amount' => ['alias' => true, 'alias_for' => 'foreign_amount_is', 'needs_context' => true],
'foreign_amount_less' => ['alias' => false, 'needs_context' => true],
'foreign_amount_max' => ['alias' => true, 'alias_for' => 'foreign_amount_less', 'needs_context' => true],
'foreign_amount_more' => ['alias' => false, 'needs_context' => true],
'foreign_amount_min' => ['alias' => true, 'alias_for' => 'foreign_amount_more', 'needs_context' => true],
'attachment_name_is' => ['alias' => false, 'needs_context' => true],
'attachment' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true],
'attachment_is' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true],
'attachment_name' => ['alias' => true, 'alias_for' => 'attachment_name_is', 'needs_context' => true],
'attachment_name_contains' => ['alias' => false, 'needs_context' => true],
'attachment_name_starts' => ['alias' => false, 'needs_context' => true],
'attachment_name_ends' => ['alias' => false, 'needs_context' => true],
'attachment_notes' => ['alias' => true, 'alias_for' => 'attachment_notes_are', 'needs_context' => true],
'attachment_notes_are' => ['alias' => false, 'needs_context' => true],
'attachment_notes_contains' => ['alias' => false, 'needs_context' => true],
'attachment_notes_contain' => ['alias' => true, 'alias_for' => 'attachment_notes_contains', 'needs_context' => true],
'attachment_notes_starts' => ['alias' => false, 'needs_context' => true],
'attachment_notes_start' => ['alias' => true, 'alias_for' => 'attachment_notes_starts', 'needs_context' => true],
'attachment_notes_ends' => ['alias' => false, 'needs_context' => true],
'attachment_notes_end' => ['alias' => true, 'alias_for' => 'attachment_notes_ends', 'needs_context' => true],
'exists' => ['alias' => false, 'needs_context' => false],
'sepa_ct_is' => ['alias' => false, 'needs_context' => true],
'no_external_id' => ['alias' => false, 'needs_context' => false],
'any_external_id' => ['alias' => false, 'needs_context' => false],
// based on source or destination balance. Very heavy search.
'source_balance_gte' => ['alias' => false, 'needs_context' => true],
'source_balance_gt' => ['alias' => false, 'needs_context' => true],
'source_balance_lte' => ['alias' => false, 'needs_context' => true],
'source_balance_lt' => ['alias' => false, 'needs_context' => true],
'source_balance_is' => ['alias' => false, 'needs_context' => true],
'destination_balance_gte' => ['alias' => false, 'needs_context' => true],
'destination_balance_gt' => ['alias' => false, 'needs_context' => true],
'destination_balance_lte' => ['alias' => false, 'needs_context' => true],
'destination_balance_lt' => ['alias' => false, 'needs_context' => true],
'destination_balance_is' => ['alias' => false, 'needs_context' => true],
],
];

View File

@@ -130,15 +130,15 @@
"response": "Antwort",
"visit_webhook_url": "Webhook-URL besuchen",
"reset_webhook_secret": "Webhook Secret zur\u00fccksetzen",
"header_exchange_rates": "Wechselkurse",
"exchange_rates_intro": "Firefly III unterst\u00fctzt das Herunterladen und Verwenden von Wechselkursen. Lesen Sie mehr dar\u00fcber in <a href=\u201ehttps:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\u201c>der Dokumentation<\/a>.",
"exchange_rates_from_to": "Zwischen {from} und {to} (und umgekehrt)",
"header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates. Inverse is automatically calculated if not provided. Will go back to last found rate.",
"header_exchange_rates_rates": "Wechselkurse",
"header_exchange_rates_table": "Tabelle mit Wechselkursen",
"help_rate_form": "An diesem Tag, wie viele {to} werden Sie f\u00fcr einen {from} bekommen?",
"add_new_rate": "Neuen Wechselkurs hinzuf\u00fcgen",
"save_new_rate": "Neuen Kurs speichern"
"header_exchange_rates_rates": "Exchange rates",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
"save_new_rate": "Save new rate"
},
"form": {
"url": "URL",
@@ -158,7 +158,7 @@
"webhook_delivery": "Zustellung",
"from_currency_to_currency": "{from} &rarr; {to}",
"to_currency_from_currency": "{to} &rarr; {from}",
"rate": "Kurs"
"rate": "Rate"
},
"list": {
"active": "Aktiv?",

View File

@@ -130,12 +130,12 @@
"response": "R\u00e9ponse",
"visit_webhook_url": "Visiter l'URL du webhook",
"reset_webhook_secret": "R\u00e9initialiser le secret du webhook",
"header_exchange_rates": "Taux de change",
"exchange_rates_intro": "Firefly III prend en charge le chargement et l'utilisation des taux de change. En savoir plus \u00e0 ce sujet dans <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">la documentation<\/a>.",
"exchange_rates_from_to": "Entre {from} et {to} (et l'inverse)",
"header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates. Inverse is automatically calculated if not provided. Will go back to last found rate.",
"header_exchange_rates_rates": "Taux de change",
"header_exchange_rates_table": "Table avec taux de change",
"header_exchange_rates_rates": "Exchange rates",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
"save_new_rate": "Save new rate"

View File

@@ -130,15 +130,15 @@
"response": "Odpowied\u017a",
"visit_webhook_url": "Odwied\u017a adres URL webhooka",
"reset_webhook_secret": "Resetuj sekret webhooka",
"header_exchange_rates": "Kursy wymiany",
"exchange_rates_intro": "Firefly III obs\u0142uguje pobieranie i korzystanie z kurs\u00f3w wymiany walut. Wi\u0119cej informacji na ten temat w <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">dokumentacji<\/a>.",
"exchange_rates_from_to": "Pomi\u0119dzy {from} i {to} (i odwrotnie)",
"exchange_rates_intro_rates": "Firefly III bla bla bla kurs wymiany. Odwrotno\u015b\u0107 jest obliczana automatycznie, je\u015bli nie zosta\u0142a podana. Zostanie u\u017cyty ostatni znaleziony kurs.",
"header_exchange_rates_rates": "Kursy wymiany",
"header_exchange_rates_table": "Tabela z kursami wymiany walut",
"help_rate_form": "W tym dniu, ile {to} otrzymasz za jeden {from}?",
"add_new_rate": "Dodaj nowy kurs wymiany",
"save_new_rate": "Zapisz nowy kurs"
"header_exchange_rates": "Exchange rates",
"exchange_rates_intro": "Firefly III supports downloading and using exchange rates. Read more about this in <a href=\"https:\/\/docs.firefly-iii.org\/LOL_NOT_FINISHED_YET_TODO\">the documentation<\/a>.",
"exchange_rates_from_to": "Between {from} and {to} (and the other way around)",
"exchange_rates_intro_rates": "Firefly III bla bla bla exchange rates. Inverse is automatically calculated if not provided. Will go back to last found rate.",
"header_exchange_rates_rates": "Exchange rates",
"header_exchange_rates_table": "Table with exchange rates",
"help_rate_form": "On this day, how many {to} will you get for one {from}?",
"add_new_rate": "Add a new exchange rate",
"save_new_rate": "Save new rate"
},
"form": {
"url": "URL",
@@ -158,7 +158,7 @@
"webhook_delivery": "Dor\u0119czenie",
"from_currency_to_currency": "{from} &rarr; {to}",
"to_currency_from_currency": "{to} &rarr; {from}",
"rate": "Kurs"
"rate": "Rate"
},
"list": {
"active": "Jest aktywny?",

File diff suppressed because it is too large Load Diff

View File

@@ -58,7 +58,7 @@
account_name: account.name|escape,
url: url,
end: auditData[account.id].dayBefore,
balance: formatAmountByAccount(account, auditData[account.id].dayBeforeBalance)
balance: formatAmountByAccount(account, auditData[account.id].dayBeforeBalance.balance)
})|raw }}
</p>
{% include 'reports.partials.journals-audit' with {'journals': auditData[account.id].journals,'account':account} %}

View File

@@ -22,6 +22,8 @@
<th class="hide-create_date">{{ trans('list.create_date') }}</th>
<th class="hide-update_date">{{ trans('list.update_date') }}</th>
<th class="hide-notes">{{ trans('list.notes') }}</th>
{# even more optional fields #}
<th class="hide-interest_date">{{ trans('list.interest_date') }}</th>
<th class="hide-book_date">{{ trans('list.book_date') }}</th>
@@ -144,6 +146,9 @@
<td class="hide-update_date">
{{ journal.updated_at.isoFormat(dateTimeFormat) }}
</td>
<td class="hide-notes">
{{ journal.notes|default('')|markdown }}
</td>
<!-- more new dates -->
<td class="hide-interest_date">