@things-factory/sales-base 3.6.46 → 3.6.50
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/entities/index.js +28 -22
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/order-reverse-kitting.js +156 -0
- package/dist-server/entities/order-reverse-kitting.js.map +1 -0
- package/dist-server/entities/reverse-kitting-order.js +82 -0
- package/dist-server/entities/reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/index.js +14 -11
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/order-reverse-kitting/index.js +8 -0
- package/dist-server/graphql/resolvers/order-reverse-kitting/index.js.map +1 -0
- package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kitting.js +18 -0
- package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kitting.js.map +1 -0
- package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kittings.js +14 -0
- package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kittings.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/activate-reverse-kitting-order.js +31 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/activate-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.js +31 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.js +34 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/confirm-reverse-kitting-order.js +31 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/confirm-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.js +30 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.js +94 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/executing-reverse-kitting-order.js +37 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/executing-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.js +34 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/index.js +17 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/index.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.js +35 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-order.js +32 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-orders.js +25 -0
- package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-orders.js.map +1 -0
- package/dist-server/graphql/types/index.js +22 -14
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/order-reverse-kitting/index.js +14 -0
- package/dist-server/graphql/types/order-reverse-kitting/index.js.map +1 -0
- package/dist-server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.js +31 -0
- package/dist-server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.js.map +1 -0
- package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-list.js +14 -0
- package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-list.js.map +1 -0
- package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.js +32 -0
- package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.js.map +1 -0
- package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting.js +37 -0
- package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting.js.map +1 -0
- package/dist-server/graphql/types/reverse-kitting-order/index.js +47 -0
- package/dist-server/graphql/types/reverse-kitting-order/index.js.map +1 -0
- package/dist-server/graphql/types/reverse-kitting-order/new-reverse-kitting-order.js +17 -0
- package/dist-server/graphql/types/reverse-kitting-order/new-reverse-kitting-order.js.map +1 -0
- package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-list.js +14 -0
- package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-list.js.map +1 -0
- package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-patch.js +17 -0
- package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-patch.js.map +1 -0
- package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order.js +24 -0
- package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order.js.map +1 -0
- package/dist-server/utils/inventory-util.js +145 -1
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +11 -11
- package/server/entities/index.ts +33 -27
- package/server/entities/order-reverse-kitting.ts +116 -0
- package/server/entities/reverse-kitting-order.ts +68 -0
- package/server/graphql/resolvers/index.ts +14 -11
- package/server/graphql/resolvers/order-reverse-kitting/index.ts +9 -0
- package/server/graphql/resolvers/order-reverse-kitting/order-reverse-kitting.ts +19 -0
- package/server/graphql/resolvers/order-reverse-kitting/order-reverse-kittings.ts +16 -0
- package/server/graphql/resolvers/reverse-kitting-order/activate-reverse-kitting-order.ts +47 -0
- package/server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.ts +47 -0
- package/server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.ts +59 -0
- package/server/graphql/resolvers/reverse-kitting-order/confirm-reverse-kitting-order.ts +47 -0
- package/server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.ts +41 -0
- package/server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.ts +125 -0
- package/server/graphql/resolvers/reverse-kitting-order/executing-reverse-kitting-order.ts +40 -0
- package/server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.ts +60 -0
- package/server/graphql/resolvers/reverse-kitting-order/index.ts +28 -0
- package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.ts +37 -0
- package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-order.ts +34 -0
- package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-orders.ts +30 -0
- package/server/graphql/types/index.ts +22 -14
- package/server/graphql/types/order-reverse-kitting/index.ts +13 -0
- package/server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.ts +25 -0
- package/server/graphql/types/order-reverse-kitting/order-reverse-kitting-list.ts +8 -0
- package/server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.ts +26 -0
- package/server/graphql/types/order-reverse-kitting/order-reverse-kitting.ts +31 -0
- package/server/graphql/types/reverse-kitting-order/index.ts +46 -0
- package/server/graphql/types/reverse-kitting-order/new-reverse-kitting-order.ts +11 -0
- package/server/graphql/types/reverse-kitting-order/reverse-kitting-order-list.ts +8 -0
- package/server/graphql/types/reverse-kitting-order/reverse-kitting-order-patch.ts +11 -0
- package/server/graphql/types/reverse-kitting-order/reverse-kitting-order.ts +18 -0
- package/server/utils/inventory-util.ts +227 -3
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { getRepository } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
4
|
+
import { Domain } from '@things-factory/shell'
|
|
5
|
+
import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
|
|
6
|
+
|
|
7
|
+
import { ORDER_VAS_STATUS } from '../../../constants'
|
|
8
|
+
import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
|
|
9
|
+
|
|
10
|
+
export const reverseKittingInventoriesResolver = {
|
|
11
|
+
async reverseKittingInventories(_: any, { orderReverseKittingName }, context: any) {
|
|
12
|
+
const { domain }: { domain: Domain } = context.state
|
|
13
|
+
const foundOrderReverseKitting: OrderReverseKitting = await getRepository(OrderReverseKitting).findOne({
|
|
14
|
+
where: {
|
|
15
|
+
domain,
|
|
16
|
+
name: orderReverseKittingName,
|
|
17
|
+
status: ORDER_VAS_STATUS.PROCESSING
|
|
18
|
+
},
|
|
19
|
+
relations: ['bizplace', 'reverseKittingOrder', 'inventory']
|
|
20
|
+
})
|
|
21
|
+
|
|
22
|
+
if (!foundOrderReverseKitting) return
|
|
23
|
+
|
|
24
|
+
const reverseKittingOrder: ReverseKittingOrder = foundOrderReverseKitting.reverseKittingOrder
|
|
25
|
+
const customerBizplace: Bizplace = foundOrderReverseKitting.bizplace
|
|
26
|
+
return await getRepository(Inventory).find({
|
|
27
|
+
where: {
|
|
28
|
+
domain,
|
|
29
|
+
bizplace: customerBizplace,
|
|
30
|
+
refOrderId: reverseKittingOrder.id,
|
|
31
|
+
orderVasId: foundOrderReverseKitting.id,
|
|
32
|
+
status: INVENTORY_STATUS.STORED
|
|
33
|
+
},
|
|
34
|
+
relations: ['product', 'bizplace']
|
|
35
|
+
})
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { getRepository, In } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
5
|
+
import { Domain } from '@things-factory/shell'
|
|
6
|
+
|
|
7
|
+
import { ReverseKittingOrder } from '../../../entities'
|
|
8
|
+
|
|
9
|
+
export const reverseKittingOrderResolver = {
|
|
10
|
+
async reverseKittingOrder(_: any, { name }, context: any) {
|
|
11
|
+
const { domain, user }: { domain: Domain; user: User } = context.state
|
|
12
|
+
|
|
13
|
+
return await getRepository(ReverseKittingOrder).findOne({
|
|
14
|
+
where: {
|
|
15
|
+
domain,
|
|
16
|
+
name,
|
|
17
|
+
bizplace: In(await getPermittedBizplaceIds(domain, user))
|
|
18
|
+
},
|
|
19
|
+
relations: [
|
|
20
|
+
'domain',
|
|
21
|
+
'bizplace',
|
|
22
|
+
'orderReverseKittings',
|
|
23
|
+
'orderReverseKittings.vas',
|
|
24
|
+
'orderReverseKittings.inventory',
|
|
25
|
+
'orderReverseKittings.inventory.product',
|
|
26
|
+
'orderReverseKittings.inventory.location',
|
|
27
|
+
'orderReverseKittings.inventory.warehouse',
|
|
28
|
+
'orderReverseKittings.targetProduct',
|
|
29
|
+
'creator',
|
|
30
|
+
'updater'
|
|
31
|
+
]
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { getRepository, In } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
4
|
+
import { getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
5
|
+
import { convertListParams, Domain, ListParam } from '@things-factory/shell'
|
|
6
|
+
|
|
7
|
+
import { ReverseKittingOrder } from '../../../entities'
|
|
8
|
+
|
|
9
|
+
export const reverseKittingOrdersResolver = {
|
|
10
|
+
async reverseKittingOrders(_: any, params: ListParam, context: any) {
|
|
11
|
+
const { domain, user }: { domain: Domain; user: User } = context.state
|
|
12
|
+
|
|
13
|
+
const convertedParams = convertListParams(params)
|
|
14
|
+
convertedParams.where.bizplace = In(await getPermittedBizplaceIds(domain, user))
|
|
15
|
+
|
|
16
|
+
const [items, total] = await getRepository(ReverseKittingOrder).findAndCount({
|
|
17
|
+
...convertedParams,
|
|
18
|
+
relations: [
|
|
19
|
+
'domain',
|
|
20
|
+
'bizplace',
|
|
21
|
+
'orderReverseKittings',
|
|
22
|
+
'orderReverseKittings.inventory',
|
|
23
|
+
'orderReverseKittings.inventory.product',
|
|
24
|
+
'creator',
|
|
25
|
+
'updater'
|
|
26
|
+
]
|
|
27
|
+
})
|
|
28
|
+
return { items, total }
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import * as RetailReplenishmentOrder from './retail-replenishment-order'
|
|
2
|
-
import * as TransferOrder from './transfer-order'
|
|
3
1
|
import * as ArrivalNotice from './arrival-notice'
|
|
2
|
+
import * as Claim from './claim'
|
|
3
|
+
import * as ClaimDetail from './claim-detail'
|
|
4
|
+
import * as ClaimOrder from './claim-order'
|
|
4
5
|
import * as CollectionOrder from './collection-order'
|
|
5
6
|
import * as DeliveryOrder from './delivery-order'
|
|
7
|
+
import * as GoodsReceivalNote from './goods-receival-note'
|
|
8
|
+
import * as InventoryCheck from './inventory-check'
|
|
6
9
|
import * as Invoice from './invoice'
|
|
10
|
+
import * as JobSheet from './job-sheet'
|
|
11
|
+
import * as OrderInventory from './order-inventory'
|
|
7
12
|
import * as OrderProduct from './order-product'
|
|
13
|
+
import * as OrderReverseKitting from './order-reverse-kitting'
|
|
8
14
|
import * as OrderVas from './order-vas'
|
|
9
|
-
import * as
|
|
10
|
-
import * as InventoryCheck from './inventory-check'
|
|
11
|
-
import * as JobSheet from './job-sheet'
|
|
15
|
+
import * as Others from './others'
|
|
12
16
|
import * as PurchaseOrder from './purchase-order'
|
|
13
17
|
import * as PurchaseOrderOtherCharge from './purchase-order-other-charge'
|
|
14
|
-
import * as ShippingOrder from './shipping-order'
|
|
15
18
|
import * as ReleaseGood from './release-good'
|
|
19
|
+
import * as RetailReplenishmentOrder from './retail-replenishment-order'
|
|
16
20
|
import * as ReturnOrder from './return-order'
|
|
21
|
+
import * as ReverseKittingOrder from './reverse-kitting-order'
|
|
22
|
+
import * as ShippingOrder from './shipping-order'
|
|
23
|
+
import * as TransferOrder from './transfer-order'
|
|
17
24
|
import * as Vas from './vas'
|
|
18
|
-
import * as Claim from './claim'
|
|
19
|
-
import * as ClaimDetail from './claim-detail'
|
|
20
|
-
import * as ClaimOrder from './claim-order'
|
|
21
25
|
import * as VasOrder from './vas-order'
|
|
22
|
-
import * as GoodsReceivalNote from './goods-receival-note'
|
|
23
|
-
import * as Others from './others'
|
|
24
26
|
|
|
25
27
|
export const queries = [
|
|
26
28
|
RetailReplenishmentOrder.Query,
|
|
@@ -45,7 +47,9 @@ export const queries = [
|
|
|
45
47
|
OrderInventory.Query,
|
|
46
48
|
VasOrder.Query,
|
|
47
49
|
GoodsReceivalNote.Query,
|
|
48
|
-
Others.Query
|
|
50
|
+
Others.Query,
|
|
51
|
+
OrderReverseKitting.Query,
|
|
52
|
+
ReverseKittingOrder.Query
|
|
49
53
|
]
|
|
50
54
|
|
|
51
55
|
export const mutations = [
|
|
@@ -70,7 +74,9 @@ export const mutations = [
|
|
|
70
74
|
ClaimOrder.Mutation,
|
|
71
75
|
OrderInventory.Mutation,
|
|
72
76
|
VasOrder.Mutation,
|
|
73
|
-
GoodsReceivalNote.Mutation
|
|
77
|
+
GoodsReceivalNote.Mutation,
|
|
78
|
+
ReverseKittingOrder.Mutation,
|
|
79
|
+
OrderReverseKitting.Mutation
|
|
74
80
|
]
|
|
75
81
|
|
|
76
82
|
export const types = [
|
|
@@ -96,5 +102,7 @@ export const types = [
|
|
|
96
102
|
...OrderInventory.Types,
|
|
97
103
|
...VasOrder.Types,
|
|
98
104
|
...GoodsReceivalNote.Types,
|
|
99
|
-
...Others.Types
|
|
105
|
+
...Others.Types,
|
|
106
|
+
...ReverseKittingOrder.Types,
|
|
107
|
+
...OrderReverseKitting.Types
|
|
100
108
|
]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NewOrderReverseKitting } from './new-order-reverse-kitting'
|
|
2
|
+
import { OrderReverseKitting } from './order-reverse-kitting'
|
|
3
|
+
import { OrderReverseKittingList } from './order-reverse-kitting-list'
|
|
4
|
+
import { OrderReverseKittingPatch } from './order-reverse-kitting-patch'
|
|
5
|
+
|
|
6
|
+
export const Mutation = ``
|
|
7
|
+
|
|
8
|
+
export const Query = `
|
|
9
|
+
orderReverseKittings(filters: [Filter], pagination: Pagination, sortings: [Sorting]): OrderReverseKittingList
|
|
10
|
+
orderReverseKitting(reverseKitting: ObjectRef!, name: String!): OrderReverseKitting
|
|
11
|
+
`
|
|
12
|
+
|
|
13
|
+
export const Types = [OrderReverseKitting, NewOrderReverseKitting, OrderReverseKittingPatch, OrderReverseKittingList]
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const NewOrderReverseKitting = gql`
|
|
4
|
+
input NewOrderReverseKitting {
|
|
5
|
+
name: String
|
|
6
|
+
set: Int
|
|
7
|
+
targetType: String
|
|
8
|
+
targetBatchId: String
|
|
9
|
+
targetProduct: ObjectRef
|
|
10
|
+
otherTarget: String
|
|
11
|
+
qty: Int
|
|
12
|
+
uomValue: Float
|
|
13
|
+
batchId: String
|
|
14
|
+
productName: String
|
|
15
|
+
packingType: String
|
|
16
|
+
reverseKittingOrder: ObjectRef
|
|
17
|
+
inventory: ObjectRef
|
|
18
|
+
vas: ObjectRef
|
|
19
|
+
type: String
|
|
20
|
+
operationGuide: String
|
|
21
|
+
remark: String
|
|
22
|
+
description: String
|
|
23
|
+
status: String
|
|
24
|
+
}
|
|
25
|
+
`
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const OrderReverseKittingPatch = gql`
|
|
4
|
+
input OrderReverseKittingPatch {
|
|
5
|
+
id: String
|
|
6
|
+
name: String
|
|
7
|
+
set: Int
|
|
8
|
+
targetType: String
|
|
9
|
+
targetBatchId: String
|
|
10
|
+
targetProduct: ObjectRef
|
|
11
|
+
otherTarget: String
|
|
12
|
+
qty: Int
|
|
13
|
+
uomValue: Float
|
|
14
|
+
batchId: String
|
|
15
|
+
productName: String
|
|
16
|
+
packingType: String
|
|
17
|
+
reverseKittingOrder: ObjectRef
|
|
18
|
+
inventory: ObjectRef
|
|
19
|
+
vas: ObjectRef
|
|
20
|
+
operationGuide: String
|
|
21
|
+
remark: String
|
|
22
|
+
description: String
|
|
23
|
+
status: String
|
|
24
|
+
cuFlag: String
|
|
25
|
+
}
|
|
26
|
+
`
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const OrderReverseKitting = gql`
|
|
4
|
+
type OrderReverseKitting {
|
|
5
|
+
id: String
|
|
6
|
+
domain: Domain
|
|
7
|
+
bizplace: Bizplace
|
|
8
|
+
name: String
|
|
9
|
+
set: Int
|
|
10
|
+
targetType: String
|
|
11
|
+
targetBatchId: String
|
|
12
|
+
targetProduct: Product
|
|
13
|
+
otherTarget: String
|
|
14
|
+
qty: Int
|
|
15
|
+
uomValue: Float
|
|
16
|
+
batchId: String
|
|
17
|
+
productName: String
|
|
18
|
+
packingType: String
|
|
19
|
+
reverseKittingOrder: ReverseKittingOrder
|
|
20
|
+
inventory: Inventory
|
|
21
|
+
vas: Vas
|
|
22
|
+
operationGuide: String
|
|
23
|
+
remark: String
|
|
24
|
+
description: String
|
|
25
|
+
status: String
|
|
26
|
+
createdAt: String
|
|
27
|
+
updatedAt: String
|
|
28
|
+
creator: User
|
|
29
|
+
updater: User
|
|
30
|
+
}
|
|
31
|
+
`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { NewReverseKittingOrder } from './new-reverse-kitting-order'
|
|
2
|
+
import { ReverseKittingOrder } from './reverse-kitting-order'
|
|
3
|
+
import { ReverseKittingOrderList } from './reverse-kitting-order-list'
|
|
4
|
+
import { ReverseKittingOrderPatch } from './reverse-kitting-order-patch'
|
|
5
|
+
|
|
6
|
+
export const Mutation = `
|
|
7
|
+
deleteReverseKittingOrder (
|
|
8
|
+
name: String!
|
|
9
|
+
): Boolean @transaction
|
|
10
|
+
|
|
11
|
+
generateReverseKittingOrder (
|
|
12
|
+
reverseKittingOrder: NewReverseKittingOrder!
|
|
13
|
+
): ReverseKittingOrder @transaction
|
|
14
|
+
|
|
15
|
+
confirmReverseKittingOrder (
|
|
16
|
+
name: String!
|
|
17
|
+
): ReverseKittingOrder @transaction
|
|
18
|
+
|
|
19
|
+
activateReverseKittingOrder (
|
|
20
|
+
name: String!
|
|
21
|
+
): ReverseKittingOrder @transaction
|
|
22
|
+
|
|
23
|
+
cancelReverseKittingOrder (
|
|
24
|
+
name: String!
|
|
25
|
+
): ReverseKittingOrder @transaction
|
|
26
|
+
|
|
27
|
+
executeReverseKitting (
|
|
28
|
+
name: String!
|
|
29
|
+
inventory: InventoryPatch!
|
|
30
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
31
|
+
|
|
32
|
+
completeReverseKittingOrder (
|
|
33
|
+
name: String!
|
|
34
|
+
): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
|
|
35
|
+
`
|
|
36
|
+
|
|
37
|
+
export const Query = `
|
|
38
|
+
reverseKittingOrders(filters: [Filter], pagination: Pagination, sortings: [Sorting]): ReverseKittingOrderList
|
|
39
|
+
reverseKittingOrder(name: String!): ReverseKittingOrder
|
|
40
|
+
executingReverseKittingOrder(name: String!): ReverseKittingOrder
|
|
41
|
+
reverseKittingInventories (
|
|
42
|
+
orderReverseKittingName: String!
|
|
43
|
+
): [Inventory]
|
|
44
|
+
`
|
|
45
|
+
|
|
46
|
+
export const Types = [ReverseKittingOrder, NewReverseKittingOrder, ReverseKittingOrderPatch, ReverseKittingOrderList]
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const ReverseKittingOrder = gql`
|
|
4
|
+
type ReverseKittingOrder {
|
|
5
|
+
id: String
|
|
6
|
+
name: String
|
|
7
|
+
domain: Domain
|
|
8
|
+
bizplace: Bizplace
|
|
9
|
+
description: String
|
|
10
|
+
orderReverseKittings: [OrderReverseKitting]
|
|
11
|
+
status: String
|
|
12
|
+
remark: String
|
|
13
|
+
updater: User
|
|
14
|
+
creator: User
|
|
15
|
+
updatedAt: String
|
|
16
|
+
createdAt: String
|
|
17
|
+
}
|
|
18
|
+
`
|
|
@@ -1,13 +1,40 @@
|
|
|
1
|
-
import { EntityManager, In, Raw } from 'typeorm'
|
|
1
|
+
import { EntityManager, Equal, getRepository, In, Not, Raw, Repository } from 'typeorm'
|
|
2
2
|
|
|
3
|
+
import { User } from '@things-factory/auth-base'
|
|
3
4
|
import { Bizplace } from '@things-factory/biz-base'
|
|
4
5
|
import { Product, ProductBundle } from '@things-factory/product-base'
|
|
5
6
|
import { Domain, ListParam } from '@things-factory/shell'
|
|
6
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
Inventory,
|
|
9
|
+
INVENTORY_STATUS,
|
|
10
|
+
InventoryHistory,
|
|
11
|
+
InventoryNoGenerator,
|
|
12
|
+
Location,
|
|
13
|
+
LOCATION_STATUS,
|
|
14
|
+
Pallet
|
|
15
|
+
} from '@things-factory/warehouse-base'
|
|
7
16
|
|
|
8
|
-
import {
|
|
17
|
+
import {
|
|
18
|
+
ArrivalNotice,
|
|
19
|
+
DeliveryOrder,
|
|
20
|
+
InventoryCheck,
|
|
21
|
+
OrderInventory,
|
|
22
|
+
ReleaseGood,
|
|
23
|
+
ReturnOrder,
|
|
24
|
+
ReverseKittingOrder,
|
|
25
|
+
VasOrder
|
|
26
|
+
} from '../entities'
|
|
9
27
|
import { ValidationError } from '../errors'
|
|
10
28
|
|
|
29
|
+
export type ReferenceOrderType =
|
|
30
|
+
| ArrivalNotice
|
|
31
|
+
| ReleaseGood
|
|
32
|
+
| VasOrder
|
|
33
|
+
| InventoryCheck
|
|
34
|
+
| DeliveryOrder
|
|
35
|
+
| ReturnOrder
|
|
36
|
+
| ReverseKittingOrder
|
|
37
|
+
|
|
11
38
|
export const InventoryUtil = {
|
|
12
39
|
/**
|
|
13
40
|
* Get all available product belonging to list of bizplaces
|
|
@@ -211,6 +238,50 @@ export const InventoryUtil = {
|
|
|
211
238
|
})
|
|
212
239
|
}
|
|
213
240
|
})
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
async checkPalletDuplication(palletId: string, warehouseDomain: Domain, trxMgr: EntityManager): Promise<void> {
|
|
244
|
+
const duplicatedPalletCnt: number = await trxMgr.getRepository(Inventory).count({
|
|
245
|
+
domain: warehouseDomain,
|
|
246
|
+
palletId,
|
|
247
|
+
status: Not(Equal(INVENTORY_STATUS.TERMINATED))
|
|
248
|
+
})
|
|
249
|
+
|
|
250
|
+
if (duplicatedPalletCnt) throw new Error(palletId + ` exists`)
|
|
251
|
+
|
|
252
|
+
const duplicatedReusablePalletCnt: number = await trxMgr.getRepository(Pallet).count({
|
|
253
|
+
where: {
|
|
254
|
+
domain: warehouseDomain,
|
|
255
|
+
name: palletId
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
|
|
259
|
+
if (duplicatedReusablePalletCnt) throw new Error(palletId + ` exists`)
|
|
260
|
+
},
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* @summary Do transaction on inventory record
|
|
264
|
+
* @description It will update inventory after set a temp (domain, updater)
|
|
265
|
+
* and then generate inventory history based on current changes
|
|
266
|
+
*/
|
|
267
|
+
async transactionInventory(
|
|
268
|
+
inventory: Partial<Inventory>,
|
|
269
|
+
referenceOrder: ReferenceOrderType,
|
|
270
|
+
changedQty: number,
|
|
271
|
+
changedWeight: number,
|
|
272
|
+
transactionType: string,
|
|
273
|
+
user: User,
|
|
274
|
+
trxMgr: EntityManager
|
|
275
|
+
): Promise<Inventory> {
|
|
276
|
+
if (inventory.id) {
|
|
277
|
+
inventory = await updateInventory(inventory, trxMgr)
|
|
278
|
+
} else {
|
|
279
|
+
inventory = await createInventory(inventory, trxMgr)
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
await generateInventoryHistory(inventory, referenceOrder, transactionType, changedQty, changedWeight, user, trxMgr)
|
|
283
|
+
|
|
284
|
+
return inventory
|
|
214
285
|
}
|
|
215
286
|
}
|
|
216
287
|
|
|
@@ -372,3 +443,156 @@ async function getConditions(
|
|
|
372
443
|
|
|
373
444
|
return { bizplaceIds, productWhereClause, bundleWhereClause, whereClause, batchBundle }
|
|
374
445
|
}
|
|
446
|
+
|
|
447
|
+
async function createInventory(
|
|
448
|
+
inventory: Partial<Inventory> | Partial<Inventory>[],
|
|
449
|
+
trxMgr: EntityManager
|
|
450
|
+
): Promise<Inventory | Inventory[]> {
|
|
451
|
+
return await trxMgr.getRepository(Inventory).save(inventory)
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/**
|
|
455
|
+
* @summary Update inventory record
|
|
456
|
+
* @description It will update inventory after set a stamp (domain, updater)
|
|
457
|
+
* The special point of this function is that this changes won't generate inventory history
|
|
458
|
+
* If you want to generate inventory history automatically you would better to use transactionInventory function
|
|
459
|
+
*/
|
|
460
|
+
async function updateInventory(
|
|
461
|
+
inventory: Partial<Inventory> | Partial<Inventory>[],
|
|
462
|
+
trxMgr: EntityManager
|
|
463
|
+
): Promise<Inventory | Inventory[]> {
|
|
464
|
+
if (!inventory.id) throw new Error(`Target doesn't have ID`)
|
|
465
|
+
return await trxMgr.getRepository(Inventory).save(inventory)
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
async function generateInventoryHistory(
|
|
469
|
+
inventory: Inventory,
|
|
470
|
+
refOrder: any,
|
|
471
|
+
transactionType: string,
|
|
472
|
+
qty: number,
|
|
473
|
+
uomValue: number,
|
|
474
|
+
user: User,
|
|
475
|
+
trxMgr?: EntityManager
|
|
476
|
+
): Promise<InventoryHistory> {
|
|
477
|
+
const invHistoryRepo: Repository<InventoryHistory> =
|
|
478
|
+
trxMgr?.getRepository(InventoryHistory) || getRepository(InventoryHistory)
|
|
479
|
+
const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)
|
|
480
|
+
|
|
481
|
+
if (!inventory?.id) throw new Error(`Can't find out ID of inventory.`)
|
|
482
|
+
if (!refOrder?.id || !refOrder.name) throw new Error(`Can't find out ID or Name of Reference Order`)
|
|
483
|
+
if (
|
|
484
|
+
!inventory?.domain ||
|
|
485
|
+
!inventory?.bizplace ||
|
|
486
|
+
!inventory?.product?.id ||
|
|
487
|
+
!inventory?.warehouse?.id ||
|
|
488
|
+
!inventory?.location?.id
|
|
489
|
+
) {
|
|
490
|
+
inventory = await invRepo.findOne({
|
|
491
|
+
where: { id: inventory.id },
|
|
492
|
+
relations: ['domain', 'bizplace', 'product', 'warehouse', 'location']
|
|
493
|
+
})
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
const domain: Domain = inventory.domain
|
|
497
|
+
const location: Location = inventory.location
|
|
498
|
+
|
|
499
|
+
const seq: number = await invHistoryRepo.count({ domain: inventory.domain, palletId: inventory.palletId })
|
|
500
|
+
let openingQty: number = 0
|
|
501
|
+
let openingUomValue: number = 0
|
|
502
|
+
|
|
503
|
+
if (seq) {
|
|
504
|
+
const lastInvHistory: InventoryHistory = await invHistoryRepo.findOne({
|
|
505
|
+
domain: inventory.domain,
|
|
506
|
+
palletId: inventory.palletId,
|
|
507
|
+
seq: seq - 1
|
|
508
|
+
})
|
|
509
|
+
openingQty = lastInvHistory.openingQty + lastInvHistory.qty
|
|
510
|
+
openingUomValue = lastInvHistory.openingUomValue + lastInvHistory.uomValue
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
let inventoryHistory: InventoryHistory = new InventoryHistory()
|
|
514
|
+
inventoryHistory.name = InventoryNoGenerator.inventoryHistoryName()
|
|
515
|
+
inventoryHistory.description = inventory.description
|
|
516
|
+
inventoryHistory.seq = seq
|
|
517
|
+
inventoryHistory.palletId = inventory.palletId
|
|
518
|
+
inventoryHistory.cartonId = inventory.cartonId
|
|
519
|
+
inventoryHistory.batchId = inventory.batchId
|
|
520
|
+
inventoryHistory.batchIdRef = inventory.batchIdRef
|
|
521
|
+
inventoryHistory.status = inventory.status
|
|
522
|
+
inventoryHistory.transactionType = transactionType
|
|
523
|
+
inventoryHistory.refOrderId = refOrder?.id || null
|
|
524
|
+
inventoryHistory.orderNo = refOrder?.name || null
|
|
525
|
+
inventoryHistory.orderRefNo = refOrder?.refNo || null
|
|
526
|
+
inventoryHistory.inventory = inventory
|
|
527
|
+
inventoryHistory.product = inventory.product
|
|
528
|
+
inventoryHistory.reusablePallet = inventory.reusablePallet
|
|
529
|
+
inventoryHistory.zone = inventory.zone
|
|
530
|
+
inventoryHistory.warehouse = inventory.warehouse
|
|
531
|
+
inventoryHistory.location = inventory.location
|
|
532
|
+
inventoryHistory.expirationDate = inventory.expirationDate
|
|
533
|
+
inventoryHistory.packingType = inventory.packingType
|
|
534
|
+
inventoryHistory.packingSize = inventory.packingSize
|
|
535
|
+
inventoryHistory.uom = inventory.uom
|
|
536
|
+
inventoryHistory.qty = qty
|
|
537
|
+
inventoryHistory.openingQty = openingQty
|
|
538
|
+
inventoryHistory.weight = 0
|
|
539
|
+
inventoryHistory.openingWeight = 0
|
|
540
|
+
inventoryHistory.uomValue = uomValue
|
|
541
|
+
inventoryHistory.openingUomValue = openingUomValue
|
|
542
|
+
inventoryHistory.unitCost = inventory.unitCost
|
|
543
|
+
inventoryHistory.domain = inventory.domain
|
|
544
|
+
inventoryHistory.bizplace = inventory.bizplace
|
|
545
|
+
inventoryHistory.creator = user
|
|
546
|
+
inventoryHistory.updater = user
|
|
547
|
+
|
|
548
|
+
inventoryHistory = await invHistoryRepo.save(inventoryHistory)
|
|
549
|
+
|
|
550
|
+
if (inventory.lastSeq !== seq) {
|
|
551
|
+
await invRepo.save({
|
|
552
|
+
...inventory,
|
|
553
|
+
lastSeq: inventoryHistory.seq,
|
|
554
|
+
updater: user
|
|
555
|
+
})
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
await switchLocationStatus(domain, location, user, trxMgr)
|
|
559
|
+
return inventoryHistory
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* @description: Check location emptiness and update status of location
|
|
564
|
+
* @param domain
|
|
565
|
+
* @param location
|
|
566
|
+
* @param updater
|
|
567
|
+
* @param trxMgr
|
|
568
|
+
*/
|
|
569
|
+
export async function switchLocationStatus(
|
|
570
|
+
domain: Domain,
|
|
571
|
+
location: Location,
|
|
572
|
+
updater: User,
|
|
573
|
+
trxMgr?: EntityManager
|
|
574
|
+
): Promise<Location> {
|
|
575
|
+
const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)
|
|
576
|
+
const locationRepo: Repository<Location> = trxMgr?.getRepository(Location) || getRepository(Location)
|
|
577
|
+
const allocatedItemsCnt: number = await invRepo.count({
|
|
578
|
+
domain,
|
|
579
|
+
status: INVENTORY_STATUS.STORED,
|
|
580
|
+
location
|
|
581
|
+
})
|
|
582
|
+
|
|
583
|
+
if (!allocatedItemsCnt && location.status !== LOCATION_STATUS.EMPTY) {
|
|
584
|
+
location = await locationRepo.save({
|
|
585
|
+
...location,
|
|
586
|
+
status: LOCATION_STATUS.EMPTY,
|
|
587
|
+
updater
|
|
588
|
+
})
|
|
589
|
+
} else if (allocatedItemsCnt && location.status === LOCATION_STATUS.EMPTY) {
|
|
590
|
+
location = await locationRepo.save({
|
|
591
|
+
...location,
|
|
592
|
+
status: LOCATION_STATUS.OCCUPIED,
|
|
593
|
+
updater
|
|
594
|
+
})
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
return location
|
|
598
|
+
}
|