Commit graph

153 commits

Author SHA1 Message Date
9ecfe784db
Add missing Gettext translations for member deletion errors
Add German and English translations for member deletion success and
error messages.
2026-01-13 15:17:03 +01:00
bc87893134
Integrate Member policies in LiveViews
- Add on_mount hook to ensure user role is loaded in all Member LiveViews
- Pass actor parameter to all Ash operations (read, get, create, update, destroy, load)
2026-01-13 15:12:24 +01:00
4fffeeaaa0
Fix: Seeds use admin actor instead of NoActor bypass
This ensures seeds work correctly with the new fail-closed NoActor
policy in production, using proper authorization instead of bypass.
2026-01-13 15:01:55 +01:00
469c4c0c1d i18n: update translations
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-13 10:55:09 +01:00
720a43a38c feat: added csv templates
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-12 17:36:15 +01:00
3fd6410bb4
style: fix linting
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-12 15:37:58 +01:00
8a1b14fc79
fix: fix tests and remove navbar remainings
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-12 15:16:31 +01:00
e7515b5450
Merge remote-tracking branch 'origin/main' into sidebar 2026-01-12 14:15:12 +01:00
922f9f93d0 Merge branch 'main' into feature/223_memberfields_settings
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-12 13:15:40 +01:00
e38de7d690 chore: rename custom to data field in the UI
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-12 09:50:51 +01:00
675ab14fce
fix: correct German translations for role management
Fix incorrect translations:
- 'Listing Roles' -> 'Rollen auflisten' (was 'Benutzer*innen auflisten')
- 'Custom' -> 'Benutzerdefiniert' (was 'Benutzerdefinierte Felder')
2026-01-08 16:20:27 +01:00
37a2fc3e83
refactor: replace cond with if in handle_delete_role functions 2026-01-08 16:20:25 +01:00
03c1f747c5
chore: update gettext files and test cleanup
Update translation files after code changes and remove unused
debug logging code from tests.
2026-01-08 16:20:22 +01:00
b638a54bd6
feat: prevent deletion of roles with assigned users 2026-01-08 16:19:47 +01:00
a24bbc2188
feat: convert Settings to dropdown menu with sub-items
- Convert Settings menu item to dropdown (similar to Contributions)
- Add Global Settings and Roles as sub-items
- Update German translations: 'Global Settings' and 'Roles'
2026-01-08 16:19:00 +01:00
36858db97c
feat: add German translations for role management 2026-01-08 16:18:04 +01:00
2f03f7c00c
feat: assign admin role to admin user in seeds
- Create Admin role if it doesn't exist
- Assign Admin role to admin@mv.local user
- Remove separate create_admin_role script (integrated into seeds)
2026-01-08 16:16:54 +01:00
9a86e0ec01
feat: implement role management LiveViews
Add complete CRUD interface for role management under /admin/roles.

- Index page with table showing name, description, permission_set_name, is_system_role
- Show page for role details
- Form component for create/edit with permission_set_name dropdown
- System role badge and disabled delete button
- Flash messages for success/error
- Authorization checks using MvWeb.Authorization helpers
- Comprehensive test coverage (22 tests)

