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