Skip to content

Where this file lives

  • This path (docs/membership/contact-subscription-membership-fees.md) is inside the rakletv3 repo for easy reference during review and maintenance.
  • This document describes the current implemented behavior for subscription membership fee display on the manager contact membership tab.

Contact Subscription Membership Fees

Generated: 2026-05-04 Repo: rakletadmin/rakletv3 Focus: Manager UI subscription fee display on #/manager/contacts/{contactId}/membership

Purpose

The manager contact membership tab shows the membership fee for each subscription row so managers can see the amount attached to the subscription plan without opening the subscription details page.

Data model

Subscription rows are exposed to the manager UI through CustomPlanImportDto. The DTO carries PlanMembershipFee, Currency, GroupMembershipEnabled, GroupMembershipPriceType, and ParentMembershipId so the UI can render a formatted amount for parent and child subscriptions.

OrganisationMembershipService.ConvertMemberToContactInfo() maps database subscriptions into CustomPlanImportDto for Elasticsearch indexing. V2ContactsController.GetContactInfo() also enriches subscription rows at read time, so older indexed contact documents are corrected in the API response before the manager UI renders them.

Business rules

Scenario Displayed PlanMembershipFee
Standalone subscription The subscription plan's CustomMemberType.MembershipFee
Parent group membership subscription The parent plan's CustomMemberType.MembershipFee
Child subscription under a FixedPrice group membership parent 0
Child subscription under a ChargePerSubMember group membership parent The child subscription plan's CustomMemberType.MembershipFee

The amount is formatted with the subscription plan Currency. If a legacy response does not include a subscription currency, the manager UI falls back to OrganizationService.Organization.Currency.

UI behavior

contact-membership.html adds a MembershipFee column to the subscription table. The table still renders parent and child rows in the existing flattened order, with child rows visually indented under their parent subscription.

QA checklist

  • Open a contact with a standalone paid subscription and confirm the subscription table shows that plan's membership fee.
  • Open a contact with a FixedPrice group membership parent and at least one child subscription. Confirm the parent row shows the parent fee and child rows show 0.
  • Open a contact with a ChargePerSubMember group membership parent and at least one child subscription. Confirm child rows show their own plan fee.
  • Confirm zero values render as a formatted zero amount, not as Free.