diff --git a/app/Listeners/Model/Account/UpdatesAccountInformation.php b/app/Listeners/Model/Account/UpdatesAccountInformation.php
index 1f5f1160da..e4419cc54b 100644
--- a/app/Listeners/Model/Account/UpdatesAccountInformation.php
+++ b/app/Listeners/Model/Account/UpdatesAccountInformation.php
@@ -1,5 +1,26 @@
.
+ */
+
declare(strict_types=1);
/*
diff --git a/app/Listeners/Security/System/HandlesNewUserRegistration.php b/app/Listeners/Security/System/HandlesNewUserRegistration.php
index 4a951c94e3..af3d2df704 100644
--- a/app/Listeners/Security/System/HandlesNewUserRegistration.php
+++ b/app/Listeners/Security/System/HandlesNewUserRegistration.php
@@ -1,5 +1,26 @@
.
+ */
+
declare(strict_types=1);
/*
diff --git a/public/v1/js/css/app.css b/public/v1/js/css/app.css
index 8b13789179..d52ac0aecf 100755
--- a/public/v1/js/css/app.css
+++ b/public/v1/js/css/app.css
@@ -1 +1,21 @@
+/*
+ * app.css
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
diff --git a/public/v1/js/css/layout.css b/public/v1/js/css/layout.css
index 8b13789179..8f78b70d25 100755
--- a/public/v1/js/css/layout.css
+++ b/public/v1/js/css/layout.css
@@ -1 +1,21 @@
+/*
+ * layout.css
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
diff --git a/resources/assets/v3/js/pages/transactions/create.js b/resources/assets/v3/js/pages/transactions/create.js
index e0be37d9bf..82ea8c038e 100644
--- a/resources/assets/v3/js/pages/transactions/create.js
+++ b/resources/assets/v3/js/pages/transactions/create.js
@@ -52,6 +52,7 @@ import {onMapClick} from './shared/on-map-click.js';
import {onMapZoom} from "./shared/on-map-zoom.js";
import {clearLocation} from './shared/clear-location.js';
import bootstrap from "bootstrap/dist/js/bootstrap.bundle.js";
+import {removeSplit} from "./shared/remove-split.js";
let create = function () {
@@ -62,6 +63,9 @@ let create = function () {
// transactions are stored in "entries":
entries: [],
+ // links are stored in "links" for each transaction journal.
+ links: [],
+
// maps are stored in this array so they can be referred to.
maps: [],
markers: [],
@@ -155,6 +159,7 @@ let create = function () {
showMessageOrRedirectUser: showMessageOrRedirectUser,
parseErrors: parseErrors,
addSplit:addSplit,
+ removeSplit: removeSplit,
clearSourceAccount: clearSourceAccount,
clearDestinationAccount: clearDestinationAccount,
detectTransactionType: detectTransactionType,
@@ -347,12 +352,7 @@ let create = function () {
});
},
- removeSplit(index) {
- this.entries.splice(index, 1);
- // fall back to index 0
- const triggerFirstTabEl = document.querySelector('#split-0-tab')
- triggerFirstTabEl.click();
- },
+
}
}
diff --git a/resources/assets/v3/js/pages/transactions/edit.js b/resources/assets/v3/js/pages/transactions/edit.js
index 4108d85e0e..b20dd7aeda 100644
--- a/resources/assets/v3/js/pages/transactions/edit.js
+++ b/resources/assets/v3/js/pages/transactions/edit.js
@@ -54,6 +54,7 @@ import 'leaflet/dist/leaflet.css';
import {onMapClick} from './shared/on-map-click.js';
import {onMapZoom} from './shared/on-map-zoom.js';
import {clearLocation} from './shared/clear-location.js';
+import {removeSplit} from "./shared/remove-split.js";
const urls = getUrls();
@@ -65,6 +66,7 @@ let transactions = function () {
// transactions are stored in "entries":
entries: [],
originals: [],
+ links: [],
// maps are stored in this array so they can be referred to.
maps: [],
@@ -113,6 +115,7 @@ let transactions = function () {
// properties for the entire transaction group
groupProperties: {
transactionType: 'unknown',
+ titleErrors: [],
title: null,
editTitle: null,
id: null, totalAmount: 0,
@@ -152,6 +155,7 @@ let transactions = function () {
onMapClick: onMapClick,
onMapZoom: onMapZoom,
clearLocation: clearLocation,
+ removeSplit: removeSplit,
// part of the account selection auto-complete
diff --git a/resources/assets/v3/js/pages/transactions/shared/add-split.js b/resources/assets/v3/js/pages/transactions/shared/add-split.js
index 8b74c2e7b7..379ddd9996 100644
--- a/resources/assets/v3/js/pages/transactions/shared/add-split.js
+++ b/resources/assets/v3/js/pages/transactions/shared/add-split.js
@@ -24,6 +24,7 @@ import {addAllAutocompleteToForm} from "./add-autocomplete.js";
export function addSplit() {
console.log('addSplit()');
this.entries.push(createEmptySplit());
+ this.links.push([]);
this.disableSplitAccounts();
this.addAllAutocompleteToForm();
this.addTabListener();
diff --git a/resources/assets/v3/js/pages/transactions/shared/clear-fields.js b/resources/assets/v3/js/pages/transactions/shared/clear-fields.js
index 2d2d637494..d4d85856a0 100644
--- a/resources/assets/v3/js/pages/transactions/shared/clear-fields.js
+++ b/resources/assets/v3/js/pages/transactions/shared/clear-fields.js
@@ -1,3 +1,23 @@
+/*
+ * clear-fields.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
import {getAccount} from "./create-empty-split.js";
export function clearSourceAccount(index) {
diff --git a/resources/assets/v3/js/pages/transactions/shared/clear-location.js b/resources/assets/v3/js/pages/transactions/shared/clear-location.js
index caa5d11edb..4d9994878c 100644
--- a/resources/assets/v3/js/pages/transactions/shared/clear-location.js
+++ b/resources/assets/v3/js/pages/transactions/shared/clear-location.js
@@ -1,3 +1,23 @@
+/*
+ * clear-location.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
export function clearLocation(e) {
let index = parseInt(e.currentTarget.dataset.index);
diff --git a/resources/assets/v3/js/pages/transactions/shared/detect-transaction-type.js b/resources/assets/v3/js/pages/transactions/shared/detect-transaction-type.js
index b233a01ac5..e93bd58d21 100644
--- a/resources/assets/v3/js/pages/transactions/shared/detect-transaction-type.js
+++ b/resources/assets/v3/js/pages/transactions/shared/detect-transaction-type.js
@@ -1,3 +1,23 @@
+/*
+ * detect-transaction-type.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
export function detectTransactionType() {
const sourceType = this.entries[0].source_account.type ?? 'unknown';
const destType = this.entries[0].destination_account.type ?? 'unknown';
diff --git a/resources/assets/v3/js/pages/transactions/shared/determine-amount-currency.js b/resources/assets/v3/js/pages/transactions/shared/determine-amount-currency.js
index 5521046844..6709f0c3e0 100644
--- a/resources/assets/v3/js/pages/transactions/shared/determine-amount-currency.js
+++ b/resources/assets/v3/js/pages/transactions/shared/determine-amount-currency.js
@@ -1,3 +1,23 @@
+/*
+ * determine-amount-currency.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
export function determineAmountCurrency(code) {
let list = [];
let currency;
diff --git a/resources/assets/v3/js/pages/transactions/shared/display-map.js b/resources/assets/v3/js/pages/transactions/shared/display-map.js
index 051eb21437..311d9fa4e7 100644
--- a/resources/assets/v3/js/pages/transactions/shared/display-map.js
+++ b/resources/assets/v3/js/pages/transactions/shared/display-map.js
@@ -1,3 +1,23 @@
+/*
+ * display-map.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
export function displayMap(index) {
index = parseInt(index);
// show location?
diff --git a/resources/assets/v3/js/pages/transactions/shared/load-custom-fields.js b/resources/assets/v3/js/pages/transactions/shared/load-custom-fields.js
index 8334731c9c..5accb2a71d 100644
--- a/resources/assets/v3/js/pages/transactions/shared/load-custom-fields.js
+++ b/resources/assets/v3/js/pages/transactions/shared/load-custom-fields.js
@@ -1,4 +1,24 @@
+/*
+ * load-custom-fields.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
import Preferences from '../../../api/preferences/index.js';
export function loadCustomFields() {
diff --git a/resources/assets/v3/js/pages/transactions/shared/on-map-click.js b/resources/assets/v3/js/pages/transactions/shared/on-map-click.js
index d8c3468df4..2f48101134 100644
--- a/resources/assets/v3/js/pages/transactions/shared/on-map-click.js
+++ b/resources/assets/v3/js/pages/transactions/shared/on-map-click.js
@@ -1,4 +1,24 @@
+/*
+ * on-map-click.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
import L from 'leaflet';
import markerIcon from "leaflet/dist/images/marker-icon.png";
import markerRetinaIcon from "leaflet/dist/images/marker-icon-2x.png";
diff --git a/resources/assets/v3/js/pages/transactions/shared/on-map-zoom.js b/resources/assets/v3/js/pages/transactions/shared/on-map-zoom.js
index 646bc78d4f..37b1db7aa2 100644
--- a/resources/assets/v3/js/pages/transactions/shared/on-map-zoom.js
+++ b/resources/assets/v3/js/pages/transactions/shared/on-map-zoom.js
@@ -1,4 +1,24 @@
+/*
+ * on-map-zoom.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
import L from 'leaflet';
import markerIcon from "leaflet/dist/images/marker-icon.png";
import markerRetinaIcon from "leaflet/dist/images/marker-icon-2x.png";
diff --git a/resources/assets/v3/js/pages/transactions/shared/remove-split.js b/resources/assets/v3/js/pages/transactions/shared/remove-split.js
new file mode 100644
index 0000000000..844b241a73
--- /dev/null
+++ b/resources/assets/v3/js/pages/transactions/shared/remove-split.js
@@ -0,0 +1,27 @@
+/*
+ * remove-split.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+export function removeSplit(index) {
+ this.entries.splice(index, 1);
+ this.links.splice(index, 1);
+ // fall back to index 0
+ const triggerFirstTabEl = document.querySelector('#split-0-tab')
+ triggerFirstTabEl.click();
+};
diff --git a/resources/assets/v3/js/pages/transactions/shared/render-map.js b/resources/assets/v3/js/pages/transactions/shared/render-map.js
index e35cb2dc41..9e23c8c56a 100644
--- a/resources/assets/v3/js/pages/transactions/shared/render-map.js
+++ b/resources/assets/v3/js/pages/transactions/shared/render-map.js
@@ -1,4 +1,24 @@
+/*
+ * render-map.js
+ * Copyright (c) 2026 james@firefly-iii.org
+ *
+ * This file is part of Firefly III (https://github.com/firefly-iii).
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
import L from 'leaflet';
import markerIcon from "leaflet/dist/images/marker-icon.png";
import markerRetinaIcon from "leaflet/dist/images/marker-icon-2x.png";
diff --git a/resources/views/components/transaction/split.blade.php b/resources/views/components/transaction/split.blade.php
index 8c8037aee5..9420bad0a6 100644
--- a/resources/views/components/transaction/split.blade.php
+++ b/resources/views/components/transaction/split.blade.php
@@ -1,4 +1,5 @@
-
+
+
+
+
+
+
+
+
+
+
+
+ Bla bla bla explanation.
+
+
+ This transaction has no relations to other transactions (yet).
+
+
+
+
+
+
+
+
+
+ | Transaction relations |
+
+
+ | Pays for / is paid by #123: something else |
+
+ switch,change, del
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/partials/form/transaction/links.blade.php b/resources/views/partials/form/transaction/links.blade.php
index 0722661c3a..b7470ca4c2 100644
--- a/resources/views/partials/form/transaction/links.blade.php
+++ b/resources/views/partials/form/transaction/links.blade.php
@@ -7,12 +7,8 @@
diff --git a/resources/views/transactions/create.blade.php b/resources/views/transactions/create.blade.php
index 4b3bce295e..955e6cd1ce 100644
--- a/resources/views/transactions/create.blade.php
+++ b/resources/views/transactions/create.blade.php
@@ -9,59 +9,6 @@
-
-
-
-
-
-
-
-
-
-
-
- Bla bla bla explanation
-
- This transaction has no relations to other transactions (yet)
-
-
-
-
-
-
This transaction is or will be...
-
-
-
-
-
- Add a new relation
- This transaction: [ -- relation --] [ -- transaction -- ] [ OK ]
-
-
-
-
-
-
-
-
-
-