Compare commits

..

26 Commits

Author SHA1 Message Date
github-actions
da0b41e45c Auto commit for release 'develop' on 2024-10-07 2024-10-07 05:13:20 +02:00
James Cole
d03960e379 Fix https://github.com/firefly-iii/firefly-iii/issues/8029 2024-10-06 11:32:58 +02:00
James Cole
16d3984ffc Upgrade packages 2024-10-05 17:17:20 +02:00
James Cole
856a194988 Fix https://github.com/firefly-iii/firefly-iii/issues/9106 2024-10-05 11:05:17 +02:00
James Cole
1bff966bfe Fix https://github.com/firefly-iii/firefly-iii/issues/9305 2024-10-05 10:57:57 +02:00
James Cole
1948b6118b Fix https://github.com/firefly-iii/firefly-iii/issues/9236 2024-10-05 10:49:18 +02:00
James Cole
20c25d3ca2 Fix #9225 2024-10-05 10:44:29 +02:00
James Cole
a153735ac3 Fix https://github.com/firefly-iii/firefly-iii/issues/9175 2024-10-05 09:43:53 +02:00
James Cole
62509f7c18 Fix https://github.com/firefly-iii/firefly-iii/issues/9147 2024-10-05 09:41:07 +02:00
James Cole
9b48b67158 Fix filters for https://github.com/orgs/firefly-iii/discussions/9271 2024-10-05 07:45:50 +02:00
github-actions
cbd50634a4 Auto commit for release 'develop' on 2024-09-30 2024-09-30 05:15:15 +02:00
James Cole
f475393bc1 Fix https://github.com/firefly-iii/firefly-iii/issues/9282 2024-09-29 16:04:54 +02:00
github-actions
abcddb09bf Auto commit for release 'v6.1.21' on 2024-09-29 2024-09-29 06:16:33 +02:00
James Cole
cf71a0fc55 Expand changelog 2024-09-29 06:11:57 +02:00
github-actions
78253f9e1e Auto commit for release 'develop' on 2024-09-29 2024-09-29 06:08:10 +02:00
James Cole
ebd0848c7f Expand changelog. 2024-09-29 06:03:58 +02:00
James Cole
c8461eb0b5 Fix https://github.com/firefly-iii/firefly-iii/issues/9281 2024-09-28 20:31:09 +02:00
James Cole
a4cbdeaeac Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop
# Conflicts:
#	app/Support/Models/AccountBalanceCalculator.php
2024-09-28 18:48:19 +02:00
James Cole
3e1ce69d52 Remove spammy debug message 2024-09-28 18:47:39 +02:00
github-actions
08a26b976e Auto commit for release 'develop' on 2024-09-28 2024-09-28 18:35:20 +02:00
James Cole
5fc55381a2 Update changelog. 2024-09-28 18:30:42 +02:00
James Cole
dbf3d24ae7 Fix https://github.com/firefly-iii/firefly-iii/issues/9278 2024-09-28 18:18:53 +02:00
James Cole
cc7c6e02c5 Fix https://github.com/firefly-iii/firefly-iii/issues/9275 2024-09-28 17:43:18 +02:00
James Cole
b45aa85853 Fix https://github.com/firefly-iii/firefly-iii/issues/9278 2024-09-28 17:17:29 +02:00
github-actions
e7526ac5e3 Auto commit for release 'develop' on 2024-09-28 2024-09-28 08:36:26 +02:00
James Cole
441ada70b8 Fix https://github.com/firefly-iii/firefly-iii/issues/9275 2024-09-28 08:26:54 +02:00
22 changed files with 1584 additions and 752 deletions

View File

@@ -2541,10 +2541,10 @@
"packages-dev": [], "packages-dev": [],
"aliases": [], "aliases": [],
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": [], "stability-flags": {},
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
"platform": [], "platform": {},
"platform-dev": [], "platform-dev": {},
"plugin-api-version": "2.6.0" "plugin-api-version": "2.6.0"
} }

View File

