Commit Graph
1960 Commits
Author SHA1 Message Date
fariskazmi 161fc19721 feat(auth): add OIDC_DISABLE_LOCAL_LOGIN to turn off password logins
When the flag is on and an OIDC provider is configured, every e-mail and
password check is refused: the login page, the admin and the API's basic
auth. OIDC logins, API tokens, OAuth apps and permission checks keep working.
The login page hides the password form.
2026-11-02 09:08:30 -06:00
eitchtee ec9efccdf2 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-11-02 04:18:58 +00:00
Herculino Trotta b956237390 Merge pull request #636 from eitchtee/feat/linked-transfers
feat(transactions): link transfer sides and show them as a single item
2026-11-02 01:18:33 -03:00
Herculino Trotta 3716b9b0e3 feat(transactions): link transfer sides and show them as a single item
Transfers are still two transactions, now linked to each other:
- shown as one item in lists, with each side's amount, account,
  category and tags ("Combine transfers" user setting, on by default)
- date, reference date, paid and mute stay in sync between sides
- edit opens the transfer form; delete, restore, duplicate and bulk
  actions act on both sides
- transfers made by the transfer form now trigger rules for each side

Recurring and quick transactions gain a Transfer type, with a "To
account" and optional "To amount", generating linked transfers. A
transfer can be converted into either.

Existing transfers are left as they are, since there is no reliable
way to pair them.
2026-11-02 01:14:46 -03:00
Herculino Trotta 7cb2713c6c Merge pull request #635 from eitchtee/feat/relative-demo-data
feat(demo): generate demo data relative to today
2026-11-01 00:16:39 -03:00
Herculino Trotta 1d22c9ff66 feat(demo): generate demo data relative to today
Replace the hard-dated demo fixture with a load_demo_data command that
builds the dataset around the current date, so the demo always has data
in the current month. It also covers more features: multi-currency
accounts with exchange rate history, an ETF and Bitcoin tracked with DCA
strategies, transfers, a credit card using reference dates, installment
plans, recurring transactions, quick transactions, rules and filter
presets.
2026-11-01 00:13:01 -03:00
Herculino Trotta 556542ac9e docs(readme): refresh screenshots 2026-11-01 00:12:33 -03:00
eitchtee 83da4226d9 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-10-31 21:00:46 +00:00
Herculino Trotta 809564a1d3 Merge pull request #634 from eitchtee/feat/reconciliation-cutoff
feat(accounts): reconcile balances against a date or reference month cutoff
2026-10-31 18:00:23 -03:00
Herculino Trotta fcd666946f feat(accounts): reconcile balances against a date or reference month cutoff
Credit cards often have paid transactions dated after the invoice being
closed, which made reconciliation against all paid transactions wrong.

