03aacefb6e
fix: improve amount validation, layout, and remove duplicate button
...
- Add oninput validation for amount field to catch invalid input immediately
- Fix Current Cycle layout with whitespace-nowrap and wider width
- Remove duplicate Regenerate Missing Cycles button (same functionality)
- Add tooltip to Regenerate Cycles button explaining functionality
2025-12-18 15:08:36 +01:00
b7a49eabe4
fix: handle empty cycles result in regenerate_cycles event
...
- Match {:ok, cycles, notifications} tuple correctly
- Handle case when no cycles are generated ({:ok, [], []})
- Prevents CaseClauseError when regeneration produces no new cycles
2025-12-18 15:08:36 +01:00
803d9a0a94
fix: normalize checkbox value and improve UI layout
...
- Normalize checkbox 'on' value to boolean true in settings
- Change Payment Data layout to flex-nowrap for horizontal display
- Replace membership fee type dropdown with display-only view
- Fix tests to use correct button selectors and switch to membership fees tab
2025-12-18 15:08:35 +01:00
3f723a3c3a
feat: add cycle management features to membership fees component
...
- Add regenerate cycles functionality
- Add delete cycle with confirmation
- Add edit cycle amount modal
- Add regenerate missing cycles button
- Complete cycle management UI implementation
2025-12-18 15:08:35 +01:00
e0702240d3
feat: add membership fee type name to payment data section
...
- Display type name alongside amount, interval, and cycle statuses
- Improves clarity by showing which membership fee type is assigned
2025-12-18 15:08:34 +01:00
aece03c9c2
feat: show both last and current cycle status in payment data
...
- Add current cycle status calculation and display
- Show both Last Cycle and Current Cycle status badges
- Replace single Status field with two separate fields
2025-12-18 15:08:33 +01:00
5460ebdd5a
feat: add payment data section with membership fee type info
...
- Add Payment Data section showing membership fee amount, interval, and last cycle status
- Use real membership fee type data instead of mockup
- Calculate last cycle status from loaded cycles
2025-12-18 15:08:32 +01:00
bc989422e2
refactor: reduce function nesting depth to fix Credo warnings
...
Extract nested conditionals into separate helper functions:
- check_amount_change/2 and related helpers in MembershipFeeTypeLive.Form
- check_interval_change/2 and related helpers in MemberLive.Form
This reduces nesting depth from 3 to 2, improving code readability.
2025-12-18 15:08:32 +01:00
35cafd6e6a
feat: add membership fee type dropdown to member form
...
- Add membership fee type selection in member create/edit form
- Show warning if different interval selected
- Filter available types to same interval only
2025-12-18 15:08:31 +01:00
920cae656e
feat: add membership fees section to member detail view
...
- Add membership fees section with cycle table
- Display cycles with interval, amount, status, and actions
- Add membership fee type dropdown (same interval only)
- Add status change actions (mark as paid/suspended/unpaid)
- Add cycle regeneration (manual and missing cycles)
- Add cycle amount editing
- Add cycle deletion with confirmation
2025-12-18 15:08:31 +01:00
99dc17bf4d
feat: add membership fee status column to member list
...
- Add status column showing last completed or current cycle status
- Add toggle to switch between last/current cycle view
- Add color coding (green/red/gray) for paid/unpaid/suspended
- Add filters for unpaid cycles in last/current cycle
- Efficiently load cycles to avoid N+1 queries
2025-12-18 15:08:31 +01:00
be6ea56860
fix: improve mailto BCC encoding
...
Use URI.encode_www_form() instead of URI.encode() for mailto query parameters.
This is the safer choice for query parameter encoding.
Add comment about mailto URL length limits that vary by email client.
2025-12-16 14:51:42 +01:00
fb91f748c2
perf: optimize member index selection calculations
...
Calculate selected_count, any_selected? and mailto_bcc once in assigns
instead of recalculating Enum.any? and Enum.count multiple times in template.
This improves render performance and makes the template code more readable.
2025-12-16 14:50:52 +01:00
4e86351e1c
feat: disable email buttons instead hide them
2025-12-16 14:35:00 +01:00
9dba4d1019
fix: credo warnings
continuous-integration/drone/push Build is passing
2025-12-11 14:21:40 +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
1b06f885bf
Merge branch 'main' into feature/223_member_checkbox
continuous-integration/drone/push Build is failing
2025-12-08 11:43:54 +01:00
8512be0282
feat: reuse form_section in settings
continuous-integration/drone/push Build is failing
2025-12-04 12:32:24 +01:00
cf6a108049
refactor: DRY - use Mv.Constants.custom_field_prefix() instead of string literals
continuous-integration/drone/push Build is passing
2025-12-03 18:47:27 +01:00
6cf955b024
fix: get_from_cookie now correctly handles list return from get_req_header
2025-12-03 18:37:51 +01:00
217ed632fa
fix: preserve paid_filter in URL when toggling field visibility
2025-12-03 18:36:13 +01:00
3b038d451d
fix: use all_custom_fields in prepare_dynamic_cols
...
Allows users to enable globally hidden custom fields in the table view
2025-12-03 18:20:32 +01:00
690083bdf0
refactor: fix Credo warnings in field visibility modules
...
Use Enum.map_join and reduce nesting in format_custom_field_label
2025-12-03 18:10:13 +01:00
4bbba65038
fix: remove duplicate member_fields_visible assignment in mount/3
...
Removes dead code and fixes initialization to use FieldVisibility module
2025-12-03 18:09:08 +01:00
75e1fc8a3a
fix: use all_custom_fields in handle_info(:field_toggled)
...
Fixes bug where globally hidden custom fields could not be enabled via dropdown
2025-12-03 18:07:37 +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
2542bcf9e4
fix: improve gettext translations and deduplicate email formatting in member views
continuous-integration/drone/push Build was killed
2025-12-03 15:30:09 +01:00
ed961f7585
Redesign member view/edit UI with improved accessibility
...
- Group fields into Personal Data, Custom Fields, and Payment Data sections
- Fix WCAG AA contrast issues and semantic HTML (dt/dd in dl)
- Format mailto links with member name in href attribute
2025-12-03 15:29:29 +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
422cf37a1e
Merge pull request 'Fix UI issues' ( #242 ) from ui-fixes into main
...
continuous-integration/drone/push Build is failing
Reviewed-on: #242
Reviewed-by: simon <s.thiessen@local-it.org>
2025-12-03 14:30:13 +01:00
8e4f1ba674
feat: add col_click attribute to table component for checkbox column
...
- Add col_click slot attribute to table component that overrides row_click
- Clicking anywhere in the checkbox column now toggles the checkbox
- Clicking other columns still navigates to member details
Closes #223
2025-12-03 14:24:10 +01:00
e6c5a58c65
Show dates in european format
continuous-integration/drone/push Build was killed
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
125f9ae77b
fix: mailto formatting
continuous-integration/drone/push Build is passing
2025-12-03 10:14:57 +01:00
206e733511
fix: search
continuous-integration/drone/push Build is failing
2025-12-02 18:46:16 +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
875c422b7d
Fix missing search query socket assign in member index
continuous-integration/drone/push Build is passing
2025-12-02 16:04:07 +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
386b4c9e65
Merge pull request 'Don't show birthday field for default configurations closes #161 ' ( #239 ) from feature/161_remove_birthday into main
...
continuous-integration/drone/push Build is passing
Reviewed-on: #239
Reviewed-by: rafael <rafael@noreply.git.local-it.org>
2025-12-02 15:48:59 +01:00
a67a91cffa
Mark required fields in UI
continuous-integration/drone/push Build is passing
2025-12-02 15:23:44 +01:00
0fb43a0816
feat: adds field visibility dropdown live component
continuous-integration/drone/push Build is failing
2025-12-02 15:00:09 +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
e81aecce48
feat: adds member visibility to live view
2025-12-02 14:17:04 +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
ba78a6ac7a
feat: improve email copy UX with colored alerts and mailto button
...
continuous-integration/drone/push Build is passing
- Green success alert for copied confirmation
- Blue info alert with BCC privacy tip
- Mailto button opens email program with BCC recipients
- Alerts stack vertically instead of overlapping
2025-12-02 11:42:11 +01:00