@things-factory/worksheet-base 6.0.111 → 6.0.113

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.
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateReleaseGoodWorksheetDetails = exports.generateReleaseGoodWorksheetDetailsResolver = void 0;
4
+ const typeorm_1 = require("typeorm");
4
5
  const product_base_1 = require("@things-factory/product-base");
5
6
  const sales_base_1 = require("@things-factory/sales-base");
6
7
  const warehouse_base_1 = require("@things-factory/warehouse-base");
@@ -46,7 +47,7 @@ async function generateReleaseGoodWorksheetDetails(tx, domain, user, worksheetNo
46
47
  .findOne({ where: { id: targetInventory.inventory.id } });
47
48
  let targetProduct = await tx
48
49
  .getRepository(sales_base_1.OrderProduct)
49
- .findOne({ where: { id: (_a = wsd.targetProduct) === null || _a === void 0 ? void 0 : _a.id } });
50
+ .findOne({ where: { id: (0, typeorm_1.Equal)((_a = wsd.targetProduct) === null || _a === void 0 ? void 0 : _a.id) } });
50
51
  targetInventory = await tx.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, targetInventory), { domain, bizplace: worksheet.bizplace, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseGood: worksheet.releaseGood, inventory,
51
52
  batchId, batchIdRef: inventory.batchIdRef, status: sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK, product: await tx.getRepository(product_base_1.Product).findOneBy({ id: productId }), packingType,
52
53
  packingSize, orderProduct: targetProduct, creator: user, updater: user }));
