add tax to order

This commit is contained in:
2026-01-24 11:08:54 +03:30
parent e53c574931
commit 49390ce62e
5 changed files with 43 additions and 13 deletions
+5 -1
View File
@@ -1,7 +1,8 @@
import {
IsInt, IsArray, IsNumber,
IsNotEmpty,
ArrayMinSize
ArrayMinSize,
IsBoolean
} from 'class-validator';
import { ApiProperty } from '@nestjs/swagger';
import { Type } from 'class-transformer';
@@ -36,6 +37,9 @@ export class CreateInvoiceDto {
@Type(() => InvoiceItemDto)
items: InvoiceItemDto[];
@ApiProperty()
@IsBoolean()
enableTax: boolean
}
@@ -60,6 +60,9 @@ export class Order extends BaseEntity {
@Property({ type: 'decimal', precision: 10, scale: 0 })
subTotal!: number;
@Property({ type: 'decimal', precision: 10, scale: 0 })
taxAmount: number;
// @Property({ type: 'decimal', precision: 10, scale: 0, default: 0 })
// deliveryFee: number = 0;
@@ -75,6 +78,9 @@ export class Order extends BaseEntity {
@Property({ type: 'decimal', precision: 10, scale: 0 })
balance!: number;
@Property({ type: 'decimal', precision: 10, scale: 0, nullable: true })
dueDate?: number;
// get balance(): number {
// return this._balance
// }
@@ -88,6 +94,12 @@ export class Order extends BaseEntity {
@Enum(() => OrderStatusEnum)
status!: OrderStatusEnum;
@Property({ nullable: true, columnType: 'timestamptz' })
confirmedAt?: Date;
@Property({ type: 'json', nullable: true })
attachments?: string[]
@BeforeCreate()
async generateOrderNumber(args: EventArgs<Order>) {
const em = args.em;
+17 -6
View File
@@ -1,4 +1,4 @@
import { Injectable, NotFoundException, BadRequestException, Logger } from '@nestjs/common';
import { Injectable, BadRequestException, Logger } from '@nestjs/common';
import { EntityManager } from '@mikro-orm/postgresql';
import { OrderItem } from '../entities/order-item.entity';
import { OrderRepository } from '../repositories/order.repository';
@@ -53,7 +53,8 @@ export class OrderService {
total: 0,
paidAmount: 0,
balance: 0,
status: OrderStatusEnum.DRAFT
status: OrderStatusEnum.DRAFT,
taxAmount: 0
})
em.persist(order)
@@ -128,7 +129,8 @@ export class OrderService {
total,
paidAmount: 0,
balance: total,
status: OrderStatusEnum.INVOICED
status: OrderStatusEnum.INVOICED,
taxAmount: 0
})
em.persist(order)
@@ -200,7 +202,7 @@ export class OrderService {
}
async createInvoice(orderId: string, dto: CreateInvoiceDto) {
const { items } = dto
const { items, enableTax } = dto
const targetOrder = await this.findOneOrFail(orderId)
@@ -236,8 +238,17 @@ export class OrderService {
targetOrder.subTotal = subTotal
targetOrder.discount = totalDiscount
targetOrder.total = subTotal - totalDiscount
targetOrder.balance = subTotal - totalDiscount
const total = subTotal - totalDiscount
let tax = 0
if (enableTax) {
tax = 0.1 * total
}
targetOrder.taxAmount = tax
targetOrder.total = total + tax
targetOrder.balance = total + tax
// change status
targetOrder.status = OrderStatusEnum.INVOICED
+5 -2
View File
@@ -11,8 +11,8 @@ import { Order } from 'src/modules/order/entities/order.entity';
@Entity()
export class Ticket {
[OptionalProps]?: 'createdAt'
[OptionalProps]?: 'createdAt'
@PrimaryKey({ type: "bigint", autoincrement: true })
id: bigint;
@@ -31,6 +31,9 @@ export class Ticket {
@ManyToOne(() => Order)
order!: Order
@ManyToOne(() => Ticket, { nullable: true })
parent?: Ticket
@Property({ defaultRaw: 'now()', columnType: 'timestamptz' })
createdAt: Date = new Date();
@@ -33,8 +33,8 @@ export class UploaderController {
return this.uploaderService.uploadMultiple(files);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
// @UseGuards(AdminAuthGuard)
// @ApiBearerAuth()
@ApiOperation({ summary: 'Upload a file (admin)' })
@ApiConsumes('multipart/form-data')
@UseInterceptors(FileInterceptor('file'))
@@ -44,8 +44,8 @@ export class UploaderController {
return this.uploaderService.uploadFile(file);
}
@UseGuards(AdminAuthGuard)
@ApiBearerAuth()
// @UseGuards(AdminAuthGuard)
// @ApiBearerAuth()
@ApiOperation({ summary: 'Uploads multiple files' })
@ApiConsumes('multipart/form-data')
@UseInterceptors(FilesInterceptor('files'))