Refinex CSV import and PDf export closes #299 and #433 #446

Merged
carla merged 16 commits from feat/299_plz into main 2026-02-24 16:32:32 +01:00
4 changed files with 5 additions and 17 deletions
Showing only changes of commit 056fd04ddf - Show all commits

View file

@ -191,7 +191,7 @@ Settings (1) → MembershipFeeType (0..1)
- Join date cannot be in future - Join date cannot be in future
- Exit date must be after join date - Exit date must be after join date
- Phone: `+?[0-9\- ]{6,20}` - Phone: `+?[0-9\- ]{6,20}`
- Postal code: 5 digits - Postal code: optional (no format validation)
### CustomFieldValue System ### CustomFieldValue System
- Maximum one custom field value per custom field per member - Maximum one custom field value per custom field per member

View file

@ -188,7 +188,7 @@ Table members {
- email: 5-254 characters, valid email format (required) - email: 5-254 characters, valid email format (required)
- join_date: cannot be in future - join_date: cannot be in future
- exit_date: must be after join_date (if both present) - exit_date: must be after join_date (if both present)
- postal_code: exactly 5 digits (if present) - postal_code: optional (no format validation)
''' '''
} }

View file

@ -22,7 +22,6 @@ defmodule Mv.Membership.Member do
## Validations ## Validations
- Required: email (all other fields are optional) - Required: email (all other fields are optional)
- Email format validation (using EctoCommons.EmailValidator) - Email format validation (using EctoCommons.EmailValidator)
- Postal code format: exactly 5 digits (German format)
- Date validations: join_date not in future, exit_date after join_date - Date validations: join_date not in future, exit_date after join_date
- Email uniqueness: prevents conflicts with unlinked users - Email uniqueness: prevents conflicts with unlinked users
- Linked member email change: only admins or the linked user may change a linked member's email (see `Mv.Membership.Member.Validations.EmailChangePermission`) - Linked member email change: only admins or the linked user may change a linked member's email (see `Mv.Membership.Member.Validations.EmailChangePermission`)
@ -458,11 +457,6 @@ defmodule Mv.Membership.Member do
where: [present([:join_date, :exit_date])], where: [present([:join_date, :exit_date])],
message: "cannot be before join date" message: "cannot be before join date"
# Postal code format (only if set)
validate match(:postal_code, ~r/^\d{5}$/),
where: [present(:postal_code)],
message: "must consist of 5 digits"
# Email validation with EctoCommons.EmailValidator # Email validation with EctoCommons.EmailValidator
validate fn changeset, _ -> validate fn changeset, _ ->
email = Ash.Changeset.get_attribute(changeset, :email) email = Ash.Changeset.get_attribute(changeset, :email)

View file

@ -80,15 +80,9 @@ defmodule Mv.Membership.MemberTest do
assert {:ok, _member} = Membership.create_member(attrs, actor: actor) assert {:ok, _member} = Membership.create_member(attrs, actor: actor)
end end
test "Postal code is optional but must have 5 digits if specified", %{actor: actor} do test "Postal code is optional", %{actor: actor} do
attrs = Map.put(@valid_attrs, :postal_code, "1234") attrs = Map.delete(@valid_attrs, :postal_code)
assert {:ok, _member} = Membership.create_member(attrs, actor: actor)
assert {:error, %Ash.Error.Invalid{errors: errors}} =
Membership.create_member(attrs, actor: actor)
assert error_message(errors, :postal_code) =~ "must consist of 5 digits"
attrs2 = Map.delete(@valid_attrs, :postal_code)
assert {:ok, _member} = Membership.create_member(attrs2, actor: actor)
end end
end end