Add project board, loyalty club, and if/then automations.
Separate modules for post-sales kanban, person points/tiers, and deal-won/ticket-resolved rules without overlapping the sales pipeline. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -162,6 +162,13 @@ export interface CreateCompanyRequest {
|
||||
|
||||
export type UpdateCompanyRequest = Partial<CreateCompanyRequest>;
|
||||
|
||||
export interface LoyaltyTierSummaryDto {
|
||||
id: string;
|
||||
name: string;
|
||||
minPoints: number;
|
||||
color: string | null;
|
||||
}
|
||||
|
||||
export interface PersonDto {
|
||||
id: string;
|
||||
firstName: string;
|
||||
@@ -173,6 +180,8 @@ export interface PersonDto {
|
||||
position: string | null;
|
||||
notes: string | null;
|
||||
customFields: Record<string, unknown>;
|
||||
loyaltyPoints: number;
|
||||
loyaltyTier: LoyaltyTierSummaryDto | null;
|
||||
company: CompanySummaryDto | null;
|
||||
owner: UserSummaryDto | null;
|
||||
createdAt: string;
|
||||
@@ -520,6 +529,8 @@ export type NotificationType =
|
||||
| "activity_overdue"
|
||||
| "deal_moved"
|
||||
| "note_reminder"
|
||||
| "ticket_assigned"
|
||||
| "automation"
|
||||
| "system";
|
||||
|
||||
export interface NotificationDto {
|
||||
@@ -1089,6 +1100,147 @@ export interface ReportsDashboardDto {
|
||||
peopleCreated: number;
|
||||
}
|
||||
|
||||
/** برد پروژه / کاریز کارت */
|
||||
export interface ProjectBoardStageDto {
|
||||
id: string;
|
||||
name: string;
|
||||
position: number;
|
||||
}
|
||||
|
||||
export interface ProjectBoardDto {
|
||||
id: string;
|
||||
name: string;
|
||||
isDefault: boolean;
|
||||
stages: ProjectBoardStageDto[];
|
||||
}
|
||||
|
||||
export interface ProjectCardDto {
|
||||
id: string;
|
||||
title: string;
|
||||
notes: string | null;
|
||||
position: number;
|
||||
boardId: string;
|
||||
stageId: string;
|
||||
person: PersonSummaryDto | null;
|
||||
company: CompanySummaryDto | null;
|
||||
deal: { id: string; title: string } | null;
|
||||
owner: UserSummaryDto | null;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface ProjectBoardColumnDto extends ProjectBoardStageDto {
|
||||
cards: ProjectCardDto[];
|
||||
}
|
||||
|
||||
export interface ProjectBoardBoardDto {
|
||||
board: ProjectBoardDto;
|
||||
stages: ProjectBoardColumnDto[];
|
||||
}
|
||||
|
||||
export interface CreateProjectBoardRequest {
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface CreateProjectCardRequest {
|
||||
title: string;
|
||||
boardId?: string;
|
||||
stageId?: string;
|
||||
notes?: string;
|
||||
personId?: string | null;
|
||||
companyId?: string | null;
|
||||
dealId?: string | null;
|
||||
ownerId?: string | null;
|
||||
}
|
||||
|
||||
export type UpdateProjectCardRequest = Partial<CreateProjectCardRequest>;
|
||||
|
||||
export interface MoveProjectCardRequest {
|
||||
stageId: string;
|
||||
position?: number;
|
||||
}
|
||||
|
||||
/** باشگاه مشتریان */
|
||||
export interface LoyaltyTierDto {
|
||||
id: string;
|
||||
name: string;
|
||||
minPoints: number;
|
||||
position: number;
|
||||
color: string | null;
|
||||
memberCount?: number;
|
||||
}
|
||||
|
||||
export interface CreateLoyaltyTierRequest {
|
||||
name: string;
|
||||
minPoints: number;
|
||||
color?: string | null;
|
||||
}
|
||||
|
||||
export type UpdateLoyaltyTierRequest = Partial<CreateLoyaltyTierRequest>;
|
||||
|
||||
export interface AdjustLoyaltyPointsRequest {
|
||||
delta: number;
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
export interface LoyaltyMemberDto {
|
||||
id: string;
|
||||
fullName: string;
|
||||
mobile: string | null;
|
||||
email: string | null;
|
||||
loyaltyPoints: number;
|
||||
loyaltyTier: LoyaltyTierSummaryDto | null;
|
||||
company: CompanySummaryDto | null;
|
||||
}
|
||||
|
||||
/** اتوماسیون اگر/آنگاه */
|
||||
export type AutomationTrigger = "deal_won" | "ticket_resolved";
|
||||
export type AutomationAction =
|
||||
| "create_activity"
|
||||
| "create_notification"
|
||||
| "add_loyalty_points";
|
||||
|
||||
export const AUTOMATION_TRIGGER_LABELS: Record<AutomationTrigger, string> = {
|
||||
deal_won: "معامله برنده شد",
|
||||
ticket_resolved: "تیکت حل شد",
|
||||
};
|
||||
|
||||
export const AUTOMATION_ACTION_LABELS: Record<AutomationAction, string> = {
|
||||
create_activity: "ساخت فعالیت",
|
||||
create_notification: "ارسال اعلان",
|
||||
add_loyalty_points: "افزودن امتیاز باشگاه",
|
||||
};
|
||||
|
||||
export interface AutomationRuleConfig {
|
||||
title?: string;
|
||||
body?: string;
|
||||
assigneeId?: string | null;
|
||||
notifyUserId?: string | null;
|
||||
activityType?: "call" | "meeting" | "task" | "note";
|
||||
points?: number;
|
||||
}
|
||||
|
||||
export interface AutomationRuleDto {
|
||||
id: string;
|
||||
name: string;
|
||||
isActive: boolean;
|
||||
trigger: AutomationTrigger;
|
||||
action: AutomationAction;
|
||||
config: AutomationRuleConfig;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
}
|
||||
|
||||
export interface CreateAutomationRuleRequest {
|
||||
name: string;
|
||||
trigger: AutomationTrigger;
|
||||
action: AutomationAction;
|
||||
isActive?: boolean;
|
||||
config?: AutomationRuleConfig;
|
||||
}
|
||||
|
||||
export type UpdateAutomationRuleRequest = Partial<CreateAutomationRuleRequest>;
|
||||
|
||||
export const APP_NAME = "Mento CRM";
|
||||
export const APP_NAME_FA = "منتو";
|
||||
export const API_PREFIX = "api";
|
||||
|
||||
Reference in New Issue
Block a user