9d3c72acff
Add Vereinfacht app URL setting and contact view URL
...
- Setting attribute vereinfacht_app_url, migration, .env.example
- Config: vereinfacht_app_url() from env/setting or derived from API URL
- Contact view URL uses app URL with /en/admin/finances/contacts/{id}
- Global settings: App URL field, read-only when VEREINFACHT_APP_URL set
- Tests: update contact view URL expectations
2026-02-23 19:54:43 +01:00
e1e0469e41
Global settings: API key redaction and per-field ENV
...
Never put API key in form/DOM; show (set) badge, drop blank on save.
Per-field disabled when ENV set; save button only when not all from ENV.
2026-02-23 19:54:41 +01:00
a23f999eee
fix(a11y): WCAG 2 AA contrast and keyboard access
2026-02-23 19:54:36 +01:00
376086ae0f
feat(vereinfacht): member form flash and show page
...
- Form: show Vereinfacht sync warning after save via SyncFlash
- Show: load API debug response; MembershipFees: contact ID, link, no-contact warning
2026-02-23 19:51:32 +01:00
5343b78750
feat(vereinfacht): Settings UI and bulk sync
...
- GlobalSettingsLive: Vereinfacht section, sync button, last sync result
- Test: Vereinfacht Integration section visible
2026-02-23 19:51:32 +01:00
be9d12f181
Merge pull request 'finalize groups' ( #437 ) from feature/finalize-groups into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #437
2026-02-23 17:27:48 +01:00
123227a50e
refactor: add data-testid selectors for groups ui
continuous-integration/drone/push Build is failing
2026-02-20 16:34:15 +01:00
83b104ecf3
refactor: when adding group members, search in-memory on typing
2026-02-20 15:56:12 +01:00
ec814a8c94
refactor: remove db read on focus for groups view
2026-02-20 15:09:37 +01:00
397f7a7975
fix linting
continuous-integration/drone/push Build is failing
2026-02-20 09:16:38 +01:00
cb932ad6ef
feat: respects sorting groups for export
continuous-integration/drone/push Build is failing
2026-02-20 08:45:55 +01:00
dbdac5870a
fix: adds shoe/hide for group column
2026-02-20 08:45:21 +01:00
01f62297fc
feat: add groups to export
2026-02-19 14:36:35 +01:00
0fd1b7e142
fix testsand load performance
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-19 09:40:02 +01:00
0333f9e722
fix: tests failing in ci
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is failing
2026-02-19 08:55:55 +01:00
9b1aad884e
style: use same disabled field as for memberfield
2026-02-18 17:01:43 +01:00
e47e266570
feat: type not editable
2026-02-18 16:42:54 +01:00
b18f895939
chore: rename ImportExport module to Import
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-17 18:59:18 +01:00
ce542eae3e
fix: missing actor on tturning back from edit
2026-02-17 18:59:18 +01:00
cecb547bd6
bug: adds membership startdate column
continuous-integration/drone/push Build is failing
2026-02-17 17:54:25 +01:00
911f308a67
fix: address review comments
continuous-integration/drone/push Build is failing
continuous-integration/drone/promote/production Build is passing
2026-02-17 15:30:23 +01:00
b1a9eb8b1d
feat: add groups to member detail view #374
continuous-integration/drone/push Build is passing
2026-02-17 14:15:43 +01:00
6831ba046f
Merge remote-tracking branch 'origin/main' into feature/member-overview-groups
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-16 15:57:57 +01:00
ace59bbae6
fix: implement review comments
continuous-integration/drone/push Build is passing
2026-02-16 15:30:16 +01:00
5fd7c0e7f6
feat: improve groups fillter
continuous-integration/drone/push Build is failing
2026-02-13 17:45:51 +01:00
22458cd52b
Merge branch 'main' into feature/286_export_pdf
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-13 17:40:39 +01:00
baa288bff3
refactor
2026-02-13 17:21:14 +01:00
dce4b2cf33
feat: add groups to member overview
2026-02-13 09:28:16 +01:00
f08c5d59f3
StatisticsLive: load statistics only in handle_params
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
2026-02-12 19:35:48 +01:00
4b61289f33
Statistics LiveView: robust URL, load_fee_types error handling, clamp percents
2026-02-12 19:35:48 +01:00
490dced8c8
Statistics: member stats independent of fee type
2026-02-12 19:35:48 +01:00
6e309622a0
Add StatisticsLive: overview, bars by year, pie chart
...
- Summary cards: active/inactive members, open amount
- Joins and exits by year (horizontal bars)
- Contributions by year: table with stacked bar above amounts
- Column order: Paid, Unpaid, Suspended, Total; color dots for legend
- All years combined pie chart
- LiveView tests
2026-02-12 19:35:48 +01:00
2f8a6a2768
Merge remote-tracking branch 'origin/main' into feature/ui-for-adding-members-groups
continuous-integration/drone/push Build is failing
continuous-integration/drone/promote/production Build is passing
2026-02-12 15:16:35 +01:00
900f322422
fix: pr comments
continuous-integration/drone/push Build is passing
2026-02-12 15:08:40 +01:00
fd1f4d02d5
style: fix styling
2026-02-11 13:55:02 +01:00
e68a7cf8c7
fix linting
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-09 14:08:12 +01:00
e1266944b1
feat: add membership fee status to columns and dropdown
2026-02-09 13:34:38 +01:00
36e57b24be
Merge branch 'main' into feature/export_csv
continuous-integration/drone/push Build is failing
2026-02-06 08:02:05 +01:00
9b9e7ec995
fix: sorting and filter for export
2026-02-05 15:03:25 +01:00
e7d63b9b0a
fix linting
continuous-integration/drone/push Build is failing
2026-02-04 16:55:24 +01:00
c82f4b7fd7
feat: add csv export
continuous-integration/drone/push Build is failing
2026-02-04 16:40:41 +01:00
3415faeb21
Merge branch 'main' into feature/337_polish_import
continuous-integration/drone/push Build is failing
2026-02-04 16:28:55 +01:00
d34ff57531
refactor
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-04 15:52:00 +01:00
24d130ffb5
OIDC: use UserHelpers.has_oidc? in index and show
...
- Index OIDC column and show OIDC item use has_oidc? instead of raw oidc_id.
- Avoids empty string showing as Linked.
2026-02-04 11:40:21 +01:00
d7c6d20483
User form: red warning for OIDC users when setting/changing password
...
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
- Show alert when user has oidc_id and password section is visible.
- Explains that password here does not change SSO/identity provider password.
2026-02-04 11:07:01 +01:00
c6082f2831
Users list and show: Role, Password, OIDC columns; UserHelpers
...
- Index: load :role; columns Role, Password (has_password?), OIDC; contrast fix.
- Show: Role, OIDC (Linked/Not linked); has_password? for Password Authentication.
- UserHelpers: has_password?/1, has_oidc?/1. Gettext: new strings and DE translations.
2026-02-04 11:06:52 +01:00
7eba21dc9c
Hide Regenerate Cycles button when no membership fee type assigned
...
continuous-integration/drone/push Build is passing
- Button only shown when @member.membership_fee_type is set (same as Create Cycle).
- Test: no-type view asserts Regenerate Cycles button is not present.
2026-02-04 09:38:26 +01:00
dbd0a57292
Secure regenerate_cycles: require can?(:create, MembershipFeeCycle) in handler
...
- Handler returns flash error when non-admin triggers event (e.g. DevTools).
- Test: read_only cannot create MembershipFeeCycle so handler rejects.
2026-02-04 09:19:37 +01:00
182d34fe58
MemberLive: confirm_delete_all_cycles via Ash.destroy, reduce current_actor
...
- Delete each cycle with Ash.destroy(actor:) so policies apply; add do_delete_all_cycles/5.
- Use positive can? check; remove duplicate current_actor(socket) in change_membership_fee_type.
2026-02-04 00:34:00 +01:00
101fd39f18
Fee settings and fee type form: pass actor for MembershipFeeType read
...
- membership_fee_settings_live: current_actor(socket), Ash.read! with actor
- membership_fee_type_live/form: Ash.get! with actor in mount
- check_page_permission_test: normal_user /groups/new and /groups/:slug/edit allowed
- membership_fee_type_live form_test: actor for Ash.read_one!/get!
2026-02-03 23:52:27 +01:00