The reconciliation panel now lets you balance against all paid
transactions (previous behavior), paid transactions up to a date, or
paid transactions up to a reference month. The adjustment transaction is
dated at the cutoff so later reconciliations with the same or a later
cutoff include it. An invalid cutoff blocks the reconciliation instead
of silently falling back.
2026-10-31 17:56:36 -03:00
Herculino Trotta 2bb8b4e5d4 Merge pull request #631 from eitchtee/dependabot/uv/djangorestframework-3.18.2
build(deps): bump djangorestframework from 3.17.2 to 3.18.2
2026-10-25 12:11:37 -03:00
Herculino Trotta 948a3426ee Merge pull request #632 from eitchtee/dependabot/uv/brotli-1.2.1
build(deps): bump brotli from 1.2.0 to 1.2.1
2026-10-25 12:11:24 -03:00
Herculino Trotta 02488a1d74 Merge pull request #633 from eitchtee/weblate
Translations update from Weblate
2026-10-25 12:11:12 -03:00
sorcierwax edd87327d0 locale(French): update translation
Currently translated at 100.0% (817 of 817 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/fr/
2026-10-25 12:58:57 +00:00
dependabot[bot] 785bd054df build(deps): bump brotli from 1.2.0 to 1.2.1
Bumps [brotli](https://github.com/google/brotli) from 1.2.0 to 1.2.1.
- [Release notes](https://github.com/google/brotli/releases)
- [Changelog](https://github.com/google/brotli/blob/go/brotli/v1.2.1/CHANGELOG.md)
- [Commits](https://github.com/google/brotli/compare/v1.2.0...go/brotli/v1.2.1)

---
updated-dependencies:
- dependency-name: brotli
  dependency-version: 1.2.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-24 21:15:51 +00:00
dependabot[bot] b94a6aa4d2 build(deps): bump djangorestframework from 3.17.2 to 3.18.2
Bumps [djangorestframework](https://github.com/encode/django-rest-framework) from 3.17.2 to 3.18.2.
- [Release notes](https://github.com/encode/django-rest-framework/releases)
- [Commits](https://github.com/encode/django-rest-framework/compare/3.17.2...3.18.2)

---
updated-dependencies:
- dependency-name: djangorestframework
  dependency-version: 3.18.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-24 21:15:42 +00:00
Herculino Trotta aa92aa1926 Merge pull request #630 from eitchtee/ci/test-runner
ci: run Django test suite on pull requests
2026-10-24 14:05:45 -03:00
Herculino Trotta 5468d17e20 ci: provide container paths and a clean TMPDIR for tests
test(transactions): enable soft delete explicitly in the hard-delete attachment test
2026-10-24 14:01:47 -03:00
Herculino Trotta b6833f2b7b ci: run Django test suite on pull requests 2026-10-24 13:57:25 -03:00
eitchtee 2558d601dd chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-10-24 16:57:23 +00:00
Herculino Trotta d7537b54ad Merge pull request #629 from eitchtee/fix/import-object-authorization
fix(import): enforce object-level authorization on import profiles and runs
0.24.0
2026-10-24 13:56:53 -03:00
Herculino Trotta e46e9ad0cf Merge pull request #628 from eitchtee/fix/oidc-tests-allauth-65-20
test(users): fix OIDC tests after allauth 65.20 bump
2026-10-24 13:56:26 -03:00
Herculino Trotta 4446db3249 test(users): stop using SocialLogin.state_from_request removed in allauth 65.20
django-allauth 65.20 removed SocialLogin.state_from_request, breaking the
OIDC email auto-connect tests after the bump in #627.
2026-10-24 13:27:10 -03:00
Herculino Trotta 1e486a608e fix(import): enforce object-level authorization on import profiles and runs
ImportProfile and ImportRun had no owner, and neither the web views nor the
REST viewsets filtered by the requesting user, so any authenticated user could
read, edit and delete every other user's import profiles and runs
(GHSA-q668-h56g-mfp4).

- ImportProfile is now a SharedObject, with share and take-ownership views
  like transaction rules; the global unique constraint on name is dropped.
- ImportRun is now an OwnedObject owned by the uploader, so runs made with a
  shared profile stay private to whoever ran them.
- Existing runs are backfilled with the owner of their imported
  transactions; existing profiles stay unowned and usable by everyone.
2026-10-24 13:26:37 -03:00
Herculino Trotta 8888a850bd Merge pull request #627 from eitchtee/fix/bump-allauth-oauthlib
build(deps): bump django-allauth to 65.20.1 to unblock oauthlib 4.0.0
2026-10-24 12:12:12 -03:00
Herculino Trotta 9941c8fb90 build(deps): bump django-allauth to 65.20.1 to allow oauthlib 4.0.0
django-allauth 65.18 pinned oauthlib<4, preventing Dependabot from
resolving GHSA-hj66-6f7g-4r5v and GHSA-xpv3-w29h-x7cv.
2026-10-24 12:09:19 -03:00
Herculino Trotta 39a67dfb4e Merge pull request #626 from eitchtee/dependabot/npm_and_yarn/frontend/vite-8.3.5
build(deps): bump vite from 8.0.16 to 8.3.5 in /frontend
2026-10-24 12:00:43 -03:00
Herculino Trotta 1b4a2eb3d1 Merge pull request #625 from obervinov/fix/rules-set-mute-writes-to-mute
fix(rules): write set_mute action to mute instead of is_paid
2026-10-24 12:00:30 -03:00
Herculino Trotta 73e29e867f Merge pull request #624 from obervinov/fix/bump-certifi-emudhra-distrust
build(deps): bump certifi to 2026.10.19 (GHSA-6q48-6c7w-9gw2, critical)
2026-10-24 11:59:39 -03:00
eitchtee a6f56c4989 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-10-24 14:59:16 +00:00
Herculino Trotta 601c641bb3 Merge pull request #623 from eitchtee/weblate
Translations update from Weblate
2026-10-24 11:58:49 -03:00
dependabot[bot] 0c9ccf797a build(deps): bump vite from 8.0.16 to 8.3.5 in /frontend
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 8.0.16 to 8.3.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 8.3.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-21 17:56:02 +00:00
obervinov aa95ade7ce fix(rules): write set_mute action to mute instead of is_paid 2026-10-21 21:51:22 +04:00
obervinov 03a27002cc build(deps): bump certifi from 2026.5.20 to 2026.10.19 2026-10-21 19:32:10 +04:00
Dimitri Decrock 565a770130 locale(Dutch): update translation
Currently translated at 100.0% (817 of 817 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2026-10-14 04:57:23 +00:00
Dimitri Decrock a3d75de836 locale(Dutch): update translation
Currently translated at 97.3% (795 of 817 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/nl/
2026-10-14 03:57:23 +00:00
eitchtee 8794aba1c5 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-10-12 05:47:31 +00:00
Herculino Trotta ab0c00f3e0 Merge pull request #621 from eitchtee/fix/convert-applies-form-amount
fix(transactions): apply the form amount when converting a paid transaction
2026-10-12 02:46:54 -03:00
Herculino Trotta 3261e5f266 fix(transactions): apply the form amount to a paid transaction converted into an installment plan 2026-10-12 02:41:14 -03:00
Herculino Trotta 35ef1dd716 fix(transactions): apply the form amount to a paid transaction converted into a recurring transaction 2026-10-12 02:41:14 -03:00
Herculino Trotta 8b896cf31f Merge pull request #619 from eitchtee/weblate
Translations update from Weblate
2026-10-12 02:34:28 -03:00
Weblate 85426392f8 Merge remote-tracking branch 'origin/main' 2026-10-12 05:34:17 +00:00
Herculino Trotta 66e51bb0b4 Merge pull request #620 from eitchtee/fix/dropdown-submenu-hover-delay
Keep dropdown submenu open while moving the pointer into it
2026-10-12 02:34:14 -03:00
Herculino Trotta dfb5cf37b4 fix(dropdown): keep submenu open while the pointer moves into it
Moving the pointer diagonally from a submenu trigger to its flyout crosses
the items below it, which closed the flyout before it could be reached.
Delay hiding the flyout by 300ms, and show it immediately on hover or focus.
2026-10-12 02:33:14 -03:00
Herculino Trotta f52a0f8cd5 locale(Portuguese (Brazil)): update translation
Currently translated at 98.0% (801 of 817 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/pt_BR/
2026-10-10 21:57:23 +00:00
eitchtee ac16359ff4 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
0.23.3
2026-10-10 21:20:53 +00:00
Herculino Trotta ab7b0c7929 Merge pull request #618 from eitchtee/fix/simulator-amount-mask
fix(simulator): use money mask on amount field
2026-10-10 18:20:07 -03:00
Herculino Trotta 174d2eb340 fix(simulator): use money mask on amount field
Match the other amount fields by using the Alpine money mask, and parse the masked value with the user's separators.
2026-10-10 18:19:07 -03:00
Herculino Trotta 84416c64d8 Merge pull request #617 from eitchtee/dependabot/npm_and_yarn/frontend/source-map-js-1.2.2
build(deps): bump source-map-js from 1.2.1 to 1.2.2 in /frontend
2026-10-10 18:13:45 -03:00
dependabot[bot] 3a91772490 build(deps): bump source-map-js from 1.2.1 to 1.2.2 in /frontend
Bumps [source-map-js](https://github.com/7rulnik/source-map-js) from 1.2.1 to 1.2.2.
- [Release notes](https://github.com/7rulnik/source-map-js/releases)
- [Changelog](https://github.com/7rulnik/source-map-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/7rulnik/source-map-js/compare/v1.2.1...v1.2.2)

---
updated-dependencies:
- dependency-name: source-map-js
  dependency-version: 1.2.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-10 21:10:30 +00:00