@things-factory/worksheet-base 4.3.61 → 4.3.62

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 (55) hide show
  1. package/dist-server/controllers/outbound/picking-worksheet-controller.js +86 -88
  2. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/returning-worksheet-controller.js +16 -0
  4. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  5. package/dist-server/entities/worksheet-detail.js +2 -1
  6. package/dist-server/entities/worksheet-detail.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +1 -34
  8. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +70 -0
  10. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -0
  11. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js +4 -4
  12. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
  14. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  15. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +18 -8
  16. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  17. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +6 -2
  18. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  19. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js +4 -4
  20. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js.map +1 -1
  21. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  22. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  23. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -0
  24. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/worksheet.js +11 -3
  26. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  27. package/dist-server/graphql/resolvers/worksheet-detail/index.js +2 -1
  28. package/dist-server/graphql/resolvers/worksheet-detail/index.js.map +1 -1
  29. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +81 -0
  30. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -0
  31. package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js +12 -0
  32. package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js.map +1 -0
  33. package/dist-server/graphql/types/worksheet/index.js +9 -4
  34. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  35. package/dist-server/graphql/types/worksheet-detail/index.js +10 -0
  36. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  37. package/package.json +12 -12
  38. package/server/controllers/outbound/picking-worksheet-controller.ts +111 -109
  39. package/server/controllers/outbound/returning-worksheet-controller.ts +23 -0
  40. package/server/entities/worksheet-detail.ts +4 -0
  41. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +2 -42
  42. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
  43. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +7 -8
  44. package/server/graphql/resolvers/worksheet/index.ts +2 -0
  45. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +32 -11
  46. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +4 -0
  47. package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +7 -4
  48. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
  49. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +5 -4
  50. package/server/graphql/resolvers/worksheet/worksheet.ts +16 -3
  51. package/server/graphql/resolvers/worksheet-detail/index.ts +3 -1
  52. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +164 -0
  53. package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
  54. package/server/graphql/types/worksheet/index.ts +10 -5
  55. package/server/graphql/types/worksheet-detail/index.ts +10 -0
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.regenerateReleaseGoodWorksheetDetails = exports.regenerateReleaseGoodWorksheetDetailsResolver = void 0;
4
+ const product_base_1 = require("@things-factory/product-base");
5
+ const sales_base_1 = require("@things-factory/sales-base");
6
+ const warehouse_base_1 = require("@things-factory/warehouse-base");
7
+ const constants_1 = require("../../../constants");
8
+ const entities_1 = require("../../../entities");
9
+ const utils_1 = require("../../../utils");
10
+ exports.regenerateReleaseGoodWorksheetDetailsResolver = {
11
+ async regenerateReleaseGoodWorksheetDetails(_, { worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails }, context) {
12
+ const { tx, domain, user } = context.state;
13
+ return await regenerateReleaseGoodWorksheetDetails(tx, domain, user, worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails);
14
+ }
15
+ };
16
+ async function regenerateReleaseGoodWorksheetDetails(tx, domain, user, worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails) {
17
+ // 1. Remove prev worksheet details if it's exists
18
+ const worksheet = await tx.getRepository(entities_1.Worksheet).findOne({
19
+ where: { name: worksheetNo, domain },
20
+ relations: [
21
+ 'bizplace',
22
+ 'releaseGood',
23
+ 'worksheetDetails',
24
+ 'worksheetDetails.targetInventory',
25
+ 'worksheetDetails.targetInventory.inventory',
26
+ 'worksheetDetails.targetInventory.product',
27
+ 'worksheetDetails.targetInventory.releaseGood',
28
+ 'worksheetDetails.targetInventory.orderProduct',
29
+ 'worksheetDetails.targetInventory.bizplace'
30
+ ]
31
+ });
32
+ const prevWSDs = worksheet.worksheetDetails.filter((wsd) => {
33
+ const targetInv = wsd.targetInventory;
34
+ if (targetInv.orderProductId === orderProductId)
35
+ return wsd.id;
36
+ });
37
+ // TODO: Update prev inventory locked qty and delete order inventories
38
+ if (prevWSDs === null || prevWSDs === void 0 ? void 0 : prevWSDs.length) {
39
+ const wsdIds = prevWSDs.map((wsd) => wsd.id);
40
+ const prevOrderInvIds = prevWSDs.map((wsd) => wsd.targetInventory.id);
41
+ const prevOrderInventories = prevWSDs.map((wsd) => wsd.targetInventory);
42
+ await Promise.all(prevOrderInventories.map(async (prevOI) => {
43
+ if (prevOI === null || prevOI === void 0 ? void 0 : prevOI.inventory) {
44
+ await tx.getRepository(warehouse_base_1.Inventory).update({ id: prevOI.inventory.id }, {
45
+ lockedQty: prevOI.inventory.lockedQty - prevOI.releaseQty,
46
+ lockedUomValue: prevOI.inventory.lockedUomValue - prevOI.releaseUomValue
47
+ });
48
+ }
49
+ }));
50
+ await tx.getRepository(entities_1.WorksheetDetail).delete(wsdIds);
51
+ await tx.getRepository(sales_base_1.OrderInventory).delete(prevOrderInvIds);
52
+ }
53
+ await Promise.all(worksheetDetails.map(async (wsd) => {
54
+ // 2. Create order inventory
55
+ let targetInventory = wsd.targetInventory;
56
+ const inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne(targetInventory.inventory.id);
57
+ let targetProduct = await tx
58
+ .getRepository(sales_base_1.OrderProduct)
59
+ .findOne({ where: { id: wsd.targetProduct.id }, relations: ['releaseGood'] });
60
+ targetInventory = await tx.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, targetInventory), { domain, bizplace: worksheet.bizplace, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseGood: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING ? targetProduct.releaseGood : worksheet.releaseGood, inventory, batchId: inventory.batchId, batchIdRef: inventory.batchIdRef, status: sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK, product: await tx.getRepository(product_base_1.Product).findOne(productId), packingType,
61
+ packingSize, orderProduct: targetProduct, refWorksheetId: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING ? worksheet.id : null, creator: user, updater: user }));
62
+ const currentLockedQty = inventory.lockedQty;
63
+ const currentLockedUomValue = inventory.lockedUomValue;
64
+ await tx.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, targetInventory.inventory), { lockedQty: Boolean(currentLockedQty)
65
+ ? targetInventory.releaseQty + currentLockedQty
66
+ : targetInventory.releaseQty, lockedUomValue: Boolean(currentLockedUomValue)
67
+ ? targetInventory.releaseUomValue + currentLockedUomValue
68
+ : targetInventory.releaseUomValue, updater: user }));
69
+ // update order product status to ASSIGNED
70
+ await tx
71
+ .getRepository(sales_base_1.OrderProduct)
72
+ .update({ id: targetProduct.id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED, updater: user });
73
+ // 3. Create worksheet details
74
+ await tx.getRepository(entities_1.WorksheetDetail).save(Object.assign(Object.assign({}, wsd), { domain, bizplace: worksheet.bizplace, worksheet, name: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING
75
+ ? utils_1.WorksheetNoGenerator.batchPickingDetail()
76
+ : utils_1.WorksheetNoGenerator.pickingDetail(), targetProduct,
77
+ targetInventory, type: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING ? constants_1.WORKSHEET_TYPE.BATCH_PICKING : constants_1.WORKSHEET_TYPE.PICKING, status: constants_1.WORKSHEET_STATUS.DEACTIVATED, creator: user, updater: user }));
78
+ }));
79
+ }
80
+ exports.regenerateReleaseGoodWorksheetDetails = regenerateReleaseGoodWorksheetDetails;
81
+ //# sourceMappingURL=regenerate-release-good-worksheet-details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regenerate-release-good-worksheet-details.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenerateBatchPickInfo = void 0;
4
+ const apollo_server_koa_1 = require("apollo-server-koa");
5
+ exports.GenerateBatchPickInfo = (0, apollo_server_koa_1.gql) `
6
+ input GenerateBatchPickInfo {
7
+ releaseGoodNo: String
8
+ bizplaceId: String
9
+ bizplaceName: String
10
+ }
11
+ `;
12
+ //# sourceMappingURL=batch-pick-worksheet-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-pick-worksheet-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/batch-pick-worksheet-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,qBAAqB,GAAG,IAAA,uBAAG,EAAA;;;;;;CAMvC,CAAA"}
@@ -7,6 +7,7 @@ const contact_point_info_1 = require("./contact-point-info");
7
7
  const cycle_count_worksheet_1 = require("./cycle-count-worksheet");
