mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2026-01-02 19:44:40 +00:00
Compare commits
5 Commits
develop-20
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b0be91f93 | ||
|
|
01e7b604da | ||
|
|
58d175444b | ||
|
|
134770644a | ||
|
|
a9f21c9371 |
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
@@ -250,7 +250,7 @@ jobs:
|
||||
fi
|
||||
|
||||
echo "Merge all changes from $BRANCH_NAME back into '$MERGE_INTO' using a PR"
|
||||
PR_URL=$(gh pr create -B $MERGE_INTO -H $BRANCH_NAME --title "🤖 Automatic PR to merge all changes into the '$MERGE_INTO' branch." --body '🤖 Created by GitHub action')
|
||||
PR_URL=$(gh pr create -B $MERGE_INTO -H $BRANCH_NAME --title "🤖 Automatic PR to merge all changes into the '$MERGE_INTO' branch." --body '🤖 This PR was created automatically by a GitHub action to merge the changed files into this branch. It will be merged automatically. `Share and enjoy`')
|
||||
echo "PR URL is '$PR_URL'"
|
||||
IFS='/' read -ra parts <<< "$PR_URL"
|
||||
PR_NR=$(printf %s\\n "${parts[@]:(-1)}")
|
||||
@@ -272,7 +272,7 @@ jobs:
|
||||
|
||||
echo "Also merge everything into main since this is a release."
|
||||
echo 'create PR'
|
||||
PR_URL=$(gh pr create -B main -H develop --title "🤖 Automatic PR to merge all changes into the main branch." --body "🤖 Created by GitHub action")
|
||||
PR_URL=$(gh pr create -B main -H develop --title "🤖 Automatic PR to merge all changes into the main branch." --body "🤖 This PR was created automatically by a GitHub action to merge the changed files into this branch. It will be merged automatically. `Share and enjoy`")
|
||||
echo "PR URL is '$PR_URL'"
|
||||
|
||||
IFS='/' read -ra parts <<< "$PR_URL"
|
||||
|
||||
@@ -24,6 +24,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace FireflyIII\Helpers\Collector\Extensions;
|
||||
|
||||
use FireflyIII\Enums\TransactionTypeEnum;
|
||||
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
|
||||
use FireflyIII\Models\Bill;
|
||||
use FireflyIII\Models\Budget;
|
||||
@@ -919,6 +920,8 @@ trait MetaCollection
|
||||
{
|
||||
$this->withCategoryInformation();
|
||||
$this->query->whereNull('category_transaction_journal.category_id');
|
||||
// better fix for #10507
|
||||
$this->query->whereNotIn('transaction_types.type', [TransactionTypeEnum::OPENING_BALANCE->value]);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -1095,9 +1095,6 @@ class GroupCollector implements GroupCollectorInterface
|
||||
->whereNull('transaction_groups.deleted_at')
|
||||
->whereNull('transaction_journals.deleted_at')
|
||||
->whereNull('source.deleted_at')
|
||||
|
||||
// #10507 ignore opening balance.
|
||||
->where('transaction_types.type', '!=', TransactionTypeEnum::OPENING_BALANCE->value)
|
||||
->whereNotNull('transaction_groups.id')
|
||||
->whereNull('destination.deleted_at')
|
||||
->orderBy('transaction_journals.date', 'DESC')
|
||||
|
||||
@@ -29,6 +29,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
- [Discussion 10846](https://github.com/orgs/firefly-iii/discussions/10846) (Add support for WebP format in attachments) started by @Idestius
|
||||
- [Issue 10853](https://github.com/firefly-iii/firefly-iii/issues/10853) (Failed to Send Discord Notification) reported by @pimonteiro
|
||||
- [Issue 10854](https://github.com/firefly-iii/firefly-iii/issues/10854) (string / null in budget causes budget page to not render) reported by @4e868df3
|
||||
- [Discussion 10883](https://github.com/orgs/firefly-iii/discussions/10883) (Initial balance for account is missing from exported CSV) started by @ajaskiewiczpl
|
||||
|
||||
### API
|
||||
|
||||
|
||||
12
composer.lock
generated
12
composer.lock
generated
@@ -10738,16 +10738,16 @@
|
||||
},
|
||||
{
|
||||
"name": "larastan/larastan",
|
||||
"version": "v3.6.1",
|
||||
"version": "v3.7.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/larastan/larastan.git",
|
||||
"reference": "3c223047e374befd1b64959784685d6ecccf66aa"
|
||||
"reference": "6b7d28a2762a4b69f0f064e1e5b7358af11f04e4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/larastan/larastan/zipball/3c223047e374befd1b64959784685d6ecccf66aa",
|
||||
"reference": "3c223047e374befd1b64959784685d6ecccf66aa",
|
||||
"url": "https://api.github.com/repos/larastan/larastan/zipball/6b7d28a2762a4b69f0f064e1e5b7358af11f04e4",
|
||||
"reference": "6b7d28a2762a4b69f0f064e1e5b7358af11f04e4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -10815,7 +10815,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/larastan/larastan/issues",
|
||||
"source": "https://github.com/larastan/larastan/tree/v3.6.1"
|
||||
"source": "https://github.com/larastan/larastan/tree/v3.7.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -10823,7 +10823,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-08-25T07:24:56+00:00"
|
||||
"time": "2025-09-09T15:17:27+00:00"
|
||||
},
|
||||
{
|
||||
"name": "laravel-json-api/testing",
|
||||
|
||||
@@ -78,8 +78,8 @@ return [
|
||||
'running_balance_column' => env('USE_RUNNING_BALANCE', false),
|
||||
// see cer.php for exchange rates feature flag.
|
||||
],
|
||||
'version' => 'develop/2025-09-09',
|
||||
'build_time' => 1757425682,
|
||||
'version' => 'develop/2025-09-10',
|
||||
'build_time' => 1757479665,
|
||||
'api_version' => '2.1.0', // field is no longer used.
|
||||
'db_version' => 26,
|
||||
|
||||
|
||||
22
package-lock.json
generated
22
package-lock.json
generated
@@ -9923,9 +9923,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/regenerate-unicode-properties": {
|
||||
"version": "10.2.0",
|
||||
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz",
|
||||
"integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==",
|
||||
"version": "10.2.2",
|
||||
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz",
|
||||
"integrity": "sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -9936,18 +9936,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/regexpu-core": {
|
||||
"version": "6.2.0",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz",
|
||||
"integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==",
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.3.0.tgz",
|
||||
"integrity": "sha512-ulzJYRb0qgR4t8eTgHeL7nnKL/4ul2yjnuTBEDIpYG7cSs8CcADE1q18RFFChXLP8WwRgPrHThGbYplvASdujw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regenerate": "^1.4.2",
|
||||
"regenerate-unicode-properties": "^10.2.0",
|
||||
"regenerate-unicode-properties": "^10.2.2",
|
||||
"regjsgen": "^0.8.0",
|
||||
"regjsparser": "^0.12.0",
|
||||
"unicode-match-property-ecmascript": "^2.0.0",
|
||||
"unicode-match-property-value-ecmascript": "^2.1.0"
|
||||
"unicode-match-property-value-ecmascript": "^2.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
@@ -11377,9 +11377,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/unicode-match-property-value-ecmascript": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
|
||||
"integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz",
|
||||
"integrity": "sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
|
||||
@@ -87,11 +87,16 @@ let show = function () {
|
||||
if (this.entries.hasOwnProperty(i)) {
|
||||
const currencyCode = this.entries[i].currency_code;
|
||||
const foreignCurrencyCode = this.entries[i].foreign_currency_code;
|
||||
const primaryCurrencyCode = this.entries[i].primary_currency_code;
|
||||
|
||||
if (undefined === this.amounts[currencyCode]) {
|
||||
this.amounts[currencyCode] = 0;
|
||||
this.amounts[currencyCode] += parseFloat(this.entries[i].amount);
|
||||
}
|
||||
if (undefined === this.amounts[primaryCurrencyCode]) {
|
||||
this.amounts[primaryCurrencyCode] = 0;
|
||||
this.amounts[primaryCurrencyCode] += parseFloat(this.entries[i].pc_amount);
|
||||
}
|
||||
if (null !== foreignCurrencyCode && '' !== foreignCurrencyCode && undefined === this.amounts[foreignCurrencyCode]) {
|
||||
this.amounts[foreignCurrencyCode] = 0;
|
||||
this.amounts[foreignCurrencyCode] += parseFloat(this.entries[i].foreign_amount);
|
||||
|
||||
@@ -17,23 +17,23 @@
|
||||
<tbody>
|
||||
<tr>
|
||||
<th style="width:10%;">
|
||||
<template x-if="'Withdrawal' === groupProperties.transactionType">
|
||||
<template x-if="'withdrawal' === groupProperties.transactionType">
|
||||
<em class="fa fa-solid fa-arrow-left"
|
||||
:title="groupProperties.transactionTypeTranslated"></em>
|
||||
</template>
|
||||
|
||||
<template x-if="'Deposit' === groupProperties.transactionType">
|
||||
<template x-if="'deposit' === groupProperties.transactionType">
|
||||
<em class="fa-solid fa-arrow-right"
|
||||
:title="groupProperties.transactionTypeTranslated"></em>
|
||||
</template>
|
||||
|
||||
<template x-if="'Transfer' === groupProperties.transactionType">
|
||||
<template x-if="'transfer' === groupProperties.transactionType">
|
||||
<em class="fa-solid fa-rotate"
|
||||
:title="groupProperties.transactionTypeTranslated"></em>
|
||||
</template>
|
||||
<template
|
||||
x-if="'Transfer' !== groupProperties.transactionType && 'Deposit' !== groupProperties.transactionType && 'Withdrawal' !== groupProperties.transactionType">
|
||||
<span>TODO missing ICON</span>
|
||||
x-if="'transfer' !== groupProperties.transactionType && 'deposit' !== groupProperties.transactionType && 'withdrawal' !== groupProperties.transactionType">
|
||||
<span x-text="groupProperties.transactionType"></span>
|
||||
</template>
|
||||
</th>
|
||||
<td><span class="group_title" :data-group="groupProperties.id" x-text="groupProperties.title"></span></td>
|
||||
@@ -53,6 +53,18 @@
|
||||
<a class="btn btn-danger" :href="'./transactions/delete/' + groupProperties.id">
|
||||
<em class="fa-solid fa-trash"></em> {{ __('firefly.delete') }}
|
||||
</a>
|
||||
<div class="btn-group btn-group-sm" role="group">
|
||||
<button type="button" class="btn btn-primary dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
||||
{{ __('firefly.actions') }}
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li x-show="'withdrawal' !== groupProperties.transactionType"><a class="dropdown-item" href="{{ route('transactions.convert.index', ['withdrawal', $transactionGroup['id']]) }}">{{ __('firefly.convert_to_withdrawal') }}</a></li>
|
||||
<li x-show="'deposit' !== groupProperties.transactionType"><a class="dropdown-item" href="{{ route('transactions.convert.index', ['deposit', $transactionGroup['id']]) }}">{{ __('firefly.convert_to_deposit') }}</a></li>
|
||||
<li x-show="'transfer' !== groupProperties.transactionType"><a class="dropdown-item" href="{{ route('transactions.convert.index', ['transfer', $transactionGroup['id']]) }}">{{ __('firefly.convert_to_transfer') }}</a></li>
|
||||
<li><a class="dropdown-item" href="#">{{ __('firefly.clone') }}</a></li>
|
||||
<li><a class="dropdown-item" href="#">{{ __('firefly.clone_and_edit') }}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,25 +82,25 @@
|
||||
<em class="fa-solid fa-money-bill-wave" title="{{ __('firefly.amount') }}"></em>
|
||||
</th>
|
||||
<td>
|
||||
<template x-if="'Withdrawal' === groupProperties.transactionType">
|
||||
<template x-if="'withdrawal' === groupProperties.transactionType">
|
||||
<template x-for="(amount, code) in amounts">
|
||||
<span class="text-danger" x-text="formatMoney(amount*-1, code)"></span>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<template x-if="'Deposit' === groupProperties.transactionType">
|
||||
<template x-if="'deposit' === groupProperties.transactionType">
|
||||
<template x-for="(amount, code) in amounts">
|
||||
<span class="text-success" x-text="formatMoney(amount, code)"></span>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
<template x-if="'Transfer' === groupProperties.transactionType">
|
||||
<template x-if="'transfer' === groupProperties.transactionType">
|
||||
<template x-for="(amount, code) in amounts">
|
||||
<span class="text-info" x-text="formatMoney(amount, code)"></span>
|
||||
</template>
|
||||
</template>
|
||||
<template
|
||||
x-if="'Transfer' !== groupProperties.transactionType && 'Deposit' !== groupProperties.transactionType && 'Withdrawal' !== groupProperties.transactionType">
|
||||
x-if="'transfer' !== groupProperties.transactionType && 'deposit' !== groupProperties.transactionType && 'withdrawal' !== groupProperties.transactionType">
|
||||
<span>TODO PARSE MISSING AMOUNT</span>
|
||||
</template>
|
||||
</td>
|
||||
@@ -164,33 +176,33 @@
|
||||
:title="entry.source_account.name"
|
||||
x-text="entry.source_account.name"></a>
|
||||
→
|
||||
<template x-if="'Withdrawal' === groupProperties.transactionType">
|
||||
<template x-if="'withdrawal' === groupProperties.transactionType">
|
||||
<span class="text-danger"
|
||||
x-text="formatMoney(entry.amount*-1, entry.currency_code)"></span>
|
||||
</template>
|
||||
|
||||
<template x-if="'Deposit' === groupProperties.transactionType">
|
||||
<template x-if="'deposit' === groupProperties.transactionType">
|
||||
<span class="text-success"
|
||||
x-text="formatMoney(entry.amount, entry.currency_code)"></span>
|
||||
</template>
|
||||
|
||||
<template x-if="'Transfer' === groupProperties.transactionType">
|
||||
<template x-if="'transfer' === groupProperties.transactionType">
|
||||
<span class="text-info"
|
||||
x-text="formatMoney(entry.amount, entry.currency_code)"></span>
|
||||
</template>
|
||||
<template
|
||||
x-if="null !== entry.foreign_currency_code && 'Withdrawal' === groupProperties.transactionType">
|
||||
x-if="null !== entry.foreign_currency_code && '' !== entry.foreign_currency_code && 'withdrawal' === groupProperties.transactionType">
|
||||
<span class="text-muted"
|
||||
x-text="formatMoney(entry.foreign_amount*-1, entry.foreign_currency_code)"></span>
|
||||
x-text="formatMoney(entry.foreign_amount*-1, entry.foreign_currency_code) + 'y'"></span>
|
||||
</template>
|
||||
<template
|
||||
x-if="null !== entry.foreign_currency_code && 'Withdrawal' !== groupProperties.transactionType">
|
||||
x-if="null !== entry.foreign_currency_code && '' !== entry.foreign_currency_code && 'withdrawal' !== groupProperties.transactionType">
|
||||
<span class="text-muted"
|
||||
x-text="formatMoney(entry.foreign_amount, entry.foreign_currency_code)"></span>
|
||||
x-text="formatMoney(entry.foreign_amount, entry.foreign_currency_code) + 'x'"></span>
|
||||
</template>
|
||||
|
||||
<template
|
||||
x-if="'Transfer' !== groupProperties.transactionType && 'Deposit' !== groupProperties.transactionType && 'Withdrawal' !== groupProperties.transactionType">
|
||||
x-if="'transfer' !== groupProperties.transactionType && 'deposit' !== groupProperties.transactionType && 'withdrawal' !== groupProperties.transactionType">
|
||||
<span>TODO PARSE MISSING AMOUNT</span>
|
||||
</template>
|
||||
→
|
||||
|
||||
Reference in New Issue
Block a user