@@ -1 +1 @@
1
- {"version":3,"file":"generate-release-good-worksheet-details.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Product } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderProduct\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'\nimport { Worksheet, WorksheetDetail } from '../../../entities'\nimport { WorksheetNoGenerator } from '../../../utils'\n\nexport const generateReleaseGoodWorksheetDetailsResolver = {\n async generateReleaseGoodWorksheetDetails(\n _: any,\n { worksheetNo, batchId, productId, packingType, packingSize, worksheetDetails },\n context: any\n ): Promise<void> {\n const { tx, domain, user } = context.state\n return await generateReleaseGoodWorksheetDetails(\n tx,\n domain,\n user,\n worksheetNo,\n batchId,\n productId,\n packingType,\n packingSize,\n worksheetDetails\n )\n }\n}\n\nexport async function generateReleaseGoodWorksheetDetails(\n tx: EntityManager,\n domain: Domain,\n user: User,\n worksheetNo: string,\n batchId: string,\n productId: string,\n packingType: string,\n packingSize: number,\n worksheetDetails: Partial<WorksheetDetail>[]\n): Promise<void> {\n // 1. Remove prev worksheet details if it's exists\n const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { name: worksheetNo, domain: { id: domain.id } },\n relations: [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product'\n ]\n })\n\n const prevWSDs: WorksheetDetail[] = worksheet.worksheetDetails.filter((wsd: WorksheetDetail) => {\n const targetInv: OrderInventory = wsd.targetInventory\n if (targetInv.batchId === batchId && targetInv.product.id === productId && targetInv.packingType === packingType)\n return wsd.id\n })\n\n // TODO: Delete order inventories\n if (prevWSDs?.length) {\n const wsdIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.id)\n const prevOrderInvIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory.id)\n await tx.getRepository(WorksheetDetail).delete(wsdIds)\n await tx.getRepository(OrderInventory).delete(prevOrderInvIds)\n }\n\n await Promise.all(\n worksheetDetails.map(async (wsd: WorksheetDetail) => {\n // 2. Create order inventory\n let targetInventory: OrderInventory = wsd.targetInventory\n const inventory: Inventory = await tx\n .getRepository(Inventory)\n .findOne({ where: { id: targetInventory.inventory.id } })\n\n let targetProduct: OrderProduct = await tx\n .getRepository(OrderProduct)\n .findOne({ where: { id: wsd.targetProduct?.id } })\n\n targetInventory = await tx.getRepository(OrderInventory).save({\n ...targetInventory,\n domain,\n bizplace: worksheet.bizplace,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: worksheet.releaseGood,\n inventory,\n batchId,\n batchIdRef: inventory.batchIdRef,\n status: ORDER_INVENTORY_STATUS.READY_TO_PICK,\n product: await tx.getRepository(Product).findOneBy({ id: productId }),\n packingType,\n packingSize,\n orderProduct: targetProduct,\n creator: user,\n updater: user\n })\n\n const currentLockedQty: any = inventory.lockedQty\n const currentLockedUomValue: any = inventory.lockedUomValue\n\n await tx.getRepository(Inventory).save({\n ...targetInventory.inventory,\n lockedQty: Boolean(currentLockedQty)\n ? targetInventory.releaseQty + currentLockedQty\n : targetInventory.releaseQty,\n lockedUomValue: Boolean(currentLockedUomValue)\n ? targetInventory.releaseUomValue + currentLockedUomValue\n : targetInventory.releaseUomValue,\n updater: user\n })\n\n // update order product status to ASSIGNED\n await tx\n .getRepository(OrderProduct)\n .update({ id: targetProduct?.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user } as any)\n\n // 3. Create worksheet details\n await tx.getRepository(WorksheetDetail).save({\n ...wsd,\n domain,\n bizplace: worksheet.bizplace,\n worksheet,\n name: WorksheetNoGenerator.pickingDetail(),\n targetProduct,\n targetInventory,\n type: WORKSHEET_TYPE.PICKING,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: user,\n updater: user\n })\n })\n )\n}\n"]}
1
+ {"version":3,"file":"generate-release-good-worksheet-details.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, Equal } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Product } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderProduct\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'\nimport { Worksheet, WorksheetDetail } from '../../../entities'\nimport { WorksheetNoGenerator } from '../../../utils'\n\nexport const generateReleaseGoodWorksheetDetailsResolver = {\n async generateReleaseGoodWorksheetDetails(\n _: any,\n { worksheetNo, batchId, productId, packingType, packingSize, worksheetDetails },\n context: any\n ): Promise<void> {\n const { tx, domain, user } = context.state\n return await generateReleaseGoodWorksheetDetails(\n tx,\n domain,\n user,\n worksheetNo,\n batchId,\n productId,\n packingType,\n packingSize,\n worksheetDetails\n )\n }\n}\n\nexport async function generateReleaseGoodWorksheetDetails(\n tx: EntityManager,\n domain: Domain,\n user: User,\n worksheetNo: string,\n batchId: string,\n productId: string,\n packingType: string,\n packingSize: number,\n worksheetDetails: Partial<WorksheetDetail>[]\n): Promise<void> {\n // 1. Remove prev worksheet details if it's exists\n const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { name: worksheetNo, domain: { id: domain.id } },\n relations: [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.product'\n ]\n })\n\n const prevWSDs: WorksheetDetail[] = worksheet.worksheetDetails.filter((wsd: WorksheetDetail) => {\n const targetInv: OrderInventory = wsd.targetInventory\n if (targetInv.batchId === batchId && targetInv.product.id === productId && targetInv.packingType === packingType)\n return wsd.id\n })\n\n // TODO: Delete order inventories\n if (prevWSDs?.length) {\n const wsdIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.id)\n const prevOrderInvIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory.id)\n await tx.getRepository(WorksheetDetail).delete(wsdIds)\n await tx.getRepository(OrderInventory).delete(prevOrderInvIds)\n }\n\n await Promise.all(\n worksheetDetails.map(async (wsd: WorksheetDetail) => {\n // 2. Create order inventory\n let targetInventory: OrderInventory = wsd.targetInventory\n const inventory: Inventory = await tx\n .getRepository(Inventory)\n .findOne({ where: { id: targetInventory.inventory.id } })\n\n let targetProduct: OrderProduct = await tx\n .getRepository(OrderProduct)\n .findOne({ where: { id: Equal(wsd.targetProduct?.id) } })\n\n targetInventory = await tx.getRepository(OrderInventory).save({\n ...targetInventory,\n domain,\n bizplace: worksheet.bizplace,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: worksheet.releaseGood,\n inventory,\n batchId,\n batchIdRef: inventory.batchIdRef,\n status: ORDER_INVENTORY_STATUS.READY_TO_PICK,\n product: await tx.getRepository(Product).findOneBy({ id: productId }),\n packingType,\n packingSize,\n orderProduct: targetProduct,\n creator: user,\n updater: user\n })\n\n const currentLockedQty: any = inventory.lockedQty\n const currentLockedUomValue: any = inventory.lockedUomValue\n\n await tx.getRepository(Inventory).save({\n ...targetInventory.inventory,\n lockedQty: Boolean(currentLockedQty)\n ? targetInventory.releaseQty + currentLockedQty\n : targetInventory.releaseQty,\n lockedUomValue: Boolean(currentLockedUomValue)\n ? targetInventory.releaseUomValue + currentLockedUomValue\n : targetInventory.releaseUomValue,\n updater: user\n })\n\n // update order product status to ASSIGNED\n await tx\n .getRepository(OrderProduct)\n .update({ id: targetProduct?.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user } as any)\n\n // 3. Create worksheet details\n await tx.getRepository(WorksheetDetail).save({\n ...wsd,\n domain,\n bizplace: worksheet.bizplace,\n worksheet,\n name: WorksheetNoGenerator.pickingDetail(),\n targetProduct,\n targetInventory,\n type: WORKSHEET_TYPE.PICKING,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: user,\n updater: user\n })\n })\n )\n}\n"]}