2a11bfe60a
chore: pin nodejs for browser-test tooling; ignore /node_modules
continuous-integration/drone/push Build is failing
2026-06-08 11:53:27 +02:00
7769fd53dc
Merge pull request 'Collect Bulk Actions in Dropdown' ( #524 ) from issue/mitgliederverwaltung-420 into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #524
2026-06-04 17:38:25 +02:00
6a6099659b
Merge branch 'main' into issue/mitgliederverwaltung-420
...
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
Integrate current main (CSV import, GDPR join-form description, dependency and
tooling bumps) into the bulk-actions-dropdown feature. Gettext catalogs were
reconciled with mix gettext.extract --merge; the CHANGELOG Unreleased entries
of both sides were combined.
2026-06-04 16:56:27 +02:00
3f44710a6b
docs(changelog): record bulk-actions dropdown under Unreleased
2026-06-04 16:44:38 +02:00
c983c8d5bb
feat(member): collect member-overview bulk actions into a single dropdown
...
The growing row of bulk-action buttons above the member overview is replaced
by one "Aktionen" dropdown holding all four actions (open in email program,
copy addresses, export CSV, export PDF). With no selection the actions operate
on all — or the currently filtered — members; the email-program action is
disabled past a recipient cap, because the browser cannot reliably hand a very
long mailto over to the mail client. The trigger shows the active scope as a
badge: an emphasized count when members are selected, a muted "alle"/"gefiltert"
otherwise.
2026-06-04 16:44:13 +02:00
8e5dd7e4c6
feat(web): add chevron affordance and scope-badge slot to dropdown triggers
...
Dropdown openers were visually indistinguishable from ordinary buttons. A
trailing chevron now marks every dropdown trigger — both the shared
dropdown_menu component and the bespoke member-filter trigger — and an
optional badge slot lets a trigger show a status indicator beside its label.
2026-06-04 16:40:05 +02:00
397ec69ed3
Merge pull request 'add landingURL for openCode' ( #523 ) from issue/opencode-landingurl into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #523
2026-06-04 16:35:15 +02:00
065ecdfb2c
docs(opencode): add landingURL to publiccode.yml
continuous-integration/drone/push Build is passing
2026-06-04 16:18:24 +02:00
f3e1eeaec5
Merge pull request 'chore(deps): update mix dependencies to v1 (major)' ( #488 ) from renovate/major-mix-dependencies into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #488
2026-06-04 16:17:02 +02:00
7f3b610937
chore: update mix.lock
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-06-04 15:45:00 +02:00
8cdbd63b09
Merge remote-tracking branch 'origin/main' into renovate/major-mix-dependencies
continuous-integration/drone/push Build is passing
2026-06-04 15:34:04 +02:00
3b21e45322
Merge pull request 'chore(deps): update ghcr.io/sebadob/rauthy docker tag to v0.35.2' ( #498 ) from renovate/ghcr.io-sebadob-rauthy-0.x into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #498
2026-06-04 15:29:58 +02:00
c158454123
Merge pull request 'chore(deps): update postgres docker tag to v18.4' ( #518 ) from renovate/postgres into main
...
continuous-integration/drone/push Build is failing
Reviewed-on: #518
2026-06-04 15:29:45 +02:00
cb82b64b55
Merge pull request 'chore(deps): update dependency just to v1.51.0' ( #499 ) from renovate/asdf-tool-versions into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #499
2026-06-04 15:29:28 +02:00
c78d6dbe7f
Merge pull request 'Mila on OpenCode: publiccode.yml, logo & screenshots' ( #522 ) from issue/mila-on-opencode-515 into main
...
continuous-integration/drone/push Build is failing
Reviewed-on: #522
2026-06-04 15:26:45 +02:00
ff1aa3e56a
fix: removed linux as platform from publiccode.yml
continuous-integration/drone/push Build is passing
2026-06-04 15:21:39 +02:00
defce80ece
docs(opencode): add publiccode.yml, logo and screenshots for software directory
continuous-integration/drone/push Build is passing
2026-06-04 15:00:31 +02:00
ef21e0ada3
Merge pull request 'Improve Join description handling for GDPR/DSGVO' ( #521 ) from issue/mitgliederverwaltung-508 into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #521
2026-06-04 13:02:39 +02:00
6500dead95
Merge remote-tracking branch 'origin/main' into issue/mitgliederverwaltung-508
continuous-integration/drone/push Build is failing
continuous-integration/drone/promote/production Build is passing
2026-06-04 09:53:27 +02:00
03bc895ab1
Merge pull request 'fix path for asdf' ( #520 ) from fix-path into main
...
continuous-integration/drone/push Build is failing
Reviewed-on: #520
2026-06-04 09:45:46 +02:00
f9495f557a
chore: prepend asdf paths
continuous-integration/drone/push Build is passing
2026-06-04 09:06:03 +02:00
36ca305299
docs(changelog): record GDPR/DSGVO join-form description under Unreleased
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-06-03 12:32:48 +02:00
1f52350562
feat(seeds): shorten the GDPR field to "DSGVO" and seed its join_description
2026-06-03 12:32:15 +02:00
404d524ee1
feat(custom-field): let admins set join_description with a link-syntax hint
2026-06-03 12:28:23 +02:00
df271055a8
feat(member): show join_description as a tooltip on custom-field labels
2026-06-03 12:22:58 +02:00
ee5ccbf7e9
feat(join): highlight auto-linked join-form links
2026-06-03 12:16:53 +02:00
aced57d0fd
feat(join): use join_description as the join-form field label
2026-06-03 12:11:39 +02:00
cb5cb68483
feat(join): render join_description with auto-linked URLs and Markdown links
2026-06-03 12:06:48 +02:00
b6c2cf58b1
feat(custom-field): add join_description attribute for GDPR join-form labels
2026-06-03 12:01:41 +02:00
1b671ea41a
Merge pull request 'Minor CSV import improvements closes #509 ' ( #519 ) from issue/mitgliederverwaltung-509 into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #519
2026-06-03 03:02:09 +02:00
2bc5fcec5a
docs(changelog): record CSV import improvements under Unreleased
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
2026-06-03 02:37:46 +02:00
45c9b81983
fix(import): collapse duplicate fee-type warnings into a bounded list
2026-06-03 02:37:12 +02:00
118b9f8d57
perf(import): reuse auto-created groups across import chunks
2026-06-03 02:32:15 +02:00
68a1a9530a
feat(import): confirm column mapping in a preview before importing members
2026-06-03 02:25:50 +02:00
a93dd9d535
feat(import): serve dynamic CSV import templates reflecting current custom fields
2026-06-03 02:21:36 +02:00
00e1624ee4
feat(import): assign groups and fee types to imported members, creating missing groups
2026-06-03 02:15:54 +02:00
a4a34cab3a
feat(import): resolve import group and fee-type names against existing records
2026-06-03 02:10:33 +02:00
Renovate Bot
8429fb2b9c
chore(deps): update mix dependencies to v1
continuous-integration/drone/push Build is passing
2026-06-03 00:06:45 +00:00
Renovate Bot
aaffd7b91c
chore(deps): update postgres docker tag to v18.4
continuous-integration/drone/push Build is passing
2026-06-03 00:06:34 +00:00
95c7bf7a15
feat(import): recognize group and fee-type columns and always ignore fee-status
2026-06-03 02:01:09 +02:00
5c5fd56749
fix(export): emit date custom-field values as ISO-8601 for re-import
2026-06-03 01:54:49 +02:00
d51dcb1ac3
chore(ci): make test workflow faster with test --stale
continuous-integration/drone/push Build is passing
2026-06-02 23:35:39 +02:00
1ef6ea502e
Merge pull request 'Add dialyzer and resolve all findings closes #503 #504 #514 ' ( #516 ) from issue/mitgliederverwaltung-514 into main
...
continuous-integration/drone/push Build is failing
Reviewed-on: #516
2026-06-02 13:15:00 +02:00
9a14cedc14
fix(repo): define all_tenants/0 as empty for non-multitenant schema
continuous-integration/drone/push Build was killed
continuous-integration/drone/promote/production Build is passing
2026-06-02 12:26:35 +02:00
b5756d8e00
refactor(vereinfacht): gate retry skipping on runtime sandbox flag
...
The compile-time Mix.env() comparison folded to an always-false literal under analysis. sql_sandbox?/0 reads runtime config (true only in test) and works in releases where Mix is unavailable, preserving the fast-fail-no-retry behavior in tests.
2026-06-02 12:23:04 +02:00
a7ad608051
fix(auth): redirect a live-view socket in the user-required guard
...
LiveSession.assign_new_resources/2 is typed to return a Phoenix.Socket, which made the on_mount redirect type-incompatible. The authenticated-routes live_session already assigns current_user, so the guard reads it from socket.assigns directly. Also assign the locale into the socket actually used by the no-user redirect instead of discarding it.
2026-06-02 12:19:21 +02:00
6a4a99f638
refactor(types): drop guards and clauses that can never succeed
2026-06-02 12:11:59 +02:00
ec6422d450
fix(membership-fees): show error for unparseable cycle date instead of crashing
...
Date.from_iso8601/1 returns {:error, reason}, so the with else clause matching a bare :error never fired and an invalid date raised a WithClauseError. Match the real date/calendar error reasons so the user sees the validation message.
2026-06-02 12:08:19 +02:00
2db467d5d1
fix(pdf-export): match DateTime.from_iso8601 three-tuple when formatting cells
...
DateTime.from_iso8601/1 returns {:ok, datetime, offset}, so the two-tuple clauses never matched and datetime cells fell through to the naive-parse fallback. Matching the real shape routes them through the intended DateTime path; UTC values render identically.
2026-06-02 12:04:37 +02:00
c41d24113f
fix(import): return readable string for unreadable upload errors
...
File.read/1 only yields posix atoms, so the File.Error and bare-reason branches were unreachable, and :file.format_error/1 returns a charlist rather than a String. Normalize the error to a binary so it interpolates correctly in flash messages.
2026-06-02 12:00:38 +02:00