Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop

This commit is contained in:
James Cole committed 2026-09-30 12:40:29 +02:00
commit a26c40a86b
15 files changed
+45 -78

No files matched your search

@@ -148,7 +148,7 @@ final class AccountController extends Controller
$rangeVals = array_values($range);
$rangeIdx = 0;
$rangeCount = count($rangeDates);
$converter = new ExchangeRateConverter();
$converter = new ExchangeRateConverter();
while ($currentStart <= $params['end']) {
$label = $currentStart->toAtomString();
@@ -157,15 +157,16 @@ final class AccountController extends Controller
while ($rangeIdx < $rangeCount && $rangeDates[$rangeIdx] <= $currentStart) {
$previous = $rangeVals[$rangeIdx]['balance'];
if ($this->convertToPrimary) {
$pcPrevious = $rangeVals[$rangeIdx]['balance'];
$pcPrevious = $rangeVals[$rangeIdx]['balance'];
}
++$rangeIdx;
}
$currentSet['entries'][$label] = $previous;
if ($this->convertToPrimary) {
$pcPrevious = $converter->convert($currency, $this->primaryCurrency, $currentStart, $previous);
$pcPrevious = $converter->convert($currency, $this->primaryCurrency, $currentStart, $previous);
$currentSet['pc_entries'][$label] = $pcPrevious;
// convert for the current moment.
}
@@ -158,10 +158,7 @@ final class TagController extends Controller
'currency_id' => (string) $foreignCurrencyId,
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd(
(string) $response[$foreignKey]['difference'],
Steam::positive($journal['foreign_amount'])
);
$response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount']));
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference'];
}
}
@@ -155,10 +155,7 @@ final class TagController extends Controller
'currency_id' => (string) $foreignCurrencyId,
'currency_code' => $journal['foreign_currency_code'],
];
$response[$foreignKey]['difference'] = bcadd(
(string) $response[$foreignKey]['difference'],
Steam::positive($journal['foreign_amount'])
);
$response[$foreignKey]['difference'] = bcadd((string) $response[$foreignKey]['difference'], Steam::positive($journal['foreign_amount']));
$response[$foreignKey]['difference_float'] = (float) $response[$foreignKey]['difference']; // intentional float
}
}
@@ -198,13 +198,7 @@ final class BudgetLimitController extends Controller
if ($request->expectsJson()) {
$array = $limit->toArray();
// add some extra metadata:
$spentArr = $this->opsRepository->sumExpenses(
$limit->start_date,
$limit->end_date,
null,
new Collection()->push($budget),
$currency
);
$spentArr = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection()->push($budget), $currency);
$array['spent'] = $spentArr[$currency->id]['sum'] ?? '0';
$array['left_formatted'] = Amount::formatAnything($limit->transactionCurrency, bcadd($array['spent'], (string) $array['amount']));
$array['amount_formatted'] = Amount::formatAnything($limit->transactionCurrency, $limit['amount']);
@@ -272,10 +272,7 @@ final class IndexController extends Controller
if (array_key_exists($currency->id, $spentArr) && array_key_exists('sum', $spentArr[$currency->id])) {
$array['spent'][$currency->id]['spent'] = $spentArr[$currency->id]['sum'];
$array['spent'][$currency->id]['spent_outside'] = Steam::negative(bcsub(
$spentInLimits[$currency->id],
$spentArr[$currency->id]['sum']
));
$array['spent'][$currency->id]['spent_outside'] = Steam::negative(bcsub($spentInLimits[$currency->id], $spentArr[$currency->id]['sum']));
$array['spent'][$currency->id]['currency_id'] = $currency->id;
$array['spent'][$currency->id]['currency_symbol'] = $currency->symbol;
$array['spent'][$currency->id]['currency_decimal_places'] = $currency->decimal_places;
@@ -539,13 +539,7 @@ final class BudgetController extends Controller
}
// get spent amount in this period for this currency.
$sum = $this->opsRepository->sumExpenses(
$currentStart,
$currentEnd,
$accounts,
new Collection()->push($budget),
$currency
);
$sum = $this->opsRepository->sumExpenses($currentStart, $currentEnd, $accounts, new Collection()->push($budget), $currency);
$amount = Steam::positive($sum[$currency->id]['sum'] ?? '0');
$chartData[0]['entries'][$title] = Steam::bcround($amount, $currency->decimal_places);
+2 -14
View File
@@ -132,13 +132,7 @@ class CreateAutoBudgetLimits implements ShouldQueue
// if has one, calculate expenses and use that as a base.
$repository = app(OperationsRepositoryInterface::class);
$repository->setUser($autoBudget->budget->user);
$spent = $repository->sumExpenses(
$previousStart,
$previousEnd,
null,
new Collection()->push($autoBudget->budget),
$autoBudget->transactionCurrency
);
$spent = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection()->push($autoBudget->budget), $autoBudget->transactionCurrency);
$currencyId = $autoBudget->transaction_currency_id;
$spentAmount = $spent[$currencyId]['sum'] ?? '0';
Log::debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount));
@@ -228,13 +222,7 @@ class CreateAutoBudgetLimits implements ShouldQueue
// if has one, calculate expenses and use that as a base.
$repository = app(OperationsRepositoryInterface::class);
$repository->setUser($autoBudget->budget->user);
$spent = $repository->sumExpenses(
$previousStart,
$previousEnd,
null,
new Collection()->push($autoBudget->budget),
$autoBudget->transactionCurrency
);
$spent = $repository->sumExpenses($previousStart, $previousEnd, null, new Collection()->push($autoBudget->budget), $autoBudget->transactionCurrency);
$currencyId = $autoBudget->transaction_currency_id;
$spentAmount = $spent[$currencyId]['sum'] ?? '0';
Log::debug(sprintf('Spent in previous budget period (%s-%s) is %s', $previousStart->format('Y-m-d'), $previousEnd->format('Y-m-d'), $spentAmount));
@@ -222,14 +222,7 @@ trait AugumentData
$currentEnd->addMonth();
}
// primary currency amount.
$expenses = $opsRepository->sumExpenses(
$currentStart,
$currentEnd,
null,
$budgetCollection,
$entry->transactionCurrency,
$this->convertToPrimary
);
$expenses = $opsRepository->sumExpenses($currentStart, $currentEnd, null, $budgetCollection, $entry->transactionCurrency, $this->convertToPrimary);
$spent = $expenses[$currency->id]['sum'] ?? '0';
$entry->pc_spent = $spent;
@@ -354,11 +354,7 @@ class RecurringEnrichment implements EnrichmentInterface
/** @var RecurrenceRepetition $repetition */
foreach ($set as $repetition) {
$recurrence = $this->collection->filter(
static fn (Recurrence $item): bool => (int) $item->id === (int) $repetition->recurrence_id
)
->first()
;
$recurrence = $this->collection->filter(static fn (Recurrence $item): bool => (int) $item->id === (int) $repetition->recurrence_id)->first();
$fromDate = clone ($recurrence->latest_date ?? $recurrence->first_date);
$recurrenceId = (int) $repetition->recurrence_id;
$repId = (int) $repetition->id;
+1 -1
View File
@@ -79,7 +79,7 @@ return [
// see cer.php for exchange rates feature flag.
],
'version' => 'develop/2026-09-30',
'build_time' => 1790748773,
'build_time' => 1790763296,
'api_version' => '2.1.0', // field is no longer used.
'db_version' => 28, // field is no longer used.
@@ -178,11 +178,10 @@ let index = function () {
document.querySelector(`div.search-filter[data-column="${column}"] input`).value = "";
// remove class from parent if was used to sort
if(null !== document
.querySelector(`th.sortable_sorted[data-column="${column}"]`)) {
document
.querySelector(`th.sortable_sorted[data-column="${column}"]`)
.classList.remove("is-searching");
if (null !== document.querySelector(`th.sortable_sorted[data-column="${column}"]`)) {
document
.querySelector(`th.sortable_sorted[data-column="${column}"]`)
.classList.remove("is-searching");
}
let input = document.querySelector(`div.search-filter[data-column="${column}"]`);
@@ -202,13 +201,12 @@ let index = function () {
document.querySelector(`span.title[data-column="${column}"]`).classList.add("d-none");
document.querySelector(`span.search-spacer[data-column="${column}"]`).classList.add("d-none");
// add class to parent if it's used to sort
if(null !== document.querySelector(`th.sortable_sorted[data-column="${column}"]`)) {
if (null !== document.querySelector(`th.sortable_sorted[data-column="${column}"]`)) {
document
.querySelector(`th.sortable_sorted[data-column="${column}"]`)
.classList.add("is-searching");
}
// show search input
let input = document.querySelector(`div.search-filter[data-column="${column}"]`);
input.classList.remove("d-none");
@@ -116,12 +116,17 @@ let rates = function () {
}
if (0 !== parseInt(this.rates[index].rate_id)) {
// console.log("[a] PUT, not POST.", this.rates[index]);
new Put().put({
date: this.rates[index].date_field,
rate: this.rates[index].rate
}, { id: this.rates[index].rate_id }).then(() => {
this.updating = false;
});
new Put()
.put(
{
date: this.rates[index].date_field,
rate: this.rates[index].rate,
},
{ id: this.rates[index].rate_id },
)
.then(() => {
this.updating = false;
});
}
}
if ("" !== this.rates[index].inverse) {
@@ -145,10 +150,13 @@ let rates = function () {
if (0 !== parseInt(this.rates[index].inverse_id)) {
// console.log("[a] PUT, not POST.", this.rates[index]);
new Put()
.put({
rate: this.rates[index].inverse,
date: this.rates[index].date_field
}, { id: this.rates[index].inverse_id })
.put(
{
rate: this.rates[index].inverse,
date: this.rates[index].date_field,
},
{ id: this.rates[index].inverse_id },
)
.then(() => {
this.updating = false;
});
@@ -86,7 +86,9 @@ export function selectDestinationAccount(item, ac) {
// currency_code: item.currency_code,
// account_currency_code: item.account_currency_code,
// };
document.querySelector("#form")._x_dataStack[0].changedDestinationAccount("selectDestinationAccount("+index+")");
document
.querySelector("#form")
._x_dataStack[0].changedDestinationAccount("selectDestinationAccount(" + index + ")");
}
export function changeSourceAccount(item, ac) {
@@ -69,7 +69,9 @@ export function disableSplitInputs() {
// if is withdrawal, pre-fill the destination account with the first entry's destination account.
if ("withdrawal" === this.groupProperties.transactionType) {
this.entries[i].destination_account = JSON.parse(JSON.stringify(this.entries[i - 1].destination_account));//structuredClone();
this.entries[i].destination_account = JSON.parse(
JSON.stringify(this.entries[i - 1].destination_account),
); //structuredClone();
}
// disable source when withdrawal or transfer
@@ -18,7 +18,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {format} from 'date-fns/format';
import { format } from "date-fns/format";
/**
*
@@ -55,7 +55,7 @@ export function parseFromEntries(entries, originals, transactionType) {
current.currency_code = entry.currency_code;
// dates
current.date = format(new Date(entry.date),"yyyy-MM-dd'T'HH:mm:ssxxx");
current.date = format(new Date(entry.date), "yyyy-MM-dd'T'HH:mm:ssxxx");
// console.log('Full date thing', current.date);
if (i > 0 && !!returnArray[0]) {
// console.log("Overrule date for entry ", i, " with ", returnArray[0].date);