Configurable member field "required" flag and Vereinfacht-required fields closes #440 #441

Merged
moritz merged 13 commits from fix/required_fields into main 2026-02-23 23:28:36 +01:00
Owner

Description of the implemented changes

The changes were:

  • Bugfixing
  • New Feature
  • Breaking Change
  • Refactoring

Configurable "required" flag for member fields (stored in Settings), enforced in member create/edit and in validation. When Vereinfacht integration is active, five fields are always required and the Required checkbox is disabled in settings. Fixes checkbox toggle and layout in the member-field edit form.

What has been changed?

  • Setting: New attribute member_field_required (JSONB map), migration, Change update_single_member_field for atomic per-field updates, and Membership code interface.
  • Constants: vereinfacht_required_member_fields (first_name, last_name, street, postal_code, city) and vereinfacht_required_field?/1.
  • Member: Validation for required fields from settings and for Vereinfacht-required fields when Mv.Config.vereinfacht_configured?/0 is true; helper member_field_value_present?/2.
  • Member field settings UI (IndexComponent, FormComponent): Read/write member_field_required; Required checkbox disabled for email and for Vereinfacht-required fields when integration is active, with German tooltip. Line break before Required/Show-in-overview block; form state rebuilt with to_form(merged_source) on validate to fix checkbox toggle (single click, no cross-reset).
  • Member form: Loads settings, builds member_field_required_map (including Vereinfacht-required when configured), passes required per field to inputs (asterisk, tooltip, validation).
  • Gettext: German translation for the greyed-out Required tooltip ("Required for Vereinfacht integration and cannot be disabled.").
  • Tests: Member required validation, Setting update_single_member_field, member field live form, member form error handling; SyncContact tests extended with street/postal_code/city when Vereinfacht is configured.
  • CODE_GUIDELINES.md: Documented member_field_required and Vereinfacht required fields.

Definition of Done

Code Quality

  • No new technical depths
  • Linting passed
  • Documentation is added where needed

Accessibility

  • New elements are properly defined with html-tags
  • Colour contrast follows WCAG criteria
  • Aria labels are added when needed
  • Everything is accessible by keyboard
  • Tab-Order is comprehensible
  • All interactive elements have a visible focus

Testing

  • Tests for new code are written
  • All tests pass
  • axe-core dev tools show no critical or major issues

Additional Notes

  • Description field was removed from the member-field settings table and edit form (it was UI-only and never persisted).
  • When Vereinfacht is not configured, behaviour is backward-compatible; when it is configured, create/update of members require the five address fields in addition to any fields marked required in settings.
## Description of the implemented changes The changes were: - [x] Bugfixing - [x] New Feature - [ ] Breaking Change - [ ] Refactoring Configurable "required" flag for member fields (stored in Settings), enforced in member create/edit and in validation. When Vereinfacht integration is active, five fields are always required and the Required checkbox is disabled in settings. Fixes checkbox toggle and layout in the member-field edit form. ## What has been changed? - **Setting:** New attribute `member_field_required` (JSONB map), migration, Change `update_single_member_field` for atomic per-field updates, and Membership code interface. - **Constants:** `vereinfacht_required_member_fields` (first_name, last_name, street, postal_code, city) and `vereinfacht_required_field?/1`. - **Member:** Validation for required fields from settings and for Vereinfacht-required fields when `Mv.Config.vereinfacht_configured?/0` is true; helper `member_field_value_present?/2`. - **Member field settings UI (IndexComponent, FormComponent):** Read/write `member_field_required`; Required checkbox disabled for email and for Vereinfacht-required fields when integration is active, with German tooltip. Line break before Required/Show-in-overview block; form state rebuilt with `to_form(merged_source)` on validate to fix checkbox toggle (single click, no cross-reset). - **Member form:** Loads settings, builds `member_field_required_map` (including Vereinfacht-required when configured), passes `required` per field to inputs (asterisk, tooltip, validation). - **Gettext:** German translation for the greyed-out Required tooltip ("Required for Vereinfacht integration and cannot be disabled."). - **Tests:** Member required validation, Setting `update_single_member_field`, member field live form, member form error handling; SyncContact tests extended with street/postal_code/city when Vereinfacht is configured. - **CODE_GUIDELINES.md:** Documented member_field_required and Vereinfacht required fields. ## Definition of Done ### Code Quality - [x] No new technical depths - [x] Linting passed - [x] Documentation is added where needed ### Accessibility - [x] New elements are properly defined with html-tags - [x] Colour contrast follows WCAG criteria - [x] Aria labels are added when needed - [x] Everything is accessible by keyboard - [x] Tab-Order is comprehensible - [x] All interactive elements have a visible focus ### Testing - [x] Tests for new code are written - [x] All tests pass - [x] axe-core dev tools show no critical or major issues ## Additional Notes - Description field was removed from the member-field settings table and edit form (it was UI-only and never persisted). - When Vereinfacht is not configured, behaviour is backward-compatible; when it is configured, create/update of members require the five address fields in addition to any fields marked required in settings.
moritz self-assigned this 2026-02-23 22:19:16 +01:00
moritz added 7 commits 2026-02-23 22:19:17 +01:00
Add JSONB attribute member_field_required, migration, Change and
Membership code interface for atomic per-field required flag.
Defines first_name, last_name, street, postal_code, city as required
when Vereinfacht integration is active.
Add validation for required member fields from settings and for
Vereinfacht-required fields when integration is configured.
Index/Form use member_field_required; Required disabled for email and
Vereinfacht-required fields with tooltip. Rebuild form with to_form
on validate to fix checkbox toggle. Add mt-4 block before Required.
Load settings, build member_field_required_map and pass required to
inputs for asterisk, tooltip and validation.
Add tests for required validation, update_single_member_field, form
required map. Add street/postal_code/city to sync_contact when Vereinfacht configured.
CODE_GUIDELINES: document member_field_required and Vereinfacht required fields
All checks were successful
continuous-integration/drone/push Build is passing
bbededf3b9
moritz added this to the Sprint 13: 19.02-26.02 project 2026-02-23 22:19:19 +01:00
moritz removed this from the Sprint 13: 19.02-26.02 project 2026-02-23 22:20:36 +01:00
moritz added 6 commits 2026-02-23 23:07:55 +01:00
Assign in assign_form so validate/save enforce server-side without
relying on render assigns; use socket.assigns.vereinfacht_required_field?
Compute vereinfacht_required? outside case; on error log and validate
only base required (email + Vereinfacht fields), not full settings.
Attach errors to :field, :show_in_overview, :member_field_required.
Set updated_at in SQL UPDATE. Add trailing newline to snapshot JSON.
ensure_aria_required_for_input/1 adds aria-required when required
in rest; applied to select, textarea and default input.
Setup + on_exit save/restore member_field_visibility and
member_field_required in member, setting, index_component and
form_error_handling tests.
Member: skip required custom fields validation for set_vereinfacht_contact_id
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/promote/production Build is passing
b3b8b31c0f
Validation runs only for create_member and update_member so Vereinfacht
sync (which only sets vereinfacht_contact_id) no longer fails with
Required custom fields missing.
moritz merged commit 0f51bc89c3 into main 2026-02-23 23:28:36 +01:00
moritz deleted branch fix/required_fields 2026-02-23 23:28:37 +01:00
Sign in to join this conversation.
No description provided.