@things-factory/sales-base 8.0.20 → 8.0.22

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.
Files changed (45) hide show
  1. package/dist-server/service/arrival-notice/index.d.ts +1 -1
  2. package/dist-server/service/claim/index.d.ts +1 -1
  3. package/dist-server/service/claim-detail/index.d.ts +1 -1
  4. package/dist-server/service/claim-order/index.d.ts +1 -1
  5. package/dist-server/service/collection-order/index.d.ts +1 -1
  6. package/dist-server/service/delivery-order/index.d.ts +1 -1
  7. package/dist-server/service/goods-receival-note/index.d.ts +1 -1
  8. package/dist-server/service/index.d.ts +2 -2
  9. package/dist-server/service/inventory-check/index.d.ts +1 -1
  10. package/dist-server/service/invoice/index.d.ts +1 -1
  11. package/dist-server/service/invoice-product/index.d.ts +1 -1
  12. package/dist-server/service/job-sheet/index.d.ts +1 -1
  13. package/dist-server/service/order-inventory/index.d.ts +1 -1
  14. package/dist-server/service/order-inventory/order-inventory-mutation.d.ts +1 -0
  15. package/dist-server/service/order-inventory/order-inventory-mutation.js +14 -0
  16. package/dist-server/service/order-inventory/order-inventory-mutation.js.map +1 -1
  17. package/dist-server/service/order-inventory/order-inventory-types.d.ts +8 -1
  18. package/dist-server/service/order-inventory/order-inventory-types.js +28 -0
  19. package/dist-server/service/order-inventory/order-inventory-types.js.map +1 -1
  20. package/dist-server/service/order-inventory/order-inventory.d.ts +2 -0
  21. package/dist-server/service/order-inventory/order-inventory.js +30 -3
  22. package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
  23. package/dist-server/service/order-product/index.d.ts +1 -1
  24. package/dist-server/service/order-tote/index.d.ts +1 -1
  25. package/dist-server/service/order-tote-item/index.d.ts +1 -1
  26. package/dist-server/service/order-tote-seal/index.d.ts +1 -1
  27. package/dist-server/service/purchase-order-other-charge/index.d.ts +1 -1
  28. package/dist-server/service/release-good/release-good-mutation.js +17 -10
  29. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  30. package/dist-server/service/release-good/release-good-types.d.ts +2 -0
  31. package/dist-server/service/release-good/release-good-types.js +8 -0
  32. package/dist-server/service/release-good/release-good-types.js.map +1 -1
  33. package/dist-server/service/release-good/release-good.d.ts +1 -0
  34. package/dist-server/service/release-good/release-good.js +5 -0
  35. package/dist-server/service/release-good/release-good.js.map +1 -1
  36. package/dist-server/service/retail-replenishment-order/index.d.ts +1 -1
  37. package/dist-server/service/return-order/index.d.ts +1 -1
  38. package/dist-server/service/shipping-order/index.d.ts +1 -1
  39. package/dist-server/service/transfer-order/index.d.ts +1 -1
  40. package/dist-server/service/vas/index.d.ts +1 -1
  41. package/dist-server/service/vas-order/index.d.ts +1 -1
  42. package/dist-server/tsconfig.tsbuildinfo +1 -1
  43. package/dist-server/utils/inventory-util.js +6 -2
  44. package/dist-server/utils/inventory-util.js.map +1 -1
  45. package/package.json +2 -2
@@ -327,11 +327,16 @@ async function deleteReleaseGood(tx, name, user, domain) {
327
327
  // Delete order inventories by ids
328
328
  await Promise.all(foundOIs.map(async (oi) => {
329
329
  var _a, _b;
330
- if ((_a = oi === null || oi === void 0 ? void 0 : oi.inventory) === null || _a === void 0 ? void 0 : _a.id) {
331
- oi.inventory = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: oi.inventory.id });
332
- await tx.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oi.inventory), { lockedQty: oi.inventory.lockedQty - oi.releaseQty, lockedUomValue: oi.inventory.lockedUomValue - oi.releaseUomValue, updater: user }));
330
+ if (oi === null || oi === void 0 ? void 0 : oi.requestProductDetailId) {
331
+ await tx.getRepository(order_inventory_1.OrderInventory).save(Object.assign(Object.assign({}, oi), { status: constants_1.ORDER_INVENTORY_STATUS.PENDING, orderProduct: null, releaseGood: null, bizplace: null }));
332
+ }
333
+ else {
334
+ if ((_a = oi === null || oi === void 0 ? void 0 : oi.inventory) === null || _a === void 0 ? void 0 : _a.id) {
335
+ oi.inventory = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: oi.inventory.id });
336
+ await tx.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oi.inventory), { lockedQty: oi.inventory.lockedQty - oi.releaseQty, lockedUomValue: oi.inventory.lockedUomValue - oi.releaseUomValue, updater: user }));
337
+ }
338
+ await tx.getRepository(order_inventory_1.OrderInventory).delete({ id: oi.id });
333
339
  }
334
- await tx.getRepository(order_inventory_1.OrderInventory).delete({ id: oi.id });
335
340
  if ((_b = oi === null || oi === void 0 ? void 0 : oi.orderProduct) === null || _b === void 0 ? void 0 : _b.id) {
336
341
  await tx.getRepository(order_product_1.OrderProduct).delete({ id: oi.orderProduct.id });
337
342
  }
@@ -578,14 +583,16 @@ async function generateReleaseGoodFunction(_, releaseGood, shippingOrder, shippi
578
583
  }
579
584
  for (let oi of finalOrderInventories) {
580
585
  let generatedOI = Object.assign(new order_inventory_1.OrderInventory(), oi);
581
- generatedOI = Object.assign(Object.assign({}, generatedOI), { domain: warehouseDomain, bizplace, status: constants_1.ORDER_INVENTORY_STATUS.PENDING, name: utils_1.OrderNoGenerator.orderInventory(), releaseGood: newReleaseGood, creator: user, updater: user });
586
+ generatedOI = Object.assign(Object.assign({}, generatedOI), { domain: warehouseDomain, bizplace, status: constants_1.ORDER_INVENTORY_STATUS.PENDING, name: oi.name || utils_1.OrderNoGenerator.orderInventory(), releaseGood: newReleaseGood, creator: user, updater: user });
582
587
  await tx.getRepository(order_inventory_1.OrderInventory).save(Object.assign({}, generatedOI));
583
588
  // update inventory locked qty and uom value
584
- await tx.getRepository(warehouse_base_1.Inventory).update({ id: oi.inventory.id }, {
585
- lockedQty: (((_d = oi.inventory) === null || _d === void 0 ? void 0 : _d.lockedQty) || 0) + generatedOI.releaseQty,
586
- lockedUomValue: (((_e = oi.inventory) === null || _e === void 0 ? void 0 : _e.lockedUomValue) || 0) + generatedOI.releaseUomValue,
587
- updater: user
588
- });
589
+ if (!oi.id) {
590
+ await tx.getRepository(warehouse_base_1.Inventory).update({ id: oi.inventory.id }, {
591
+ lockedQty: (((_d = oi.inventory) === null || _d === void 0 ? void 0 : _d.lockedQty) || 0) + generatedOI.releaseQty,
592
+ lockedUomValue: (((_e = oi.inventory) === null || _e === void 0 ? void 0 : _e.lockedUomValue) || 0) + generatedOI.releaseUomValue,
593
+ updater: user
594
+ });
595
+ }
589
596
  }
