[FEATURE]: Membership Fee 4 - Type Resource & Settings #278

Open
opened 2025-12-11 15:48:30 +01:00 by moritz · 0 comments
Owner

Goal: Implement full CRUD for membership fee types and global settings.

Scope:

  • Complete MembershipFeeType resource:
    • CRUD actions with proper permissions
    • Interval immutability validation (Ash change module)
    • Deletion prevention if in use (members or cycles)
  • Create Ash change module: prevent_interval_change.ex
  • Implement global settings:
    • membership_fees.include_joining_cycle (Boolean, default: true)
    • membership_fees.default_membership_fee_type_id (UUID, required)
  • Settings validation (default type must exist)
  • Settings UI integration (admin can modify)

Files to Create/Modify:

  • lib/membership_fees/membership_fee_type.ex - Complete resource
  • lib/membership_fees/changes/prevent_interval_change.ex
  • Settings integration (use existing settings mechanism)
  • Update settings UI (if needed)

Tests to Write:

  • Unit Tests for MembershipFeeType:

    • Can create with name, amount, interval, description
    • Interval field is immutable after creation (validation error)
    • Can update name, amount, description
    • Cannot update interval
    • Cannot delete if assigned to members
    • Cannot delete if cycles exist
    • Interval must be one of: monthly, quarterly, half_yearly, yearly
  • Unit Tests for Settings:

    • Default values are set correctly
    • Settings can be read and written
    • Default membership fee type validation (must exist)
    • Settings applied to new members
  • Integration Tests:

    • Admin can create membership fee type
    • Admin can update membership fee type (except interval)
    • Admin cannot delete type in use
    • Settings are used during member creation
    • Settings are used during cycle generation
  • Permission Tests:

    • Only admin can create/update/delete types
    • Other roles can read types
    • Settings only modifiable by admin

Acceptance Criteria:

  • Full CRUD for membership fee types
  • Interval immutability enforced
  • Deletion prevention works
  • Settings system integrated
  • All permissions enforced
**Goal:** Implement full CRUD for membership fee types and global settings. **Scope:** - Complete `MembershipFeeType` resource: - CRUD actions with proper permissions - Interval immutability validation (Ash change module) - Deletion prevention if in use (members or cycles) - Create Ash change module: `prevent_interval_change.ex` - Implement global settings: - `membership_fees.include_joining_cycle` (Boolean, default: true) - `membership_fees.default_membership_fee_type_id` (UUID, required) - Settings validation (default type must exist) - Settings UI integration (admin can modify) **Files to Create/Modify:** - `lib/membership_fees/membership_fee_type.ex` - Complete resource - `lib/membership_fees/changes/prevent_interval_change.ex` - Settings integration (use existing settings mechanism) - Update settings UI (if needed) **Tests to Write:** - **Unit Tests for MembershipFeeType:** - Can create with name, amount, interval, description - Interval field is immutable after creation (validation error) - Can update name, amount, description - Cannot update interval - Cannot delete if assigned to members - Cannot delete if cycles exist - Interval must be one of: monthly, quarterly, half_yearly, yearly - **Unit Tests for Settings:** - Default values are set correctly - Settings can be read and written - Default membership fee type validation (must exist) - Settings applied to new members - **Integration Tests:** - Admin can create membership fee type - Admin can update membership fee type (except interval) - Admin cannot delete type in use - Settings are used during member creation - Settings are used during cycle generation - **Permission Tests:** - Only admin can create/update/delete types - Other roles can read types - Settings only modifiable by admin **Acceptance Criteria:** - Full CRUD for membership fee types - Interval immutability enforced - Deletion prevention works - Settings system integrated - All permissions enforced
moritz added this to the Membership Fees milestone 2025-12-11 15:48:30 +01:00
moritz added the
medium priority
M
labels 2025-12-11 15:48:30 +01:00
moritz self-assigned this 2025-12-11 15:48:30 +01:00
moritz added this to the Sprint 10: 11.12-08.01 project 2025-12-11 15:48:31 +01:00
moritz changed title from [FEATURE]: Membership Fee Type Resource & Settings to [FEATURE]: Membership Fee 4 - Type Resource & Settings 2025-12-11 15:51:00 +01:00
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: local-it/mitgliederverwaltung#278
No description provided.