@things-factory/worksheet-base 6.0.92 → 6.0.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -345,7 +345,7 @@ class PutawayWorksheetController extends vas_worksheet_controller_1.VasWorksheet
345
345
  where: {
346
346
  domain: { id: this.domain.id },
347
347
  type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS,
348
- inventory
348
+ inventory: { id: inventory.id }
349
349
  }
350
350
  });
351
351
  if (releaseTargetInventory)
@@ -1 +1 @@
1
- {"version":3,"file":"putaway-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/inbound/putaway-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Equal, In, Not } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport {\n ArrivalNotice,\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n OrderInventory,\n OrderNoGenerator\n} from '@things-factory/sales-base'\nimport {\n Inventory,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n Location,\n LOCATION_TYPE,\n Pallet,\n Warehouse\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { switchLocationStatus } from '../../utils'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class PutawayWorksheetController extends VasWorksheetController {\n async generatePutawayWorksheet(arrivalNoticeNo: string, inventories: Inventory[]): Promise<Worksheet> {\n let arrivalNotice: ArrivalNotice = await this.findRefOrder(\n ArrivalNotice,\n { domain: { id: this.domain.id }, name: arrivalNoticeNo },\n ['bizplace']\n )\n\n const bizplace: Bizplace = arrivalNotice.bizplace\n const unloadingWorksheet: Worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.UNLOADING, [\n 'bufferLocation'\n ])\n const bufferLocation: Location = unloadingWorksheet.bufferLocation\n\n // Check whether putaway worksheet is exists or not\n let worksheet: Worksheet\n try {\n worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.PUTAWAY)\n } catch (e) {}\n\n let oiStatus: string = ORDER_PRODUCT_STATUS.UNLOADED // Default status of order inventories is UNLOADED\n let wsdStatus: string = WORKSHEET_STATUS.DEACTIVATED // Default status of worksheet is DEACTIVATED\n if (!worksheet) {\n // If it's not exists create new putaway worksheet\n worksheet = await this.createWorksheet(arrivalNotice, WORKSHEET_TYPE.PUTAWAY, { bufferLocation })\n } else {\n // If there is putaway worksheet. It means unloading is completed partially.\n // So status of newly created worksheet details and order inventories should be changed to\n // Executing situation.\n oiStatus = ORDER_PRODUCT_STATUS.PUTTING_AWAY // Default status = PUTTING_AWAY\n wsdStatus = WORKSHEET_STATUS.EXECUTING // Default status = EXECUTING\n }\n\n if (inventories.some((inv: Inventory) => !(inv instanceof Inventory))) {\n inventories = await this.trxMgr.getRepository(Inventory).findByIds(inventories.map((inv: Inventory) => inv.id))\n }\n\n let worksheetDetails: WorksheetDetail[] = []\n for (let inventory of inventories) {\n inventory.status = INVENTORY_STATUS.PUTTING_AWAY\n inventory.updater = this.user\n inventory = await this.trxMgr.getRepository(Inventory).save(inventory)\n\n // check if there's existing orderInventory\n let targetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({\n where: { inventory: { id: inventory.id } }\n })\n\n // if no existing orderInventory, create new one\n if (!targetInventory) {\n targetInventory = new OrderInventory()\n targetInventory.domain = this.domain\n targetInventory.bizplace = bizplace\n targetInventory.name = OrderNoGenerator.orderInventory()\n targetInventory.status = oiStatus\n targetInventory.type = ORDER_TYPES.ARRIVAL_NOTICE\n targetInventory.arrivalNotice = arrivalNotice\n targetInventory.inventory = inventory\n targetInventory.creator = this.user\n targetInventory.updater = this.user\n targetInventory = await this.trxMgr.getRepository(OrderInventory).save(targetInventory)\n }\n\n const newWorksheetDetails: WorksheetDetail[] = await this.createWorksheetDetails(\n worksheet,\n WORKSHEET_TYPE.PUTAWAY,\n [targetInventory],\n { status: wsdStatus, fromLocation: bufferLocation }\n )\n\n worksheetDetails.push(...newWorksheetDetails)\n }\n\n return {\n ...worksheet,\n worksheetDetails\n }\n }\n\n async activatePutaway(worksheetNo: string, putawayWorksheetDetails: Partial<WorksheetDetail>[]): Promise<Worksheet> {\n let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.PUTAWAY, [\n 'arrivalNotice',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n let arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const nonFinishedVasCnt: number = await this.trxMgr.getRepository(Worksheet).count({\n where: {\n domain: { id: this.domain.id },\n arrivalNotice: { id: arrivalNotice.id },\n type: WORKSHEET_TYPE.VAS,\n status: Not(Equal(WORKSHEET_STATUS.DONE))\n }\n })\n if (nonFinishedVasCnt) return\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_PRODUCT_STATUS.PUTTING_AWAY\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n\n arrivalNotice.status = ORDER_STATUS.PUTTING_AWAY\n arrivalNotice.updater = this.user\n await this.updateRefOrder(arrivalNotice)\n return this.activateWorksheet(worksheet, worksheetDetails, putawayWorksheetDetails)\n }\n\n async completePutaway(arrivalNoticeNo: string): Promise<Worksheet> {\n // Because of partial unloading current status of arrivalNotice can be PUTTING_AWAY or PROCESSING\n // PUTTING_AWAY means unloading is completely finished.\n // PROCESSING means some products are still being unloaded.\n let arrivalNotice: ArrivalNotice = await this.findRefOrder(ArrivalNotice, {\n name: arrivalNoticeNo,\n status: In([ORDER_STATUS.PUTTING_AWAY, ORDER_STATUS.PROCESSING])\n })\n\n // Check whether unloading is done or not.\n const unloadingWorksheetCnt: number = await this.trxMgr.getRepository(Worksheet).count({\n where: {\n domain: { id: this.domain.id },\n arrivalNotice: { id: arrivalNotice.id },\n type: WORKSHEET_TYPE.UNLOADING,\n status: WORKSHEET_STATUS.EXECUTING\n }\n })\n if (unloadingWorksheetCnt) throw new Error(`Unloading is not completed yet`)\n\n const putawayWorksheet: Worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.PUTAWAY, [\n 'bufferLocation'\n ])\n await switchLocationStatus(this.domain, putawayWorksheet.bufferLocation, this.user, this.trxMgr)\n return await this.completeWorksheet(putawayWorksheet, ORDER_STATUS.DONE)\n }\n\n async putaway(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n locationName: string\n ): Promise<void> {\n const reusablePallet: Pallet = await this.trxMgr.getRepository(Pallet).findOne({\n where: { domain: { id: this.domain.id }, name: palletId }\n })\n\n if (reusablePallet) {\n await this.putawayPallets(worksheetDetailName[0], reusablePallet, locationName)\n } else if (cartonId) {\n await this.putawayCarton(worksheetDetailName, cartonId, locationName)\n } else {\n await this.putawayPallet(worksheetDetailName[0], palletId, locationName)\n }\n }\n\n async putawayPallets(worksheetDetailName: string, reusablePallet: Pallet, locationName: string): Promise<void> {\n const worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PUTAWAY,\n [\n 'worksheet',\n 'worksheet.arrivalNotice',\n 'worksheet.worksheetDetails',\n 'worksheet.worksheetDetails.targetInventory',\n 'worksheet.worksheetDetails.targetInventory.inventory'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const inventories: Inventory[] = await this.trxMgr.getRepository(Inventory).find({\n where: {\n domain: { id: this.domain.id },\n reusablePallet: { id: reusablePallet.id },\n refOrderId: arrivalNotice.id,\n status: In([INVENTORY_STATUS.PUTTING_AWAY, INVENTORY_STATUS.UNLOADED])\n }\n })\n\n for (let inventory of inventories) {\n const worksheetDetail: WorksheetDetail = worksheetDetails.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.name === inventory.name\n )\n\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n inventory = targetInventory.inventory\n\n let location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: locationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.QUARANTINE,\n LOCATION_TYPE.RESERVE\n ])\n },\n relations: ['warehouse']\n })\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = location.zone\n\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.PUTAWAY)\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async putawayCarton(worksheetDetailName: [string], cartonId: string, locationName: string): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.PUTAWAY,\n ['worksheet', 'worksheet.arrivalNotice', 'targetInventory', 'targetInventory.inventory']\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: locationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE,\n LOCATION_TYPE.RESERVE\n ])\n },\n relations: ['warehouse']\n })\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.PUTAWAY)\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async putawayPallet(worksheetDetailName: string, palletId: string, locationName: string): Promise<void> {\n const worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PUTAWAY,\n ['worksheet', 'worksheet.arrivalNotice', 'targetInventory', 'targetInventory.inventory']\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n if (inventory.palletId !== palletId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('lot ID', palletId, inventory.palletId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: locationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.QUARANTINE,\n LOCATION_TYPE.RESERVE\n ])\n },\n relations: ['warehouse']\n })\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.PUTAWAY)\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async undoPutaway(worksheetDetailName: [string], palletId: string, cartonId: string): Promise<void> {\n if (cartonId) {\n await this.undoCarton(worksheetDetailName, cartonId)\n } else {\n await this.undoPallet(worksheetDetailName[0], palletId)\n }\n }\n\n async undoPallet(worksheetDetailName: string, palletId: string): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, [\n 'worksheet',\n 'worksheet.arrivalNotice',\n 'targetInventory',\n 'targetInventory.inventory',\n 'fromLocation'\n ])\n this.checkRecordValidity(worksheetDetail, { status: WORKSHEET_STATUS.DONE })\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({\n where: { domain: { id: this.domain.id }, palletId }\n })\n await this.checkReleaseTarget(inventory)\n\n const bufferLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetDetail.fromLocation.name }\n })\n inventory.location = bufferLocation\n inventory.status = INVENTORY_STATUS.UNLOADED\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.UNDO_PUTAWAY)\n\n targetInventory.status = ORDER_PRODUCT_STATUS.PUTTING_AWAY\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.EXECUTING\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async undoCarton(worksheetDetailName: [string], cartonId: string): Promise<void> {\n let worksheetDetails: WorksheetDetail[] = await this.findWorksheetDetailByNames(worksheetDetailName, [\n 'worksheet',\n 'worksheet.arrivalNotice',\n 'targetInventory',\n 'targetInventory.inventory',\n 'fromLocation'\n ])\n\n for (var i = 0; i < worksheetDetails?.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n this.checkRecordValidity(worksheetDetail, { status: WORKSHEET_STATUS.DONE })\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({\n where: { domain: { id: this.domain.id }, cartonId, palletId: targetInventory.inventory.palletId }\n })\n await this.checkReleaseTarget(inventory)\n\n const bufferLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetDetail.fromLocation.name }\n })\n inventory.location = bufferLocation\n inventory.status = INVENTORY_STATUS.UNLOADED\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.UNDO_PUTAWAY)\n\n targetInventory.status = ORDER_PRODUCT_STATUS.PUTTING_AWAY\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.EXECUTING\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n private async checkReleaseTarget(inventory: Inventory): Promise<void> {\n const releaseTargetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({\n where: {\n domain: { id: this.domain.id },\n type: ORDER_TYPES.RELEASE_OF_GOODS,\n inventory\n }\n })\n\n if (releaseTargetInventory)\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('undo putaway', 'this pallet ID has been selected for releasing')\n )\n }\n}\n"]}
1
+ {"version":3,"file":"putaway-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/inbound/putaway-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Equal, In, Not } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport {\n ArrivalNotice,\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n OrderInventory,\n OrderNoGenerator\n} from '@things-factory/sales-base'\nimport {\n Inventory,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n Location,\n LOCATION_TYPE,\n Pallet,\n Warehouse\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { switchLocationStatus } from '../../utils'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class PutawayWorksheetController extends VasWorksheetController {\n async generatePutawayWorksheet(arrivalNoticeNo: string, inventories: Inventory[]): Promise<Worksheet> {\n let arrivalNotice: ArrivalNotice = await this.findRefOrder(\n ArrivalNotice,\n { domain: { id: this.domain.id }, name: arrivalNoticeNo },\n ['bizplace']\n )\n\n const bizplace: Bizplace = arrivalNotice.bizplace\n const unloadingWorksheet: Worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.UNLOADING, [\n 'bufferLocation'\n ])\n const bufferLocation: Location = unloadingWorksheet.bufferLocation\n\n // Check whether putaway worksheet is exists or not\n let worksheet: Worksheet\n try {\n worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.PUTAWAY)\n } catch (e) {}\n\n let oiStatus: string = ORDER_PRODUCT_STATUS.UNLOADED // Default status of order inventories is UNLOADED\n let wsdStatus: string = WORKSHEET_STATUS.DEACTIVATED // Default status of worksheet is DEACTIVATED\n if (!worksheet) {\n // If it's not exists create new putaway worksheet\n worksheet = await this.createWorksheet(arrivalNotice, WORKSHEET_TYPE.PUTAWAY, { bufferLocation })\n } else {\n // If there is putaway worksheet. It means unloading is completed partially.\n // So status of newly created worksheet details and order inventories should be changed to\n // Executing situation.\n oiStatus = ORDER_PRODUCT_STATUS.PUTTING_AWAY // Default status = PUTTING_AWAY\n wsdStatus = WORKSHEET_STATUS.EXECUTING // Default status = EXECUTING\n }\n\n if (inventories.some((inv: Inventory) => !(inv instanceof Inventory))) {\n inventories = await this.trxMgr.getRepository(Inventory).findByIds(inventories.map((inv: Inventory) => inv.id))\n }\n\n let worksheetDetails: WorksheetDetail[] = []\n for (let inventory of inventories) {\n inventory.status = INVENTORY_STATUS.PUTTING_AWAY\n inventory.updater = this.user\n inventory = await this.trxMgr.getRepository(Inventory).save(inventory)\n\n // check if there's existing orderInventory\n let targetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({\n where: { inventory: { id: inventory.id } }\n })\n\n // if no existing orderInventory, create new one\n if (!targetInventory) {\n targetInventory = new OrderInventory()\n targetInventory.domain = this.domain\n targetInventory.bizplace = bizplace\n targetInventory.name = OrderNoGenerator.orderInventory()\n targetInventory.status = oiStatus\n targetInventory.type = ORDER_TYPES.ARRIVAL_NOTICE\n targetInventory.arrivalNotice = arrivalNotice\n targetInventory.inventory = inventory\n targetInventory.creator = this.user\n targetInventory.updater = this.user\n targetInventory = await this.trxMgr.getRepository(OrderInventory).save(targetInventory)\n }\n\n const newWorksheetDetails: WorksheetDetail[] = await this.createWorksheetDetails(\n worksheet,\n WORKSHEET_TYPE.PUTAWAY,\n [targetInventory],\n { status: wsdStatus, fromLocation: bufferLocation }\n )\n\n worksheetDetails.push(...newWorksheetDetails)\n }\n\n return {\n ...worksheet,\n worksheetDetails\n }\n }\n\n async activatePutaway(worksheetNo: string, putawayWorksheetDetails: Partial<WorksheetDetail>[]): Promise<Worksheet> {\n let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.PUTAWAY, [\n 'arrivalNotice',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n let arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const nonFinishedVasCnt: number = await this.trxMgr.getRepository(Worksheet).count({\n where: {\n domain: { id: this.domain.id },\n arrivalNotice: { id: arrivalNotice.id },\n type: WORKSHEET_TYPE.VAS,\n status: Not(Equal(WORKSHEET_STATUS.DONE))\n }\n })\n if (nonFinishedVasCnt) return\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_PRODUCT_STATUS.PUTTING_AWAY\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n\n arrivalNotice.status = ORDER_STATUS.PUTTING_AWAY\n arrivalNotice.updater = this.user\n await this.updateRefOrder(arrivalNotice)\n return this.activateWorksheet(worksheet, worksheetDetails, putawayWorksheetDetails)\n }\n\n async completePutaway(arrivalNoticeNo: string): Promise<Worksheet> {\n // Because of partial unloading current status of arrivalNotice can be PUTTING_AWAY or PROCESSING\n // PUTTING_AWAY means unloading is completely finished.\n // PROCESSING means some products are still being unloaded.\n let arrivalNotice: ArrivalNotice = await this.findRefOrder(ArrivalNotice, {\n name: arrivalNoticeNo,\n status: In([ORDER_STATUS.PUTTING_AWAY, ORDER_STATUS.PROCESSING])\n })\n\n // Check whether unloading is done or not.\n const unloadingWorksheetCnt: number = await this.trxMgr.getRepository(Worksheet).count({\n where: {\n domain: { id: this.domain.id },\n arrivalNotice: { id: arrivalNotice.id },\n type: WORKSHEET_TYPE.UNLOADING,\n status: WORKSHEET_STATUS.EXECUTING\n }\n })\n if (unloadingWorksheetCnt) throw new Error(`Unloading is not completed yet`)\n\n const putawayWorksheet: Worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.PUTAWAY, [\n 'bufferLocation'\n ])\n await switchLocationStatus(this.domain, putawayWorksheet.bufferLocation, this.user, this.trxMgr)\n return await this.completeWorksheet(putawayWorksheet, ORDER_STATUS.DONE)\n }\n\n async putaway(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n locationName: string\n ): Promise<void> {\n const reusablePallet: Pallet = await this.trxMgr.getRepository(Pallet).findOne({\n where: { domain: { id: this.domain.id }, name: palletId }\n })\n\n if (reusablePallet) {\n await this.putawayPallets(worksheetDetailName[0], reusablePallet, locationName)\n } else if (cartonId) {\n await this.putawayCarton(worksheetDetailName, cartonId, locationName)\n } else {\n await this.putawayPallet(worksheetDetailName[0], palletId, locationName)\n }\n }\n\n async putawayPallets(worksheetDetailName: string, reusablePallet: Pallet, locationName: string): Promise<void> {\n const worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PUTAWAY,\n [\n 'worksheet',\n 'worksheet.arrivalNotice',\n 'worksheet.worksheetDetails',\n 'worksheet.worksheetDetails.targetInventory',\n 'worksheet.worksheetDetails.targetInventory.inventory'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const inventories: Inventory[] = await this.trxMgr.getRepository(Inventory).find({\n where: {\n domain: { id: this.domain.id },\n reusablePallet: { id: reusablePallet.id },\n refOrderId: arrivalNotice.id,\n status: In([INVENTORY_STATUS.PUTTING_AWAY, INVENTORY_STATUS.UNLOADED])\n }\n })\n\n for (let inventory of inventories) {\n const worksheetDetail: WorksheetDetail = worksheetDetails.find(\n (wsd: WorksheetDetail) => wsd.targetInventory.inventory.name === inventory.name\n )\n\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n inventory = targetInventory.inventory\n\n let location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: locationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.QUARANTINE,\n LOCATION_TYPE.RESERVE\n ])\n },\n relations: ['warehouse']\n })\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = location.zone\n\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.PUTAWAY)\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async putawayCarton(worksheetDetailName: [string], cartonId: string, locationName: string): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.PUTAWAY,\n ['worksheet', 'worksheet.arrivalNotice', 'targetInventory', 'targetInventory.inventory']\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: locationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE,\n LOCATION_TYPE.RESERVE\n ])\n },\n relations: ['warehouse']\n })\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.PUTAWAY)\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async putawayPallet(worksheetDetailName: string, palletId: string, locationName: string): Promise<void> {\n const worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PUTAWAY,\n ['worksheet', 'worksheet.arrivalNotice', 'targetInventory', 'targetInventory.inventory']\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n\n if (inventory.palletId !== palletId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('lot ID', palletId, inventory.palletId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: locationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.QUARANTINE,\n LOCATION_TYPE.RESERVE\n ])\n },\n relations: ['warehouse']\n })\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.PUTAWAY)\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async undoPutaway(worksheetDetailName: [string], palletId: string, cartonId: string): Promise<void> {\n if (cartonId) {\n await this.undoCarton(worksheetDetailName, cartonId)\n } else {\n await this.undoPallet(worksheetDetailName[0], palletId)\n }\n }\n\n async undoPallet(worksheetDetailName: string, palletId: string): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findWorksheetDetailByName(worksheetDetailName, [\n 'worksheet',\n 'worksheet.arrivalNotice',\n 'targetInventory',\n 'targetInventory.inventory',\n 'fromLocation'\n ])\n this.checkRecordValidity(worksheetDetail, { status: WORKSHEET_STATUS.DONE })\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({\n where: { domain: { id: this.domain.id }, palletId }\n })\n await this.checkReleaseTarget(inventory)\n\n const bufferLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetDetail.fromLocation.name }\n })\n inventory.location = bufferLocation\n inventory.status = INVENTORY_STATUS.UNLOADED\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.UNDO_PUTAWAY)\n\n targetInventory.status = ORDER_PRODUCT_STATUS.PUTTING_AWAY\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.EXECUTING\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async undoCarton(worksheetDetailName: [string], cartonId: string): Promise<void> {\n let worksheetDetails: WorksheetDetail[] = await this.findWorksheetDetailByNames(worksheetDetailName, [\n 'worksheet',\n 'worksheet.arrivalNotice',\n 'targetInventory',\n 'targetInventory.inventory',\n 'fromLocation'\n ])\n\n for (var i = 0; i < worksheetDetails?.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n this.checkRecordValidity(worksheetDetail, { status: WORKSHEET_STATUS.DONE })\n const worksheet: Worksheet = worksheetDetail.worksheet\n const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice\n const targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({\n where: { domain: { id: this.domain.id }, cartonId, palletId: targetInventory.inventory.palletId }\n })\n await this.checkReleaseTarget(inventory)\n\n const bufferLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: { id: this.domain.id }, name: worksheetDetail.fromLocation.name }\n })\n inventory.location = bufferLocation\n inventory.status = INVENTORY_STATUS.UNLOADED\n await this.transactionInventory(inventory, arrivalNotice, 0, 0, INVENTORY_TRANSACTION_TYPE.UNDO_PUTAWAY)\n\n targetInventory.status = ORDER_PRODUCT_STATUS.PUTTING_AWAY\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.EXECUTING\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n private async checkReleaseTarget(inventory: Inventory): Promise<void> {\n const releaseTargetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({\n where: {\n domain: { id: this.domain.id },\n type: ORDER_TYPES.RELEASE_OF_GOODS,\n inventory: { id: inventory.id }\n }\n })\n\n if (releaseTargetInventory)\n throw new Error(\n this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('undo putaway', 'this pallet ID has been selected for releasing')\n )\n }\n}\n"]}
@@ -232,7 +232,7 @@ class LoadingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
232
232
  }
