Restore Persian UTF-8 labels in shared package.
Undo double-encoding mojibake so automation and other UI strings render correctly.
This commit is contained in:
+243
-243
@@ -3,13 +3,13 @@ export type UserRole = "owner" | "admin" | "sales" | "support";
|
||||
export const USER_ROLES: UserRole[] = ["owner", "admin", "sales", "support"];
|
||||
|
||||
export const USER_ROLE_LABELS: Record<UserRole, string> = {
|
||||
owner: "ÃÂ
çÃÂé",
|
||||
admin: "ÃÂ
ïÃÂñ",
|
||||
sales: "ÃÂñÃÂô",
|
||||
support: "þôêÃÂèçÃÂÃÂ",
|
||||
owner: "مالک",
|
||||
admin: "مدیر",
|
||||
sales: "فروش",
|
||||
support: "پشتیبانی",
|
||||
};
|
||||
|
||||
/** êÃÂøÃÂÃÂ
çê óçòÃÂ
çÃÂààÃÂ
ïÃÂñÃÂê éçñèñçà*/
|
||||
/** تنظیمات سازمانی و مدیریت کاربران */
|
||||
export function canManageSettings(role: UserRole | string | null | undefined): boolean {
|
||||
return role === "owner" || role === "admin";
|
||||
}
|
||||
@@ -18,12 +18,12 @@ export function canManageUsers(role: UserRole | string | null | undefined): bool
|
||||
return role === "owner" || role === "admin";
|
||||
}
|
||||
|
||||
/** ÃÂ
ôçÃÂïàÃÂÃÂ
àþñÃÂÃÂïÃÂâÂÂÃÂçàóçòÃÂ
çà(ÃÂàÃÂÃÂ÷ ÃÂ
çÃÂéÃÂê îÃÂï) */
|
||||
/** مشاهده همه پروندههای سازمان (نه فقط مالکیت خود) */
|
||||
export function canViewAllRecords(role: UserRole | string | null | undefined): boolean {
|
||||
return role === "owner" || role === "admin";
|
||||
}
|
||||
|
||||
/** êúÃÂÃÂñ ÃÂ
çÃÂé þñÃÂÃÂïà*/
|
||||
/** تغییر مالک پرونده */
|
||||
export function canReassignRecords(role: UserRole | string | null | undefined): boolean {
|
||||
return role === "owner" || role === "admin";
|
||||
}
|
||||
@@ -37,10 +37,10 @@ export interface AuthUserDto {
|
||||
organizationId: string;
|
||||
organizationName?: string;
|
||||
hasAvatar?: boolean;
|
||||
/** ÃÂ
çÃÂé ÃÂ
ÃÂÃÂ÷ ÃÂùÃÂàâ çôêñçé ÃÂ
êùÃÂàèàÃÂ
çÃÂé çóê ÃÂàùöàòÃÂñÃÂ
ìÃÂ
ÃÂùà*/
|
||||
/** مالک محیط فعلی — اشتراک متعلق به مالک است نه عضو زیرمجموعه */
|
||||
isOrgOwner?: boolean;
|
||||
enabledModules?: OrgModuleKey[];
|
||||
/** îÃÂçõàçôêñçé ÃÂ
çÃÂé ÃÂ
ÃÂÃÂ÷ (èñçàçùöç ÃÂÃÂ÷ ìÃÂê ÃÂÃÂ
çÃÂô/ïÃÂê ÃÂñÃÂï) */
|
||||
/** خلاصه اشتراک مالک محیط (برای اعضا فقط جهت نمایش/گیت ورود) */
|
||||
subscription?: SubscriptionSummaryDto | null;
|
||||
}
|
||||
|
||||
@@ -64,15 +64,15 @@ export const BILLING_PLAN_CODES: BillingPlanCode[] = [
|
||||
];
|
||||
|
||||
export const BILLING_PLAN_LABELS: Record<BillingPlanCode, string> = {
|
||||
trial: "ïÃÂ
àñõ ñÃÂòÃÂ",
|
||||
monthly: "ÃÂ
çÃÂçÃÂÃÂ",
|
||||
quarterly: "óÃÂâÂÂÃÂ
çÃÂÃÂ",
|
||||
semiannual: "ôôâÂÂÃÂ
çÃÂÃÂ",
|
||||
yearly: "ÃÂéóçÃÂÃÂ",
|
||||
custom: "óÃÂçñôÃÂ",
|
||||
trial: "دمو ۱۵ روزه",
|
||||
monthly: "ماهانه",
|
||||
quarterly: "سهماهه",
|
||||
semiannual: "ششماهه",
|
||||
yearly: "یکساله",
|
||||
custom: "سفارشی",
|
||||
};
|
||||
|
||||
/** ÃÂ
ïê þÃÂôâÂÂÃÂñö þÃÂÃÂâÂÂÃÂç (ñÃÂò) â custom ÃÂïçñï */
|
||||
/** مدت پیشفرض پلنها (روز) — custom ندارد */
|
||||
export const BILLING_PLAN_DAYS: Record<Exclude<BillingPlanCode, "custom">, number> = {
|
||||
trial: 15,
|
||||
monthly: 30,
|
||||
@@ -164,49 +164,49 @@ export const ORG_MODULE_KEYS: OrgModuleKey[] = [
|
||||
];
|
||||
|
||||
export const ORG_MODULE_LABELS: Record<OrgModuleKey, string> = {
|
||||
customers: "ÃÂ
ôêñÃÂçÃÂ",
|
||||
pipeline: "éçñÃÂò ÃÂñÃÂô",
|
||||
products: "ÃÂ
ÃÂõÃÂÃÂçê",
|
||||
invoices: "ÃÂçéêÃÂñÃÂç",
|
||||
quotes: "þÃÂôâÂÂÃÂçéêÃÂñÃÂç",
|
||||
commissions: "þÃÂñóçÃÂê",
|
||||
sales_forecast: "ÃÂïààþÃÂôâÂÂèÃÂÃÂÃÂ",
|
||||
activities: "ÃÂùçÃÂÃÂêâÂÂÃÂç",
|
||||
tickets: "êÃÂéêâÂÂÃÂç",
|
||||
workflow_automations: "çêÃÂÃÂ
çóÃÂÃÂàïñïô éçñ",
|
||||
message_automations: "çêÃÂÃÂ
çóÃÂÃÂàþÃÂçÃÂ
é",
|
||||
lead_forms: "ÃÂñÃÂ
âÂÂóçò óñÃÂî",
|
||||
leads: "ÃÂ
ïÃÂñÃÂê ÃÂÃÂïÃÂç",
|
||||
project_boards: "éçñÃÂò þñÃÂÃÂÃÂ",
|
||||
inventory: "çÃÂèçñ",
|
||||
cheques: "ÃÂéâÂÂÃÂç",
|
||||
attachments: "þÃÂÃÂóêâÂÂÃÂç",
|
||||
loyalty: "èçôïçàÃÂ
ôêñÃÂçÃÂ",
|
||||
reports: "ïòçñôâÂÂÃÂç",
|
||||
notes: "ÃÂçïïçôêâÂÂÃÂç",
|
||||
tahesab: "êÃÂâÂÂÃÂóçè",
|
||||
custom_fields: "ÃÂÃÂÃÂïÃÂçàóÃÂçñôÃÂ",
|
||||
currencies: "çñòÃÂç",
|
||||
team_settings: "êÃÂÃÂ
àêÃÂøÃÂÃÂ
çê óçòÃÂ
çÃÂ",
|
||||
customers: "مشتریان",
|
||||
pipeline: "کاریز فروش",
|
||||
products: "محصولات",
|
||||
invoices: "فاکتورها",
|
||||
quotes: "پیشفاکتورها",
|
||||
commissions: "پورسانت",
|
||||
sales_forecast: "هدف و پیشبینی",
|
||||
activities: "فعالیتها",
|
||||
tickets: "تیکتها",
|
||||
workflow_automations: "اتوماسیون گردش کار",
|
||||
message_automations: "اتوماسیون پیامک",
|
||||
lead_forms: "فرمساز سرنخ",
|
||||
leads: "مدیریت لیدها",
|
||||
project_boards: "کاریز پروژه",
|
||||
inventory: "انبار",
|
||||
cheques: "چکها",
|
||||
attachments: "پیوستها",
|
||||
loyalty: "باشگاه مشتریان",
|
||||
reports: "گزارشها",
|
||||
notes: "یادداشتها",
|
||||
tahesab: "تهحساب",
|
||||
custom_fields: "فیلدهای سفارشی",
|
||||
currencies: "ارزها",
|
||||
team_settings: "تیم و تنظیمات سازمان",
|
||||
faq: "FAQ",
|
||||
audit_logs: "ÃÂçï ÃÂùçÃÂÃÂê éçñèñçÃÂ",
|
||||
saved_views: "ÃÂÃÂÃÂêñÃÂçàðîÃÂñÃÂâÂÂôïÃÂ",
|
||||
public_api: "API àÃÂèâÂÂÃÂÃÂé",
|
||||
sms_campaigns: "þÃÂçÃÂ
é ïñÃÂÃÂÃÂ",
|
||||
teams: "êÃÂÃÂ
âÂÂÃÂç àó÷àïóêñóàèàþñÃÂÃÂïÃÂâÂÂÃÂç",
|
||||
woocommerce: "ÃÂÃÂéçÃÂ
ñó",
|
||||
voip: "êÃÂÃÂàóçòÃÂ
çÃÂÃÂ",
|
||||
reservations: "ñòñààÃÂÃÂèêâÂÂïÃÂÃÂ",
|
||||
audit_logs: "لاگ فعالیت کاربران",
|
||||
saved_views: "فیلترهای ذخیرهشده",
|
||||
public_api: "API و وبهوک",
|
||||
sms_campaigns: "پیامک گروهی",
|
||||
teams: "تیمها و سطح دسترسی به پروندهها",
|
||||
woocommerce: "ووکامرس",
|
||||
voip: "تلفن سازمانی",
|
||||
reservations: "رزرو و نوبتدهی",
|
||||
};
|
||||
|
||||
export const ORG_MODULE_GROUPS: Array<{
|
||||
title: string;
|
||||
keys: OrgModuleKey[];
|
||||
}> = [
|
||||
{ title: "ÃÂ
ôêñÃÂçÃÂ", keys: ["customers"] },
|
||||
{ title: "ÃÂÃÂïÃÂç", keys: ["leads", "lead_forms"] },
|
||||
{ title: "مشتریان", keys: ["customers"] },
|
||||
{ title: "لیدها", keys: ["leads", "lead_forms"] },
|
||||
{
|
||||
title: "ÃÂñÃÂô",
|
||||
title: "فروش",
|
||||
keys: [
|
||||
"pipeline",
|
||||
"products",
|
||||
@@ -216,10 +216,10 @@ export const ORG_MODULE_GROUPS: Array<{
|
||||
"sales_forecast",
|
||||
],
|
||||
},
|
||||
{ title: "ÃÂùçÃÂÃÂêâÂÂÃÂç", keys: ["activities", "notes"] },
|
||||
{ title: "þôêÃÂèçÃÂÃÂ", keys: ["tickets", "faq"] },
|
||||
{ title: "فعالیتها", keys: ["activities", "notes"] },
|
||||
{ title: "پشتیبانی", keys: ["tickets", "faq"] },
|
||||
{
|
||||
title: "çêÃÂÃÂ
çóÃÂÃÂÃÂ",
|
||||
title: "اتوماسیون",
|
||||
keys: [
|
||||
"workflow_automations",
|
||||
"message_automations",
|
||||
@@ -227,7 +227,7 @@ export const ORG_MODULE_GROUPS: Array<{
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "çèòçñÃÂç",
|
||||
title: "ابزارها",
|
||||
keys: [
|
||||
"project_boards",
|
||||
"inventory",
|
||||
@@ -242,7 +242,7 @@ export const ORG_MODULE_GROUPS: Array<{
|
||||
],
|
||||
},
|
||||
{
|
||||
title: "êÃÂøÃÂÃÂ
çê",
|
||||
title: "تنظیمات",
|
||||
keys: [
|
||||
"team_settings",
|
||||
"teams",
|
||||
@@ -312,7 +312,7 @@ export interface OrgUserDto {
|
||||
lastLoginAt?: string | null;
|
||||
hasAvatar?: boolean;
|
||||
commissionPercent?: number;
|
||||
/** own = ÃÂÃÂ÷ îÃÂï | team = ÃÂÃÂ
âÂÂêÃÂÃÂ
ÃÂâÂÂÃÂç | org = éàóçòÃÂ
çà*/
|
||||
/** own = فقط خود | team = همتیمیها | org = کل سازمان */
|
||||
dataVisibility?: DataVisibility;
|
||||
createdAt: string;
|
||||
}
|
||||
@@ -322,9 +322,9 @@ export type DataVisibility = "own" | "team" | "org";
|
||||
export const DATA_VISIBILITIES: DataVisibility[] = ["own", "team", "org"];
|
||||
|
||||
export const DATA_VISIBILITY_LABELS: Record<DataVisibility, string> = {
|
||||
own: "ÃÂÃÂ÷ þñÃÂÃÂïÃÂâÂÂÃÂçàîÃÂï",
|
||||
team: "êÃÂÃÂ
âÂÂÃÂçàùöÃÂ",
|
||||
org: "éàóçòÃÂ
çÃÂ",
|
||||
own: "فقط پروندههای خود",
|
||||
team: "تیمهای عضو",
|
||||
org: "کل سازمان",
|
||||
};
|
||||
|
||||
export interface UpdateUserVisibilityRequest {
|
||||
@@ -345,14 +345,14 @@ export const ROLE_PERMISSION_ITEMS: Array<{
|
||||
key: RolePermissionKey;
|
||||
label: string;
|
||||
}> = [
|
||||
{ key: "customers", label: "ÃÂ
ôêñÃÂçÃÂ" },
|
||||
{ key: "sales", label: "ÃÂñÃÂô àÃÂ
ùçÃÂ
ÃÂçê" },
|
||||
{ key: "billing", label: "þÃÂôâÂÂÃÂçéêÃÂñÃÂç àÃÂçéêÃÂñÃÂç" },
|
||||
{ key: "products", label: "ÃÂ
ÃÂõÃÂÃÂçê àîïÃÂ
çê" },
|
||||
{ key: "activities", label: "ÃÂùçÃÂÃÂêâÂÂÃÂç" },
|
||||
{ key: "notes", label: "ÃÂçïïçôêâÂÂÃÂç" },
|
||||
{ key: "reports", label: "ïòçñôâÂÂÃÂç" },
|
||||
{ key: "audit", label: "ÃÂçï ÃÂùçÃÂÃÂê éçñèñçÃÂ" },
|
||||
{ key: "customers", label: "مشتریان" },
|
||||
{ key: "sales", label: "فروش و معاملات" },
|
||||
{ key: "billing", label: "پیشفاکتورها و فاکتورها" },
|
||||
{ key: "products", label: "محصولات و خدمات" },
|
||||
{ key: "activities", label: "فعالیتها" },
|
||||
{ key: "notes", label: "یادداشتها" },
|
||||
{ key: "reports", label: "گزارشها" },
|
||||
{ key: "audit", label: "لاگ فعالیت کاربران" },
|
||||
];
|
||||
|
||||
export interface OrgRoleMemberDto {
|
||||
@@ -422,7 +422,7 @@ export interface ApiErrorBody {
|
||||
}
|
||||
|
||||
export interface LoginRequest {
|
||||
/** çÃÂÃÂ
ÃÂàÃÂç ôÃÂ
çñàÃÂ
ÃÂèçÃÂà*/
|
||||
/** ایمیل یا شماره موبایل */
|
||||
identifier: string;
|
||||
password: string;
|
||||
}
|
||||
@@ -444,7 +444,7 @@ export interface LoginChallengeResponse {
|
||||
channel: 'email' | 'mobile';
|
||||
expiresInSeconds: number;
|
||||
maskedDestination?: string;
|
||||
/** ÃÂÃÂ÷ ïñ ÃÂ
ÃÂÃÂ÷ êÃÂóùà/ AUTH_RETURN_OTP */
|
||||
/** فقط در محیط توسعه / AUTH_RETURN_OTP */
|
||||
devCode?: string;
|
||||
}
|
||||
|
||||
@@ -453,7 +453,7 @@ export interface RegisterChallengeResponse {
|
||||
expiresInSeconds: number;
|
||||
maskedEmail?: string;
|
||||
maskedMobile?: string;
|
||||
/** ÃÂÃÂêàóñÃÂÃÂó çÃÂÃÂ
ÃÂàîçÃÂ
ÃÂô çóê false â ÃÂÃÂ÷ OTP ÃÂ
ÃÂèçÃÂàÃÂçòÃÂ
çóê */
|
||||
/** وقتی سرویس ایمیل خاموش است false — فقط OTP موبایل لازم است */
|
||||
emailOtpRequired?: boolean;
|
||||
devEmailCode?: string;
|
||||
devMobileCode?: string;
|
||||
@@ -531,7 +531,7 @@ export interface UpdateOrganizationRequest {
|
||||
businessField?: BusinessField;
|
||||
}
|
||||
|
||||
/** òÃÂ
ÃÂÃÂàÃÂùçÃÂÃÂê óçòÃÂ
çàâ ÃÂÃÂ
âÂÂêñçò õÃÂçÃÂù ïÃÂïçñ */
|
||||
/** زمینه فعالیت سازمان — همتراز صنایع دیدار */
|
||||
export const BUSINESS_FIELDS = [
|
||||
"education",
|
||||
"beauty",
|
||||
@@ -558,26 +558,26 @@ export const BUSINESS_FIELDS = [
|
||||
export type BusinessField = (typeof BUSINESS_FIELDS)[number];
|
||||
|
||||
export const BUSINESS_FIELD_LABELS: Record<BusinessField, string> = {
|
||||
education: "âÃÂ
ÃÂòôïçààÃÂ
äóóçê âÃÂ
ÃÂòôÃÂ",
|
||||
beauty: "éÃÂÃÂÃÂÃÂé òÃÂèçÃÂààâñçÃÂôïçÃÂ",
|
||||
real_estate: "çÃÂ
ÃÂçé àÃÂ
ôçÃÂñÃÂàÃÂ
óéÃÂ",
|
||||
construction: "õÃÂùê óçîêÃÂ
çÃÂ",
|
||||
advertising: "êèÃÂÃÂúçê àÃÂ
ôçÃÂñàéóèâÂÂÃÂéçñ",
|
||||
insurance: "èÃÂÃÂ
ÃÂ",
|
||||
consulting: "ôñéêâÂÂÃÂçàÃÂ
ôçÃÂñ",
|
||||
startup: "çóêçñêçþ àéóèâÂÂÃÂéçñ âÃÂÃÂçÃÂÃÂ",
|
||||
medical_devices: "êìÃÂÃÂòçê þòôéÃÂ",
|
||||
travel: "ïñïôïñààÃÂ
ÃÂçìñê",
|
||||
contractor: "þÃÂÃÂ
çÃÂéçñààþñÃÂÃÂÃÂâÂÂçÃÂ",
|
||||
trading: "èçòñïçÃÂÃÂ",
|
||||
manufacturing: "êÃÂÃÂÃÂïààõÃÂùêÃÂ",
|
||||
personal: "éóèâÂÂÃÂéçñ ôîõààîçÃÂïÃÂ",
|
||||
tech: "ÃÂñÃÂ
âÂÂçÃÂòçñ àóîêâÂÂçÃÂòçñ",
|
||||
legal: "ÃÂéÃÂç àÃÂ
ôçÃÂñÃÂàÃÂÃÂÃÂÃÂÃÂ",
|
||||
repair: "îïÃÂ
çê àêùÃÂ
ÃÂñçê",
|
||||
retail: "îñïÃÂâÂÂÃÂñÃÂôÃÂ",
|
||||
jewelry: "÷ÃÂç àìÃÂçÃÂñ",
|
||||
other: "óçÃÂñ",
|
||||
education: "آموزشگاه و مؤسسات آموزشی",
|
||||
beauty: "کلینیک زیبایی و آرایشگاه",
|
||||
real_estate: "املاک و مشاورین مسکن",
|
||||
construction: "صنعت ساختمان",
|
||||
advertising: "تبلیغات و مشاوره کسبوکار",
|
||||
insurance: "بیمه",
|
||||
consulting: "شرکتهای مشاور",
|
||||
startup: "استارتاپ و کسبوکار آنلاین",
|
||||
medical_devices: "تجهیزات پزشکی",
|
||||
travel: "گردشگری و مهاجرت",
|
||||
contractor: "پیمانکاری و پروژهای",
|
||||
trading: "بازرگانی",
|
||||
manufacturing: "تولیدی و صنعتی",
|
||||
personal: "کسبوکار شخصی و خانگی",
|
||||
tech: "نرمافزار و سختافزار",
|
||||
legal: "وکلا و مشاورین حقوقی",
|
||||
repair: "خدمات و تعمیرات",
|
||||
retail: "خردهفروشی",
|
||||
jewelry: "طلا و جواهر",
|
||||
other: "سایر",
|
||||
};
|
||||
|
||||
export function isBusinessField(value: string): value is BusinessField {
|
||||
@@ -593,7 +593,7 @@ export interface ExchangeRateDto {
|
||||
export interface UpdateOrgCurrenciesRequest {
|
||||
baseCurrency?: string;
|
||||
enabledCurrencies?: string[];
|
||||
/** ÃÂñîâÂÂÃÂç ÃÂóèê èàçñò þçÃÂÃÂàçñò þçÃÂàÃÂÃÂçòàèàÃÂñî ÃÂïçñï */
|
||||
/** نرخها نسبت به ارز پایه؛ ارز پایه نیازی به نرخ ندارد */
|
||||
rates?: Array<{ currency: string; rateToBase: number }>;
|
||||
}
|
||||
|
||||
@@ -602,12 +602,12 @@ export const CURRENCY_CATALOG: Array<{
|
||||
labelFa: string;
|
||||
suffix: string;
|
||||
}> = [
|
||||
{ code: "IRR", labelFa: "ñÃÂçàçÃÂñçÃÂ", suffix: "ñÃÂçÃÂ" },
|
||||
{ code: "USD", labelFa: "ïÃÂçñ âÃÂ
ñÃÂéç", suffix: "ïÃÂçñ" },
|
||||
{ code: "EUR", labelFa: "ÃÂÃÂñÃÂ", suffix: "ÃÂÃÂñÃÂ" },
|
||||
{ code: "AED", labelFa: "ïñÃÂÃÂ
çÃÂ
çñçê", suffix: "ïñÃÂÃÂ
" },
|
||||
{ code: "TRY", labelFa: "ÃÂÃÂñ êñéÃÂÃÂ", suffix: "ÃÂÃÂñ" },
|
||||
{ code: "GBP", labelFa: "þÃÂÃÂï çÃÂïÃÂÃÂó", suffix: "þÃÂÃÂï" },
|
||||
{ code: "IRR", labelFa: "ریال ایران", suffix: "ریال" },
|
||||
{ code: "USD", labelFa: "دلار آمریکا", suffix: "دلار" },
|
||||
{ code: "EUR", labelFa: "یورو", suffix: "یورو" },
|
||||
{ code: "AED", labelFa: "درهم امارات", suffix: "درهم" },
|
||||
{ code: "TRY", labelFa: "لیر ترکیه", suffix: "لیر" },
|
||||
{ code: "GBP", labelFa: "پوند انگلیس", suffix: "پوند" },
|
||||
];
|
||||
|
||||
export function currencySuffix(code: string): string {
|
||||
@@ -677,10 +677,10 @@ export const PERSON_MOODS = ["newcomer", "happy", "unhappy", "special"] as const
|
||||
export type PersonMood = (typeof PERSON_MOODS)[number];
|
||||
|
||||
export const PERSON_MOOD_LABELS: Record<PersonMood, string> = {
|
||||
newcomer: "ÃÂ
ôêñàêçòàÃÂçñï",
|
||||
happy: "ÃÂ
ôêñàîÃÂôÃÂçÃÂ",
|
||||
unhappy: "ÃÂ
ôêñàÃÂçñçöÃÂ",
|
||||
special: "ÃÂ
ôêñàîçõ",
|
||||
newcomer: "مشتری تازه وارد",
|
||||
happy: "مشتری خوشحال",
|
||||
unhappy: "مشتری ناراضی",
|
||||
special: "مشتری خاص",
|
||||
};
|
||||
|
||||
export interface PersonDto {
|
||||
@@ -777,7 +777,7 @@ export interface DealDto {
|
||||
person: PersonSummaryDto | null;
|
||||
company: CompanySummaryDto | null;
|
||||
owner: UserSummaryDto | null;
|
||||
/** ÃÂ
óæÃÂÃÂçàÃÂ
ôêñé ÃÂ
ùçÃÂ
ÃÂà(ùÃÂçÃÂàèñ ÃÂ
çÃÂé çõÃÂÃÂ) */
|
||||
/** مسئولان مشترک معامله (علاوه بر مالک اصلی) */
|
||||
assignees: UserSummaryDto[];
|
||||
lineItems: DealLineItemDto[];
|
||||
createdAt: string;
|
||||
@@ -849,7 +849,7 @@ export interface UpdateDealRequest {
|
||||
lineItems?: DealLineItemInput[];
|
||||
}
|
||||
|
||||
/** ÃÂÃÂÃÂêñ ðîÃÂñÃÂâÂÂôïÃÂàÃÂÃÂóê çôîçõ */
|
||||
/** فیلتر ذخیرهشدهٔ لیست اشخاص */
|
||||
export interface PeopleViewFilters {
|
||||
q?: string;
|
||||
sort?: string;
|
||||
@@ -857,7 +857,7 @@ export interface PeopleViewFilters {
|
||||
page?: number;
|
||||
}
|
||||
|
||||
/** ÃÂÃÂÃÂêñ ðîÃÂñÃÂâÂÂôïÃÂàéçñÃÂò / ÃÂ
ùçÃÂ
ÃÂçê */
|
||||
/** فیلتر ذخیرهشدهٔ کاریز / معاملات */
|
||||
export interface DealsViewFilters {
|
||||
q?: string;
|
||||
amountMin?: string;
|
||||
@@ -1014,7 +1014,7 @@ export interface NoteDto {
|
||||
title: string | null;
|
||||
body: string;
|
||||
noteType: NoteType | string;
|
||||
/** team = êÃÂÃÂ
à| personal = ÃÂÃÂ÷ ÃÂÃÂÃÂóÃÂïà*/
|
||||
/** team = تیمی | personal = فقط نویسنده */
|
||||
visibility: NoteVisibility;
|
||||
pinned: boolean;
|
||||
color: string | null;
|
||||
@@ -1029,7 +1029,7 @@ export interface NoteDto {
|
||||
activity: { id: string; title: string } | null;
|
||||
author: UserSummaryDto | null;
|
||||
attachments: NoteAttachmentDto[];
|
||||
/** êùïçï ÃÂóîÃÂâÂÂÃÂçàÃÂèÃÂà(èñçàÃÂÃÂ
çÃÂô ïéÃÂ
àêçñÃÂîÃÂÃÂ) */
|
||||
/** تعداد نسخههای قبلی (برای نمایش دکمه تاریخچه) */
|
||||
revisionCount?: number;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
@@ -1040,8 +1040,8 @@ export type NoteVisibility = "team" | "personal";
|
||||
export const NOTE_VISIBILITIES: NoteVisibility[] = ["team", "personal"];
|
||||
|
||||
export const NOTE_VISIBILITY_LABELS: Record<NoteVisibility, string> = {
|
||||
team: "êÃÂÃÂ
ÃÂ",
|
||||
personal: "ôîõà(ÃÂÃÂ÷ ÃÂ
ÃÂ)",
|
||||
team: "تیمی",
|
||||
personal: "شخصی (فقط من)",
|
||||
};
|
||||
|
||||
export interface NoteRevisionDto {
|
||||
@@ -1915,7 +1915,7 @@ export interface CreateSalesGoalRequest {
|
||||
probability?: number | null;
|
||||
currency?: string;
|
||||
notes?: string;
|
||||
/** ÃÂÃÂ÷ ÃÂ
çÃÂé/ÃÂ
ïÃÂñàïñ úÃÂñ çÃÂàõÃÂñê ÃÂïàèñçàîÃÂï éçñèñ */
|
||||
/** فقط مالک/مدیر؛ در غیر این صورت هدف برای خود کاربر */
|
||||
userId?: string | null;
|
||||
}
|
||||
|
||||
@@ -1946,13 +1946,13 @@ export interface SalesForecastDto {
|
||||
periodStart: string;
|
||||
periodEnd: string;
|
||||
currency: string;
|
||||
/** ÃÂ
ìÃÂ
ÃÂù çÃÂïçàÃÂÃÂ
âÂÂþÃÂôçàèç èçòà*/
|
||||
/** مجموع اهداف همپوشان با بازه */
|
||||
targetAmount: number;
|
||||
/** ÃÂ
ùçÃÂ
ÃÂçê èñÃÂïÃÂâÂÂôïàïñ èçòà*/
|
||||
/** معاملات برندهشده در بازه */
|
||||
wonAmount: number;
|
||||
/** ÃÂ
ùçÃÂ
ÃÂçê èçò ÃÂùÃÂà*/
|
||||
/** معاملات باز فعلی */
|
||||
openPipelineAmount: number;
|
||||
/** þÃÂôâÂÂèÃÂÃÂÃÂ: êÃÂÃÂà+ éçñÃÂò èçò àÃÂ
ÃÂçÃÂïÃÂàçÃÂêÃÂ
çà*/
|
||||
/** پیشبینی: تحقق + کاریز باز × میانگین احتمال */
|
||||
forecastAmount: number;
|
||||
progressPercent: number | null;
|
||||
openDealsCount: number;
|
||||
@@ -1960,7 +1960,7 @@ export interface SalesForecastDto {
|
||||
goals: SalesGoalDto[];
|
||||
kpis: SalesForecastKpiDto[];
|
||||
newCustomersCount: number;
|
||||
/** ÃÂ
ùçÃÂ
ÃÂçê çÃÂìçïôïàïñ èçòà*/
|
||||
/** معاملات ایجادشده در بازه */
|
||||
newDealsCount: number;
|
||||
}
|
||||
|
||||
@@ -2061,7 +2061,7 @@ export interface UpdateFaqArticleRequest {
|
||||
position?: number;
|
||||
}
|
||||
|
||||
/** óçùçê ÃÂ
ÃÂÃÂê þçóî çÃÂàèñ çóçó çÃÂÃÂÃÂÃÂê */
|
||||
/** ساعات مهلت پاسخ اول بر اساس اولویت */
|
||||
export const TICKET_SLA_HOURS: Record<TicketPriority, number> = {
|
||||
urgent: 4,
|
||||
high: 8,
|
||||
@@ -2069,7 +2069,7 @@ export const TICKET_SLA_HOURS: Record<TicketPriority, number> = {
|
||||
low: 48,
|
||||
};
|
||||
|
||||
/* âÂÂâÂÂâ þñêçàÃÂ
ôêñà(OTP) âÂÂâÂÂâ */
|
||||
/* ——— پرتال مشتری (OTP) ——— */
|
||||
|
||||
export interface PortalOrgInfoDto {
|
||||
name: string;
|
||||
@@ -2082,7 +2082,7 @@ export interface PortalRequestOtpRequest {
|
||||
|
||||
export interface PortalRequestOtpResponse {
|
||||
ok: true;
|
||||
/** ÃÂÃÂ÷ ïñ ÃÂçÃÂê êÃÂóùà/ ïÃÂ
àÃÂÃÂêàSMS ÃÂçÃÂùàÃÂõàÃÂÃÂóê */
|
||||
/** فقط در حالت توسعه / دمو وقتی SMS واقعی وصل نیست */
|
||||
devCode?: string;
|
||||
expiresInSeconds: number;
|
||||
}
|
||||
@@ -2139,7 +2139,7 @@ export interface PortalTicketDto {
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ ïòçñôçê àïçôèÃÂñï âÂÂâÂÂâ */
|
||||
/* ——— گزارشات و داشبورد ——— */
|
||||
|
||||
export interface ReportsKpiDto {
|
||||
key: string;
|
||||
@@ -2177,7 +2177,7 @@ export interface ReportsTeamRowDto {
|
||||
activitiesDone: number;
|
||||
}
|
||||
|
||||
/** ïÃÂÃÂÃÂâÂÂÃÂçàdrill-down ïòçñô ùÃÂ
ÃÂà(ÃÂçò ñ BI) */
|
||||
/** گونههای drill-down گزارش عمیق (فاز ۱ BI) */
|
||||
export type ReportsDrillKind =
|
||||
| "stage_open"
|
||||
| "team_won"
|
||||
@@ -2202,25 +2202,25 @@ export interface ReportsFunnelStageDto {
|
||||
pipelineName: string;
|
||||
count: number;
|
||||
amount: number;
|
||||
/** ïñõï êèïÃÂàÃÂóèê èàÃÂ
ñÃÂÃÂàÃÂèàÃÂÃÂ
çàéçñÃÂòànull èñçàçÃÂÃÂÃÂàÃÂ
ñÃÂÃÂà*/
|
||||
/** درصد تبدیل نسبت به مرحله قبل همان کاریز؛ null برای اولین مرحله */
|
||||
conversionFromPrevPercent: number | null;
|
||||
/** óÃÂÃÂ
çò éàÃÂ
ùçÃÂ
ÃÂçê èçò ÃÂÃÂ
çàéçñÃÂò */
|
||||
/** سهم از کل معاملات باز همان کاریز */
|
||||
shareOfPipelinePercent: number;
|
||||
}
|
||||
|
||||
/** ÃÂé ñïÃÂàÃÂñî êèïÃÂà(ÃÂñÃÂïàâ ÃÂ
ÃÂÃÂÃÂ) ÃÂ
ëàïÃÂïçñ */
|
||||
/** یک ردیف نرخ تبدیل (ورودی → موفق) مثل دیدار */
|
||||
export interface ReportsConversionRateRowDto {
|
||||
key: string;
|
||||
label: string;
|
||||
incomingCount: number;
|
||||
wonCount: number;
|
||||
/** ïñõïàçïñ ÃÂñÃÂïàõÃÂñ èçôï ð */
|
||||
/** درصد؛ اگر ورودی صفر باشد ۰ */
|
||||
conversionPercent: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* ÃÂñî êèïÃÂàèàóèé ïÃÂïçñ:
|
||||
* çò ÃÂ
ùçÃÂ
ÃÂçê êçòÃÂâÂÂóçîêÃÂâÂÂôïàïñ èçòÃÂàÃÂÃÂï ïñõï çÃÂçàèñÃÂïàôïÃÂâÂÂçÃÂï.
|
||||
* نرخ تبدیل به سبک دیدار:
|
||||
* از معاملات تازهساختهشده در بازه، چند درصد الان برنده شدهاند.
|
||||
*/
|
||||
export interface ReportsConversionRateDto {
|
||||
incomingCount: number;
|
||||
@@ -2242,7 +2242,7 @@ export interface ReportsPeriodCompareRowDto {
|
||||
current: number;
|
||||
previous: number;
|
||||
changePercent: number | null;
|
||||
/** çïñ ÃÂçèàéÃÂÃÂé èñçàÃÂÃÂóê þñÃÂÃÂïàèçôï */
|
||||
/** اگر قابل کلیک برای لیست پرونده باشد */
|
||||
drillKind?: ReportsDrillKind;
|
||||
}
|
||||
|
||||
@@ -2299,9 +2299,9 @@ export interface ReportsDashboardDto {
|
||||
winRate: number;
|
||||
};
|
||||
funnel: ReportsFunnelStageDto[];
|
||||
/** ÃÂñî êèïÃÂàÃÂñÃÂïÃÂâÂÂÃÂ
ÃÂÃÂà(óèé ïÃÂïçñ) */
|
||||
/** نرخ تبدیل ورودی→موفق (سبک دیدار) */
|
||||
conversionRate: ReportsConversionRateDto;
|
||||
/** ÃÂ
ÃÂçÃÂóàõñÃÂàèçòàÃÂùÃÂàèç ïÃÂñàÃÂèàÃÂÃÂ
âÂÂ÷ÃÂà*/
|
||||
/** مقایسه صریح بازه فعلی با دوره قبل همطول */
|
||||
periodCompare: ReportsPeriodCompareRowDto[];
|
||||
tickets: {
|
||||
open: number;
|
||||
@@ -2359,7 +2359,7 @@ export interface HomeDashboardDto {
|
||||
topCustomers: HomeDashboardTopCustomerDto[];
|
||||
}
|
||||
|
||||
/** èñï þñÃÂÃÂà/ éçñÃÂò éçñê */
|
||||
/** برد پروژه / کاریز کارت */
|
||||
export interface ProjectBoardStageDto {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -2423,7 +2423,7 @@ export interface MoveProjectCardRequest {
|
||||
position?: number;
|
||||
}
|
||||
|
||||
/** èçôïçàÃÂ
ôêñÃÂçà*/
|
||||
/** باشگاه مشتریان */
|
||||
export interface LoyaltyTierDto {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -2526,7 +2526,7 @@ export interface RedeemLoyaltyRewardRequest {
|
||||
personId: string;
|
||||
}
|
||||
|
||||
/** çêÃÂÃÂ
çóÃÂÃÂàçïñ/âÃÂïçà*/
|
||||
/** اتوماسیون اگر/آنگاه */
|
||||
export type AutomationTrigger =
|
||||
| "person_created"
|
||||
| "lead_submitted"
|
||||
@@ -2545,23 +2545,23 @@ export type AutomationAction =
|
||||
| "add_loyalty_points";
|
||||
|
||||
export const AUTOMATION_TRIGGER_LABELS: Record<AutomationTrigger, string> = {
|
||||
person_created: "ÃÂ
îç÷è ìïÃÂï óçîêàôï",
|
||||
lead_submitted: "ÃÂñÃÂ
óñÃÂî çñóçàôï",
|
||||
deal_created: "ÃÂ
ùçÃÂ
ÃÂàìïÃÂï óçîêàôï",
|
||||
deal_stage_changed: "ÃÂ
ñÃÂÃÂàÃÂ
ùçÃÂ
ÃÂàùÃÂö ôï",
|
||||
deal_won: "ÃÂ
ùçÃÂ
ÃÂàèñÃÂïàôï",
|
||||
deal_lost: "ÃÂ
ùçÃÂ
ÃÂàèçîê",
|
||||
ticket_created: "êÃÂéê ìïÃÂï óçîêàôï",
|
||||
ticket_resolved: "êÃÂéê ÃÂàôï",
|
||||
invoice_issued: "ÃÂçéêÃÂñ õçïñ ôï",
|
||||
invoice_paid: "þñïçîê ñÃÂàÃÂçéêÃÂñ ëèê ôï",
|
||||
activity_done: "ÃÂùçÃÂÃÂê êÃÂ
çÃÂ
ôï",
|
||||
person_created: "مخاطب جدید ساخته شد",
|
||||
lead_submitted: "فرم سرنخ ارسال شد",
|
||||
deal_created: "معامله جدید ساخته شد",
|
||||
deal_stage_changed: "مرحله معامله عوض شد",
|
||||
deal_won: "معامله برنده شد",
|
||||
deal_lost: "معامله باخت",
|
||||
ticket_created: "تیکت جدید ساخته شد",
|
||||
ticket_resolved: "تیکت حل شد",
|
||||
invoice_issued: "فاکتور صادر شد",
|
||||
invoice_paid: "پرداخت روی فاکتور ثبت شد",
|
||||
activity_done: "فعالیت تمام شد",
|
||||
};
|
||||
|
||||
export const AUTOMATION_ACTION_LABELS: Record<AutomationAction, string> = {
|
||||
create_activity: "óçîê ÃÂùçÃÂÃÂê",
|
||||
create_notification: "çñóçàçùÃÂçÃÂ",
|
||||
add_loyalty_points: "çÃÂòÃÂïàçÃÂ
êÃÂçò èçôïçÃÂ",
|
||||
create_activity: "ساخت فعالیت",
|
||||
create_notification: "ارسال اعلان",
|
||||
add_loyalty_points: "افزودن امتیاز باشگاه",
|
||||
};
|
||||
|
||||
export const MAX_AUTOMATION_STEPS = 8;
|
||||
@@ -2590,14 +2590,14 @@ export const AUTOMATION_TRIGGER_GROUPS: {
|
||||
label: string;
|
||||
items: AutomationTrigger[];
|
||||
}[] = [
|
||||
{ label: "ÃÂ
îç÷è", items: ["person_created", "lead_submitted"] },
|
||||
{ label: "مخاطب", items: ["person_created", "lead_submitted"] },
|
||||
{
|
||||
label: "ÃÂ
ùçÃÂ
ÃÂÃÂ",
|
||||
label: "معامله",
|
||||
items: ["deal_created", "deal_stage_changed", "deal_won", "deal_lost"],
|
||||
},
|
||||
{ label: "êÃÂéê", items: ["ticket_created", "ticket_resolved"] },
|
||||
{ label: "ÃÂùçÃÂÃÂê", items: ["activity_done"] },
|
||||
{ label: "ÃÂ
çÃÂÃÂ", items: ["invoice_issued", "invoice_paid"] },
|
||||
{ label: "تیکت", items: ["ticket_created", "ticket_resolved"] },
|
||||
{ label: "فعالیت", items: ["activity_done"] },
|
||||
{ label: "مالی", items: ["invoice_issued", "invoice_paid"] },
|
||||
];
|
||||
|
||||
export type AutomationStepKind = "action" | "condition";
|
||||
@@ -2623,31 +2623,31 @@ export const AUTOMATION_CONDITION_FIELD_LABELS: Record<
|
||||
AutomationConditionField,
|
||||
string
|
||||
> = {
|
||||
deal_amount: "ÃÂ
èÃÂú ÃÂ
ùçÃÂ
ÃÂÃÂ",
|
||||
has_person: "ÃÂ
îç÷è ïçñï",
|
||||
has_company: "ôñéê ïçñï",
|
||||
ticket_priority: "çÃÂÃÂÃÂÃÂê êÃÂéê",
|
||||
deal_amount: "مبلغ معامله",
|
||||
has_person: "مخاطب دارد",
|
||||
has_company: "شرکت دارد",
|
||||
ticket_priority: "اولویت تیکت",
|
||||
};
|
||||
|
||||
export const AUTOMATION_CONDITION_OP_LABELS: Record<
|
||||
AutomationConditionOp,
|
||||
string
|
||||
> = {
|
||||
gte: "èòñïâÂÂêñ ÃÂç ÃÂ
óçÃÂÃÂ",
|
||||
lte: "éÃÂÃÂéâÂÂêñ ÃÂç ÃÂ
óçÃÂÃÂ",
|
||||
eq: "ÃÂ
óçÃÂÃÂ",
|
||||
neq: "ÃÂçÃÂ
óçÃÂÃÂ",
|
||||
is_set: "ïçñï",
|
||||
is_empty: "ÃÂïçñï",
|
||||
gte: "بزرگتر یا مساوی",
|
||||
lte: "کوچکتر یا مساوی",
|
||||
eq: "مساوی",
|
||||
neq: "نامساوی",
|
||||
is_set: "دارد",
|
||||
is_empty: "ندارد",
|
||||
};
|
||||
|
||||
export const AUTOMATION_NOTIFY_CHANNEL_LABELS: Record<
|
||||
AutomationNotifyChannel,
|
||||
string
|
||||
> = {
|
||||
app: "ÃÂçêÃÂÃÂÃÂéÃÂôàïçîÃÂÃÂ",
|
||||
sms: "þÃÂçÃÂ
é",
|
||||
both: "ÃÂñ ïÃÂ",
|
||||
app: "ناتیفیکیشن داخلی",
|
||||
sms: "پیامک",
|
||||
both: "هر دو",
|
||||
};
|
||||
|
||||
export const AUTOMATION_NOTIFY_CHANNELS = [
|
||||
@@ -2710,7 +2710,7 @@ export interface AutomationRuleConfig {
|
||||
notifyTarget?: AutomationNotifyTarget;
|
||||
activityType?: "call" | "meeting" | "task" | "note";
|
||||
points?: number;
|
||||
/** òÃÂìÃÂñÃÂàçùÃÂ
çÃÂàçïñ îçÃÂàèçôï ÃÂÃÂ
çàaction êéàçóêÃÂçïàÃÂ
ÃÂâÂÂôÃÂï */
|
||||
/** زنجیرهٔ اعمال؛ اگر خالی باشد همان action تکی استفاده میشود */
|
||||
steps?: AutomationStep[];
|
||||
}
|
||||
|
||||
@@ -2806,7 +2806,7 @@ export function automationStepToConfig(step: AutomationStep): AutomationRuleConf
|
||||
};
|
||||
}
|
||||
|
||||
// âÂÂâ êÃÂâÂÂÃÂóçè / ÃÂóçèïçñàâÂÂâÂÂ
|
||||
// —— تهحساب / حسابداری ——
|
||||
|
||||
export const TAHSAB_SANAD_TYPES = [
|
||||
"buy_sale_gold",
|
||||
@@ -2819,11 +2819,11 @@ export const TAHSAB_SANAD_TYPES = [
|
||||
export type TahesabSanadType = (typeof TAHSAB_SANAD_TYPES)[number];
|
||||
|
||||
export const TAHSAB_SANAD_LABELS: Record<TahesabSanadType, string> = {
|
||||
buy_sale_gold: "îñÃÂï/ÃÂñÃÂô âèôïÃÂ",
|
||||
buy_sale_sekeh: "îñÃÂï/ÃÂñÃÂô óéÃÂ",
|
||||
talab_bedehi: "÷ÃÂè/èïÃÂÃÂ",
|
||||
vkh_gold: "ÃÂçñÃÂò/îñÃÂì ÷ÃÂç",
|
||||
vkh_bank: "ÃÂçñÃÂò/îñÃÂì èçÃÂéÃÂ",
|
||||
buy_sale_gold: "خرید/فروش آبشده",
|
||||
buy_sale_sekeh: "خرید/فروش سکه",
|
||||
talab_bedehi: "طلب/بدهی",
|
||||
vkh_gold: "واریز/خروج طلا",
|
||||
vkh_bank: "واریز/خروج بانکی",
|
||||
};
|
||||
|
||||
export interface TahesabConnectionDto {
|
||||
@@ -2894,7 +2894,7 @@ export interface PersonAssetsDto {
|
||||
fetchedAt: string;
|
||||
}
|
||||
|
||||
// âÂÂâ þÃÂçÃÂ
îÃÂïéçñ (ìïç çò çêÃÂÃÂ
çóÃÂÃÂàïñïô éçñ) âÂÂâÂÂ
|
||||
// —— پیام خودکار (جدا از اتوماسیون گردش کار) ——
|
||||
|
||||
export type MessageAutomationTrigger =
|
||||
| "person_created"
|
||||
@@ -2938,37 +2938,37 @@ export const MESSAGE_AUTOMATION_TRIGGER_LABELS: Record<
|
||||
MessageAutomationTrigger,
|
||||
string
|
||||
> = {
|
||||
person_created: "ÃÂ
îç÷è ìïÃÂï óçîêàôï",
|
||||
lead_submitted: "ÃÂñÃÂ
óñÃÂî çñóçàôï",
|
||||
deal_created: "ÃÂ
ùçÃÂ
ÃÂàìïÃÂï óçîêàôï",
|
||||
deal_stage_changed: "ÃÂ
ñÃÂÃÂàÃÂ
ùçÃÂ
ÃÂàùÃÂö ôï",
|
||||
deal_won: "ÃÂ
ùçÃÂ
ÃÂàèñÃÂïàôï",
|
||||
deal_lost: "ÃÂ
ùçÃÂ
ÃÂàèçîê",
|
||||
ticket_created: "êÃÂéê ìïÃÂï óçîêàôï",
|
||||
ticket_resolved: "êÃÂéê ÃÂàôï",
|
||||
invoice_issued: "ÃÂçéêÃÂñ õçïñ ôï",
|
||||
invoice_paid: "þñïçîê ñÃÂàÃÂçéêÃÂñ ëèê ôï",
|
||||
activity_created: "ÃÂùçÃÂÃÂê ëèê ôï",
|
||||
activity_done: "ÃÂùçÃÂÃÂê êÃÂ
çÃÂ
ôï",
|
||||
person_created: "مخاطب جدید ساخته شد",
|
||||
lead_submitted: "فرم سرنخ ارسال شد",
|
||||
deal_created: "معامله جدید ساخته شد",
|
||||
deal_stage_changed: "مرحله معامله عوض شد",
|
||||
deal_won: "معامله برنده شد",
|
||||
deal_lost: "معامله باخت",
|
||||
ticket_created: "تیکت جدید ساخته شد",
|
||||
ticket_resolved: "تیکت حل شد",
|
||||
invoice_issued: "فاکتور صادر شد",
|
||||
invoice_paid: "پرداخت روی فاکتور ثبت شد",
|
||||
activity_created: "فعالیت ثبت شد",
|
||||
activity_done: "فعالیت تمام شد",
|
||||
};
|
||||
|
||||
export const MESSAGE_AUTOMATION_UNIT_LABELS: Record<
|
||||
MessageAutomationDelayUnit,
|
||||
string
|
||||
> = {
|
||||
minutes: "ïÃÂÃÂÃÂÃÂ",
|
||||
hours: "óçùê",
|
||||
days: "ñÃÂò",
|
||||
weeks: "ÃÂÃÂêÃÂ",
|
||||
months: "ÃÂ
çÃÂ",
|
||||
minutes: "دقیقه",
|
||||
hours: "ساعت",
|
||||
days: "روز",
|
||||
weeks: "هفته",
|
||||
months: "ماه",
|
||||
};
|
||||
|
||||
export const MESSAGE_AUTOMATION_FIELDS = [
|
||||
{ token: "{ÃÂçÃÂ
}", label: "ÃÂçÃÂ
ÃÂ
ôêñÃÂ" },
|
||||
{ token: "{ôÃÂ
çñÃÂ}", label: "ôÃÂ
çñàÃÂ
ÃÂèçÃÂÃÂ" },
|
||||
{ token: "{êçñÃÂî}", label: "êçñÃÂî çñóçÃÂ" },
|
||||
{ token: "{ùÃÂÃÂçÃÂ}", label: "ùÃÂÃÂçàñéÃÂñï" },
|
||||
{ token: "{ôñéê}", label: "ÃÂçÃÂ
ôñéê" },
|
||||
{ token: "{نام}", label: "نام مشتری" },
|
||||
{ token: "{شماره}", label: "شماره موبایل" },
|
||||
{ token: "{تاریخ}", label: "تاریخ ارسال" },
|
||||
{ token: "{عنوان}", label: "عنوان رکورد" },
|
||||
{ token: "{شرکت}", label: "نام شرکت" },
|
||||
] as const;
|
||||
|
||||
export const MESSAGE_AUTOMATION_SMS_SEGMENT = 70;
|
||||
@@ -2977,18 +2977,18 @@ export const MESSAGE_AUTOMATION_CHANNEL_LABELS: Record<
|
||||
MessageAutomationChannel,
|
||||
string
|
||||
> = {
|
||||
app: "ÃÂçêÃÂàïçîàèñÃÂçÃÂ
ÃÂ",
|
||||
sms: "þÃÂçÃÂ
é",
|
||||
both: "þÃÂçÃÂ
é àÃÂçêÃÂÃÂ",
|
||||
app: "ناتیف داخل برنامه",
|
||||
sms: "پیامک",
|
||||
both: "پیامک و ناتیف",
|
||||
};
|
||||
|
||||
export const MESSAGE_AUTOMATION_TARGET_LABELS: Record<
|
||||
MessageAutomationTarget,
|
||||
string
|
||||
> = {
|
||||
staff: "ÃÂ
óæÃÂàþñÃÂÃÂïÃÂ",
|
||||
person: "ÃÂ
ôêñÃÂ",
|
||||
both: "ÃÂ
ôêñààÃÂ
óæÃÂÃÂ",
|
||||
staff: "مسئول پرونده",
|
||||
person: "مشتری",
|
||||
both: "مشتری و مسئول",
|
||||
};
|
||||
|
||||
export interface MessageAutomationRuleDto {
|
||||
@@ -3115,7 +3115,7 @@ export interface PlatformUserDto {
|
||||
lastLoginAt?: string | null;
|
||||
createdAt: string;
|
||||
memberships: PlatformUserMembershipDto[];
|
||||
/** ÃÂÃÂ÷ çïñ ÃÂïçÃÂàÃÂé ùöÃÂÃÂê ÃÂ
çÃÂé ÃÂùçàïçñï */
|
||||
/** فقط اگر حداقل یک عضویت مالک فعال دارد */
|
||||
isBillingOwner?: boolean;
|
||||
billing?: BillingAccountDto | null;
|
||||
}
|
||||
@@ -3152,7 +3152,7 @@ export { brand, APP_NAME, APP_NAME_FA, brandSuggestionFa } from "./brand";
|
||||
export type { Brand } from "./brand";
|
||||
export const API_PREFIX = "api";
|
||||
|
||||
/* âÂÂâÂÂâ ÃÂçï ÃÂùçÃÂÃÂê éçñèñçàâÂÂâÂÂâ */
|
||||
/* ——— لاگ فعالیت کاربران ——— */
|
||||
|
||||
export interface AuditLogDto {
|
||||
id: string;
|
||||
@@ -3174,7 +3174,7 @@ export interface AuditLogListResponse {
|
||||
limit: number;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ ÃÂÃÂÃÂêñÃÂçàðîÃÂñÃÂâÂÂôïàâÂÂâÂÂâ */
|
||||
/* ——— فیلترهای ذخیرهشده ——— */
|
||||
|
||||
export type SavedViewScope =
|
||||
| "deals"
|
||||
@@ -3193,7 +3193,7 @@ export const SAVED_VIEW_SCOPES: SavedViewScope[] = [
|
||||
"reports",
|
||||
];
|
||||
|
||||
/** ÃÂÃÂÃÂêñÃÂçàðîÃÂñÃÂâÂÂôïÃÂàõÃÂÃÂàïòçñôçê */
|
||||
/** فیلترهای ذخیرهشدهٔ صفحه گزارشات */
|
||||
export interface ReportsViewFilters {
|
||||
/** today | week | month | quarter | year | custom */
|
||||
period: string;
|
||||
@@ -3209,7 +3209,7 @@ export interface ReportsViewFilters {
|
||||
};
|
||||
}
|
||||
|
||||
/** ÃÂ
êñÃÂéâÂÂÃÂçàïòçñôâÂÂóçò óçïà*/
|
||||
/** متریکهای گزارشساز ساده */
|
||||
export type ReportsBuilderMetric =
|
||||
| "won_amount"
|
||||
| "won_count"
|
||||
@@ -3237,18 +3237,18 @@ export const REPORTS_BUILDER_METRIC_LABELS: Record<
|
||||
ReportsBuilderMetric,
|
||||
string
|
||||
> = {
|
||||
won_amount: "ÃÂ
èÃÂú ÃÂ
ùçÃÂ
ÃÂçê èñÃÂïÃÂ",
|
||||
won_count: "êùïçï ÃÂ
ùçÃÂ
ÃÂçê èñÃÂïÃÂ",
|
||||
lost_count: "êùïçï ÃÂ
ùçÃÂ
ÃÂçê èçîêÃÂ",
|
||||
open_count: "êùïçï ÃÂ
ùçÃÂ
ÃÂçê èçò",
|
||||
open_amount: "ÃÂ
èÃÂú ÃÂ
ùçÃÂ
ÃÂçê èçò",
|
||||
activities_done: "ÃÂùçÃÂÃÂê çÃÂìçÃÂ
âÂÂôïÃÂ",
|
||||
people_created: "ÃÂ
ôêñÃÂçàìïÃÂï",
|
||||
invoice_amount: "ÃÂ
èÃÂú ÃÂçéêÃÂñ",
|
||||
invoice_count: "êùïçï ÃÂçéêÃÂñ",
|
||||
won_amount: "مبلغ معاملات برنده",
|
||||
won_count: "تعداد معاملات برنده",
|
||||
lost_count: "تعداد معاملات باخته",
|
||||
open_count: "تعداد معاملات باز",
|
||||
open_amount: "مبلغ معاملات باز",
|
||||
activities_done: "فعالیت انجامشده",
|
||||
people_created: "مشتریان جدید",
|
||||
invoice_amount: "مبلغ فاکتور",
|
||||
invoice_count: "تعداد فاکتور",
|
||||
};
|
||||
|
||||
/** çèùçï ïñÃÂÃÂâÂÂèÃÂïàïòçñôâÂÂóçò */
|
||||
/** ابعاد گروهبندی گزارشساز */
|
||||
export type ReportsBuilderDimension =
|
||||
| "none"
|
||||
| "owner"
|
||||
@@ -3272,13 +3272,13 @@ export const REPORTS_BUILDER_DIMENSION_LABELS: Record<
|
||||
ReportsBuilderDimension,
|
||||
string
|
||||
> = {
|
||||
none: "èïÃÂàïñÃÂÃÂâÂÂèÃÂïà(ìÃÂ
ù éÃÂ)",
|
||||
owner: "éçñèñ / ÃÂ
óæÃÂÃÂ",
|
||||
team: "êÃÂÃÂ
",
|
||||
source: "ÃÂ
ÃÂèù",
|
||||
stage: "ÃÂ
ñÃÂÃÂàéçñÃÂò",
|
||||
month: "ÃÂ
çÃÂ",
|
||||
status: "ÃÂöùÃÂê ÃÂ
ùçÃÂ
ÃÂÃÂ",
|
||||
none: "بدون گروهبندی (جمع کل)",
|
||||
owner: "کاربر / مسئول",
|
||||
team: "تیم",
|
||||
source: "منبع",
|
||||
stage: "مرحله کاریز",
|
||||
month: "ماه",
|
||||
status: "وضعیت معامله",
|
||||
};
|
||||
|
||||
export interface ReportsBuilderQuery {
|
||||
@@ -3329,7 +3329,7 @@ export interface CreateSavedViewRequest {
|
||||
|
||||
export type UpdateSavedViewRequest = Partial<CreateSavedViewRequest>;
|
||||
|
||||
/* âÂÂâÂÂâ API ùÃÂ
ÃÂÃÂ
ààÃÂèâÂÂÃÂÃÂé âÂÂâÂÂâ */
|
||||
/* ——— API عمومی و وبهوک ——— */
|
||||
|
||||
export const WEBHOOK_EVENTS = [
|
||||
"person.created",
|
||||
@@ -3358,7 +3358,7 @@ export interface CreateOrganizationApiKeyRequest {
|
||||
}
|
||||
|
||||
export interface CreateOrganizationApiKeyResponse extends OrganizationApiKeyDto {
|
||||
/** ÃÂÃÂ÷ ÃÂéâÂÂèçñ ÃÂÃÂïçÃÂ
óçîê èñïñïçÃÂïàÃÂ
ÃÂâÂÂôÃÂï */
|
||||
/** فقط یکبار هنگام ساخت برگردانده میشود */
|
||||
rawKey: string;
|
||||
}
|
||||
|
||||
@@ -3380,7 +3380,7 @@ export interface CreateWebhookEndpointRequest {
|
||||
isActive?: boolean;
|
||||
}
|
||||
|
||||
/** ÃÂÃÂ÷ ÃÂÃÂïçÃÂ
óçîêàsecret ïÃÂèçñàèñÃÂÃÂ
ÃÂâÂÂïñïï */
|
||||
/** فقط هنگام ساخت؛ secret دوباره برنمیگردد */
|
||||
export interface CreateWebhookEndpointResponse extends WebhookEndpointDto {
|
||||
secret: string;
|
||||
}
|
||||
@@ -3398,7 +3398,7 @@ export interface WebhookDeliveryDto {
|
||||
deliveredAt: string | null;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ þÃÂçÃÂ
é ïñÃÂÃÂàâÂÂâÂÂâ */
|
||||
/* ——— پیامک گروهی ——— */
|
||||
|
||||
export type SmsCampaignStatus =
|
||||
| "draft"
|
||||
@@ -3426,7 +3426,7 @@ export interface CreateSmsCampaignRequest {
|
||||
body: string;
|
||||
personIds: string[];
|
||||
scheduledAt?: string | null;
|
||||
/** çïñ true èçôï èÃÂçÃÂçõÃÂàõàÃÂ
ÃÂâÂÂôÃÂï */
|
||||
/** اگر true باشد بلافاصله صف میشود */
|
||||
queueNow?: boolean;
|
||||
}
|
||||
|
||||
@@ -3435,7 +3435,7 @@ export interface SmsCampaignListResponse {
|
||||
total: number;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ êÃÂÃÂ
âÂÂÃÂç àó÷àïóêñóàèàþñÃÂÃÂïÃÂâÂÂÃÂç âÂÂâÂÂâ */
|
||||
/* ——— تیمها و سطح دسترسی به پروندهها ——— */
|
||||
|
||||
export type TeamMemberRole = "member" | "manager";
|
||||
|
||||
@@ -3472,7 +3472,7 @@ export interface SetTeamMembersRequest {
|
||||
members: Array<{ userId: string; role: TeamMemberRole }>;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ ÃÂÃÂéçÃÂ
ñó âÂÂâÂÂâ */
|
||||
/* ——— ووکامرس ——— */
|
||||
|
||||
export interface WooCommerceConnectionDto {
|
||||
id: string;
|
||||
@@ -3528,7 +3528,7 @@ export interface WooCommerceOrderLinkDto {
|
||||
syncedAt: string;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ êÃÂÃÂàóçòÃÂ
çÃÂà/ VoIP âÂÂâÂÂâ */
|
||||
/* ——— تلفن سازمانی / VoIP ——— */
|
||||
|
||||
export type VoipCallDirection = "inbound" | "outbound";
|
||||
|
||||
@@ -3544,7 +3544,7 @@ export interface VoipConnectionDto {
|
||||
label: string;
|
||||
enabled: boolean;
|
||||
webhookSecretSet: boolean;
|
||||
/** ÃÂçÃÂè URL èñçàôñÃÂù êÃÂ
çóà{number} ìçÃÂïòÃÂàÃÂ
ÃÂâÂÂôÃÂï */
|
||||
/** قالب URL برای شروع تماس؛ {number} جایگزین میشود */
|
||||
clickToCallUrl: string | null;
|
||||
lastEventAt: string | null;
|
||||
lastError: string | null;
|
||||
@@ -3601,7 +3601,7 @@ export interface VoipClickToCallRequest {
|
||||
}
|
||||
|
||||
export interface VoipWebhookEvent {
|
||||
/** ôÃÂçóàÃÂéêçàêÃÂ
çó ïñ óçÃÂêñçà*/
|
||||
/** شناسه یکتای تماس در سانترال */
|
||||
callId: string;
|
||||
direction: VoipCallDirection;
|
||||
status: VoipCallStatus | string;
|
||||
@@ -3610,16 +3610,16 @@ export interface VoipWebhookEvent {
|
||||
startedAt?: string;
|
||||
endedAt?: string;
|
||||
durationSec?: number;
|
||||
/** ÃÂÃÂÃÂé ÃÂçÃÂàöè÷ (èñçàîÃÂçõàîÃÂïéçñ) */
|
||||
/** لینک فایل ضبط (برای خلاصه خودکار) */
|
||||
recordingUrl?: string;
|
||||
/** ÃÂ
êàâÃÂ
çïÃÂàêÃÂ
çóàçïñ èçôï STT ñï ÃÂ
ÃÂâÂÂôÃÂï */
|
||||
/** متن آمادهٔ تماس؛ اگر باشد STT رد میشود */
|
||||
transcript?: string;
|
||||
/** èñçàóçòïçñàèç ÃÂÃÂÃÂïÃÂçàñçÃÂì ïÃÂïñ */
|
||||
/** برای سازگاری با فیلدهای رایج دیگر */
|
||||
caller?: string;
|
||||
callee?: string;
|
||||
}
|
||||
|
||||
/* âÂÂâÂÂâ ñòñààÃÂÃÂèêâÂÂïÃÂàâÂÂâÂÂâ */
|
||||
/* ——— رزرو و نوبتدهی ——— */
|
||||
|
||||
export type ReservationStatus =
|
||||
| "pending"
|
||||
@@ -3635,10 +3635,10 @@ export const RESERVATION_STATUSES: ReservationStatus[] = [
|
||||
];
|
||||
|
||||
export const RESERVATION_STATUS_LABELS: Record<ReservationStatus, string> = {
|
||||
pending: "ïñ çÃÂêøçñ",
|
||||
confirmed: "êãÃÂÃÂï ôïÃÂ",
|
||||
canceled: "ÃÂúàôïÃÂ",
|
||||
done: "çÃÂìçÃÂ
ôïÃÂ",
|
||||
pending: "در انتظار",
|
||||
confirmed: "تأیید شده",
|
||||
canceled: "لغو شده",
|
||||
done: "انجام شده",
|
||||
};
|
||||
|
||||
export interface ReservationServiceDto {
|
||||
@@ -3646,7 +3646,7 @@ export interface ReservationServiceDto {
|
||||
name: string;
|
||||
description: string;
|
||||
durationMinutes: number;
|
||||
/** ñÃÂòÃÂçàÃÂÃÂêàð=ÃÂéôÃÂèà⦠ö=ôÃÂèà(JS getDay) */
|
||||
/** روزهای هفته ۰=یکشنبه … ۶=شنبه (JS getDay) */
|
||||
workDays: number[];
|
||||
dayStartHour: number;
|
||||
dayEndHour: number;
|
||||
@@ -3714,7 +3714,7 @@ export interface ReservationListResponse {
|
||||
|
||||
|
||||
|
||||
/* âÂÂâÂÂâ ÃÂ
ïÃÂñÃÂê ÃÂÃÂïÃÂç âÂÂâÂÂâ */
|
||||
/* ——— مدیریت لیدها ——— */
|
||||
|
||||
export type LeadAssignRule = "round_robin" | "equal_split";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user