8
8
  const delivery_info_1 = require("./delivery-info");
9
9
  const delivery_order_info_1 = require("./delivery-order-info");
10
+ const delivery_order_ro_1 = require("./delivery-order-ro");
10
11
  const delivery_worksheet_1 = require("./delivery-worksheet");
11
12
  const executing_worksheet_1 = require("./executing-worksheet");
12
13
  const find_release_orders_by_task_no_1 = require("./find-release-orders-by-task-no");
@@ -26,7 +27,7 @@ const worksheet_info_1 = require("./worksheet-info");
26
27
  const worksheet_list_1 = require("./worksheet-list");
27
28
  const worksheet_patch_1 = require("./worksheet-patch");
28
29
  const worksheet_with_pagination_1 = require("./worksheet-with-pagination");
29
- const delivery_order_ro_1 = require("./delivery-order-ro");
30
+ const batch_pick_worksheet_info_1 = require("./batch-pick-worksheet-info");
30
31
  exports.Mutation = `
31
32
  createWorksheet (
32
33
  worksheet: NewWorksheet!
@@ -82,8 +83,7 @@ exports.Mutation = `
82
83
  ): ReleaseGoodWorksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
83
84
 
84
85
  generateBatchPickingWorksheet (
85
- releaseGoodNos: [String!]
86
- partnerBizplaceId: String!
86
+ releaseGoodWithBiz: [[GenerateBatchPickInfo!]]
87
87
  ): Worksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
