@@ -35,7 +35,7 @@ export class AuthService {
|
||||
|
||||
await this.otpService.set(phone, code)
|
||||
|
||||
await this.smsService.sendotp(phone, code);
|
||||
// await this.smsService.sendotp(phone, code);
|
||||
|
||||
return { code };
|
||||
}
|
||||
|
||||
@@ -7,7 +7,9 @@ import {
|
||||
IsIn,
|
||||
IsDateString,
|
||||
IsBoolean,
|
||||
IsEnum,
|
||||
} from 'class-validator';
|
||||
import { InvoiceConfirmStatusEnum } from '../enum/invoice-confirm-status.enum';
|
||||
import { Type, Transform } from 'class-transformer';
|
||||
import { ApiPropertyOptional } from '@nestjs/swagger';
|
||||
|
||||
@@ -65,6 +67,14 @@ export class FindInvoicesDto {
|
||||
@IsBoolean()
|
||||
enableTax?: boolean;
|
||||
|
||||
@ApiPropertyOptional({
|
||||
enum: InvoiceConfirmStatusEnum,
|
||||
description: 'Filter by invoice confirmation status',
|
||||
})
|
||||
@IsOptional()
|
||||
@IsEnum(InvoiceConfirmStatusEnum)
|
||||
confirmStatus?: InvoiceConfirmStatusEnum;
|
||||
|
||||
@ApiPropertyOptional({ default: 'createdAt' })
|
||||
@IsOptional()
|
||||
@IsString()
|
||||
|
||||
@@ -15,7 +15,7 @@ import { User } from '../../user/entities/user.entity';
|
||||
import { Payment } from 'src/modules/payment/entities/payment.entity';
|
||||
import { ulid } from 'ulid';
|
||||
import { BaseEntity } from 'src/common/entities/base.entity';
|
||||
import { InvoiceStatusEnum } from '../enum/invoice-status.enum';
|
||||
import { InvoiceConfirmStatusEnum } from '../enum/invoice-confirm-status.enum';
|
||||
import { InvoiceItem } from './invoice-item.entity';
|
||||
import { Request } from 'src/modules/request/entities/request.entity';
|
||||
import { IAttachment } from 'src/modules/order/interface/order.interface';
|
||||
@@ -24,7 +24,7 @@ import { IAttachment } from 'src/modules/order/interface/order.interface';
|
||||
@Entity({ tableName: 'invoices' })
|
||||
@Index({ properties: ['user'] })
|
||||
export class Invoice extends BaseEntity {
|
||||
[OptionalProps]?: 'createdAt' | 'deletedAt' | 'invoiceNumber'
|
||||
[OptionalProps]?: 'createdAt' | 'deletedAt' | 'invoiceNumber' | 'confirmStatus'
|
||||
|
||||
@PrimaryKey({ type: 'string', columnType: 'char(26)' })
|
||||
id: string = ulid()
|
||||
@@ -80,9 +80,8 @@ export class Invoice extends BaseEntity {
|
||||
balance: number & Opt;
|
||||
|
||||
|
||||
// @Enum(() => InvoiceStatusEnum)
|
||||
// status: InvoiceStatusEnum = InvoiceStatusEnum.PENDING;
|
||||
|
||||
@Enum({ items: () => InvoiceConfirmStatusEnum, persist: false })
|
||||
confirmStatus!: InvoiceConfirmStatusEnum & Opt;
|
||||
|
||||
@Property({ type: 'boolean', default: false })
|
||||
enableTax?: boolean = false
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
export enum InvoiceConfirmStatusEnum {
|
||||
PENDING = 'pending',
|
||||
CONFIRMED = 'confirmed',
|
||||
}
|
||||
@@ -69,6 +69,14 @@ export class InvoiceService {
|
||||
if (!requestEntity) {
|
||||
throw new NotFoundException('Request not found');
|
||||
}
|
||||
|
||||
const existingInvoice = await this.em.findOne(Invoice, {
|
||||
request: { id: dto.requestId },
|
||||
});
|
||||
if (existingInvoice) {
|
||||
throw new BadRequestException('An invoice already exists for this request');
|
||||
}
|
||||
|
||||
user = requestEntity.user;
|
||||
request = requestEntity;
|
||||
} else if (dto.userId) {
|
||||
|
||||
@@ -26,7 +26,8 @@ export class InvoiceRepository extends EntityRepository<Invoice> {
|
||||
from,
|
||||
to,
|
||||
enableTax,
|
||||
requestId
|
||||
requestId,
|
||||
confirmStatus,
|
||||
} = opts;
|
||||
|
||||
const offset = (page - 1) * limit;
|
||||
@@ -45,6 +46,10 @@ export class InvoiceRepository extends EntityRepository<Invoice> {
|
||||
where.enableTax = enableTax;
|
||||
}
|
||||
|
||||
if (confirmStatus) {
|
||||
where.confirmStatus = confirmStatus;
|
||||
}
|
||||
|
||||
if (from || to) {
|
||||
where.createdAt = {};
|
||||
if (from) {
|
||||
|
||||
Reference in New Issue
Block a user