Routes added under /admin scope. All LiveViews load user role
for authorization checks. Form uses custom dropdown for permission sets.
2026-01-08 16:16:53 +01:00
47c46eaebf i18n: update translations 2026-01-08 11:40:04 +01:00
36776f8e28 fix tests and linting 2026-01-07 18:11:36 +01:00
df8c6a1854 Merge branch 'main' into feature/223_memberfields_settings
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-07 11:42:54 +01:00
909d4af2a2 Merge branch 'main' into feature/223_memberfields_settings 2026-01-07 11:11:02 +01:00
0c8a255476 Merge branch 'main' into feature/273_member_fields
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-07 10:22:18 +01:00
29a953c038 fix: prevent migration rollback failure when NULL values exist 2026-01-07 09:52:40 +01:00
5f13901ca5 security: remove is_system_role from public API
Remove is_system_role from accept lists in create_role and update_role
actions. This field should only be set via seeds or internal actions to
prevent users from creating unkillable roles through the public API.
2026-01-06 19:04:03 +01:00
ce1d5790a3 refactor: squash migrations into single authorization domain migration
Combine initial authorization migration with UUIDv7 update into
one migration. Migration now creates roles table with UUIDv7
default and explicit on_delete: :restrict FK constraint.
2026-01-06 18:37:39 +01:00
402a78dd0a refactor: update migration for UUIDv7 and explicit FK constraint
- Add on_delete: :restrict to users.role_id foreign key
- Update roles.id to use uuid_generate_v7() default
- Regenerate resource snapshots
2026-01-06 18:14:18 +01:00
b569612a63 feat: add resource snapshots for roles and users
All checks were successful
continuous-integration/drone/push Build is passing
Add Ash resource snapshots generated during migration creation.
2026-01-06 17:18:45 +01:00
851d63f626 feat: add authorization domain migration
Create roles table and add role_id to users table with indexes
and foreign key constraints.
2026-01-06 17:18:34 +01:00
935ef52c10
style: fix linting issues
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-06 11:08:28 +01:00
ff625c91c5
Merge remote-tracking branch 'origin/main' into sidebar
Some checks failed
continuous-integration/drone/push Build is failing
2026-01-06 10:52:55 +01:00
74a2d07c24 i18n: adapts translation
All checks were successful
continuous-integration/drone/push Build is passing
2026-01-02 16:22:15 +01:00
7188315577 tests: fixes tests 2026-01-02 16:20:39 +01:00
17540c6b1d feat: removes phoen number as member field and makes name optional 2026-01-02 16:19:06 +01:00
08f563a412 Merge branch 'main' into bugfix/274_required_custom_fields
Some checks failed
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
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-26 23:14:10 +01:00
0d79e026e2 fix: add Logger metadata keys and update gettext
All checks were successful
continuous-integration/drone/push Build is passing
Add member_id, member_email, error, error_type, cycles_count, and notifications_count to Logger metadata configuration. Update gettext translations.
2025-12-26 21:52:09 +01:00
a8ea121800
Refactor cycle generator and update translations
All checks were successful
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
Some checks failed
continuous-integration/drone/push Build is failing
2025-12-23 18:14:59 +01:00
ca702cf2c1 i18n: Update translations for custom field validation
All checks were successful
continuous-integration/drone/push Build is passing
2025-12-23 17:02:30 +01:00
a03056e6ae Make seed script deterministic and idempotent for fee type assignments
Fix update action name from :update to :update_member for Member resource
2025-12-22 16:56:12 +01:00
16ca4efc03
feat: implement standard-compliant sidebar with comprehensive tests
Some checks failed
continuous-integration/drone/push Build is failing
Implement a new sidebar component based on DaisyUI Drawer pattern without
custom CSS variants. The sidebar supports desktop (expanded/collapsed states)
and mobile (overlay drawer) with full accessibility compliance.

Sidebar Implementation:
- Refactor sidebar component with sidebar_header, menu_item, menu_group,
  sidebar_footer sub-components
- Add logo (mila.svg) with size-8 (32px) always visible
- Implement toggle button with icon swap (chevron-left/right) for desktop
- Add nested menu support with details/summary (expanded) and dropdown
  (collapsed) patterns
- Implement footer with language selector (expanded-only), theme toggle,
  and user menu with avatar
- Update layouts.ex to use drawer pattern with data-sidebar-expanded
  attribute for state management

CSS & JavaScript:
- Add CSS styles for sidebar state management via data-attribute selectors
- Implement SidebarState JavaScript hook for localStorage persistence
- Add smooth width transitions (w-64 ↔ w-16) for desktop collapsed state
- Add CSS classes for expanded-only, menu-label, and icon visibility

Documentation:
- Add sidebar-analysis-current-state.md: Analysis of current implementation
- Add sidebar-requirements-v2.md: Complete specification for new sidebar
- Add daisyui-drawer-pattern.md: DaisyUI pattern documentation
- Add umsetzung-sidebar.md: Step-by-step implementation guide

Testing:
- Add comprehensive component tests for all sidebar sub-components
- Add integration tests for sidebar state management and mobile drawer
- Extend accessibility tests (ARIA labels, roles, keyboard navigation)
- Add regression tests for duplicate IDs, hover effects, and tooltips
- Ensure full test coverage per specification requirements
2025-12-18 16:36:16 +01:00
46fb12c3f4
Add German translations and fix Credo warnings
Add translations for 'Current Cycle Payment Status' and 'Last Cycle
Payment Status'. Replace length/1 with Enum.empty?/1 in seeds tests
to fix Credo warnings.
2025-12-18 15:11:04 +01:00
239d784f3c
Update seeds: member without fee type, cycles with various statuses
Add member without membership fee type. Generate cycles for members
with fee types and set different statuses: all paid, all unpaid, and
mixed (paid/unpaid/suspended). Update tests accordingly.
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
effb710741
Assign membership fee types to all seed members
Ensure all members created in seeds are assigned to a membership fee type
using round-robin distribution. Add tests to verify all members have fee
types and each fee type has at least one member.
2025-12-18 15:11:03 +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
ab7fa38010
fix: remove last fuzzy marker from Edit Membership Fee Type translation 2025-12-18 15:10:33 +01:00