Configuring access rights in the CRM Super Admin
This commit is contained in:
@@ -37,6 +37,220 @@ export interface AuthUserDto {
|
||||
organizationId: string;
|
||||
organizationName?: string;
|
||||
hasAvatar?: boolean;
|
||||
enabledModules?: OrgModuleKey[];
|
||||
subscription?: SubscriptionSummaryDto | null;
|
||||
}
|
||||
|
||||
export type BillingPlanCode =
|
||||
| "trial"
|
||||
| "monthly"
|
||||
| "quarterly"
|
||||
| "semiannual"
|
||||
| "yearly"
|
||||
| "custom";
|
||||
|
||||
export type BillingAccountStatus = "active" | "expired" | "suspended";
|
||||
|
||||
export const BILLING_PLAN_CODES: BillingPlanCode[] = [
|
||||
"trial",
|
||||
"monthly",
|
||||
"quarterly",
|
||||
"semiannual",
|
||||
"yearly",
|
||||
"custom",
|
||||
];
|
||||
|
||||
export const BILLING_PLAN_LABELS: Record<BillingPlanCode, string> = {
|
||||
trial: "دمو ۱۵ روزه",
|
||||
monthly: "ماهانه",
|
||||
quarterly: "سهماهه",
|
||||
semiannual: "ششماهه",
|
||||
yearly: "یکساله",
|
||||
custom: "سفارشی",
|
||||
};
|
||||
|
||||
/** مدت پیشفرض پلنها (روز) — custom ندارد */
|
||||
export const BILLING_PLAN_DAYS: Record<Exclude<BillingPlanCode, "custom">, number> = {
|
||||
trial: 15,
|
||||
monthly: 30,
|
||||
quarterly: 90,
|
||||
semiannual: 180,
|
||||
yearly: 365,
|
||||
};
|
||||
|
||||
export const BILLING_PLAN_DEFAULT_MAX_ORGS: Record<
|
||||
Exclude<BillingPlanCode, "custom">,
|
||||
number
|
||||
> = {
|
||||
trial: 1,
|
||||
monthly: 3,
|
||||
quarterly: 5,
|
||||
semiannual: 10,
|
||||
yearly: 20,
|
||||
};
|
||||
|
||||
export type OrgModuleKey =
|
||||
| "customers"
|
||||
| "pipeline"
|
||||
| "products"
|
||||
| "invoices"
|
||||
| "quotes"
|
||||
| "commissions"
|
||||
| "sales_forecast"
|
||||
| "activities"
|
||||
| "tickets"
|
||||
| "workflow_automations"
|
||||
| "message_automations"
|
||||
| "lead_forms"
|
||||
| "project_boards"
|
||||
| "inventory"
|
||||
| "cheques"
|
||||
| "attachments"
|
||||
| "loyalty"
|
||||
| "reports"
|
||||
| "notes"
|
||||
| "tahesab"
|
||||
| "custom_fields"
|
||||
| "currencies"
|
||||
| "team_settings"
|
||||
| "faq";
|
||||
|
||||
export const ORG_MODULE_KEYS: OrgModuleKey[] = [
|
||||
"customers",
|
||||
"pipeline",
|
||||
"products",
|
||||
"invoices",
|
||||
"quotes",
|
||||
"commissions",
|
||||
"sales_forecast",
|
||||
"activities",
|
||||
"tickets",
|
||||
"workflow_automations",
|
||||
"message_automations",
|
||||
"lead_forms",
|
||||
"project_boards",
|
||||
"inventory",
|
||||
"cheques",
|
||||
"attachments",
|
||||
"loyalty",
|
||||
"reports",
|
||||
"notes",
|
||||
"tahesab",
|
||||
"custom_fields",
|
||||
"currencies",
|
||||
"team_settings",
|
||||
"faq",
|
||||
];
|
||||
|
||||
export const ORG_MODULE_LABELS: Record<OrgModuleKey, string> = {
|
||||
customers: "مشتریان",
|
||||
pipeline: "کاریز فروش",
|
||||
products: "محصولات",
|
||||
invoices: "فاکتورها",
|
||||
quotes: "پیشفاکتورها",
|
||||
commissions: "پورسانت",
|
||||
sales_forecast: "هدف و پیشبینی",
|
||||
activities: "فعالیتها",
|
||||
tickets: "تیکتها",
|
||||
workflow_automations: "اتوماسیون گردش کار",
|
||||
message_automations: "اتوماسیون پیامک",
|
||||
lead_forms: "فرمساز سرنخ",
|
||||
project_boards: "کاریز پروژه",
|
||||
inventory: "انبار",
|
||||
cheques: "چکها",
|
||||
attachments: "پیوستها",
|
||||
loyalty: "باشگاه مشتریان",
|
||||
reports: "گزارشها",
|
||||
notes: "یادداشتها",
|
||||
tahesab: "تهحساب",
|
||||
custom_fields: "فیلدهای سفارشی",
|
||||
currencies: "ارزها",
|
||||
team_settings: "تیم و تنظیمات سازمان",
|
||||
faq: "FAQ",
|
||||
};
|
||||
|
||||
export const ORG_MODULE_GROUPS: Array<{
|
||||
title: string;
|
||||
keys: OrgModuleKey[];
|
||||
}> = [
|
||||
{ title: "مشتریان", keys: ["customers"] },
|
||||
{
|
||||
title: "فروش",
|
||||
keys: [
|
||||
"pipeline",
|
||||
"products",
|
||||
"invoices",
|
||||
"quotes",
|
||||
"commissions",
|
||||
"sales_forecast",
|
||||
],
|
||||
},
|
||||
{ title: "فعالیتها", keys: ["activities", "notes"] },
|
||||
{ title: "پشتیبانی", keys: ["tickets", "faq"] },
|
||||
{
|
||||
title: "اتوماسیون",
|
||||
keys: ["workflow_automations", "message_automations"],
|
||||
},
|
||||
{
|
||||
title: "ابزارها",
|
||||
keys: [
|
||||
"lead_forms",
|
||||
"project_boards",
|
||||
"inventory",
|
||||
"cheques",
|
||||
"attachments",
|
||||
"loyalty",
|
||||
"reports",
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "تنظیمات",
|
||||
keys: ["team_settings", "custom_fields", "currencies", "tahesab"],
|
||||
},
|
||||
];
|
||||
|
||||
export function isOrgModuleKey(value: string): value is OrgModuleKey {
|
||||
return (ORG_MODULE_KEYS as readonly string[]).includes(value);
|
||||
}
|
||||
|
||||
export function defaultEnabledModules(): OrgModuleKey[] {
|
||||
return [...ORG_MODULE_KEYS];
|
||||
}
|
||||
|
||||
export interface SubscriptionSummaryDto {
|
||||
planCode: BillingPlanCode;
|
||||
status: BillingAccountStatus;
|
||||
startsAt: string;
|
||||
expiresAt: string;
|
||||
maxOrganizations: number;
|
||||
daysRemaining: number;
|
||||
warn: boolean;
|
||||
}
|
||||
|
||||
export interface BillingAccountDto {
|
||||
id: string;
|
||||
ownerUserId: string;
|
||||
planCode: BillingPlanCode;
|
||||
status: BillingAccountStatus;
|
||||
startsAt: string;
|
||||
expiresAt: string;
|
||||
maxOrganizations: number;
|
||||
externalPaymentRef?: string | null;
|
||||
notes?: string | null;
|
||||
daysRemaining: number;
|
||||
warn: boolean;
|
||||
}
|
||||
|
||||
export interface ApplyBillingPlanRequest {
|
||||
planCode: BillingPlanCode;
|
||||
maxOrganizations?: number;
|
||||
expiresAt?: string;
|
||||
notes?: string | null;
|
||||
status?: BillingAccountStatus;
|
||||
}
|
||||
|
||||
export interface UpdateOrgModulesRequest {
|
||||
enabledModules: OrgModuleKey[];
|
||||
}
|
||||
|
||||
export interface OrgUserDto {
|
||||
@@ -245,6 +459,7 @@ export interface OrganizationDto {
|
||||
baseCurrency: string;
|
||||
enabledCurrencies: string[];
|
||||
exchangeRates: ExchangeRateDto[];
|
||||
enabledModules: OrgModuleKey[];
|
||||
}
|
||||
|
||||
export interface UpdateOrganizationRequest {
|
||||
@@ -2552,6 +2767,8 @@ export interface PlatformStatsDto {
|
||||
userCount: number;
|
||||
activeUserCount: number;
|
||||
membershipCount: number;
|
||||
expiringSoonCount?: number;
|
||||
expiredBillingCount?: number;
|
||||
}
|
||||
|
||||
export interface PlatformOrgMemberDto {
|
||||
@@ -2575,6 +2792,7 @@ export interface PlatformOrganizationDto {
|
||||
memberCount: number;
|
||||
personCount: number;
|
||||
dealCount: number;
|
||||
enabledModules?: OrgModuleKey[];
|
||||
members?: PlatformOrgMemberDto[];
|
||||
}
|
||||
|
||||
@@ -2596,6 +2814,7 @@ export interface PlatformUserDto {
|
||||
lastLoginAt?: string | null;
|
||||
createdAt: string;
|
||||
memberships: PlatformUserMembershipDto[];
|
||||
billing?: BillingAccountDto | null;
|
||||
}
|
||||
|
||||
export interface UpdatePlatformStatusRequest {
|
||||
|
||||
Reference in New Issue
Block a user