88
88
 
89
89
  generateCycleCountWorksheet (
@@ -333,6 +333,7 @@ exports.Mutation = `
333
333
  binLocation: String
334
334
  serialNumber: String
335
335
  toteNo: String
336
+ pickingQty: Int
336
337
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
337
338
 
338
339
  sortingProduct (
@@ -380,6 +381,7 @@ exports.Mutation = `
380
381
  productBarcode: String!
381
382
  inventory: InventoryPatch!
382
383
  binLocationName: String
384
+ pickingQty: Int
383
385
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
384
386
 
385
387
  crossDockPicking (
@@ -710,6 +712,8 @@ exports.Query = `
710
712
 
711
713
  recommendPutawayLocation(worksheetDetailName: String!, optCnt: Int): [Location] @privilege(category: "worksheet", privilege: "query")
712
714
 
715
+ findSortingReleaseOrdersByTaskNo(taskNo: String!): FindReleaseOrdersByTaskNo @privilege(category: "worksheet", privilege: "query") @transaction
716
+
713
717
  findReleaseOrdersByTaskNo(taskNo: String!): FindReleaseOrdersByTaskNo @privilege(category: "worksheet", privilege: "query") @transaction
714
718
  `;
715
719
  exports.Types = [
@@ -738,6 +742,7 @@ exports.Types = [
738
742
  picking_assignment_status_1.PickingAssignmentStatus,
739
743
  my_picking_assignment_status_1.MyPickingAssignmentStatus,
740
744
  find_release_orders_by_task_no_1.FindReleaseOrdersByTaskNo,
741
- delivery_order_ro_1.DeliveryOrderRO
745
+ delivery_order_ro_1.DeliveryOrderRO,
746
+ batch_pick_worksheet_info_1.GenerateBatchPickInfo
742
747
  ];
743
748
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,yEAAmE;AACnE,6DAAuD;AACvD,mEAA6D;AAC7D,mDAA8C;AAC9C,+DAAyD;AACzD,6DAAwD;AACxD,+DAA0D;AAC1D,qFAA4E;AAC5E,+DAAyD;AACzD,2EAAqE;AACrE,uEAAiE;AACjE,iFAA0E;AAC1E,mDAA8C;AAC9C,2EAAqE;AACrE,yDAAoD;AACpD,qEAA+D;AAC/D,qEAA+D;AAC/D,+DAAyD;AACzD,2CAAuC;AACvC,mEAA6D;AAC7D,qDAAgD;AAChD,qDAAgD;AAChD,uDAAkD;AAClD,2EAAqE;AACrE,2DAAqD;AAExC,QAAA,QAAQ,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6hBrC,CAAA;AAEY,QAAA,KAAK,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8IlC,CAAA;AAEY,QAAA,KAAK,GAAiB;IACjC,qBAAS;IACT,uBAAU;IACV,4BAAY;IACZ,gCAAc;IACd,8BAAa;IACb,iDAAsB;IACtB,6CAAoB;IACpB,2CAAmB;IACnB,6CAAoB;IACpB,mDAAuB;IACvB,uCAAiB;IACjB,uCAAiB;IACjB,qCAAgB;IAChB,uCAAiB;IACjB,8BAAa;IACb,4BAAY;IACZ,sCAAiB;IACjB,2CAAmB;IACnB,wCAAkB;IAClB,+CAAqB;IACrB,kCAAe;IACf,mDAAuB;IACvB,mDAAuB;IACvB,wDAAyB;IACzB,0DAAyB;IACzB,mCAAe;CAChB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,yEAAmE;AACnE,6DAAuD;AACvD,mEAA6D;AAC7D,mDAA8C;AAC9C,+DAAyD;AACzD,2DAAqD;AACrD,6DAAwD;AACxD,+DAA0D;AAC1D,qFAA4E;AAC5E,+DAAyD;AACzD,2EAAqE;AACrE,uEAAiE;AACjE,iFAA0E;AAC1E,mDAA8C;AAC9C,2EAAqE;AACrE,yDAAoD;AACpD,qEAA+D;AAC/D,qEAA+D;AAC/D,+DAAyD;AACzD,2CAAuC;AACvC,mEAA6D;AAC7D,qDAAgD;AAChD,qDAAgD;AAChD,uDAAkD;AAClD,2EAAqE;AACrE,2EAAmE;AAEtD,QAAA,QAAQ,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8hBrC,CAAA;AAEY,QAAA,KAAK,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgJlC,CAAA;AAEY,QAAA,KAAK,GAAgB;IAChC,qBAAS;IACT,uBAAU;IACV,4BAAY;IACZ,gCAAc;IACd,8BAAa;IACb,iDAAsB;IACtB,6CAAoB;IACpB,2CAAmB;IACnB,6CAAoB;IACpB,mDAAuB;IACvB,uCAAiB;IACjB,uCAAiB;IACjB,qCAAgB;IAChB,uCAAiB;IACjB,8BAAa;IACb,4BAAY;IACZ,sCAAiB;IACjB,2CAAmB;IACnB,wCAAkB;IAClB,+CAAqB;IACrB,kCAAe;IACf,mDAAuB;IACvB,mDAAuB;IACvB,wDAAyB;IACzB,0DAAyB;IACzB,mCAAe;IACf,iDAAqB;CACtB,CAAA"}
@@ -30,6 +30,16 @@ exports.Mutation = `
30
30
  worksheetDetails: [NewWorksheetDetail]
31
31
  ): Boolean @transaction
32
32
 
33
+ regenerateReleaseGoodWorksheetDetails (
34
+ worksheetNo: String!
35
+ batchId: String!
36
+ productId: String!
37
+ packingType: String!
38
+ packingSize: Float!
39
+ orderProductId: String!
40
+ worksheetDetails: [NewWorksheetDetail]
41
+ ): Boolean @transaction
42
+
33
43
  generateBatchPickingWorksheetDetails (
34
44
  worksheetNo: String!
35
45
  batchId: String!
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet-detail/index.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AACpD,iEAA2D;AAC3D,+CAA0C;AAC1C,yDAAoD;AACpD,mEAA6D;AAC7D,qEAA+D;AAElD,QAAA,QAAQ,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CrC,CAAA;AAEY,QAAA,KAAK,GAAiB;;;;;;;CAOlC,CAAA;AAEY,QAAA,KAAK,GAAG;IACnB,kCAAe;IACf,yCAAkB;IAClB,6CAAoB;IACpB,2CAAmB;IACnB,wBAAU;IACV,kCAAe;CAChB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet-detail/index.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AACpD,iEAA2D;AAC3D,+CAA0C;AAC1C,yDAAoD;AACpD,mEAA6D;AAC7D,qEAA+D;AAElD,QAAA,QAAQ,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDrC,CAAA;AAEY,QAAA,KAAK,GAAiB;;;;;;;CAOlC,CAAA;AAEY,QAAA,KAAK,GAAG;IACnB,kCAAe;IACf,yCAAkB;IAClB,6CAAoB;IACpB,2CAAmB;IACnB,wBAAU;IACV,kCAAe;CAChB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/worksheet-base",
3
- "version": "4.3.61",
3
+ "version": "4.3.62",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -27,18 +27,18 @@
27
27
  "@things-factory/auth-base": "^4.3.47",
28
28
  "@things-factory/biz-base": "^4.3.47",
29
29
  "@things-factory/document-template-base": "^4.3.47",
30
- "@things-factory/id-rule-base": "^4.3.47",
31
- "@things-factory/integration-lmd": "^4.3.59",
32
- "@things-factory/integration-marketplace": "^4.3.61",
33
- "@things-factory/integration-sellercraft": "^4.3.61",
34
- "@things-factory/integration-sftp": "^4.3.61",
35
- "@things-factory/marketplace-base": "^4.3.61",
36
- "@things-factory/notification": "^4.3.47",
37
- "@things-factory/sales-base": "^4.3.61",
38
- "@things-factory/setting-base": "^4.3.47",
30
+ "@things-factory/id-rule-base": "^4.3.62",
31
+ "@things-factory/integration-lmd": "^4.3.62",
32
+ "@things-factory/integration-marketplace": "^4.3.62",
33
+ "@things-factory/integration-sellercraft": "^4.3.62",
34
+ "@things-factory/integration-sftp": "^4.3.62",
35
+ "@things-factory/marketplace-base": "^4.3.62",
36
+ "@things-factory/notification": "^4.3.62",
37
+ "@things-factory/sales-base": "^4.3.62",
38
+ "@things-factory/setting-base": "^4.3.62",
39
39
  "@things-factory/shell": "^4.3.47",
40
40
  "@things-factory/transport-base": "^4.3.47",
41
- "@things-factory/warehouse-base": "^4.3.61"
41
+ "@things-factory/warehouse-base": "^4.3.62"
42
42
  },
43
- "gitHead": "42f79d1b7f03a52a1c9b043b897fca7a7e386049"
43
+ "gitHead": "013096f8c0dd7bda146fd9370bf0de70da0e7bf2"
44
44
  }
@@ -16,7 +16,8 @@ import {
16
16
  OrderToteItem,
17
17
  OrderToteSeal,
18
18
  OrderVas,
19
- ReleaseGood
19
+ ReleaseGood,
20
+ GenerateBatchPickInfo
20
21
  } from '@things-factory/sales-base'
21
22
  import { Setting } from '@things-factory/setting-base'
22
23
  import {
@@ -82,108 +83,113 @@ export class PickingWorksheetController extends VasWorksheetController {
82
83
  return worksheet
83
84
  }
84
85
 
85
- async generateBatchPickingWorksheet(releaseGoodNos: [string], partnerBizplaceId: string): Promise<Worksheet> {
86
- let releaseGoods: ReleaseGood[] = await this.trxMgr.getRepository(ReleaseGood).find({
87
- where: { domain: this.domain, name: In(releaseGoodNos), status: ORDER_STATUS.PENDING_WORKSHEET },
88
- relations: [
89
- 'orderProducts',
90
- 'orderProducts.product',
91
- 'orderInventories',
92
- 'orderInventories.inventory',
93
- 'bizplace',
94
- 'bizplace.domain'
95
- ]
96
- })
86
+ async generateBatchPickingWorksheet(releaseGoodWithBiz: [GenerateBatchPickInfo[]]): Promise<Worksheet[]> {
87
+ let worksheets = []
88
+
89
+ for (let i = 0; i < releaseGoodWithBiz.length; i++) {
90
+ let releaseGoodNos = releaseGoodWithBiz[i].map(itm => itm.releaseGoodNo)
91
+
92
+ let releaseGoods: ReleaseGood[] = await this.trxMgr.getRepository(ReleaseGood).find({
93
+ where: { domain: this.domain, name: In(releaseGoodNos), status: ORDER_STATUS.PENDING_WORKSHEET },
94
+ relations: [
95
+ 'orderProducts',
96
+ 'orderProducts.product',
97
+ 'orderInventories',
98
+ 'orderInventories.inventory',
99
+ 'bizplace',
100
+ 'bizplace.domain'
101
+ ]
102
+ })
97
103
 
98
- const partnerBizplace: Bizplace = await this.trxMgr.getRepository(Bizplace).findOne(partnerBizplaceId)
104
+ let orderInventories: OrderInventory[] = []
105
+ releaseGoods.map((releaseGood: ReleaseGood) => {
106
+ const foundOIs: OrderInventory[] = releaseGood.orderInventories
107
+ foundOIs.map((oi: OrderInventory) => {
108
+ orderInventories.push(oi)
109
+ })
110
+ })
99
111
 
100
- let orderInventories: OrderInventory[] = []
101
- releaseGoods.map((releaseGood: ReleaseGood) => {
102
- const foundOIs: OrderInventory[] = releaseGood.orderInventories
103
- foundOIs.map((oi: OrderInventory) => {
104
- orderInventories.push(oi)
112
+ const worksheetSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
113
+ where: {
114
+ domain: this.domain,
115
+ name: TASK_NUMBER_SETTING_KEY.TASK_NO_RULE
116
+ }
105
117
  })
106
- })
118
+ if (!worksheetSetting) throw new Error(this.ERROR_MSG.FIND.NO_RESULT('task number rule'))
107
119
 
108
- const worksheetSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
109
- where: {
120
+ let worksheet: Worksheet = new Worksheet()
121
+ worksheet.name = WorksheetNoGenerator.generate(WORKSHEET_TYPE.BATCH_PICKING)
122
+ worksheet.type = WORKSHEET_TYPE.BATCH_PICKING
123
+ worksheet.taskNo = await generateId({
110
124
  domain: this.domain,
111
- name: TASK_NUMBER_SETTING_KEY.TASK_NO_RULE
112
- }
113
- })
114
- if (!worksheetSetting) throw new Error(this.ERROR_MSG.FIND.NO_RESULT('task number rule'))
115
-
116
- let worksheet: Worksheet = new Worksheet()
117
- worksheet.name = WorksheetNoGenerator.generate(WORKSHEET_TYPE.BATCH_PICKING)
118
- worksheet.type = WORKSHEET_TYPE.BATCH_PICKING
119
- worksheet.taskNo = await generateId({
120
- domain: this.domain,
121
- type: TASK_NUMBER_RULE_TYPE.TASK_NO,
122
- seed: {}
123
- })
124
- worksheet.status = WORKSHEET_STATUS.DEACTIVATED
125
- worksheet.bizplace = partnerBizplace
126
- worksheet.domain = this.domain
127
- worksheet.creator = this.user
128
- worksheet.updater = this.user
129
- worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
130
-
131
- if (orderInventories.some((oi: OrderInventory) => oi.inventory?.id)) {
132
- const hasInventoryOIs: OrderInventory[] = orderInventories.filter(
133
- (orderInventory: OrderInventory) => orderInventory.inventory !== null
134
- )
125
+ type: TASK_NUMBER_RULE_TYPE.TASK_NO,
126
+ seed: {}
127
+ })
128
+ worksheet.status = WORKSHEET_STATUS.DEACTIVATED
129
+ worksheet.bizplace = releaseGoodWithBiz[i][0].bizplaceId
130
+ worksheet.domain = this.domain
131
+ worksheet.creator = this.user
132
+ worksheet.updater = this.user
133
+ worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
134
+
135
+ if (orderInventories.some((oi: OrderInventory) => oi.inventory?.id)) {
136
+ const hasInventoryOIs: OrderInventory[] = orderInventories.filter(
137
+ (orderInventory: OrderInventory) => orderInventory.inventory !== null
138
+ )
135
139
 
136
- worksheet.worksheetDetails = await this.createWorksheetDetails(
137
- worksheet,
138
- WORKSHEET_TYPE.BATCH_PICKING,
139
- hasInventoryOIs
140
- )
141
- }
140
+ worksheet.worksheetDetails = await this.createWorksheetDetails(
141
+ worksheet,
142
+ WORKSHEET_TYPE.BATCH_PICKING,
143
+ hasInventoryOIs
144
+ )
145
+ }
142
146
 
143
- orderInventories.forEach((oi: OrderInventory) => {
144
- oi.refWorksheetId = worksheet.id
145
- oi.status = oi.inventory?.id ? ORDER_INVENTORY_STATUS.READY_TO_PICK : ORDER_INVENTORY_STATUS.PENDING_SPLIT
146
- oi.updater = this.user
147
- })
148
- await this.updateOrderTargets(orderInventories)
147
+ orderInventories.forEach((oi: OrderInventory) => {
148
+ oi.refWorksheetId = worksheet.id
149
+ oi.status = oi.inventory?.id ? ORDER_INVENTORY_STATUS.READY_TO_PICK : ORDER_INVENTORY_STATUS.PENDING_SPLIT
150
+ oi.updater = this.user
151
+ })
152
+ await this.updateOrderTargets(orderInventories)
149
153
 
150
- releaseGoods = releaseGoods.map((releaseGood: ReleaseGood) => {
151
- return {
152
- ...releaseGood,
153
- status: ORDER_STATUS.READY_TO_PICK,
154
- updater: this.user
155
- }
156
- })
157
- await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)
154
+ releaseGoods = releaseGoods.map((releaseGood: ReleaseGood) => {
155
+ return {
156
+ ...releaseGood,
157
+ status: ORDER_STATUS.READY_TO_PICK,
158
+ updater: this.user
159
+ }
160
+ })
161
+ await this.trxMgr.getRepository(ReleaseGood).save(releaseGoods)
158
162
 
159
- //asynchronously save packageId if found
160
- Promise.all(
161
- releaseGoods.map(async ro => {
162
- if (ro?.packageId == null || ro?.packageId.trim() == '') {
163
- const sellercraft: Sellercraft = await getRepository(Sellercraft).findOne({ domain: ro.bizplace.domain })
164
- if (sellercraft) {
165
- try {
166
- await getConnection().transaction(async trx => {
167
- const sellercraftCtrl: SellercraftController = new SellercraftController(trx, this.domain, this.user)
168
- let packageInfo = await sellercraftCtrl.packOrder(sellercraft, {
169
- ...ro,
170
- orderProducts: ro.orderProducts
163
+ //asynchronously save packageId if found
164
+ Promise.all(
165
+ releaseGoods.map(async ro => {
166
+ if (ro?.packageId == null || ro?.packageId.trim() == '') {
167
+ const sellercraft: Sellercraft = await getRepository(Sellercraft).findOne({ domain: ro.bizplace.domain })
168
+ if (sellercraft) {
169
+ try {
170
+ await getConnection().transaction(async trx => {
171
+ const sellercraftCtrl: SellercraftController = new SellercraftController(trx, this.domain, this.user)
172
+ let packageInfo = await sellercraftCtrl.packOrder(sellercraft, {
173
+ ...ro,
174
+ orderProducts: ro.orderProducts
175
+ })
176
+
177
+ await trx.getRepository(ReleaseGood).update({ id: ro.id }, { packageId: packageInfo.packageId })
171
178
  })
172
-
173
- await trx.getRepository(ReleaseGood).update({ id: ro.id }, { packageId: packageInfo.packageId })
174
- })
175
- } catch (error) {
176
- logger.error(
177
- `picking-worksheet-controller:generateBatchPickingWorksheet[packageId][refNo: ${ro.refNo}, refNo2: ${
178
- ro.refNo2
179
- }]: ${JSON.stringify(error)}`
180
- )
179
+ } catch (error) {
180
+ logger.error(
181
+ `picking-worksheet-controller:generateBatchPickingWorksheet[packageId][refNo: ${ro.refNo}, refNo2: ${
182
+ ro.refNo2
183
+ }]: ${JSON.stringify(error)}`
184
+ )
185
+ }
181
186
  }
182
187
  }
183
- }
184
- })
185
- )
186
- return worksheet
188
+ })
189
+ )
190
+ worksheets.push(worksheet)
191
+ }
192
+ return worksheets
187
193
  }
188
194
 
189
195
  async generateBatchPickingWorksheetDetail(
@@ -443,7 +449,8 @@ export class PickingWorksheetController extends VasWorksheetController {
443
449
  cartonId: string,
444
450
  binLocation?: string,
445
451
  serialNumber?: string,
446
- toteNo?: string
452
+ toteNo?: string,
453
+ pickingQty?: number
447
454
  ): Promise<OrderInventory> {
448
455
  try {
449
456
  let worksheetDetail: WorksheetDetail = await this.findExecutableWorksheetDetailByName(
@@ -485,7 +492,7 @@ export class PickingWorksheetController extends VasWorksheetController {
485
492
  const packingType: string = inventory.packingType
486
493
  const packingSize: number = inventory.packingSize
487
494
 
488
- let pickedQty: number = 1
495
+ let pickedQty: number = pickingQty ? pickingQty : 1
489
496
  const releaseQty: number = targetInventory.releaseQty
490
497
 
491
498
  targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation)
@@ -510,14 +517,16 @@ export class PickingWorksheetController extends VasWorksheetController {
510
517
  parentDetail.packingType === packingType && parentDetail.packingSize == packingSize
511
518
  )
512
519
 
513
- pickedQty = await this.getChildQty(productDetails, productBarcode, roProductDetail)
514
- if (pickedQty + targetInventory.pickedQty > releaseQty) {
515
- throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`))
516
- }
520
+ let childQty = await this.getChildQty(productDetails, productBarcode, roProductDetail)
521
+ pickedQty *= childQty
517
522
  } else if (!foundProductDetail) {
518
523
  throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode))
