@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.
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +86 -88
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js +16 -0
- package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
- package/dist-server/entities/worksheet-detail.js +2 -1
- package/dist-server/entities/worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +1 -34
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +70 -0
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +18 -8
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +6 -2
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +11 -3
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet-detail/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +81 -0
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -0
- package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js +12 -0
- package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js.map +1 -0
- package/dist-server/graphql/types/worksheet/index.js +9 -4
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/index.js +10 -0
- package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
- package/package.json +12 -12
- package/server/controllers/outbound/picking-worksheet-controller.ts +111 -109
- package/server/controllers/outbound/returning-worksheet-controller.ts +23 -0
- package/server/entities/worksheet-detail.ts +4 -0
- package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +2 -42
- package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +80 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-batch-picking-worksheet.ts +7 -8
- package/server/graphql/resolvers/worksheet/index.ts +2 -0
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +32 -11
- package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +4 -0
- package/server/graphql/resolvers/worksheet/picking/scan-product-batch-picking.ts +7 -4
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +5 -4
- package/server/graphql/resolvers/worksheet/worksheet.ts +16 -3
- package/server/graphql/resolvers/worksheet-detail/index.ts +3 -1
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +164 -0
- package/server/graphql/types/worksheet/batch-pick-worksheet-info.ts +9 -0
- package/server/graphql/types/worksheet/index.ts +10 -5
- package/server/graphql/types/worksheet-detail/index.ts +10 -0
package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js
ADDED
|
@@ -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
|
|
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
|
-
|
|
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,
|
|
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
|
|
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.
|
|
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.
|
|
31
|
-
"@things-factory/integration-lmd": "^4.3.
|
|
32
|
-
"@things-factory/integration-marketplace": "^4.3.
|
|
33
|
-
"@things-factory/integration-sellercraft": "^4.3.
|
|
34
|
-
"@things-factory/integration-sftp": "^4.3.
|
|
35
|
-
"@things-factory/marketplace-base": "^4.3.
|
|
36
|
-
"@things-factory/notification": "^4.3.
|
|
37
|
-
"@things-factory/sales-base": "^4.3.
|
|
38
|
-
"@things-factory/setting-base": "^4.3.
|
|
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.
|
|
41
|
+
"@things-factory/warehouse-base": "^4.3.62"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
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(
|
|
86
|
-
let
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
109
|
-
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
worksheet.worksheetDetails = await this.createWorksheetDetails(
|
|
141
|
+
worksheet,
|
|
142
|
+
WORKSHEET_TYPE.BATCH_PICKING,
|
|
143
|
+
hasInventoryOIs
|
|
144
|
+
)
|
|
145
|
+
}
|
|
142
146
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
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
|
-
|
|
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
|
-
|
|
514
|
-
|
|
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
|
-
|
|
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
|