@@ -176,6 +176,7 @@ MAILGUN_ENDPOINT=api.mailgun.net
# If you use Docker or similar, you can set these variables from a file by appending them with _FILE # If you use Docker or similar, you can set these variables from a file by appending them with _FILE
MANDRILL_SECRET= MANDRILL_SECRET=
SPARKPOST_SECRET= SPARKPOST_SECRET=
MAILERSEND_API_KEY=
# Firefly III can send you the following messages. # Firefly III can send you the following messages.
SEND_ERROR_MESSAGE=true SEND_ERROR_MESSAGE=true
@@ -312,6 +313,12 @@ PUSHER_ID=
DEMO_USERNAME= DEMO_USERNAME=
DEMO_PASSWORD= DEMO_PASSWORD=
#
# Disable or enable the running balance column data
# Please disable this. It's a very experimental feature.
#
USE_RUNNING_BALANCE=false
# #
# The v2 layout is very experimental. If it breaks you get to keep both parts. # The v2 layout is very experimental. If it breaks you get to keep both parts.
# Be wary of data loss. # Be wary of data loss.

View File

@@ -79,12 +79,12 @@ class StoreRequest extends FormRequest
'currency_id' => 'numeric|exists:transaction_currencies,id', 'currency_id' => 'numeric|exists:transaction_currencies,id',
'currency_code' => 'min:3|max:51|exists:transaction_currencies,code', 'currency_code' => 'min:3|max:51|exists:transaction_currencies,code',
'date' => 'date|required', 'date' => 'date|required',
'end_date' => 'date|after:date', 'end_date' => 'nullable|date|after:date',
'extension_date' => 'date|after:date', 'extension_date' => 'nullable|date|after:date',
'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly|required', 'repeat_freq' => 'in:weekly,monthly,quarterly,half-year,yearly|required',
'skip' => 'min:0|max:31|numeric', 'skip' => 'min:0|max:31|numeric',
'active' => [new IsBoolean()], 'active' => [new IsBoolean()],
'notes' => 'min:1|max:32768', 'notes' => 'nullable|min:1|max:32768',
]; ];
} }

View File

@@ -84,10 +84,6 @@ class BalanceController extends Controller
$queryParameters = $request->getParameters(); $queryParameters = $request->getParameters();
$accounts = $this->getAccountList($queryParameters); $accounts = $this->getAccountList($queryParameters);
// move date to end of day
$queryParameters['start']->startOfDay();
$queryParameters['end']->endOfDay();
// prepare for currency conversion and data collection: // prepare for currency conversion and data collection:
/** @var TransactionCurrency $default */ /** @var TransactionCurrency $default */
$default = app('amount')->getDefaultCurrency(); $default = app('amount')->getDefaultCurrency();

View File

