2026-02-12 20:31:04 +03:30
|
|
|
import { ApiProperty, PartialType } from '@nestjs/swagger'
|
2026-04-30 16:27:46 +03:30
|
|
|
import { Type } from 'class-transformer'
|
2026-02-24 12:42:10 +03:30
|
|
|
import {
|
|
|
|
|
ArrayMinSize,
|
2026-04-27 22:11:05 +03:30
|
|
|
IsBoolean,
|
2026-04-30 16:27:46 +03:30
|
|
|
IsDate,
|
2026-02-24 12:42:10 +03:30
|
|
|
IsDateString,
|
|
|
|
|
IsEnum,
|
2026-04-30 16:27:46 +03:30
|
|
|
IsNotEmpty,
|
2026-02-24 12:42:10 +03:30
|
|
|
IsNumber,
|
|
|
|
|
IsObject,
|
|
|
|
|
IsOptional,
|
|
|
|
|
IsString,
|
2026-04-30 16:27:46 +03:30
|
|
|
Min,
|
|
|
|
|
ValidateNested,
|
2026-02-24 12:42:10 +03:30
|
|
|
} from 'class-validator'
|
2026-03-07 11:25:11 +03:30
|
|
|
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'
|
2025-12-09 13:59:07 +03:30
|
|
|
|
2026-04-30 16:27:46 +03:30
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-09 13:59:07 +03:30
|
|
|
export class CreateSalesInvoiceDto {
|
2026-03-29 18:06:41 +03:30
|
|
|
// @TODO: totalAmount must calculated instead of get from api
|
2025-12-09 13:59:07 +03:30
|
|
|
@IsNumber()
|
2026-02-16 20:51:34 +03:30
|
|
|
@ApiProperty({ required: true, default: 0 })
|
2026-02-12 20:31:04 +03:30
|
|
|
total_amount: number
|
2025-12-09 13:59:07 +03:30
|
|
|
|
2026-02-24 12:42:10 +03:30
|
|
|
@ApiProperty({ required: true })
|
2026-03-07 11:25:11 +03:30
|
|
|
@IsDateString(
|
|
|
|
|
{ strict: true },
|
|
|
|
|
{ message: 'invoice_date must be a valid ISO-8601 string' },
|
|
|
|
|
)
|
2026-02-24 12:42:10 +03:30
|
|
|
invoice_date: Date
|
|
|
|
|
|
|
|
|
|
@ApiProperty({ required: true })
|
|
|
|
|
@IsObject()
|
2026-04-30 16:27:46 +03:30
|
|
|
@ValidateNested()
|
|
|
|
|
@Type(() => CreateSalesInvoicePaymentsDto)
|
|
|
|
|
payments: CreateSalesInvoicePaymentsDto
|
2026-02-24 12:42:10 +03:30
|
|
|
|
|
|
|
|
@ApiProperty()
|
|
|
|
|
@ArrayMinSize(1)
|
|
|
|
|
items: CreateSalesInvoiceItemDto[]
|
|
|
|
|
|
|
|
|
|
@ApiProperty({ required: false })
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsString()
|
|
|
|
|
notes?: string
|
|
|
|
|
|
2026-04-27 22:11:05 +03:30
|
|
|
@ApiProperty({ required: false, default: false })
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsBoolean()
|
|
|
|
|
send_to_tax?: boolean
|
|
|
|
|
|
2026-02-24 12:42:10 +03:30
|
|
|
@ApiProperty({ required: true, default: CustomerType.UNKNOWN })
|
|
|
|
|
@IsEnum(CustomerType)
|
|
|
|
|
customer_type: CustomerType
|
|
|
|
|
|
2025-12-09 13:59:07 +03:30
|
|
|
@IsOptional()
|
2026-02-12 20:31:04 +03:30
|
|
|
@IsString()
|
|
|
|
|
@ApiProperty({ required: false })
|
|
|
|
|
customer_id?: string
|
2026-02-16 20:51:34 +03:30
|
|
|
|
2026-02-24 12:42:10 +03:30
|
|
|
@ApiProperty({ required: false })
|
|
|
|
|
@IsOptional()
|
|
|
|
|
@IsObject()
|
2026-03-30 13:16:36 +03:30
|
|
|
customer?: {
|
2026-04-27 10:45:39 +03:30
|
|
|
customer_individual?: Omit<CustomerIndividual, 'business_activity_id' | 'customer_id'>
|
|
|
|
|
customer_legal?: Omit<CustomerLegal, 'business_activity_id' | 'customer_id'>
|
2026-03-30 13:16:36 +03:30
|
|
|
customer_unknown?: {
|
|
|
|
|
first_name: string
|
|
|
|
|
last_name: string
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-12-09 13:59:07 +03:30
|
|
|
}
|
2026-02-12 20:31:04 +03:30
|
|
|
|
|
|
|
|
export class UpdateSalesInvoiceDto extends PartialType(CreateSalesInvoiceDto) {}
|