5.0 KiB
5.0 KiB
ادغام کاریز (مسیر فروش)
تاریخ: ۲۰۲۶-۱۰-۱۲
وضعیت: تأییدشده توسط کاربر
هدف
ادغام یک کاریز مبدأ در کاریز مقصد با نگاشت دستی ستونها، بهروزرسانی وابستگیها، و حذف کاریز مبدأ — بدون از دست رفتن معامله یا قطع بیخبر اتصالها.
محدوده
- فقط مسیر فروش (Pipeline / Deal)، نه بُرد پروژه یا میز کار.
- محل ورود: تنظیمات مسیر فروش → مدیریت کاریزها → «ادغام کاریز».
- دسترسی: همان نقشهایی که کاریز میسازند (
canManageSettings).
خارج از محدوده (نسخهٔ اول)
- ادغام خودکار ستونها بر اساس نام.
- بازنویسی اتوماسیونها (فعلاً شناسهٔ کاریز/ستون معامله را نگه نمیدارند).
- مهاجرت فیلترهای ذخیرهشدهٔ سمت کلاینت (پس از ادغام، UI روی مقصد میماند).
جریان UI (ویزارد)
- مبدأ و مقصد: انتخاب دو کاریز؛ مبدأ ≠ مقصد؛ حداقل یک کاریز دیگر برای مقصد لازم است.
- پیشنمایش وابستگیها: تعداد معاملات، تعداد فرمهای سرنخ متصل، آیا مبدأ پیشفرض است.
- نگاشت ستونها: برای هر ستون مبدأ یک ستون مقصد اجباری است.
- ستون
isWonمبدأ فقط به ستونisWonمقصد. - ستون
isLostمبدأ فقط به ستونisLostمقصد. - بقیه به ستونهای باز (غیر برد/باخت) مقصد.
- ستون
- فرمهای سرنخ: نسخهٔ اول فقط حالت
retarget_all— همهٔ فرمهای متصل به مبدأ به مقصد منتقل میشوند. در پیشنمایش نام فرمها نشان داده میشود تا کاربر بداند چه چیزی جابهجا میشود. - پیشفرض: اگر مبدأ
isDefaultاست، پس از ادغام مقصد پیشفرض میشود. - تأیید: خلاصهٔ قابلخواندن + اجرای عمل.
اگر صفحهٔ «تنظیمات مسیر فروش / مدیریت کاریزها» هنوز وجود ندارد، در همین کار اضافه میشود (لیست کاریزها، ساخت، و دکمهٔ ادغام).
API
پیشنمایش
GET /pipelines/:sourceId/merge-preview
پاسخ نمونه:
{
"source": { "id": "...", "name": "...", "isDefault": false },
"stages": [{ "id": "...", "name": "...", "isWon": false, "isLost": false, "dealCount": 12 }],
"dealCount": 42,
"leadForms": [{ "id": "...", "name": "...", "isActive": true }],
"targets": [{ "id": "...", "name": "...", "isDefault": true, "stages": [...] }]
}
اجرا
POST /pipelines/:sourceId/merge
بدنه:
{
"targetPipelineId": "...",
"stageMap": { "<sourceStageId>": "<targetStageId>" },
"leadFormMode": "retarget_all"
}
همه در یک تراکنش Prisma:
- اعتبارسنجی مبدأ/مقصد، نگاشت کامل ستونها، سازگاری برد/باخت.
- بهروزرسانی معاملات:
pipelineIdوstageIdبر اساسstageMap(و در صورت نیازstatusهمراستا با ستون مقصد). - فرمهای سرنخ با
pipelineId = source→target(حالتretarget_all). - اگر مبدأ پیشفرض بود:
isDefaultمقصد = true، مبدأ قبل از حذف false. - حذف کاریز مبدأ (ستونهایش cascade).
خطاها با پیام فارسی خوانا؛ در صورت خطا هیچ تغییر نیمهکارهای نماند.
مدل داده (موجود)
Pipeline→stages,deals,isDefaultDeal.pipelineId/Deal.stageId(stageباonDelete: Restrict)LeadForm.pipelineId(اختیاری، برای ساخت معامله از فرم)
حذف مستقیم کاریز بدون انتقال معامله خطرناک است؛ ادغام جایگزین حذف امن است.
تست
- واحد API: نگاشت ناقص رد شود؛ برد→باز رد شود؛ تراکنش معامله + فرم + پیشفرض + حذف مبدأ.
- دستی: دو کاریز با چند معامله و یک فرم سرنخ؛ پس از ادغام فقط مقصد در سلکت دیده شود و فرم به مقصد اشاره کند.
معیار پذیرش
- از تنظیمات مسیر فروش بتوان دو کاریز را ادغام کرد.
- همهٔ معاملات با نگاشت ستون منتقل شوند.
- فرمهای سرنخ متصل بهصورت پیشفرض به مقصد بروند.
- کاریز مبدأ حذف شود و اگر پیشفرض بود، مقصد پیشفرض شود.
- در خطا، دادهٔ قبلی حفظ شود.