fec2f7b6f6
Constants: add vereinfacht_required_member_fields
...
Defines first_name, last_name, street, postal_code, city as required
when Vereinfacht integration is active.
2026-02-23 22:13:16 +01:00
c86781c32b
Setting: add member_field_required and update_single_member_field
...
Add JSONB attribute member_field_required, migration, Change and
Membership code interface for atomic per-field required flag.
2026-02-23 22:13:08 +01:00
a1684f485c
Merge pull request 'Vereinfacht accounting software API closes #431 ' ( #432 ) from feature/vereinfacht_api into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #432
2026-02-23 21:18:44 +01:00
0f20e459e9
Gettext: Vereinfacht strings in du-form (i18n guidelines)
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-23 20:49:38 +01:00
d9491dea9c
Member show: present? check for vereinfacht_contact_id in UI
...
Use vereinfacht_contact_present assign so empty string is not treated as present.
2026-02-23 20:49:34 +01:00
daaa4dc345
Vereinfacht: filter blank vereinfacht_contact_id in sync_members
...
Include members with empty string; use expr with ref for Ash filter.
2026-02-23 20:49:30 +01:00
8ffd842c38
Vereinfacht client: receipt allowlist, find_contact pagination, flatten nesting
...
- Receipt attrs: allowlist only (no String.to_atom on API input / DoS)
- find_contact_by_email: paginate through all pages (page[size]=100)
- Extract helpers to satisfy Credo max nesting depth
2026-02-23 20:49:19 +01:00
1f21afeb72
Setting: vereinfacht_api_key public? false
...
Reduce exposure of API key; keep sensitive? true.
2026-02-23 20:49:12 +01:00
3cdaa75fc1
Member: remove system-actor fallback in extract_existing_values
...
Per guidelines: actor must come from context. When nil, skip load and return empty map.
2026-02-23 20:49:00 +01:00
482a335d36
Fix config test: clear vereinfacht_app_url from settings so derived URL is used
2026-02-23 20:48:57 +01:00
68e6c74a67
Gettext: add DE translations for Vereinfacht receipts and app URL
2026-02-23 19:54:44 +01:00
b60ab3f392
Member show: Vereinfacht link only, receipts table from API
...
- Show only 'Kontakt in Vereinfacht anzeigen' link (no Contact ID / Debug)
- Button loads receipts via get_contact_with_receipts, table with formatted columns
2026-02-23 19:54:44 +01:00
ede3df12ef
SyncFlash: document :public ETS table option
2026-02-23 19:54:44 +01:00
6c22d889a1
Vereinfacht client: receipts API, fetch_contact refactor, isExternal
...
- get_contact_with_receipts(contact_id) with ?include=receipts
- fetch_contact/2, build_url_with_params, extract_receipts_from_response
- Filter external contacts by isExternal in find_contact_id_by_email
- Send isExternal: true in create/update payloads
2026-02-23 19:54:44 +01:00
140e4a9054
SyncContact: only run when relevant attributes changed
...
- Sync on create; on update only when synced attrs changed or no contact_id yet
- Reduces unnecessary API calls on unrelated member updates
2026-02-23 19:54:43 +01:00
1188320844
Restrict set_vereinfacht_contact_id to system actor
...
- Add ActorIsSystemUser policy check
- Member set_vereinfacht_contact_id only allowed for system user
2026-02-23 19:54:43 +01:00
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
7db609deec
Gettext: translate Vereinfacht API validation messages to German
2026-02-23 19:54:42 +01:00
02245e6684
Clear Vereinfacht ENV in test_helper so tests never hit real API
2026-02-23 19:54:42 +01:00
124857cc9c
Vereinfacht: update existing contact when found by email
...
Before saving contact_id to member, sync current data to the
existing contact so Vereinfacht stays up to date.
2026-02-23 19:54:42 +01:00
bc2d91f9e7
Vereinfacht client: find by email in response, no retries in test
...
API does not allow filter[email]; fetch list and match client-side.
Disable Req retries in test for fast failure and less log noise.
2026-02-23 19:54:42 +01:00
c33199465c
Gettext: new Vereinfacht UI strings and German translations
...
(set), Leave blank to keep current, env hint; DE msgstr added.
2026-02-23 19:54:42 +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
f2bcf68da2
Config: per-field Vereinfacht ENV helpers
...
vereinfacht_api_url_env_set?, vereinfacht_api_key_env_set?,
vereinfacht_club_id_env_set? for read-only Settings fields when set.
2026-02-23 19:54:41 +01:00
17488a6f42
Add Vereinfacht ENV vars to .env.example
...
VEREINFACHT_API_URL, VEREINFACHT_API_KEY, VEREINFACHT_CLUB_ID
with short comment that they override Settings when set.
2026-02-23 19:54:41 +01:00
a94c0c0b14
Vereinfacht: sync linked member only when email or member changed
...
Run SyncLinkedMemberAfterUserChange only when email or member
relationship changed to avoid unnecessary API calls.
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
e4e6cfdd47
test(vereinfacht): add tests and scope README
...
- Config, Client, SyncContact, Vereinfacht module tests (no real API)
- vereinfacht_test_README: document test scope
2026-02-23 19:53:20 +01:00
c46365576d
feat(vereinfacht): gettext and German translations
...
- POT/PO: Vereinfacht UI and API error message strings
2026-02-23 19:53:17 +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
32efe380b7
feat(vereinfacht): sync linked member after user email/link changes
...
- SyncLinkedMemberAfterUserChange on update, create_user, update_user,
admin_set_password, link_oidc_id, register_with_rauthy
2026-02-23 19:51:31 +01:00
a008cf381a
feat(vereinfacht): add client, sync flash and SyncContact change
...
- Application: create SyncFlash ETS table on start
- Vereinfacht: Client, SyncFlash, sync_member, format_error, sync_members_without_contact
- SyncContact change on Member create_member and update_member
- Member: attribute vereinfacht_contact_id, internal action set_vereinfacht_contact_id
2026-02-23 19:51:31 +01:00
a5a4d66655
feat(vereinfacht): add DB schema, config and setting attributes
...
- Migrations: vereinfacht_contact_id on members, vereinfacht_* on settings
- Mv.Config: Vereinfacht ENV/Settings helpers, vereinfacht_configured?, contact_view_url
- Setting: vereinfacht_api_url, api_key, club_id
2026-02-23 19:51:31 +01:00
47284fee98
Merge pull request '[fix] update debian image to trixie (stable) to fix imprintor glibc version mismatch' ( #439 ) from fix/imprintor into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #439
2026-02-23 18:14:01 +01:00
91839dc426
fix: update debian image to trixie (stable) to fix imprintor glibc version mismatch
continuous-integration/drone/push Build was killed
2026-02-23 18:13:37 +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
2619e3ea29
Merge pull request 'Implements exporting groups closes #428 ' ( #435 ) from feature/428_export_groups into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #435
2026-02-23 16:25:40 +01:00
056fd04ddf
feat: remove postal code validation
2026-02-23 16:24:20 +01:00
01d901a61d
Merge branch 'main' into feature/428_export_groups
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-23 16:11:13 +01:00
d37ba84a74
Merge pull request 'Fixes light dark mode toggle closes #429 ' ( #434 ) from bug/429_light_dark_mode into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #434
2026-02-23 16:10:22 +01:00
381e09dd1d
Merge branch 'main' into bug/429_light_dark_mode
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-23 15:32:47 +01:00
f3ca492b49
Merge pull request 'Fixes missing Rauthy error message closes #289 ' ( #427 ) from bug/289_rauthy_error_message into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #427
2026-02-23 15:31:58 +01:00
2f8df3f39d
Merge branch 'main' into bug/289_rauthy_error_message
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-23 15:19:10 +01:00
3ecbd964ba
Merge branch 'main' into feature/428_export_groups
continuous-integration/drone/push Build is failing
2026-02-23 15:14:03 +01:00
8430069b45
chore: add dev db seeds for groups
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-02-20 17:16:29 +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
3c79d044d4
Merge pull request 'update Code Guidelines with issues from meta review analysis' ( #436 ) from code-review-meta-actions into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #436
2026-02-20 14:02:38 +01:00