@things-factory/worksheet-base 4.3.186 → 4.3.187
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/worksheet.js +3 -1
- package/dist-server/constants/worksheet.js.map +1 -1
- package/dist-server/controllers/index.js +1 -0
- package/dist-server/controllers/index.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -2
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/replenishment/index.js +18 -0
- package/dist-server/controllers/replenishment/index.js.map +1 -0
- package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js +455 -0
- package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js.map +1 -0
- package/dist-server/controllers/worksheet-controller.js +32 -9
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/entities/index.js +10 -2
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +15 -1
- package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
- package/dist-server/entities/warehouse-inventory-assignment-ranking.js +37 -0
- package/dist-server/entities/warehouse-inventory-assignment-ranking.js.map +1 -0
- package/dist-server/entities/worksheet.js +13 -9
- package/dist-server/entities/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js +57 -0
- package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +7 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js +19 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/index.js +5 -2
- package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +284 -270
- 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/replenishment-picking.js +12 -0
- package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +142 -78
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js +16 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/index.js +4 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js +15 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js +16 -0
- package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js +81 -0
- package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js +17 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/index.js +6 -0
- package/dist-server/graphql/resolvers/worksheet/replenishment/index.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +1 -0
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheets.js +28 -2
- package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +42 -1
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js +11 -0
- package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js.map +1 -0
- 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/graphql/types/worksheet/worksheet.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
- package/dist-server/utils/inventory-util.js +2 -0
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/dist-server/utils/worksheet-no-generator.js +21 -1
- package/dist-server/utils/worksheet-no-generator.js.map +1 -1
- package/dist-server/utils/worksheet-util.js +3 -0
- package/dist-server/utils/worksheet-util.js.map +1 -1
- package/package.json +5 -5
- package/server/constants/worksheet.ts +3 -1
- package/server/controllers/index.ts +1 -1
- package/server/controllers/outbound/picking-worksheet-controller.ts +12 -3
- package/server/controllers/replenishment/index.ts +1 -0
- package/server/controllers/replenishment/replenishment-worksheet-controller.ts +632 -0
- package/server/controllers/worksheet-controller.ts +47 -13
- package/server/entities/index.ts +15 -2
- package/server/entities/warehouse-bizplace-onhand-inventory.ts +13 -1
- package/server/entities/warehouse-inventory-assignment-ranking.ts +19 -0
- package/server/entities/worksheet.ts +5 -1
- package/server/graphql/resolvers/worksheet/cancel-replenishment.ts +69 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +6 -1
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.ts +30 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/index.ts +8 -2
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +4 -2
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +342 -310
- package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
- package/server/graphql/resolvers/worksheet/picking/replenishment-picking.ts +27 -0
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +177 -95
- package/server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.ts +25 -0
- package/server/graphql/resolvers/worksheet/putaway/index.ts +7 -1
- package/server/graphql/resolvers/worksheet/putaway/replenishment-putaway.ts +23 -0
- package/server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.ts +22 -0
- package/server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.ts +95 -0
- package/server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.ts +26 -0
- package/server/graphql/resolvers/worksheet/replenishment/index.ts +5 -0
- package/server/graphql/resolvers/worksheet/worksheet.ts +1 -0
- package/server/graphql/resolvers/worksheet/worksheets.ts +38 -3
- package/server/graphql/types/worksheet/index.ts +42 -1
- package/server/graphql/types/worksheet/replenish-inventory-patch.ts +8 -0
- package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
- package/server/graphql/types/worksheet/worksheet.ts +1 -0
- package/server/utils/inventory-util.ts +3 -0
- package/server/utils/worksheet-no-generator.ts +29 -1
- package/server/utils/worksheet-util.ts +4 -2
|
@@ -16,7 +16,8 @@ import {
|
|
|
16
16
|
OrderVas,
|
|
17
17
|
ReleaseGood,
|
|
18
18
|
ReturnOrder,
|
|
19
|
-
VasOrder
|
|
19
|
+
VasOrder,
|
|
20
|
+
Replenishment
|
|
20
21
|
} from '@things-factory/sales-base'
|
|
21
22
|
import { Domain } from '@things-factory/shell'
|
|
22
23
|
import {
|
|
@@ -31,7 +32,14 @@ import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'
|
|
|
31
32
|
import { Worksheet, WorksheetDetail } from '../entities'
|
|
32
33
|
import { WorksheetNoGenerator } from '../utils'
|
|
33
34
|
|
|
34
|
-
export type ReferenceOrderType =
|
|
35
|
+
export type ReferenceOrderType =
|
|
36
|
+
| ArrivalNotice
|
|
37
|
+
| ReleaseGood
|
|
38
|
+
| VasOrder
|
|
39
|
+
| InventoryCheck
|
|
40
|
+
| DeliveryOrder
|
|
41
|
+
| ReturnOrder
|
|
42
|
+
| Replenishment
|
|
35
43
|
export type OrderTargetTypes = OrderProduct | OrderInventory | OrderVas
|
|
36
44
|
|
|
37
45
|
export enum ReferenceOrderFields {
|
|
@@ -39,7 +47,8 @@ export enum ReferenceOrderFields {
|
|
|
39
47
|
ReleaseGood = 'releaseGood',
|
|
40
48
|
VasOrder = 'vasOrder',
|
|
41
49
|
InventoryCheck = 'inventoryCheck',
|
|
42
|
-
ReturnOrder = 'returnOrder'
|
|
50
|
+
ReturnOrder = 'returnOrder',
|
|
51
|
+
Replenishment = 'replenishment'
|
|
43
52
|
}
|
|
44
53
|
|
|
45
54
|
export enum OrderTargetFields {
|
|
@@ -121,6 +130,8 @@ export class WorksheetController {
|
|
|
121
130
|
return ReferenceOrderFields.InventoryCheck
|
|
122
131
|
} else if (refOrder instanceof ReturnOrder) {
|
|
123
132
|
return ReferenceOrderFields.ReturnOrder
|
|
133
|
+
} else if (refOrder instanceof Replenishment) {
|
|
134
|
+
return ReferenceOrderFields.Replenishment
|
|
124
135
|
} else {
|
|
125
136
|
throw new Error(
|
|
126
137
|
this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('refOrder', 'One of reference order type', refOrder)
|
|
@@ -247,13 +258,17 @@ export class WorksheetController {
|
|
|
247
258
|
case ReferenceOrderFields.ReturnOrder:
|
|
248
259
|
refOrder = await this.findRefOrder(ReturnOrder, refOrder, ['bizplace'])
|
|
249
260
|
break
|
|
261
|
+
|
|
262
|
+
case ReferenceOrderFields.Replenishment:
|
|
263
|
+
refOrder = await this.findRefOrder(Replenishment, refOrder)
|
|
264
|
+
break
|
|
250
265
|
}
|
|
251
266
|
}
|
|
252
267
|
|
|
253
|
-
const bizplace: Bizplace = refOrder
|
|
268
|
+
const bizplace: Bizplace = refOrder?.bizplace
|
|
254
269
|
const condition: FindOneOptions = {
|
|
255
270
|
where: {
|
|
256
|
-
bizplace,
|
|
271
|
+
bizplace: bizplace ? bizplace : null,
|
|
257
272
|
domain: this.domain,
|
|
258
273
|
type,
|
|
259
274
|
[refOrderField]: refOrder
|
|
@@ -394,7 +409,10 @@ export class WorksheetController {
|
|
|
394
409
|
additionalProps: Partial<Worksheet> = {}
|
|
395
410
|
): Promise<Worksheet> {
|
|
396
411
|
let refOrderType: string = await this.getRefOrderField(refOrder)
|
|
397
|
-
|
|
412
|
+
let bizplace: Bizplace
|
|
413
|
+
if (refOrderType !== 'replenishment') {
|
|
414
|
+
bizplace = await this.extractBizplaceFromRefOrder(refOrder)
|
|
415
|
+
}
|
|
398
416
|
|
|
399
417
|
let existingWorksheet: Worksheet
|
|
400
418
|
try {
|
|
@@ -411,10 +429,13 @@ export class WorksheetController {
|
|
|
411
429
|
|
|
412
430
|
const worksheet: Partial<Worksheet> = {
|
|
413
431
|
domain: this.domain,
|
|
414
|
-
bizplace,
|
|
432
|
+
bizplace: bizplace ? bizplace : null,
|
|
415
433
|
name: WorksheetNoGenerator.generate(type),
|
|
416
434
|
type,
|
|
417
|
-
status:
|
|
435
|
+
status:
|
|
436
|
+
refOrderType == 'replenishment' && type == WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT
|
|
437
|
+
? WORKSHEET_STATUS.EXECUTING
|
|
438
|
+
: WORKSHEET_STATUS.DEACTIVATED,
|
|
418
439
|
creator: this.user,
|
|
419
440
|
updater: this.user,
|
|
420
441
|
[refOrderType]: refOrder,
|
|
@@ -463,7 +484,11 @@ export class WorksheetController {
|
|
|
463
484
|
orderTargets: OrderTargetTypes[],
|
|
464
485
|
additionalProps: Partial<WorksheetDetail> = {}
|
|
465
486
|
): Promise<WorksheetDetail[]> {
|
|
466
|
-
if (
|
|
487
|
+
if (
|
|
488
|
+
!worksheet.bizplace?.id &&
|
|
489
|
+
type !== WORKSHEET_TYPE.PICKING_REPLENISHMENT &&
|
|
490
|
+
type !== WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT
|
|
491
|
+
) {
|
|
467
492
|
worksheet = await this.findWorksheetById(worksheet.id, ['bizplace'])
|
|
468
493
|
}
|
|
469
494
|
const bizplace: Bizplace = worksheet.bizplace
|
|
@@ -472,11 +497,12 @@ export class WorksheetController {
|
|
|
472
497
|
const orderTargetField: string = this.getOrderTargetField(orderTarget)
|
|
473
498
|
return {
|
|
474
499
|
domain: this.domain,
|
|
475
|
-
bizplace,
|
|
500
|
+
bizplace: bizplace ? bizplace : orderTarget.bizplace,
|
|
476
501
|
worksheet,
|
|
477
502
|
name: WorksheetNoGenerator.generate(type, true),
|
|
478
503
|
type,
|
|
479
|
-
status:
|
|
504
|
+
status:
|
|
505
|
+
type == WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT ? WORKSHEET_STATUS.EXECUTING : WORKSHEET_STATUS.DEACTIVATED,
|
|
480
506
|
[orderTargetField]: orderTarget,
|
|
481
507
|
creator: this.user,
|
|
482
508
|
updater: this.user,
|
|
@@ -511,6 +537,8 @@ export class WorksheetController {
|
|
|
511
537
|
entitySchema = InventoryCheck
|
|
512
538
|
} else if (refOrder instanceof ReturnOrder) {
|
|
513
539
|
entitySchema = ReturnOrder
|
|
540
|
+
} else if (refOrder instanceof Replenishment) {
|
|
541
|
+
entitySchema = Replenishment
|
|
514
542
|
}
|
|
515
543
|
}
|
|
516
544
|
|
|
@@ -746,7 +774,9 @@ export class WorksheetController {
|
|
|
746
774
|
worksheetType === WORKSHEET_TYPE.PACKING ||
|
|
747
775
|
worksheetType === WORKSHEET_TYPE.LOADING ||
|
|
748
776
|
worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||
|
|
749
|
-
worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN
|
|
777
|
+
worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN ||
|
|
778
|
+
worksheetType === WORKSHEET_TYPE.PICKING_REPLENISHMENT ||
|
|
779
|
+
worksheetType === WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT
|
|
750
780
|
) {
|
|
751
781
|
let targetInventories: OrderInventory[] = worksheet.worksheetDetails
|
|
752
782
|
.filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
|
|
@@ -904,10 +934,11 @@ export class WorksheetController {
|
|
|
904
934
|
worksheet.vasOrder ||
|
|
905
935
|
worksheet.inventoryCheck ||
|
|
906
936
|
worksheet.returnOrder ||
|
|
937
|
+
worksheet.replenishment ||
|
|
907
938
|
null
|
|
908
939
|
if (!refOrder) {
|
|
909
940
|
const wsWithRefOrd: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne(worksheet.id, {
|
|
910
|
-
relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder']
|
|
941
|
+
relations: ['arrivalNotice', 'releaseGood', 'vasOrder', 'inventoryCheck', 'returnOrder', 'replenishment']
|
|
911
942
|
})
|
|
912
943
|
|
|
913
944
|
refOrder =
|
|
@@ -916,6 +947,7 @@ export class WorksheetController {
|
|
|
916
947
|
wsWithRefOrd.vasOrder ||
|
|
917
948
|
wsWithRefOrd.inventoryCheck ||
|
|
918
949
|
wsWithRefOrd.returnOrder ||
|
|
950
|
+
wsWithRefOrd.replenishment ||
|
|
919
951
|
null
|
|
920
952
|
if (!refOrder) throw new Error(this.ERROR_MSG.FIND.NO_RESULT(worksheet.id))
|
|
921
953
|
}
|
|
@@ -1221,6 +1253,8 @@ export class WorksheetController {
|
|
|
1221
1253
|
entitySchema = InventoryCheck
|
|
1222
1254
|
} else if (refOrder instanceof ReturnOrder) {
|
|
1223
1255
|
entitySchema = ReturnOrder
|
|
1256
|
+
} else if (refOrder instanceof Replenishment) {
|
|
1257
|
+
entitySchema = Replenishment
|
|
1224
1258
|
}
|
|
1225
1259
|
}
|
|
1226
1260
|
|
package/server/entities/index.ts
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import { WarehouseBizplaceOnhandInventory } from './warehouse-bizplace-onhand-inventory'
|
|
2
|
+
import { WarehouseInventoryAssignmentRanking } from './warehouse-inventory-assignment-ranking'
|
|
2
3
|
import { Worksheet } from './worksheet'
|
|
3
4
|
import { WorksheetDetail } from './worksheet-detail'
|
|
4
5
|
import { WorksheetMovement } from './worksheet-movement'
|
|
5
6
|
|
|
6
|
-
export const entities = [
|
|
7
|
+
export const entities = [
|
|
8
|
+
Worksheet,
|
|
9
|
+
WorksheetDetail,
|
|
10
|
+
WorksheetMovement,
|
|
11
|
+
WarehouseBizplaceOnhandInventory,
|
|
12
|
+
WarehouseInventoryAssignmentRanking
|
|
13
|
+
]
|
|
7
14
|
|
|
8
|
-
export {
|
|
15
|
+
export {
|
|
16
|
+
WarehouseBizplaceOnhandInventory,
|
|
17
|
+
WarehouseInventoryAssignmentRanking,
|
|
18
|
+
Worksheet,
|
|
19
|
+
WorksheetDetail,
|
|
20
|
+
WorksheetMovement
|
|
21
|
+
}
|
|
@@ -16,6 +16,8 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
16
16
|
COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) AS "remain_uom_value",
|
|
17
17
|
COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS "qty",
|
|
18
18
|
COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS "uom_value",
|
|
19
|
+
COALESCE(sum(COALESCE(i.transfer_qty, 0::double precision))) AS "transfer_qty",
|
|
20
|
+
COALESCE(sum(COALESCE(i.transfer_uom_value, 0::double precision))) AS "transfer_uom_value",
|
|
19
21
|
'SINGLE' AS "group_type"
|
|
20
22
|
FROM inventories i
|
|
21
23
|
INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')
|
|
@@ -43,6 +45,8 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
43
45
|
COALESCE(MIN(FLOOR(pbs."available_uom_value")),0) AS "remain_uom_value",
|
|
44
46
|
COALESCE(MIN(FLOOR(pbs."qty")), 0::double precision) AS "qty",
|
|
45
47
|
COALESCE(MIN(FLOOR(pbs."uom_value")), 0::double precision) AS "uom_value",
|
|
48
|
+
COALESCE(MIN(FLOOR(pbs."transfer_qty")), 0::double precision) AS "transfer_qty",
|
|
49
|
+
COALESCE(MIN(FLOOR(pbs."transfer_uom_value")), 0::double precision) AS "transfer_uom_value",
|
|
46
50
|
'BUNDLE' AS "group_type"
|
|
47
51
|
FROM product_bundles pb
|
|
48
52
|
INNER JOIN (
|
|
@@ -50,7 +54,9 @@ import { ViewColumn, ViewEntity } from 'typeorm'
|
|
|
50
54
|
(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))) / min(pbs.bundle_qty) AS "available_qty",
|
|
51
55
|
(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) / min(pbs.bundle_qty) AS "available_uom_value",
|
|
52
56
|
(sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "qty",
|
|
53
|
-
(sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "uom_value"
|
|
57
|
+
(sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "uom_value",
|
|
58
|
+
(sum(COALESCE(i.transfer_qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "transfer_qty",
|
|
59
|
+
(sum(COALESCE(i.transfer_uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "transfer_uom_value"
|
|
54
60
|
FROM product_bundle_settings pbs
|
|
55
61
|
LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED' AND i.obsolete = false
|
|
56
62
|
INNER JOIN products p ON p.id = pbs.product_id AND CASE WHEN i.expiration_date is not null and p.shelf_life is not null then CURRENT_DATE < i.expiration_date - p.shelf_life else true end
|
|
@@ -112,6 +118,12 @@ export class WarehouseBizplaceOnhandInventory {
|
|
|
112
118
|
@ViewColumn()
|
|
113
119
|
remainUomValue: number
|
|
114
120
|
|
|
121
|
+
@ViewColumn()
|
|
122
|
+
transferQty: number
|
|
123
|
+
|
|
124
|
+
@ViewColumn()
|
|
125
|
+
transferUomValue: number
|
|
126
|
+
|
|
115
127
|
@ViewColumn()
|
|
116
128
|
groupType: string
|
|
117
129
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ViewColumn, ViewEntity } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
@ViewEntity({
|
|
4
|
+
expression: `
|
|
5
|
+
select src.* from (select 0 as "rank", 'SHELF' as location_type
|
|
6
|
+
union all
|
|
7
|
+
select 1 as "rank", 'FLOOR' as location_type
|
|
8
|
+
union all
|
|
9
|
+
select 2 as "rank", 'STORAGE' as location_type
|
|
10
|
+
) src
|
|
11
|
+
`
|
|
12
|
+
})
|
|
13
|
+
export class WarehouseInventoryAssignmentRanking {
|
|
14
|
+
@ViewColumn()
|
|
15
|
+
locationType: string
|
|
16
|
+
|
|
17
|
+
@ViewColumn()
|
|
18
|
+
rank: number
|
|
19
|
+
}
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
ReleaseGood,
|
|
7
7
|
ShippingOrder,
|
|
8
8
|
VasOrder,
|
|
9
|
-
ReturnOrder
|
|
9
|
+
ReturnOrder,
|
|
10
|
+
Replenishment
|
|
10
11
|
} from '@things-factory/sales-base'
|
|
11
12
|
import { Domain } from '@things-factory/shell'
|
|
12
13
|
import { Location } from '@things-factory/warehouse-base'
|
|
@@ -44,6 +45,9 @@ export class Worksheet {
|
|
|
44
45
|
@ManyToOne(type => ReleaseGood)
|
|
45
46
|
releaseGood: ReleaseGood
|
|
46
47
|
|
|
48
|
+
@ManyToOne(type => Replenishment)
|
|
49
|
+
replenishment: Replenishment
|
|
50
|
+
|
|
47
51
|
@ManyToOne(type => ReturnOrder)
|
|
48
52
|
returnOrder: ReturnOrder
|
|
49
53
|
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { In, Not, EntityManager } from 'typeorm'
|
|
2
|
+
import { Domain } from '@things-factory/shell'
|
|
3
|
+
import { Inventory } from '@things-factory/warehouse-base'
|
|
4
|
+
import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, Replenishment } from '@things-factory/sales-base'
|
|
5
|
+
import { User } from '@things-factory/auth-base'
|
|
6
|
+
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
7
|
+
|
|
8
|
+
export const cancelReplenishment = {
|
|
9
|
+
async cancelReplenishment(_: any, { name }, context: any) {
|
|
10
|
+
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
11
|
+
let replenishment: Replenishment = await tx.getRepository(Replenishment).findOne({
|
|
12
|
+
where: { domain, name, status: Not(In([ORDER_STATUS.PICKING, ORDER_STATUS.PUTTING_AWAY])) },
|
|
13
|
+
relations: ['orderInventories', 'orderInventories.inventory', 'orderInventories.inventory.location']
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
if (!replenishment) throw new Error(`Replenishment doesn't exists.`)
|
|
17
|
+
let targetOIs: OrderInventory[] = replenishment.orderInventories
|
|
18
|
+
|
|
19
|
+
// change status to cancelled for order inventory that has not executed yet and remove locked qty
|
|
20
|
+
|
|
21
|
+
await Promise.all(
|
|
22
|
+
targetOIs.map(async (orderInventory: OrderInventory) => {
|
|
23
|
+
let inventory: Inventory = orderInventory.inventory
|
|
24
|
+
|
|
25
|
+
if (inventory && inventory.id) {
|
|
26
|
+
await tx
|
|
27
|
+
.createQueryBuilder()
|
|
28
|
+
.update(Inventory)
|
|
29
|
+
.set({
|
|
30
|
+
transferQty: () => `COALESCE("transfer_qty", 0) - ${orderInventory.releaseQty}`,
|
|
31
|
+
transferUomValue: () => `COALESCE("transfer_uom_value", 0) - ${orderInventory.releaseUomValue}`,
|
|
32
|
+
updater: user
|
|
33
|
+
})
|
|
34
|
+
.where('id = :id', { id: inventory.id })
|
|
35
|
+
.execute()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return orderInventory
|
|
39
|
+
})
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
await tx
|
|
43
|
+
.getRepository(OrderInventory)
|
|
44
|
+
.update(targetOIs, { status: ORDER_INVENTORY_STATUS.CANCELLED, updater: user })
|
|
45
|
+
|
|
46
|
+
let worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
|
|
47
|
+
where: { replenishment },
|
|
48
|
+
relations: ['worksheetDetails']
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
if (worksheet) {
|
|
52
|
+
let worksheetDetailIds = worksheet.worksheetDetails.map(wsd => wsd.id)
|
|
53
|
+
|
|
54
|
+
await tx
|
|
55
|
+
.getRepository(Worksheet)
|
|
56
|
+
.update({ id: worksheet.id }, { status: ORDER_INVENTORY_STATUS.CANCELLED, updater: this.user })
|
|
57
|
+
|
|
58
|
+
await tx
|
|
59
|
+
.getRepository(WorksheetDetail)
|
|
60
|
+
.update({ id: In(worksheetDetailIds) }, { status: ORDER_INVENTORY_STATUS.CANCELLED, updater: this.user })
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
await tx
|
|
64
|
+
.getRepository(Replenishment)
|
|
65
|
+
.update({ id: replenishment.id }, { status: ORDER_STATUS.CANCELLED, updater: this.user })
|
|
66
|
+
|
|
67
|
+
return worksheet
|
|
68
|
+
}
|
|
69
|
+
}
|
package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts
CHANGED
|
@@ -13,7 +13,12 @@ import { Inventory, InventoryUtil, INVENTORY_TRANSACTION_TYPE } from '@things-fa
|
|
|
13
13
|
export const generateReleaseGoodWorksheetResolver = {
|
|
14
14
|
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo, currentStatus = null }, context: any) {
|
|
15
15
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
16
|
-
|
|
16
|
+
let worksheet = await generatePickingWorksheet(tx, domain, user, releaseGoodNo, currentStatus)
|
|
17
|
+
if (worksheet) {
|
|
18
|
+
return true
|
|
19
|
+
} else {
|
|
20
|
+
return false
|
|
21
|
+
}
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
|
package/server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { OrderInventory } from '@things-factory/sales-base'
|
|
5
|
+
import { Domain } from '@things-factory/shell'
|
|
6
|
+
|
|
7
|
+
import { ReplenishmentWorksheetController } from '../../../../controllers'
|
|
8
|
+
import { Worksheet } from '../../../../entities'
|
|
9
|
+
|
|
10
|
+
export const generateReplenishmentWorksheetResolver = {
|
|
11
|
+
async generateReplenishmentWorksheets(_: any, { replenishmentNos }, context: any) {
|
|
12
|
+
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
13
|
+
|
|
14
|
+
for (let i = 0; i < replenishmentNos.length; i++) {
|
|
15
|
+
await generateReplenishmentWorksheet(tx, domain, user, replenishmentNos[i])
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return true
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export async function generateReplenishmentWorksheet(
|
|
23
|
+
tx: EntityManager,
|
|
24
|
+
domain: Domain,
|
|
25
|
+
user: User,
|
|
26
|
+
replenishmentNo: string
|
|
27
|
+
): Promise<Worksheet> {
|
|
28
|
+
const worksheetController: ReplenishmentWorksheetController = new ReplenishmentWorksheetController(tx, domain, user)
|
|
29
|
+
return await worksheetController.generateReplenishmentWorksheet(replenishmentNo)
|
|
30
|
+
}
|
|
@@ -8,6 +8,7 @@ import { generateMultipleReleaseGoodWorksheetResolver } from './generate-multipl
|
|
|
8
8
|
import { generateVasOrderWorksheetResolver } from './generate-vas-order-worksheet'
|
|
9
9
|
import { generateReturnOrderWorksheetResolver } from './generate-return-order-worksheet'
|
|
10
10
|
import { generatePartialPutawayReturnWorksheetResolver } from './generate-partial-putaway-return-worksheet'
|
|
11
|
+
import { generateReplenishmentWorksheetResolver } from './generate-replenishement-worksheet'
|
|
11
12
|
|
|
12
13
|
export const Mutations = {
|
|
13
14
|
...generateArrivalNoticeWorksheetResolver,
|
|
@@ -19,5 +20,6 @@ export const Mutations = {
|
|
|
19
20
|
...generateMultipleReleaseGoodWorksheetResolver,
|
|
20
21
|
...generateVasOrderWorksheetResolver,
|
|
21
22
|
...generateReturnOrderWorksheetResolver,
|
|
22
|
-
...generatePartialPutawayReturnWorksheetResolver
|
|
23
|
+
...generatePartialPutawayReturnWorksheetResolver,
|
|
24
|
+
...generateReplenishmentWorksheetResolver
|
|
23
25
|
}
|
|
@@ -67,6 +67,9 @@ import { worksheetResolver } from './worksheet'
|
|
|
67
67
|
import { worksheetByOrderNoResolver } from './worksheet-by-order-no'
|
|
68
68
|
import { worksheetWithPaginationResolver } from './worksheet-with-pagination'
|
|
69
69
|
import { worksheetsResolver } from './worksheets'
|
|
70
|
+
import { cancelReplenishment } from './cancel-replenishment'
|
|
71
|
+
import { Mutations as ReplenishmentMutations } from './replenishment'
|
|
72
|
+
import { putawayReplenishmentWorksheetResolver } from './putaway-replenishment-worksheet'
|
|
70
73
|
|
|
71
74
|
export const Query = {
|
|
72
75
|
...worksheetsResolver,
|
|
@@ -102,7 +105,8 @@ export const Query = {
|
|
|
102
105
|
...sortingWorksheetResolver,
|
|
103
106
|
...findSortingReleaseOrdersByTaskNoResolver,
|
|
104
107
|
...findReleaseOrdersByTaskNoResolver,
|
|
105
|
-
...fetchDeliveryOrderROResolver
|
|
108
|
+
...fetchDeliveryOrderROResolver,
|
|
109
|
+
...putawayReplenishmentWorksheetResolver
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
export const Mutation = {
|
|
@@ -138,5 +142,7 @@ export const Mutation = {
|
|
|
138
142
|
...unpackingResolver,
|
|
139
143
|
...palletizingPallets,
|
|
140
144
|
...fetchSellercraftDocumentResolver,
|
|
141
|
-
...cancelDraftReleaseOrder
|
|
145
|
+
...cancelDraftReleaseOrder,
|
|
146
|
+
...cancelReplenishment,
|
|
147
|
+
...ReplenishmentMutations
|
|
142
148
|
}
|
|
@@ -51,6 +51,8 @@ export const inventoriesByPalletResolver = {
|
|
|
51
51
|
.leftJoinAndSelect('iv.creator', 'creator')
|
|
52
52
|
.leftJoinAndSelect('iv.updater', 'updater')
|
|
53
53
|
.andWhere('iv.qty > 0')
|
|
54
|
+
.andWhere('iv.transfer_qty <= 0')
|
|
55
|
+
.andWhere('iv.transfer_uom_value <= 0')
|
|
54
56
|
.andWhere(
|
|
55
57
|
`location.type ${recallFilters?.value === true ? '' : 'NOT'} IN ('${LOCATION_TYPE.QUARANTINE}', '${
|
|
56
58
|
LOCATION_TYPE.RESERVE
|
|
@@ -146,8 +148,6 @@ export const inventoriesByPalletResolver = {
|
|
|
146
148
|
)
|
|
147
149
|
}
|
|
148
150
|
|
|
149
|
-
let [items, total] = await qb.getManyAndCount()
|
|
150
|
-
|
|
151
151
|
if (sortings?.length !== 0) {
|
|
152
152
|
const arrChildSortData = ['productName', 'productSKU']
|
|
153
153
|
|
|
@@ -171,6 +171,8 @@ export const inventoriesByPalletResolver = {
|
|
|
171
171
|
qb.addOrderBy('location.name', 'DESC')
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
+
let [items, total] = await qb.getManyAndCount()
|
|
175
|
+
|
|
174
176
|
items = await Promise.all(
|
|
175
177
|
items.map(async (item: Inventory) => {
|
|
176
178
|
const { remainQty, remainUomValue } = await getRemainAmount(item)
|