Connecting alone does not copy customers; settings now list a code range and import them into CRM persons with link status. Co-authored-by: Cursor <cursoragent@cursor.com>
330 lines
4.9 KiB
TypeScript
330 lines
4.9 KiB
TypeScript
import {
|
|
IsArray,
|
|
IsBoolean,
|
|
IsIn,
|
|
IsInt,
|
|
IsNumber,
|
|
IsOptional,
|
|
IsString,
|
|
IsUrl,
|
|
MaxLength,
|
|
Min,
|
|
MinLength,
|
|
ValidateNested,
|
|
} from 'class-validator';
|
|
import { Type } from 'class-transformer';
|
|
|
|
export class CreateTahesabConnectionDto {
|
|
@IsString()
|
|
@MinLength(1)
|
|
@MaxLength(120)
|
|
label!: string;
|
|
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(500)
|
|
baseUrl!: string;
|
|
|
|
@IsString()
|
|
@MinLength(1)
|
|
@MaxLength(120)
|
|
dbName!: string;
|
|
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(2000)
|
|
token!: string;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
enabled?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isDefault?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
allowInsecureTls?: boolean;
|
|
}
|
|
|
|
export class UpdateTahesabConnectionDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(1)
|
|
@MaxLength(120)
|
|
label?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(500)
|
|
baseUrl?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(1)
|
|
@MaxLength(120)
|
|
dbName?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(8)
|
|
@MaxLength(2000)
|
|
token?: string;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
enabled?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
isDefault?: boolean;
|
|
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
allowInsecureTls?: boolean;
|
|
}
|
|
|
|
export class ManualLinkDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
@IsInt()
|
|
@Min(1)
|
|
moshtariCode!: number;
|
|
}
|
|
|
|
export class MatchPersonDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
/** اگر true باشد و دقیقاً یک نتیجه باشد، لینک میشود */
|
|
@IsOptional()
|
|
@IsBoolean()
|
|
autoLinkIfUnique?: boolean;
|
|
}
|
|
|
|
export class CreateInTahesabDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
groupName?: string;
|
|
|
|
@IsOptional()
|
|
@IsInt()
|
|
jensFelez?: number;
|
|
}
|
|
|
|
export class ImportFromTahesabDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
moshtariCode!: number;
|
|
|
|
/** اگر داده شود به این شخص لینک میشود؛ وگرنه شخص جدید ساخته میشود */
|
|
@IsOptional()
|
|
@IsString()
|
|
personId?: string;
|
|
}
|
|
|
|
export class ImportBulkFromTahesabDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
@IsOptional()
|
|
@IsArray()
|
|
@Type(() => Number)
|
|
@IsInt({ each: true })
|
|
moshtariCodes?: number[];
|
|
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
fromCode?: number;
|
|
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
toCode?: number;
|
|
}
|
|
|
|
export class SearchTahesabDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
phone?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
name?: string;
|
|
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
moshtariCode?: number;
|
|
|
|
/** لیست بازهای با DoListMoshtari-ByCode */
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
fromCode?: number;
|
|
|
|
@IsOptional()
|
|
@Type(() => Number)
|
|
@IsInt()
|
|
@Min(1)
|
|
toCode?: number;
|
|
}
|
|
|
|
export class ListAsnadQueryDto {
|
|
@IsOptional()
|
|
@IsString()
|
|
connectionId?: string;
|
|
|
|
/** تاریخ شمسی YYYY-MM-DD */
|
|
@IsString()
|
|
from!: string;
|
|
|
|
@IsString()
|
|
to!: string;
|
|
}
|
|
|
|
const SANAD_TYPES = [
|
|
'buy_sale_gold',
|
|
'buy_sale_sekeh',
|
|
'talab_bedehi',
|
|
'vkh_gold',
|
|
'vkh_bank',
|
|
] as const;
|
|
|
|
export class PushSanadDto {
|
|
@IsString()
|
|
connectionId!: string;
|
|
|
|
@IsIn(SANAD_TYPES)
|
|
docType!: (typeof SANAD_TYPES)[number];
|
|
|
|
@IsInt()
|
|
year!: number;
|
|
|
|
@IsInt()
|
|
@Min(1)
|
|
month!: number;
|
|
|
|
@IsInt()
|
|
@Min(1)
|
|
day!: number;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
@MaxLength(500)
|
|
sharh?: string;
|
|
|
|
// gold / sekeh / vkh gold
|
|
@IsOptional()
|
|
@IsNumber()
|
|
vazn?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
ayar?: number;
|
|
|
|
@IsOptional()
|
|
@IsIn([0, 1])
|
|
buyOrSale?: 0 | 1;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
mazaneh?: number;
|
|
|
|
@IsOptional()
|
|
@IsIn([0, 1])
|
|
mazanehIsGeram?: 0 | 1;
|
|
|
|
@IsOptional()
|
|
@IsIn([0, 1])
|
|
isAbshode?: 0 | 1;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
mablaghKol?: number;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
count?: number;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
nameSekeh?: string;
|
|
|
|
@IsOptional()
|
|
@IsIn([0, 1])
|
|
isBedehiOrTalab?: 0 | 1;
|
|
|
|
@IsOptional()
|
|
@IsNumber()
|
|
mablagh?: number;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
baabat?: string;
|
|
|
|
@IsOptional()
|
|
@IsInt()
|
|
havalehBeMcode?: number;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
angNumber?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
nameAz?: string;
|
|
|
|
@IsOptional()
|
|
@IsIn([0, 1])
|
|
isVoroodOrKhorooj?: 0 | 1;
|
|
|
|
@IsOptional()
|
|
@IsIn([0, 1])
|
|
isDaryaftOrPardakht?: 0 | 1;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
nameBank?: string;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
codeRahgiri?: string;
|
|
|
|
@IsOptional()
|
|
@IsInt()
|
|
jensFelez?: number;
|
|
|
|
@IsOptional()
|
|
@IsString()
|
|
arzName?: string;
|
|
|
|
/** اگر ارسال شود و قبلاً success بوده، همان پاسخ برمیگردد (retry امن) */
|
|
@IsOptional()
|
|
@IsString()
|
|
@MinLength(20)
|
|
factorCode?: string;
|
|
}
|
|
|
|
// silence unused import warnings for ValidateNested/Type if unused
|
|
void ValidateNested;
|
|
void Type;
|
|
void IsUrl;
|