Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import { Injectable, NotFoundException, BadRequestException } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import { Model } from 'mongoose'; import { InventoryBatch } from '../schemas/batch.schema'; import { InventorySerial } from '../../serials/schemas/serial.schema'; @Injectable() export class BatchSerialService { constructor( @InjectModel(InventoryBatch.name) private readonly batchModel: Model<InventoryBatch>, @InjectModel(InventorySerial.name) private readonly serialModel: Model<InventorySerial> ) {} async createBatch(tenantId: string, data: any): Promise<InventoryBatch> { const existing = await this.batchModel.findOne({ tenantId, batchNumber: data.batchNumber, itemCode: data.itemCode }).exec(); if (existing) { return existing; } return this.batchModel.create({ ...data, tenantId, status: 'active', }); } async createSerial(tenantId: string, data: any): Promise<InventorySerial> { const existing = await this.serialModel.findOne({ tenantId, serialNumber: data.serialNumber, itemCode: data.itemCode }).exec(); if (existing) { throw new BadRequestException(`Serial number ${data.serialNumber} already registered for item ${data.itemCode}`); } return this.serialModel.create({ ...data, tenantId, status: 'available', }); } async resolveFefoBatch(tenantId: string, itemCode: string): Promise<InventoryBatch[]> { // FEFO: Sort by expiry date ascending return this.batchModel.find({ tenantId, itemCode, status: 'active' }) .sort({ expiryDate: 1 }) .exec(); } async getBatches(tenantId: string, itemCode?: string): Promise<InventoryBatch[]> { const filter: any = { tenantId }; if (itemCode) filter.itemCode = itemCode; return this.batchModel.find(filter).exec(); } async getSerials(tenantId: string, itemCode?: string): Promise<InventorySerial[]> { const filter: any = { tenantId }; if (itemCode) filter.itemCode = itemCode; return this.serialModel.find(filter).exec(); } } |