@things-factory/worksheet-base 5.0.0-alpha.5 → 5.0.0-alpha.52
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/constants/template.js +1 -0
- package/dist-server/constants/template.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +24 -10
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js +22 -13
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +309 -4
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/index.js +2 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +56 -9
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +172 -7
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +500 -18
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js +11 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js +215 -12
- package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-fm-grn.js +229 -0
- package/dist-server/controllers/render-fm-grn.js.map +1 -0
- package/dist-server/controllers/render-grn.js +77 -45
- package/dist-server/controllers/render-grn.js.map +1 -1
- package/dist-server/controllers/render-invoices.js +103 -65
- package/dist-server/controllers/render-invoices.js.map +1 -1
- package/dist-server/controllers/render-manifest.js +12 -5
- package/dist-server/controllers/render-manifest.js.map +1 -1
- package/dist-server/controllers/render-orientage-do.js.map +1 -1
- package/dist-server/controllers/render-orientage-grn.js +1 -0
- package/dist-server/controllers/render-orientage-grn.js.map +1 -1
- package/dist-server/controllers/render-po.js +147 -0
- package/dist-server/controllers/render-po.js.map +1 -0
- package/dist-server/controllers/render-ro-do.js +65 -1
- package/dist-server/controllers/render-ro-do.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +23 -1
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/index.js +2 -1
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +174 -0
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
- package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
- package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +12 -4
- package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +30 -1
- package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +27 -23
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-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 +3 -0
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +48 -2
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +153 -132
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +2 -5
- package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +13 -10
- package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +14 -25
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +49 -58
- package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/picking/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/seal-tote.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +36 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
- package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +6 -0
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +0 -21
- package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/index.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +45 -5
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +13 -8
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +19 -4
- package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +12 -3
- package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +10 -2
- package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +2 -5
- package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
- package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +11 -0
- package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
- package/dist-server/graphql/types/worksheet/index.js +52 -11
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
- package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/types/worksheet/picking-assignment-status.js +2 -2
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +8 -3
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +3 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-patch.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/index.js +0 -2
- package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +5 -2
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/worksheet-detail-patch.js +1 -1
- package/dist-server/index.js +5 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +12 -0
- package/dist-server/routes.js.map +1 -1
- package/dist-server/utils/inventory-util.js +14 -25
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/dist-server/utils/worksheet-no-generator.js +25 -28
- package/dist-server/utils/worksheet-no-generator.js.map +1 -1
- package/package.json +17 -17
- package/server/constants/template.ts +1 -0
- package/server/controllers/ecommerce/sellercraft-controller.ts +38 -10
- package/server/controllers/inbound/putaway-worksheet-controller.ts +27 -13
- package/server/controllers/inbound/unloading-worksheet-controller.ts +376 -8
- package/server/controllers/index.ts +3 -0
- package/server/controllers/outbound/loading-worksheet-controller.ts +94 -15
- package/server/controllers/outbound/packing-worksheet-controller.ts +224 -9
- package/server/controllers/outbound/picking-worksheet-controller.ts +653 -24
- package/server/controllers/outbound/returning-worksheet-controller.ts +12 -1
- package/server/controllers/outbound/sorting-worksheet-controller.ts +303 -18
- package/server/controllers/render-fm-grn.ts +266 -0
- package/server/controllers/render-grn.ts +95 -52
- package/server/controllers/render-invoices.ts +119 -72
- package/server/controllers/render-manifest.ts +12 -5
- package/server/controllers/render-orientage-do.ts +11 -11
- package/server/controllers/render-orientage-grn.ts +12 -11
- package/server/controllers/render-po.ts +170 -0
- package/server/controllers/render-ro-do.ts +93 -8
- package/server/controllers/worksheet-controller.ts +32 -3
- package/server/entities/index.ts +2 -1
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +147 -0
- package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
- package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +27 -0
- package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +15 -5
- package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +35 -2
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
- package/server/graphql/resolvers/worksheet/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -0
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +67 -8
- package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
- package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
- package/server/graphql/resolvers/worksheet/packing/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/packing/packing.ts +5 -4
- package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -4
- package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +167 -145
- package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +2 -2
- package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +15 -11
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +18 -31
- package/server/graphql/resolvers/worksheet/picking/index.ts +5 -1
- package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +62 -61
- package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
- package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
- package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
- package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
- package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -2
- package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
- package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +6 -4
- package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +6 -4
- package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +6 -0
- package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
- package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +0 -25
- package/server/graphql/resolvers/worksheet/unloading/index.ts +4 -0
- package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
- package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
- package/server/graphql/resolvers/worksheet/unloading/unload.ts +3 -1
- package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +3 -1
- package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
- package/server/graphql/resolvers/worksheet/worksheets.ts +64 -5
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +30 -14
- package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +39 -11
- package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
- package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +15 -3
- package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +18 -1
- package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +2 -2
- package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
- package/server/graphql/types/worksheet/index.ts +52 -11
- package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
- package/server/graphql/types/worksheet/picking-assignment-status.ts +2 -2
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +8 -3
- package/server/graphql/types/worksheet/worksheet-info.ts +3 -0
- package/server/graphql/types/worksheet/worksheet-patch.ts +1 -0
- package/server/graphql/types/worksheet/worksheet.ts +1 -0
- package/server/graphql/types/worksheet-detail/index.ts +0 -2
- package/server/graphql/types/worksheet-detail/inventory-detail.ts +5 -2
- package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +1 -1
- package/server/index.ts +5 -0
- package/server/routes.ts +17 -0
- package/server/utils/inventory-util.ts +15 -23
- package/server/utils/worksheet-no-generator.ts +25 -25
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.PickingWorksheetController = void 0;
|
|
4
15
|
const typeorm_1 = require("typeorm");
|
|
@@ -237,9 +248,10 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
237
248
|
'worksheetDetails',
|
|
238
249
|
'worksheetDetails.targetInventory',
|
|
239
250
|
'worksheetDetails.targetInventory.inventory',
|
|
240
|
-
'worksheetDetails.targetInventory.product'
|
|
251
|
+
'worksheetDetails.targetInventory.product',
|
|
252
|
+
'worksheetDetails.targetInventory.orderProduct'
|
|
241
253
|
]);
|
|
242
|
-
const worksheetDetails = await this.extractMatchedWorksheetDetails(worksheet.worksheetDetails, batchId, productId, packingType, packingSize, ['targetInventory', 'targetInventory.inventory']);
|
|
254
|
+
const worksheetDetails = await this.extractMatchedWorksheetDetails(worksheet.worksheetDetails, batchId, productId, packingType, packingSize, ['targetInventory', 'targetInventory.inventory', 'targetInventory.orderProduct']);
|
|
243
255
|
let worksheetDetailIds = [];
|
|
244
256
|
let targetInventoryIds = [];
|
|
245
257
|
for (const worksheetDetail of worksheetDetails) {
|
|
@@ -252,6 +264,9 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
252
264
|
inventory.lockedQty = inventory.lockedQty - targetInventory.releaseQty;
|
|
253
265
|
inventory.lockedUomValue = inventory.lockedUomValue - targetInventory.releaseUomValue;
|
|
254
266
|
await this.updateInventory(inventory);
|
|
267
|
+
await this.trxMgr
|
|
268
|
+
.getRepository(sales_base_1.OrderProduct)
|
|
269
|
+
.update({ id: targetInventory.orderProduct.id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.PENDING_ASSIGN, updater: this.user });
|
|
255
270
|
}
|
|
256
271
|
await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetailIds);
|
|
257
272
|
await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventoryIds);
|
|
@@ -264,7 +279,7 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
264
279
|
status: sales_base_1.ORDER_INVENTORY_STATUS.COMPLETE_SPLIT
|
|
265
280
|
}, { status: sales_base_1.ORDER_INVENTORY_STATUS.PENDING_SPLIT, updater: this.user, updatedAt: new Date() });
|
|
266
281
|
}
|
|
267
|
-
async scanProductPicking(worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber) {
|
|
282
|
+
async scanProductPicking(worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, toteNo) {
|
|
268
283
|
try {
|
|
269
284
|
let worksheetDetail = await this.findExecutableWorksheetDetailByName(worksheetDetailName, worksheetType, [
|
|
270
285
|
'worksheet',
|
|
@@ -273,14 +288,17 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
273
288
|
'targetInventory.releaseGood',
|
|
274
289
|
'targetInventory.inventory',
|
|
275
290
|
'targetInventory.product',
|
|
291
|
+
'targetInventory.orderProduct',
|
|
276
292
|
'targetInventory.product.productDetails',
|
|
277
293
|
'targetInventory.product.productDetails.product',
|
|
278
294
|
'targetInventory.product.productDetails.childProductDetail'
|
|
279
295
|
]);
|
|
280
296
|
const releaseGood = worksheetDetail.targetInventory.releaseGood;
|
|
281
297
|
let targetInventory = worksheetDetail.targetInventory;
|
|
298
|
+
let targetProduct = targetInventory.orderProduct;
|
|
282
299
|
const product = targetInventory.product;
|
|
283
300
|
let inventory = targetInventory.inventory;
|
|
301
|
+
let bizplace = worksheetDetail.worksheet.bizplace;
|
|
284
302
|
//validation to prevent duplicated picking
|
|
285
303
|
let oiValidate = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
|
|
286
304
|
where: { domain: this.domain, id: targetInventory.id, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING }
|
|
@@ -310,19 +328,62 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
310
328
|
detail.packingSize == packingSize &&
|
|
311
329
|
((_a = detail.product) === null || _a === void 0 ? void 0 : _a.id) === product.id;
|
|
312
330
|
});
|
|
313
|
-
if (!foundProductDetail) {
|
|
331
|
+
if (!foundProductDetail && !(product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound)) {
|
|
314
332
|
const roProductDetail = productDetails.find((parentDetail) => parentDetail.packingType === packingType && parentDetail.packingSize == packingSize);
|
|
315
333
|
pickedQty = await this.getChildQty(productDetails, productBarcode, roProductDetail);
|
|
316
|
-
if (pickedQty > releaseQty) {
|
|
334
|
+
if (pickedQty + targetInventory.pickedQty > releaseQty) {
|
|
317
335
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
|
|
318
336
|
}
|
|
319
337
|
}
|
|
320
|
-
if (
|
|
321
|
-
|
|
338
|
+
else if (!foundProductDetail) {
|
|
339
|
+
throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
|
|
340
|
+
}
|
|
341
|
+
if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound) {
|
|
342
|
+
if (!serialNumber || serialNumber == '') {
|
|
322
343
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
|
|
323
|
-
if (serialNumber) {
|
|
324
|
-
targetInventory.serialNumber = JSON.stringify(targetInventory.serialNumber ? [...JSON.parse(targetInventory.serialNumber), serialNumber] : [serialNumber]);
|
|
325
344
|
}
|
|
345
|
+
let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
|
|
346
|
+
where: {
|
|
347
|
+
inventory,
|
|
348
|
+
status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED]))
|
|
349
|
+
}
|
|
350
|
+
});
|
|
351
|
+
let foundSerialNumber = await this.trxMgr
|
|
352
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
353
|
+
.findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } });
|
|
354
|
+
if (foundSerialNumber) {
|
|
355
|
+
if (foundSerialNumber.inventoryId !== inventory.id) {
|
|
356
|
+
throw new Error('Serial Number scanned is in another inventory');
|
|
357
|
+
}
|
|
358
|
+
if (foundSerialNumber.outboundOrderId) {
|
|
359
|
+
let releaseGood = await this.trxMgr
|
|
360
|
+
.getRepository(sales_base_1.ReleaseGood)
|
|
361
|
+
.findOne({ where: { id: foundSerialNumber.outboundOrderId } });
|
|
362
|
+
throw new Error(`Inventory Item is already picked in ${releaseGood.name}`);
|
|
363
|
+
}
|
|
364
|
+
foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
|
|
365
|
+
foundSerialNumber.updater = this.user;
|
|
366
|
+
foundSerialNumber.outboundOrderId = releaseGood.id;
|
|
367
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
if (totalInventoryItems >= inventory.qty) {
|
|
371
|
+
throw new Error('Insufficient inventory quantity to scan new serial number');
|
|
372
|
+
}
|
|
373
|
+
let inventoryItem = new warehouse_base_1.InventoryItem();
|
|
374
|
+
inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
|
|
375
|
+
inventoryItem.serialNumber = serialNumber;
|
|
376
|
+
inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
|
|
377
|
+
inventoryItem.outboundOrderId = releaseGood.id;
|
|
378
|
+
inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
|
|
379
|
+
inventoryItem.product = product;
|
|
380
|
+
inventoryItem.inventory = inventory;
|
|
381
|
+
inventoryItem.domain = this.domain;
|
|
382
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (toteNo) {
|
|
386
|
+
await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace);
|
|
326
387
|
}
|
|
327
388
|
await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty);
|
|
328
389
|
}
|
|
@@ -330,12 +391,14 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
330
391
|
throw error;
|
|
331
392
|
}
|
|
332
393
|
}
|
|
333
|
-
async picking(worksheetDetailName, worksheetType, palletId, locationName, pickedQty, binLocation, serialNumber) {
|
|
394
|
+
async picking(worksheetDetailName, worksheetType, palletId, locationName, pickedQty, binLocation, serialNumber, toteNo) {
|
|
334
395
|
try {
|
|
335
396
|
let worksheetDetail = await this.findExecutableWorksheetDetailByName(worksheetDetailName, worksheetType, [
|
|
336
397
|
'worksheet',
|
|
398
|
+
'worksheet.bizplace',
|
|
337
399
|
'targetInventory',
|
|
338
400
|
'targetInventory.releaseGood',
|
|
401
|
+
'targetInventory.orderProduct',
|
|
339
402
|
'targetInventory.inventory',
|
|
340
403
|
'targetInventory.inventory.location',
|
|
341
404
|
'targetInventory.product'
|
|
@@ -344,6 +407,8 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
344
407
|
let targetInventory = worksheetDetail.targetInventory;
|
|
345
408
|
const product = targetInventory.product;
|
|
346
409
|
let inventory = targetInventory.inventory;
|
|
410
|
+
let targetProduct = targetInventory.orderProduct;
|
|
411
|
+
let bizplace = worksheetDetail.worksheet.bizplace;
|
|
347
412
|
//validation to prevent duplicated picking
|
|
348
413
|
let oiValidate = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
|
|
349
414
|
where: { domain: this.domain, id: targetInventory.id, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING }
|
|
@@ -353,16 +418,79 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
353
418
|
//validation to prevent over release
|
|
354
419
|
if (inventory.qty <= 0)
|
|
355
420
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
|
|
356
|
-
if (inventory.palletId !== palletId)
|
|
421
|
+
if (inventory.palletId !== palletId && !(product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound))
|
|
357
422
|
throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
|
|
358
|
-
if (product === null || product === void 0 ? void 0 : product.
|
|
359
|
-
if (!serialNumber || serialNumber == '')
|
|
423
|
+
if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound) {
|
|
424
|
+
if (!serialNumber || serialNumber == '') {
|
|
360
425
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
|
|
361
|
-
|
|
362
|
-
|
|
426
|
+
}
|
|
427
|
+
let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
|
|
428
|
+
where: {
|
|
429
|
+
inventory,
|
|
430
|
+
status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED]))
|
|
431
|
+
}
|
|
432
|
+
});
|
|
433
|
+
let foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).findOne({
|
|
434
|
+
where: { domain: this.domain, serialNumber: serialNumber, product },
|
|
435
|
+
relations: ['product', 'inventory']
|
|
436
|
+
});
|
|
437
|
+
let scannedPalletIdInventory = await this.trxMgr
|
|
438
|
+
.getRepository(warehouse_base_1.Inventory)
|
|
439
|
+
.findOne({ where: { domain: this.domain, palletId }, relations: ['product'] });
|
|
440
|
+
if (foundSerialNumber) {
|
|
441
|
+
if (foundSerialNumber.outboundOrderId) {
|
|
442
|
+
let releaseGood = await this.trxMgr
|
|
443
|
+
.getRepository(sales_base_1.ReleaseGood)
|
|
444
|
+
.findOne({ where: { id: foundSerialNumber.outboundOrderId } });
|
|
445
|
+
throw new Error(`Inventory Item is already picked in ${releaseGood.name}`);
|
|
446
|
+
}
|
|
447
|
+
foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
|
|
448
|
+
foundSerialNumber.updater = this.user;
|
|
449
|
+
foundSerialNumber.outboundOrderId = releaseGood.id;
|
|
450
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
if (totalInventoryItems >= inventory.qty) {
|
|
454
|
+
throw new Error('Insufficient inventory quantity to scan new serial number');
|
|
455
|
+
}
|
|
456
|
+
let inventoryItem = new warehouse_base_1.InventoryItem();
|
|
457
|
+
inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
|
|
458
|
+
inventoryItem.serialNumber = serialNumber;
|
|
459
|
+
inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
|
|
460
|
+
inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
|
|
461
|
+
inventoryItem.outboundOrderId = releaseGood.id;
|
|
462
|
+
inventoryItem.product = product;
|
|
463
|
+
inventoryItem.inventory = scannedPalletIdInventory;
|
|
464
|
+
inventoryItem.domain = this.domain;
|
|
465
|
+
foundSerialNumber = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
|
|
466
|
+
}
|
|
467
|
+
if (inventory.palletId !== palletId) {
|
|
468
|
+
let existingOrderInv = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
|
|
469
|
+
where: {
|
|
470
|
+
domain: this.domain,
|
|
471
|
+
inventory: scannedPalletIdInventory,
|
|
472
|
+
releaseGood: releaseGood
|
|
473
|
+
}
|
|
474
|
+
});
|
|
475
|
+
if (existingOrderInv) {
|
|
476
|
+
//if replacement order inventory already existed in worksheet detail
|
|
477
|
+
await this.serialNumberReplacementForExistingOrderInv(existingOrderInv, targetInventory, worksheetDetail, foundSerialNumber);
|
|
478
|
+
}
|
|
479
|
+
else if (scannedPalletIdInventory.batchId == inventory.batchId &&
|
|
480
|
+
scannedPalletIdInventory.product.id == product.id &&
|
|
481
|
+
scannedPalletIdInventory.product.packingType == product.packingType) {
|
|
482
|
+
//if replacement order inventory does not exist
|
|
483
|
+
await this.serialNumberReplacement(targetInventory, scannedPalletIdInventory, releaseGood, product, worksheetDetail, foundSerialNumber);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('Pallet ID', palletId, inventory.palletId));
|
|
487
|
+
}
|
|
363
488
|
}
|
|
364
489
|
}
|
|
365
490
|
targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation);
|
|
491
|
+
if (toteNo) {
|
|
492
|
+
await this.toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace);
|
|
493
|
+
}
|
|
366
494
|
await this.updatePickingTransaction(releaseGood, targetInventory, worksheetDetail, inventory, pickedQty);
|
|
367
495
|
const fromLocation = targetInventory.inventory.location;
|
|
368
496
|
if (locationName) {
|
|
@@ -573,11 +701,34 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
573
701
|
name: releaseGoodNo,
|
|
574
702
|
status: sales_base_1.ORDER_STATUS.PICKING
|
|
575
703
|
});
|
|
704
|
+
const foundNotSealedOrderTote = await this.trxMgr
|
|
705
|
+
.getRepository(sales_base_1.OrderTote)
|
|
706
|
+
.findOne({ where: { releaseGood, closedDate: (0, typeorm_1.IsNull)() } });
|
|
707
|
+
if (foundNotSealedOrderTote) {
|
|
708
|
+
throw new Error('Please seal the tote(s) before completing');
|
|
709
|
+
}
|
|
576
710
|
let worksheet = await this.findWorksheetByRefOrder(releaseGood, constants_1.WORKSHEET_TYPE.PICKING, [
|
|
577
711
|
'worksheetDetails',
|
|
578
712
|
'worksheetDetails.targetInventory'
|
|
579
713
|
]);
|
|
580
714
|
await this.checkRecordValidity(worksheet, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
|
|
715
|
+
let inventoryItems = await this.trxMgr
|
|
716
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
717
|
+
.find({ where: { outboundOrderId: releaseGood.id } });
|
|
718
|
+
if (inventoryItems.length > 0) {
|
|
719
|
+
inventoryItems.forEach((itm) => {
|
|
720
|
+
itm.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
|
|
721
|
+
itm.updater = this.user;
|
|
722
|
+
});
|
|
723
|
+
// let inventoryLists = InventoryItems.filter(
|
|
724
|
+
// (value, index, self) => index === self.findIndex(itm => itm.inventory.id === value.inventory.id)
|
|
725
|
+
// )
|
|
726
|
+
// inventoryLists.forEach((itm: Inventory) => {
|
|
727
|
+
// if (itm.inventory.qty - itm.releaseQty == 0)
|
|
728
|
+
// this.transactionInventory(itm, releaseGood, 0, 0, INVENTORY_TRANSACTION_TYPE.TERMINATED)
|
|
729
|
+
// })
|
|
730
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
|
|
731
|
+
}
|
|
581
732
|
let orderStatus;
|
|
582
733
|
if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) {
|
|
583
734
|
orderStatus = sales_base_1.ORDER_STATUS.READY_TO_PACK;
|
|
@@ -607,20 +758,20 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
607
758
|
worksheet.endedAt = new Date();
|
|
608
759
|
worksheet.updater = this.user;
|
|
609
760
|
worksheet = await this.trxMgr.getRepository(entities_1.Worksheet).save(worksheet);
|
|
610
|
-
const worksheetDetails = worksheet.worksheetDetails;
|
|
761
|
+
const worksheetDetails = worksheet.worksheetDetails.filter(wsD => wsD.status != 'MISSING');
|
|
611
762
|
worksheetDetails.forEach((wsd) => {
|
|
612
763
|
wsd.status = constants_1.WORKSHEET_STATUS.DONE;
|
|
613
764
|
wsd.updater = this.user;
|
|
614
765
|
});
|
|
615
766
|
await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetails);
|
|
616
|
-
const targetInventories =
|
|
767
|
+
const targetInventories = worksheetDetails.map((wsd) => {
|
|
617
768
|
let targetInventory = wsd.targetInventory;
|
|
618
769
|
targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED;
|
|
619
770
|
targetInventory.updater = this.user;
|
|
620
771
|
return targetInventory;
|
|
621
772
|
});
|
|
622
773
|
await this.updateOrderTargets(targetInventories);
|
|
623
|
-
const releaseGoods =
|
|
774
|
+
const releaseGoods = worksheetDetails.map((wsd) => {
|
|
624
775
|
let releaseGood = wsd.targetInventory.releaseGood;
|
|
625
776
|
let orderStatus;
|
|
626
777
|
if (releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.packingOption) {
|
|
@@ -676,6 +827,7 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
676
827
|
return orderInventory;
|
|
677
828
|
}
|
|
678
829
|
async updatePickingTransaction(releaseGood, orderInventory, worksheetDetail, inventory, pickedQty) {
|
|
830
|
+
var _a;
|
|
679
831
|
const releaseQty = orderInventory.releaseQty;
|
|
680
832
|
orderInventory.pickedQty = Boolean(orderInventory === null || orderInventory === void 0 ? void 0 : orderInventory.pickedQty) ? orderInventory.pickedQty + pickedQty : pickedQty;
|
|
681
833
|
if (orderInventory.pickedQty == releaseQty) {
|
|
@@ -684,6 +836,9 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
684
836
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `quantity can't exceed limitation`));
|
|
685
837
|
}
|
|
686
838
|
orderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
|
|
839
|
+
orderInventory.pickedBy = (_a = this.user) === null || _a === void 0 ? void 0 : _a.name;
|
|
840
|
+
orderInventory.pickedByUser = this.user;
|
|
841
|
+
orderInventory.pickedAt = new Date();
|
|
687
842
|
inventory.qty -= orderInventory.releaseQty;
|
|
688
843
|
inventory.uomValue = Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100;
|
|
689
844
|
inventory.lockedQty = inventory.lockedQty - orderInventory.releaseQty;
|
|
@@ -692,6 +847,16 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
692
847
|
worksheetDetail.status = constants_1.WORKSHEET_STATUS.DONE;
|
|
693
848
|
worksheetDetail.updater = this.user;
|
|
694
849
|
await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetail);
|
|
850
|
+
let inventoryItems = await this.trxMgr
|
|
851
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
852
|
+
.find({ where: { outboundOrderId: releaseGood.id } });
|
|
853
|
+
if (inventoryItems.length > 0) {
|
|
854
|
+
inventoryItems.forEach((itm) => {
|
|
855
|
+
itm.status = warehouse_base_1.INVENTORY_STATUS.PICKED;
|
|
856
|
+
itm.updater = this.user;
|
|
857
|
+
});
|
|
858
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
|
|
859
|
+
}
|
|
695
860
|
if (leftQty === 0) {
|
|
696
861
|
inventory.status = warehouse_base_1.INVENTORY_STATUS.TERMINATED;
|
|
697
862
|
await this.transactionInventory(inventory, releaseGood, 0, 0, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.TERMINATED);
|
|
@@ -700,6 +865,323 @@ class PickingWorksheetController extends vas_worksheet_controller_1.VasWorksheet
|
|
|
700
865
|
await this.updateOrderTargets([orderInventory]);
|
|
701
866
|
return orderInventory;
|
|
702
867
|
}
|
|
868
|
+
async serialNumberReplacementForExistingOrderInv(existingOrderInv, targetInventory, worksheetDetail, foundSerialNumber) {
|
|
869
|
+
try {
|
|
870
|
+
//1. update replacement inventory, order inventory, old inventory, old order inventory quantity
|
|
871
|
+
let newInventory = await this.trxMgr
|
|
872
|
+
.getRepository(warehouse_base_1.Inventory)
|
|
873
|
+
.findOne({ where: { domain: this.domain, id: existingOrderInv === null || existingOrderInv === void 0 ? void 0 : existingOrderInv.inventoryId } });
|
|
874
|
+
let newOrderInventory = await this.trxMgr
|
|
875
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
876
|
+
.findOne({ where: { domain: this.domain, id: existingOrderInv === null || existingOrderInv === void 0 ? void 0 : existingOrderInv.id } });
|
|
877
|
+
let oldInventory = await this.trxMgr
|
|
878
|
+
.getRepository(warehouse_base_1.Inventory)
|
|
879
|
+
.findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.inventory.id } });
|
|
880
|
+
let oldOrderInventory = await this.trxMgr
|
|
881
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
882
|
+
.findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.id } });
|
|
883
|
+
//if replacement inventory quantity insufficient
|
|
884
|
+
if (newInventory.qty - newInventory.lockedQty < targetInventory.releaseQty - targetInventory.pickedQty) {
|
|
885
|
+
newOrderInventory.releaseQty += newInventory.qty - newInventory.lockedQty;
|
|
886
|
+
newOrderInventory.releaseUomValue += newInventory.uomValue - newInventory.lockedUomValue;
|
|
887
|
+
oldOrderInventory.releaseQty -= newOrderInventory.releaseQty;
|
|
888
|
+
oldOrderInventory.releaseUomValue -= newOrderInventory.releaseUomValue;
|
|
889
|
+
oldInventory.lockedQty -= newOrderInventory.releaseQty;
|
|
890
|
+
oldInventory.lockedUomValue -= newOrderInventory.releaseUomValue;
|
|
891
|
+
newInventory.lockedQty = newInventory.qty;
|
|
892
|
+
newInventory.lockedUomValue = newInventory.uomValue;
|
|
893
|
+
}
|
|
894
|
+
else {
|
|
895
|
+
newOrderInventory.releaseQty += targetInventory.releaseQty - targetInventory.pickedQty;
|
|
896
|
+
newOrderInventory.releaseUomValue +=
|
|
897
|
+
newOrderInventory.releaseQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
|
|
898
|
+
oldOrderInventory.releaseQty = targetInventory.pickedQty;
|
|
899
|
+
oldOrderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
|
|
900
|
+
oldOrderInventory.releaseUomValue =
|
|
901
|
+
(targetInventory.releaseUomValue / targetInventory.releaseQty) * oldOrderInventory.releaseQty;
|
|
902
|
+
oldInventory.lockedQty -= targetInventory.releaseQty - targetInventory.pickedQty;
|
|
903
|
+
oldInventory.lockedUomValue =
|
|
904
|
+
oldInventory.lockedQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
|
|
905
|
+
newInventory.lockedQty = newInventory.lockedQty + (targetInventory.releaseQty - targetInventory.pickedQty);
|
|
906
|
+
newInventory.lockedUomValue =
|
|
907
|
+
(targetInventory.releaseUomValue / targetInventory.releaseQty) * newInventory.lockedQty;
|
|
908
|
+
}
|
|
909
|
+
newInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, newInventory), { updater: this.user }));
|
|
910
|
+
newOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, newOrderInventory), { status: warehouse_base_1.INVENTORY_STATUS.PICKING, pickedQty: existingOrderInv.pickedQty++, updater: this.user }));
|
|
911
|
+
oldInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oldInventory), { updater: this.user }));
|
|
912
|
+
foundSerialNumber = await this.trxMgr
|
|
913
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
914
|
+
.save(Object.assign(Object.assign({}, foundSerialNumber), { inventory: newInventory }));
|
|
915
|
+
//2. update replacement worksheet detail
|
|
916
|
+
await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
|
|
917
|
+
targetInventory: existingOrderInv
|
|
918
|
+
}, {
|
|
919
|
+
status: constants_1.WORKSHEET_STATUS.EXECUTING,
|
|
920
|
+
updater: this.user
|
|
921
|
+
});
|
|
922
|
+
if (oldOrderInventory.releaseQty !== 0) {
|
|
923
|
+
oldOrderInventory = await this.trxMgr
|
|
924
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
925
|
+
.save(Object.assign(Object.assign({}, oldOrderInventory), { updater: this.user }));
|
|
926
|
+
await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
|
|
927
|
+
name: worksheetDetail.name
|
|
928
|
+
}, {
|
|
929
|
+
status: constants_1.WORKSHEET_STATUS.DONE,
|
|
930
|
+
updater: this.user
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
else {
|
|
934
|
+
await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetail.ild);
|
|
935
|
+
await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventory.id);
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
catch (e) { }
|
|
939
|
+
}
|
|
940
|
+
async serialNumberReplacement(targetInventory, scannedPalletIdInventory, releaseGood, product, worksheetDetail, foundSerialNumber) {
|
|
941
|
+
try {
|
|
942
|
+
//1. create new inventory, new order inventory, update old inventory, old order inventory quantity
|
|
943
|
+
let newInventory = await this.trxMgr
|
|
944
|
+
.getRepository(warehouse_base_1.Inventory)
|
|
945
|
+
.findOne({ where: { id: scannedPalletIdInventory === null || scannedPalletIdInventory === void 0 ? void 0 : scannedPalletIdInventory.id } });
|
|
946
|
+
let oldInventory = await this.trxMgr
|
|
947
|
+
.getRepository(warehouse_base_1.Inventory)
|
|
948
|
+
.findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.inventory.id } });
|
|
949
|
+
let oldOrderInventory = await this.trxMgr
|
|
950
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
951
|
+
.findOne({ where: { domain: this.domain, id: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.id } });
|
|
952
|
+
let newOrderInventoryReleaseQty = 0;
|
|
953
|
+
let newOrderInventoryReleaseUomValue = 0;
|
|
954
|
+
//if replacement inventory quantity insufficient
|
|
955
|
+
if (newInventory.qty - newInventory.lockedQty < targetInventory.releaseQty - targetInventory.pickedQty) {
|
|
956
|
+
newOrderInventoryReleaseQty = newInventory.qty - newInventory.lockedQty;
|
|
957
|
+
newOrderInventoryReleaseUomValue = newInventory.uomValue - newInventory.lockedUomValue;
|
|
958
|
+
oldOrderInventory.releaseQty -= newOrderInventoryReleaseQty;
|
|
959
|
+
oldOrderInventory.releaseUomValue -= newOrderInventoryReleaseUomValue;
|
|
960
|
+
oldInventory.lockedQty -= newOrderInventoryReleaseQty;
|
|
961
|
+
oldInventory.lockedUomValue -= newOrderInventoryReleaseUomValue;
|
|
962
|
+
newInventory.lockedQty = newInventory.qty;
|
|
963
|
+
newInventory.lockedUomValue = newInventory.uomValue;
|
|
964
|
+
}
|
|
965
|
+
else {
|
|
966
|
+
newOrderInventoryReleaseQty = targetInventory.releaseQty - targetInventory.pickedQty;
|
|
967
|
+
newOrderInventoryReleaseUomValue =
|
|
968
|
+
newOrderInventoryReleaseQty * (targetInventory.releaseUomValue / targetInventory.releaseQty);
|
|
969
|
+
oldOrderInventory.releaseQty = targetInventory.pickedQty;
|
|
970
|
+
oldOrderInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
|
|
971
|
+
oldOrderInventory.releaseUomValue =
|
|
972
|
+
(targetInventory.releaseUomValue / targetInventory.releaseQty) * oldOrderInventory.releaseQty;
|
|
973
|
+
oldInventory.lockedQty -= newOrderInventoryReleaseQty;
|
|
974
|
+
oldInventory.lockedUomValue -= newOrderInventoryReleaseUomValue;
|
|
975
|
+
newInventory.lockedQty = newInventory.lockedQty + (targetInventory.releaseQty - targetInventory.pickedQty);
|
|
976
|
+
newInventory.lockedUomValue =
|
|
977
|
+
(targetInventory.releaseUomValue / targetInventory.releaseQty) * newInventory.lockedQty;
|
|
978
|
+
}
|
|
979
|
+
newInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, newInventory), { updater: this.user }));
|
|
980
|
+
let newTargetInventory = ((_a) => {
|
|
981
|
+
var { id } = _a, targetInventory = __rest(_a, ["id"]);
|
|
982
|
+
return targetInventory;
|
|
983
|
+
})(targetInventory);
|
|
984
|
+
let newOrderInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, newTargetInventory), { domain: this.domain, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseGood, releaseQty: newOrderInventoryReleaseQty, releaseUomValue: newOrderInventoryReleaseUomValue, pickedQty: 1, product, inventory: scannedPalletIdInventory, creator: this.user, updater: this.user }));
|
|
985
|
+
oldInventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, oldInventory), { updater: this.user }));
|
|
986
|
+
foundSerialNumber = await this.trxMgr
|
|
987
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
988
|
+
.save(Object.assign(Object.assign({}, foundSerialNumber), { inventory: newInventory }));
|
|
989
|
+
//3. create new worksheet detail
|
|
990
|
+
let NewWorksheetDetail = ((_a) => {
|
|
991
|
+
var { id } = _a, worksheetDetail = __rest(_a, ["id"]);
|
|
992
|
+
return worksheetDetail;
|
|
993
|
+
})(worksheetDetail);
|
|
994
|
+
await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(Object.assign(Object.assign({}, NewWorksheetDetail), { domain: this.domain, name: utils_1.WorksheetNoGenerator.pickingDetail(), targetInventory: newOrderInventory, status: constants_1.WORKSHEET_STATUS.EXECUTING, creator: this.user, updater: this.user }));
|
|
995
|
+
//if old order inventory release quantity is 0 then delete
|
|
996
|
+
if (oldOrderInventory.releaseQty !== 0) {
|
|
997
|
+
oldOrderInventory = await this.trxMgr
|
|
998
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
999
|
+
.save(Object.assign(Object.assign({}, oldOrderInventory), { updater: this.user }));
|
|
1000
|
+
//4. update old worksheet detail
|
|
1001
|
+
worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).update({
|
|
1002
|
+
name: worksheetDetail.name
|
|
1003
|
+
}, {
|
|
1004
|
+
status: constants_1.WORKSHEET_STATUS.DONE,
|
|
1005
|
+
updater: this.user
|
|
1006
|
+
});
|
|
1007
|
+
}
|
|
1008
|
+
else {
|
|
1009
|
+
await this.trxMgr.getRepository(entities_1.WorksheetDetail).delete(worksheetDetail.id);
|
|
1010
|
+
await this.trxMgr.getRepository(sales_base_1.OrderInventory).delete(targetInventory.id);
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
catch (e) { }
|
|
1014
|
+
}
|
|
1015
|
+
async toteScanning(toteNo, targetProduct, targetInventory, pickedQty, releaseGood, bizplace) {
|
|
1016
|
+
//1. find tote
|
|
1017
|
+
let foundTote = await this.trxMgr
|
|
1018
|
+
.getRepository(warehouse_base_1.Tote)
|
|
1019
|
+
.findOne({ where: { bizplace, name: toteNo, deletedAt: (0, typeorm_1.IsNull)() } });
|
|
1020
|
+
if ((foundTote === null || foundTote === void 0 ? void 0 : foundTote.status) == warehouse_base_1.TOTE_STATUS.DAMAGED || (foundTote === null || foundTote === void 0 ? void 0 : foundTote.status) == warehouse_base_1.TOTE_STATUS.DISPATCHED) {
|
|
1021
|
+
foundTote = null;
|
|
1022
|
+
}
|
|
1023
|
+
//2. find order tote
|
|
1024
|
+
let foundOrderTote = await this.trxMgr
|
|
1025
|
+
.getRepository(sales_base_1.OrderTote)
|
|
1026
|
+
.findOne({ where: { domain: this.domain, name: toteNo, releaseGood } });
|
|
1027
|
+
//if order tote not found the create one, if tote not found means it's tote box
|
|
1028
|
+
//create order tote item
|
|
1029
|
+
if (!foundOrderTote) {
|
|
1030
|
+
const orderTote = await this.trxMgr.getRepository(sales_base_1.OrderTote).save({
|
|
1031
|
+
name: toteNo,
|
|
1032
|
+
domain: this.domain,
|
|
1033
|
+
releaseGood,
|
|
1034
|
+
tote: foundTote ? foundTote : null,
|
|
1035
|
+
updater: this.user
|
|
1036
|
+
});
|
|
1037
|
+
const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save({
|
|
1038
|
+
domain: this.domain,
|
|
1039
|
+
name: sales_base_1.OrderNoGenerator.orderToteItem(),
|
|
1040
|
+
orderProduct: targetProduct,
|
|
1041
|
+
orderInventory: targetInventory,
|
|
1042
|
+
orderTote,
|
|
1043
|
+
qty: pickedQty,
|
|
1044
|
+
updater: this.user
|
|
1045
|
+
});
|
|
1046
|
+
}
|
|
1047
|
+
else {
|
|
1048
|
+
if (foundOrderTote.closedDate) {
|
|
1049
|
+
throw new Error('Tote has been sealed, please try another tote!');
|
|
1050
|
+
}
|
|
1051
|
+
//if found order tote then check if order tote item exist
|
|
1052
|
+
const foundOrderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).findOne({
|
|
1053
|
+
domain: this.domain,
|
|
1054
|
+
orderProduct: targetProduct,
|
|
1055
|
+
orderInventory: targetInventory,
|
|
1056
|
+
orderTote: foundOrderTote
|
|
1057
|
+
});
|
|
1058
|
+
//if not order tote item doesnt exist then create one
|
|
1059
|
+
if (!foundOrderToteItem) {
|
|
1060
|
+
const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save({
|
|
1061
|
+
domain: this.domain,
|
|
1062
|
+
name: sales_base_1.OrderNoGenerator.orderToteItem(),
|
|
1063
|
+
orderProduct: targetProduct,
|
|
1064
|
+
orderInventory: targetInventory,
|
|
1065
|
+
orderTote: foundOrderTote,
|
|
1066
|
+
qty: pickedQty,
|
|
1067
|
+
updater: this.user
|
|
1068
|
+
});
|
|
1069
|
+
}
|
|
1070
|
+
else {
|
|
1071
|
+
//if found order tote item found then add the quantity
|
|
1072
|
+
const orderToteItem = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).save(Object.assign(Object.assign({}, foundOrderToteItem), { qty: foundOrderToteItem.qty + pickedQty }));
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
}
|
|
1076
|
+
async undoSerialNumberPicking(worksheetDetailName, inventoryItemId) {
|
|
1077
|
+
const worksheetDetail = await this.trxMgr.getRepository(entities_1.WorksheetDetail).findOne({
|
|
1078
|
+
where: { name: worksheetDetailName, domain: this.domain, status: (0, typeorm_1.Not)((0, typeorm_1.Equal)(constants_1.WORKSHEET_STATUS.DEACTIVATED)) },
|
|
1079
|
+
relations: [
|
|
1080
|
+
'worksheet',
|
|
1081
|
+
'worksheet.releaseGood',
|
|
1082
|
+
'targetInventory',
|
|
1083
|
+
'targetInventory.product',
|
|
1084
|
+
'targetInventory.inventory'
|
|
1085
|
+
]
|
|
1086
|
+
});
|
|
1087
|
+
let targetInventory = worksheetDetail.targetInventory;
|
|
1088
|
+
let releaseGood = worksheetDetail.worksheet.releaseGood;
|
|
1089
|
+
if (targetInventory.releaseQty == targetInventory.pickedQty &&
|
|
1090
|
+
targetInventory.status == sales_base_1.ORDER_INVENTORY_STATUS.PICKED) {
|
|
1091
|
+
targetInventory.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
|
|
1092
|
+
await this.trxMgr
|
|
1093
|
+
.getRepository(entities_1.WorksheetDetail)
|
|
1094
|
+
.update({ id: worksheetDetail.id }, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
|
|
1095
|
+
targetInventory.inventory.qty += targetInventory.releaseQty;
|
|
1096
|
+
targetInventory.inventory.uomValue =
|
|
1097
|
+
Math.round((targetInventory.inventory.uomValue + targetInventory.releaseUomValue) * 100) / 100;
|
|
1098
|
+
targetInventory.inventory.lockedQty = targetInventory.inventory.lockedQty + targetInventory.releaseQty;
|
|
1099
|
+
targetInventory.inventory.lockedUomValue =
|
|
1100
|
+
Math.round((targetInventory.inventory.lockedUomValue + targetInventory.releaseUomValue) * 100) / 100;
|
|
1101
|
+
await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(targetInventory.inventory);
|
|
1102
|
+
}
|
|
1103
|
+
let InventoryItems = await this.trxMgr
|
|
1104
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
1105
|
+
.find({ where: { outboundOrderId: releaseGood.id } });
|
|
1106
|
+
let removeInventoryItem = await this.trxMgr
|
|
1107
|
+
.getRepository(warehouse_base_1.InventoryItem)
|
|
1108
|
+
.findOne({ where: { id: inventoryItemId } });
|
|
1109
|
+
if (InventoryItems.length > 0) {
|
|
1110
|
+
InventoryItems.forEach((itm) => {
|
|
1111
|
+
itm.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
|
|
1112
|
+
itm.updater = this.user;
|
|
1113
|
+
});
|
|
1114
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(InventoryItems);
|
|
1115
|
+
}
|
|
1116
|
+
if (removeInventoryItem.source == warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND) {
|
|
1117
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).delete(removeInventoryItem.id);
|
|
1118
|
+
}
|
|
1119
|
+
else {
|
|
1120
|
+
await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).update({
|
|
1121
|
+
id: inventoryItemId
|
|
1122
|
+
}, {
|
|
1123
|
+
status: warehouse_base_1.INVENTORY_STATUS.STORED,
|
|
1124
|
+
outboundOrderId: null,
|
|
1125
|
+
updater: this.user
|
|
1126
|
+
});
|
|
1127
|
+
}
|
|
1128
|
+
targetInventory.pickedQty--;
|
|
1129
|
+
targetInventory.updater = this.user;
|
|
1130
|
+
await this.updateOrderTargets([targetInventory]);
|
|
1131
|
+
}
|
|
1132
|
+
async sealTote(sealNo, toteNo, orderNo) {
|
|
1133
|
+
const checkDuplicateSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).findOne({
|
|
1134
|
+
where: {
|
|
1135
|
+
name: sealNo
|
|
1136
|
+
}
|
|
1137
|
+
});
|
|
1138
|
+
if (checkDuplicateSeal) {
|
|
1139
|
+
throw new Error('Seal has been scanned before');
|
|
1140
|
+
}
|
|
1141
|
+
const releaseGood = await this.trxMgr
|
|
1142
|
+
.getRepository(sales_base_1.ReleaseGood)
|
|
1143
|
+
.findOne({ where: { domain: this.domain, name: orderNo }, relations: ['bizplace', 'bizplace.domain'] });
|
|
1144
|
+
let sealNoSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
|
|
1145
|
+
where: {
|
|
1146
|
+
domain: releaseGood.bizplace.domain,
|
|
1147
|
+
name: 'minimum-seal-number'
|
|
1148
|
+
}
|
|
1149
|
+
});
|
|
1150
|
+
if (!sealNoSetting) {
|
|
1151
|
+
sealNoSetting = await this.trxMgr.getRepository(setting_base_1.Setting).findOne({
|
|
1152
|
+
where: {
|
|
1153
|
+
domain: this.domain,
|
|
1154
|
+
name: 'minimum-seal-number'
|
|
1155
|
+
}
|
|
1156
|
+
});
|
|
1157
|
+
}
|
|
1158
|
+
const foundOrderTote = await this.trxMgr
|
|
1159
|
+
.getRepository(sales_base_1.OrderTote)
|
|
1160
|
+
.findOne({ where: { domain: this.domain, name: toteNo, releaseGood } });
|
|
1161
|
+
if (!foundOrderTote) {
|
|
1162
|
+
throw new Error('Tote not scanned under this order');
|
|
1163
|
+
}
|
|
1164
|
+
let totalOrderToteItems = await this.trxMgr.getRepository(sales_base_1.OrderToteItem).count({
|
|
1165
|
+
where: {
|
|
1166
|
+
orderTote: foundOrderTote
|
|
1167
|
+
}
|
|
1168
|
+
});
|
|
1169
|
+
if (totalOrderToteItems < 1) {
|
|
1170
|
+
throw new Error('Tote carton is empty');
|
|
1171
|
+
}
|
|
1172
|
+
const newToteOrderSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).save({
|
|
1173
|
+
domain: this.domain,
|
|
1174
|
+
name: sealNo,
|
|
1175
|
+
orderTote: foundOrderTote,
|
|
1176
|
+
updater: this.user
|
|
1177
|
+
});
|
|
1178
|
+
const totalSeal = await this.trxMgr.getRepository(sales_base_1.OrderToteSeal).count({
|
|
1179
|
+
orderTote: foundOrderTote
|
|
1180
|
+
});
|
|
1181
|
+
if (totalSeal >= parseInt((sealNoSetting === null || sealNoSetting === void 0 ? void 0 : sealNoSetting.value) || 0)) {
|
|
1182
|
+
await this.trxMgr.getRepository(sales_base_1.OrderTote).save(Object.assign(Object.assign({}, foundOrderTote), { closedDate: new Date() }));
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
703
1185
|
}
|
|
704
1186
|
exports.PickingWorksheetController = PickingWorksheetController;
|
|
705
1187
|
//# sourceMappingURL=picking-worksheet-controller.js.map
|