@@ -53,10 +53,10 @@ class ChartRequest extends FormRequest
$queryParameters = QueryParameters::cast($this->all()); $queryParameters = QueryParameters::cast($this->all());
return [ return [
'start' => $this->dateOrToday($queryParameters, 'start'), 'start' => $this->dateOrToday($queryParameters, 'start')->startOfDay(),
'end' => $this->dateOrToday($queryParameters, 'end'), 'end' => $this->dateOrToday($queryParameters, 'end')->endOfDay(),
'preselected' => $this->stringFromQueryParams($queryParameters, 'preselected', 'empty'), 'preselected' => $this->stringFromQueryParams($queryParameters, 'preselected', 'empty'),
'period' => $this->stringFromQueryParams($queryParameters, 'period', '1M'), 'period' => $this->stringFromFilterParams($queryParameters, 'period', '1M'),
'accounts' => $this->arrayOfStrings($queryParameters, 'accounts'), 'accounts' => $this->arrayOfStrings($queryParameters, 'accounts'),
// preselected heeft maar een paar toegestane waardes, dat moet ook goed gaan. // preselected heeft maar een paar toegestane waardes, dat moet ook goed gaan.
// 'query' => $this->arrayOfStrings($queryParameters, 'query'), // 'query' => $this->arrayOfStrings($queryParameters, 'query'),
@@ -80,12 +80,14 @@ class ChartRequest extends FormRequest
return [ return [
'fields' => JsonApiRule::notSupported(), 'fields' => JsonApiRule::notSupported(),
'filter' => ['nullable', 'array', 'filter' => ['nullable', 'array',
new IsValidFilter(['start', 'end', 'preselected', 'accounts']), new IsValidFilter(['start', 'end', 'preselected', 'accounts', 'period']),
new IsFilterValueIn('preselected', config('firefly.preselected_accounts')), new IsFilterValueIn('preselected', config('firefly.preselected_accounts')),
], ],
'include' => JsonApiRule::notSupported(), 'include' => JsonApiRule::notSupported(),
'page' => JsonApiRule::notSupported(), 'page' => JsonApiRule::notSupported(),
'sort' => JsonApiRule::notSupported(), 'sort' => JsonApiRule::notSupported(),
// 'start' => 'required|date|after:1900-01-01|before:2099-12-31',
// 'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01',
]; ];
// return [ // return [

View File

@@ -103,7 +103,8 @@ class PopupReport implements PopupReportInterface
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class); $collector = app(GroupCollectorInterface::class);
$collector->setAccounts($attributes['accounts']) $collector
->setAccounts($attributes['accounts'])
->withAccountInformation() ->withAccountInformation()
->withBudgetInformation() ->withBudgetInformation()
->withCategoryInformation() ->withCategoryInformation()
@@ -113,11 +114,10 @@ class PopupReport implements PopupReportInterface
if (null !== $currency) { if (null !== $currency) {
$collector->setCurrency($currency); $collector->setCurrency($currency);
} }
if (null === $budget->id || 0 === $budget->id) {
if (null === $budget->id) {
$collector->setTypes([TransactionType::WITHDRAWAL])->withoutBudget(); $collector->setTypes([TransactionType::WITHDRAWAL])->withoutBudget();
} }
if (null !== $budget->id) { if (null !== $budget->id && 0 !== $budget->id) {
$collector->setBudget($budget); $collector->setBudget($budget);
} }

View File

@@ -362,11 +362,9 @@ class CreateRecurringTransactions implements ShouldQueue
$groupTitle = null; $groupTitle = null;
$count = $recurrence->recurrenceTransactions->count(); $count = $recurrence->recurrenceTransactions->count();
// #8844, if there is one recurrence transaction, use the first title as the title. // #8844, if there is one recurrence transaction, use the first title as the title.
if (1 === $count) { // #9305, if there is one recurrence transaction, group title must be NULL.
/** @var RecurrenceTransaction $first */ $groupTitle = null;
$first = $recurrence->recurrenceTransactions()->first();
$groupTitle = $first->description;
}
// #8844, if there are more, use the recurrence transaction itself. // #8844, if there are more, use the recurrence transaction itself.
if ($count > 1) { if ($count > 1) {
$groupTitle = $recurrence->title; $groupTitle = $recurrence->title;

View File

@@ -327,15 +327,17 @@ class CreditRecalculateService
if ($isSameAccount && $isDebit && $this->isTransferIn($usedAmount, $type)) { // case 9 if ($isSameAccount && $isDebit && $this->isTransferIn($usedAmount, $type)) { // case 9
$usedAmount = app('steam')->positive($usedAmount); $usedAmount = app('steam')->positive($usedAmount);
$result = bcadd($leftOfDebt, $usedAmount); $result = bcsub($leftOfDebt, $usedAmount);
app('log')->debug(sprintf('Case 9 (transfer into debit liability, means you owe more): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); // 2024-10-05, #9225 this used to say you would owe more, but a transfer INTO a debit from wherever means you owe LESS.
app('log')->debug(sprintf('Case 9 (transfer into debit liability, means you owe LESS): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
return $result; return $result;
} }
if ($isSameAccount && $isDebit && $this->isTransferOut($usedAmount, $type)) { // case 10 if ($isSameAccount && $isDebit && $this->isTransferOut($usedAmount, $type)) { // case 10
$usedAmount = app('steam')->positive($usedAmount); $usedAmount = app('steam')->positive($usedAmount);
$result = bcsub($leftOfDebt, $usedAmount); $result = bcadd($leftOfDebt, $usedAmount);
app('log')->debug(sprintf('Case 5 (transfer out of debit liability, means you owe less): %s - %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2))); // 2024-10-05, #9225 this used to say you would owe less, but a transfer OUT OF a debit from wherever means you owe MORE.
app('log')->debug(sprintf('Case 10 (transfer out of debit liability, means you owe MORE): %s + %s = %s', app('steam')->bcround($leftOfDebt, 2), app('steam')->bcround($usedAmount, 2), app('steam')->bcround($result, 2)));
return $result; return $result;
} }

View File

@@ -35,6 +35,7 @@ trait ParsesQueryFilters
$date = today(); $date = today();
$value = $parameters->filter()?->value($field, date('Y-m-d')); $value = $parameters->filter()?->value($field, date('Y-m-d'));
if (is_array($value)) { if (is_array($value)) {
Log::error(sprintf('Multiple values for date field "%s". Using first value.', $field)); Log::error(sprintf('Multiple values for date field "%s". Using first value.', $field));
$value = $value[0]; $value = $value[0];
@@ -65,4 +66,9 @@ trait ParsesQueryFilters
{ {
return (string) ($parameters->page()[$field] ?? $default); return (string) ($parameters->page()[$field] ?? $default);
} }
private function stringFromFilterParams(QueryParameters $parameters, string $field, string $default): string
{
return (string)$parameters->filter()?->value($field, $default) ?? $default;
}
} }

View File

@@ -115,6 +115,7 @@ trait RenderPartialViews
$budget = $budgetRepository->find((int)$attributes['budgetId']); $budget = $budgetRepository->find((int)$attributes['budgetId']);
if (null === $budget) { if (null === $budget) {
// transactions without a budget.
$budget = new Budget(); $budget = new Budget();
} }
$journals = $popupHelper->byBudget($budget, $attributes); $journals = $popupHelper->byBudget($budget, $attributes);

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Support\Models; namespace FireflyIII\Support\Models;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException; use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Account; use FireflyIII\Models\Account;
use FireflyIII\Models\AccountBalance; use FireflyIII\Models\AccountBalance;
@@ -74,7 +75,35 @@ class AccountBalanceCalculator
foreach ($transactionJournal->transactions as $transaction) { foreach ($transactionJournal->transactions as $transaction) {
$accounts->push($transaction->account); $accounts->push($transaction->account);
} }
$object->optimizedCalculation($accounts); $object->optimizedCalculation($accounts, $transactionJournal->date);
}
private function getLatestBalance(int $accountId, int $currencyId, ?Carbon $notBefore): string
{
if (null === $notBefore) {
return '0';
}
Log::debug(sprintf('getLatestBalance: notBefore date is "%s", calculating', $notBefore->format('Y-m-d')));
$query = Transaction::leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
->whereNull('transactions.deleted_at')
->where('transaction_journals.transaction_currency_id', $currencyId)
->whereNull('transaction_journals.deleted_at')
// this order is the same as GroupCollector
->orderBy('transaction_journals.date', 'DESC')
->orderBy('transaction_journals.order', 'ASC')
->orderBy('transaction_journals.id', 'DESC')
->orderBy('transaction_journals.description', 'DESC')
->orderBy('transactions.amount', 'DESC')
->where('transactions.account_id', $accountId)
;
$notBefore->startOfDay();
$query->where('transaction_journals.date', '<', $notBefore);
$first = $query->first(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount', 'transactions.balance_after']);
$balance = $first->balance_after ?? '0';
Log::debug(sprintf('getLatestBalance: found balance: %s in transaction #%d', $balance, $first->id ?? 0));
return $balance;
} }
private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance private function getAccountBalanceByAccount(int $account, int $currency): AccountBalance
@@ -98,9 +127,15 @@ class AccountBalanceCalculator
return $entry; return $entry;
} }
private function optimizedCalculation(Collection $accounts): void private function optimizedCalculation(Collection $accounts, ?Carbon $notBefore = null): void
{ {
Log::debug('start of optimizedCalculation'); Log::debug('start of optimizedCalculation');
if (false === config('firefly.feature_flags.running_balance_column')) {
Log::debug('optimizedCalculation is disabled, return.');
return;
}
if ($accounts->count() > 0) { if ($accounts->count() > 0) {
Log::debug(sprintf('Limited to %d account(s)', $accounts->count())); Log::debug(sprintf('Limited to %d account(s)', $accounts->count()));
} }
@@ -120,6 +155,10 @@ class AccountBalanceCalculator
if ($accounts->count() > 0) { if ($accounts->count() > 0) {
$query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray()); $query->whereIn('transactions.account_id', $accounts->pluck('id')->toArray());
} }
if (null !== $notBefore) {
$notBefore->startOfDay();
$query->where('transaction_journals.date', '>=', $notBefore);
}
$set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']); $set = $query->get(['transactions.id', 'transactions.balance_dirty', 'transactions.transaction_currency_id', 'transaction_journals.date', 'transactions.account_id', 'transactions.amount']);
@@ -127,7 +166,7 @@ class AccountBalanceCalculator
foreach ($set as $entry) { foreach ($set as $entry) {
// start with empty array: // start with empty array:
$balances[$entry->account_id] ??= []; $balances[$entry->account_id] ??= [];
$balances[$entry->account_id][$entry->transaction_currency_id] ??= '0'; $balances[$entry->account_id][$entry->transaction_currency_id] ??= $this->getLatestBalance($entry->account_id, $entry->transaction_currency_id, $notBefore);
// before and after are easy: // before and after are easy:
$before = $balances[$entry->account_id][$entry->transaction_currency_id]; $before = $balances[$entry->account_id][$entry->transaction_currency_id];

View File

@@ -29,7 +29,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Support\Search\OperatorQuerySearch; use FireflyIII\Support\Search\OperatorQuerySearch;
use League\CommonMark\GithubFlavoredMarkdownConverter; use League\CommonMark\GithubFlavoredMarkdownConverter;
use Route;
use Twig\Extension\AbstractExtension; use Twig\Extension\AbstractExtension;
use Twig\TwigFilter; use Twig\TwigFilter;
use Twig\TwigFunction; use Twig\TwigFunction;
@@ -64,12 +63,29 @@ class General extends AbstractExtension
/** @var Carbon $date */ /** @var Carbon $date */
$date = session('end', today(config('app.timezone'))->endOfMonth()); $date = session('end', today(config('app.timezone'))->endOfMonth());
$runningBalance = config('firefly.feature_flags.running_balance_column');
$info = [];
if (true === $runningBalance) {
$info = app('steam')->balanceByTransactions($account, $date, null); $info = app('steam')->balanceByTransactions($account, $date, null);
}
if (false === $runningBalance) {
$info[] = app('steam')->balance($account, $date);
}
$strings = []; $strings = [];
foreach ($info as $currencyId => $balance) { foreach ($info as $currencyId => $balance) {
$balance = (string) $balance;
if (0 === $currencyId) {
// not good code but OK
/** @var AccountRepositoryInterface $accountRepos */
$accountRepos = app(AccountRepositoryInterface::class);
$currency = $accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency();
$strings[] = app('amount')->formatAnything($currency, $balance, false);
}
if (0 !== $currencyId) {
$strings[] = app('amount')->formatByCurrencyId($currencyId, $balance, false); $strings[] = app('amount')->formatByCurrencyId($currencyId, $balance, false);
} }
}
return implode(', ', $strings); return implode(', ', $strings);
// return app('steam')->balance($account, $date); // return app('steam')->balance($account, $date);

View File

@@ -86,7 +86,7 @@ class AccountValidator
app('log')->debug('AccountValidator source is set to NULL'); app('log')->debug('AccountValidator source is set to NULL');
} }
if (null !== $account) { if (null !== $account) {
app('log')->debug(sprintf('AccountValidator source is set to #%d: "%s" (%s)', $account->id, $account->name, $account->accountType->type)); app('log')->debug(sprintf('AccountValidator source is set to #%d: "%s" (%s)', $account->id, $account->name, $account->accountType?->type));
} }
$this->source = $account; $this->source = $account;
} }

View File

@@ -3,6 +3,39 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/). This project adheres to [Semantic Versioning](http://semver.org/).
## 6.1.21 - 2024-09-30
### Added
- Enabled the expression engine built by @michaelhthomas. Read more about it in [the documentation](https://docs.firefly-iii.org/references/firefly-iii/rule-expressions/).
- Add running balance data, see if it can be used in the layout in the future.
- [PR 9160](https://github.com/firefly-iii/firefly-iii/pull/9160) (add test cases for api/v1/autocomplete/CategoryController) reported by @tasnim0tantawi
- [PR 9178](https://github.com/firefly-iii/firefly-iii/pull/9178) (Add test cases for Api\V1\Controllers\Autocomplete\BillController & BudgetController) reported by @tasnim0tantawi
- [PR 9171](https://github.com/firefly-iii/firefly-iii/pull/9171) (Add about test) reported by @mzhubail
### Changed
- [PR 9096](https://github.com/firefly-iii/firefly-iii/pull/9096) (chore: fix some comments) reported by @withbest
### Fixed
- [Issue 9078](https://github.com/firefly-iii/firefly-iii/issues/9078) (bcadd exception while using POST transactions) reported by @dbtdsilva
- [Discussion 9080](https://github.com/orgs/firefly-iii/discussions/9080) (Incorrect sorting on expense accounts) started by @pc-zookeeper
- [Issue 9084](https://github.com/firefly-iii/firefly-iii/issues/9084) (API Call for bills/nextExpectedMatch does not update) reported by @marcelweikum
- [Issue 9103](https://github.com/firefly-iii/firefly-iii/issues/9103) (Default Currency does not apply to Accounts.) reported by @chrisgriff1512
- [Issue 9140](https://github.com/firefly-iii/firefly-iii/issues/9140) (Dashboard 'Today' option chooses 1st of month (not current date)) reported by @PAS-BC
- [PR 9179](https://github.com/firefly-iii/firefly-iii/pull/9179) (fix Navigation.php MTD logic to make tests pass.) reported by @tasnim0tantawi
- [PR 9239](https://github.com/firefly-iii/firefly-iii/pull/9239) (Fix webhook index page when Firefly is not served at root) reported by @jfpedroza
- [Issue 9168](https://github.com/firefly-iii/firefly-iii/issues/9168) (Custom logout URL doesn't work.) reported by @JC5
- [Issue 9155](https://github.com/firefly-iii/firefly-iii/issues/9155) (internal_reference_is does not correctly match numeric internal references) reported by @Lrns123
- [Issue 9275](https://github.com/firefly-iii/firefly-iii/issues/9275) (Long wait when editing a transaction) reported by @JC5
- [Issue 9278](https://github.com/firefly-iii/firefly-iii/issues/9278) (Update to v6.1.20 changed Balance of Account) reported by @JeuJeus
- [Issue 9281](https://github.com/firefly-iii/firefly-iii/issues/9281) (Update to v6.1.20 leads to a type error) reported by @krakonos1602
### API
- Expand v2 API
## 6.1.20 - 2024-09-29 ## 6.1.20 - 2024-09-29
### Added ### Added

View File

@@ -98,6 +98,7 @@
"league/commonmark": "2.*", "league/commonmark": "2.*",
"league/csv": "^9.10", "league/csv": "^9.10",
"league/fractal": "0.*", "league/fractal": "0.*",
"mailersend/laravel-driver": "^2.7",
"nunomaduro/collision": "^8", "nunomaduro/collision": "^8",
"pragmarx/google2fa": "^8.0", "pragmarx/google2fa": "^8.0",
"predis/predis": "^2.2", "predis/predis": "^2.2",
@@ -194,7 +195,8 @@
"optimize-autoloader": true, "optimize-autoloader": true,
"allow-plugins": { "allow-plugins": {
"composer/package-versions-deprecated": true, "composer/package-versions-deprecated": true,
"phpstan/extension-installer": true "phpstan/extension-installer": true,
"php-http/discovery": true
} }
} }
} }

859
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -65,10 +65,6 @@ use FireflyIII\Support\Binder\UserGroupAccount;
use FireflyIII\Support\Binder\UserGroupBill; use FireflyIII\Support\Binder\UserGroupBill;
use FireflyIII\Support\Binder\UserGroupTransaction; use FireflyIII\Support\Binder\UserGroupTransaction;
use FireflyIII\TransactionRules\Actions\AddTag; use FireflyIII\TransactionRules\Actions\AddTag;
use FireflyIII\TransactionRules\Actions\AppendDescription;
use FireflyIII\TransactionRules\Actions\AppendDescriptionToNotes;
use FireflyIII\TransactionRules\Actions\AppendNotes;
use FireflyIII\TransactionRules\Actions\AppendNotesToDescription;
use FireflyIII\TransactionRules\Actions\ClearBudget; use FireflyIII\TransactionRules\Actions\ClearBudget;
use FireflyIII\TransactionRules\Actions\ClearCategory; use FireflyIII\TransactionRules\Actions\ClearCategory;
use FireflyIII\TransactionRules\Actions\ClearNotes; use FireflyIII\TransactionRules\Actions\ClearNotes;
@@ -77,10 +73,6 @@ use FireflyIII\TransactionRules\Actions\ConvertToTransfer;
use FireflyIII\TransactionRules\Actions\ConvertToWithdrawal; use FireflyIII\TransactionRules\Actions\ConvertToWithdrawal;
use FireflyIII\TransactionRules\Actions\DeleteTransaction; use FireflyIII\TransactionRules\Actions\DeleteTransaction;
use FireflyIII\TransactionRules\Actions\LinkToBill; use FireflyIII\TransactionRules\Actions\LinkToBill;
use FireflyIII\TransactionRules\Actions\MoveDescriptionToNotes;
use FireflyIII\TransactionRules\Actions\MoveNotesToDescription;
use FireflyIII\TransactionRules\Actions\PrependDescription;
use FireflyIII\TransactionRules\Actions\PrependNotes;
use FireflyIII\TransactionRules\Actions\RemoveAllTags; use FireflyIII\TransactionRules\Actions\RemoveAllTags;
use FireflyIII\TransactionRules\Actions\RemoveTag; use FireflyIII\TransactionRules\Actions\RemoveTag;
use FireflyIII\TransactionRules\Actions\SetAmount; use FireflyIII\TransactionRules\Actions\SetAmount;
@@ -115,9 +107,10 @@ return [
'webhooks' => true, 'webhooks' => true,
'handle_debts' => true, 'handle_debts' => true,
'expression_engine' => true, 'expression_engine' => true,
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
// see cer.php for exchange rates feature flag. // see cer.php for exchange rates feature flag.
], ],
'version' => '6.1.20', 'version' => 'develop/2024-10-07',
'api_version' => '2.1.0', 'api_version' => '2.1.0',
'db_version' => 24, 'db_version' => 24,

View File

@@ -45,7 +45,9 @@ return [
'timeout' => null, 'timeout' => null,
'verify_peer' => null !== env('MAIL_ENCRYPTION'), 'verify_peer' => null !== env('MAIL_ENCRYPTION'),
], ],
'mailersend' => [
'transport' => 'mailersend',
],
'ses' => [ 'ses' => [
'transport' => 'ses', 'transport' => 'ses',
], ],

1231
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -337,6 +337,13 @@ function updateTriggerInput(selectList) {
console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.'); console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.');
createAutoComplete(inputResult, 'api/v1/autocomplete/tags'); createAutoComplete(inputResult, 'api/v1/autocomplete/tags');
break; break;
case 'bill_contains':
case 'bill_ends':
case 'bill_is':
case 'bill_starts':
console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.');
createAutoComplete(inputResult, 'api/v1/autocomplete/bills');
break;
case 'budget_is': case 'budget_is':
console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.'); console.log('Select list value is ' + selectList.val() + ', so input needs auto complete.');
createAutoComplete(inputResult, 'api/v1/autocomplete/budgets'); createAutoComplete(inputResult, 'api/v1/autocomplete/budgets');

View File

@@ -67,6 +67,18 @@
{% endif %} {% endif %}
{% if accounts.count() == 0 and page == 1 %} {% if accounts.count() == 0 and page == 1 %}
{% include 'partials.empty' with {objectType: objectType, type: 'accounts',route: route('accounts.create', [objectType])} %} {% include 'partials.empty' with {objectType: objectType, type: 'accounts',route: route('accounts.create', [objectType])} %}
{% if inactiveCount > 0 %}
<p class="text-center"><small>
<em>
<a href="{{ route('accounts.inactive.index', objectType) }}" class="text-muted">
{{ trans_choice('firefly.inactive_account_link', inactiveCount) }}
</a>
</em>
</small>
</p>
{% endif %}
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@@ -61,7 +61,7 @@
<td class="hidden-xs"> <td class="hidden-xs">
{% if budget_limit.spent != 0 %} {% if budget_limit.spent != 0 %}
<span class="fa fa-fw text-muted fa-info-circle firefly-info-button" <span class="fa fa-fw text-muted fa-info-circle firefly-info-button"
data-location="budget-spent-amount" data-currency-id="{{ budget_limit.currency_id }}" data-budget-id="{{ budget.budget_id }}"></span> data-location="budget-spent-amount" data-currency-id="{{ budget_limit.currency_id }}" data-budget-id="{% if '' == budget.budget_id %}0{% else %}{{ budget.budget_id }}{% endif %}"></span>
{% endif %} {% endif %}
</td> </td>