519
524
  }
520
525
 
526
+ if (pickedQty + targetInventory.pickedQty > releaseQty) {
527
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`))
528
+ }
529
+
521
530
  if (product?.isRequireSerialNumberScanningOutbound) {
522
531
  if (!serialNumber || serialNumber == '') {
523
532
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`))
@@ -869,7 +878,8 @@ export class PickingWorksheetController extends VasWorksheetController {
869
878
  cartonId: string,
870
879
  productBarcode: string,
871
880
  inventory: any,
872
- binLocationName: string
881
+ binLocationName: string,
882
+ pickingQty: number
873
883
  ): Promise<void> {
874
884
  const worksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
875
885
  where: { domain: this.domain, taskNo, type: worksheetType, status: WORKSHEET_STATUS.EXECUTING },
@@ -893,7 +903,7 @@ export class PickingWorksheetController extends VasWorksheetController {
893
903
  const batchId: string = inventory.batchId
894
904
  const packingType: string = inventory.packingType
895
905
  const packingSize: number = inventory.packingSize
896
- let pickedQty: number = 1
906
+ let pickedQty: number = pickingQty ? pickingQty : 1
897
907
 
898
908
  const targetInventories: OrderInventory[] = worksheetDetails
899
909
  .map((wsd: WorksheetDetail) => wsd.targetInventory)
@@ -926,7 +936,8 @@ export class PickingWorksheetController extends VasWorksheetController {
926
936
  this.ERROR_MSG.FIND.NO_RESULT(`Packing Type ( ${packingType}) or Packing Size (${packingSize})`)
927
937
  )
928
938
 
929
- pickedQty = await this.getChildQty(productDetails, productBarcode, roProductDetail)
939
+ let childQty = await this.getChildQty(productDetails, productBarcode, roProductDetail)
940
+ pickedQty *= childQty
930
941
  }
931
942
 
932
943
  const sumOfReleaseQty: number = targetInventories
@@ -1042,15 +1053,6 @@ export class PickingWorksheetController extends VasWorksheetController {
1042
1053
  itm.updater = this.user
1043
1054
  })