590
597
  if (orderVass === null || orderVass === void 0 ? void 0 : orderVass.length) {
591
598
  orderVass = await Promise.all(orderVass.map(async (orderVas) => {
@@ -1 +1 @@
1
- {"version":3,"file":"release-good-mutation.js","sourceRoot":"","sources":["../../../server/service/release-good/release-good-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { EntityManager, getConnection, In, Not, Repository } from 'typeorm'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { ApplicationType, Partner, Role, User } from '@things-factory/auth-base'\nimport {\n Bizplace,\n ContactPoint,\n getDomainUsers,\n getMyBizplace,\n getOutletBizplace,\n getPermittedBizplaces\n} from '@things-factory/biz-base'\nimport { logger } from '@things-factory/env'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { MarketplaceStore } from '@things-factory/integration-marketplace'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { MarketplaceOrder, MarketplaceProductVariation } from '@things-factory/marketplace-base'\nimport { Product, ProductBundleSetting } from '@things-factory/product-base'\nimport { PartnerSetting, Setting } from '@things-factory/setting-base'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { Inventory } from '@things-factory/warehouse-base'\n\n// import { NewOrderProduct } from '../order-product/order-product-types'\nimport {\n ATTACHMENT_TYPE,\n ORDER_INVENTORY_STATUS,\n ORDER_METHOD,\n ORDER_NUMBER_RULE_TYPE,\n ORDER_NUMBER_SETTING_KEY,\n ORDER_PRODUCT_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n ORDER_VAS_STATUS,\n PRODUCT_GROUP_TYPE\n} from '../../constants'\nimport { EcommerceController, SellercraftController } from '../../controllers'\nimport { ValidationError } from '../../errors'\nimport { InventoryUtil, OrderNoGenerator } from '../../utils'\nimport { ArrivalNotice } from '../arrival-notice/arrival-notice'\nimport { confirmArrivalNoticeFunction, deleteArrivalNotice } from '../arrival-notice/arrival-notice-mutation'\nimport { OrderInventory } from '../order-inventory/order-inventory'\nimport { OrderProduct } from '../order-product/order-product'\nimport { OrderVas } from '../order-vas/order-vas'\nimport { NewReleaseGood, ReleaseGoodPatch, ShippingOrderInfoPatch } from '../release-good/release-good-types'\nimport { ShippingOrder } from '../shipping-order/shipping-order'\nimport { ShippingOrderPatch } from '../shipping-order/shipping-order-types'\nimport { Vas } from '../vas/vas'\nimport { ReleaseGood } from './release-good'\nimport { bulkReleaseGoodsAvailableItemsFunction } from './release-good-query'\n\n@Resolver(ReleaseGood)\nexport class ReleaseGoodMutation {\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => [ReleaseGood])\n async bulkAddReleaseGoods(\n @Ctx() context: ResolverContext,\n @Arg('rawReleaseGoods', type => [NewReleaseGood], { nullable: true }) rawReleaseGoods: NewReleaseGood[],\n @Arg('bizplaceId', type => String) bizplaceId: string\n ): Promise<ReleaseGood[]> {\n const { domain, user, tx } = context.state\n\n if (!bizplaceId) throw new Error('company ID is not provided')\n\n let createdReleaseGoods: ReleaseGood[] = []\n const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)\n\n const roNoSetting: Setting = await settingRepo.findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE\n }\n })\n\n let releaseGoods: Partial<ReleaseGood[]> = extractRawReleaseGoods(rawReleaseGoods)\n\n let errorsCaught: any[] = []\n for (let i = 0, l = releaseGoods.length; i < l; i++) {\n // generate release good by group to avoid duplication\n // if this function is called simultaneously by different users\n try {\n await getConnection().transaction(async (childTx: EntityManager) => {\n const existingReleaseGood: ReleaseGood = await childTx.getRepository(ReleaseGood).findOne({\n where: {\n ...Object.fromEntries(\n Object.entries(releaseGoods[i]).filter(([_, val]) => !/^\\s*$/.test(val) && _ != 'orderInventories')\n ),\n domain: { id: domain.id }\n }\n })\n if (existingReleaseGood) throw new Error('this order is already exist in the system')\n\n let availableItems: any[] = await bulkReleaseGoodsAvailableItemsFunction(\n [...releaseGoods[i].orderInventories],\n bizplaceId,\n context,\n childTx\n )\n\n if (availableItems.some(item => !item.releaseQty || item.releaseQty > item.assignedQty))\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.INSUFFICIENT_STOCK,\n detail: { data: JSON.stringify(availableItems) }\n })\n\n // update orderInventories if availableItems are valid\n releaseGoods[i].orderInventories = availableItems\n\n const createdReleaseGood: ReleaseGood = await bulkGenerateReleaseGood(\n releaseGoods[i],\n bizplaceId,\n roNoSetting,\n domain,\n user,\n childTx\n )\n\n createdReleaseGoods.push(createdReleaseGood)\n })\n } catch (error) {\n let rawReleaseGoods = formRawReleaseGoods(releaseGoods[i], error.message)\n errorsCaught.push(...rawReleaseGoods)\n }\n }\n\n let confirmedReleaseGoods: ReleaseGood[] = []\n\n if (createdReleaseGoods.length)\n try {\n confirmedReleaseGoods = await bulkConfirmReleaseGoods(\n createdReleaseGoods.map(rg => rg.name),\n domain,\n user,\n context,\n tx\n )\n } catch (error) {}\n\n if (errorsCaught.length)\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.INVALID_DATA_FOUND,\n detail: { data: JSON.stringify(errorsCaught) }\n })\n\n return confirmedReleaseGoods\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteReleaseGood(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx, user, domain } = context.state\n return await deleteReleaseGood(tx, name, user, domain)\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteReleaseGoods(\n @Arg('names', type => [String]) names: string[],\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { tx } = context.state\n await tx.getRepository(ReleaseGood).delete({\n domain: { id: context.state.domain.id },\n name: In(names)\n })\n return true\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async generateReleaseGood(\n @Ctx() context: ResolverContext,\n @Arg('attachments', type => [GraphQLUpload], { nullable: true }) attachments?: FileUpload[],\n @Arg('releaseGood', type => NewReleaseGood, { nullable: true }) releaseGood?: NewReleaseGood,\n @Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder?: ShippingOrderPatch,\n @Arg('shippingOrderInfo', type => ShippingOrderInfoPatch, { nullable: true })\n shippingOrderInfo?: ShippingOrderInfoPatch\n ): Promise<ReleaseGood> {\n const { tx } = context.state\n const createdReleaseGood: ReleaseGood = await generateReleaseGoodFunction(\n null,\n releaseGood,\n shippingOrder,\n shippingOrderInfo,\n attachments,\n context,\n tx\n )\n\n return createdReleaseGood\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async updateReleaseGoodDetails(\n @Ctx() context: ResolverContext,\n @Arg('releaseGood', type => ReleaseGoodPatch, { nullable: true }) releaseGood?: ReleaseGoodPatch,\n @Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder?: ShippingOrderPatch,\n @Arg('shippingOrderInfo', type => ShippingOrderInfoPatch, { nullable: true })\n shippingOrderInfo?: ShippingOrderInfoPatch\n ): Promise<ReleaseGood> {\n const { tx, domain, user } = context.state\n let foundReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { id: releaseGood.id, domain: { id: domain.id } },\n relations: ['shippingOrder']\n })\n\n if (!foundReleaseGood) {\n throw new Error(`Release order ${releaseGood.id} is not found.`)\n }\n\n // case to update existing shippingOrder\n if (shippingOrder !== null) {\n shippingOrder.remark = shippingOrder.exportRemark\n shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)\n delete shippingOrder.exportRemark\n }\n\n if (foundReleaseGood.shippingOrder && shippingOrder) {\n await tx.getRepository(ShippingOrder).update(foundReleaseGood.shippingOrder.id, shippingOrder)\n }\n // case for new shippingOrder\n else if (!foundReleaseGood.shippingOrder && shippingOrder) {\n let newShippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).save({\n ...shippingOrder,\n name: OrderNoGenerator.shippingOrder(),\n domain,\n bizplace: await getMyBizplace(domain, user),\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n releaseGood.shippingOrder = newShippingOrder\n }\n\n foundReleaseGood = await tx.getRepository(ReleaseGood).save({\n ...(foundReleaseGood as any),\n ...releaseGood,\n ...shippingOrderInfo,\n remark: releaseGood?.remark ? releaseGood.remark : null\n })\n\n return foundReleaseGood\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async confirmReleaseGood(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReleaseGood> {\n const { tx } = context.state\n const releaseGood: ReleaseGood = await confirmReleaseGood(name, context, tx)\n\n // If current RO has cross docking\n if (releaseGood.crossDocking) {\n const { arrivalNotice } = await tx.getRepository(ReleaseGood).findOne({\n where: { id: releaseGood.id },\n relations: ['arrivalNotice']\n })\n\n // If status of related GAN is not equal to PENDING_RECEIVE (i.e. Wasn't confirmed yet.)\n if (arrivalNotice.status !== ORDER_STATUS.PENDING_RECEIVE) {\n await confirmArrivalNoticeFunction(arrivalNotice.name, context, tx)\n }\n }\n\n return releaseGood\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async receiveReleaseGood(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReleaseGood> {\n const { tx } = context.state\n const releaseGood: ReleaseGood = await receiveReleaseGood(name, context, tx)\n return releaseGood\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async rejectReleaseGood(\n @Arg('name') name: string,\n @Arg('patch', type => ReleaseGoodPatch) patch: ReleaseGoodPatch,\n @Ctx() context: ResolverContext\n ): Promise<ReleaseGood> {\n const { tx } = context.state\n\n return await rejectReleaseGood(tx, context, name, patch.remark)\n }\n\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async addReleaseGood(\n @Ctx() context: ResolverContext,\n @Arg('releaseGood', type => NewReleaseGood, { nullable: true }) releaseGood: NewReleaseGood,\n @Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder: ShippingOrderPatch,\n @Arg('file', type => GraphQLUpload, { nullable: true }) file: FileUpload\n ): Promise<ReleaseGood> {\n const { tx } = context.state\n const createdRO: ReleaseGood = await generateReleaseGoodFunction(\n null,\n releaseGood,\n shippingOrder,\n null,\n file,\n context,\n tx\n )\n\n const confirmedRO: ReleaseGood = await confirmReleaseGood(createdRO.name, context, tx)\n\n const receivedRO: ReleaseGood = await receiveReleaseGood(confirmedRO.name, context, tx)\n\n return receivedRO\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async executeOrderRemark(\n @Arg('releaseGoodNo') releaseGoodNo: string,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx, user } = context.state\n\n await tx.getRepository(ReleaseGood).update(\n {\n domain: { id: domain.id },\n name: releaseGoodNo\n },\n {\n checkedRemarkAt: new Date(),\n checkedRemarkUser: user,\n checkedRemarkBy: user.name\n }\n )\n\n return true\n }\n}\n\nexport async function deleteReleaseGood(tx: EntityManager, name: string, user: User, domain: Domain): Promise<boolean> {\n let foundReleaseOrder: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name },\n relations: [\n 'arrivalNotice',\n 'orderInventories',\n 'orderInventories.orderProduct',\n 'orderInventories.inventory',\n 'orderVass',\n 'shippingOrder',\n 'creator',\n 'updater'\n ]\n })\n\n if (!foundReleaseOrder) throw new Error(`Release order doesn't exists.`)\n const foundOIs: OrderInventory[] = foundReleaseOrder.orderInventories\n const foundOVs: OrderVas[] = foundReleaseOrder.orderVass\n const foundSO: ShippingOrder = foundReleaseOrder.shippingOrder\n\n let foundAttachment: Attachment\n if (foundReleaseOrder?.ownTransport) {\n foundAttachment = await tx.getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n refBy: foundReleaseOrder.id,\n category: ATTACHMENT_TYPE.DELIVERY_ORDER\n }\n })\n }\n\n // Delete order inventories by ids\n await Promise.all(\n foundOIs.map(async (oi: OrderInventory) => {\n if (oi?.inventory?.id) {\n oi.inventory = await tx.getRepository(Inventory).findOneBy({ id: oi.inventory.id })\n\n await tx.getRepository(Inventory).save({\n ...oi.inventory,\n lockedQty: oi.inventory.lockedQty - oi.releaseQty,\n lockedUomValue: oi.inventory.lockedUomValue - oi.releaseUomValue,\n updater: user\n })\n }\n\n await tx.getRepository(OrderInventory).delete({ id: oi.id })\n\n if (oi?.orderProduct?.id) {\n await tx.getRepository(OrderProduct).delete({ id: oi.orderProduct.id })\n }\n\n return oi\n })\n )\n\n // 2. delete order vass\n const vasIds = foundOVs.map((vas: OrderVas) => vas.id)\n if (vasIds.length) {\n await tx.getRepository(OrderVas).delete({ id: In(vasIds) })\n }\n\n if (foundAttachment) {\n await tx.getRepository(Attachment).delete({ domain: { id: domain.id }, id: foundAttachment.id })\n }\n\n // 4. Remove relation with GAN if it's cross docking\n if (foundReleaseOrder.crossDocking && foundReleaseOrder.arrivalNotice?.id) {\n let arrivalNotice: ArrivalNotice = foundReleaseOrder.arrivalNotice\n arrivalNotice.releaseGood = null\n arrivalNotice = await tx.getRepository(ArrivalNotice).save(arrivalNotice)\n\n await tx.getRepository(ReleaseGood).delete({ domain: { id: domain.id }, name })\n await deleteArrivalNotice(tx, arrivalNotice.name, user, domain)\n } else {\n await tx.getRepository(ReleaseGood).delete({ domain: { id: domain.id }, name })\n }\n\n // 5. if there is SO, delete SO\n if (foundSO) {\n await tx.getRepository(ShippingOrder).delete({ domain: { id: domain.id }, id: foundSO.id })\n }\n return true\n}\n\nexport async function generateReleaseGoodFunction(\n _: any,\n releaseGood: any,\n shippingOrder: ShippingOrderPatch,\n shippingOrderInfo: any,\n attachments: FileUpload[],\n context: ResolverContext,\n tx?: EntityManager\n): Promise<ReleaseGood> {\n try {\n const { domain, user } = context.state\n const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)\n\n // let orderInventories: OrderInventory[] = releaseGood.orderInventories\n // let orderVass: OrderVas[] = releaseGood.orderVass\n\n let { orderInventories, orderVass }: { orderInventories: OrderInventory[]; orderVass: OrderVas[] } = releaseGood\n\n let bizplace: Bizplace\n let warehouseDomain: Domain = domain\n let finalOrderInventories: OrderInventory[] = []\n\n if (releaseGood.deliverTo) {\n const deliverTo: ContactPoint = await tx.getRepository(ContactPoint).findOne({\n where: { id: releaseGood.deliverTo.id },\n relations: ['bizplace']\n })\n\n if (!deliverTo) throw new Error('contact point does not exist')\n\n releaseGood.deliverTo = deliverTo\n }\n\n /** Validate user permitted Bizplace */\n if (releaseGood.warehouseId) {\n bizplace = await getOutletBizplace(releaseGood.warehouseId)\n } else if (releaseGood.customerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == releaseGood.customerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n bizplace = await tx.getRepository(Bizplace).findOne({\n where: {\n id: releaseGood.customerBizplaceId\n },\n relations: ['domain']\n })\n const customerPartner: Partner = await tx.getRepository(Partner).findOne({\n where: { partnerDomain: { id: bizplace.domain.id }, domain: { id: domain.id } },\n relations: ['domain']\n })\n warehouseDomain = customerPartner.domain\n } else if (releaseGood.partnerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == releaseGood.partnerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n bizplace = await tx.getRepository(Bizplace).findOne({\n where: {\n id: releaseGood.partnerBizplaceId\n },\n relations: ['domain']\n })\n warehouseDomain = domain\n } else {\n bizplace = await getMyBizplace(domain, user)\n }\n /** End Validate user permitted Bizplace Section */\n\n /** Validate Release Order Product Quantity */\n await InventoryUtil.validateWarehousePartnersProductsQuantity(domain, bizplace, orderInventories, context, tx)\n /** End Validate Release Order Product Quantity Section */\n\n const orderSource: string = releaseGood.source\n switch (orderSource) {\n case ApplicationType.SELLERCRAFT:\n const sellercraft: Sellercraft = await tx\n .getRepository(Sellercraft)\n .findOneBy({ domain: { id: bizplace.domain.id }, status: SellercraftStatus.ACTIVE })\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.checkExistingReleaseGood(sellercraft, releaseGood)\n }\n\n break\n\n case ApplicationType.MMS:\n const refNo: string = releaseGood.refNo\n const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: {\n domain: { id: warehouseDomain.id },\n refNo,\n status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))\n },\n relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']\n })\n\n if (foundReleaseGood) {\n const customerCompanyDomain: Domain = foundReleaseGood.bizplace.company.domain\n const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({\n where: { orderNo: refNo, domain: { id: customerCompanyDomain.id } }\n })\n\n // Need to restructure the validation\n if (marketplaceOrder?.isSplitted) {\n const refNo2: string = releaseGood.refNo2\n const foundSplittedReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: {\n domain: { id: warehouseDomain.id },\n refNo2,\n status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))\n },\n relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']\n })\n\n if (foundSplittedReleaseGood) throw new Error('Existing release order found')\n } else {\n throw new Error('Existing release order found')\n }\n }\n break\n\n default:\n break\n }\n\n let newReleaseGood: ReleaseGood = new ReleaseGood()\n\n /** Generate Shipping Order */\n if (shippingOrder) {\n shippingOrder.remark = shippingOrder.exportRemark\n if (shippingOrder.containerClosureDate !== undefined) {\n shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)\n }\n delete shippingOrder.exportRemark\n\n const createdSO: ShippingOrder = await tx.getRepository(ShippingOrder).save({\n ...shippingOrder,\n name: OrderNoGenerator.shippingOrder(),\n domain,\n bizplace,\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n newReleaseGood.shippingOrder = createdSO\n }\n /** End Generate Shipping Order Section */\n\n // find RO number rule setting\n const roNoSetting: Setting = await settingRepo.findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE\n }\n })\n\n newReleaseGood = {\n ...newReleaseGood,\n name: roNoSetting\n ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })\n : OrderNoGenerator.releaseGood(),\n domain: warehouseDomain,\n bizplace: bizplace,\n collectionOrderNo: releaseGood.collectionOrderNo,\n courierOption: releaseGood.courierOption,\n exportOption: releaseGood.exportOption,\n ownTransport: releaseGood.ownTransport,\n packingOption: releaseGood.packingOption,\n recall: releaseGood.recall,\n marketplaceOrderStatus: releaseGood?.marketplaceOrderStatus || null,\n deliverTo: releaseGood.deliverTo,\n billingAddress:\n releaseGood.type == 'b2c' ? releaseGood?.billingAddress || null : shippingOrderInfo.billingAddress || null,\n deliveryAddress1: releaseGood?.deliveryAddress1 || shippingOrderInfo.deliveryAddress1 || null,\n deliveryAddress2: releaseGood?.deliveryAddress2 || null,\n deliveryAddress3: releaseGood?.deliveryAddress3 || null,\n deliveryAddress4: releaseGood?.deliveryAddress4 || null,\n deliveryAddress5: releaseGood?.deliveryAddress5 || null,\n attentionTo: releaseGood.type == 'b2c' ? releaseGood?.attentionTo || null : shippingOrderInfo.attentionTo || null,\n attentionCompany:\n releaseGood.type == 'b2c' ? releaseGood?.companyName || null : shippingOrderInfo.attentionCompany || null,\n city: releaseGood.type == 'b2c' ? releaseGood?.city || null : shippingOrderInfo.city || null,\n state: releaseGood.type == 'b2c' ? releaseGood?.state || null : shippingOrderInfo.state || null,\n postalCode: releaseGood.type == 'b2c' ? releaseGood?.postalCode || null : shippingOrderInfo.postalCode || null,\n country: releaseGood.type == 'b2c' ? releaseGood?.country || null : shippingOrderInfo.country || null,\n phone1: releaseGood.type == 'b2c' ? releaseGood?.phone1 || null : shippingOrderInfo.phone1 || null,\n phone2: releaseGood?.phone2 || null,\n email: releaseGood?.email || null,\n billingCity: releaseGood.type == 'b2c' ? releaseGood?.billingCity || null : shippingOrderInfo.billingCity || null,\n billingCountry:\n releaseGood.type == 'b2c' ? releaseGood?.billingCountry || null : shippingOrderInfo.billingCountry || null,\n billingPostalCode:\n releaseGood.type == 'b2c'\n ? releaseGood?.billingPostalCode || null\n : shippingOrderInfo.billingPostalCode || null,\n billingState:\n releaseGood.type == 'b2c' ? releaseGood?.billingState || null : shippingOrderInfo.billingState || null,\n transporter: releaseGood?.transporter,\n trackingNo: releaseGood?.trackingNo,\n airwayBill: releaseGood?.airwayBill,\n invoice: releaseGood?.invoice,\n refNo: releaseGood.refNo,\n refNo2: releaseGood.refNo2,\n refNo3: releaseGood.refNo3,\n remark: releaseGood?.remark || null,\n releaseDate: releaseGood.releaseDate,\n truckNo: releaseGood.truckNo,\n bundleInfo: releaseGood?.bundleInfo || [],\n orderInventories: releaseGood.orderInventories,\n type: releaseGood?.type ? releaseGood.type : 'b2b',\n orderMethod: releaseGood?.orderMethod\n ? releaseGood.orderMethod\n : releaseGood.orderInventories[0]?.inventory?.id\n ? ORDER_METHOD.SELECT_BY_PALLET\n : ORDER_METHOD.SELECT_BY_PRODUCT,\n status: ORDER_STATUS.PENDING,\n packageId: releaseGood?.packageId,\n storeName: releaseGood?.storeName,\n storeId: releaseGood?.storeId,\n routeId: releaseGood?.routeId,\n stopId: releaseGood?.stopId,\n creator: user,\n updater: user\n }\n\n // Make relation with GAN for cross docking\n let crossDockingGAN: ArrivalNotice = undefined\n if (releaseGood.crossDocking && releaseGood.ganNo) {\n crossDockingGAN = await tx.getRepository(ArrivalNotice).findOne({\n where: {\n domain: { id: domain.id },\n bizplace: { id: bizplace.id },\n name: releaseGood.ganNo,\n status: ORDER_STATUS.PENDING\n }\n })\n if (!crossDockingGAN) throw new Error(`Failed to find GAN (${releaseGood.ganNo}) for cross docking`)\n\n newReleaseGood.arrivalNotice = crossDockingGAN\n }\n\n // Make relation with RO for cross docking\n if (newReleaseGood.crossDocking) {\n crossDockingGAN.releaseGood = newReleaseGood\n await tx.getRepository(ArrivalNotice).save(crossDockingGAN)\n }\n\n // Check if there is bundle item in orderInventories\n const bundledOIs: OrderInventory[] = orderInventories.filter(\n oi => (oi.product as any).groupType === PRODUCT_GROUP_TYPE.BUNDLE\n )\n\n const singleProductOIs: OrderInventory[] = orderInventories.filter(\n oi => (oi.product as any).groupType !== PRODUCT_GROUP_TYPE.BUNDLE\n )\n\n const splitBundleOIs: OrderInventory[] = []\n\n // If there is bundle item, split each item in that bundle into into each product\n if (bundledOIs && bundledOIs.length > 0) {\n await Promise.all(\n bundledOIs.map(async (oi: OrderInventory) => {\n let splitOI: OrderInventory = null\n\n const pbSettings: ProductBundleSetting[] = await tx.getRepository(ProductBundleSetting).find({\n where: { productBundle: { id: oi.product.id } },\n relations: ['product', 'productBundle']\n })\n\n pbSettings.forEach(pbs => {\n splitOI = {\n ...oi,\n releaseQty: oi.releaseQty * pbs.bundleQty,\n releaseUomValue: oi.releaseUomValue * pbs.bundleQty * pbs.product.primaryValue,\n packingType: pbs.product.packingType,\n batchId: '',\n product: {\n id: pbs.product.id,\n name: pbs.product.name,\n groupType: PRODUCT_GROUP_TYPE.SINGLE\n } as any\n }\n splitBundleOIs.push(splitOI)\n })\n })\n )\n }\n\n orderInventories = [...singleProductOIs, ...splitBundleOIs]\n\n newReleaseGood.noOfItems = orderInventories.length\n newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)\n\n for (let oi of orderInventories) {\n let newOrderInv: OrderInventory = Object.assign({}, oi)\n newOrderInv = {\n ...newOrderInv,\n domain: warehouseDomain,\n bizplace: bizplace,\n status: ORDER_INVENTORY_STATUS.PENDING,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: newReleaseGood,\n product: await tx.getRepository(Product).findOneBy({ id: oi.product.id }),\n creator: user,\n updater: user\n }\n\n let newOrderProduct: OrderProduct = Object.assign(new OrderProduct(), newOrderInv)\n newOrderProduct = {\n ...newOrderProduct,\n packQty: 0,\n actualPackQty: 0,\n palletQty: 0,\n actualPalletQty: 0,\n status: ORDER_PRODUCT_STATUS.ASSIGNED\n }\n\n newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)\n\n if (newOrderInv.inventory?.id) {\n const foundInv: Inventory = await tx.getRepository(Inventory).findOneBy({ id: newOrderInv.inventory.id })\n newOrderInv.inventory = foundInv\n newOrderInv.orderProduct = newOrderProduct\n\n finalOrderInventories.push(newOrderInv)\n } else {\n // Preassign Inventories\n const inventoryAssignmentSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, name: 'rule-for-inventory-assignment' }\n })\n\n let locationSortingRules = []\n if (inventoryAssignmentSetting) {\n let locationSetting = JSON.parse(inventoryAssignmentSetting.value)\n for (const key in locationSetting) {\n locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })\n }\n }\n\n let assignedOrderInventories: OrderInventory[] = await InventoryUtil.autoAssignInventoryForRelease(\n newOrderInv.product,\n oi,\n oi.packingType,\n locationSortingRules,\n bizplace,\n warehouseDomain,\n tx,\n oi.batchId\n )\n\n assignedOrderInventories = assignedOrderInventories.map(aoi => {\n return {\n ...aoi,\n orderProduct: newOrderProduct\n }\n })\n\n finalOrderInventories.push(...assignedOrderInventories)\n }\n }\n\n for (let oi of finalOrderInventories) {\n let generatedOI: OrderInventory = Object.assign(new OrderInventory(), oi)\n generatedOI = {\n ...generatedOI,\n domain: warehouseDomain,\n bizplace,\n status: ORDER_INVENTORY_STATUS.PENDING,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: newReleaseGood,\n creator: user,\n updater: user\n }\n\n await tx.getRepository(OrderInventory).save({ ...generatedOI })\n\n // update inventory locked qty and uom value\n await tx.getRepository(Inventory).update({ id: oi.inventory.id }, {\n lockedQty: (oi.inventory?.lockedQty || 0) + generatedOI.releaseQty,\n lockedUomValue: (oi.inventory?.lockedUomValue || 0) + generatedOI.releaseUomValue,\n updater: user\n } as any)\n }\n\n if (orderVass?.length) {\n orderVass = await Promise.all(\n orderVass.map(async orderVas => {\n if (orderVas?.targetProduct?.id) {\n orderVas.targetProduct = await tx.getRepository(Product).findOneBy({ id: orderVas.targetProduct.id })\n }\n\n let newOrderVas: OrderVas = {\n ...orderVas,\n domain: warehouseDomain,\n bizplace,\n name: OrderNoGenerator.releaseVas(),\n vas: await tx.getRepository(Vas).findOneBy({ id: orderVas.vas.id }),\n type: ORDER_TYPES.RELEASE_OF_GOODS,\n releaseGood: newReleaseGood,\n status: ORDER_VAS_STATUS.PENDING,\n creator: user,\n updater: user\n }\n\n if (orderVas?.inventory?.id) {\n newOrderVas.inventory = await tx.getRepository(Inventory).findOneBy({ id: orderVas.inventory.id })\n }\n\n return newOrderVas\n })\n )\n\n await tx.getRepository(OrderVas).save(orderVass)\n }\n\n if (attachments?.length > 0) {\n const files: Partial<Attachment>[] = attachments.map(attachment => {\n return {\n file: attachment,\n refType: ATTACHMENT_TYPE.DELIVERY_ORDER,\n refBy: newReleaseGood.id,\n category: ATTACHMENT_TYPE.DELIVERY_ORDER /* TODO use refType */\n }\n })\n await createAttachments(_, { attachments: files }, context)\n }\n\n const directReceiveSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'enable-direct-receive-release-order' }\n })\n\n if (directReceiveSetting) {\n const partnerDirectReceiveSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: directReceiveSetting?.id },\n domain: { id: domain.id },\n partnerDomain: { id: bizplace?.domain.id }\n }\n })\n\n // If status of create RO is PENDING then directly CONFIRM -> RECEIVE\n if (\n !isNaN(Number(partnerDirectReceiveSetting?.value)) &&\n !isNaN(parseFloat(partnerDirectReceiveSetting?.value)) &&\n newReleaseGood.status === ORDER_STATUS.PENDING\n ) {\n let partnerDirectReceiveSettingValue = parseFloat(partnerDirectReceiveSetting.value)\n\n // CONFIRM if setting value is > 0\n if (partnerDirectReceiveSettingValue > 0) await confirmReleaseGood(newReleaseGood.name, context, tx)\n\n // RECEIVE if setting value is > 1\n if (partnerDirectReceiveSettingValue > 1) await receiveReleaseGood(newReleaseGood.name, context, tx)\n }\n }\n\n return newReleaseGood\n } catch (error) {\n throw error\n }\n}\n\nexport async function confirmReleaseGood(name: string, context: any, tx?: EntityManager): Promise<ReleaseGood> {\n const { user, domain } = context.state\n\n let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { name, status: ORDER_STATUS.PENDING },\n relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain', 'orderVass']\n })\n\n if (!foundReleaseGood) throw new Error(`Release good order doesn't exists.`)\n\n // query orderInventories separately from releaseGood to reduce resource usage\n let foundOIs: OrderInventory[] = await tx.getRepository(OrderInventory).find({\n where: { domain: { id: domain.id }, releaseGood: { id: foundReleaseGood.id } },\n relations: ['product']\n })\n\n // query orderProducts separately from releaseGood to reduce resource usage\n let foundOPs: OrderProduct[] = await tx.getRepository(OrderProduct).find({\n where: { domain: { id: domain.id }, releaseGood: { id: foundReleaseGood.id } },\n relations: ['bizplace', 'product', 'product.productDetails']\n })\n\n let foundBundleInfo: any[] = JSON.parse(foundReleaseGood.bundleInfo)\n let foundOVs: OrderVas[] = foundReleaseGood.orderVass\n let customerBizplace: Bizplace = foundReleaseGood.bizplace\n const companyDomain: Domain = customerBizplace?.company.domain\n\n const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: { domain: { id: foundReleaseGood.bizplace.domain.id }, status: SellercraftStatus.ACTIVE },\n relations: ['domain']\n })\n\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n\n let updateSCStock = async sellercraft => {\n if (sellercraft) {\n await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'CONFIRM_ORDER')\n }\n }\n\n const orderSource: string = foundReleaseGood.source\n switch (orderSource) {\n case ApplicationType.SELLERCRAFT:\n if (foundReleaseGood.type == 'b2c' && sellercraft) {\n try {\n let rg = await sellercraftCtrl.packOrder(sellercraft, {\n ...foundReleaseGood,\n orderProducts: foundOPs\n })\n foundReleaseGood = rg\n } catch (error) {\n logger.error(\n `release-good-mutation[confirmReleaseGood]:(data:${JSON.stringify({\n sellercraft,\n foundReleaseGood,\n domain,\n user\n })}) ${error} `\n )\n }\n }\n break\n\n case ApplicationType.MMS:\n // find for any existing marketplace store connections\n let marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({\n where: { domain: { id: companyDomain.id }, status: 'ACTIVE' },\n relations: ['marketplaceDistributors']\n })\n\n const foundMarketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({\n where: { domain: { id: companyDomain.id }, orderNo: foundReleaseGood.refNo },\n relations: ['marketplaceStore']\n })\n\n let matchedMarketplaceStore: MarketplaceStore\n if (foundMarketplaceOrder) {\n matchedMarketplaceStore = marketplaceStores.filter(\n marketplaceStore => marketplaceStore.id == foundMarketplaceOrder.marketplaceStore.id\n )[0]\n }\n\n let combinedOrderInventories: any[] = foundOIs.map(oi => {\n return {\n sku: oi.product.sku,\n releaseQty: oi.releaseQty\n }\n })\n\n if (foundBundleInfo?.length) {\n foundBundleInfo.map(bundle => {\n combinedOrderInventories.push({\n sku: bundle.sku,\n releaseQty: bundle.releaseQty\n })\n })\n }\n\n for (let oi of combinedOrderInventories) {\n let foundMarketplaceProductVariations: MarketplaceProductVariation[] = await tx\n .getRepository(MarketplaceProductVariation)\n .find({\n where: { domain: { id: companyDomain.id }, sku: oi.sku },\n relations: ['marketplaceProduct', 'marketplaceProduct.marketplaceStore']\n })\n\n if (foundMarketplaceProductVariations) {\n await Promise.all(\n foundMarketplaceProductVariations.map(async variation => {\n if (variation.marketplaceProduct.marketplaceStore.reserveEnabled) {\n variation.reserveQty -= oi.releaseQty\n }\n\n await tx.getRepository(MarketplaceProductVariation).save(variation)\n })\n )\n }\n }\n\n if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {\n marketplaceStores = marketplaceStores.filter(marketplaceStore => marketplaceStore.isAutoUpdateStockQty)\n let productIds: string[] = foundOIs.map(oi => oi.product.id)\n productIds = Array.from(new Set([...productIds]))\n const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, productIds, companyDomain)\n }\n\n updateSCStock(sellercraft)\n break\n\n default:\n updateSCStock(sellercraft)\n break\n }\n\n // 1. RO Status change (PENDING => PENDING_RECEIVE)\n const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).save({\n ...foundReleaseGood,\n status: ORDER_STATUS.PENDING_RECEIVE,\n updater: user\n })\n\n // 1. Update status of order inventories\n foundOIs = foundOIs.map((orderInventory: OrderInventory) => {\n return {\n ...orderInventory,\n status: ORDER_INVENTORY_STATUS.PENDING_RECEIVE,\n updater: user\n }\n })\n await tx.getRepository(OrderInventory).save(foundOIs)\n\n // 2. Update status of order vass\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((orderVas: OrderVas) => {\n return {\n ...orderVas,\n status: ORDER_VAS_STATUS.PENDING_RECEIVE,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // notification logics\n // get Office Admin Users\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `New Release Order from ${customerBizplace.name}`,\n body: `New incoming order, ${foundReleaseGood.name} is pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n }\n\n return releaseGood\n}\n\nexport async function receiveReleaseGood(name: string, context: any, tx: EntityManager): Promise<ReleaseGood> {\n const { domain, user } = context.state\n\n const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: ['bizplace', 'orderInventories', 'orderVass']\n })\n\n if (!foundReleaseGood) throw new Error(`Release good order doesn't exists.`)\n let foundOIs: OrderInventory[] = foundReleaseGood.orderInventories\n let foundOVs: OrderVas[] = foundReleaseGood.orderVass\n let customerBizplace: Bizplace = foundReleaseGood.bizplace\n\n // 1. RO Status change (PENDING_RECEIVE => PENDING_WORKSHEET)\n const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).save({\n ...foundReleaseGood,\n status: ORDER_STATUS.PENDING_WORKSHEET,\n acceptedBy: user,\n acceptedAt: new Date(),\n updater: user\n })\n\n // 1. Update status of order inventories\n foundOIs = foundOIs.map((orderInventory: OrderInventory) => {\n return {\n ...orderInventory,\n status: ORDER_INVENTORY_STATUS.PENDING_WORKSHEET,\n updater: user\n }\n })\n await tx.getRepository(OrderInventory).save(foundOIs)\n\n // 2. Update status of order vass\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((orderVas: OrderVas) => {\n return {\n ...orderVas,\n status: ORDER_VAS_STATUS.READY_TO_PROCESS,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // notification logics\n // get Office Admin Users\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `New Release Order from ${customerBizplace.name}`,\n body: `New incoming order, ${foundReleaseGood.name} is pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n }\n\n return releaseGood\n}\n\nexport async function rejectReleaseGood(\n tx: EntityManager,\n context: ResolverContext,\n name: string,\n remark: string\n): Promise<ReleaseGood> {\n const { domain, user } = context.state\n\n const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: [\n 'bizplace',\n 'bizplace.domain',\n 'orderProducts',\n 'orderProducts.product',\n 'orderProducts.product.productDetails',\n 'orderInventories',\n 'orderInventories.inventory',\n 'orderVass',\n 'shippingOrder'\n ]\n })\n\n if (!releaseGood) throw new Error(`Release good doesn't exists.`)\n if (!remark) throw new Error('Remark is not exist.')\n\n let foundOIs: OrderInventory[] = releaseGood.orderInventories\n let foundOVs: OrderVas[] = releaseGood.orderVass\n let foundOPs: OrderProduct[] = releaseGood.orderProducts\n\n // 1. Update status of order products (PENDING_RECEIVE => REJECTED)\n if (foundOIs && foundOIs.length) {\n await tx.getRepository(OrderInventory).save(\n await Promise.all(\n foundOIs.map(async (oi: OrderInventory) => {\n if (oi?.inventory?.id) {\n oi.inventory = await tx.getRepository(Inventory).findOneBy({ id: oi.inventory.id })\n\n await tx.getRepository(Inventory).save({\n ...oi.inventory,\n lockedQty: oi.inventory.lockedQty - oi.releaseQty,\n lockedUomValue: oi.inventory.lockedUomValue - oi.releaseUomValue,\n updater: user\n })\n }\n\n oi.status = ORDER_INVENTORY_STATUS.REJECTED\n oi.updater = user\n return oi\n })\n )\n )\n }\n\n if (foundOPs && foundOPs.length) {\n const orderSource: string = releaseGood.source\n switch (orderSource) {\n case ApplicationType.SELLERCRAFT:\n const sellercraft: Sellercraft = await tx\n .getRepository(Sellercraft)\n .findOneBy({ domain: { id: releaseGood.bizplace.domain.id }, status: SellercraftStatus.ACTIVE })\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'REJECT_ORDER')\n }\n break\n\n default:\n break\n }\n\n await tx.getRepository(OrderProduct).save(\n await Promise.all(\n foundOPs.map(async (op: OrderProduct) => {\n op.status = ORDER_PRODUCT_STATUS.REJECTED\n op.updater = user\n return op\n })\n )\n )\n }\n\n // 2. Update status of order vass if it exists (PENDING_RECEIVE => REJECTED)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n ov.status = ORDER_VAS_STATUS.REJECTED\n ov.updater = user\n return ov\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n if (releaseGood.shippingOrder) {\n // 2. 1) if it's yes update status of collection order\n const shippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).findOne({\n where: { domain: { id: domain.id }, name: releaseGood.shippingOrder.name }\n })\n\n shippingOrder.status = ORDER_STATUS.REJECTED\n shippingOrder.updater = user\n await tx.getRepository(ShippingOrder).save(shippingOrder)\n }\n\n releaseGood.remark = remark\n releaseGood.status = ORDER_STATUS.REJECTED\n releaseGood.updater = user\n await tx.getRepository(ReleaseGood).save(releaseGood)\n\n // notification logics\n const users: any[] = await getDomainUsers(releaseGood?.bizplace, tx)\n\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${releaseGood.name}`,\n body: `Your RO has been rejected.`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return releaseGood\n}\n\nexport async function bulkGenerateReleaseGood(\n releaseGood: any,\n bizplaceId: string,\n roNoSetting: any,\n domain: Domain,\n user: User,\n tx?: EntityManager\n): Promise<ReleaseGood> {\n try {\n let warehouseDomain: Domain = domain\n let { orderInventories, shippingOrder } = releaseGood\n\n let bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({ id: bizplaceId })\n\n let newReleaseGood: ReleaseGood = {\n ...releaseGood,\n name: roNoSetting\n ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })\n : OrderNoGenerator.releaseGood(),\n domain: warehouseDomain,\n bizplace: bizplace,\n deliveryAddress1: releaseGood?.deliveryAddress1 || null,\n deliveryAddress2: releaseGood?.deliveryAddress2 || null,\n deliveryAddress3: releaseGood?.deliveryAddress3 || null,\n deliveryAddress4: releaseGood?.deliveryAddress4 || null,\n attentionTo: releaseGood?.attentionTo || null,\n attentionCompany: releaseGood?.attentionCompany || null,\n city: releaseGood?.city || null,\n state: releaseGood?.state || null,\n postalCode: releaseGood?.postalCode || null,\n country: releaseGood?.country || null,\n phone1: releaseGood?.phone1 || null,\n phone2: releaseGood?.phone2 || null,\n email: releaseGood?.email || null,\n source: releaseGood?.source || null,\n airwayBill: releaseGood?.airwayBill,\n refNo: releaseGood.refNo,\n refNo2: releaseGood.refNo2,\n refNo3: releaseGood.refNo3,\n releaseDate: releaseGood.releaseDate,\n ownTransport: releaseGood?.ownTransport || false,\n orderMethod: ORDER_METHOD.SELECT_BY_PRODUCT,\n status: ORDER_STATUS.PENDING,\n creator: releaseGood?.creator || user,\n updater: releaseGood?.updater || user\n }\n\n newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)\n\n /** Generate Shipping Order */\n if (shippingOrder) {\n shippingOrder.remark = shippingOrder.exportRemark\n if (shippingOrder.containerClosureDate !== undefined) {\n shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)\n }\n delete shippingOrder.exportRemark\n\n const createdSO: ShippingOrder = await tx.getRepository(ShippingOrder).save({\n ...shippingOrder,\n name: OrderNoGenerator.shippingOrder(),\n domain,\n bizplace,\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n newReleaseGood.shippingOrder = createdSO\n }\n\n let finalOrderInventories: Partial<OrderInventory>[] = []\n\n // pre assign inventory to orderInventories\n for (let oi of orderInventories) {\n const pickingProductSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, name: 'rule-for-picking-product' }\n })\n\n let locationSortingRules = []\n if (pickingProductSetting) {\n let locationSetting = JSON.parse(pickingProductSetting.value)\n for (const key in locationSetting) {\n locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })\n }\n }\n\n const product: Product = await tx.getRepository(Product).findOneBy({ id: oi.productId })\n\n let assignedResult = await InventoryUtil.autoAssignInventoryForRelease(\n product,\n oi,\n oi.packingType,\n locationSortingRules,\n bizplace,\n warehouseDomain,\n tx\n )\n\n finalOrderInventories.push(\n ...assignedResult.map(itm => {\n return {\n ...itm,\n orderProduct: oi?.orderProduct\n }\n })\n )\n }\n\n for (let oi of finalOrderInventories) {\n let generatedOI: OrderInventory = Object.assign(new OrderInventory(), oi)\n generatedOI = {\n ...generatedOI,\n domain: warehouseDomain,\n bizplace,\n status: ORDER_INVENTORY_STATUS.PENDING,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: newReleaseGood,\n creator: newReleaseGood?.creator || user,\n updater: newReleaseGood?.updater || user\n }\n\n let newOrderProduct: Partial<OrderProduct>\n if (!oi?.orderProduct) {\n newOrderProduct = {\n name: generatedOI.name,\n product: generatedOI.product,\n batchId: generatedOI.batchId,\n packingType: generatedOI.packingType,\n packingSize: generatedOI.packingSize,\n uom: generatedOI.uom,\n domain: warehouseDomain,\n bizplace,\n releaseQty: generatedOI.releaseQty,\n releaseUomValue: generatedOI.releaseUomValue,\n packQty: 0,\n actualPackQty: 0,\n palletQty: 0,\n actualPalletQty: 0,\n status: ORDER_PRODUCT_STATUS.ASSIGNED,\n releaseGood: newReleaseGood,\n creator: newReleaseGood?.creator || user,\n updater: newReleaseGood?.updater || user\n }\n\n newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)\n } else {\n newOrderProduct = await tx.getRepository(OrderProduct).save({\n ...oi.orderProduct,\n totalUomValue: `${oi.orderProduct.releaseUomValue} ${oi.orderProduct.uom}`,\n status: ORDER_PRODUCT_STATUS.ASSIGNED,\n updater: newReleaseGood?.updater || user\n })\n }\n\n await tx.getRepository(OrderInventory).save({ ...generatedOI, orderProduct: newOrderProduct })\n\n // update inventory locked qty and uom value\n await tx.getRepository(Inventory).update(oi.inventory.id, {\n lockedQty: (oi.inventory?.lockedQty || 0) + generatedOI.releaseQty,\n lockedUomValue: (oi.inventory?.lockedUomValue || 0) + generatedOI.releaseUomValue,\n updater: user\n } as any)\n }\n\n return newReleaseGood\n } catch (error) {\n throw error\n }\n}\n\nexport async function bulkConfirmReleaseGoods(\n releaseGoodsNo: string[],\n domain: Domain,\n user: User,\n context: any,\n tx?: EntityManager\n): Promise<ReleaseGood[]> {\n let foundReleaseGoods: ReleaseGood[] = await tx.getRepository(ReleaseGood).find({\n where: { name: In(releaseGoodsNo), status: ORDER_STATUS.PENDING },\n relations: ['bizplace']\n })\n\n if (!foundReleaseGoods.length) throw new Error(`release good order doesn't exists.`)\n let customerBizplace: Bizplace = foundReleaseGoods[0].bizplace\n\n let foundOrderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({\n where: { domain: { id: domain.id }, releaseGood: { id: In(foundReleaseGoods.map((rg: ReleaseGood) => rg.id)) } }\n })\n\n await tx\n .getRepository(ReleaseGood)\n .update({ id: In(foundReleaseGoods.map(rg => rg.id)) }, { status: ORDER_STATUS.PENDING_RECEIVE, updater: user })\n\n await tx\n .getRepository(OrderInventory)\n .update(\n { id: In(foundOrderInventories.map(oi => oi.id)) },\n { status: ORDER_INVENTORY_STATUS.PENDING_RECEIVE, updater: user }\n )\n\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const message = {\n title: `New Release Order from ${customerBizplace.name}`,\n body: `New incoming bulk release orders are pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message\n // })\n }\n }\n\n return Promise.all(\n foundReleaseGoods.map(async (releaseGood: ReleaseGood) => {\n return {\n ...releaseGood,\n orderInventories: await tx\n .getRepository(OrderInventory)\n .find({ where: { releaseGood: { id: releaseGood.id } } }) /* CONFIRMME regarding TYPEORM */,\n status: ORDER_STATUS.PENDING_RECEIVE,\n updater: user\n }\n })\n )\n}\n\nfunction extractRawReleaseGoods(rawReleaseGoods): Partial<ReleaseGood[]> {\n return rawReleaseGoods.reduce((releaseGoods, item) => {\n const idx: number = releaseGoods.findIndex(rg => {\n // consider these attributes if they are exist in \"item\"\n const comparison = [\n 'refNo2',\n 'refNo3',\n 'attentionTo',\n 'phone1',\n 'deliveryAddress1',\n 'deliveryAddress2',\n 'deliveryAddress3',\n 'deliveryAddress4',\n 'postalCode'\n ]\n\n let a: any = {},\n b: any = {}\n\n comparison.forEach(cc => {\n if (item[cc]) {\n a[cc] = item[cc]\n b[cc] = rg[cc]\n }\n })\n\n a = JSON.stringify(Object.fromEntries(Object.entries(a).sort()))\n b = JSON.stringify(Object.fromEntries(Object.entries(b).sort()))\n\n return rg.refNo == item.refNo && rg.releaseDate == item.releaseDate && a === b\n })\n\n if (idx >= 0) {\n const duplicateSkuIdx: number = releaseGoods[idx].orderInventories.findIndex(\n oi => oi.sku === item.sku && oi.packingType === item.packingType && oi.packingSize === item.packingSize\n )\n\n // if there is duplicated SKU, merge them and sum up the releaseQty\n if (duplicateSkuIdx >= 0) {\n releaseGoods[idx].orderInventories[duplicateSkuIdx].releaseQty += item.releaseQty\n } else {\n releaseGoods[idx].orderInventories.push({\n sku: item.sku,\n productId: item.productId,\n packingType: item.packingType,\n packingSize: item.packingSize,\n uom: item.uom,\n releaseQty: item.releaseQty,\n releaseUomValue: item.releaseUomValue\n })\n }\n } else {\n releaseGoods.push({\n releaseDate: item.releaseDate,\n refNo: item.refNo,\n refNo2: item.refNo2,\n refNo3: item.refNo3,\n attentionTo: item.attentionTo,\n phone1: item.phone1,\n deliveryAddress1: item.deliveryAddress1,\n deliveryAddress2: item.deliveryAddress2,\n deliveryAddress3: item.deliveryAddress3,\n deliveryAddress4: item.deliveryAddress4,\n billingAddress: item.billingAddress,\n billingCity: item.billingPostalCode,\n billingState: item.billingState,\n billingCountry: item.billingCountry,\n billingPostalCode: item.billingPostalCode,\n city: item.city,\n postalCode: item.postalCode,\n state: item.state,\n country: item.country,\n orderInventories: [\n {\n sku: item.sku,\n productId: item.productId,\n packingType: item.packingType,\n packingSize: item.packingSize,\n uom: item.uom,\n releaseQty: item.releaseQty,\n releaseUomValue: item.releaseUomValue\n }\n ]\n })\n }\n\n return releaseGoods\n }, [])\n}\n\nfunction formRawReleaseGoods(releaseGood, errorMsg) {\n let rawReleaseGoods = []\n for (let i = 0, l = releaseGood.orderInventories.length; i < l; i++) {\n let rawReleaseGood = {\n ...releaseGood,\n ...releaseGood.orderInventories[i],\n errorMsg\n }\n\n delete rawReleaseGood.orderInventories\n delete rawReleaseGood.product\n\n rawReleaseGoods.push(rawReleaseGood)\n }\n return rawReleaseGoods\n}\n"]}
1
+ {"version":3,"file":"release-good-mutation.js","sourceRoot":"","sources":["../../../server/service/release-good/release-good-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'\nimport GraphQLUpload from 'graphql-upload/GraphQLUpload.js'\nimport { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'\nimport { EntityManager, getConnection, In, Not, Repository } from 'typeorm'\n\nimport { Attachment, createAttachments } from '@things-factory/attachment-base'\nimport { ApplicationType, Partner, Role, User } from '@things-factory/auth-base'\nimport {\n Bizplace,\n ContactPoint,\n getDomainUsers,\n getMyBizplace,\n getOutletBizplace,\n getPermittedBizplaces\n} from '@things-factory/biz-base'\nimport { logger } from '@things-factory/env'\nimport { generateId } from '@things-factory/id-rule-base'\nimport { MarketplaceStore } from '@things-factory/integration-marketplace'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { MarketplaceOrder, MarketplaceProductVariation } from '@things-factory/marketplace-base'\nimport { Product, ProductBundleSetting } from '@things-factory/product-base'\nimport { PartnerSetting, Setting } from '@things-factory/setting-base'\nimport { Domain, getRepository } from '@things-factory/shell'\nimport { Inventory } from '@things-factory/warehouse-base'\n\n// import { NewOrderProduct } from '../order-product/order-product-types'\nimport {\n ATTACHMENT_TYPE,\n ORDER_INVENTORY_STATUS,\n ORDER_METHOD,\n ORDER_NUMBER_RULE_TYPE,\n ORDER_NUMBER_SETTING_KEY,\n ORDER_PRODUCT_STATUS,\n ORDER_STATUS,\n ORDER_TYPES,\n ORDER_VAS_STATUS,\n PRODUCT_GROUP_TYPE\n} from '../../constants'\nimport { EcommerceController, SellercraftController } from '../../controllers'\nimport { ValidationError } from '../../errors'\nimport { InventoryUtil, OrderNoGenerator } from '../../utils'\nimport { ArrivalNotice } from '../arrival-notice/arrival-notice'\nimport { confirmArrivalNoticeFunction, deleteArrivalNotice } from '../arrival-notice/arrival-notice-mutation'\nimport { OrderInventory } from '../order-inventory/order-inventory'\nimport { OrderProduct } from '../order-product/order-product'\nimport { OrderVas } from '../order-vas/order-vas'\nimport { NewReleaseGood, ReleaseGoodPatch, ShippingOrderInfoPatch } from '../release-good/release-good-types'\nimport { ShippingOrder } from '../shipping-order/shipping-order'\nimport { ShippingOrderPatch } from '../shipping-order/shipping-order-types'\nimport { Vas } from '../vas/vas'\nimport { ReleaseGood } from './release-good'\nimport { bulkReleaseGoodsAvailableItemsFunction } from './release-good-query'\n\n@Resolver(ReleaseGood)\nexport class ReleaseGoodMutation {\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => [ReleaseGood])\n async bulkAddReleaseGoods(\n @Ctx() context: ResolverContext,\n @Arg('rawReleaseGoods', type => [NewReleaseGood], { nullable: true }) rawReleaseGoods: NewReleaseGood[],\n @Arg('bizplaceId', type => String) bizplaceId: string\n ): Promise<ReleaseGood[]> {\n const { domain, user, tx } = context.state\n\n if (!bizplaceId) throw new Error('company ID is not provided')\n\n let createdReleaseGoods: ReleaseGood[] = []\n const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)\n\n const roNoSetting: Setting = await settingRepo.findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE\n }\n })\n\n let releaseGoods: Partial<ReleaseGood[]> = extractRawReleaseGoods(rawReleaseGoods)\n\n let errorsCaught: any[] = []\n for (let i = 0, l = releaseGoods.length; i < l; i++) {\n // generate release good by group to avoid duplication\n // if this function is called simultaneously by different users\n try {\n await getConnection().transaction(async (childTx: EntityManager) => {\n const existingReleaseGood: ReleaseGood = await childTx.getRepository(ReleaseGood).findOne({\n where: {\n ...Object.fromEntries(\n Object.entries(releaseGoods[i]).filter(([_, val]) => !/^\\s*$/.test(val) && _ != 'orderInventories')\n ),\n domain: { id: domain.id }\n }\n })\n if (existingReleaseGood) throw new Error('this order is already exist in the system')\n\n let availableItems: any[] = await bulkReleaseGoodsAvailableItemsFunction(\n [...releaseGoods[i].orderInventories],\n bizplaceId,\n context,\n childTx\n )\n\n if (availableItems.some(item => !item.releaseQty || item.releaseQty > item.assignedQty))\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.INSUFFICIENT_STOCK,\n detail: { data: JSON.stringify(availableItems) }\n })\n\n // update orderInventories if availableItems are valid\n releaseGoods[i].orderInventories = availableItems\n\n const createdReleaseGood: ReleaseGood = await bulkGenerateReleaseGood(\n releaseGoods[i],\n bizplaceId,\n roNoSetting,\n domain,\n user,\n childTx\n )\n\n createdReleaseGoods.push(createdReleaseGood)\n })\n } catch (error) {\n let rawReleaseGoods = formRawReleaseGoods(releaseGoods[i], error.message)\n errorsCaught.push(...rawReleaseGoods)\n }\n }\n\n let confirmedReleaseGoods: ReleaseGood[] = []\n\n if (createdReleaseGoods.length)\n try {\n confirmedReleaseGoods = await bulkConfirmReleaseGoods(\n createdReleaseGoods.map(rg => rg.name),\n domain,\n user,\n context,\n tx\n )\n } catch (error) {}\n\n if (errorsCaught.length)\n throw new ValidationError({\n ...ValidationError.ERROR_CODES.INVALID_DATA_FOUND,\n detail: { data: JSON.stringify(errorsCaught) }\n })\n\n return confirmedReleaseGoods\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteReleaseGood(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {\n const { tx, user, domain } = context.state\n return await deleteReleaseGood(tx, name, user, domain)\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async deleteReleaseGoods(\n @Arg('names', type => [String]) names: string[],\n @Ctx() context: ResolverContext\n ): Promise<Boolean> {\n const { tx } = context.state\n await tx.getRepository(ReleaseGood).delete({\n domain: { id: context.state.domain.id },\n name: In(names)\n })\n return true\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async generateReleaseGood(\n @Ctx() context: ResolverContext,\n @Arg('attachments', type => [GraphQLUpload], { nullable: true }) attachments?: FileUpload[],\n @Arg('releaseGood', type => NewReleaseGood, { nullable: true }) releaseGood?: NewReleaseGood,\n @Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder?: ShippingOrderPatch,\n @Arg('shippingOrderInfo', type => ShippingOrderInfoPatch, { nullable: true })\n shippingOrderInfo?: ShippingOrderInfoPatch\n ): Promise<ReleaseGood> {\n const { tx } = context.state\n const createdReleaseGood: ReleaseGood = await generateReleaseGoodFunction(\n null,\n releaseGood,\n shippingOrder,\n shippingOrderInfo,\n attachments,\n context,\n tx\n )\n\n return createdReleaseGood\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async updateReleaseGoodDetails(\n @Ctx() context: ResolverContext,\n @Arg('releaseGood', type => ReleaseGoodPatch, { nullable: true }) releaseGood?: ReleaseGoodPatch,\n @Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder?: ShippingOrderPatch,\n @Arg('shippingOrderInfo', type => ShippingOrderInfoPatch, { nullable: true })\n shippingOrderInfo?: ShippingOrderInfoPatch\n ): Promise<ReleaseGood> {\n const { tx, domain, user } = context.state\n let foundReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { id: releaseGood.id, domain: { id: domain.id } },\n relations: ['shippingOrder']\n })\n\n if (!foundReleaseGood) {\n throw new Error(`Release order ${releaseGood.id} is not found.`)\n }\n\n // case to update existing shippingOrder\n if (shippingOrder !== null) {\n shippingOrder.remark = shippingOrder.exportRemark\n shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)\n delete shippingOrder.exportRemark\n }\n\n if (foundReleaseGood.shippingOrder && shippingOrder) {\n await tx.getRepository(ShippingOrder).update(foundReleaseGood.shippingOrder.id, shippingOrder)\n }\n // case for new shippingOrder\n else if (!foundReleaseGood.shippingOrder && shippingOrder) {\n let newShippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).save({\n ...shippingOrder,\n name: OrderNoGenerator.shippingOrder(),\n domain,\n bizplace: await getMyBizplace(domain, user),\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n releaseGood.shippingOrder = newShippingOrder\n }\n\n foundReleaseGood = await tx.getRepository(ReleaseGood).save({\n ...(foundReleaseGood as any),\n ...releaseGood,\n ...shippingOrderInfo,\n remark: releaseGood?.remark ? releaseGood.remark : null\n })\n\n return foundReleaseGood\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async confirmReleaseGood(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReleaseGood> {\n const { tx } = context.state\n const releaseGood: ReleaseGood = await confirmReleaseGood(name, context, tx)\n\n // If current RO has cross docking\n if (releaseGood.crossDocking) {\n const { arrivalNotice } = await tx.getRepository(ReleaseGood).findOne({\n where: { id: releaseGood.id },\n relations: ['arrivalNotice']\n })\n\n // If status of related GAN is not equal to PENDING_RECEIVE (i.e. Wasn't confirmed yet.)\n if (arrivalNotice.status !== ORDER_STATUS.PENDING_RECEIVE) {\n await confirmArrivalNoticeFunction(arrivalNotice.name, context, tx)\n }\n }\n\n return releaseGood\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async receiveReleaseGood(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReleaseGood> {\n const { tx } = context.state\n const releaseGood: ReleaseGood = await receiveReleaseGood(name, context, tx)\n return releaseGood\n }\n\n @Directive('@privilege(category: \"order_warehouse\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async rejectReleaseGood(\n @Arg('name') name: string,\n @Arg('patch', type => ReleaseGoodPatch) patch: ReleaseGoodPatch,\n @Ctx() context: ResolverContext\n ): Promise<ReleaseGood> {\n const { tx } = context.state\n\n return await rejectReleaseGood(tx, context, name, patch.remark)\n }\n\n @Directive('@transaction')\n @Mutation(returns => ReleaseGood)\n async addReleaseGood(\n @Ctx() context: ResolverContext,\n @Arg('releaseGood', type => NewReleaseGood, { nullable: true }) releaseGood: NewReleaseGood,\n @Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder: ShippingOrderPatch,\n @Arg('file', type => GraphQLUpload, { nullable: true }) file: FileUpload\n ): Promise<ReleaseGood> {\n const { tx } = context.state\n const createdRO: ReleaseGood = await generateReleaseGoodFunction(\n null,\n releaseGood,\n shippingOrder,\n null,\n file,\n context,\n tx\n )\n\n const confirmedRO: ReleaseGood = await confirmReleaseGood(createdRO.name, context, tx)\n\n const receivedRO: ReleaseGood = await receiveReleaseGood(confirmedRO.name, context, tx)\n\n return receivedRO\n }\n\n @Directive('@privilege(category: \"order_customer\", privilege: \"mutation\")')\n @Directive('@transaction')\n @Mutation(returns => Boolean)\n async executeOrderRemark(\n @Arg('releaseGoodNo') releaseGoodNo: string,\n @Ctx() context: ResolverContext\n ): Promise<boolean> {\n const { domain, tx, user } = context.state\n\n await tx.getRepository(ReleaseGood).update(\n {\n domain: { id: domain.id },\n name: releaseGoodNo\n },\n {\n checkedRemarkAt: new Date(),\n checkedRemarkUser: user,\n checkedRemarkBy: user.name\n }\n )\n\n return true\n }\n}\n\nexport async function deleteReleaseGood(tx: EntityManager, name: string, user: User, domain: Domain): Promise<boolean> {\n let foundReleaseOrder: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name },\n relations: [\n 'arrivalNotice',\n 'orderInventories',\n 'orderInventories.orderProduct',\n 'orderInventories.inventory',\n 'orderVass',\n 'shippingOrder',\n 'creator',\n 'updater'\n ]\n })\n\n if (!foundReleaseOrder) throw new Error(`Release order doesn't exists.`)\n const foundOIs: OrderInventory[] = foundReleaseOrder.orderInventories\n const foundOVs: OrderVas[] = foundReleaseOrder.orderVass\n const foundSO: ShippingOrder = foundReleaseOrder.shippingOrder\n\n let foundAttachment: Attachment\n if (foundReleaseOrder?.ownTransport) {\n foundAttachment = await tx.getRepository(Attachment).findOne({\n where: {\n domain: { id: domain.id },\n refBy: foundReleaseOrder.id,\n category: ATTACHMENT_TYPE.DELIVERY_ORDER\n }\n })\n }\n\n // Delete order inventories by ids\n await Promise.all(\n foundOIs.map(async (oi: OrderInventory) => {\n if (oi?.requestProductDetailId) {\n await tx.getRepository(OrderInventory).save({\n ...oi,\n status: ORDER_INVENTORY_STATUS.PENDING,\n orderProduct: null,\n releaseGood: null,\n bizplace: null\n })\n } else {\n if (oi?.inventory?.id) {\n oi.inventory = await tx.getRepository(Inventory).findOneBy({ id: oi.inventory.id })\n\n await tx.getRepository(Inventory).save({\n ...oi.inventory,\n lockedQty: oi.inventory.lockedQty - oi.releaseQty,\n lockedUomValue: oi.inventory.lockedUomValue - oi.releaseUomValue,\n updater: user\n })\n }\n\n await tx.getRepository(OrderInventory).delete({ id: oi.id })\n }\n\n if (oi?.orderProduct?.id) {\n await tx.getRepository(OrderProduct).delete({ id: oi.orderProduct.id })\n }\n\n return oi\n })\n )\n\n // 2. delete order vass\n const vasIds = foundOVs.map((vas: OrderVas) => vas.id)\n if (vasIds.length) {\n await tx.getRepository(OrderVas).delete({ id: In(vasIds) })\n }\n\n if (foundAttachment) {\n await tx.getRepository(Attachment).delete({ domain: { id: domain.id }, id: foundAttachment.id })\n }\n\n // 4. Remove relation with GAN if it's cross docking\n if (foundReleaseOrder.crossDocking && foundReleaseOrder.arrivalNotice?.id) {\n let arrivalNotice: ArrivalNotice = foundReleaseOrder.arrivalNotice\n arrivalNotice.releaseGood = null\n arrivalNotice = await tx.getRepository(ArrivalNotice).save(arrivalNotice)\n\n await tx.getRepository(ReleaseGood).delete({ domain: { id: domain.id }, name })\n await deleteArrivalNotice(tx, arrivalNotice.name, user, domain)\n } else {\n await tx.getRepository(ReleaseGood).delete({ domain: { id: domain.id }, name })\n }\n\n // 5. if there is SO, delete SO\n if (foundSO) {\n await tx.getRepository(ShippingOrder).delete({ domain: { id: domain.id }, id: foundSO.id })\n }\n return true\n}\n\nexport async function generateReleaseGoodFunction(\n _: any,\n releaseGood: any,\n shippingOrder: ShippingOrderPatch,\n shippingOrderInfo: any,\n attachments: FileUpload[],\n context: ResolverContext,\n tx?: EntityManager\n): Promise<ReleaseGood> {\n try {\n const { domain, user } = context.state\n const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)\n\n // let orderInventories: OrderInventory[] = releaseGood.orderInventories\n // let orderVass: OrderVas[] = releaseGood.orderVass\n\n let { orderInventories, orderVass }: { orderInventories: OrderInventory[]; orderVass: OrderVas[] } = releaseGood\n\n let bizplace: Bizplace\n let warehouseDomain: Domain = domain\n let finalOrderInventories: OrderInventory[] = []\n\n if (releaseGood.deliverTo) {\n const deliverTo: ContactPoint = await tx.getRepository(ContactPoint).findOne({\n where: { id: releaseGood.deliverTo.id },\n relations: ['bizplace']\n })\n\n if (!deliverTo) throw new Error('contact point does not exist')\n\n releaseGood.deliverTo = deliverTo\n }\n\n /** Validate user permitted Bizplace */\n if (releaseGood.warehouseId) {\n bizplace = await getOutletBizplace(releaseGood.warehouseId)\n } else if (releaseGood.customerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == releaseGood.customerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n bizplace = await tx.getRepository(Bizplace).findOne({\n where: {\n id: releaseGood.customerBizplaceId\n },\n relations: ['domain']\n })\n const customerPartner: Partner = await tx.getRepository(Partner).findOne({\n where: { partnerDomain: { id: bizplace.domain.id }, domain: { id: domain.id } },\n relations: ['domain']\n })\n warehouseDomain = customerPartner.domain\n } else if (releaseGood.partnerBizplaceId) {\n const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)\n let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == releaseGood.partnerBizplaceId)\n\n if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)\n\n bizplace = await tx.getRepository(Bizplace).findOne({\n where: {\n id: releaseGood.partnerBizplaceId\n },\n relations: ['domain']\n })\n warehouseDomain = domain\n } else {\n bizplace = await getMyBizplace(domain, user)\n }\n /** End Validate user permitted Bizplace Section */\n\n /** Validate Release Order Product Quantity */\n await InventoryUtil.validateWarehousePartnersProductsQuantity(domain, bizplace, orderInventories, context, tx)\n /** End Validate Release Order Product Quantity Section */\n\n const orderSource: string = releaseGood.source\n switch (orderSource) {\n case ApplicationType.SELLERCRAFT:\n const sellercraft: Sellercraft = await tx\n .getRepository(Sellercraft)\n .findOneBy({ domain: { id: bizplace.domain.id }, status: SellercraftStatus.ACTIVE })\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.checkExistingReleaseGood(sellercraft, releaseGood)\n }\n\n break\n\n case ApplicationType.MMS:\n const refNo: string = releaseGood.refNo\n const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: {\n domain: { id: warehouseDomain.id },\n refNo,\n status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))\n },\n relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']\n })\n\n if (foundReleaseGood) {\n const customerCompanyDomain: Domain = foundReleaseGood.bizplace.company.domain\n const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({\n where: { orderNo: refNo, domain: { id: customerCompanyDomain.id } }\n })\n\n // Need to restructure the validation\n if (marketplaceOrder?.isSplitted) {\n const refNo2: string = releaseGood.refNo2\n const foundSplittedReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: {\n domain: { id: warehouseDomain.id },\n refNo2,\n status: Not(In([ORDER_STATUS.CANCELLED, ORDER_STATUS.PENDING_CANCEL]))\n },\n relations: ['bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']\n })\n\n if (foundSplittedReleaseGood) throw new Error('Existing release order found')\n } else {\n throw new Error('Existing release order found')\n }\n }\n break\n\n default:\n break\n }\n\n let newReleaseGood: ReleaseGood = new ReleaseGood()\n\n /** Generate Shipping Order */\n if (shippingOrder) {\n shippingOrder.remark = shippingOrder.exportRemark\n if (shippingOrder.containerClosureDate !== undefined) {\n shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)\n }\n delete shippingOrder.exportRemark\n\n const createdSO: ShippingOrder = await tx.getRepository(ShippingOrder).save({\n ...shippingOrder,\n name: OrderNoGenerator.shippingOrder(),\n domain,\n bizplace,\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n newReleaseGood.shippingOrder = createdSO\n }\n /** End Generate Shipping Order Section */\n\n // find RO number rule setting\n const roNoSetting: Setting = await settingRepo.findOne({\n where: {\n domain: { id: domain.id },\n name: ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE\n }\n })\n\n newReleaseGood = {\n ...newReleaseGood,\n name: roNoSetting\n ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })\n : OrderNoGenerator.releaseGood(),\n domain: warehouseDomain,\n bizplace: bizplace,\n collectionOrderNo: releaseGood.collectionOrderNo,\n courierOption: releaseGood.courierOption,\n exportOption: releaseGood.exportOption,\n ownTransport: releaseGood.ownTransport,\n packingOption: releaseGood.packingOption,\n recall: releaseGood.recall,\n marketplaceOrderStatus: releaseGood?.marketplaceOrderStatus || null,\n deliverTo: releaseGood.deliverTo,\n billingAddress:\n releaseGood.type == 'b2c' ? releaseGood?.billingAddress || null : shippingOrderInfo.billingAddress || null,\n deliveryAddress1: releaseGood?.deliveryAddress1 || shippingOrderInfo.deliveryAddress1 || null,\n deliveryAddress2: releaseGood?.deliveryAddress2 || null,\n deliveryAddress3: releaseGood?.deliveryAddress3 || null,\n deliveryAddress4: releaseGood?.deliveryAddress4 || null,\n deliveryAddress5: releaseGood?.deliveryAddress5 || null,\n attentionTo: releaseGood.type == 'b2c' ? releaseGood?.attentionTo || null : shippingOrderInfo.attentionTo || null,\n attentionCompany:\n releaseGood.type == 'b2c' ? releaseGood?.companyName || null : shippingOrderInfo.attentionCompany || null,\n city: releaseGood.type == 'b2c' ? releaseGood?.city || null : shippingOrderInfo.city || null,\n state: releaseGood.type == 'b2c' ? releaseGood?.state || null : shippingOrderInfo.state || null,\n postalCode: releaseGood.type == 'b2c' ? releaseGood?.postalCode || null : shippingOrderInfo.postalCode || null,\n country: releaseGood.type == 'b2c' ? releaseGood?.country || null : shippingOrderInfo.country || null,\n phone1: releaseGood.type == 'b2c' ? releaseGood?.phone1 || null : shippingOrderInfo.phone1 || null,\n phone2: releaseGood?.phone2 || null,\n email: releaseGood?.email || null,\n billingCity: releaseGood.type == 'b2c' ? releaseGood?.billingCity || null : shippingOrderInfo.billingCity || null,\n billingCountry:\n releaseGood.type == 'b2c' ? releaseGood?.billingCountry || null : shippingOrderInfo.billingCountry || null,\n billingPostalCode:\n releaseGood.type == 'b2c'\n ? releaseGood?.billingPostalCode || null\n : shippingOrderInfo.billingPostalCode || null,\n billingState:\n releaseGood.type == 'b2c' ? releaseGood?.billingState || null : shippingOrderInfo.billingState || null,\n transporter: releaseGood?.transporter,\n trackingNo: releaseGood?.trackingNo,\n airwayBill: releaseGood?.airwayBill,\n invoice: releaseGood?.invoice,\n refNo: releaseGood.refNo,\n refNo2: releaseGood.refNo2,\n refNo3: releaseGood.refNo3,\n remark: releaseGood?.remark || null,\n releaseDate: releaseGood.releaseDate,\n truckNo: releaseGood.truckNo,\n bundleInfo: releaseGood?.bundleInfo || [],\n orderInventories: releaseGood.orderInventories,\n type: releaseGood?.type ? releaseGood.type : 'b2b',\n orderMethod: releaseGood?.orderMethod\n ? releaseGood.orderMethod\n : releaseGood.orderInventories[0]?.inventory?.id\n ? ORDER_METHOD.SELECT_BY_PALLET\n : ORDER_METHOD.SELECT_BY_PRODUCT,\n status: ORDER_STATUS.PENDING,\n packageId: releaseGood?.packageId,\n storeName: releaseGood?.storeName,\n storeId: releaseGood?.storeId,\n routeId: releaseGood?.routeId,\n stopId: releaseGood?.stopId,\n creator: user,\n updater: user\n }\n\n // Make relation with GAN for cross docking\n let crossDockingGAN: ArrivalNotice = undefined\n if (releaseGood.crossDocking && releaseGood.ganNo) {\n crossDockingGAN = await tx.getRepository(ArrivalNotice).findOne({\n where: {\n domain: { id: domain.id },\n bizplace: { id: bizplace.id },\n name: releaseGood.ganNo,\n status: ORDER_STATUS.PENDING\n }\n })\n if (!crossDockingGAN) throw new Error(`Failed to find GAN (${releaseGood.ganNo}) for cross docking`)\n\n newReleaseGood.arrivalNotice = crossDockingGAN\n }\n\n // Make relation with RO for cross docking\n if (newReleaseGood.crossDocking) {\n crossDockingGAN.releaseGood = newReleaseGood\n await tx.getRepository(ArrivalNotice).save(crossDockingGAN)\n }\n\n // Check if there is bundle item in orderInventories\n const bundledOIs: OrderInventory[] = orderInventories.filter(\n oi => (oi.product as any).groupType === PRODUCT_GROUP_TYPE.BUNDLE\n )\n\n const singleProductOIs: OrderInventory[] = orderInventories.filter(\n oi => (oi.product as any).groupType !== PRODUCT_GROUP_TYPE.BUNDLE\n )\n\n const splitBundleOIs: OrderInventory[] = []\n\n // If there is bundle item, split each item in that bundle into into each product\n if (bundledOIs && bundledOIs.length > 0) {\n await Promise.all(\n bundledOIs.map(async (oi: OrderInventory) => {\n let splitOI: OrderInventory = null\n\n const pbSettings: ProductBundleSetting[] = await tx.getRepository(ProductBundleSetting).find({\n where: { productBundle: { id: oi.product.id } },\n relations: ['product', 'productBundle']\n })\n\n pbSettings.forEach(pbs => {\n splitOI = {\n ...oi,\n releaseQty: oi.releaseQty * pbs.bundleQty,\n releaseUomValue: oi.releaseUomValue * pbs.bundleQty * pbs.product.primaryValue,\n packingType: pbs.product.packingType,\n batchId: '',\n product: {\n id: pbs.product.id,\n name: pbs.product.name,\n groupType: PRODUCT_GROUP_TYPE.SINGLE\n } as any\n }\n splitBundleOIs.push(splitOI)\n })\n })\n )\n }\n\n orderInventories = [...singleProductOIs, ...splitBundleOIs]\n\n newReleaseGood.noOfItems = orderInventories.length\n newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)\n\n for (let oi of orderInventories) {\n let newOrderInv: OrderInventory = Object.assign({}, oi)\n newOrderInv = {\n ...newOrderInv,\n domain: warehouseDomain,\n bizplace: bizplace,\n status: ORDER_INVENTORY_STATUS.PENDING,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: newReleaseGood,\n product: await tx.getRepository(Product).findOneBy({ id: oi.product.id }),\n creator: user,\n updater: user\n }\n\n let newOrderProduct: OrderProduct = Object.assign(new OrderProduct(), newOrderInv)\n newOrderProduct = {\n ...newOrderProduct,\n packQty: 0,\n actualPackQty: 0,\n palletQty: 0,\n actualPalletQty: 0,\n status: ORDER_PRODUCT_STATUS.ASSIGNED\n }\n\n newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)\n\n if (newOrderInv.inventory?.id) {\n const foundInv: Inventory = await tx.getRepository(Inventory).findOneBy({ id: newOrderInv.inventory.id })\n newOrderInv.inventory = foundInv\n newOrderInv.orderProduct = newOrderProduct\n\n finalOrderInventories.push(newOrderInv)\n } else {\n // Preassign Inventories\n const inventoryAssignmentSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, name: 'rule-for-inventory-assignment' }\n })\n\n let locationSortingRules = []\n if (inventoryAssignmentSetting) {\n let locationSetting = JSON.parse(inventoryAssignmentSetting.value)\n for (const key in locationSetting) {\n locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })\n }\n }\n\n let assignedOrderInventories: OrderInventory[] = await InventoryUtil.autoAssignInventoryForRelease(\n newOrderInv.product,\n oi,\n oi.packingType,\n locationSortingRules,\n bizplace,\n warehouseDomain,\n tx,\n oi.batchId\n )\n\n assignedOrderInventories = assignedOrderInventories.map(aoi => {\n return {\n ...aoi,\n orderProduct: newOrderProduct\n }\n })\n\n finalOrderInventories.push(...assignedOrderInventories)\n }\n }\n\n for (let oi of finalOrderInventories) {\n let generatedOI: OrderInventory = Object.assign(new OrderInventory(), oi)\n generatedOI = {\n ...generatedOI,\n domain: warehouseDomain,\n bizplace,\n status: ORDER_INVENTORY_STATUS.PENDING,\n name: oi.name || OrderNoGenerator.orderInventory(),\n releaseGood: newReleaseGood,\n creator: user,\n updater: user\n }\n\n await tx.getRepository(OrderInventory).save({ ...generatedOI })\n\n // update inventory locked qty and uom value\n if (!oi.id) {\n await tx.getRepository(Inventory).update({ id: oi.inventory.id }, {\n lockedQty: (oi.inventory?.lockedQty || 0) + generatedOI.releaseQty,\n lockedUomValue: (oi.inventory?.lockedUomValue || 0) + generatedOI.releaseUomValue,\n updater: user\n } as any)\n }\n }\n\n if (orderVass?.length) {\n orderVass = await Promise.all(\n orderVass.map(async orderVas => {\n if (orderVas?.targetProduct?.id) {\n orderVas.targetProduct = await tx.getRepository(Product).findOneBy({ id: orderVas.targetProduct.id })\n }\n\n let newOrderVas: OrderVas = {\n ...orderVas,\n domain: warehouseDomain,\n bizplace,\n name: OrderNoGenerator.releaseVas(),\n vas: await tx.getRepository(Vas).findOneBy({ id: orderVas.vas.id }),\n type: ORDER_TYPES.RELEASE_OF_GOODS,\n releaseGood: newReleaseGood,\n status: ORDER_VAS_STATUS.PENDING,\n creator: user,\n updater: user\n }\n\n if (orderVas?.inventory?.id) {\n newOrderVas.inventory = await tx.getRepository(Inventory).findOneBy({ id: orderVas.inventory.id })\n }\n\n return newOrderVas\n })\n )\n\n await tx.getRepository(OrderVas).save(orderVass)\n }\n\n if (attachments?.length > 0) {\n const files: Partial<Attachment>[] = attachments.map(attachment => {\n return {\n file: attachment,\n refType: ATTACHMENT_TYPE.DELIVERY_ORDER,\n refBy: newReleaseGood.id,\n category: ATTACHMENT_TYPE.DELIVERY_ORDER /* TODO use refType */\n }\n })\n await createAttachments(_, { attachments: files }, context)\n }\n\n const directReceiveSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, category: 'id-rule', name: 'enable-direct-receive-release-order' }\n })\n\n if (directReceiveSetting) {\n const partnerDirectReceiveSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({\n where: {\n setting: { id: directReceiveSetting?.id },\n domain: { id: domain.id },\n partnerDomain: { id: bizplace?.domain.id }\n }\n })\n\n // If status of create RO is PENDING then directly CONFIRM -> RECEIVE\n if (\n !isNaN(Number(partnerDirectReceiveSetting?.value)) &&\n !isNaN(parseFloat(partnerDirectReceiveSetting?.value)) &&\n newReleaseGood.status === ORDER_STATUS.PENDING\n ) {\n let partnerDirectReceiveSettingValue = parseFloat(partnerDirectReceiveSetting.value)\n\n // CONFIRM if setting value is > 0\n if (partnerDirectReceiveSettingValue > 0) await confirmReleaseGood(newReleaseGood.name, context, tx)\n\n // RECEIVE if setting value is > 1\n if (partnerDirectReceiveSettingValue > 1) await receiveReleaseGood(newReleaseGood.name, context, tx)\n }\n }\n\n return newReleaseGood\n } catch (error) {\n throw error\n }\n}\n\nexport async function confirmReleaseGood(name: string, context: any, tx?: EntityManager): Promise<ReleaseGood> {\n const { user, domain } = context.state\n\n let foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { name, status: ORDER_STATUS.PENDING },\n relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain', 'orderVass']\n })\n\n if (!foundReleaseGood) throw new Error(`Release good order doesn't exists.`)\n\n // query orderInventories separately from releaseGood to reduce resource usage\n let foundOIs: OrderInventory[] = await tx.getRepository(OrderInventory).find({\n where: { domain: { id: domain.id }, releaseGood: { id: foundReleaseGood.id } },\n relations: ['product']\n })\n\n // query orderProducts separately from releaseGood to reduce resource usage\n let foundOPs: OrderProduct[] = await tx.getRepository(OrderProduct).find({\n where: { domain: { id: domain.id }, releaseGood: { id: foundReleaseGood.id } },\n relations: ['bizplace', 'product', 'product.productDetails']\n })\n\n let foundBundleInfo: any[] = JSON.parse(foundReleaseGood.bundleInfo)\n let foundOVs: OrderVas[] = foundReleaseGood.orderVass\n let customerBizplace: Bizplace = foundReleaseGood.bizplace\n const companyDomain: Domain = customerBizplace?.company.domain\n\n const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({\n where: { domain: { id: foundReleaseGood.bizplace.domain.id }, status: SellercraftStatus.ACTIVE },\n relations: ['domain']\n })\n\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n\n let updateSCStock = async sellercraft => {\n if (sellercraft) {\n await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'CONFIRM_ORDER')\n }\n }\n\n const orderSource: string = foundReleaseGood.source\n switch (orderSource) {\n case ApplicationType.SELLERCRAFT:\n if (foundReleaseGood.type == 'b2c' && sellercraft) {\n try {\n let rg = await sellercraftCtrl.packOrder(sellercraft, {\n ...foundReleaseGood,\n orderProducts: foundOPs\n })\n foundReleaseGood = rg\n } catch (error) {\n logger.error(\n `release-good-mutation[confirmReleaseGood]:(data:${JSON.stringify({\n sellercraft,\n foundReleaseGood,\n domain,\n user\n })}) ${error} `\n )\n }\n }\n break\n\n case ApplicationType.MMS:\n // find for any existing marketplace store connections\n let marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({\n where: { domain: { id: companyDomain.id }, status: 'ACTIVE' },\n relations: ['marketplaceDistributors']\n })\n\n const foundMarketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({\n where: { domain: { id: companyDomain.id }, orderNo: foundReleaseGood.refNo },\n relations: ['marketplaceStore']\n })\n\n let matchedMarketplaceStore: MarketplaceStore\n if (foundMarketplaceOrder) {\n matchedMarketplaceStore = marketplaceStores.filter(\n marketplaceStore => marketplaceStore.id == foundMarketplaceOrder.marketplaceStore.id\n )[0]\n }\n\n let combinedOrderInventories: any[] = foundOIs.map(oi => {\n return {\n sku: oi.product.sku,\n releaseQty: oi.releaseQty\n }\n })\n\n if (foundBundleInfo?.length) {\n foundBundleInfo.map(bundle => {\n combinedOrderInventories.push({\n sku: bundle.sku,\n releaseQty: bundle.releaseQty\n })\n })\n }\n\n for (let oi of combinedOrderInventories) {\n let foundMarketplaceProductVariations: MarketplaceProductVariation[] = await tx\n .getRepository(MarketplaceProductVariation)\n .find({\n where: { domain: { id: companyDomain.id }, sku: oi.sku },\n relations: ['marketplaceProduct', 'marketplaceProduct.marketplaceStore']\n })\n\n if (foundMarketplaceProductVariations) {\n await Promise.all(\n foundMarketplaceProductVariations.map(async variation => {\n if (variation.marketplaceProduct.marketplaceStore.reserveEnabled) {\n variation.reserveQty -= oi.releaseQty\n }\n\n await tx.getRepository(MarketplaceProductVariation).save(variation)\n })\n )\n }\n }\n\n if (marketplaceStores?.length && marketplaceStores.some(store => store.isAutoUpdateStockQty)) {\n marketplaceStores = marketplaceStores.filter(marketplaceStore => marketplaceStore.isAutoUpdateStockQty)\n let productIds: string[] = foundOIs.map(oi => oi.product.id)\n productIds = Array.from(new Set([...productIds]))\n const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)\n await ecommerceCtrl.updateProductVariationStock(marketplaceStores, productIds, companyDomain)\n }\n\n updateSCStock(sellercraft)\n break\n\n default:\n updateSCStock(sellercraft)\n break\n }\n\n // 1. RO Status change (PENDING => PENDING_RECEIVE)\n const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).save({\n ...foundReleaseGood,\n status: ORDER_STATUS.PENDING_RECEIVE,\n updater: user\n })\n\n // 1. Update status of order inventories\n foundOIs = foundOIs.map((orderInventory: OrderInventory) => {\n return {\n ...orderInventory,\n status: ORDER_INVENTORY_STATUS.PENDING_RECEIVE,\n updater: user\n }\n })\n await tx.getRepository(OrderInventory).save(foundOIs)\n\n // 2. Update status of order vass\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((orderVas: OrderVas) => {\n return {\n ...orderVas,\n status: ORDER_VAS_STATUS.PENDING_RECEIVE,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // notification logics\n // get Office Admin Users\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `New Release Order from ${customerBizplace.name}`,\n body: `New incoming order, ${foundReleaseGood.name} is pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n }\n\n return releaseGood\n}\n\nexport async function receiveReleaseGood(name: string, context: any, tx: EntityManager): Promise<ReleaseGood> {\n const { domain, user } = context.state\n\n const foundReleaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: ['bizplace', 'orderInventories', 'orderVass']\n })\n\n if (!foundReleaseGood) throw new Error(`Release good order doesn't exists.`)\n let foundOIs: OrderInventory[] = foundReleaseGood.orderInventories\n let foundOVs: OrderVas[] = foundReleaseGood.orderVass\n let customerBizplace: Bizplace = foundReleaseGood.bizplace\n\n // 1. RO Status change (PENDING_RECEIVE => PENDING_WORKSHEET)\n const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).save({\n ...foundReleaseGood,\n status: ORDER_STATUS.PENDING_WORKSHEET,\n acceptedBy: user,\n acceptedAt: new Date(),\n updater: user\n })\n\n // 1. Update status of order inventories\n foundOIs = foundOIs.map((orderInventory: OrderInventory) => {\n return {\n ...orderInventory,\n status: ORDER_INVENTORY_STATUS.PENDING_WORKSHEET,\n updater: user\n }\n })\n await tx.getRepository(OrderInventory).save(foundOIs)\n\n // 2. Update status of order vass\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((orderVas: OrderVas) => {\n return {\n ...orderVas,\n status: ORDER_VAS_STATUS.READY_TO_PROCESS,\n updater: user\n }\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n // notification logics\n // get Office Admin Users\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `New Release Order from ${customerBizplace.name}`,\n body: `New incoming order, ${foundReleaseGood.name} is pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n }\n\n return releaseGood\n}\n\nexport async function rejectReleaseGood(\n tx: EntityManager,\n context: ResolverContext,\n name: string,\n remark: string\n): Promise<ReleaseGood> {\n const { domain, user } = context.state\n\n const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },\n relations: [\n 'bizplace',\n 'bizplace.domain',\n 'orderProducts',\n 'orderProducts.product',\n 'orderProducts.product.productDetails',\n 'orderInventories',\n 'orderInventories.inventory',\n 'orderVass',\n 'shippingOrder'\n ]\n })\n\n if (!releaseGood) throw new Error(`Release good doesn't exists.`)\n if (!remark) throw new Error('Remark is not exist.')\n\n let foundOIs: OrderInventory[] = releaseGood.orderInventories\n let foundOVs: OrderVas[] = releaseGood.orderVass\n let foundOPs: OrderProduct[] = releaseGood.orderProducts\n\n // 1. Update status of order products (PENDING_RECEIVE => REJECTED)\n if (foundOIs && foundOIs.length) {\n await tx.getRepository(OrderInventory).save(\n await Promise.all(\n foundOIs.map(async (oi: OrderInventory) => {\n if (oi?.inventory?.id) {\n oi.inventory = await tx.getRepository(Inventory).findOneBy({ id: oi.inventory.id })\n\n await tx.getRepository(Inventory).save({\n ...oi.inventory,\n lockedQty: oi.inventory.lockedQty - oi.releaseQty,\n lockedUomValue: oi.inventory.lockedUomValue - oi.releaseUomValue,\n updater: user\n })\n }\n\n oi.status = ORDER_INVENTORY_STATUS.REJECTED\n oi.updater = user\n return oi\n })\n )\n )\n }\n\n if (foundOPs && foundOPs.length) {\n const orderSource: string = releaseGood.source\n switch (orderSource) {\n case ApplicationType.SELLERCRAFT:\n const sellercraft: Sellercraft = await tx\n .getRepository(Sellercraft)\n .findOneBy({ domain: { id: releaseGood.bizplace.domain.id }, status: SellercraftStatus.ACTIVE })\n\n if (sellercraft) {\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n await sellercraftCtrl.updateSellercraftStock(sellercraft, foundOPs, 'REJECT_ORDER')\n }\n break\n\n default:\n break\n }\n\n await tx.getRepository(OrderProduct).save(\n await Promise.all(\n foundOPs.map(async (op: OrderProduct) => {\n op.status = ORDER_PRODUCT_STATUS.REJECTED\n op.updater = user\n return op\n })\n )\n )\n }\n\n // 2. Update status of order vass if it exists (PENDING_RECEIVE => REJECTED)\n if (foundOVs && foundOVs.length) {\n foundOVs = foundOVs.map((ov: OrderVas) => {\n ov.status = ORDER_VAS_STATUS.REJECTED\n ov.updater = user\n return ov\n })\n await tx.getRepository(OrderVas).save(foundOVs)\n }\n\n if (releaseGood.shippingOrder) {\n // 2. 1) if it's yes update status of collection order\n const shippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).findOne({\n where: { domain: { id: domain.id }, name: releaseGood.shippingOrder.name }\n })\n\n shippingOrder.status = ORDER_STATUS.REJECTED\n shippingOrder.updater = user\n await tx.getRepository(ShippingOrder).save(shippingOrder)\n }\n\n releaseGood.remark = remark\n releaseGood.status = ORDER_STATUS.REJECTED\n releaseGood.updater = user\n await tx.getRepository(ReleaseGood).save(releaseGood)\n\n // notification logics\n const users: any[] = await getDomainUsers(releaseGood?.bizplace, tx)\n\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const msg = {\n title: `Latest status for ${releaseGood.name}`,\n body: `Your RO has been rejected.`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message: { ...msg }\n // })\n }\n\n return releaseGood\n}\n\nexport async function bulkGenerateReleaseGood(\n releaseGood: any,\n bizplaceId: string,\n roNoSetting: any,\n domain: Domain,\n user: User,\n tx?: EntityManager\n): Promise<ReleaseGood> {\n try {\n let warehouseDomain: Domain = domain\n let { orderInventories, shippingOrder } = releaseGood\n\n let bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({ id: bizplaceId })\n\n let newReleaseGood: ReleaseGood = {\n ...releaseGood,\n name: roNoSetting\n ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.RO_NUMBER, seed: {} })\n : OrderNoGenerator.releaseGood(),\n domain: warehouseDomain,\n bizplace: bizplace,\n deliveryAddress1: releaseGood?.deliveryAddress1 || null,\n deliveryAddress2: releaseGood?.deliveryAddress2 || null,\n deliveryAddress3: releaseGood?.deliveryAddress3 || null,\n deliveryAddress4: releaseGood?.deliveryAddress4 || null,\n attentionTo: releaseGood?.attentionTo || null,\n attentionCompany: releaseGood?.attentionCompany || null,\n city: releaseGood?.city || null,\n state: releaseGood?.state || null,\n postalCode: releaseGood?.postalCode || null,\n country: releaseGood?.country || null,\n phone1: releaseGood?.phone1 || null,\n phone2: releaseGood?.phone2 || null,\n email: releaseGood?.email || null,\n source: releaseGood?.source || null,\n airwayBill: releaseGood?.airwayBill,\n refNo: releaseGood.refNo,\n refNo2: releaseGood.refNo2,\n refNo3: releaseGood.refNo3,\n releaseDate: releaseGood.releaseDate,\n ownTransport: releaseGood?.ownTransport || false,\n orderMethod: ORDER_METHOD.SELECT_BY_PRODUCT,\n status: ORDER_STATUS.PENDING,\n creator: releaseGood?.creator || user,\n updater: releaseGood?.updater || user\n }\n\n newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)\n\n /** Generate Shipping Order */\n if (shippingOrder) {\n shippingOrder.remark = shippingOrder.exportRemark\n if (shippingOrder.containerClosureDate !== undefined) {\n shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)\n }\n delete shippingOrder.exportRemark\n\n const createdSO: ShippingOrder = await tx.getRepository(ShippingOrder).save({\n ...shippingOrder,\n name: OrderNoGenerator.shippingOrder(),\n domain,\n bizplace,\n status: ORDER_STATUS.PENDING,\n creator: user,\n updater: user\n })\n\n newReleaseGood.shippingOrder = createdSO\n }\n\n let finalOrderInventories: Partial<OrderInventory>[] = []\n\n // pre assign inventory to orderInventories\n for (let oi of orderInventories) {\n const pickingProductSetting: Setting = await tx.getRepository(Setting).findOne({\n where: { domain: { id: domain.id }, name: 'rule-for-picking-product' }\n })\n\n let locationSortingRules = []\n if (pickingProductSetting) {\n let locationSetting = JSON.parse(pickingProductSetting.value)\n for (const key in locationSetting) {\n locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })\n }\n }\n\n const product: Product = await tx.getRepository(Product).findOneBy({ id: oi.productId })\n\n let assignedResult = await InventoryUtil.autoAssignInventoryForRelease(\n product,\n oi,\n oi.packingType,\n locationSortingRules,\n bizplace,\n warehouseDomain,\n tx\n )\n\n finalOrderInventories.push(\n ...assignedResult.map(itm => {\n return {\n ...itm,\n orderProduct: oi?.orderProduct\n }\n })\n )\n }\n\n for (let oi of finalOrderInventories) {\n let generatedOI: OrderInventory = Object.assign(new OrderInventory(), oi)\n generatedOI = {\n ...generatedOI,\n domain: warehouseDomain,\n bizplace,\n status: ORDER_INVENTORY_STATUS.PENDING,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: newReleaseGood,\n creator: newReleaseGood?.creator || user,\n updater: newReleaseGood?.updater || user\n }\n\n let newOrderProduct: Partial<OrderProduct>\n if (!oi?.orderProduct) {\n newOrderProduct = {\n name: generatedOI.name,\n product: generatedOI.product,\n batchId: generatedOI.batchId,\n packingType: generatedOI.packingType,\n packingSize: generatedOI.packingSize,\n uom: generatedOI.uom,\n domain: warehouseDomain,\n bizplace,\n releaseQty: generatedOI.releaseQty,\n releaseUomValue: generatedOI.releaseUomValue,\n packQty: 0,\n actualPackQty: 0,\n palletQty: 0,\n actualPalletQty: 0,\n status: ORDER_PRODUCT_STATUS.ASSIGNED,\n releaseGood: newReleaseGood,\n creator: newReleaseGood?.creator || user,\n updater: newReleaseGood?.updater || user\n }\n\n newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)\n } else {\n newOrderProduct = await tx.getRepository(OrderProduct).save({\n ...oi.orderProduct,\n totalUomValue: `${oi.orderProduct.releaseUomValue} ${oi.orderProduct.uom}`,\n status: ORDER_PRODUCT_STATUS.ASSIGNED,\n updater: newReleaseGood?.updater || user\n })\n }\n\n await tx.getRepository(OrderInventory).save({ ...generatedOI, orderProduct: newOrderProduct })\n\n // update inventory locked qty and uom value\n await tx.getRepository(Inventory).update(oi.inventory.id, {\n lockedQty: (oi.inventory?.lockedQty || 0) + generatedOI.releaseQty,\n lockedUomValue: (oi.inventory?.lockedUomValue || 0) + generatedOI.releaseUomValue,\n updater: user\n } as any)\n }\n\n return newReleaseGood\n } catch (error) {\n throw error\n }\n}\n\nexport async function bulkConfirmReleaseGoods(\n releaseGoodsNo: string[],\n domain: Domain,\n user: User,\n context: any,\n tx?: EntityManager\n): Promise<ReleaseGood[]> {\n let foundReleaseGoods: ReleaseGood[] = await tx.getRepository(ReleaseGood).find({\n where: { name: In(releaseGoodsNo), status: ORDER_STATUS.PENDING },\n relations: ['bizplace']\n })\n\n if (!foundReleaseGoods.length) throw new Error(`release good order doesn't exists.`)\n let customerBizplace: Bizplace = foundReleaseGoods[0].bizplace\n\n let foundOrderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({\n where: { domain: { id: domain.id }, releaseGood: { id: In(foundReleaseGoods.map((rg: ReleaseGood) => rg.id)) } }\n })\n\n await tx\n .getRepository(ReleaseGood)\n .update({ id: In(foundReleaseGoods.map(rg => rg.id)) }, { status: ORDER_STATUS.PENDING_RECEIVE, updater: user })\n\n await tx\n .getRepository(OrderInventory)\n .update(\n { id: In(foundOrderInventories.map(oi => oi.id)) },\n { status: ORDER_INVENTORY_STATUS.PENDING_RECEIVE, updater: user }\n )\n\n if (context?.state?.type != 'api') {\n const users: any[] = await tx\n .getRepository('users_roles')\n .createQueryBuilder('ur')\n .select('ur.users_id', 'id')\n .where(qb => {\n const subQuery = qb\n .subQuery()\n .select('role.id')\n .from(Role, 'role')\n .where(\"role.name = 'Office Admin'\")\n .andWhere('role.domain_id = :domain', { domain: domain.id })\n .getQuery()\n return 'ur.roles_id IN ' + subQuery\n })\n .getRawMany()\n\n // send notification to Office Admin Users\n if (users?.length && context.header?.referer) {\n const receivers: any[] = users.map(user => user.id)\n const message = {\n title: `New Release Order from ${customerBizplace.name}`,\n body: `New incoming bulk release orders are pending for receiving`,\n url: context.header.referer,\n data: { url: context.header.referer }\n }\n\n /**\n * @notes Temporary off sendNotification due to suspect of causing wms down\n */\n\n // await sendNotification({\n // receivers,\n // message\n // })\n }\n }\n\n return Promise.all(\n foundReleaseGoods.map(async (releaseGood: ReleaseGood) => {\n return {\n ...releaseGood,\n orderInventories: await tx\n .getRepository(OrderInventory)\n .find({ where: { releaseGood: { id: releaseGood.id } } }) /* CONFIRMME regarding TYPEORM */,\n status: ORDER_STATUS.PENDING_RECEIVE,\n updater: user\n }\n })\n )\n}\n\nfunction extractRawReleaseGoods(rawReleaseGoods): Partial<ReleaseGood[]> {\n return rawReleaseGoods.reduce((releaseGoods, item) => {\n const idx: number = releaseGoods.findIndex(rg => {\n // consider these attributes if they are exist in \"item\"\n const comparison = [\n 'refNo2',\n 'refNo3',\n 'attentionTo',\n 'phone1',\n 'deliveryAddress1',\n 'deliveryAddress2',\n 'deliveryAddress3',\n 'deliveryAddress4',\n 'postalCode'\n ]\n\n let a: any = {},\n b: any = {}\n\n comparison.forEach(cc => {\n if (item[cc]) {\n a[cc] = item[cc]\n b[cc] = rg[cc]\n }\n })\n\n a = JSON.stringify(Object.fromEntries(Object.entries(a).sort()))\n b = JSON.stringify(Object.fromEntries(Object.entries(b).sort()))\n\n return rg.refNo == item.refNo && rg.releaseDate == item.releaseDate && a === b\n })\n\n if (idx >= 0) {\n const duplicateSkuIdx: number = releaseGoods[idx].orderInventories.findIndex(\n oi => oi.sku === item.sku && oi.packingType === item.packingType && oi.packingSize === item.packingSize\n )\n\n // if there is duplicated SKU, merge them and sum up the releaseQty\n if (duplicateSkuIdx >= 0) {\n releaseGoods[idx].orderInventories[duplicateSkuIdx].releaseQty += item.releaseQty\n } else {\n releaseGoods[idx].orderInventories.push({\n sku: item.sku,\n productId: item.productId,\n packingType: item.packingType,\n packingSize: item.packingSize,\n uom: item.uom,\n releaseQty: item.releaseQty,\n releaseUomValue: item.releaseUomValue\n })\n }\n } else {\n releaseGoods.push({\n releaseDate: item.releaseDate,\n refNo: item.refNo,\n refNo2: item.refNo2,\n refNo3: item.refNo3,\n attentionTo: item.attentionTo,\n phone1: item.phone1,\n deliveryAddress1: item.deliveryAddress1,\n deliveryAddress2: item.deliveryAddress2,\n deliveryAddress3: item.deliveryAddress3,\n deliveryAddress4: item.deliveryAddress4,\n billingAddress: item.billingAddress,\n billingCity: item.billingPostalCode,\n billingState: item.billingState,\n billingCountry: item.billingCountry,\n billingPostalCode: item.billingPostalCode,\n city: item.city,\n postalCode: item.postalCode,\n state: item.state,\n country: item.country,\n orderInventories: [\n {\n sku: item.sku,\n productId: item.productId,\n packingType: item.packingType,\n packingSize: item.packingSize,\n uom: item.uom,\n releaseQty: item.releaseQty,\n releaseUomValue: item.releaseUomValue\n }\n ]\n })\n }\n\n return releaseGoods\n }, [])\n}\n\nfunction formRawReleaseGoods(releaseGood, errorMsg) {\n let rawReleaseGoods = []\n for (let i = 0, l = releaseGood.orderInventories.length; i < l; i++) {\n let rawReleaseGood = {\n ...releaseGood,\n ...releaseGood.orderInventories[i],\n errorMsg\n }\n\n delete rawReleaseGood.orderInventories\n delete rawReleaseGood.product\n\n rawReleaseGoods.push(rawReleaseGood)\n }\n return rawReleaseGoods\n}\n"]}