Files
psp_api/src/modules/pos/sales-invoices/dto/create-sales-invoice.dto.ts
T

164 lines
3.5 KiB
TypeScript
Raw Normal View History

import { ApiProperty, PartialType } from '@nestjs/swagger'
import { Type } from 'class-transformer'
import {
ArrayMinSize,
IsBoolean,
IsDate,
IsDateString,
IsEnum,
IsNotEmpty,
IsNumber,
IsObject,
IsOptional,
IsString,
Min,
ValidateNested,
} from 'class-validator'
import type { CustomerIndividual, CustomerLegal } from 'generated/prisma/client'
import { CustomerType } from 'generated/prisma/enums'
import { CreateSalesInvoiceItemDto } from '../sales-invoice-items/dto/create-sales-invoice-item.dto'
export class CreateTerminalPayment {
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
amount?: number
@IsString()
@IsNotEmpty()
@ApiProperty({ required: true })
terminalId: string
@IsString()
@IsNotEmpty()
@ApiProperty({ required: true })
stan: string
@IsString()
@IsNotEmpty()
@ApiProperty({ required: true })
rrn: string
@IsString()
@IsOptional()
@ApiProperty({ required: true })
response_code?: string
@IsString()
@IsOptional()
@ApiProperty({ required: true })
customer_card_no?: string
@Type(() => Date)
@IsDate()
@ApiProperty({ required: true })
transaction_date_time: Date
@IsOptional()
@IsString()
@ApiProperty({ required: false })
description?: string
}
export class CreateSalesInvoicePaymentsDto {
@IsOptional()
@ValidateNested()
@Type(() => CreateTerminalPayment)
@ApiProperty({ required: false, type: () => CreateTerminalPayment })
terminals?: CreateTerminalPayment
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
cash?: number
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
set_off?: number
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
card?: number
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
bank?: number
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
check?: number
@IsOptional()
@IsNumber()
@Min(0)
@ApiProperty({ required: false, default: 0 })
other?: number
}
export class CreateSalesInvoiceDto {
2026-03-29 18:06:41 +03:30
// @TODO: totalAmount must calculated instead of get from api
@IsNumber()
@ApiProperty({ required: true, default: 0 })
total_amount: number
@ApiProperty({ required: true })
@IsDateString(
{ strict: true },
{ message: 'invoice_date must be a valid ISO-8601 string' },
)
invoice_date: Date
@ApiProperty({ required: true })
@IsObject()
@ValidateNested()
@Type(() => CreateSalesInvoicePaymentsDto)
payments: CreateSalesInvoicePaymentsDto
@ApiProperty()
@ArrayMinSize(1)
items: CreateSalesInvoiceItemDto[]
@ApiProperty({ required: false })
@IsOptional()
@IsString()
notes?: string
@ApiProperty({ required: false, default: false })
@IsOptional()
@IsBoolean()
send_to_tsp?: boolean
@ApiProperty({ required: true, default: CustomerType.UNKNOWN })
@IsEnum(CustomerType)
customer_type: CustomerType
@IsOptional()
@IsString()
@ApiProperty({ required: false })
customer_id?: string
@ApiProperty({ required: false })
@IsOptional()
@IsObject()
customer?: {
customer_individual?: Omit<CustomerIndividual, 'business_activity_id' | 'customer_id'>
customer_legal?: Omit<CustomerLegal, 'business_activity_id' | 'customer_id'>
customer_unknown?: {
first_name: string
last_name: string
}
}
}
export class UpdateSalesInvoiceDto extends PartialType(CreateSalesInvoiceDto) {}