1044
1055
 
1045
- // let inventoryLists = InventoryItems.filter(
1046
- // (value, index, self) => index === self.findIndex(itm => itm.inventory.id === value.inventory.id)
1047
- // )
1048
-
1049
- // inventoryLists.forEach((itm: Inventory) => {
1050
- // if (itm.inventory.qty - itm.releaseQty == 0)
1051
- // this.transactionInventory(itm, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.TERMINATED)
1052
- // })
1053
-
1054
1056
  await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
1055
1057
  }
1056
1058
 
@@ -87,6 +87,7 @@ export class ReturningWorksheetController extends VasWorksheetController {
87
87
  const releaseGood: ReleaseGood = worksheet.releaseGood
88
88
  let targetInventory: OrderInventory = worksheetDetail.targetInventory
89
89
  let inventory: Inventory = targetInventory.inventory
90
+ let location: Location = inventory.location
90
91
 
91
92
  const originLocation: Location = inventory.location
92
93
  const originPalletId: string = inventory.palletId
@@ -95,6 +96,17 @@ export class ReturningWorksheetController extends VasWorksheetController {
95
96
  where: { domain: this.domain, name: toLocationName },
96
97
  relations: ['warehouse']
97
98
  })
99
+
100
+ if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {
101
+ if (
102
+ ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {
103
+ return l === toLocation.type
104
+ })
105
+ ) {
106
+ throw new Error('Location should be assigned only to Quarantine or Reserve Zone')
107
+ }
108
+ }
109
+
98
110
  if (!toLocation) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))
