da1fd3da73
feat: implement full CRUD for membership fee types with settings UI
...
- Add interval immutability and deletion prevention validations
- Add settings validation for default_membership_fee_type_id
- Create MembershipFeeSettingsLive for admin UI with form handling
- Add comprehensive test coverage (unit, integration, settings)
2025-12-12 17:52:52 +01:00
82897d5cd3
refactor: improve cycle generation code quality and documentation
...
continuous-integration/drone/push Build is passing
- Remove Process.sleep calls from integration tests (tests run synchronously in SQL sandbox)
- Improve error handling: membership_fee_type_not_found now returns changeset error instead of just logging
- Clarify partial_failure documentation: successful_cycles are not persisted on rollback
- Update documentation: joined_at → join_date, left_at → exit_date
- Document PostgreSQL advisory locks per member (not whole table lock)
- Document gap handling: explicitly deleted cycles are not recreated
2025-12-12 17:41:22 +01:00
f7fc1f4897
test: fix date dependencies in cycle generator tests
...
- Add create_member_with_cycles helper that uses fixed 'today' date
- Update tests to use explicit 'today:' option instead of Date.utc_today()
- Prevents test failures when current date changes (e.g., in 2026+)
- Tests now explicitly delete and regenerate cycles with fixed dates
- Ensures consistent test behavior regardless of execution date
2025-12-12 16:41:44 +01:00
0b986db635
fix: CycleGenerator generates from last cycle, not filling gaps
...
- Change algorithm to start from last existing cycle instead of start_date
- Deleted cycles (gaps) are no longer automatically filled
- Add test to verify gaps remain unfilled
- Update documentation to clarify gap handling behavior
2025-12-12 16:33:39 +01:00
272a8a8afc
test: make CycleGenerator tests more robust
...
- Replace weak assertions (>= 0, if length > 0) with concrete expectations
- Remove unnecessary Process.sleep calls (tests run synchronously)
- Add get_member_cycles helper for direct cycle verification
- Tests now validate actual generated cycles instead of relying on async behavior
2025-12-12 16:25:41 +01:00
a99f56969d
feat: include inactive members in batch cycle generation
...
- Remove exit_date filter from generate_cycles_for_all_members query
- Inactive members now get cycles generated up to their exit_date
- Add tests for inactive member processing and exit_date boundary
- Document exit_date == cycle_start behavior (cycle still generated)
2025-12-12 16:21:36 +01:00
162d06da21
feat: implement automatic cycle generation for members
...
continuous-integration/drone/push Build is passing
- Add CycleGenerator module with advisory lock mechanism
- Add SetMembershipFeeStartDate change for auto-calculation
- Extend Settings with include_joining_cycle and default_membership_fee_type_id
- Add scheduled job skeleton for future Oban integration
2025-12-11 21:26:58 +01:00
b257c9897f
refactor: improve CalendarCycles API and tests based on code review
continuous-integration/drone/push Build is passing
2025-12-11 20:08:19 +01:00
822d06ed54
feat: implement calendar-based cycle calculation functions
...
continuous-integration/drone/push Build is passing
Add CalendarCycles module with functions for all interval types.
Includes comprehensive tests for edge cases.
2025-12-11 19:45:01 +01:00
ebbf347e42
fix(membership-fees): add DB constraints for enum and decimal precision
continuous-integration/drone/push Build is passing
2025-12-11 18:46:48 +01:00
4d1b33357e
feat(membership-fees): add database schema and Ash domain structure
2025-12-11 18:46:48 +01:00
9dba4d1019
fix: credo warnings
continuous-integration/drone/push Build is passing
2025-12-11 14:21:40 +01:00
00fe471bc0
fix: custom field substring search - pass id as parameter
...
continuous-integration/drone/push Build is passing
Fragment 'member_id = id' did not resolve correctly. Now passes id as
Ash expression. Also changed LIKE to ILIKE for case-insensitive search.
2025-12-11 14:04:13 +01:00
a729d81bb9
test: adds tests for custom field search
2025-12-11 13:44:30 +01:00
b1f6d29ca1
Merge remote-tracking branch 'origin/main' into feature/220_ui_issues_2
continuous-integration/drone/push Build is passing
2025-12-11 01:49:12 +01:00
720f640229
fix: test
continuous-integration/drone/push Build is failing
2025-12-11 00:55:50 +01:00
1b06f885bf
Merge branch 'main' into feature/223_member_checkbox
continuous-integration/drone/push Build is failing
2025-12-08 11:43:54 +01:00
5ae4450444
Merge branch 'main' into feature/209_hide_field_dropdown
continuous-integration/drone/push Build is passing
2025-12-03 18:58:40 +01:00
6029920c3f
refactor: cleanup dropdown_menu component (required attr, remove redundant defaults, fix checkbox)
2025-12-03 18:42:49 +01:00
6cf955b024
fix: get_from_cookie now correctly handles list return from get_req_header
2025-12-03 18:37:51 +01:00
ecc6522571
test: restore deleted tests with dynamic field visibility support
...
Adapts icon distribution test for dynamic fields, restores empty cell test
2025-12-03 18:13:30 +01:00
f5b67de870
Merge branch 'main' into feature/209_hide_field_dropdown
continuous-integration/drone/push Build is failing
2025-12-03 17:38:50 +01:00
ba5fc34d80
Move custom fields to global admin settings
continuous-integration/drone/push Build is failing
2025-12-03 16:32:40 +01:00
c17445975c
Merge branch 'main' into feature/209_hide_field_dropdown
continuous-integration/drone/push Build is failing
2025-12-03 14:57:56 +01:00
c9678231f9
fix: hide paid column and add tests
continuous-integration/drone/push Build was killed
2025-12-03 14:56:39 +01:00
064c0df701
updated tests and fix merge conflict results
2025-12-03 14:55:20 +01:00
dfff2486b5
Fix postgres errors when running tests
continuous-integration/drone/push Build is passing
2025-12-03 14:47:58 +01:00
6b0ec28d9b
fix checkbox tests
2025-12-03 14:34:31 +01:00
e6c5a58c65
Show dates in european format
continuous-integration/drone/push Build was killed
2025-12-03 14:20:14 +01:00
ee414c9440
Hide OIDC ID and ID columns for users
2025-12-03 14:20:14 +01:00
f0613fe1e5
Merge branch 'main' into feature/209_hide_field_dropdown
continuous-integration/drone/push Build is failing
2025-12-03 12:52:12 +01:00
ac2ad0a0d5
Merge pull request 'Implement filter for has_paid closes #227 ' ( #237 ) from feature/227_payment_filter into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #237
2025-12-02 16:12:42 +01:00
6d75766dba
fix: add ESC key support, security comment, and disable async tests
continuous-integration/drone/push Build is passing
2025-12-02 15:55:27 +01:00
671e6ce804
feat: add payment status filter and paid column to member list
...
Add PaymentFilterComponent dropdown and colored paid column. Filter supports URL bookmarking and combines with search/sort.
2025-12-02 15:55:23 +01:00
45a9bc0cc0
tests: added tests
2025-12-02 14:59:38 +01:00
c8968636a8
feat: remove birth_date field from Member resource
...
continuous-integration/drone/push Build is passing
Users who need birthday data can use custom fields instead.
Closes #161
2025-12-02 14:58:50 +01:00
13f77b5c0a
Refactor column visibility logic
continuous-integration/drone/push Build is passing
2025-12-02 14:18:27 +01:00
dce2053ce7
formatting and refactor member fields constant
2025-12-02 14:17:53 +01:00
944b868478
tests: adds tests
2025-12-02 14:16:02 +01:00
39d2cb7820
refactor: improve email copy with MapSet, RFC 5322 commas, and cond
...
continuous-integration/drone/push Build is passing
Performance optimization, RFC-compliant separator, better tests
2025-12-02 12:10:59 +01:00
e2ace3d2a8
feat: add bulk email copy for selected members ( #230 )
...
continuous-integration/drone/push Build is passing
Copy selected members' emails to clipboard in 'First Last <email>' format
2025-12-02 10:02:58 +01:00
d039e4bb7d
formatting and refactor member fields constant
continuous-integration/drone/push Build is passing
2025-12-02 10:02:52 +01:00
f24d4985fc
tests: adds tests
2025-12-02 09:22:26 +01:00
cf354bcf25
test updated
2025-12-01 10:43:19 +01:00
418b42d35a
adds tests
2025-12-01 10:42:10 +01:00
82bd573276
formatting
2025-12-01 08:50:06 +01:00
4313703538
test: added tests
2025-12-01 08:50:06 +01:00
df05eafc99
refactor: simplify Member.available_for_linking action to 9 lines
...
Extract filter logic into apply_linking_filters/3 helper, add Credo disable for fuzzy search complexity
2025-11-20 21:44:29 +01:00
90ced26a0e
fix: correct test parameter name from member_search_query to member_search
2025-11-20 18:57:38 +01:00
adc6608e54
test: fix test auth and improve reliability
...
continuous-integration/drone/push Build is passing
- Add admin authentication to all tests
- Fix 12 tests that were failing due to missing authentication
- 3 tests still have business logic issues (will fix separately)
2025-11-20 16:51:45 +01:00