233
233
  async completeLoading(releaseGoodNo) {
234
234
  const releaseGood = await this.findRefOrder(sales_base_1.ReleaseGood, {
235
- domain: this.domain,
235
+ domain: { id: this.domain.id },
236
236
  name: releaseGoodNo,
237
237
  status: sales_base_1.ORDER_STATUS.LOADING
238
238
  });
@@ -1 +1 @@
1
- {"version":3,"file":"loading-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/loading-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Equal, Not, In } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport {\n DeliveryOrder,\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n OrderInventory,\n OrderNoGenerator,\n ReleaseGood,\n OrderToteItem,\n OrderTote\n} from '@things-factory/sales-base'\nimport { Inventory, INVENTORY_TRANSACTION_TYPE, Tote, TOTE_STATUS } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { generateInventoryHistory } from '../../utils'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class LoadingWorksheetController extends VasWorksheetController {\n async generateLoadingWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.LOADING,\n releaseGood,\n targetInventories,\n ORDER_STATUS.LOADING,\n ORDER_INVENTORY_STATUS.LOADING\n )\n }\n\n async updateLoadingWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[],\n worksheet: Worksheet\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.updateWorksheet(\n WORKSHEET_TYPE.LOADING,\n releaseGood,\n worksheet,\n targetInventories,\n ORDER_STATUS.LOADING,\n ORDER_INVENTORY_STATUS.LOADING\n )\n }\n\n async activateLoading(worksheetNo: string, loadingWorksheetDetails: Partial<WorksheetDetail>[]): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.LOADING, [\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n let releaseGood: ReleaseGood = worksheet.releaseGood\n const nonFinishedVasCnt: number = await this.trxMgr.getRepository(Worksheet).count({\n where: {\n domain: { id: this.domain.id },\n releaseGood: { id: releaseGood.id },\n type: WORKSHEET_TYPE.VAS,\n status: Not(Equal(WORKSHEET_STATUS.DONE))\n }\n })\n if (nonFinishedVasCnt) return\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)\n\n targetInventories = targetInventories\n .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.PICKED)\n .map((targetInventory: OrderInventory) => {\n targetInventory.status = ORDER_INVENTORY_STATUS.LOADING\n targetInventory.updater = this.user\n return targetInventory\n })\n\n releaseGood.status = ORDER_STATUS.LOADING\n releaseGood.updater = this.user\n await this.updateRefOrder(releaseGood)\n\n if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, loadingWorksheetDetails)\n }\n\n async loading(\n releaseGoodNo: string,\n worksheetDetails: Partial<WorksheetDetail & { loadedQty: number } & { toteName: string }>[]\n ): Promise<any> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n const bizplace: Bizplace = releaseGood.bizplace\n\n for (let i = 0; i < worksheetDetails.length; i++) {\n const loadedQty: number = worksheetDetails[i].loadedQty\n const toteName: string = worksheetDetails[i].toteName\n let worksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetails[i].name,\n WORKSHEET_TYPE.LOADING,\n ['worksheet', 'targetInventory', 'targetInventory.inventory', 'targetInventory.product']\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n const pickedQty: number = targetInventory.releaseQty\n let inventory: Inventory = targetInventory.inventory\n\n targetInventory.loadedAt = new Date()\n targetInventory.loadedByUser = this.user\n\n let loadedBy: string[] = targetInventory.loadedBy ? targetInventory.loadedBy.split(',') : []\n if (!loadedBy.find(x => x == this.user.name)) {\n loadedBy.push(this.user.name)\n targetInventory.loadedBy = loadedBy.join(',')\n }\n\n if (loadedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('load', `loaded quantity can't exceed picked qty`))\n } else if (loadedQty == pickedQty) {\n // Change status of current worksheet detail\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n // Change status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.LOADED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n } else if (loadedQty < pickedQty) {\n const remainQty: number = pickedQty - loadedQty\n const loadedUomValue: number = parseFloat(\n ((targetInventory.releaseUomValue / pickedQty) * loadedQty).toFixed(2)\n )\n const remainUomValue: number = parseFloat((targetInventory.releaseUomValue - loadedUomValue).toFixed(2))\n\n targetInventory.status = ORDER_INVENTORY_STATUS.LOADED\n targetInventory.releaseQty = loadedQty\n targetInventory.releaseUomValue = loadedUomValue\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n worksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n // Create order inventory for remaining item\n let newTargetInventory: OrderInventory = new OrderInventory()\n newTargetInventory.domain = this.domain\n newTargetInventory.bizplace = bizplace\n newTargetInventory.name = OrderNoGenerator.orderInventory()\n newTargetInventory.releaseGood = releaseGood\n newTargetInventory.inventory = inventory\n newTargetInventory.type = ORDER_TYPES.RELEASE_OF_GOODS\n newTargetInventory.status = ORDER_INVENTORY_STATUS.LOADING\n newTargetInventory.releaseQty = remainQty\n newTargetInventory.releaseUomValue = remainUomValue\n newTargetInventory.product = targetInventory.product\n newTargetInventory.packingType = targetInventory.packingType\n newTargetInventory.batchId = targetInventory.batchId\n newTargetInventory.creator = this.user\n newTargetInventory.updater = this.user\n newTargetInventory = await this.trxMgr.getRepository(OrderInventory).save(newTargetInventory)\n\n if (toteName) {\n let foundOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { name: toteName, releaseGood: { id: releaseGood.id } } })\n\n let foundOrderToteItems = await this.trxMgr\n .getRepository(OrderToteItem)\n .find({ where: { orderInventory: { id: targetInventory.id } } })\n\n let foundOrderToteItemIds = foundOrderToteItems.map((itm: OrderToteItem) => itm.id)\n\n await this.trxMgr\n .getRepository(OrderToteItem)\n .update({ id: In(foundOrderToteItemIds) }, { orderInventory: newTargetInventory })\n\n let foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({\n where: { orderInventory: newTargetInventory.id, orderTote: { id: foundOrderTote.id }, qty: loadedQty }\n })\n\n await this.trxMgr\n .getRepository(OrderToteItem)\n .update({ id: foundOrderToteItem.id }, { orderInventory: targetInventory.id })\n }\n\n let newWorksheetDetail: any = await this.createWorksheetDetails(\n worksheet,\n WORKSHEET_TYPE.LOADING,\n [newTargetInventory],\n {\n status: WORKSHEET_STATUS.EXECUTING\n }\n )\n\n let worksheetDetailName = worksheetDetails[i].name\n worksheetDetails = worksheetDetails.map(record => {\n if (record.name == worksheetDetailName && !record?.targetInventory) {\n return {\n ...record,\n name: newWorksheetDetail[0].name\n }\n } else {\n return record\n }\n })\n\n worksheetDetails[i].name = worksheetDetailName\n }\n\n worksheetDetails[i].targetInventory = targetInventory\n\n await generateInventoryHistory(\n inventory,\n releaseGood,\n INVENTORY_TRANSACTION_TYPE.LOADING,\n 0,\n 0,\n this.user,\n this.trxMgr\n )\n }\n\n return worksheetDetails\n }\n\n async undoLoading(deliveryOrder: Partial<DeliveryOrder>, palletIds: string[]): Promise<void> {\n deliveryOrder = await this.findRefOrder(DeliveryOrder, { id: deliveryOrder.id, domain: this.domain }, [\n 'releaseGood'\n ])\n\n const releaseGood: ReleaseGood = deliveryOrder.releaseGood\n\n const targetInventories: OrderInventory[] = await this.trxMgr.getRepository(OrderInventory).find({\n where: {\n domain: { id: this.domain.id },\n deliveryOrder: { id: deliveryOrder.id },\n status: ORDER_INVENTORY_STATUS.LOADED\n },\n relations: ['inventory']\n })\n // Filter out inventories which is included palletIds list.\n let undoTargetOrderInventories: OrderInventory[] = targetInventories.filter(\n (targetInventory: OrderInventory) =>\n targetInventory.status === ORDER_INVENTORY_STATUS.LOADED &&\n palletIds.includes(targetInventory.inventory.palletId)\n )\n\n // If there was remained items => Merge into previous order inventories\n for (let undoTargetOrderInventory of undoTargetOrderInventories) {\n undoTargetOrderInventory.deliveryOrder = null\n undoTargetOrderInventory.updater = this.user\n\n undoTargetOrderInventory.loadedAt = null\n undoTargetOrderInventory.loadedByUser = null\n undoTargetOrderInventory.loadedBy = null\n\n let prevTargetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({\n where: {\n domain: { id: this.domain.id },\n id: Not(Equal(undoTargetOrderInventory.id)),\n releaseGood: { id: releaseGood.id },\n status: ORDER_INVENTORY_STATUS.LOADING,\n inventory: { id: undoTargetOrderInventory.inventory.id }\n }\n })\n\n let undoOrderToteItem: OrderToteItem = await this.trxMgr\n .getRepository(OrderToteItem)\n .findOne({ where: { orderInventory: { id: undoTargetOrderInventory.id } } })\n\n if (prevTargetInventory) {\n // If there's prev target inventory\n // Merge qty and uomValue into prev target inventory\n prevTargetInventory.releaseQty += undoTargetOrderInventory.releaseQty\n prevTargetInventory.releaseUomValue += undoTargetOrderInventory.releaseUomValue\n prevTargetInventory.updater = this.user\n await this.updateOrderTargets([prevTargetInventory])\n\n //Update order tote item if any\n if (undoOrderToteItem) {\n undoOrderToteItem.orderInventoryId = prevTargetInventory.id\n undoOrderToteItem.orderInventory = prevTargetInventory\n await this.trxMgr.getRepository(OrderToteItem).save(undoOrderToteItem)\n }\n\n // Terminate undo target order inventory\n undoTargetOrderInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n await this.updateOrderTargets([undoTargetOrderInventory])\n\n // Delete worksheet detail\n await this.trxMgr.getRepository(WorksheetDetail).delete({\n targetInventory: undoTargetOrderInventory,\n type: WORKSHEET_TYPE.LOADING,\n status: WORKSHEET_STATUS.DONE\n })\n } else {\n // Update undo target inventory\n undoTargetOrderInventory.status = ORDER_INVENTORY_STATUS.LOADING\n await this.updateOrderTargets([undoTargetOrderInventory])\n\n // Update worksheet detail to be able to load\n let undoTargetWorksheetDetail: WorksheetDetail = await this.findWorksheetDetail({\n targetInventory: undoTargetOrderInventory,\n type: WORKSHEET_TYPE.LOADING,\n status: WORKSHEET_STATUS.DONE\n })\n undoTargetWorksheetDetail.status = WORKSHEET_STATUS.EXECUTING\n undoTargetWorksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(undoTargetWorksheetDetail)\n }\n\n // Create inventory history\n let inventory: Inventory = undoTargetOrderInventory.inventory\n await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.UNDO_LOADING, 0, 0, this.user)\n }\n\n // Compare total inventories length and undo target inventories length\n // to check whether there's more order inventories\n // If thres' no more remove delivery order\n if (targetInventories.length === undoTargetOrderInventories.length) {\n await this.trxMgr.getRepository(DeliveryOrder).delete(deliveryOrder.id)\n }\n }\n\n async completeLoading(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.LOADING\n })\n\n const orderToteIds = await (\n await this.trxMgr\n .getRepository(OrderTote)\n .find({ where: { releaseGood: { id: releaseGood.id } }, relations: ['tote'] })\n ).map((record: OrderTote) => record?.toteId)\n\n await this.trxMgr.getRepository(Tote).update({ id: In(orderToteIds) }, { status: TOTE_STATUS.DISPATCHED })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.LOADING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
1
+ {"version":3,"file":"loading-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/loading-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Equal, Not, In } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport {\n DeliveryOrder,\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n OrderInventory,\n OrderNoGenerator,\n ReleaseGood,\n OrderToteItem,\n OrderTote\n} from '@things-factory/sales-base'\nimport { Inventory, INVENTORY_TRANSACTION_TYPE, Tote, TOTE_STATUS } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { generateInventoryHistory } from '../../utils'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class LoadingWorksheetController extends VasWorksheetController {\n async generateLoadingWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.LOADING,\n releaseGood,\n targetInventories,\n ORDER_STATUS.LOADING,\n ORDER_INVENTORY_STATUS.LOADING\n )\n }\n\n async updateLoadingWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[],\n worksheet: Worksheet\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.updateWorksheet(\n WORKSHEET_TYPE.LOADING,\n releaseGood,\n worksheet,\n targetInventories,\n ORDER_STATUS.LOADING,\n ORDER_INVENTORY_STATUS.LOADING\n )\n }\n\n async activateLoading(worksheetNo: string, loadingWorksheetDetails: Partial<WorksheetDetail>[]): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.LOADING, [\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n let releaseGood: ReleaseGood = worksheet.releaseGood\n const nonFinishedVasCnt: number = await this.trxMgr.getRepository(Worksheet).count({\n where: {\n domain: { id: this.domain.id },\n releaseGood: { id: releaseGood.id },\n type: WORKSHEET_TYPE.VAS,\n status: Not(Equal(WORKSHEET_STATUS.DONE))\n }\n })\n if (nonFinishedVasCnt) return\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n let targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => wsd.targetInventory)\n\n targetInventories = targetInventories\n .filter(targetInventory => targetInventory.status == ORDER_INVENTORY_STATUS.PICKED)\n .map((targetInventory: OrderInventory) => {\n targetInventory.status = ORDER_INVENTORY_STATUS.LOADING\n targetInventory.updater = this.user\n return targetInventory\n })\n\n releaseGood.status = ORDER_STATUS.LOADING\n releaseGood.updater = this.user\n await this.updateRefOrder(releaseGood)\n\n if (targetInventories.length > 0) await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, loadingWorksheetDetails)\n }\n\n async loading(\n releaseGoodNo: string,\n worksheetDetails: Partial<WorksheetDetail & { loadedQty: number } & { toteName: string }>[]\n ): Promise<any> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n const bizplace: Bizplace = releaseGood.bizplace\n\n for (let i = 0; i < worksheetDetails.length; i++) {\n const loadedQty: number = worksheetDetails[i].loadedQty\n const toteName: string = worksheetDetails[i].toteName\n let worksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetails[i].name,\n WORKSHEET_TYPE.LOADING,\n ['worksheet', 'targetInventory', 'targetInventory.inventory', 'targetInventory.product']\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n const pickedQty: number = targetInventory.releaseQty\n let inventory: Inventory = targetInventory.inventory\n\n targetInventory.loadedAt = new Date()\n targetInventory.loadedByUser = this.user\n\n let loadedBy: string[] = targetInventory.loadedBy ? targetInventory.loadedBy.split(',') : []\n if (!loadedBy.find(x => x == this.user.name)) {\n loadedBy.push(this.user.name)\n targetInventory.loadedBy = loadedBy.join(',')\n }\n\n if (loadedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('load', `loaded quantity can't exceed picked qty`))\n } else if (loadedQty == pickedQty) {\n // Change status of current worksheet detail\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n // Change status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.LOADED\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n } else if (loadedQty < pickedQty) {\n const remainQty: number = pickedQty - loadedQty\n const loadedUomValue: number = parseFloat(\n ((targetInventory.releaseUomValue / pickedQty) * loadedQty).toFixed(2)\n )\n const remainUomValue: number = parseFloat((targetInventory.releaseUomValue - loadedUomValue).toFixed(2))\n\n targetInventory.status = ORDER_INVENTORY_STATUS.LOADED\n targetInventory.releaseQty = loadedQty\n targetInventory.releaseUomValue = loadedUomValue\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n worksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n // Create order inventory for remaining item\n let newTargetInventory: OrderInventory = new OrderInventory()\n newTargetInventory.domain = this.domain\n newTargetInventory.bizplace = bizplace\n newTargetInventory.name = OrderNoGenerator.orderInventory()\n newTargetInventory.releaseGood = releaseGood\n newTargetInventory.inventory = inventory\n newTargetInventory.type = ORDER_TYPES.RELEASE_OF_GOODS\n newTargetInventory.status = ORDER_INVENTORY_STATUS.LOADING\n newTargetInventory.releaseQty = remainQty\n newTargetInventory.releaseUomValue = remainUomValue\n newTargetInventory.product = targetInventory.product\n newTargetInventory.packingType = targetInventory.packingType\n newTargetInventory.batchId = targetInventory.batchId\n newTargetInventory.creator = this.user\n newTargetInventory.updater = this.user\n newTargetInventory = await this.trxMgr.getRepository(OrderInventory).save(newTargetInventory)\n\n if (toteName) {\n let foundOrderTote = await this.trxMgr\n .getRepository(OrderTote)\n .findOne({ where: { name: toteName, releaseGood: { id: releaseGood.id } } })\n\n let foundOrderToteItems = await this.trxMgr\n .getRepository(OrderToteItem)\n .find({ where: { orderInventory: { id: targetInventory.id } } })\n\n let foundOrderToteItemIds = foundOrderToteItems.map((itm: OrderToteItem) => itm.id)\n\n await this.trxMgr\n .getRepository(OrderToteItem)\n .update({ id: In(foundOrderToteItemIds) }, { orderInventory: newTargetInventory })\n\n let foundOrderToteItem: OrderToteItem = await this.trxMgr.getRepository(OrderToteItem).findOne({\n where: { orderInventory: newTargetInventory.id, orderTote: { id: foundOrderTote.id }, qty: loadedQty }\n })\n\n await this.trxMgr\n .getRepository(OrderToteItem)\n .update({ id: foundOrderToteItem.id }, { orderInventory: targetInventory.id })\n }\n\n let newWorksheetDetail: any = await this.createWorksheetDetails(\n worksheet,\n WORKSHEET_TYPE.LOADING,\n [newTargetInventory],\n {\n status: WORKSHEET_STATUS.EXECUTING\n }\n )\n\n let worksheetDetailName = worksheetDetails[i].name\n worksheetDetails = worksheetDetails.map(record => {\n if (record.name == worksheetDetailName && !record?.targetInventory) {\n return {\n ...record,\n name: newWorksheetDetail[0].name\n }\n } else {\n return record\n }\n })\n\n worksheetDetails[i].name = worksheetDetailName\n }\n\n worksheetDetails[i].targetInventory = targetInventory\n\n await generateInventoryHistory(\n inventory,\n releaseGood,\n INVENTORY_TRANSACTION_TYPE.LOADING,\n 0,\n 0,\n this.user,\n this.trxMgr\n )\n }\n\n return worksheetDetails\n }\n\n async undoLoading(deliveryOrder: Partial<DeliveryOrder>, palletIds: string[]): Promise<void> {\n deliveryOrder = await this.findRefOrder(DeliveryOrder, { id: deliveryOrder.id, domain: this.domain }, [\n 'releaseGood'\n ])\n\n const releaseGood: ReleaseGood = deliveryOrder.releaseGood\n\n const targetInventories: OrderInventory[] = await this.trxMgr.getRepository(OrderInventory).find({\n where: {\n domain: { id: this.domain.id },\n deliveryOrder: { id: deliveryOrder.id },\n status: ORDER_INVENTORY_STATUS.LOADED\n },\n relations: ['inventory']\n })\n // Filter out inventories which is included palletIds list.\n let undoTargetOrderInventories: OrderInventory[] = targetInventories.filter(\n (targetInventory: OrderInventory) =>\n targetInventory.status === ORDER_INVENTORY_STATUS.LOADED &&\n palletIds.includes(targetInventory.inventory.palletId)\n )\n\n // If there was remained items => Merge into previous order inventories\n for (let undoTargetOrderInventory of undoTargetOrderInventories) {\n undoTargetOrderInventory.deliveryOrder = null\n undoTargetOrderInventory.updater = this.user\n\n undoTargetOrderInventory.loadedAt = null\n undoTargetOrderInventory.loadedByUser = null\n undoTargetOrderInventory.loadedBy = null\n\n let prevTargetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({\n where: {\n domain: { id: this.domain.id },\n id: Not(Equal(undoTargetOrderInventory.id)),\n releaseGood: { id: releaseGood.id },\n status: ORDER_INVENTORY_STATUS.LOADING,\n inventory: { id: undoTargetOrderInventory.inventory.id }\n }\n })\n\n let undoOrderToteItem: OrderToteItem = await this.trxMgr\n .getRepository(OrderToteItem)\n .findOne({ where: { orderInventory: { id: undoTargetOrderInventory.id } } })\n\n if (prevTargetInventory) {\n // If there's prev target inventory\n // Merge qty and uomValue into prev target inventory\n prevTargetInventory.releaseQty += undoTargetOrderInventory.releaseQty\n prevTargetInventory.releaseUomValue += undoTargetOrderInventory.releaseUomValue\n prevTargetInventory.updater = this.user\n await this.updateOrderTargets([prevTargetInventory])\n\n //Update order tote item if any\n if (undoOrderToteItem) {\n undoOrderToteItem.orderInventoryId = prevTargetInventory.id\n undoOrderToteItem.orderInventory = prevTargetInventory\n await this.trxMgr.getRepository(OrderToteItem).save(undoOrderToteItem)\n }\n\n // Terminate undo target order inventory\n undoTargetOrderInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n await this.updateOrderTargets([undoTargetOrderInventory])\n\n // Delete worksheet detail\n await this.trxMgr.getRepository(WorksheetDetail).delete({\n targetInventory: undoTargetOrderInventory,\n type: WORKSHEET_TYPE.LOADING,\n status: WORKSHEET_STATUS.DONE\n })\n } else {\n // Update undo target inventory\n undoTargetOrderInventory.status = ORDER_INVENTORY_STATUS.LOADING\n await this.updateOrderTargets([undoTargetOrderInventory])\n\n // Update worksheet detail to be able to load\n let undoTargetWorksheetDetail: WorksheetDetail = await this.findWorksheetDetail({\n targetInventory: undoTargetOrderInventory,\n type: WORKSHEET_TYPE.LOADING,\n status: WORKSHEET_STATUS.DONE\n })\n undoTargetWorksheetDetail.status = WORKSHEET_STATUS.EXECUTING\n undoTargetWorksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(undoTargetWorksheetDetail)\n }\n\n // Create inventory history\n let inventory: Inventory = undoTargetOrderInventory.inventory\n await generateInventoryHistory(inventory, releaseGood, INVENTORY_TRANSACTION_TYPE.UNDO_LOADING, 0, 0, this.user)\n }\n\n // Compare total inventories length and undo target inventories length\n // to check whether there's more order inventories\n // If thres' no more remove delivery order\n if (targetInventories.length === undoTargetOrderInventories.length) {\n await this.trxMgr.getRepository(DeliveryOrder).delete(deliveryOrder.id)\n }\n }\n\n async completeLoading(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: { id: this.domain.id },\n name: releaseGoodNo,\n status: ORDER_STATUS.LOADING\n })\n\n const orderToteIds = await (\n await this.trxMgr\n .getRepository(OrderTote)\n .find({ where: { releaseGood: { id: releaseGood.id } }, relations: ['tote'] })\n ).map((record: OrderTote) => record?.toteId)\n\n await this.trxMgr.getRepository(Tote).update({ id: In(orderToteIds) }, { status: TOTE_STATUS.DISPATCHED })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.LOADING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
@@ -10,7 +10,7 @@ const vas_worksheet_controller_1 = require("../vas/vas-worksheet-controller");
10
10
  class PackingWorksheetController extends vas_worksheet_controller_1.VasWorksheetController {
11
11
  async generatePackingWorksheet(releaseGoodNo) {
12
12
  let releaseGood = await this.findRefOrder(sales_base_1.ReleaseGood, {
13
- domain: this.domain,
13
+ domain: { id: this.domain.id },
14
14
  name: releaseGoodNo
15
15
  }, ['orderInventories', 'orderInventories.inventory']);
16
16
  let orderInventories = releaseGood.orderInventories.filter(oi => {
@@ -246,7 +246,7 @@ class PackingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
246
246
  }
247
247
  async completePacking(releaseGoodNo) {
248
248
  let releaseGood = await this.findRefOrder(sales_base_1.ReleaseGood, {
249
- domain: this.domain,
249
+ domain: { id: this.domain.id },
250
250
  name: releaseGoodNo,
251
251
  status: sales_base_1.ORDER_STATUS.PACKING
252
252
  });
@@ -1 +1 @@
1
- {"version":3,"file":"packing-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/packing-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Equal, Not } from 'typeorm'\n\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n INVENTORY_ITEM_SOURCE,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n InventoryItem,\n InventoryNoGenerator\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class PackingWorksheetController extends VasWorksheetController {\n async generatePackingWorksheet(releaseGoodNo: string): Promise<Worksheet> {\n let releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n {\n domain: this.domain,\n name: releaseGoodNo\n },\n ['orderInventories', 'orderInventories.inventory']\n )\n let orderInventories: OrderInventory[] = releaseGood.orderInventories.filter(oi => {\n return oi.inventory.status !== 'MISSING'\n })\n\n const existingPackingWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: { id: this.domain.id },\n releaseGood: { id: releaseGood.id },\n type: WORKSHEET_TYPE.PACKING,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n })\n\n if (existingPackingWorksheet) throw new Error('There is existing packing worksheet that has been generated')\n let worksheet: Worksheet = await this.createWorksheet(releaseGood, WORKSHEET_TYPE.PACKING)\n\n if (orderInventories.every((oi: OrderInventory) => oi.inventory?.id) || releaseGood.crossDocking) {\n worksheet.worksheetDetails = await this.createWorksheetDetails(\n worksheet,\n WORKSHEET_TYPE.PACKING,\n orderInventories\n )\n }\n\n orderInventories.forEach((oi: OrderInventory) => {\n oi.status = ORDER_INVENTORY_STATUS.READY_TO_PACK\n oi.updater = this.user\n })\n await this.updateOrderTargets(orderInventories)\n\n return worksheet\n }\n\n async activatePacking(worksheetNo: string): Promise<Worksheet> {\n let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.PACKING, [\n 'releaseGood',\n 'releaseGood.bizplace',\n 'releaseGood.bizplace.domain',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.PACKING\n targetInventory.updater = this.user\n return targetInventory\n })\n this.updateOrderTargets(targetInventories)\n\n let releaseGood: ReleaseGood = worksheet.releaseGood\n releaseGood.status = ORDER_STATUS.PACKING\n releaseGood.updater = this.user\n this.updateRefOrder(releaseGood)\n\n worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [])\n\n return worksheet\n }\n\n async packing(worksheetDetailName: string, packedQty: number, serialNumber?: string): Promise<WorksheetDetail> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PACKING,\n [\n 'worksheet',\n 'worksheet.bizplace',\n 'worksheet.bizplace.domain',\n 'targetInventory',\n 'targetInventory.releaseGood',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location',\n 'targetInventory.product'\n ]\n )\n const releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n const product: Product = targetInventory.product\n let inventory: Inventory = targetInventory.inventory\n const pickedQty: number = targetInventory.releaseQty\n\n if (packedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('pack', `packed quantity can't exceed release qty`))\n }\n\n // Serial Number scanning for batch picking\n if (targetInventory?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('packing', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: { id: this.domain.id }, serialNumber: serialNumber, product: { id: product.id } },\n relations: ['product', 'inventory']\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/packed in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.PACKING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.PACKING\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n targetInventory.packedQty = Boolean(targetInventory.packedQty) ? targetInventory.packedQty + packedQty : packedQty\n if (targetInventory.packedQty == targetInventory.releaseQty) {\n targetInventory.status = ORDER_INVENTORY_STATUS.PACKED\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.PACKING)\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n }\n\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.updater = this.user\n worksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n return worksheetDetail\n }\n\n async scanProductPacking(\n worksheetDetailName: string,\n productBarcode: string,\n serialNumber?: string\n ): Promise<WorksheetDetail> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PACKING,\n [\n 'worksheet',\n 'worksheet.bizplace',\n 'worksheet.bizplace.domain',\n 'targetInventory',\n 'targetInventory.releaseGood',\n 'targetInventory.inventory',\n 'targetInventory.inventory.product',\n 'targetInventory.inventory.product.productDetails',\n 'targetInventory.inventory.product.productDetails.childProductDetail',\n 'targetInventory.inventory.location'\n ]\n )\n const releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood\n const product: Product = worksheetDetail.targetInventory.inventory.product\n const filterProductDetails: ProductDetail[] = product?.productDetails.filter(detail => !detail.deletedAt)\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let packedQty: number = 1\n let pickedQty: number = targetInventory.releaseQty\n\n // search for matching product barcode\n const productDetail: ProductDetail = product?.productDetails\n .filter(detail => !detail.deletedAt)\n .find(\n detail =>\n detail.gtin === productBarcode &&\n detail.packingType === inventory.packingType &&\n detail.packingSize === inventory.packingSize\n )\n\n if (!productDetail && !product?.isRequireSerialNumberScanningOutbound) {\n let roProductDetail: ProductDetail = product?.productDetails.find(\n (parentDetail: ProductDetail) =>\n parentDetail.packingType === inventory.packingType && parentDetail.packingSize == inventory.packingSize\n )\n\n roProductDetail.product = product\n\n let childQty = await this.getChildQty(filterProductDetails, productBarcode, roProductDetail)\n packedQty *= childQty\n } else if (!productDetail) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n\n if (packedQty + targetInventory.packedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`))\n }\n\n // Serial Number scanning for batch picking\n if (targetInventory?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('packing', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: { id: this.domain.id }, serialNumber: serialNumber, product: { id: product.id } }\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.inventoryId !== inventory.id) {\n throw new Error('Serial Number scanned is in another inventory')\n }\n\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/packed in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.PACKING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.PACKING\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n targetInventory.packedQty = Boolean(targetInventory?.packedQty) ? targetInventory.packedQty + packedQty : packedQty\n if (targetInventory.packedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('pack', `packed quantity can't exceed release qty`))\n }\n\n targetInventory.packedAt = new Date()\n targetInventory.packedByUser = this.user\n\n let packedBy: string[] = targetInventory.packedBy ? targetInventory.packedBy.split(',') : []\n if (!packedBy.find(x => x == this.user.name)) {\n packedBy.push(this.user.name)\n targetInventory.packedBy = packedBy.join(',')\n }\n\n if (targetInventory.packedQty == pickedQty) {\n targetInventory.status = ORDER_INVENTORY_STATUS.PACKED\n await this.updateOrderTargets([targetInventory])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.PACKING)\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n } else {\n await this.trxMgr.getRepository(OrderInventory).save(targetInventory)\n }\n\n return worksheetDetail\n }\n\n async completePacking(releaseGoodNo: string): Promise<Worksheet> {\n let releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.PACKING\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PACKING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.TERMINATED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n let orderStatus: string\n if (releaseGood?.courierOption) orderStatus = ORDER_STATUS.DONE\n else orderStatus = ORDER_STATUS.LOADING\n\n return await this.completeWorksheet(worksheet, orderStatus)\n }\n\n async undoSerialNumberPacking(worksheetDetailName: string, inventoryItemId: string): Promise<void> {\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: {\n name: worksheetDetailName,\n domain: { id: this.domain.id },\n status: Not(Equal(WORKSHEET_STATUS.DEACTIVATED))\n },\n relations: [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.product',\n 'targetInventory.inventory'\n ]\n })\n\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let releaseGood: ReleaseGood = worksheetDetail.worksheet.releaseGood\n\n if (\n targetInventory.releaseQty == targetInventory.packedQty &&\n targetInventory.status == ORDER_INVENTORY_STATUS.PACKED\n ) {\n targetInventory.status = INVENTORY_STATUS.PACKING\n\n await this.trxMgr\n .getRepository(WorksheetDetail)\n .update({ id: worksheetDetail.id }, { status: WORKSHEET_STATUS.EXECUTING })\n }\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n let removeInventoryItem: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .findOne({ where: { id: inventoryItemId } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKING\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n if (removeInventoryItem.source == INVENTORY_ITEM_SOURCE.OUTBOUND) {\n await this.trxMgr.getRepository(InventoryItem).delete(removeInventoryItem.id)\n } else {\n await this.trxMgr.getRepository(InventoryItem).update(\n {\n id: inventoryItemId\n },\n {\n status: INVENTORY_STATUS.STORED,\n outboundOrderId: null,\n updater: this.user as any\n }\n )\n }\n\n targetInventory.packedQty--\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n }\n}\n"]}
1
+ {"version":3,"file":"packing-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/packing-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Equal, Not } from 'typeorm'\n\nimport { Product, ProductDetail } from '@things-factory/product-base'\nimport { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n INVENTORY_ITEM_SOURCE,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n InventoryItem,\n InventoryNoGenerator\n} from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class PackingWorksheetController extends VasWorksheetController {\n async generatePackingWorksheet(releaseGoodNo: string): Promise<Worksheet> {\n let releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n {\n domain: { id: this.domain.id },\n name: releaseGoodNo\n },\n ['orderInventories', 'orderInventories.inventory']\n )\n let orderInventories: OrderInventory[] = releaseGood.orderInventories.filter(oi => {\n return oi.inventory.status !== 'MISSING'\n })\n\n const existingPackingWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({\n where: {\n domain: { id: this.domain.id },\n releaseGood: { id: releaseGood.id },\n type: WORKSHEET_TYPE.PACKING,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n })\n\n if (existingPackingWorksheet) throw new Error('There is existing packing worksheet that has been generated')\n let worksheet: Worksheet = await this.createWorksheet(releaseGood, WORKSHEET_TYPE.PACKING)\n\n if (orderInventories.every((oi: OrderInventory) => oi.inventory?.id) || releaseGood.crossDocking) {\n worksheet.worksheetDetails = await this.createWorksheetDetails(\n worksheet,\n WORKSHEET_TYPE.PACKING,\n orderInventories\n )\n }\n\n orderInventories.forEach((oi: OrderInventory) => {\n oi.status = ORDER_INVENTORY_STATUS.READY_TO_PACK\n oi.updater = this.user\n })\n await this.updateOrderTargets(orderInventories)\n\n return worksheet\n }\n\n async activatePacking(worksheetNo: string): Promise<Worksheet> {\n let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.PACKING, [\n 'releaseGood',\n 'releaseGood.bizplace',\n 'releaseGood.bizplace.domain',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.PACKING\n targetInventory.updater = this.user\n return targetInventory\n })\n this.updateOrderTargets(targetInventories)\n\n let releaseGood: ReleaseGood = worksheet.releaseGood\n releaseGood.status = ORDER_STATUS.PACKING\n releaseGood.updater = this.user\n this.updateRefOrder(releaseGood)\n\n worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [])\n\n return worksheet\n }\n\n async packing(worksheetDetailName: string, packedQty: number, serialNumber?: string): Promise<WorksheetDetail> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PACKING,\n [\n 'worksheet',\n 'worksheet.bizplace',\n 'worksheet.bizplace.domain',\n 'targetInventory',\n 'targetInventory.releaseGood',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location',\n 'targetInventory.product'\n ]\n )\n const releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n const product: Product = targetInventory.product\n let inventory: Inventory = targetInventory.inventory\n const pickedQty: number = targetInventory.releaseQty\n\n if (packedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('pack', `packed quantity can't exceed release qty`))\n }\n\n // Serial Number scanning for batch picking\n if (targetInventory?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('packing', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: { id: this.domain.id }, serialNumber: serialNumber, product: { id: product.id } },\n relations: ['product', 'inventory']\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/packed in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.PACKING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.PACKING\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n foundSerialNumber = await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n targetInventory.packedQty = Boolean(targetInventory.packedQty) ? targetInventory.packedQty + packedQty : packedQty\n if (targetInventory.packedQty == targetInventory.releaseQty) {\n targetInventory.status = ORDER_INVENTORY_STATUS.PACKED\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.PACKING)\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n }\n\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.updater = this.user\n worksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n return worksheetDetail\n }\n\n async scanProductPacking(\n worksheetDetailName: string,\n productBarcode: string,\n serialNumber?: string\n ): Promise<WorksheetDetail> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.PACKING,\n [\n 'worksheet',\n 'worksheet.bizplace',\n 'worksheet.bizplace.domain',\n 'targetInventory',\n 'targetInventory.releaseGood',\n 'targetInventory.inventory',\n 'targetInventory.inventory.product',\n 'targetInventory.inventory.product.productDetails',\n 'targetInventory.inventory.product.productDetails.childProductDetail',\n 'targetInventory.inventory.location'\n ]\n )\n const releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood\n const product: Product = worksheetDetail.targetInventory.inventory.product\n const filterProductDetails: ProductDetail[] = product?.productDetails.filter(detail => !detail.deletedAt)\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let packedQty: number = 1\n let pickedQty: number = targetInventory.releaseQty\n\n // search for matching product barcode\n const productDetail: ProductDetail = product?.productDetails\n .filter(detail => !detail.deletedAt)\n .find(\n detail =>\n detail.gtin === productBarcode &&\n detail.packingType === inventory.packingType &&\n detail.packingSize === inventory.packingSize\n )\n\n if (!productDetail && !product?.isRequireSerialNumberScanningOutbound) {\n let roProductDetail: ProductDetail = product?.productDetails.find(\n (parentDetail: ProductDetail) =>\n parentDetail.packingType === inventory.packingType && parentDetail.packingSize == inventory.packingSize\n )\n\n roProductDetail.product = product\n\n let childQty = await this.getChildQty(filterProductDetails, productBarcode, roProductDetail)\n packedQty *= childQty\n } else if (!productDetail) {\n throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))\n }\n\n if (packedQty + targetInventory.packedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`))\n }\n\n // Serial Number scanning for batch picking\n if (targetInventory?.refWorksheetId) {\n if (product?.isRequireSerialNumberScanningOutbound) {\n if (!serialNumber || serialNumber == '') {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('packing', `require serial number`))\n }\n\n let foundSerialNumber: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({\n where: { domain: { id: this.domain.id }, serialNumber: serialNumber, product: { id: product.id } }\n })\n\n if (foundSerialNumber) {\n if (foundSerialNumber.inventoryId !== inventory.id) {\n throw new Error('Serial Number scanned is in another inventory')\n }\n\n if (foundSerialNumber.outboundOrderId) {\n let releaseGood: ReleaseGood = await this.trxMgr\n .getRepository(ReleaseGood)\n .findOne({ where: { id: foundSerialNumber.outboundOrderId } })\n throw new Error(`Inventory Item is already picked/packed in ${releaseGood.name}`)\n }\n\n foundSerialNumber.status = INVENTORY_STATUS.PACKING\n foundSerialNumber.updater = this.user\n foundSerialNumber.outboundOrderId = releaseGood.id\n\n await this.trxMgr.getRepository(InventoryItem).save(foundSerialNumber)\n } else {\n let inventoryItem: InventoryItem = new InventoryItem()\n inventoryItem.name = InventoryNoGenerator.inventoryItemName()\n inventoryItem.serialNumber = serialNumber\n inventoryItem.status = INVENTORY_STATUS.PACKING\n inventoryItem.outboundOrderId = releaseGood.id\n inventoryItem.source = INVENTORY_ITEM_SOURCE.OUTBOUND\n inventoryItem.product = product\n inventoryItem.inventory = inventory\n inventoryItem.domain = this.domain\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)\n }\n }\n }\n\n targetInventory.packedQty = Boolean(targetInventory?.packedQty) ? targetInventory.packedQty + packedQty : packedQty\n if (targetInventory.packedQty > pickedQty) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('pack', `packed quantity can't exceed release qty`))\n }\n\n targetInventory.packedAt = new Date()\n targetInventory.packedByUser = this.user\n\n let packedBy: string[] = targetInventory.packedBy ? targetInventory.packedBy.split(',') : []\n if (!packedBy.find(x => x == this.user.name)) {\n packedBy.push(this.user.name)\n targetInventory.packedBy = packedBy.join(',')\n }\n\n if (targetInventory.packedQty == pickedQty) {\n targetInventory.status = ORDER_INVENTORY_STATUS.PACKED\n await this.updateOrderTargets([targetInventory])\n await this.transactionInventory(inventory, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.PACKING)\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n } else {\n await this.trxMgr.getRepository(OrderInventory).save(targetInventory)\n }\n\n return worksheetDetail\n }\n\n async completePacking(releaseGoodNo: string): Promise<Worksheet> {\n let releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: { id: this.domain.id },\n name: releaseGoodNo,\n status: ORDER_STATUS.PACKING\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PACKING, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.TERMINATED\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n let orderStatus: string\n if (releaseGood?.courierOption) orderStatus = ORDER_STATUS.DONE\n else orderStatus = ORDER_STATUS.LOADING\n\n return await this.completeWorksheet(worksheet, orderStatus)\n }\n\n async undoSerialNumberPacking(worksheetDetailName: string, inventoryItemId: string): Promise<void> {\n const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({\n where: {\n name: worksheetDetailName,\n domain: { id: this.domain.id },\n status: Not(Equal(WORKSHEET_STATUS.DEACTIVATED))\n },\n relations: [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.product',\n 'targetInventory.inventory'\n ]\n })\n\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let releaseGood: ReleaseGood = worksheetDetail.worksheet.releaseGood\n\n if (\n targetInventory.releaseQty == targetInventory.packedQty &&\n targetInventory.status == ORDER_INVENTORY_STATUS.PACKED\n ) {\n targetInventory.status = INVENTORY_STATUS.PACKING\n\n await this.trxMgr\n .getRepository(WorksheetDetail)\n .update({ id: worksheetDetail.id }, { status: WORKSHEET_STATUS.EXECUTING })\n }\n\n let inventoryItems: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .find({ where: { outboundOrderId: releaseGood.id } })\n\n let removeInventoryItem: InventoryItem = await this.trxMgr\n .getRepository(InventoryItem)\n .findOne({ where: { id: inventoryItemId } })\n\n if (inventoryItems.length > 0) {\n inventoryItems.forEach((itm: InventoryItem) => {\n itm.status = INVENTORY_STATUS.PACKING\n itm.updater = this.user\n })\n\n await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)\n }\n\n if (removeInventoryItem.source == INVENTORY_ITEM_SOURCE.OUTBOUND) {\n await this.trxMgr.getRepository(InventoryItem).delete(removeInventoryItem.id)\n } else {\n await this.trxMgr.getRepository(InventoryItem).update(\n {\n id: inventoryItemId\n },\n {\n status: INVENTORY_STATUS.STORED,\n outboundOrderId: null,\n updater: this.user as any\n }\n )\n }\n\n targetInventory.packedQty--\n targetInventory.updater = this.user\n await this.updateOrderTargets([targetInventory])\n }\n}\n"]}
@@ -152,7 +152,7 @@ class ReturningWorksheetController extends vas_worksheet_controller_1.VasWorkshe
152
152
  }
153
153
  async completeReturning(releaseGoodNo) {
154
154
  const releaseGood = await this.findRefOrder(sales_base_1.ReleaseGood, {
155
- domain: this.domain,
155
+ domain: { id: this.domain.id },
156
156
  name: releaseGoodNo,
157
157
  status: sales_base_1.ORDER_STATUS.PARTIAL_RETURN
158
158
  });
@@ -1 +1 @@
1
- {"version":3,"file":"returning-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/returning-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n Warehouse,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n LOCATION_TYPE,\n Location\n} from '@things-factory/warehouse-base'\nimport { In } from 'typeorm'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class ReturningWorksheetController extends VasWorksheetController {\n async generateReturningWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n releaseGood,\n targetInventories,\n ORDER_STATUS.PARTIAL_RETURN,\n ORDER_INVENTORY_STATUS.RETURNING\n )\n }\n\n async activateReturning(\n worksheetNo: string,\n returningWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.RETURNING\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, returningWorksheetDetails)\n }\n\n async returning(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n toLocation: string\n ): Promise<void> {\n if (cartonId) {\n await this.warehouseReturnPutawayCarton(worksheetDetailName, cartonId, toLocation)\n } else {\n await this.warehouseReturnPutawayPallet(worksheetDetailName[0], palletId, toLocation)\n }\n }\n\n async warehouseReturnPutawayPallet(\n worksheetDetailName: string,\n palletId: string,\n toLocationName: string\n ): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let location: Location = inventory.location\n\n const originLocation: Location = inventory.location\n const originPalletId: string = inventory.palletId\n\n const toLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: { id: this.domain.id }, name: toLocationName },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === toLocation.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n\n const isPalletDiff: boolean = originPalletId !== palletId\n if (isPalletDiff) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))\n }\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.status = INVENTORY_STATUS.STORED\n\n const isLocationChanged: boolean = originLocation.id !== toLocation.id\n if (isLocationChanged) {\n inventory.location = toLocation\n inventory.warehouse = toLocation.warehouse\n inventory.zone = toLocation.zone\n }\n\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n // update status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n\n await this.updateOrderTargets([targetInventory])\n\n // update status of worksheet detail (EXECUTING => DONE)\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async warehouseReturnPutawayCarton(\n worksheetDetailName: [string],\n cartonId: string,\n toLocationName: string\n ): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let invLocation: Location = inventory.location\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: toLocationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE\n ])\n },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === location.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async completeReturning(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: this.domain,\n name: releaseGoodNo,\n status: ORDER_STATUS.PARTIAL_RETURN\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}
1
+ {"version":3,"file":"returning-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/outbound/returning-worksheet-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { OrderInventory, ORDER_INVENTORY_STATUS, ORDER_STATUS, ReleaseGood } from '@things-factory/sales-base'\nimport {\n Inventory,\n Warehouse,\n INVENTORY_STATUS,\n INVENTORY_TRANSACTION_TYPE,\n LOCATION_TYPE,\n Location\n} from '@things-factory/warehouse-base'\nimport { In } from 'typeorm'\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'\nimport { Worksheet, WorksheetDetail } from '../../entities'\nimport { VasWorksheetController } from '../vas/vas-worksheet-controller'\n\nexport class ReturningWorksheetController extends VasWorksheetController {\n async generateReturningWorksheet(\n releaseGoodNo: string,\n targetInventories: Partial<OrderInventory>[]\n ): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(\n ReleaseGood,\n { domain: { id: this.domain.id }, name: releaseGoodNo },\n ['bizplace']\n )\n return await this.generateWorksheet(\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n releaseGood,\n targetInventories,\n ORDER_STATUS.PARTIAL_RETURN,\n ORDER_INVENTORY_STATUS.RETURNING\n )\n }\n\n async activateReturning(\n worksheetNo: string,\n returningWorksheetDetails: Partial<WorksheetDetail>[]\n ): Promise<Worksheet> {\n const worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n\n const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails\n const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {\n let targetInventory: OrderInventory = wsd.targetInventory\n targetInventory.status = ORDER_INVENTORY_STATUS.RETURNING\n targetInventory.updater = this.user\n return targetInventory\n })\n await this.updateOrderTargets(targetInventories)\n return await this.activateWorksheet(worksheet, worksheetDetails, returningWorksheetDetails)\n }\n\n async returning(\n worksheetDetailName: [string],\n palletId: string,\n cartonId: string,\n toLocation: string\n ): Promise<void> {\n if (cartonId) {\n await this.warehouseReturnPutawayCarton(worksheetDetailName, cartonId, toLocation)\n } else {\n await this.warehouseReturnPutawayPallet(worksheetDetailName[0], palletId, toLocation)\n }\n }\n\n async warehouseReturnPutawayPallet(\n worksheetDetailName: string,\n palletId: string,\n toLocationName: string\n ): Promise<void> {\n let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let location: Location = inventory.location\n\n const originLocation: Location = inventory.location\n const originPalletId: string = inventory.palletId\n\n const toLocation: Location = await this.trxMgr.getRepository(Location).findOne({\n where: { domain: { id: this.domain.id }, name: toLocationName },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === toLocation.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n\n const isPalletDiff: boolean = originPalletId !== palletId\n if (isPalletDiff) {\n throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('return', 'pallet ID is not matched'))\n }\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.status = INVENTORY_STATUS.STORED\n\n const isLocationChanged: boolean = originLocation.id !== toLocation.id\n if (isLocationChanged) {\n inventory.location = toLocation\n inventory.warehouse = toLocation.warehouse\n inventory.zone = toLocation.zone\n }\n\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n // update status of order inventory\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n\n await this.updateOrderTargets([targetInventory])\n\n // update status of worksheet detail (EXECUTING => DONE)\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n\n async warehouseReturnPutawayCarton(\n worksheetDetailName: [string],\n cartonId: string,\n toLocationName: string\n ): Promise<void> {\n const worksheetDetails: WorksheetDetail[] = await this.findExecutableWorksheetDetailByNames(\n worksheetDetailName,\n WORKSHEET_TYPE.WAREHOUSE_RETURN,\n [\n 'worksheet',\n 'worksheet.releaseGood',\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location'\n ]\n )\n\n for (var i = 0; i < worksheetDetails.length; i++) {\n const worksheetDetail = worksheetDetails[i]\n const worksheet: Worksheet = worksheetDetail.worksheet\n const releaseGood: ReleaseGood = worksheet.releaseGood\n let targetInventory: OrderInventory = worksheetDetail.targetInventory\n let inventory: Inventory = targetInventory.inventory\n let invLocation: Location = inventory.location\n\n if (inventory.cartonId !== cartonId) {\n throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))\n }\n\n const location: Location = await this.trxMgr.getRepository(Location).findOne({\n where: {\n domain: { id: this.domain.id },\n name: toLocationName,\n type: In([\n LOCATION_TYPE.SHELF,\n LOCATION_TYPE.BUFFER,\n LOCATION_TYPE.FLOOR,\n LOCATION_TYPE.BIN,\n LOCATION_TYPE.QUARANTINE\n ])\n },\n relations: ['warehouse']\n })\n\n if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {\n if (\n ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {\n return l === location.type\n })\n ) {\n throw new Error('Location should be assigned only to Quarantine or Reserve Zone')\n }\n }\n\n if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))\n const warehouse: Warehouse = location.warehouse\n const zone: string = warehouse.zone\n\n inventory.qty += targetInventory.releaseQty\n inventory.uomValue += targetInventory.releaseUomValue\n inventory.location = location\n inventory.status = INVENTORY_STATUS.STORED\n inventory.warehouse = warehouse\n inventory.zone = zone\n await this.transactionInventory(\n inventory,\n releaseGood,\n targetInventory.releaseQty,\n targetInventory.releaseUomValue,\n INVENTORY_TRANSACTION_TYPE.RETURN\n )\n\n targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED\n targetInventory.updater = this.user\n targetInventory.returnToLocationQty = targetInventory.releaseQty\n targetInventory.returnToLocationUomValue = targetInventory.releaseUomValue\n await this.updateOrderTargets([targetInventory])\n\n worksheetDetail.status = WORKSHEET_STATUS.DONE\n worksheetDetail.updater = this.user\n await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)\n }\n }\n\n async completeReturning(releaseGoodNo: string): Promise<Worksheet> {\n const releaseGood: ReleaseGood = await this.findRefOrder(ReleaseGood, {\n domain: { id: this.domain.id },\n name: releaseGoodNo,\n status: ORDER_STATUS.PARTIAL_RETURN\n })\n\n const worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.WAREHOUSE_RETURN, [\n 'worksheetDetails',\n 'worksheetDetails.targetInventory'\n ])\n this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })\n\n return await this.completeWorksheet(worksheet, ORDER_STATUS.DONE)\n }\n}\n"]}