@things-factory/worksheet-base 5.0.0-alpha.2 → 5.0.0-alpha.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +299 -2
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/loading-worksheet-controller.js +10 -0
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +7 -0
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +327 -11
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/returning-worksheet-controller.js +4 -0
- package/dist-server/controllers/outbound/returning-worksheet-controller.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/worksheet-controller.js +14 -0
- package/dist-server/controllers/worksheet-controller.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/loading/complete-loading.js +16 -2
- package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +0 -17
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
- 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/unloaded-inventories.js +3 -2
- package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.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 +191 -187
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +255 -250
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +16 -0
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/dist-server/index.js +5 -0
- package/dist-server/index.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/inbound/unloading-worksheet-controller.ts +361 -6
- package/server/controllers/outbound/loading-worksheet-controller.ts +13 -0
- package/server/controllers/outbound/packing-worksheet-controller.ts +9 -0
- package/server/controllers/outbound/picking-worksheet-controller.ts +434 -17
- package/server/controllers/outbound/returning-worksheet-controller.ts +5 -0
- package/server/controllers/render-invoices.ts +119 -72
- package/server/controllers/worksheet-controller.ts +17 -2
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
- package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +25 -6
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +3 -3
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +0 -18
- package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
- package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
- 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 +195 -191
- package/server/graphql/resolvers/worksheet/worksheets.ts +328 -325
- package/server/graphql/types/worksheet/index.ts +16 -0
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +1 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
- package/server/index.ts +5 -0
|
@@ -170,6 +170,11 @@ exports.Mutation = `
|
|
|
170
170
|
worksheetNo: String!
|
|
171
171
|
): Worksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
172
172
|
|
|
173
|
+
undoSerialNumberPicking (
|
|
174
|
+
worksheetDetailName: String!
|
|
175
|
+
inventoryItemId: String!
|
|
176
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
177
|
+
|
|
173
178
|
unload (
|
|
174
179
|
worksheetDetailName: String!
|
|
175
180
|
inventory: InventoryPatch!
|
|
@@ -187,6 +192,12 @@ exports.Mutation = `
|
|
|
187
192
|
inventory: InventoryPatch!
|
|
188
193
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
189
194
|
|
|
195
|
+
scanSerialNumberUnload (
|
|
196
|
+
worksheetDetailName: String!
|
|
197
|
+
serialNumber: String!
|
|
198
|
+
inventory: InventoryPatch!
|
|
199
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
200
|
+
|
|
190
201
|
cycleCountAdjustment (
|
|
191
202
|
cycleCountNo: String!
|
|
192
203
|
): Boolean @transaction
|
|
@@ -197,6 +208,11 @@ exports.Mutation = `
|
|
|
197
208
|
inventoryIds: [String]!
|
|
198
209
|
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
199
210
|
|
|
211
|
+
undoSerialNumberUnload (
|
|
212
|
+
worksheetDetailName: String!
|
|
213
|
+
inventoryItemId: String!
|
|
214
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
215
|
+
|
|
200
216
|
completeUnloadingPartially (
|
|
201
217
|
arrivalNoticeNo: String!
|
|
202
218
|
worksheetDetail: [WorksheetDetailPatch!]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,yEAAmE;AACnE,6DAAuD;AACvD,mEAA6D;AAC7D,mDAA8C;AAC9C,+DAAyD;AACzD,6DAAwD;AACxD,+DAA0D;AAC1D,+DAAyD;AACzD,2EAAqE;AACrE,uEAAiE;AACjE,iFAA0E;AAC1E,mDAA8C;AAC9C,2EAAqE;AACrE,yDAAoD;AACpD,qEAA+D;AAC/D,qEAA+D;AAC/D,+DAAyD;AACzD,2CAAuC;AACvC,mEAA6D;AAC7D,qDAAgD;AAChD,qDAAgD;AAChD,uDAAkD;AAClD,2EAAqE;AAExD,QAAA,QAAQ,GAAiB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/index.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,yEAAmE;AACnE,6DAAuD;AACvD,mEAA6D;AAC7D,mDAA8C;AAC9C,+DAAyD;AACzD,6DAAwD;AACxD,+DAA0D;AAC1D,+DAAyD;AACzD,2EAAqE;AACrE,uEAAiE;AACjE,iFAA0E;AAC1E,mDAA8C;AAC9C,2EAAqE;AACrE,yDAAoD;AACpD,qEAA+D;AAC/D,qEAA+D;AAC/D,+DAAyD;AACzD,2CAAuC;AACvC,mEAA6D;AAC7D,qDAAgD;AAChD,qDAAgD;AAChD,uDAAkD;AAClD,2EAAqE;AAExD,QAAA,QAAQ,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsgBrC,CAAA;AAEY,QAAA,KAAK,GAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0IlC,CAAA;AAEY,QAAA,KAAK,GAAiB;IACjC,qBAAS;IACT,uBAAU;IACV,4BAAY;IACZ,gCAAc;IACd,8BAAa;IACb,iDAAsB;IACtB,6CAAoB;IACpB,2CAAmB;IACnB,6CAAoB;IACpB,mDAAuB;IACvB,uCAAiB;IACjB,uCAAiB;IACjB,qCAAgB;IAChB,uCAAiB;IACjB,8BAAa;IACb,4BAAY;IACZ,sCAAiB;IACjB,2CAAmB;IACnB,wCAAkB;IAClB,+CAAqB;IACrB,kCAAe;IACf,mDAAuB;IACvB,mDAAuB;IACvB,wDAAyB;CAC1B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-detail-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/worksheet-detail-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,mBAAmB,GAAG,IAAA,uBAAG,EAAA
|
|
1
|
+
{"version":3,"file":"worksheet-detail-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/worksheet-detail-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,mBAAmB,GAAG,IAAA,uBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DrC,CAAA"}
|
|
@@ -4,6 +4,7 @@ exports.WorksheetInfo = void 0;
|
|
|
4
4
|
const apollo_server_koa_1 = require("apollo-server-koa");
|
|
5
5
|
exports.WorksheetInfo = (0, apollo_server_koa_1.gql) `
|
|
6
6
|
type WorksheetInfo {
|
|
7
|
+
arrivalNotice: ArrivalNotice
|
|
7
8
|
releaseGood: ReleaseGood
|
|
8
9
|
returnOrder: ReturnOrder
|
|
9
10
|
bizplaceName: String
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/worksheet-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,aAAa,GAAG,IAAA,uBAAG,EAAA
|
|
1
|
+
{"version":3,"file":"worksheet-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/worksheet-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,aAAa,GAAG,IAAA,uBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B/B,CAAA"}
|
package/dist-server/index.js
CHANGED
|
@@ -20,5 +20,10 @@ __exportStar(require("./entities"), exports);
|
|
|
20
20
|
__exportStar(require("./graphql"), exports);
|
|
21
21
|
__exportStar(require("./graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet"), exports);
|
|
22
22
|
__exportStar(require("./graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details"), exports);
|
|
23
|
+
__exportStar(require("./graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet"), exports);
|
|
24
|
+
__exportStar(require("./graphql/resolvers/worksheet/unloading/activate-unloading"), exports);
|
|
25
|
+
__exportStar(require("./graphql/resolvers/worksheet/picking/activate-picking"), exports);
|
|
26
|
+
__exportStar(require("./graphql/resolvers/worksheet/worksheets"), exports);
|
|
27
|
+
__exportStar(require("./graphql/resolvers/worksheet/worksheet"), exports);
|
|
23
28
|
__exportStar(require("./migrations"), exports);
|
|
24
29
|
//# sourceMappingURL=index.js.map
|
package/dist-server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oBAAiB;AAEjB,8CAA2B;AAC3B,6CAA0B;AAC1B,4CAAyB;AACzB,mHAAgG;AAChG,+GAA4F;AAC5F,+CAA4B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oBAAiB;AAEjB,8CAA2B;AAC3B,6CAA0B;AAC1B,4CAAyB;AACzB,mHAAgG;AAChG,+GAA4F;AAC5F,qHAAkG;AAClG,6FAA0E;AAC1E,yFAAsE;AACtE,2EAAwD;AACxD,0EAAuD;AACvD,+CAA4B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/worksheet-base",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.22",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,21 +24,21 @@
|
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@things-factory/auth-base": "^5.0.0-alpha.
|
|
28
|
-
"@things-factory/biz-base": "^5.0.0-alpha.
|
|
29
|
-
"@things-factory/document-template-base": "^5.0.0-alpha.
|
|
30
|
-
"@things-factory/id-rule-base": "^5.0.0-alpha.
|
|
31
|
-
"@things-factory/integration-lmd": "^5.0.0-alpha.
|
|
32
|
-
"@things-factory/integration-marketplace": "^5.0.0-alpha.
|
|
33
|
-
"@things-factory/integration-sellercraft": "^5.0.0-alpha.
|
|
34
|
-
"@things-factory/integration-sftp": "^5.0.0-alpha.
|
|
35
|
-
"@things-factory/marketplace-base": "^5.0.0-alpha.
|
|
36
|
-
"@things-factory/notification": "^5.0.0-alpha.
|
|
37
|
-
"@things-factory/sales-base": "^5.0.0-alpha.
|
|
38
|
-
"@things-factory/setting-base": "^5.0.0-alpha.
|
|
39
|
-
"@things-factory/shell": "^5.0.0-alpha.
|
|
40
|
-
"@things-factory/transport-base": "^5.0.0-alpha.
|
|
41
|
-
"@things-factory/warehouse-base": "^5.0.0-alpha.
|
|
27
|
+
"@things-factory/auth-base": "^5.0.0-alpha.22",
|
|
28
|
+
"@things-factory/biz-base": "^5.0.0-alpha.22",
|
|
29
|
+
"@things-factory/document-template-base": "^5.0.0-alpha.22",
|
|
30
|
+
"@things-factory/id-rule-base": "^5.0.0-alpha.22",
|
|
31
|
+
"@things-factory/integration-lmd": "^5.0.0-alpha.22",
|
|
32
|
+
"@things-factory/integration-marketplace": "^5.0.0-alpha.22",
|
|
33
|
+
"@things-factory/integration-sellercraft": "^5.0.0-alpha.22",
|
|
34
|
+
"@things-factory/integration-sftp": "^5.0.0-alpha.22",
|
|
35
|
+
"@things-factory/marketplace-base": "^5.0.0-alpha.22",
|
|
36
|
+
"@things-factory/notification": "^5.0.0-alpha.22",
|
|
37
|
+
"@things-factory/sales-base": "^5.0.0-alpha.22",
|
|
38
|
+
"@things-factory/setting-base": "^5.0.0-alpha.22",
|
|
39
|
+
"@things-factory/shell": "^5.0.0-alpha.22",
|
|
40
|
+
"@things-factory/transport-base": "^5.0.0-alpha.22",
|
|
41
|
+
"@things-factory/warehouse-base": "^5.0.0-alpha.22"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "8e06de9c59237f1800b2ff4f1c53162a0228342a"
|
|
44
44
|
}
|
|
@@ -20,11 +20,14 @@ import {
|
|
|
20
20
|
VAS_TYPES
|
|
21
21
|
} from '@things-factory/sales-base'
|
|
22
22
|
import { Domain } from '@things-factory/shell'
|
|
23
|
+
import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
23
24
|
import {
|
|
24
25
|
Inventory,
|
|
26
|
+
INVENTORY_ITEM_SOURCE,
|
|
25
27
|
INVENTORY_STATUS,
|
|
26
28
|
INVENTORY_TRANSACTION_TYPE,
|
|
27
29
|
InventoryHistory,
|
|
30
|
+
InventoryItem,
|
|
28
31
|
InventoryNoGenerator,
|
|
29
32
|
Location,
|
|
30
33
|
Pallet,
|
|
@@ -33,7 +36,7 @@ import {
|
|
|
33
36
|
|
|
34
37
|
import { RULE_TYPE, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
|
|
35
38
|
import { Worksheet, WorksheetDetail } from '../../entities'
|
|
36
|
-
import { DateGenerator } from '../../utils'
|
|
39
|
+
import { DateGenerator, generateInventoryHistory } from '../../utils'
|
|
37
40
|
import { VasWorksheetController } from '../vas/vas-worksheet-controller'
|
|
38
41
|
|
|
39
42
|
export type UnloadingWorksheetDetail = Partial<WorksheetDetail> & {
|
|
@@ -241,6 +244,189 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
241
244
|
}
|
|
242
245
|
}
|
|
243
246
|
|
|
247
|
+
async scanSerialNumberUnload(
|
|
248
|
+
worksheetDetailName: string,
|
|
249
|
+
serialNumber: string,
|
|
250
|
+
inventory: Partial<Inventory>
|
|
251
|
+
): Promise<void> {
|
|
252
|
+
const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({
|
|
253
|
+
where: {
|
|
254
|
+
name: worksheetDetailName,
|
|
255
|
+
status: Not(Equal(WORKSHEET_STATUS.DEACTIVATED))
|
|
256
|
+
},
|
|
257
|
+
relations: [
|
|
258
|
+
'bizplace',
|
|
259
|
+
'worksheet',
|
|
260
|
+
'worksheet.arrivalNotice',
|
|
261
|
+
'worksheet.returnOrder',
|
|
262
|
+
'worksheet.bufferLocation',
|
|
263
|
+
'worksheet.bufferLocation.warehouse',
|
|
264
|
+
'targetProduct',
|
|
265
|
+
'targetProduct.product',
|
|
266
|
+
'targetProduct.product.productDetails',
|
|
267
|
+
'targetProduct.product.productDetails.childProductDetail',
|
|
268
|
+
'targetInventory',
|
|
269
|
+
'targetInventory.product',
|
|
270
|
+
'targetInventory.product.productDetails',
|
|
271
|
+
'targetInventory.product.productDetails.childProductDetail'
|
|
272
|
+
]
|
|
273
|
+
})
|
|
274
|
+
if (!worksheetDetail) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheetDetailName))
|
|
275
|
+
|
|
276
|
+
if (!inventory?.palletId)
|
|
277
|
+
inventory.palletId = await generateId({
|
|
278
|
+
domain: this.domain,
|
|
279
|
+
type: RULE_TYPE.LOT_NUMBER_ID,
|
|
280
|
+
seed: { date: DateGenerator.generateDate() }
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
const bizplace: Bizplace = worksheetDetail.bizplace
|
|
284
|
+
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
285
|
+
const arrivalNotice: ArrivalNotice = worksheet.arrivalNotice
|
|
286
|
+
const returnOrder: ReturnOrder = worksheet.returnOrder
|
|
287
|
+
const targetProduct: OrderProduct = worksheetDetail.targetProduct
|
|
288
|
+
const targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
289
|
+
const product: Product = Boolean(arrivalNotice) ? targetProduct.product : targetInventory.product
|
|
290
|
+
const packingType: string = Boolean(arrivalNotice) ? targetProduct.packingType : targetInventory.packingType
|
|
291
|
+
const packingSize: number = Boolean(arrivalNotice) ? targetProduct.packingSize : targetInventory.packingSize
|
|
292
|
+
const batchId: string = Boolean(arrivalNotice) ? targetProduct.batchId : targetInventory.batchId
|
|
293
|
+
let qty: number = 0
|
|
294
|
+
let uom: string = Boolean(arrivalNotice) ? targetProduct.uom : targetInventory.uom
|
|
295
|
+
const cartonId: string = inventory.cartonId
|
|
296
|
+
const orderId: string = Boolean(arrivalNotice) ? arrivalNotice.id : returnOrder.id
|
|
297
|
+
await this.checkSerialNumberDuplication(serialNumber, product)
|
|
298
|
+
|
|
299
|
+
qty++
|
|
300
|
+
|
|
301
|
+
const invQb: SelectQueryBuilder<Inventory> = await this.trxMgr
|
|
302
|
+
.getRepository(Inventory)
|
|
303
|
+
.createQueryBuilder('INV')
|
|
304
|
+
.where('INV.domain_id = :domainId', { domainId: this.domain.id })
|
|
305
|
+
.andWhere('INV.bizplace_id = :bizplaceId', { bizplaceId: bizplace.id })
|
|
306
|
+
.andWhere('INV.product_id = :productId', { productId: product.id })
|
|
307
|
+
.andWhere('INV.batch_id = :batchId', { batchId: batchId })
|
|
308
|
+
.andWhere('INV.packing_type = :packingType', { packingType: packingType })
|
|
309
|
+
.andWhere('INV.packing_size = :packingSize', { packingSize: packingSize })
|
|
310
|
+
|
|
311
|
+
if (arrivalNotice) invQb.andWhere('INV.ref_order_id = :arrivalNoticeId', { arrivalNoticeId: arrivalNotice.id })
|
|
312
|
+
else if (returnOrder) invQb.andWhere('INV.ref_order_id = :returnOrderId', { returnOrderId: returnOrder.id })
|
|
313
|
+
|
|
314
|
+
if (inventory?.expirationDate) {
|
|
315
|
+
invQb.andWhere('INV.expiration_date = :expirationDate', {
|
|
316
|
+
expirationDate: inventory.expirationDate
|
|
317
|
+
})
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
if (inventory?.cartonId) invQb.andWhere('INV.carton_id = :cartonId', { cartonId: inventory.cartonId })
|
|
321
|
+
else invQb.andWhere('INV.pallet_id = :palletId', { palletId: inventory.palletId })
|
|
322
|
+
|
|
323
|
+
let foundInventory: Inventory = await invQb.getOne()
|
|
324
|
+
|
|
325
|
+
const batchIdRef: string = Boolean(arrivalNotice) ? targetProduct.batchIdRef : null
|
|
326
|
+
const remark: string = Boolean(arrivalNotice) ? targetProduct.remark : targetInventory.remark
|
|
327
|
+
const manufactureDate: number = Boolean(arrivalNotice) ? targetProduct.manufactureDate : null
|
|
328
|
+
const location: Location = worksheet.bufferLocation
|
|
329
|
+
const warehouse: Warehouse = location.warehouse
|
|
330
|
+
const zone: string = location.zone
|
|
331
|
+
const unitCost: number = Boolean(arrivalNotice)
|
|
332
|
+
? targetProduct?.unitPrice
|
|
333
|
+
? ((targetProduct.packQty * targetProduct.unitPrice + targetProduct.miscAmt - targetProduct.discountAmt) *
|
|
334
|
+
(1 + targetProduct.taxRate / 100)) /
|
|
335
|
+
targetProduct.packQty
|
|
336
|
+
: 0
|
|
337
|
+
: null
|
|
338
|
+
|
|
339
|
+
if (!foundInventory) {
|
|
340
|
+
let newInventory: Partial<Inventory> = new Inventory()
|
|
341
|
+
newInventory.bizplace = bizplace
|
|
342
|
+
newInventory.domain = this.domain
|
|
343
|
+
newInventory.name = InventoryNoGenerator.inventoryName()
|
|
344
|
+
newInventory.palletId = inventory.palletId
|
|
345
|
+
newInventory.cartonId = inventory.cartonId
|
|
346
|
+
newInventory.batchId = batchId
|
|
347
|
+
newInventory.batchIdRef = batchIdRef
|
|
348
|
+
newInventory.product = product
|
|
349
|
+
newInventory.packingType = packingType
|
|
350
|
+
newInventory.packingSize = packingSize
|
|
351
|
+
newInventory.uom = uom
|
|
352
|
+
newInventory.remark = remark
|
|
353
|
+
newInventory.qty = qty
|
|
354
|
+
newInventory.uomValue =
|
|
355
|
+
Math.round(
|
|
356
|
+
qty *
|
|
357
|
+
(Boolean(arrivalNotice)
|
|
358
|
+
? targetProduct.uomValue
|
|
359
|
+
: targetInventory.returnUomValue / targetInventory.returnQty) *
|
|
360
|
+
100
|
|
361
|
+
) / 100
|
|
362
|
+
newInventory.manufactureDate = manufactureDate
|
|
363
|
+
newInventory.refOrderId = orderId
|
|
364
|
+
newInventory.unitCost = unitCost
|
|
365
|
+
if (inventory.reusablePallet?.id) {
|
|
366
|
+
newInventory.reusablePallet = await this.trxMgr.getRepository(Pallet).findOne(inventory.reusablePallet.id)
|
|
367
|
+
}
|
|
368
|
+
newInventory.orderProductId = Boolean(arrivalNotice) ? targetProduct.id : null
|
|
369
|
+
newInventory.orderInventoryId = Boolean(returnOrder) ? targetInventory.id : null
|
|
370
|
+
newInventory.warehouse = warehouse
|
|
371
|
+
newInventory.location = location
|
|
372
|
+
newInventory.zone = zone
|
|
373
|
+
newInventory.status = INVENTORY_STATUS.CHECKED
|
|
374
|
+
newInventory.creator = this.user
|
|
375
|
+
|
|
376
|
+
if (inventory?.expirationDate) {
|
|
377
|
+
newInventory.expirationDate = new Date(inventory.expirationDate)
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
if (arrivalNotice) {
|
|
381
|
+
targetProduct.actualPalletQty++
|
|
382
|
+
targetProduct.actualPackQty = Boolean(targetProduct.actualPackQty) ? targetProduct.actualPackQty + qty : qty
|
|
383
|
+
} else if (returnOrder) {
|
|
384
|
+
targetInventory.actualPalletQty++
|
|
385
|
+
targetInventory.actualPackQty = Boolean(targetInventory.actualPackQty)
|
|
386
|
+
? targetInventory.actualPackQty + qty
|
|
387
|
+
: qty
|
|
388
|
+
}
|
|
389
|
+
foundInventory = await this.trxMgr.getRepository(Inventory).save(newInventory)
|
|
390
|
+
} else {
|
|
391
|
+
const updatedQty: number = foundInventory.qty + qty
|
|
392
|
+
foundInventory.expirationDate = new Date(foundInventory.expirationDate)
|
|
393
|
+
foundInventory.qty = updatedQty
|
|
394
|
+
foundInventory.uomValue +=
|
|
395
|
+
Math.round(
|
|
396
|
+
qty *
|
|
397
|
+
(Boolean(arrivalNotice)
|
|
398
|
+
? targetProduct.uomValue
|
|
399
|
+
: targetInventory.returnUomValue / targetInventory.returnQty) *
|
|
400
|
+
100
|
|
401
|
+
) / 100
|
|
402
|
+
if (arrivalNotice) targetProduct.actualPackQty = targetProduct.actualPackQty + qty
|
|
403
|
+
else if (returnOrder) targetInventory.actualPackQty = targetInventory.actualPackQty + qty
|
|
404
|
+
foundInventory = await this.trxMgr.getRepository(Inventory).save(foundInventory)
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
let inventoryItem: InventoryItem = new InventoryItem()
|
|
408
|
+
inventoryItem.name = InventoryNoGenerator.inventoryItemName()
|
|
409
|
+
inventoryItem.serialNumber = serialNumber
|
|
410
|
+
inventoryItem.status = foundInventory.status
|
|
411
|
+
inventoryItem.inboundOrderId = foundInventory.refOrderId
|
|
412
|
+
inventoryItem.product = product
|
|
413
|
+
inventoryItem.inventory = foundInventory
|
|
414
|
+
inventoryItem.source = INVENTORY_ITEM_SOURCE.INBOUND
|
|
415
|
+
inventoryItem.domain = this.domain
|
|
416
|
+
inventoryItem.creator = this.user
|
|
417
|
+
inventoryItem.updater = this.user
|
|
418
|
+
|
|
419
|
+
await this.trxMgr.getRepository(InventoryItem).save(inventoryItem)
|
|
420
|
+
|
|
421
|
+
if (arrivalNotice) {
|
|
422
|
+
targetProduct.updater = this.user
|
|
423
|
+
this.updateOrderTargets([targetProduct])
|
|
424
|
+
} else if (returnOrder) {
|
|
425
|
+
targetInventory.updater = this.user
|
|
426
|
+
this.updateOrderTargets([targetInventory])
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
244
430
|
async scanProductUnload(
|
|
245
431
|
worksheetDetailName: string,
|
|
246
432
|
productBarcode: string,
|
|
@@ -656,6 +842,60 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
656
842
|
}
|
|
657
843
|
}
|
|
658
844
|
|
|
845
|
+
async undoSerialNumberUnload(worksheetDetailName: string, inventoryItemId: string): Promise<void> {
|
|
846
|
+
const worksheetDetail: WorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).findOne({
|
|
847
|
+
where: { name: worksheetDetailName, domain: this.domain, status: Not(Equal(WORKSHEET_STATUS.DEACTIVATED)) },
|
|
848
|
+
relations: [
|
|
849
|
+
'worksheet',
|
|
850
|
+
'worksheet.arrivalNotice',
|
|
851
|
+
'worksheet.returnOrder',
|
|
852
|
+
'targetProduct',
|
|
853
|
+
'targetProduct.product'
|
|
854
|
+
]
|
|
855
|
+
})
|
|
856
|
+
|
|
857
|
+
let worksheet: Worksheet = worksheetDetail.worksheet
|
|
858
|
+
let arrivalNotice: ArrivalNotice = worksheet.arrivalNotice
|
|
859
|
+
let returnOrder: ReturnOrder = worksheet.returnOrder
|
|
860
|
+
let targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
861
|
+
let targetProduct: OrderProduct = worksheetDetail.targetProduct
|
|
862
|
+
let inventoryItem: InventoryItem = await this.trxMgr.getRepository(InventoryItem).findOne({
|
|
863
|
+
where: { domain: this.domain, id: inventoryItemId },
|
|
864
|
+
relations: ['inventory', 'product']
|
|
865
|
+
})
|
|
866
|
+
let inventory: Inventory = inventoryItem.inventory
|
|
867
|
+
|
|
868
|
+
await this.trxMgr.getRepository(InventoryItem).delete(inventoryItem.id)
|
|
869
|
+
|
|
870
|
+
inventory.qty--
|
|
871
|
+
inventory.uomValue =
|
|
872
|
+
Math.round(
|
|
873
|
+
inventory.qty *
|
|
874
|
+
(Boolean(arrivalNotice)
|
|
875
|
+
? targetProduct.uomValue
|
|
876
|
+
: targetInventory.returnUomValue / targetInventory.returnQty) *
|
|
877
|
+
100
|
|
878
|
+
) / 100
|
|
879
|
+
await this.trxMgr
|
|
880
|
+
.getRepository(Inventory)
|
|
881
|
+
.update({ id: inventory.id }, { qty: inventory.qty, uomValue: inventory.uomValue })
|
|
882
|
+
|
|
883
|
+
targetProduct.actualPackQty--
|
|
884
|
+
|
|
885
|
+
const inventoryItems: InventoryItem[] = await this.trxMgr.getRepository(InventoryItem).find({
|
|
886
|
+
where: { domain: this.domain, inboundOrderId: arrivalNotice.id, inventory }
|
|
887
|
+
})
|
|
888
|
+
|
|
889
|
+
if (inventoryItems?.length == 0) {
|
|
890
|
+
await this.trxMgr.getRepository(Inventory).delete(inventory.id)
|
|
891
|
+
|
|
892
|
+
targetProduct.actualPalletQty--
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
targetProduct.updater = this.user
|
|
896
|
+
await this.updateOrderTargets([targetProduct])
|
|
897
|
+
}
|
|
898
|
+
|
|
659
899
|
async activateUnloading(
|
|
660
900
|
worksheetNo: string,
|
|
661
901
|
unloadingWorksheetDetails: UnloadingWorksheetDetail[]
|
|
@@ -715,6 +955,70 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
715
955
|
return worksheet
|
|
716
956
|
}
|
|
717
957
|
|
|
958
|
+
async getProductScanningVal(arrivalNotice: ArrivalNotice) {
|
|
959
|
+
let productScanning: string = 'false'
|
|
960
|
+
const enableProductScanning: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
961
|
+
where: { domain: this.domain, category: 'id-rule', name: 'enable-product-scanning' }
|
|
962
|
+
})
|
|
963
|
+
|
|
964
|
+
if (enableProductScanning) productScanning = enableProductScanning.value
|
|
965
|
+
|
|
966
|
+
const partnerEnableProductScanning: PartnerSetting = await this.trxMgr.getRepository(PartnerSetting).findOne({
|
|
967
|
+
where: { setting: enableProductScanning, domain: this.domain, partnerDomain: arrivalNotice.bizplace?.domain }
|
|
968
|
+
})
|
|
969
|
+
|
|
970
|
+
if (partnerEnableProductScanning) productScanning = partnerEnableProductScanning.value
|
|
971
|
+
|
|
972
|
+
return productScanning
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
async getInputQtyVal(arrivalNotice: ArrivalNotice) {
|
|
976
|
+
let inputQty: string = 'false'
|
|
977
|
+
const enableInputQty: Setting = await this.trxMgr.getRepository(Setting).findOne({
|
|
978
|
+
where: { domain: this.domain, category: 'id-rule', name: 'enable-input-qty' }
|
|
979
|
+
})
|
|
980
|
+
|
|
981
|
+
if (enableInputQty) inputQty = enableInputQty.value
|
|
982
|
+
|
|
983
|
+
const partnerEnableInputQty: PartnerSetting = await this.trxMgr.getRepository(PartnerSetting).findOne({
|
|
984
|
+
where: { setting: enableInputQty, domain: this.domain, partnerDomain: arrivalNotice.bizplace?.domain }
|
|
985
|
+
})
|
|
986
|
+
|
|
987
|
+
if (partnerEnableInputQty) inputQty = partnerEnableInputQty.value
|
|
988
|
+
|
|
989
|
+
return inputQty
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
// only creates inventory history upon partial or full unload when
|
|
993
|
+
// productScanning is true
|
|
994
|
+
// inputQty is false
|
|
995
|
+
async createInventoryHistory(arrivalNotice: ArrivalNotice, inventories?: Inventory[]) {
|
|
996
|
+
try {
|
|
997
|
+
if (inventories === undefined) {
|
|
998
|
+
const inventoryList = await this.trxMgr.getRepository(Inventory).findAndCount({
|
|
999
|
+
where: {
|
|
1000
|
+
domain: this.domain,
|
|
1001
|
+
refOrderId: arrivalNotice.id
|
|
1002
|
+
}
|
|
1003
|
+
})
|
|
1004
|
+
|
|
1005
|
+
inventories = inventoryList[0]
|
|
1006
|
+
}
|
|
1007
|
+
|
|
1008
|
+
for (const inventory of inventories) {
|
|
1009
|
+
await this.transactionInventory(
|
|
1010
|
+
inventory,
|
|
1011
|
+
arrivalNotice,
|
|
1012
|
+
inventory.qty,
|
|
1013
|
+
inventory.uomValue,
|
|
1014
|
+
INVENTORY_TRANSACTION_TYPE.UNLOADING
|
|
1015
|
+
)
|
|
1016
|
+
}
|
|
1017
|
+
} catch (e) {
|
|
1018
|
+
throw e
|
|
1019
|
+
}
|
|
1020
|
+
}
|
|
1021
|
+
|
|
718
1022
|
async completeUnloading(
|
|
719
1023
|
arrivalNoticeNo: string,
|
|
720
1024
|
unloadingWorksheetDetails: Partial<WorksheetDetail>[]
|
|
@@ -722,7 +1026,7 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
722
1026
|
let arrivalNotice: ArrivalNotice = await this.findRefOrder(
|
|
723
1027
|
ArrivalNotice,
|
|
724
1028
|
{ domain: this.domain, name: arrivalNoticeNo, status: In([ORDER_STATUS.PROCESSING, ORDER_STATUS.PUTTING_AWAY]) },
|
|
725
|
-
['orderProducts', 'releaseGood']
|
|
1029
|
+
['orderProducts', 'releaseGood', 'bizplace', 'bizplace.domain']
|
|
726
1030
|
)
|
|
727
1031
|
|
|
728
1032
|
if (arrivalNotice.crossDocking) {
|
|
@@ -785,6 +1089,47 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
785
1089
|
await this.completeWorksheet(worksheet)
|
|
786
1090
|
}
|
|
787
1091
|
|
|
1092
|
+
const productScanning = await this.getProductScanningVal(arrivalNotice)
|
|
1093
|
+
const inputQty = await this.getInputQtyVal(arrivalNotice)
|
|
1094
|
+
if (productScanning === 'true' && inputQty === 'false') await this.createInventoryHistory(arrivalNotice)
|
|
1095
|
+
|
|
1096
|
+
const inventories: Inventory[] = await this.trxMgr.getRepository(Inventory).find({
|
|
1097
|
+
where: {
|
|
1098
|
+
domain: this.domain,
|
|
1099
|
+
refOrderId: arrivalNotice.id,
|
|
1100
|
+
status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED])
|
|
1101
|
+
},
|
|
1102
|
+
relations: ['domain', 'bizplace', 'product', 'warehouse', 'location']
|
|
1103
|
+
})
|
|
1104
|
+
|
|
1105
|
+
for (let inventory of inventories) {
|
|
1106
|
+
let inventoryItems: InventoryItem[] = await this.trxMgr.getRepository(InventoryItem).find({
|
|
1107
|
+
where: { domain: this.domain, inventory }
|
|
1108
|
+
})
|
|
1109
|
+
|
|
1110
|
+
if (inventoryItems?.length) {
|
|
1111
|
+
inventory.status = INVENTORY_STATUS.STORED
|
|
1112
|
+
|
|
1113
|
+
await Promise.all(
|
|
1114
|
+
inventoryItems.map(async inventoryItem => {
|
|
1115
|
+
await this.trxMgr
|
|
1116
|
+
.getRepository(InventoryItem)
|
|
1117
|
+
.update({ id: inventoryItem.id }, { status: INVENTORY_STATUS.STORED })
|
|
1118
|
+
})
|
|
1119
|
+
)
|
|
1120
|
+
|
|
1121
|
+
await generateInventoryHistory(
|
|
1122
|
+
inventory,
|
|
1123
|
+
arrivalNotice,
|
|
1124
|
+
INVENTORY_TRANSACTION_TYPE.UNLOADING,
|
|
1125
|
+
inventory.qty,
|
|
1126
|
+
inventory.uomValue,
|
|
1127
|
+
this.user,
|
|
1128
|
+
this.trxMgr
|
|
1129
|
+
)
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
|
|
788
1133
|
let vasWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
|
|
789
1134
|
where: {
|
|
790
1135
|
arrivalNotice,
|
|
@@ -828,10 +1173,15 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
828
1173
|
arrivalNoticeNo: string,
|
|
829
1174
|
unloadingWorksheetDetail: Partial<WorksheetDetail>[]
|
|
830
1175
|
): Promise<Worksheet> {
|
|
831
|
-
const arrivalNotice: ArrivalNotice = await this.findRefOrder(
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
1176
|
+
const arrivalNotice: ArrivalNotice = await this.findRefOrder(
|
|
1177
|
+
ArrivalNotice,
|
|
1178
|
+
{
|
|
1179
|
+
domain: this.domain,
|
|
1180
|
+
name: arrivalNoticeNo,
|
|
1181
|
+
status: In([ORDER_STATUS.PROCESSING, ORDER_STATUS.PUTTING_AWAY])
|
|
1182
|
+
},
|
|
1183
|
+
['bizplace', 'bizplace.domain']
|
|
1184
|
+
)
|
|
835
1185
|
|
|
836
1186
|
const worksheet: Worksheet = await this.findWorksheetByRefOrder(arrivalNotice, WORKSHEET_TYPE.UNLOADING, [
|
|
837
1187
|
'worksheetDetails',
|
|
@@ -870,6 +1220,11 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
870
1220
|
})
|
|
871
1221
|
await this.trxMgr.getRepository(Inventory).save(inventories)
|
|
872
1222
|
|
|
1223
|
+
const productScanning = await this.getProductScanningVal(arrivalNotice)
|
|
1224
|
+
const inputQty = await this.getInputQtyVal(arrivalNotice)
|
|
1225
|
+
if (productScanning === 'true' && inputQty === 'false')
|
|
1226
|
+
await this.createInventoryHistory(arrivalNotice, inventories)
|
|
1227
|
+
|
|
873
1228
|
let vasWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
|
|
874
1229
|
where: {
|
|
875
1230
|
arrivalNotice,
|
|
@@ -118,6 +118,15 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
118
118
|
const pickedQty: number = targetInventory.releaseQty
|
|
119
119
|
let inventory: Inventory = targetInventory.inventory
|
|
120
120
|
|
|
121
|
+
targetInventory.loadedAt = new Date()
|
|
122
|
+
targetInventory.loadedByUser = this.user;
|
|
123
|
+
|
|
124
|
+
let loadedBy: string[] = targetInventory.loadedBy ? (targetInventory.loadedBy).split(',') : []
|
|
125
|
+
if (!loadedBy.find(x => x == this.user.name)) {
|
|
126
|
+
loadedBy.push(this.user.name)
|
|
127
|
+
targetInventory.loadedBy = loadedBy.join(',')
|
|
128
|
+
}
|
|
129
|
+
|
|
121
130
|
if (loadedQty > pickedQty) {
|
|
122
131
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('load', `loaded quantity can't exceed picked qty`))
|
|
123
132
|
} else if (loadedQty == pickedQty) {
|
|
@@ -205,6 +214,10 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
205
214
|
undoTargetOrderInventory.deliveryOrder = null
|
|
206
215
|
undoTargetOrderInventory.updater = this.user
|
|
207
216
|
|
|
217
|
+
undoTargetOrderInventory.loadedAt = null
|
|
218
|
+
undoTargetOrderInventory.loadedByUser = null
|
|
219
|
+
undoTargetOrderInventory.loadedBy = null
|
|
220
|
+
|
|
208
221
|
let prevTargetInventory: OrderInventory = await this.trxMgr.getRepository(OrderInventory).findOne({
|
|
209
222
|
where: {
|
|
210
223
|
domain: this.domain,
|
|
@@ -144,6 +144,15 @@ export class PackingWorksheetController extends VasWorksheetController {
|
|
|
144
144
|
throw new Error(this.ERROR_MSG.VALIDITY.CANT_PROCEED_STEP_BY('pack', `packed quantity can't exceed release qty`))
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
+
targetInventory.packedAt = new Date()
|
|
148
|
+
targetInventory.packedByUser = this.user;
|
|
149
|
+
|
|
150
|
+
let packedBy: string[] = targetInventory.packedBy ? (targetInventory.packedBy).split(',') : []
|
|
151
|
+
if (!packedBy.find(x => x == this.user.name)) {
|
|
152
|
+
packedBy.push(this.user.name)
|
|
153
|
+
targetInventory.packedBy = packedBy.join(',')
|
|
154
|
+
}
|
|
155
|
+
|
|
147
156
|
if (targetInventory.packedQty == pickedQty) {
|
|
148
157
|
targetInventory.status = ORDER_INVENTORY_STATUS.PACKED
|
|
149
158
|
await this.updateOrderTargets([targetInventory])
|