import { ApiProperty } from '@nestjs/swagger' import { Type } from 'class-transformer' import { IsArray, IsNumber, IsOptional, IsString, Min, ValidateNested, } from 'class-validator' export enum NamaProviderResponseStatus { POSTED = 'POSTED', PENDING = 'PENDING', IN_PROGRESS = 'IN_PROGRESS', SUCCESS = 'SUCCESS', VALIDATION_ERROR = 'VALIDATION_ERROR', FAILED = 'FAILED', } export class NamaProviderPaymentInfoDto { @ApiProperty({ required: true, description: 'روش پرداخت با توجه به PaymentMethodType' }) @IsNumber() pmt: number @ApiProperty({ required: true, description: 'مبلغ پرداختی. در صورتی که روش تسویه نسیه باشد برابر با ۰ است', }) @IsNumber({ allowInfinity: false, allowNaN: false }) @Min(0) pv: number @ApiProperty({ required: false, description: 'شماره‌ی پیگیری' }) @IsOptional() @IsString() trn?: string @ApiProperty({ required: false, description: 'شماره‌ی کارت پرداخت کننده‌ی صورت‌حساب' }) @IsOptional() @IsString() pcn?: string @ApiProperty({ required: false, description: 'تاریخ و زمان پرداخت صورت‌حساب unix' }) @IsOptional() @IsNumber() pdt?: string } export class NamaProviderCommonHeaderDto { @ApiProperty({ required: true, description: 'الگوی صورتحساب' }) @IsString() inp: string @ApiProperty({ required: true, description: 'نوع صورتحساب' }) @IsString() inty: string @ApiProperty({ required: true, description: 'سریال صورتحساب داخلی حافظه مالیاتی' }) @IsString() inno: string // @ApiProperty({ required: true }) // @IsString() // tins: string @ApiProperty({ required: true, description: 'تاریخ و زمان صدور صورتحساب به صورت timestamp', }) @IsString() indatim: string @ApiProperty({ required: true, description: 'نام مشتری' }) @IsString() name: string @ApiProperty({ required: false, description: 'نوع شخصیت خریدار (در صورتی‌که خریدار نوع ۲ باشه باید ۱ یا ۲ گذاشته بشه)', }) @IsString() tob: string @ApiProperty({ description: 'آدرس' }) @IsOptional() @IsString() address?: string @ApiProperty({ description: 'شماره موبایل' }) @IsOptional() @IsString() mobile?: string @ApiProperty({ description: `شماره ملی / شناسه ملی / شناسه مشارکت مدنی / کد فراگیر خریدار`, }) @IsString() bid: string @ApiProperty({ required: true, description: 'روش تسویه (۱.نقدی، ۲.نسیه، ۳.نقدی-نسیه)' }) @IsString() setm: '1' | '2' | '3' @ApiProperty({ description: 'سهم پرداخت نقدی در صورتی که نقدی - نسیه باشد (۳)' }) @IsString() cap: string @ApiProperty({ description: 'سهم پرداخت نسیه در صورتی که نقدی - نسیه باشد (۳)' }) @IsString() insp: string } export class NamaProviderCommonBodyDto { @ApiProperty({ required: true, description: 'شناسه کالا / خدمت' }) @IsString() sstid: string @ApiProperty({ required: true, description: `نرخ مالیات بر ارزش افزوده`, }) @IsString() vra: string // @ApiProperty() // @IsString() // sstt: string @ApiProperty({ required: true, description: 'مبلغ واحد', }) @IsString() fee: string @ApiProperty({ required: true, description: 'مبلغ تخفیف', }) @IsString() dis: string @ApiProperty({ required: true, description: 'واحد اندازه گیری', }) @IsString() mu: string @ApiProperty({ required: true, description: 'تعداد / مقدار', }) @IsString() am: string @ApiProperty({ description: ' اجرت ساخت (طلا)', }) @IsOptional() @IsString() consfee?: string @ApiProperty({ description: 'حق العمل', }) @IsOptional() @IsString() bros?: string @ApiProperty({ description: 'سود فروشنده', }) @IsOptional() @IsString() spro?: string @ApiProperty({ description: 'مجموع سود، حق‌العمل و اجرت', }) @IsOptional() @IsString() tcpbs?: string } export class NamaProviderApiErrorItemDto { @ApiProperty() @IsString() code: string @ApiProperty() @IsString() message: string } export class NamaProviderTSPValidationErrorsDto { @ApiProperty({ type: [NamaProviderApiErrorItemDto], required: false }) @IsOptional() @IsArray() @ValidateNested({ each: true }) @Type(() => NamaProviderApiErrorItemDto) error?: NamaProviderApiErrorItemDto[] @ApiProperty({ type: [NamaProviderApiErrorItemDto], required: false }) @IsOptional() @IsArray() @ValidateNested({ each: true }) @Type(() => NamaProviderApiErrorItemDto) warning?: NamaProviderApiErrorItemDto[] } export class NamaProviderValidationErrorDto { @IsString() key: string @IsString() errorKeyPosition: string @IsString() message: string @IsNumber() errorKeyIndex: number } export class NamaProviderResponseDto { @ApiProperty({ description: 'شناسه پیگیری صورت‌حساب' }) @IsString() uuid: string @ApiProperty() @IsString() message: string @ApiProperty() @IsString() status: NamaProviderResponseStatus @ApiProperty() @IsString() inno: string @ApiProperty({ required: true }) @IsString() reference_number: string @ApiProperty() @IsString() @IsOptional() tax_id?: string @ApiProperty() @IsString() @IsOptional() error_message: string @ApiProperty({ type: [NamaProviderValidationErrorDto] }) @IsArray() @IsOptional() validation_error: NamaProviderValidationErrorDto[] @ApiProperty({ type: [NamaProviderTSPValidationErrorsDto], required: false }) @IsOptional() tax_api_response?: NamaProviderTSPValidationErrorsDto[] }