@if (canManage) {
@if (membership(); as currentMembership) {
{{ 'XP.Membership.CurrentScopePlan' | translate: { Default: 'Current management-scope plan' } }}
{{ currentMembership.plan?.name || currentMembership.planId }}
{{ 'XP.Membership.Status' | translate: { Default: 'Status' } }}
{{ 'XP.Membership.MemberStatuses.' + currentMembership.status | translate: { Default: currentMembership.status } }}
{{ 'XP.Membership.Source' | translate: { Default: 'Source' } }}
{{ 'XP.Membership.Sources.' + currentMembership.source | translate: { Default: currentMembership.source } }}
{{ 'XP.Membership.RenewalMode' | translate: { Default: 'Renewal mode' } }}
{{ 'XP.Membership.RenewalModes.' + currentMembership.renewalMode | translate: { Default: currentMembership.renewalMode } }}
{{ 'XP.Membership.RemainingPoints' | translate: { Default: 'Remaining points' } }}
@if (isUnlimited()) { } @else { {{ remainingPoints() | number: '1.0-2' }} }
@if (canManagePersonalPoints) {
{{ 'XP.Membership.PersonalPoints' | translate: { Default: 'Personal points' } }}
{{ personalPointsBalance() | number: '1.0-2' }}
}
{{ 'XP.Membership.UsedPoints' | translate: { Default: 'Used points' } }}
@if (isUnlimited()) { {{ currentMembership.pointsUsed | number: '1.0-2' }} / ∞ } @else { {{ currentMembership.pointsUsed | number: '1.0-2' }} / {{ currentMembership.pointsGranted | number: '1.0-2' }} }
{{ 'XP.Membership.PeriodEnd' | translate: { Default: 'Period end' } }}
{{ currentMembership.currentPeriodEnd | date: 'medium' }}
@if (currentMembership.status === MembershipStatusEnum.Active) { } @if (currentMembership.status === MembershipStatusEnum.Paused) { } @if (currentMembership.status !== MembershipStatusEnum.Expired) { } @if (!isExternallyManagedMembership()) { }
} @else {
{{ 'XP.Membership.NoUserMembership' | translate: { Default: 'No membership has been created for this user yet.' } }}
} @if (isTenantScope && scopeMemberships().length) {
{{ 'XP.Membership.MembershipsByScope' | translate: { Default: 'Current plans by scope' } }}
{{ 'XP.Membership.MembershipsByScopeHint' | translate : { Default: "View the tenant plan, each organization's current plan, and upcoming periods." } }}
@for (scopeMembership of scopeMemberships(); track scopeMembership.id) {
{{ scopeMembershipLabel(scopeMembership) }}
@if (scopeMembership.organizationId) { {{ 'XP.Membership.OrganizationScope' | translate: { Default: 'Organization membership' } }} } @else { {{ 'XP.Membership.TenantScope' | translate: { Default: 'Tenant membership' } }} }
{{ 'XP.Membership.CurrentPlan' | translate: { Default: 'Current plan' } }}
{{ scopeMembership.plan?.name || scopeMembership.planId }} @if (isEffectiveInScope(scopeMembership)) { {{ 'XP.Membership.EffectiveInScope' | translate: { Default: 'Effective in this scope' } }} } @if (isCurrentScopeMembership(scopeMembership)) { {{ 'XP.Membership.CurrentManagementScope' | translate: { Default: 'Current management scope' } }} }
{{ 'XP.Membership.MemberStatuses.' + scopeMembership.status | translate: { Default: scopeMembership.status } }}
{{ 'XP.Membership.PeriodEnd' | translate: { Default: 'Period end' } }}
{{ scopeMembership.currentPeriodEnd | date: 'medium' }}
@if (upcomingPeriodsForMembership(scopeMembership.id).length) {
{{ 'XP.Membership.UpcomingPeriods' | translate: { Default: 'Upcoming periods' } }}
{{ upcomingPeriodsForMembership(scopeMembership.id).length }}
@for (period of upcomingPeriodsForMembership(scopeMembership.id); track period.id) {
{{ 'XP.Membership.Plan' | translate: { Default: 'Plan' } }}
{{ period.planSnapshot.name }}
{{ 'XP.Membership.EffectivePeriod' | translate: { Default: 'Effective period' } }}
{{ period.periodStart | date: 'medium' }} – {{ period.periodEnd | date: 'medium' }}
{{ 'XP.Membership.CyclePoints' | translate: { Default: 'Plan cycle points' } }}
@if (period.pointsGranted === null) { } @else { {{ period.pointsGranted | number: '1.0-2' }} }
@if (isExternallyManagedPeriod(period)) { {{ 'XP.Membership.ExternalPeriodManagedHint' | translate: { Default: 'Refund and cancel in the billing system' } }} } @else if (period.organizationId) { {{ 'XP.Membership.ManageInOrganizationScope' | translate: { Default: 'Switch to the organization scope to manage' } }} } @else if (!canCancelPeriod(period)) { {{ 'XP.Membership.CancelLaterPeriodsFirst' | translate: { Default: 'Cancel later periods first' } }} } @else { }
}
}
}
} @if (!isTenantScope && scheduledPeriods().length) {
{{ 'XP.Membership.UpcomingPeriods' | translate: { Default: 'Upcoming periods' } }}
{{ 'XP.Membership.UpcomingPeriodsHint' | translate : { Default: 'Renewed periods start after the current period. The current period and its points stay unchanged.' } }}
{{ scheduledPeriods().length }}
@for (period of scheduledPeriods(); track period.id) {
{{ 'XP.Membership.Plan' | translate: { Default: 'Plan' } }}
{{ period.planSnapshot.name }}
{{ 'XP.Membership.EffectivePeriod' | translate: { Default: 'Effective period' } }}
{{ period.periodStart | date: 'medium' }} – {{ period.periodEnd | date: 'medium' }}
{{ 'XP.Membership.CyclePoints' | translate: { Default: 'Plan cycle points' } }}
@if (period.pointsGranted === null) { } @else { {{ period.pointsGranted | number: '1.0-2' }} }
@if (isExternallyManagedPeriod(period)) { {{ 'XP.Membership.ExternalPeriodManagedHint' | translate: { Default: 'Refund and cancel in the billing system' } }} } @else if (!canCancelPeriod(period)) { {{ 'XP.Membership.CancelLaterPeriodsFirst' | translate: { Default: 'Cancel later periods first' } }} } @else { }
}
} @if (isExternallyManagedMembership()) {
{{ 'XP.Membership.ExternallyManagedMembershipHint' | translate : { Default: 'This membership is managed by an external workflow and cannot be replaced or renewed here.' } }}
} @else {
{{ 'XP.Membership.AssignPlan' | translate: { Default: 'Assign plan' } }}
@for (plan of plans(); track plan.id) { {{ plan.name }} } {{ 'XP.Membership.RenewalModes.auto' | translate: { Default: 'Auto renew' } }} {{ 'XP.Membership.RenewalModes.manual' | translate: { Default: 'Manual renew' } }}
}
{{ 'XP.Membership.AdjustCyclePoints' | translate: { Default: 'Adjust cycle points' } }}
{{ 'XP.Membership.CyclePointsHint' | translate: { Default: 'Only affects the current membership period.' } }}
{{ 'XP.Membership.Increase' | translate: { Default: 'Increase' } }} {{ 'XP.Membership.Decrease' | translate: { Default: 'Decrease' } }}
@if (canManagePersonalPoints) {
{{ 'XP.Membership.AdjustPersonalPoints' | translate: { Default: 'Adjust personal points' } }}
{{ 'XP.Membership.PersonalPointsHint' | translate: { Default: 'Permanent balance. Membership cycle points are consumed first.' } }}
{{ 'XP.Membership.Increase' | translate: { Default: 'Increase' } }} {{ 'XP.Membership.Decrease' | translate: { Default: 'Decrease' } }}
}
{{ 'XP.Membership.OperationHistory' | translate: { Default: 'Operation history' } }}
{{ 'XP.Membership.OperationHistoryHint' | translate: { Default: 'Recent assignments, point changes, renewals, and status changes.' } }}
@for (entry of auditEntries(); track entry.id) {
{{ 'XP.Membership.LedgerSource.' + entry.source | translate: { Default: entry.source } }} {{ auditScopeLabel(entry) }} @if (entry.pointsDelta) { {{ entry.pointsDelta > 0 ? '+' : '' }}{{ entry.pointsDelta | number: '1.0-2' }} }
{{ auditReason(entry) }}
{{ 'XP.Membership.Operator' | translate: { Default: 'Operator' } }}
{{ auditActorLabel(entry) }}
{{ 'XP.Membership.OperationTime' | translate: { Default: 'Time' } }}
{{ entry.createdAt | date: 'medium' }}
} @empty {
{{ 'XP.Membership.NoOperationHistory' | translate: { Default: 'No membership operations yet.' } }}
}
}