Compare commits

...

7 Commits

Author SHA1 Message Date
Julian Dominguez-Schatz
65c0a5a316 🔖 (25.3.1) (#4497)
* fix negative amount parsing (#4489)

* fix negative amount parsing

* note

* Remove used release notes

* Empty commit to bump ci

* Fix number input on mobile with hidden decimals (#4503)

* Fix number input on mobile with hidden decimals

* Add release notes

* Remove used release notes

* Empty commit to bump ci

* Bump non-server versions

* Bump sync-server

---------

Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-03-02 20:17:29 -05:00
github-actions[bot]
b0deedb411 🔖 (25.3.0) (#4478)
* 🔖 (25.3.0)

* Empty commit to bump ci

* Remove used release notes

* Empty commit to bump ci

* Bump sync-server for web release

* Remove used release notes

* Empty commit to bump ci

---------

Co-authored-by: jfdoming <9922514+jfdoming@users.noreply.github.com>
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2025-02-28 20:19:57 -05:00
Michael Clark
103d95bbc8 🐳 Docker images to be published under the actual repo (#4483)
* docker images to be published to the main repo

* release notes
2025-02-28 19:38:34 -05:00
Julian Dominguez-Schatz
d11fc59ec9 Update bump-package-versions script to handle no input version (#4477) 2025-02-27 19:15:15 -05:00
Matt Fiddaman
1c931cf01c add last bank sync tracking back in (#4472)
* add last sync tracking back in

* note

* type

* db.update
2025-02-27 19:41:24 +00:00
Matt Fiddaman
7f50c73866 fix category group deletion on mobile (#4469)
* fix deleting category groups on mobile

* note
2025-02-27 17:17:07 +00:00
youngcw
a7cde1f90d fix #4445 (#4468)
* change condition

* new message

* fix

* lint
2025-02-27 10:06:08 -07:00
92 changed files with 102 additions and 495 deletions

View File

@@ -1,7 +1,11 @@
#!/bin/bash
set -euo pipefail
version="${1#v}"
if [ "$#" -gt 0 ]; then
version="${1#v}"
else
version=""
fi
files_to_bump=(
packages/api/package.json

View File

@@ -24,6 +24,7 @@ env:
IMAGES: |
actualbudget/actual-server
ghcr.io/actualbudget/actual-server
ghcr.io/actualbudget/actual
# Creates the following tags:
# - actual-server:edge

View File

@@ -13,6 +13,7 @@ env:
IMAGES: |
actualbudget/actual-server
ghcr.io/actualbudget/actual-server
ghcr.io/actualbudget/actual
# Creates the following tags:
# - actual-server:latest (see docker/metadata-action flavor inputs, below)

View File

@@ -1,6 +1,6 @@
{
"name": "@actual-app/api",
"version": "25.2.1",
"version": "25.3.1",
"license": "MIT",
"description": "An API for Actual",
"engines": {

View File

@@ -1,6 +1,6 @@
{
"name": "@actual-app/web",
"version": "25.2.1",
"version": "25.3.1",
"license": "MIT",
"files": [
"build"

View File

@@ -159,7 +159,7 @@ export function Budget() {
);
} else {
dispatch(collapseModals('category-group-menu'));
dispatch(deleteGroup(groupId));
dispatch(deleteGroup({ id: groupId }));
}
},
[categoryGroups, dispatch],

View File

@@ -3,7 +3,7 @@
"author": "Actual",
"productName": "Actual",
"description": "A simple and powerful personal finance system",
"version": "25.2.1",
"version": "25.3.1",
"scripts": {
"clean": "rm -rf dist",
"update-client": "bin/update-client",

View File

@@ -628,13 +628,13 @@ type SyncResponse = {
updatedAccounts: Array<AccountEntity['id']>;
};
function handleSyncResponse(
async function handleSyncResponse(
res: {
added: Array<TransactionEntity['id']>;
updated: Array<TransactionEntity['id']>;
},
acct: db.DbAccount,
): SyncResponse {
): Promise<SyncResponse> {
const { added, updated } = res;
const newTransactions: Array<TransactionEntity['id']> = [];
const matchedTransactions: Array<TransactionEntity['id']> = [];
@@ -647,6 +647,9 @@ function handleSyncResponse(
updatedAccounts.push(acct.id);
}
const ts = new Date().getTime().toString();
await db.update('accounts', { id: acct.id, last_sync: ts });
return {
newTransactions,
matchedTransactions,
@@ -745,7 +748,7 @@ async function accountsBankSync({
acct.bankId,
);
const syncResponseData = handleSyncResponse(syncResponse, acct);
const syncResponseData = await handleSyncResponse(syncResponse, acct);
newTransactions.push(...syncResponseData.newTransactions);
matchedTransactions.push(...syncResponseData.matchedTransactions);
@@ -848,7 +851,10 @@ async function simpleFinBatchSync({
),
);
} else {
const syncResponseData = handleSyncResponse(syncResponse.res, account);
const syncResponseData = await handleSyncResponse(
syncResponse.res,
account,
);
newTransactions.push(...syncResponseData.newTransactions);
matchedTransactions.push(...syncResponseData.matchedTransactions);

View File

@@ -284,7 +284,7 @@ async function processCleanup(month: string): Promise<Notification> {
}
const budgetAvailable = await getSheetValue(sheetName, `to-budget`);
if (budgetAvailable <= 0) {
if (budgetAvailable < 0) {
warnings.push('Global: No funds are available to reallocate.');
}
@@ -351,6 +351,11 @@ async function processCleanup(month: string): Promise<Notification> {
message: 'Global: Funds not available:',
pre: warnings.join('\n\n'),
};
} else if (budgetAvailable === 0) {
return {
type: 'message',
message: 'All categories were up to date.',
};
} else {
return {
type: 'message',

View File

@@ -1,4 +1,9 @@
import { looselyParseAmount, getNumberFormat, setNumberFormat } from './util';
import {
looselyParseAmount,
getNumberFormat,
setNumberFormat,
currencyToAmount,
} from './util';
describe('utility functions', () => {
test('looseParseAmount works with basic numbers', () => {
@@ -108,4 +113,63 @@ describe('utility functions', () => {
formatter = getNumberFormat().formatter;
expect(formatter.format(Number('1234.56'))).toBe('1235');
});
test('currencyToAmount works with basic numbers', () => {
expect(currencyToAmount('3')).toBe(3);
expect(currencyToAmount('3.4')).toBe(3.4);
expect(currencyToAmount('3.45')).toBe(3.45);
expect(currencyToAmount('3.45060')).toBe(3.4506);
});
test('currencyToAmount works with varied formats', () => {
setNumberFormat({ format: 'comma-dot', hideFraction: true });
expect(currencyToAmount('3,45')).toBe(3.45);
expect(currencyToAmount('3,456')).toBe(3456);
expect(currencyToAmount('3,45000')).toBe(345000);
expect(currencyToAmount("3'456.78")).toBe(3456.78);
expect(currencyToAmount("3'456.78000")).toBe(3456.78);
expect(currencyToAmount('1,00,000.99')).toBe(100000.99);
expect(currencyToAmount('1,00,000.99000')).toBe(100000.99);
});
test('currencyToAmount works with leading decimal characters', () => {
expect(currencyToAmount('.45')).toBe(0.45);
expect(currencyToAmount(',45')).toBe(0.45);
});
test('currencyToAmount works with negative numbers', () => {
expect(currencyToAmount('-3')).toBe(-3);
expect(currencyToAmount('-3.45')).toBe(-3.45);
expect(currencyToAmount('-3,45')).toBe(-3.45);
});
test('currencyToAmount works with non-fractional numbers', () => {
setNumberFormat({ format: 'comma-dot', hideFraction: false });
expect(currencyToAmount('3.')).toBe(3);
expect(currencyToAmount('3,')).toBe(3);
expect(currencyToAmount('3,000')).toBe(3000);
expect(currencyToAmount('3,000.')).toBe(3000);
});
test('currencyToAmount works with hidden fractions', () => {
setNumberFormat({ format: 'comma-dot', hideFraction: true });
expect(currencyToAmount('3.45')).toBe(3.45);
expect(currencyToAmount('3.456')).toBe(3.456);
expect(currencyToAmount('3.4500')).toBe(3.45);
expect(currencyToAmount('3.')).toBe(3);
expect(currencyToAmount('3,')).toBe(3);
expect(currencyToAmount('3,000')).toBe(3000);
expect(currencyToAmount('3,000.')).toBe(3000);
});
test('currencyToAmount works with dot-comma', () => {
setNumberFormat({ format: 'dot-comma', hideFraction: false });
expect(currencyToAmount('3,45')).toBe(3.45);
expect(currencyToAmount('3,456')).toBe(3.456);
expect(currencyToAmount('3,4500')).toBe(3.45);
expect(currencyToAmount('3,')).toBe(3);
expect(currencyToAmount('3.')).toBe(3);
expect(currencyToAmount('3.000')).toBe(3000);
expect(currencyToAmount('3.000,')).toBe(3000);
});
});

View File

@@ -396,12 +396,12 @@ export function currencyToAmount(currencyAmount: string): Amount | null {
if (
!match ||
(match[0] === getNumberFormat().thousandsSeparator &&
match.index + 4 === currencyAmount.length)
match.index + 4 <= currencyAmount.length)
) {
fraction = null;
integer = currencyAmount.replace(/\D/g, '');
integer = currencyAmount.replace(/[^\d-]/g, '');
} else {
integer = currencyAmount.slice(0, match.index).replace(/\D/g, '');
integer = currencyAmount.slice(0, match.index).replace(/[^\d-]/g, '');
fraction = currencyAmount.slice(match.index + 1);
}

View File

@@ -1,6 +1,6 @@
{
"name": "@actual-app/sync-server",
"version": "25.2.1",
"version": "25.3.1",
"license": "MIT",
"description": "actual syncing server",
"type": "module",
@@ -24,7 +24,7 @@
},
"dependencies": {
"@actual-app/crdt": "2.1.0",
"@actual-app/web": "25.2.1",
"@actual-app/web": "25.3.1",
"bcrypt": "^5.1.1",
"better-sqlite3": "^11.7.0",
"body-parser": "^1.20.3",

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [jfdoming]
---
Fix types of `send` function

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MatissJanis]
---
Introduce `@actual-app/components` - package with reusable components.

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [joel-jeremy]
---
useDisplayPayee hook to unify payee names in mobile and desktop.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [jfdoming]
---
Make `loot-core` compatible with `exactOptionalPropertyTypes`

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Convert playwright page models to TypeScript.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Move transactions related server handlers from main.ts to server/transactions/app.ts

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [harrydigos]
---
Fix deleting rules considering the applied filters

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Move accounts related server handlers from main.ts to server/accounts/app.ts

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [NullScope]
---
Fix GoCardless transaction ID to fallback to it's own generated ID on sync

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
[TypeScript] Make `runQuery` generic to make it easy to type DB query results.

View File

@@ -1,6 +0,0 @@
---
category: Features
authors: [matt-fidd]
---
Add a UI for bank sync settings

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [MattFaz]
---
Add percentage adjustments to schedule templates

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on useSelected.tsx

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on useProperFocus.tsx

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on usePayees.ts

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on useCategories.ts

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on useAccounts.ts

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on TransactionsTable.jsx

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on TransactionList.jsx

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on Titlebar.tsx

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Fix react-hooks/exhaustive-deps error on table.tsx

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [youngcw]
---
Fix nynab importer failing on duplicate categories

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [youngcw]
---
Properly handle nynab hidden categories/groups on import

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [youngcw]
---
Fix tracking budget income templates

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [jfdoming]
---
Add an action to automatically generate release PRs

View File

@@ -1,6 +0,0 @@
---
category: Features
authors: [jfdoming]
---
Foundations for the budget automations UI

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [MikesGlitch]
---
Fix hard crash when closing cloud budget on Electron

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Moving the sync-server from the actual-server repository into the actual repostiory

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [ChickenSaysBak]
---
Fix calendar interaction when editing reports dashboard

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [matt-fidd]
---
Rename migrations to realign with the convention

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MatissJanis]
---
Move more reusable components to `@actual-app/components`.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MatissJanis]
---
Disallow importing `@actual-app/web` in `loot-core` - circular dependencies.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Making Server related github actions run only when server files change

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MatissJanis]
---
Replace `loot-core/src/*` imports with `loot-core/*`

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MatissJanis]
---
API: remove deprecated exports of methods.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Updating the workflows to ignore directories properly

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [jfdoming]
---
Correct link to translation setup for local install

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [matt-fidd]
---
Ensure SimpleFIN transactions are sorted by date

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [UnderKoen]
---
Rule action templating now works with helpers with no arguments

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MatissJanis]
---
Updating some common component imports to the new component-lib path.

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [MatissJanis]
---
Fix "category is (nothing)" filter crashing the spending analysis report widget.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [matt-fidd]
---
Bring server in line with actual linting rules

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Adding typescript type for the global-store.json setting file

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Update package name of sync server to be consistent with the rest of the workspace

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [lelemm]
---
Sync server development mode with react fast refresh

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [MikesGlitch]
---
Prevent the app getting stuck on the "Initializing the connection to the local database..." screen

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [adastx]
---
Add button to go to current month in budget view on mobile

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [langelgjm]
---
Ignore CSV inOutMode during OFX imports

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [AntoineTA]
---
Ensure decimal separator is recognized independantly of the configured number format.

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [MMichotte]
---
Provides a default fallback payeename value ('undefined') for the CBC bank in case the payeename is missing.

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [AlbertoCortina]
---
Remove deprecated components in favour of components from @actual-app library

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [michalgolab]
---
Add BANK_MILLENNIUM_BIGBPLPW, BNP_PL_PPABPLPK, MBANK_RETAIL_BREXPLPW to BANKS_WITH_LIMITED_HISTORY constant.

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [lelemm]
---
Fix for User directory page that was calling the api every frame

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Fix new proxy middleware importing in production when only required in developement

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [matt-fidd]
---
Update bank sync mapping data for existing transactions on sync

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Improving Electron logging to send logs created before startup to dev tools

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [lelemm]
---
Extending translations for components: Account, SidebarCategory, TotalsList, MobileNavTabs, AccountTransactions (Mobile), Accounts (Mobile), BudgetTable (Mobile), TransactionEdit (Mobile), TransactionList (Mobile), TransactionListItem (Mobile), CategoryMenuModal, CreateLocalAccountModal, ImportModal, ReportSideBar, CustomReport, Spending, Export, TransactionsTable

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
[TypeScript] Add types for SpreadsheetProvider

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [matt-fidd]
---
Bump vitest to 1.6.1

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [matt-fidd]
---
Bump express version

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [matt-fidd]
---
Fix crash during bank sync when the payee is not found

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [lelemm]
---
Start the application with the browser's default language

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [lelemm]
---
Fix `On budget` / `Off budget` underline with translated languages

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [joel-jeremy]
---
Extract preferences related server handlers from main.ts to server/preferences/app.ts

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [lelemm]
---
Added `ACTUAL_OPENID_ENFORCE=true` enviroment variable to enforce only OpenID auth.

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [andrew--r]
---
Automatically adjust height of modals to fit the visible viewport when the keyboard is open on mobile

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [matt-fidd]
---
Prevent GitHub docker workflow from running on pushes to forks

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [lelemm]
---
Fix the default language init for electron

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [joel-jeremy]
---
[Mobile] Change budget table colors when on non-current month

View File

@@ -1,6 +0,0 @@
---
category: Enhancements
authors: [matt-fidd]
---
Sort upcoming schedules by date then amount so deposits come before payments

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [matt-fidd]
---
Change i18n errors to info

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [matt-fidd]
---
Fix row spacing on bank sync page

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [alecbakholdin]
---
Fixed bug where partially erasing search string would not reset search and result in incorrect search results.

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [alecbakholdin]
---
Fixed bug where navigating to payees page by clicking "manage payees" with an empty payee from a transaction would result in a crash.

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [jfdoming]
---
Add missing space in translation for bank sync

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [jfdoming]
---
Fix crash when deleting child transactions from an errored split

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [matt-fidd]
---
Dynamically load GoCardless handlers

View File

@@ -1,6 +0,0 @@
---
category: Maintenance
authors: [MikesGlitch]
---
Updating readme regarding the consolidation of the Actual-Server and Actual repos

View File

@@ -1,6 +0,0 @@
---
category: Bugfix
authors: [MikesGlitch]
---
Fix ESM bug on Windows when loading gocardless banks

View File

@@ -84,7 +84,7 @@ __metadata:
resolution: "@actual-app/sync-server@workspace:packages/sync-server"
dependencies:
"@actual-app/crdt": "npm:2.1.0"
"@actual-app/web": "npm:25.2.1"
"@actual-app/web": "npm:25.3.1"
"@babel/preset-typescript": "npm:^7.20.2"
"@types/bcrypt": "npm:^5.0.2"
"@types/better-sqlite3": "npm:^7.6.12"
@@ -125,10 +125,10 @@ __metadata:
languageName: unknown
linkType: soft
"@actual-app/web@npm:25.2.1":
version: 25.2.1
resolution: "@actual-app/web@npm:25.2.1"
checksum: 10/b6dc258b7de1b710c6a9cbfd35edebb82a29b84ac031b90a0cafa2af1618c482b0f3b81e47901b9beba457e77d962fe7083f82ed0091d0fa63724cf2bd3c8f56
"@actual-app/web@npm:25.3.1":
version: 25.3.1
resolution: "@actual-app/web@npm:25.3.1"
checksum: 10/a582c288b6ee5414dc0b8bf6bc10c585bd5ddb3612a564142a4f44cf6a38bfd0cecc5cbcdc3781d8be6891fef12d588d4179e7e0582f53b751184d8aaba9e43b
languageName: node
linkType: hard