feat: group activities into boards with their own stages, like sales pipelines

Existing stages and activities move into a default board per environment; new activities pick a board in the form.
This commit is contained in:
2026-10-20 17:23:27 +03:30
parent 9127fa334b
commit e6aa4c64f0
11 changed files with 769 additions and 58 deletions
+25
View File
@@ -1279,8 +1279,25 @@ export const ACTIVITY_STAGE_KIND_LABELS: Record<ActivityStatus, string> = {
canceled: "لغو شده",
};
/** گروه فعالیت (مثل مسیر فروش): هر گروه ستون‌های خودش را دارد */
export interface ActivityBoardDto {
id: string;
name: string;
isDefault: boolean;
position: number;
}
export interface CreateActivityBoardRequest {
name: string;
}
export interface UpdateActivityBoardRequest {
name?: string;
}
export interface ActivityStageDto {
id: string;
boardId: string;
name: string;
position: number;
color: ActivityStageColor;
@@ -1288,6 +1305,8 @@ export interface ActivityStageDto {
}
export interface CreateActivityStageRequest {
/** خالی = گروه پیش‌فرض */
boardId?: string;
name: string;
color?: ActivityStageColor;
kind?: ActivityStatus;
@@ -1530,6 +1549,8 @@ export interface ActivityDto {
/** همه مسئولان انجام فعالیت */
assignees: UserSummaryDto[];
createdBy: UserSummaryDto | null;
/** گروه مؤثر فعالیت (گروه پیش‌فرض اگر گروهی انتخاب نشده باشد) */
boardId?: string | null;
/** مرحلهٔ مؤثر (ستون کانبان) */
stageId?: string | null;
/** نوع مؤثر (سفارشی یا نوع اصلیِ همان type) */
@@ -1546,6 +1567,8 @@ export interface ActivityDto {
export interface CreateActivityRequest {
title: string;
/** گروه فعالیت؛ خالی = گروه پیش‌فرض. اگر stageId بیاید، گروه از همان مرحله گرفته می‌شود */
boardId?: string | null;
/** مرحلهٔ اولیه؛ وضعیت فعالیت از نوع مرحله گرفته می‌شود */
stageId?: string | null;
type?: ActivityType;
@@ -1571,6 +1594,8 @@ export interface CreateActivityRequest {
export interface UpdateActivityRequest {
title?: string;
/** انتقال به گروه دیگر؛ فعالیت به ستون اولِ هم‌وضعیت آن گروه می‌رود */
boardId?: string | null;
type?: ActivityType;
typeDefId?: string | null;
fields?: ActivityFieldValues;