feat: add inventoryId to SalesInvoice and related models; implement createOrder functionality in POS service

This commit is contained in:
2025-12-16 10:03:49 +03:30
parent 687c89c3e1
commit d514267f58
16 changed files with 776 additions and 38 deletions
+33 -2
View File
@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common'
import { ResponseMapper } from '../common/response/response-mapper'
import { Prisma } from '../generated/prisma/client'
import { PrismaService } from '../prisma/prisma.service'
import { CreateOrderDto } from './dto/create-pos.dto'
@Injectable()
export class PosService {
@@ -109,8 +110,38 @@ export class PosService {
return ResponseMapper.list(categories)
}
async createSaleInvoice(data: any) {
const item = await this.prisma.salesInvoice.create({ data })
async createOrder(data: CreateOrderDto, inventoryId: number) {
const { customerId, ...res } = data
const preparedOrder = { ...res } as any
const lastCode = await this.prisma.salesInvoice
.findFirst({
orderBy: { code: 'desc' },
select: { code: true },
})
.then(si => si?.code || '0')
preparedOrder.code = String(Number(lastCode) + 1)
preparedOrder.totalAmount = data.items.reduce(
(acc, item) => acc + Number(item.fee),
0,
)
preparedOrder.inventory = { connect: { id: inventoryId } }
preparedOrder.customer = { connect: { id: customerId } }
if (Object.prototype.hasOwnProperty.call(preparedOrder, 'items')) {
preparedOrder.items = {
create: preparedOrder.items.map((item: any) => ({
product: { connect: { id: Number(item.productId) } },
count: item.count,
fee: item.fee,
total: item.count * item.fee,
})),
}
}
const item = await this.prisma.salesInvoice.create({ data: preparedOrder })
return ResponseMapper.create(item)
}
}