@things-factory/worksheet-base 4.3.186 → 4.3.188

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist-server/constants/worksheet.js +3 -1
  2. package/dist-server/constants/worksheet.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +14 -3
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/index.js +1 -0
  6. package/dist-server/controllers/index.js.map +1 -1
  7. package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -2
  8. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/replenishment/index.js +18 -0
  10. package/dist-server/controllers/replenishment/index.js.map +1 -0
  11. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js +455 -0
  12. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js.map +1 -0
  13. package/dist-server/controllers/worksheet-controller.js +32 -9
  14. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  15. package/dist-server/entities/index.js +10 -2
  16. package/dist-server/entities/index.js.map +1 -1
  17. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +15 -1
  18. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
  19. package/dist-server/entities/warehouse-inventory-assignment-ranking.js +37 -0
  20. package/dist-server/entities/warehouse-inventory-assignment-ranking.js.map +1 -0
  21. package/dist-server/entities/worksheet.js +13 -9
  22. package/dist-server/entities/worksheet.js.map +1 -1
  23. package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js +57 -0
  24. package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js.map +1 -0
  25. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +7 -1
  26. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  27. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js +19 -0
  28. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js.map +1 -0
  29. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
  30. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
  31. package/dist-server/graphql/resolvers/worksheet/index.js +5 -2
  32. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -1
  34. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +284 -270
  36. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
  38. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  39. package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js +12 -0
  40. package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js.map +1 -0
  41. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +142 -78
  42. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  43. package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js +16 -0
  44. package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js.map +1 -0
  45. package/dist-server/graphql/resolvers/worksheet/putaway/index.js +4 -1
  46. package/dist-server/graphql/resolvers/worksheet/putaway/index.js.map +1 -1
  47. package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js +15 -0
  48. package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js.map +1 -0
  49. package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js +16 -0
  50. package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js.map +1 -0
  51. package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js +81 -0
  52. package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js.map +1 -0
  53. package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js +17 -0
  54. package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js.map +1 -0
  55. package/dist-server/graphql/resolvers/worksheet/replenishment/index.js +6 -0
  56. package/dist-server/graphql/resolvers/worksheet/replenishment/index.js.map +1 -0
  57. package/dist-server/graphql/resolvers/worksheet/worksheet.js +1 -0
  58. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  59. package/dist-server/graphql/resolvers/worksheet/worksheets.js +28 -2
  60. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  61. package/dist-server/graphql/types/worksheet/index.js +42 -1
  62. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  63. package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js +11 -0
  64. package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js.map +1 -0
  65. package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
  66. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  67. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  68. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  69. package/dist-server/utils/datetime-util.js +13 -1
  70. package/dist-server/utils/datetime-util.js.map +1 -1
  71. package/dist-server/utils/inventory-util.js +2 -0
  72. package/dist-server/utils/inventory-util.js.map +1 -1
  73. package/dist-server/utils/worksheet-no-generator.js +21 -1
  74. package/dist-server/utils/worksheet-no-generator.js.map +1 -1
  75. package/dist-server/utils/worksheet-util.js +3 -0
  76. package/dist-server/utils/worksheet-util.js.map +1 -1
  77. package/package.json +5 -5
  78. package/server/constants/worksheet.ts +3 -1
  79. package/server/controllers/ecommerce/sellercraft-controller.ts +25 -6
  80. package/server/controllers/index.ts +1 -1
  81. package/server/controllers/outbound/picking-worksheet-controller.ts +12 -3
  82. package/server/controllers/replenishment/index.ts +1 -0
  83. package/server/controllers/replenishment/replenishment-worksheet-controller.ts +632 -0
  84. package/server/controllers/worksheet-controller.ts +47 -13
  85. package/server/entities/index.ts +15 -2
  86. package/server/entities/warehouse-bizplace-onhand-inventory.ts +13 -1
  87. package/server/entities/warehouse-inventory-assignment-ranking.ts +19 -0
  88. package/server/entities/worksheet.ts +5 -1
  89. package/server/graphql/resolvers/worksheet/cancel-replenishment.ts +69 -0
  90. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +6 -1
  91. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.ts +30 -0
  92. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +3 -1
  93. package/server/graphql/resolvers/worksheet/index.ts +8 -2
  94. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +4 -2
  95. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +342 -310
  96. package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
  97. package/server/graphql/resolvers/worksheet/picking/replenishment-picking.ts +27 -0
  98. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +177 -95
  99. package/server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.ts +25 -0
  100. package/server/graphql/resolvers/worksheet/putaway/index.ts +7 -1
  101. package/server/graphql/resolvers/worksheet/putaway/replenishment-putaway.ts +23 -0
  102. package/server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.ts +22 -0
  103. package/server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.ts +95 -0
  104. package/server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.ts +26 -0
  105. package/server/graphql/resolvers/worksheet/replenishment/index.ts +5 -0
  106. package/server/graphql/resolvers/worksheet/worksheet.ts +1 -0
  107. package/server/graphql/resolvers/worksheet/worksheets.ts +38 -3
  108. package/server/graphql/types/worksheet/index.ts +42 -1
  109. package/server/graphql/types/worksheet/replenish-inventory-patch.ts +8 -0
  110. package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
  111. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  112. package/server/utils/datetime-util.ts +14 -0
  113. package/server/utils/inventory-util.ts +3 -0
  114. package/server/utils/worksheet-no-generator.ts +29 -1
  115. package/server/utils/worksheet-util.ts +4 -2