99
111
 
100
112
  const isPalletDiff: boolean = originPalletId !== palletId
@@ -158,6 +170,7 @@ export class ReturningWorksheetController extends VasWorksheetController {
158
170
  const releaseGood: ReleaseGood = worksheet.releaseGood
159
171
  let targetInventory: OrderInventory = worksheetDetail.targetInventory
160
172
  let inventory: Inventory = targetInventory.inventory
173
+ let invLocation: Location = inventory.location
161
174
 
162
175
  if (inventory.cartonId !== cartonId) {
163
176
  throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId))
@@ -178,6 +191,16 @@ export class ReturningWorksheetController extends VasWorksheetController {
178
191
  relations: ['warehouse']
179
192
  })
180
193
 
194
+ if (worksheet.type === 'WAREHOUSE_RETURN' && releaseGood.recall) {
195
+ if (
196
+ ![LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE].some(l => {
197
+ return l === location.type
198
+ })
199
+ ) {
200
+ throw new Error('Location should be assigned only to Quarantine or Reserve Zone')
201
+ }
202
+ }
203
+
181
204
  if (!location) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(toLocationName))
182
205
  const warehouse: Warehouse = location.warehouse
183
206
  const zone: string = warehouse.zone
@@ -12,6 +12,10 @@ import { Worksheet } from './worksheet'
12
12
  (worksheetDetail: WorksheetDetail) => [worksheetDetail.domain, worksheetDetail.bizplace, worksheetDetail.name],
13
13
  { unique: true }
14
14
  )
15
+ @Index(
16
+ 'ix_worksheet-detail_1',
17
+ (worksheetDetail: WorksheetDetail) => [worksheetDetail.targetInventory]
18
+ )
15
19
  export class WorksheetDetail {
16
20
  @PrimaryGeneratedColumn('uuid')
17
21
  id: string