557eb4d27d
refactor: simplify system role deletion validation
...
Remove redundant action_type check since validation already
runs only on destroy actions. Add field to error for better
error handling.
2026-01-06 18:37:34 +01:00
12c08cabee
docs: clean up PermissionSets documentation
...
Remove issue number references from moduledoc
2026-01-06 18:14:19 +01:00
82ec4e565a
refactor: use UUIDv7 and improve Role validations
...
- Change id from uuid_primary_key to uuid_v7_primary_key
- Replace custom validation with built-in one_of validation
- Add explicit on_delete: :restrict for users foreign key
- Update postgres references configuration
2026-01-06 18:14:16 +01:00
90c32c2afd
feat: add role relationship to User resource
...
Add belongs_to :role relationship to User resource and register
Authorization domain in config.
2026-01-06 17:18:33 +01:00
4535551b8d
feat: add Role resource with validations
...
Create Role resource with name, description, permission_set_name,
and is_system_role fields. Add validations for permission_set_name
and system role deletion protection.
2026-01-06 17:18:32 +01:00
1b2927ce40
feat: create Authorization domain
...
Add Mv.Authorization domain with AshAdmin and AshPhoenix extensions.
Register domain in config for role management.
2026-01-06 17:18:30 +01:00
37d1655227
feat: add PermissionSets stub module for role validation
...
Add minimal PermissionSets module with all_permission_sets/0 function
to support permission_set_name validation in Role resource.
2026-01-06 17:18:29 +01:00
850f00fe22
formatting
continuous-integration/drone/push Build is passing
2026-01-02 13:53:24 +01:00
08f563a412
Merge branch 'main' into bugfix/274_required_custom_fields
continuous-integration/drone/push Build is failing
2026-01-02 13:47:24 +01:00
0df5d1c0b9
Merge branch 'main' into feature/280_membership_fee_ui
continuous-integration/drone/push Build is passing
2025-12-26 23:14:10 +01:00
77ac3d1b18
fix: remove duplicate toggle button in table header
...
Keep only the toggle button in toolbar for better UX.
2025-12-26 21:41:22 +01:00
619fdc90af
fix: clear warning state on Decimal.parse error
...
Explicitly call hide_amount_warning when Decimal.parse returns error.
2025-12-26 21:41:14 +01:00
856ce53295
fix: improve MembershipFeesComponent state management and error handling
...
Replace assign_new with assign for cycles and available_fee_types. Set regenerating flag at event start. Fix create_cycle parsing with explicit error handling. Use atomic bulk delete for all cycles. Improve delete confirmation robustness. Fix unless/else pattern for Credo compliance.
2025-12-26 21:41:05 +01:00
3afc20c2e2
refactor: improve format_currency robustness and reduce complexity
...
Extract formatting logic into helper functions to reduce cyclomatic complexity. Improve pattern matching for edge cases.
2025-12-26 21:40:53 +01:00
ee6589c4fa
docs: correct load_cycles_for_members documentation
...
Document that function loads all cycles, not just relevant ones, as no database-level filtering is currently implemented.
2025-12-26 21:40:42 +01:00
5318b2c07d
docs: add typespec for SetDefaultMembershipFeeType.change/3
2025-12-26 21:40:32 +01:00
d02add75ef
fix: convert after_action to after_transaction for cycle generation
...
Replace after_action hooks with after_transaction to ensure async tasks only run after successful commit. Extract common cycle generation logic into handle_cycle_generation/2 to reduce duplication. Add structured error logging with context.
2025-12-26 21:40:22 +01:00
b2c2013b4d
refactor: extract sql_sandbox config to Mv.Config module
...
Centralize application-wide configuration values for better maintainability.
2025-12-26 21:40:12 +01:00
961261eff2
feat: add Task.Supervisor to supervision tree
...
Add Task.Supervisor for supervised async task execution in cycle generation.
2025-12-26 21:40:04 +01:00
3035869fc8
Add explicit domain to Ash.get! for consistency
continuous-integration/drone/push Build is passing
2025-12-26 21:04:43 +01:00
a8ea121800
Refactor cycle generator and update translations
...
continuous-integration/drone/push Build is passing
Extract error handling into separate functions to reduce nesting depth.
2025-12-26 21:01:17 +01:00
3cf8244cd6
fix linting errors
continuous-integration/drone/push Build is failing
2025-12-23 18:14:59 +01:00
1dd68bcaf2
feat: coherent required boolean handling
continuous-integration/drone/push Build is failing
2025-12-23 18:08:31 +01:00
33652265b8
feat: add accessible empty value also to member fields
continuous-integration/drone/push Build is failing
2025-12-23 17:10:52 +01:00
8e58829e95
fix: improve performance loading custom fields
2025-12-23 17:07:38 +01:00
4e101ea36e
feat: Add WCAG-compliant handling for boolean custom fields
2025-12-23 17:02:07 +01:00
e3ff3e610c
feat: optimize required custom fields query
2025-12-23 17:01:50 +01:00
2d2865b5a6
feat: improve validation for custom fields
2025-12-23 17:01:21 +01:00
5718a37aca
fix: show custom field input fields also when empty
continuous-integration/drone/push Build is passing
2025-12-23 16:15:22 +01:00
1bb03b52c9
Fix accessibility issues: add tooltip for disabled delete button
continuous-integration/drone/push Build is failing
2025-12-22 18:00:17 +01:00
9233f56847
Fix accessibility issues: add select label, improve contrast, fix heading hierarchy
2025-12-22 17:56:56 +01:00
18766df224
Optimize member count queries to avoid N+1 problem
...
Load all member counts in a single query during mount. Counts are stored in assigns
as a map and retrieved without additional queries.
2025-12-22 17:40:50 +01:00
46af6bbbed
Add required validation and error display for interval field
...
Show required asterisk and validation errors when interval is not selected
2025-12-22 17:22:12 +01:00
75dc7056ae
Fix amount change warning and form value preservation
...
Add phx-debounce to amount input and preserve form values on confirm
2025-12-22 17:13:51 +01:00
562d7d6ab4
Fix handle_event for update_create_cycle_date to use correct param name
2025-12-22 17:02:07 +01:00
3241dd7d96
Fix cycle end calculation for misaligned cycle_start dates
...
Make cycle generation idempotent by skipping existing cycles
2025-12-22 16:39:49 +01:00
50a8657718
Fix cycle action buttons layout and visibility
...
Arrange Paid/Suspended/Unpaid/Delete buttons side by side without wrapping.
Hide Suspend button when cycle is already suspended, matching behavior
of Paid and Unpaid buttons.
2025-12-18 15:11:03 +01:00
f25e198b0e
Update cycle button styling and text
...
Make cycle button match PaymentFilterComponent and Columns button style.
Show 'Current Cycle Payment Status' or 'Last Cycle Payment Status'
based on active state. Button shows active state when current cycle
is selected.
2025-12-18 15:11:03 +01:00
adb107e6a4
Rename cycle button to Show Last/Current Cycle Payment Status
...
Update button text and styling to match PaymentFilterComponent.
Button now shows active state when filter is applied.
2025-12-18 15:11:02 +01:00
c65b3808bf
Refactor filters to use cycle status instead of paid field
...
Replace paid_filter with cycle_status_filter that filters based on
membership fee cycle status (last or current cycle). Update
PaymentFilterComponent to use new filter with options All, Paid, Unpaid.
Remove membership fee status filter dropdown. Extend
filter_members_by_cycle_status/3 to support both paid and unpaid filtering.
Update toggle_cycle_view to preserve filter state in URL.
2025-12-18 15:11:02 +01:00
098b3b0a2a
Remove paid field from members
...
Remove paid field from Member resource, database migration,
tests, seeds, and UI. This field is no longer needed as payment
status is now tracked via membership fee cycles.
2025-12-18 15:11:02 +01:00
be8a396ab6
Improve payment data box layout and translations
...
Change 'Payment Cycle' to 'Payment Interval' for accuracy.
Adjust width constraints to use min-w-* instead of fixed w-*
for better responsiveness. Use flex-wrap for better layout.
2025-12-18 15:11:00 +01:00
128866ead3
Replace dropdown with action buttons in cycles view
...
Replace dropdown menu with individual buttons for status changes.
Buttons are only shown when the status transition is possible.
Make amount clickable to edit instead of separate button.
2025-12-18 15:10:36 +01:00
9a1f0fbfa6
Remove future date validation for join_date
...
Allow join_date to be set in the future. Only validation remaining
is that exit_date must be after join_date.
2025-12-18 15:10:36 +01:00
8f8c3f258a
Reduce function nesting depth
2025-12-18 15:10:36 +01:00
128c712dbc
fix: improve get_last_completed_cycle and fix test helpers
...
- Fix get_last_completed_cycle to find most recent completed cycle
- Fix create_cycle helpers to delete auto-generated cycles first
- Fix Ash.destroy return value handling
- Fix form selectors to use specific IDs
- Fix URL parameter names for filters
- Fix Ash.read_one return value expectations in tests
2025-12-18 15:10:35 +01:00
98dc73ee37
refactor: fix credo warnings and format code
...
- Replace Enum.map/2 |> Enum.join/2 with Enum.map_join/3 for efficiency
- Refactor get_existing_form_values to reduce cyclomatic complexity
- Replace length/1 with Enum.empty?/1 for better performance
- Update gettext translations
2025-12-18 15:10:07 +01:00
97c9ef670b
fix: remove type="number" from amount input, use text input like postal_code
...
- Follow same pattern as postal_code field in member form
- Ash validates Decimal format automatically
- Text input allows better control and validation feedback
2025-12-18 15:08:37 +01:00
10fe866de6
feat: add phx-debounce to amount input for real-time validation
...
- Debounce validation to 300ms for better UX
- Ash will automatically validate Decimal format
- Provides immediate feedback on invalid input
2025-12-18 15:08:37 +01:00
acfbd8f62b
fix: remove unused validate_amount_format function
...
- Function was removed but definition remained
- Ash handles Decimal validation automatically
2025-12-18 15:08:37 +01:00