@@ -0,0 +1,455 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReplenishmentWorksheetController = void 0;
4
+ const typeorm_1 = require("typeorm");
5
+ const sales_base_1 = require("@things-factory/sales-base");
6
+ const id_rule_base_1 = require("@things-factory/id-rule-base");
7
+ const utils_1 = require("../../utils");
8
+ const constants_1 = require("../../constants");
9
+ const entities_1 = require("../../entities");
10
+ const worksheet_controller_1 = require("../worksheet-controller");
11
+ const warehouse_base_1 = require("@things-factory/warehouse-base");
12
+ class ReplenishmentWorksheetController extends worksheet_controller_1.WorksheetController {
13
+ async generateReplenishmentWorksheet(replenishmentNo) {
14
+ let replenishment = await this.findRefOrder(sales_base_1.Replenishment, {
15
+ domain: this.domain,
16
+ name: replenishmentNo,
17
+ status: sales_base_1.ORDER_STATUS.PENDING_WORKSHEET
18
+ }, ['orderInventories', 'orderInventories.inventory', 'orderInventories.bizplace']);
19
+ const orderInventories = replenishment.orderInventories;
20
+ let worksheet = await this.createWorksheet(replenishment, constants_1.WORKSHEET_TYPE.PICKING_REPLENISHMENT);
21
+ if (orderInventories.every((oi) => { var _a; return (_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.id; })) {
22
+ worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.PICKING_REPLENISHMENT, orderInventories);
23
+ }
24
+ await this.trxMgr
25
+ .getRepository(sales_base_1.OrderInventory)
26
+ .update({ id: (0, typeorm_1.In)(orderInventories.map(oi => oi.id)) }, { status: sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK, updater: this.user });
27
+ await this.trxMgr
28
+ .getRepository(sales_base_1.Replenishment)
29
+ .update({ id: replenishment.id }, { status: sales_base_1.ORDER_STATUS.READY_TO_PICK, updater: this.user });
30
+ return worksheet;
31
+ }
32
+ async activatePickingReplenishment(worksheetNo) {
33
+ let worksheet = await this.findActivatableWorksheet(worksheetNo, constants_1.WORKSHEET_TYPE.PICKING_REPLENISHMENT, [
34
+ 'replenishment',
35
+ 'worksheetDetails',
36
+ 'worksheetDetails.targetInventory'
37
+ ]);
38
+ let updater = this.user;
39
+ const worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED');
40
+ const targetInventories = worksheetDetails.map(wds => wds.targetInventory);
41
+ await this.trxMgr
42
+ .getRepository(sales_base_1.OrderInventory)
43
+ .update({ id: (0, typeorm_1.In)(targetInventories.map(itm => itm.id)) }, { status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING, updater });
44
+ let replenishment = worksheet.replenishment;
45
+ await this.trxMgr
46
+ .getRepository(sales_base_1.Replenishment)
47
+ .update({ id: replenishment.id }, { status: sales_base_1.ORDER_STATUS.PICKING, updater });
48
+ worksheet = await this.activateWorksheet(worksheet, worksheetDetails, []);
49
+ return worksheet;
50
+ }
51
+ async replenishmentPicking(worksheetDetailName, worksheetType, productBarcode, cartonId, binLocation, serialNumber, pickedQty = 1) {
52
+ var _a;
53
+ try {
54
+ //find existing worksheet detail
55
+ let worksheetDetail = await this.trxMgr
56
+ .getRepository(entities_1.WorksheetDetail)
57
+ .createQueryBuilder('wd')
58
+ .innerJoinAndSelect('wd.worksheet', 'ws')
59
+ .innerJoinAndSelect('wd.targetInventory', 'oi')
60
+ .innerJoinAndSelect('oi.replenishment', 'rp')
61
+ .innerJoinAndSelect('oi.inventory', 'inv')
62
+ .innerJoinAndSelect('oi.product', 'prd')
63
+ .innerJoinAndSelect('oi.productDetail', 'pd')
64
+ .innerJoinAndSelect('pd.productBarcodes', 'pb')
65
+ .where('wd.name = :name', { name: worksheetDetailName })
66
+ .andWhere('wd.domain_id = :domainId', { domainId: this.domain.id })
67
+ .andWhere('wd.type = :type', { type: worksheetType })
68
+ .andWhere('wd.status = :status', { status: constants_1.WORKSHEET_STATUS.EXECUTING })
69
+ .andWhere('inv.carton_id = :cartonId', { cartonId: cartonId })
70
+ .getOne();
71
+ //validation to check matching worksheet detail based on name
72
+ if (!worksheetDetail)
73
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName));
74
+ const replenishment = worksheetDetail.targetInventory.replenishment;
75
+ let targetInventory = worksheetDetail.targetInventory;
76
+ const product = targetInventory.product;
77
+ const productDetail = targetInventory.productDetail;
78
+ const productBarcodes = productDetail.productBarcodes;
79
+ let inventory = targetInventory.inventory;
80
+ let pickedUomValue = pickedQty * productDetail.uomValue;
81
+ let matchingProduct;
82
+ //validation to prevent duplicated picking
83
+ if ((targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.status) != sales_base_1.ORDER_INVENTORY_STATUS.PICKING)
84
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `is done`));
85
+ if (!productBarcodes.find(itm => itm.gtin == productBarcode) && (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound)) {
86
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
87
+ }
88
+ matchingProduct = await this.getDirectQty(Object.assign(Object.assign({}, productDetail), { product: targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.product }), productBarcode, pickedQty);
89
+ //validate matching product details based on scanned barcode
90
+ if (!matchingProduct)
91
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(productBarcode));
92
+ pickedQty = matchingProduct.qty;
93
+ pickedUomValue = matchingProduct.uomValue;
94
+ //validation to prevent over release
95
+ if (!(worksheetDetail === null || worksheetDetail === void 0 ? void 0 : worksheetDetail.targetInventory) ||
96
+ (worksheetDetail === null || worksheetDetail === void 0 ? void 0 : worksheetDetail.targetInventory.inventory.qty) < 1 ||
97
+ pickedQty + (((_a = worksheetDetail.targetInventory) === null || _a === void 0 ? void 0 : _a.pickedQty) || 0) > worksheetDetail.targetInventory.releaseQty)
98
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `over release`));
99
+ targetInventory = await this.checkAndSetBinPicking(targetInventory, binLocation);
100
+ // for required outbound serial number scanning
101
+ if (product === null || product === void 0 ? void 0 : product.isRequireSerialNumberScanningOutbound) {
102
+ if (!serialNumber || serialNumber == '') {
103
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `require serial number`));
104
+ }
105
+ let totalInventoryItems = await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).count({
106
+ where: {
107
+ inventory,
108
+ status: (0, typeorm_1.Not)((0, typeorm_1.In)([warehouse_base_1.INVENTORY_STATUS.TERMINATED, warehouse_base_1.INVENTORY_STATUS.PICKED]))
109
+ }
110
+ });
111
+ let foundSerialNumber = await this.trxMgr
112
+ .getRepository(warehouse_base_1.InventoryItem)
113
+ .findOne({ where: { domain: this.domain, serialNumber: serialNumber, product } });
114
+ if (foundSerialNumber) {
115
+ if (foundSerialNumber.inventoryId !== inventory.id) {
116
+ throw new Error('Serial Number scanned is in another inventory');
117
+ }
118
+ if (foundSerialNumber.outboundOrderId) {
119
+ let replenishment = await this.trxMgr
120
+ .getRepository(sales_base_1.Replenishment)
121
+ .findOne({ where: { id: foundSerialNumber.outboundOrderId } });
122
+ throw new Error(`Inventory Item is already picked in ${replenishment.name}`);
123
+ }
124
+ foundSerialNumber.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
125
+ foundSerialNumber.updater = this.user;
126
+ foundSerialNumber.outboundOrderId = replenishment.id;
127
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(foundSerialNumber);
128
+ }
129
+ else {
130
+ if (totalInventoryItems >= inventory.qty) {
131
+ throw new Error('Insufficient inventory quantity to scan new serial number');
132
+ }
133
+ let inventoryItem = new warehouse_base_1.InventoryItem();
134
+ inventoryItem.name = warehouse_base_1.InventoryNoGenerator.inventoryItemName();
135
+ inventoryItem.serialNumber = serialNumber;
136
+ inventoryItem.status = warehouse_base_1.INVENTORY_STATUS.PICKING;
137
+ inventoryItem.outboundOrderId = replenishment.id;
138
+ inventoryItem.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.OUTBOUND;
139
+ inventoryItem.product = product;
140
+ inventoryItem.productDetail = productDetail;
141
+ inventoryItem.inventory = inventory;
142
+ inventoryItem.domain = this.domain;
143
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItem);
144
+ }
145
+ }
146
+ const releaseQty = targetInventory.releaseQty;
147
+ targetInventory.pickedQty = ((targetInventory === null || targetInventory === void 0 ? void 0 : targetInventory.pickedQty) || 0) + pickedQty;
148
+ let updateOiObj = {
149
+ pickedQty: () => `"picked_qty" + ${pickedQty}`,
150
+ updatedAt: new Date(),
151
+ updater: this.user,
152
+ pickedBy: this.user.name,
153
+ pickedByUser: this.user,
154
+ pickedAt: new Date()
155
+ };
156
+ if (targetInventory.pickedQty == releaseQty) {
157
+ updateOiObj['status'] = sales_base_1.ORDER_INVENTORY_STATUS.PICKED;
158
+ }
159
+ if (targetInventory.binLocation) {
160
+ updateOiObj['binLocation'] = targetInventory.binLocation;
161
+ }
162
+ await this.trxMgr
163
+ .getRepository(sales_base_1.OrderInventory)
164
+ .createQueryBuilder()
165
+ .update(sales_base_1.OrderInventory)
166
+ .set(updateOiObj)
167
+ .where({ id: targetInventory.id })
168
+ .andWhere(`picked_qty + :pickedQty <= release_qty`, { pickedQty })
169
+ .execute();
170
+ if (targetInventory.pickedQty == releaseQty) {
171
+ //update worksheet details only when line item picking complete
172
+ await this.trxMgr
173
+ .getRepository(entities_1.WorksheetDetail)
174
+ .createQueryBuilder()
175
+ .update(entities_1.WorksheetDetail)
176
+ .set({
177
+ status: constants_1.WORKSHEET_STATUS.DONE,
178
+ updater: this.user,
179
+ updatedAt: new Date()
180
+ })
181
+ .where('id = :id', { id: worksheetDetail.id })
182
+ .execute();
183
+ (0, typeorm_1.getConnection)().transaction(async (tx) => {
184
+ let releaseUomValue = Math.round((pickedUomValue / pickedQty) * releaseQty * 100) / 100;
185
+ let updateInvObj = {
186
+ qty: () => `"qty" - ${releaseQty}`,
187
+ uomValue: () => `"uom_value" - ${releaseUomValue}`,
188
+ updater: this.user,
189
+ updatedAt: new Date()
190
+ };
191
+ let remainingQty = await tx
192
+ .getRepository(warehouse_base_1.Inventory)
193
+ .createQueryBuilder()
194
+ .update(warehouse_base_1.Inventory)
195
+ .set(updateInvObj)
196
+ .where('id = :id', { id: targetInventory.inventory.id })
197
+ .returning(['qty'])
198
+ .execute()
199
+ .then(dt => {
200
+ return dt.raw[0].qty;
201
+ });
202
+ await (0, warehouse_base_1.generateInventoryHistory)(inventory, replenishment, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.RELOCATE, -releaseQty, -releaseUomValue, this.user, tx);
203
+ let inventoryItems = await tx
204
+ .getRepository(warehouse_base_1.InventoryItem)
205
+ .find({ where: { outboundOrderId: replenishment.id } });
206
+ if (inventoryItems.length > 0) {
207
+ inventoryItems.forEach((itm) => {
208
+ itm.status = warehouse_base_1.INVENTORY_STATUS.PICKED;
209
+ itm.updater = this.user;
210
+ });
211
+ await tx.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
212
+ }
213
+ if (remainingQty === 0) {
214
+ await tx
215
+ .getRepository(warehouse_base_1.Inventory)
216
+ .createQueryBuilder()
217
+ .update(warehouse_base_1.Inventory)
218
+ .set({ status: warehouse_base_1.INVENTORY_STATUS.TERMINATED })
219
+ .where('id = :id', { id: targetInventory.inventory.id })
220
+ .execute();
221
+ }
222
+ });
223
+ }
224
+ // return worksheet details
225
+ worksheetDetail = await this.trxMgr
226
+ .getRepository(entities_1.WorksheetDetail)
227
+ .createQueryBuilder('wd')
228
+ .innerJoin('wd.targetInventory', 'oi')
229
+ .innerJoinAndSelect('oi.replenishment', 'rg')
230
+ .where('wd.id = :id', { id: worksheetDetail.id })
231
+ .getOne();
232
+ return worksheetDetail;
233
+ }
234
+ catch (error) {
235
+ throw error;
236
+ }
237
+ }
238
+ async checkAndSetBinPicking(orderInventory, binLocation) {
239
+ // bin picking validation
240
+ if (binLocation) {
241
+ const foundBinLocation = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
242
+ where: { domain: this.domain, name: binLocation, type: warehouse_base_1.LOCATION_TYPE.BIN }
243
+ });
244
+ if (!foundBinLocation)
245
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('picking', `invalid bin location id`));
246
+ orderInventory.binLocation = foundBinLocation;
247
+ }
248
+ return orderInventory;
249
+ }
250
+ async completeReplenishmentPicking(replenishment, worksheet) {
251
+ await this.checkRecordValidity(worksheet, { status: constants_1.WORKSHEET_STATUS.EXECUTING });
252
+ let inventoryItems = await this.trxMgr
253
+ .getRepository(warehouse_base_1.InventoryItem)
254
+ .find({ where: { outboundOrderId: replenishment.id } });
255
+ if (inventoryItems.length > 0) {
256
+ inventoryItems.forEach((itm) => {
257
+ itm.status = warehouse_base_1.INVENTORY_STATUS.RELOCATE;
258
+ itm.updater = this.user;
259
+ });
260
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
261
+ }
262
+ let orderStatus = sales_base_1.ORDER_STATUS.PUTTING_AWAY;
263
+ return await this.completeWorksheet(worksheet, orderStatus);
264
+ }
265
+ async generatePutawayReplenishmentWorksheet(replenishmentNo) {
266
+ let replenishment = await this.findRefOrder(sales_base_1.Replenishment, {
267
+ domain: this.domain,
268
+ name: replenishmentNo
269
+ }, ['orderInventories', 'orderInventories.inventory']);
270
+ let orderInventories = replenishment.orderInventories;
271
+ const existingPutawayReplenishmentWorksheet = await this.trxMgr.getRepository(entities_1.Worksheet).findOne({
272
+ where: {
273
+ domain: this.domain,
274
+ replenishment,
275
+ type: constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT
276
+ }
277
+ });
278
+ if (existingPutawayReplenishmentWorksheet)
279
+ throw new Error('There is existing putaway replenishment worksheet that has been generated');
280
+ let worksheet = await this.createWorksheet(replenishment, constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT);
281
+ if (orderInventories.every((oi) => { var _a; return (_a = oi.inventory) === null || _a === void 0 ? void 0 : _a.id; })) {
282
+ worksheet.worksheetDetails = await this.createWorksheetDetails(worksheet, constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT, orderInventories);
283
+ }
284
+ orderInventories.forEach((oi) => {
285
+ oi.status = sales_base_1.ORDER_INVENTORY_STATUS.PUTTING_AWAY;
286
+ oi.updater = this.user;
287
+ });
288
+ await this.updateOrderTargets(orderInventories);
289
+ return worksheet;
290
+ }
291
+ async replenishmentPutaway(worksheetDetailName, cartonId, locationName) {
292
+ const worksheetDetails = await this.findExecutableWorksheetDetailByNames(worksheetDetailName, constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT, [
293
+ 'worksheet',
294
+ 'worksheet.replenishment',
295
+ 'targetInventory',
296
+ 'targetInventory.inventory',
297
+ 'targetInventory.inventory.bizplace',
298
+ 'targetInventory.inventory.product',
299
+ 'targetInventory.inventory.productDetail'
300
+ ]);
301
+ for (var i = 0; i < worksheetDetails.length; i++) {
302
+ const worksheetDetail = worksheetDetails[i];
303
+ const worksheet = worksheetDetail.worksheet;
304
+ const replenishment = worksheet.replenishment;
305
+ let targetInventory = worksheetDetail.targetInventory;
306
+ let inventory = targetInventory.inventory;
307
+ if (inventory.cartonId !== cartonId) {
308
+ throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('cartonId', cartonId, inventory.cartonId));
309
+ }
310
+ const location = await this.trxMgr.getRepository(warehouse_base_1.Location).findOne({
311
+ where: {
312
+ domain: this.domain,
313
+ name: locationName,
314
+ type: (0, typeorm_1.In)([
315
+ warehouse_base_1.LOCATION_TYPE.SHELF,
316
+ warehouse_base_1.LOCATION_TYPE.BUFFER,
317
+ warehouse_base_1.LOCATION_TYPE.FLOOR,
318
+ warehouse_base_1.LOCATION_TYPE.BIN,
319
+ warehouse_base_1.LOCATION_TYPE.QUARANTINE,
320
+ warehouse_base_1.LOCATION_TYPE.RESERVE
321
+ ])
322
+ },
323
+ relations: ['warehouse']
324
+ });
325
+ if (!location)
326
+ throw new Error(this.ERROR_MSG.FIND.NO_RESULT(locationName));
327
+ const warehouse = location.warehouse;
328
+ const zone = location.zone;
329
+ let updateInvObj = {
330
+ transferQty: () => `"transfer_qty" - ${targetInventory.releaseQty}`,
331
+ transferUomValue: () => `"transfer_uom_value" - ${targetInventory.releaseUomValue}`,
332
+ updater: this.user,
333
+ updatedAt: new Date()
334
+ };
335
+ await this.trxMgr
336
+ .getRepository(warehouse_base_1.Inventory)
337
+ .createQueryBuilder()
338
+ .update(warehouse_base_1.Inventory)
339
+ .set(updateInvObj)
340
+ .where('id = :id', { id: targetInventory.inventory.id })
341
+ .execute();
342
+ let newInventory = Object.assign(Object.assign({}, inventory), { palletId: await (0, id_rule_base_1.generateId)({
343
+ domain: this.domain,
344
+ type: constants_1.RULE_TYPE.LOT_NUMBER_ID,
345
+ seed: { date: utils_1.DateGenerator.generateDate() }
346
+ }), location: location, status: warehouse_base_1.INVENTORY_STATUS.STORED, warehouse: warehouse, zone: zone, creator: this.user, updater: this.user });
347
+ delete newInventory.id;
348
+ delete newInventory.updatedAt;
349
+ delete newInventory.created_at;
350
+ delete newInventory.adjustmentCode;
351
+ delete newInventory.adjustmentNote;
352
+ newInventory.cartonId = cartonId;
353
+ newInventory.qty = targetInventory.releaseQty;
354
+ newInventory.lockedQty = 0;
355
+ newInventory.transferQty = 0;
356
+ newInventory.uomValue = targetInventory.releaseUomValue;
357
+ newInventory.lockedUomValue = 0;
358
+ newInventory.transferUomValue = 0;
359
+ newInventory.refOrderId = replenishment.id;
360
+ await this.trxMgr.getRepository(warehouse_base_1.Inventory).save(newInventory);
361
+ let inventoryItems = await this.trxMgr
362
+ .getRepository(warehouse_base_1.InventoryItem)
363
+ .find({ where: { outboundOrderId: replenishment.id, inventory, status: warehouse_base_1.INVENTORY_STATUS.RELOCATE } });
364
+ if (inventoryItems.length > 0) {
365
+ inventoryItems.forEach((itm) => {
366
+ itm.status = warehouse_base_1.INVENTORY_STATUS.STORED;
367
+ itm.source = warehouse_base_1.INVENTORY_ITEM_SOURCE.RELOCATE;
368
+ itm.updater = this.user;
369
+ itm.inventory = newInventory;
370
+ });
371
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
372
+ }
373
+ await this.transactionInventory(newInventory, replenishment, targetInventory.releaseQty, targetInventory.releaseUomValue, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.RELOCATE);
374
+ targetInventory.status = sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED;
375
+ targetInventory.updater = this.user;
376
+ await this.updateOrderTargets([targetInventory]);
377
+ worksheetDetail.status = constants_1.WORKSHEET_STATUS.DONE;
378
+ worksheetDetail.updater = this.user;
379
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetail);
380
+ }
381
+ }
382
+ async undoReplenishmentPutaway(worksheetDetailName, cartonId) {
383
+ let worksheetDetails = await this.findWorksheetDetailByNames(worksheetDetailName, [
384
+ 'worksheet',
385
+ 'worksheet.replenishment',
386
+ 'targetInventory',
387
+ 'targetInventory.inventory',
388
+ 'fromLocation'
389
+ ]);
390
+ for (var i = 0; i < (worksheetDetails === null || worksheetDetails === void 0 ? void 0 : worksheetDetails.length); i++) {
391
+ const worksheetDetail = worksheetDetails[i];
392
+ this.checkRecordValidity(worksheetDetail, { status: constants_1.WORKSHEET_STATUS.DONE });
393
+ const worksheet = worksheetDetail.worksheet;
394
+ const replenishment = worksheet.replenishment;
395
+ const targetInventory = worksheetDetail.targetInventory;
396
+ let inventory = await this.trxMgr.getRepository(warehouse_base_1.Inventory).findOne({
397
+ where: { domain: this.domain, cartonId, refOrderId: replenishment.id }
398
+ });
399
+ let inventoryItems = await this.trxMgr
400
+ .getRepository(warehouse_base_1.InventoryItem)
401
+ .find({ where: { outboundOrderId: replenishment.id, inventory } });
402
+ if (inventoryItems.length > 0) {
403
+ inventoryItems.forEach((itm) => {
404
+ itm.status = warehouse_base_1.INVENTORY_STATUS.RELOCATE;
405
+ itm.updater = this.user;
406
+ itm.inventory = targetInventory.inventory;
407
+ });
408
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryItem).save(inventoryItems);
409
+ }
410
+ let updateInvObj = {
411
+ transferQty: () => `"transfer_qty" + ${targetInventory.releaseQty}`,
412
+ transferUomValue: () => `"transfer_uom_value" + ${targetInventory.releaseUomValue}`,
413
+ updater: this.user,
414
+ updatedAt: new Date()
415
+ };
416
+ await this.trxMgr
417
+ .getRepository(warehouse_base_1.Inventory)
418
+ .createQueryBuilder()
419
+ .update(warehouse_base_1.Inventory)
420
+ .set(updateInvObj)
421
+ .where('id = :id', { id: targetInventory.inventory.id })
422
+ .execute();
423
+ await this.checkReleaseTarget(inventory);
424
+ await this.trxMgr.getRepository(warehouse_base_1.InventoryHistory).delete({ inventory });
425
+ await this.trxMgr.getRepository(warehouse_base_1.Inventory).delete(inventory.id);
426
+ targetInventory.status = sales_base_1.ORDER_PRODUCT_STATUS.PUTTING_AWAY;
427
+ targetInventory.updater = this.user;
428
+ await this.updateOrderTargets([targetInventory]);
429
+ worksheetDetail.status = constants_1.WORKSHEET_STATUS.EXECUTING;
430
+ worksheetDetail.updater = this.user;
431
+ await this.trxMgr.getRepository(entities_1.WorksheetDetail).save(worksheetDetail);
432
+ }
433
+ }
434
+ async completeReplenishmentPutaway(replenishmentNo) {
435
+ let replenishment = await this.findRefOrder(sales_base_1.Replenishment, {
436
+ name: replenishmentNo,
437
+ status: sales_base_1.ORDER_STATUS.PUTTING_AWAY
438
+ });
439
+ const putawayReplenishmentWorksheet = await this.findWorksheetByRefOrder(replenishment, constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT, ['worksheetDetails', 'worksheetDetails.targetInventory']);
440
+ return await this.completeWorksheet(putawayReplenishmentWorksheet, sales_base_1.ORDER_STATUS.DONE);
441
+ }
442
+ async checkReleaseTarget(inventory) {
443
+ const releaseTargetInventory = await this.trxMgr.getRepository(sales_base_1.OrderInventory).findOne({
444
+ where: {
445
+ domain: this.domain,
446
+ type: sales_base_1.ORDER_TYPES.RELEASE_OF_GOODS,
447
+ inventory
448
+ }
449
+ });
450
+ if (releaseTargetInventory)
451
+ throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('undo putaway', 'this pallet ID has been selected for releasing'));
452
+ }
453
+ }
454
+ exports.ReplenishmentWorksheetController = ReplenishmentWorksheetController;
455
+ //# sourceMappingURL=replenishment-worksheet-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replenishment-worksheet-controller.js","sourceRoot":"","sources":["../../../server/controllers/replenishment/replenishment-worksheet-controller.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ var ReferenceOrderFields;
16
16
  ReferenceOrderFields["VasOrder"] = "vasOrder";
