Files
CRM_Montzar/apps/web/src/lib/activity-excel.ts
T

78 lines
3.5 KiB
TypeScript
Raw Normal View History

import type { ExcelFieldOption } from '@mento/shared';
/**
* ترتیب ستون‌های خروجی فعالیت دیدار (۲۲ ستون).
* بعضی فایل‌ها بدون ردیف هدر هستند و ردیف اول همان دیتا است.
*/
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: 'هشتگ' },
];
/** هم‌تراز با aliases سمت API برای ایمپورت فعالیت */
export const ACTIVITY_EXCEL_ALIASES: Record<string, string> = {
_type: '_type',
type: '_type',
activity: '_type',
نوعفعالیت: 'kind',
عنوانفعالیت: 'title',
عنوان: 'title',
متنفعالیت: 'body',
نتیجهفعالیت: 'result',
مسئولاجرافعالیت: 'assignee',
ثبتکنندهفعالیت: 'creator',
تاریخبرنامهریزیشدهاجرافعالیت: 'dueDate',
زمانبرنامهریزیشدهاجرافعالیت: 'dueTime',
وضعیتاجرایفعالیت: 'status',
تاریخانجامشدنفعالیت: 'doneDate',
زمانانجامشدنفعالیت: 'doneTime',
کدمعاملهفعالیت: 'dealCode',
کدکارتفعالیت: 'cardCode',
اشخاصفعالیت: 'personName',
کداشخاصفعالیت: 'personCode',
موبایلاشخاصفعالیت: 'personMobile',
شرکتهایفعالیت: 'companyName',
کدشرکتهایفعالیت: 'companyCode',
معاملهفعالیت1: 'dealTitle',
معاملهفعالیت_1: 'dealTitle',
کارتفعالیت1: 'cardTitle',
کارتفعالیت_1: 'cardTitle',
هشتگ: 'hashtag',
};
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);
}