import { ApiProperty, PartialType } from '@nestjs/swagger' import { ArrayMinSize, IsDateString, IsEnum, IsNumber, IsObject, IsOptional, IsString, } 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 CreateSalesInvoiceDto { @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() payments: { terminal: number cash: number set_off: number } @ApiProperty() @ArrayMinSize(1) items: CreateSalesInvoiceItemDto[] @ApiProperty({ required: false }) @IsOptional() @IsString() notes?: string @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?: | { first_name: string last_name: string } | CustomerIndividual | CustomerLegal } export class UpdateSalesInvoiceDto extends PartialType(CreateSalesInvoiceDto) {}