2026-10-03 18:28:47 +03:30
|
|
|
import type { ExcelFieldOption } from '@mento/shared';
|
|
|
|
|
|
2026-10-04 10:44:00 +03:30
|
|
|
/**
|
|
|
|
|
* ترتیب ستونهای خروجی فعالیت دیدار (۲۲ ستون).
|
|
|
|
|
* بعضی فایلها بدون ردیف هدر هستند و ردیف اول همان دیتا است.
|
|
|
|
|
*/
|
|
|
|
|
export const DIDAR_ACTIVITY_POSITIONAL: Array<{ key: string; label: string }> = [
|
|
|
|
|
{ key: '_type', label: '_type' },
|
|
|
|
|
{ key: 'kind', label: 'نوع فعالیت' },
|
|
|
|
|
{ key: 'title', label: 'عنوان فعالیت' },
|
|
|
|
|
{ key: 'body', label: 'متن فعالیت' },
|
|
|
|
|
{ key: 'result', label: 'نتیجه فعالیت' },
|
|
|
|
|
{ key: 'assignee', label: 'مسئول اجرا فعالیت' },
|
|
|
|
|
{ key: 'creator', label: 'ثبت کننده فعالیت' },
|
|
|
|
|
{ key: 'dueDate', label: 'تاریخ برنامه ریزی شده اجرا فعالیت' },
|
|
|
|
|
{ key: 'dueTime', label: 'زمان برنامه ریزی شده اجرا فعالیت' },
|
|
|
|
|
{ key: 'status', label: 'وضعیت اجرای فعالیت' },
|
|
|
|
|
{ key: 'doneDate', label: 'تاریخ انجام شدن فعالیت' },
|
|
|
|
|
{ key: 'dealCode', label: 'کد معامله فعالیت' },
|
|
|
|
|
{ key: 'cardCode', label: 'کد کارت فعالیت' },
|
|
|
|
|
{ key: 'doneTime', label: 'زمان انجام شدن فعالیت' },
|
|
|
|
|
{ key: 'personName', label: 'اشخاص فعالیت' },
|
|
|
|
|
{ key: 'personCode', label: 'کد اشخاص فعالیت' },
|
|
|
|
|
{ key: 'personMobile', label: 'موبایل اشخاص فعالیت' },
|
|
|
|
|
{ key: 'companyName', label: 'شرکت های فعالیت' },
|
|
|
|
|
{ key: 'companyCode', label: 'کد شرکت های فعالیت' },
|
|
|
|
|
{ key: 'dealTitle', label: 'معامله فعالیت_1' },
|
|
|
|
|
{ key: 'cardTitle', label: 'کارت فعالیت_1' },
|
|
|
|
|
{ key: 'hashtag', label: 'هشتگ' },
|
|
|
|
|
];
|
|
|
|
|
|
2026-10-03 18:28:47 +03:30
|
|
|
/** همتراز با aliases سمت API برای ایمپورت فعالیت */
|
|
|
|
|
export const ACTIVITY_EXCEL_ALIASES: Record<string, string> = {
|
|
|
|
|
_type: '_type',
|
|
|
|
|
type: '_type',
|
2026-10-04 10:44:00 +03:30
|
|
|
activity: '_type',
|
2026-10-03 18:28:47 +03:30
|
|
|
نوعفعالیت: 'kind',
|
|
|
|
|
عنوانفعالیت: 'title',
|
|
|
|
|
عنوان: 'title',
|
|
|
|
|
متنفعالیت: 'body',
|
|
|
|
|
نتیجهفعالیت: 'result',
|
|
|
|
|
مسئولاجرافعالیت: 'assignee',
|
|
|
|
|
ثبتکنندهفعالیت: 'creator',
|
|
|
|
|
تاریخبرنامهریزیشدهاجرافعالیت: 'dueDate',
|
|
|
|
|
زمانبرنامهریزیشدهاجرافعالیت: 'dueTime',
|
|
|
|
|
وضعیتاجرایفعالیت: 'status',
|
|
|
|
|
تاریخانجامشدنفعالیت: 'doneDate',
|
|
|
|
|
زمانانجامشدنفعالیت: 'doneTime',
|
|
|
|
|
کدمعاملهفعالیت: 'dealCode',
|
|
|
|
|
کدکارتفعالیت: 'cardCode',
|
|
|
|
|
اشخاصفعالیت: 'personName',
|
|
|
|
|
کداشخاصفعالیت: 'personCode',
|
|
|
|
|
موبایلاشخاصفعالیت: 'personMobile',
|
|
|
|
|
شرکتهایفعالیت: 'companyName',
|
|
|
|
|
کدشرکتهایفعالیت: 'companyCode',
|
|
|
|
|
معاملهفعالیت1: 'dealTitle',
|
2026-10-04 10:44:00 +03:30
|
|
|
معاملهفعالیت_1: 'dealTitle',
|
2026-10-03 18:28:47 +03:30
|
|
|
کارتفعالیت1: 'cardTitle',
|
2026-10-04 10:44:00 +03:30
|
|
|
کارتفعالیت_1: 'cardTitle',
|
2026-10-03 18:28:47 +03:30
|
|
|
هشتگ: 'hashtag',
|
|
|
|
|
};
|
|
|
|
|
|
2026-10-04 10:44:00 +03:30
|
|
|
export const ACTIVITY_EXCEL_FIELDS: ExcelFieldOption[] = DIDAR_ACTIVITY_POSITIONAL.filter(
|
|
|
|
|
(c) => c.key !== '_type',
|
|
|
|
|
).map((c) => ({
|
|
|
|
|
key: c.key,
|
|
|
|
|
label: c.label,
|
|
|
|
|
required: c.key === 'title',
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
/** ردیف اول شبیه دیتای دیدار است نه هدر فارسی */
|
|
|
|
|
export function looksLikeDidarActivityHeaderless(firstRow: string[]): boolean {
|
|
|
|
|
const first = (firstRow[0] ?? '').trim().toLowerCase();
|
|
|
|
|
if (first !== 'activity' && first !== '_type') return false;
|
|
|
|
|
const kind = (firstRow[1] ?? '').trim();
|
|
|
|
|
return /تماس|پیگیری|جلسه|یادداشت|ملاقات|call|task|meeting|note|پیام/i.test(kind);
|
|
|
|
|
}
|