17
17
  ReferenceOrderFields["InventoryCheck"] = "inventoryCheck";
18
18
  ReferenceOrderFields["ReturnOrder"] = "returnOrder";
19
+ ReferenceOrderFields["Replenishment"] = "replenishment";
19
20
  })(ReferenceOrderFields = exports.ReferenceOrderFields || (exports.ReferenceOrderFields = {}));
20
21
  var OrderTargetFields;
21
22
  (function (OrderTargetFields) {
@@ -77,6 +78,9 @@ class WorksheetController {
77
78
  else if (refOrder instanceof sales_base_1.ReturnOrder) {
78
79
  return ReferenceOrderFields.ReturnOrder;
79
80
  }
81
+ else if (refOrder instanceof sales_base_1.Replenishment) {
82
+ return ReferenceOrderFields.Replenishment;
83
+ }
80
84
  else {
81
85
  throw new Error(this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('refOrder', 'One of reference order type', refOrder));
82
86
  }
@@ -184,12 +188,15 @@ class WorksheetController {
184
188
  case ReferenceOrderFields.ReturnOrder:
185
189
  refOrder = await this.findRefOrder(sales_base_1.ReturnOrder, refOrder, ['bizplace']);
186
190
  break;
191
+ case ReferenceOrderFields.Replenishment:
192
+ refOrder = await this.findRefOrder(sales_base_1.Replenishment, refOrder);
193
+ break;
187
194
  }
188
195
  }
189
- const bizplace = refOrder.bizplace;
196
+ const bizplace = refOrder === null || refOrder === void 0 ? void 0 : refOrder.bizplace;
190
197
  const condition = {
191
198
  where: {
192
- bizplace,
199
+ bizplace: bizplace ? bizplace : null,
193
200
  domain: this.domain,
194
201
  type,
195
202
  [refOrderField]: refOrder
@@ -294,7 +301,10 @@ class WorksheetController {
294
301
  */
295
302
  async createWorksheet(refOrder, type, additionalProps = {}) {
296
303
  let refOrderType = await this.getRefOrderField(refOrder);
297
- const bizplace = await this.extractBizplaceFromRefOrder(refOrder);
304
+ let bizplace;
305
+ if (refOrderType !== 'replenishment') {
306
+ bizplace = await this.extractBizplaceFromRefOrder(refOrder);
307
+ }
298
308
  let existingWorksheet;
299
309
  try {
300
310
  existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type);
@@ -302,7 +312,9 @@ class WorksheetController {
302
312
  catch (e) { }
303
313
  if (existingWorksheet)
304
314
  throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY(`create ${type.toLocaleLowerCase()} worksheet`, 'existing worksheet is found'));
305
- const worksheet = Object.assign({ domain: this.domain, bizplace, name: utils_1.WorksheetNoGenerator.generate(type), type, status: constants_1.WORKSHEET_STATUS.DEACTIVATED, creator: this.user, updater: this.user, [refOrderType]: refOrder }, additionalProps);
315
+ const worksheet = Object.assign({ domain: this.domain, bizplace: bizplace ? bizplace : null, name: utils_1.WorksheetNoGenerator.generate(type), type, status: refOrderType == 'replenishment' && type == constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT
316
+ ? constants_1.WORKSHEET_STATUS.EXECUTING
317
+ : constants_1.WORKSHEET_STATUS.DEACTIVATED, creator: this.user, updater: this.user, [refOrderType]: refOrder }, additionalProps);
306
318
  if (worksheet.id)
307
319
  throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS);
308
320
  return await this.trxMgr.getRepository(entities_1.Worksheet).save(worksheet);
@@ -324,14 +336,15 @@ class WorksheetController {
324
336
  */
325
337
  async createWorksheetDetails(worksheet, type, orderTargets, additionalProps = {}) {
326
338
  var _a;
327
- if (!((_a = worksheet.bizplace) === null || _a === void 0 ? void 0 : _a.id)) {
339
+ if (!((_a = worksheet.bizplace) === null || _a === void 0 ? void 0 : _a.id) &&
340
+ type !== constants_1.WORKSHEET_TYPE.PICKING_REPLENISHMENT &&
341
+ type !== constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT) {
328
342
  worksheet = await this.findWorksheetById(worksheet.id, ['bizplace']);
329
343
  }
330
344
  const bizplace = worksheet.bizplace;
331
345
  const worksheetDetails = orderTargets.map((orderTarget) => {
332
346
  const orderTargetField = this.getOrderTargetField(orderTarget);
333
- return Object.assign({ domain: this.domain, bizplace,
334
- worksheet, name: utils_1.WorksheetNoGenerator.generate(type, true), type, status: constants_1.WORKSHEET_STATUS.DEACTIVATED, [orderTargetField]: orderTarget, creator: this.user, updater: this.user }, additionalProps);
347
+ return Object.assign({ domain: this.domain, bizplace: bizplace ? bizplace : orderTarget.bizplace, worksheet, name: utils_1.WorksheetNoGenerator.generate(type, true), type, status: type == constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT ? constants_1.WORKSHEET_STATUS.EXECUTING : constants_1.WORKSHEET_STATUS.DEACTIVATED, [orderTargetField]: orderTarget, creator: this.user, updater: this.user }, additionalProps);
335
348
  });
336
349
  if (worksheetDetails.some((wsd) => wsd.id))
337
350
  throw new Error(this.ERROR_MSG.CREATE.ID_EXISTS);
@@ -360,6 +373,9 @@ class WorksheetController {
360
373
  else if (refOrder instanceof sales_base_1.ReturnOrder) {
361
374
  entitySchema = sales_base_1.ReturnOrder;
362
375
  }
376
+ else if (refOrder instanceof sales_base_1.Replenishment) {
377
+ entitySchema = sales_base_1.Replenishment;
378
+ }
363
379
  }
364
380
  if (!refOrder.id)
365
381
  throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS);
@@ -533,7 +549,9 @@ class WorksheetController {
533
549
  worksheetType === constants_1.WORKSHEET_TYPE.PACKING ||
534
550
  worksheetType === constants_1.WORKSHEET_TYPE.LOADING ||
535
551
  worksheetType === constants_1.WORKSHEET_TYPE.WAREHOUSE_RETURN ||
536
- worksheetType === constants_1.WORKSHEET_TYPE.UNLOADING_RETURN) {
552
+ worksheetType === constants_1.WORKSHEET_TYPE.UNLOADING_RETURN ||
553
+ worksheetType === constants_1.WORKSHEET_TYPE.PICKING_REPLENISHMENT ||
554
+ worksheetType === constants_1.WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT) {
537
555
  let targetInventories = worksheet.worksheetDetails
538
556
  .filter((wsd) => wsd.status !== sales_base_1.ORDER_INVENTORY_STATUS.REPLACED)
539
557
  .map((wsd) => {
@@ -655,10 +673,11 @@ class WorksheetController {
655
673
  worksheet.vasOrder ||
656
674
  worksheet.inventoryCheck ||
657
675
  worksheet.returnOrder ||
676
+ worksheet.replenishment ||
658
677
  null;
659
678
  if (!refOrder) {
660
679
  const wsWithRefOrd = await this.trxMgr.getRepository(entities_1.Worksheet).findOne(worksheet.id, {
661
- relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']
680
+ relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder', 'replenishment']
662
681
  });
663
682
  refOrder =
664
683
  wsWithRefOrd.arrivalNotice ||
@@ -666,6 +685,7 @@ class WorksheetController {
666
685
  wsWithRefOrd.vasOrder ||
667
686
  wsWithRefOrd.inventoryCheck ||
668
687
  wsWithRefOrd.returnOrder ||
688
+ wsWithRefOrd.replenishment ||
669
689
  null;
670
690
  if (!refOrder)
671
691
  throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id));
@@ -926,6 +946,9 @@ class WorksheetController {
926
946
  else if (refOrder instanceof sales_base_1.ReturnOrder) {
927
947
  entitySchema = sales_base_1.ReturnOrder;
928
948
  }
949
+ else if (refOrder instanceof sales_base_1.Replenishment) {
950
+ entitySchema = sales_base_1.Replenishment;
951
+ }
929
952
  }
930
953
  const { bizplace } = await this.findRefOrder(entitySchema, refOrder, ['bizplace']);
931
954
  return bizplace;