@things-factory/sales-base 4.3.143 → 4.3.146
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/service/index.js +39 -25
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/manifest/manifest-mutation.js +13 -9
- package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
- package/dist-server/service/manifest/manifest-query.js +14 -24
- package/dist-server/service/manifest/manifest-query.js.map +1 -1
- package/dist-server/service/order-package/index.js +9 -0
- package/dist-server/service/order-package/index.js.map +1 -0
- package/dist-server/service/order-package/order-package-mutation.js +120 -0
- package/dist-server/service/order-package/order-package-mutation.js.map +1 -0
- package/dist-server/service/order-package/order-package-query.js +119 -0
- package/dist-server/service/order-package/order-package-query.js.map +1 -0
- package/dist-server/service/order-package/order-package-types.js +105 -0
- package/dist-server/service/order-package/order-package-types.js.map +1 -0
- package/dist-server/service/order-package/order-package.js +147 -0
- package/dist-server/service/order-package/order-package.js.map +1 -0
- package/dist-server/service/order-package-item/index.js +9 -0
- package/dist-server/service/order-package-item/index.js.map +1 -0
- package/dist-server/service/order-package-item/order-package-item-mutation.js +120 -0
- package/dist-server/service/order-package-item/order-package-item-mutation.js.map +1 -0
- package/dist-server/service/order-package-item/order-package-item-query.js +126 -0
- package/dist-server/service/order-package-item/order-package-item-query.js.map +1 -0
- package/dist-server/service/order-package-item/order-package-item-types.js +87 -0
- package/dist-server/service/order-package-item/order-package-item-types.js.map +1 -0
- package/dist-server/service/order-package-item/order-package-item.js +123 -0
- package/dist-server/service/order-package-item/order-package-item.js.map +1 -0
- package/dist-server/service/order-product/order-product.js +6 -0
- package/dist-server/service/order-product/order-product.js.map +1 -1
- package/dist-server/service/others/other-query.js +19 -17
- package/dist-server/service/others/other-query.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +15 -4
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/release-good/release-good.js +10 -0
- package/dist-server/service/release-good/release-good.js.map +1 -1
- package/dist-server/utils/order-no-generator.js +7 -0
- package/dist-server/utils/order-no-generator.js.map +1 -1
- package/package.json +14 -14
- package/server/service/index.ts +41 -29
- package/server/service/manifest/manifest-mutation.ts +18 -9
- package/server/service/manifest/manifest-query.ts +22 -30
- package/server/service/order-package/index.ts +6 -0
- package/server/service/order-package/order-package-mutation.ts +113 -0
- package/server/service/order-package/order-package-query.ts +86 -0
- package/server/service/order-package/order-package-types.ts +66 -0
- package/server/service/order-package/order-package.ts +118 -0
- package/server/service/order-package-item/index.ts +6 -0
- package/server/service/order-package-item/order-package-item-mutation.ts +113 -0
- package/server/service/order-package-item/order-package-item-query.ts +89 -0
- package/server/service/order-package-item/order-package-item-types.ts +51 -0
- package/server/service/order-package-item/order-package-item.ts +102 -0
- package/server/service/order-product/order-product.ts +5 -0
- package/server/service/others/other-query.ts +25 -25
- package/server/service/release-good/release-good-query.ts +26 -10
- package/server/service/release-good/release-good.ts +9 -0
- package/server/utils/order-no-generator.ts +11 -0
|
@@ -2,8 +2,9 @@ import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graph
|
|
|
2
2
|
import { getRepository, SelectQueryBuilder } from 'typeorm'
|
|
3
3
|
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
|
5
|
-
import {
|
|
5
|
+
import { buildQuery, Domain, ListParam, Sorting } from '@things-factory/shell'
|
|
6
6
|
|
|
7
|
+
import { OrderPackage } from '../order-package/order-package'
|
|
7
8
|
import { ReleaseGood } from '../release-good/release-good'
|
|
8
9
|
import { Manifest } from './manifest'
|
|
9
10
|
import { ManifestList } from './manifest-type'
|
|
@@ -16,37 +17,26 @@ export class ManifestQuery {
|
|
|
16
17
|
@Ctx() context: any,
|
|
17
18
|
@Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[]
|
|
18
19
|
): Promise<Manifest> {
|
|
19
|
-
const phoneSort = sortings.findIndex(sort => sort.name === 'phone')
|
|
20
|
-
if (phoneSort >= 0) {
|
|
21
|
-
sortings[phoneSort].name = 'phone1'
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const deliveryAddressSort = sortings.findIndex(sort => sort.name === 'deliveryAddress')
|
|
25
|
-
if (deliveryAddressSort >= 0) {
|
|
26
|
-
sortings[deliveryAddressSort].name = 'deliveryAddress1'
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const orderRemarkSort = sortings.findIndex(sort => sort.name === 'orderRemark')
|
|
30
|
-
if (orderRemarkSort >= 0) {
|
|
31
|
-
sortings[orderRemarkSort].name = 'remark'
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const orderStatusSort = sortings.findIndex(sort => sort.name === 'orderStatus')
|
|
35
|
-
if (orderStatusSort >= 0) {
|
|
36
|
-
sortings[orderStatusSort].name = 'status'
|
|
37
|
-
}
|
|
38
|
-
const convertedParams = convertListParams({ sortings })
|
|
39
20
|
const { domain, tx } = context.state
|
|
40
21
|
const manifest: Manifest = await getRepository(Manifest).findOne({ where: { domain, name } })
|
|
41
22
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
23
|
+
let qb: any = getRepository(OrderPackage).createQueryBuilder('opk')
|
|
24
|
+
qb.innerJoinAndSelect('opk.releaseGood', 'rg').where('opk.manifest_id = :manifestId', { manifestId: manifest.id })
|
|
25
|
+
const sort = (sortings || []).reduce(
|
|
26
|
+
(acc, sort) => ({
|
|
27
|
+
...acc,
|
|
28
|
+
[sort.name]: sort.desc ? 'DESC' : 'ASC'
|
|
29
|
+
}),
|
|
30
|
+
{}
|
|
31
|
+
)
|
|
32
|
+
qb.orderBy(sort)
|
|
33
|
+
|
|
34
|
+
const orderPackages: OrderPackage[] = await qb.getMany()
|
|
46
35
|
|
|
47
|
-
const trackingNos: any[] =
|
|
36
|
+
const trackingNos: any[] = orderPackages.map(opk => {
|
|
37
|
+
const releaseGood: ReleaseGood = opk.releaseGood
|
|
48
38
|
return {
|
|
49
|
-
trackingNo:
|
|
39
|
+
trackingNo: opk.trackingNo,
|
|
50
40
|
refNo: releaseGood.refNo,
|
|
51
41
|
deliveryAddress: releaseGood.deliveryAddress1,
|
|
52
42
|
attentionTo: releaseGood.attentionTo,
|
|
@@ -113,20 +103,22 @@ export class ManifestQuery {
|
|
|
113
103
|
|
|
114
104
|
const qb: SelectQueryBuilder<Manifest> = getRepository(Manifest).createQueryBuilder('mf')
|
|
115
105
|
buildQuery(qb, params, context)
|
|
116
|
-
qb.innerJoin('
|
|
106
|
+
qb.innerJoin('order_packages', 'op', 'op.manifest_id = mf.id')
|
|
107
|
+
qb.innerJoin('op.releaseGood', 'rg')
|
|
108
|
+
// qb.innerJoin('release_goods', 'rg', 'rg.manifest_id = mf.id')
|
|
117
109
|
orderInfoFilter
|
|
118
110
|
? qb.andWhere(
|
|
119
111
|
'(rg.name ~* :orderInfoFilter or rg.ref_no ~* :orderInfoFilter or rg.ref_no_2 ~* :orderInfoFilter or rg.ref_no_3 ~* :orderInfoFilter)',
|
|
120
112
|
{ orderInfoFilter }
|
|
121
113
|
)
|
|
122
114
|
: ''
|
|
123
|
-
trackingNoFilter ? qb.andWhere('
|
|
115
|
+
trackingNoFilter ? qb.andWhere('op.tracking_no ilike :trackingNo', { trackingNo: trackingNoFilter }) : ''
|
|
124
116
|
|
|
125
117
|
const [items, total] = await qb.getManyAndCount()
|
|
126
118
|
|
|
127
119
|
await Promise.all(
|
|
128
120
|
items.map(async item => {
|
|
129
|
-
item.totalTrackingNo = await getRepository(
|
|
121
|
+
item.totalTrackingNo = await getRepository(OrderPackage).count({ where: { manifest: item.id } })
|
|
130
122
|
})
|
|
131
123
|
)
|
|
132
124
|
return { items, total }
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OrderPackage } from './order-package'
|
|
2
|
+
import { OrderPackageQuery } from './order-package-query'
|
|
3
|
+
import { OrderPackageMutation } from './order-package-mutation'
|
|
4
|
+
|
|
5
|
+
export const entities = [OrderPackage]
|
|
6
|
+
export const resolvers = [OrderPackageQuery, OrderPackageMutation]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
2
|
+
import { In } from 'typeorm'
|
|
3
|
+
|
|
4
|
+
import { OrderPackage } from './order-package'
|
|
5
|
+
import { NewOrderPackage, OrderPackagePatch } from './order-package-types'
|
|
6
|
+
|
|
7
|
+
@Resolver(OrderPackage)
|
|
8
|
+
export class OrderPackageMutation {
|
|
9
|
+
@Directive('@transaction')
|
|
10
|
+
@Mutation(returns => OrderPackage, { description: 'To create new OrderPackage' })
|
|
11
|
+
async createOrderPackage(
|
|
12
|
+
@Arg('orderPackage') orderPackage: NewOrderPackage,
|
|
13
|
+
@Ctx() context: any
|
|
14
|
+
): Promise<OrderPackage> {
|
|
15
|
+
const { domain, user, tx } = context.state
|
|
16
|
+
|
|
17
|
+
return await tx.getRepository(OrderPackage).save({
|
|
18
|
+
...orderPackage,
|
|
19
|
+
domain,
|
|
20
|
+
creator: user,
|
|
21
|
+
updater: user
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Directive('@transaction')
|
|
26
|
+
@Mutation(returns => OrderPackage, { description: 'To modify OrderPackage information' })
|
|
27
|
+
async updateOrderPackage(
|
|
28
|
+
@Arg('id') id: string,
|
|
29
|
+
@Arg('patch') patch: OrderPackagePatch,
|
|
30
|
+
@Ctx() context: any
|
|
31
|
+
): Promise<OrderPackage> {
|
|
32
|
+
const { domain, user, tx } = context.state
|
|
33
|
+
|
|
34
|
+
const repository = tx.getRepository(OrderPackage)
|
|
35
|
+
const orderPackage = await repository.findOne({
|
|
36
|
+
where: { domain, id }
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
return await repository.save({
|
|
40
|
+
...orderPackage,
|
|
41
|
+
...patch,
|
|
42
|
+
updater: user
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Directive('@transaction')
|
|
47
|
+
@Mutation(returns => [OrderPackage], { description: "To modify multiple OrderPackages' information" })
|
|
48
|
+
async updateMultipleOrderPackage(
|
|
49
|
+
@Arg('patches', type => [OrderPackagePatch]) patches: OrderPackagePatch[],
|
|
50
|
+
@Ctx() context: any
|
|
51
|
+
): Promise<OrderPackage[]> {
|
|
52
|
+
const { domain, user, tx } = context.state
|
|
53
|
+
|
|
54
|
+
let results = []
|
|
55
|
+
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
56
|
+
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
57
|
+
const orderPackageRepo = tx.getRepository(OrderPackage)
|
|
58
|
+
|
|
59
|
+
if (_createRecords.length > 0) {
|
|
60
|
+
for (let i = 0; i < _createRecords.length; i++) {
|
|
61
|
+
const newRecord = _createRecords[i]
|
|
62
|
+
|
|
63
|
+
const result = await orderPackageRepo.save({
|
|
64
|
+
...newRecord,
|
|
65
|
+
domain,
|
|
66
|
+
creator: user,
|
|
67
|
+
updater: user
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
results.push({ ...result, cuFlag: '+' })
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (_updateRecords.length > 0) {
|
|
75
|
+
for (let i = 0; i < _updateRecords.length; i++) {
|
|
76
|
+
const newRecord = _updateRecords[i]
|
|
77
|
+
const orderPackage = await orderPackageRepo.findOne(newRecord.id)
|
|
78
|
+
|
|
79
|
+
const result = await orderPackageRepo.save({
|
|
80
|
+
...orderPackage,
|
|
81
|
+
...newRecord,
|
|
82
|
+
updater: user
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
results.push({ ...result, cuFlag: 'M' })
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return results
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@Directive('@transaction')
|
|
93
|
+
@Mutation(returns => Boolean, { description: 'To delete OrderPackage' })
|
|
94
|
+
async deleteOrderPackage(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
|
|
95
|
+
const { domain, tx } = context.state
|
|
96
|
+
|
|
97
|
+
await tx.getRepository(OrderPackage).delete({ domain, id })
|
|
98
|
+
return true
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Directive('@transaction')
|
|
102
|
+
@Mutation(returns => Boolean, { description: 'To delete multiple orderPackages' })
|
|
103
|
+
async deleteOrderPackages(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
|
|
104
|
+
const { domain, tx } = context.state
|
|
105
|
+
|
|
106
|
+
await tx.getRepository(OrderPackage).delete({
|
|
107
|
+
domain,
|
|
108
|
+
id: In(ids)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
return true
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Arg, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
+
import { getRepository, In } from 'typeorm'
|
|
3
|
+
|
|
4
|
+
import { User } from '@things-factory/auth-base'
|
|
5
|
+
import { getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
6
|
+
import { Domain, Filter, Pagination, Sorting } from '@things-factory/shell'
|
|
7
|
+
|
|
8
|
+
import { OrderPackage } from './order-package'
|
|
9
|
+
import { OrderPackageList } from './order-package-types'
|
|
10
|
+
|
|
11
|
+
@Resolver(OrderPackage)
|
|
12
|
+
export class OrderPackageQuery {
|
|
13
|
+
@Query(returns => OrderPackage, { description: 'To fetch a OrderPackage' })
|
|
14
|
+
async orderPackage(
|
|
15
|
+
@Ctx() context: any,
|
|
16
|
+
@Arg('id', { nullable: true }) id: string,
|
|
17
|
+
@Arg('trackingNo', { nullable: true }) trackingNo: string
|
|
18
|
+
): Promise<OrderPackage> {
|
|
19
|
+
const { domain, user } = context.state
|
|
20
|
+
|
|
21
|
+
if (id) {
|
|
22
|
+
return await getRepository(OrderPackage).findOne({
|
|
23
|
+
where: { domain, id }
|
|
24
|
+
})
|
|
25
|
+
} else if (trackingNo) {
|
|
26
|
+
let orderPackage = await getRepository(OrderPackage).findOne({
|
|
27
|
+
where: {
|
|
28
|
+
domain,
|
|
29
|
+
trackingNo,
|
|
30
|
+
bizplace: In(await getPermittedBizplaceIds(domain, user))
|
|
31
|
+
},
|
|
32
|
+
relations: ['bizplace', 'releaseGood']
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
if (!orderPackage) {
|
|
36
|
+
throw new Error('Tracking No not found in any orders')
|
|
37
|
+
} else {
|
|
38
|
+
return orderPackage
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Query(returns => OrderPackageList, { description: 'To fetch multiple OrderPackages' })
|
|
44
|
+
async orderPackages(
|
|
45
|
+
@Ctx() context: any,
|
|
46
|
+
@Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
|
|
47
|
+
@Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
|
|
48
|
+
@Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[]
|
|
49
|
+
): Promise<OrderPackageList> {
|
|
50
|
+
const { domain } = context.state
|
|
51
|
+
|
|
52
|
+
const bizplaceIdParam = filters.find(item => item.name === 'bizplaceId')
|
|
53
|
+
const releaseGoodIdParam = filters.find(item => item.name === 'releaseGoodId')
|
|
54
|
+
|
|
55
|
+
let qb = getRepository(OrderPackage)
|
|
56
|
+
.createQueryBuilder('opk')
|
|
57
|
+
.where('opk.domain_id = :domainId', { domainId: domain.id })
|
|
58
|
+
|
|
59
|
+
if (bizplaceIdParam) {
|
|
60
|
+
qb.andWhere('opk.bizplace_id = :bizplaceId', { bizplaceId: bizplaceIdParam.value })
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (releaseGoodIdParam) {
|
|
64
|
+
qb.andWhere('opk.release_good_id = :releaseGoodId', { releaseGoodId: releaseGoodIdParam.value })
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
let [items, total] = await qb.getManyAndCount()
|
|
68
|
+
|
|
69
|
+
return { items, total }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@FieldResolver(type => Domain)
|
|
73
|
+
async domain(@Root() orderPackage: OrderPackage): Promise<Domain> {
|
|
74
|
+
return await getRepository(Domain).findOne(orderPackage.domainId)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@FieldResolver(type => User)
|
|
78
|
+
async updater(@Root() orderPackage: OrderPackage): Promise<User> {
|
|
79
|
+
return await getRepository(User).findOne(orderPackage.updaterId)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@FieldResolver(type => User)
|
|
83
|
+
async creator(@Root() orderPackage: OrderPackage): Promise<User> {
|
|
84
|
+
return await getRepository(User).findOne(orderPackage.creatorId)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
|
2
|
+
|
|
3
|
+
import { OrderPackage } from './order-package'
|
|
4
|
+
|
|
5
|
+
@InputType()
|
|
6
|
+
export class NewOrderPackage {
|
|
7
|
+
@Field()
|
|
8
|
+
name: string
|
|
9
|
+
|
|
10
|
+
@Field({ nullable: true })
|
|
11
|
+
packageId: string
|
|
12
|
+
|
|
13
|
+
@Field({ nullable: true })
|
|
14
|
+
transporter: string
|
|
15
|
+
|
|
16
|
+
@Field({ nullable: true })
|
|
17
|
+
trackingNo: string
|
|
18
|
+
|
|
19
|
+
@Field({ nullable: true })
|
|
20
|
+
airwayBill: string
|
|
21
|
+
|
|
22
|
+
@Field({ nullable: true })
|
|
23
|
+
invoice: string
|
|
24
|
+
|
|
25
|
+
@Field({ nullable: true })
|
|
26
|
+
status?: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@InputType()
|
|
30
|
+
export class OrderPackagePatch {
|
|
31
|
+
@Field(type => ID, { nullable: true })
|
|
32
|
+
id?: string
|
|
33
|
+
|
|
34
|
+
@Field({ nullable: true })
|
|
35
|
+
name?: string
|
|
36
|
+
|
|
37
|
+
@Field({ nullable: true })
|
|
38
|
+
packageId: string
|
|
39
|
+
|
|
40
|
+
@Field({ nullable: true })
|
|
41
|
+
transporter: string
|
|
42
|
+
|
|
43
|
+
@Field({ nullable: true })
|
|
44
|
+
trackingNo: string
|
|
45
|
+
|
|
46
|
+
@Field({ nullable: true })
|
|
47
|
+
airwayBill: string
|
|
48
|
+
|
|
49
|
+
@Field({ nullable: true })
|
|
50
|
+
invoice: string
|
|
51
|
+
|
|
52
|
+
@Field({ nullable: true })
|
|
53
|
+
status?: string
|
|
54
|
+
|
|
55
|
+
@Field()
|
|
56
|
+
cuFlag: string
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@ObjectType()
|
|
60
|
+
export class OrderPackageList {
|
|
61
|
+
@Field(type => [OrderPackage])
|
|
62
|
+
items: OrderPackage[]
|
|
63
|
+
|
|
64
|
+
@Field(type => Int)
|
|
65
|
+
total: number
|
|
66
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { Field, ID, ObjectType } from 'type-graphql'
|
|
2
|
+
import {
|
|
3
|
+
Column,
|
|
4
|
+
CreateDateColumn,
|
|
5
|
+
Entity,
|
|
6
|
+
Index,
|
|
7
|
+
ManyToOne,
|
|
8
|
+
OneToMany,
|
|
9
|
+
PrimaryGeneratedColumn,
|
|
10
|
+
RelationId,
|
|
11
|
+
UpdateDateColumn
|
|
12
|
+
} from 'typeorm'
|
|
13
|
+
|
|
14
|
+
import { User } from '@things-factory/auth-base'
|
|
15
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
16
|
+
import { Domain } from '@things-factory/shell'
|
|
17
|
+
|
|
18
|
+
import { Manifest, OrderPackageItem, ReleaseGood } from '../'
|
|
19
|
+
|
|
20
|
+
@Entity()
|
|
21
|
+
@Index('ix_order_package_0', (orderPackage: OrderPackage) => [orderPackage.domain, orderPackage.name], { unique: true })
|
|
22
|
+
@ObjectType({ description: 'Entity for OrderPackage' })
|
|
23
|
+
export class OrderPackage {
|
|
24
|
+
@PrimaryGeneratedColumn('uuid')
|
|
25
|
+
@Field(type => ID)
|
|
26
|
+
readonly id: string
|
|
27
|
+
|
|
28
|
+
@ManyToOne(type => Domain)
|
|
29
|
+
@Field({ nullable: true })
|
|
30
|
+
domain?: Domain
|
|
31
|
+
|
|
32
|
+
@RelationId((orderPackage: OrderPackage) => orderPackage.domain)
|
|
33
|
+
domainId?: string
|
|
34
|
+
|
|
35
|
+
@ManyToOne(type => Bizplace)
|
|
36
|
+
@Field(type => Bizplace, { nullable: true })
|
|
37
|
+
bizplace?: Bizplace
|
|
38
|
+
|
|
39
|
+
@RelationId((orderPackage: OrderPackage) => orderPackage.bizplace)
|
|
40
|
+
bizplaceId?: string
|
|
41
|
+
|
|
42
|
+
@ManyToOne(type => ReleaseGood)
|
|
43
|
+
@Field(type => ReleaseGood, { nullable: true })
|
|
44
|
+
releaseGood?: ReleaseGood
|
|
45
|
+
|
|
46
|
+
@ManyToOne(type => Manifest)
|
|
47
|
+
@Field(type => Manifest, { nullable: true })
|
|
48
|
+
manifest: Manifest
|
|
49
|
+
|
|
50
|
+
@OneToMany(type => OrderPackageItem, orderPackageItem => orderPackageItem.orderPackage)
|
|
51
|
+
@Field(type => [OrderPackageItem], { nullable: true })
|
|
52
|
+
orderPackageItems: OrderPackageItem[]
|
|
53
|
+
|
|
54
|
+
@Column()
|
|
55
|
+
@Field()
|
|
56
|
+
name: string
|
|
57
|
+
|
|
58
|
+
@Column({ nullable: true })
|
|
59
|
+
@Field({ nullable: true })
|
|
60
|
+
packageId: string
|
|
61
|
+
|
|
62
|
+
@Column({ nullable: true })
|
|
63
|
+
@Field({ nullable: true })
|
|
64
|
+
transporter: string
|
|
65
|
+
|
|
66
|
+
@Column({ nullable: true })
|
|
67
|
+
@Field({ nullable: true })
|
|
68
|
+
trackingNo: string
|
|
69
|
+
|
|
70
|
+
@Column({ nullable: true })
|
|
71
|
+
@Field({ nullable: true })
|
|
72
|
+
airwayBill: string
|
|
73
|
+
|
|
74
|
+
@Column({ nullable: true })
|
|
75
|
+
@Field({ nullable: true })
|
|
76
|
+
invoice: string
|
|
77
|
+
|
|
78
|
+
@Column({ nullable: true })
|
|
79
|
+
@Field({ nullable: true })
|
|
80
|
+
manifestedAt: Date
|
|
81
|
+
|
|
82
|
+
@ManyToOne(type => User)
|
|
83
|
+
@Field(type => User, { nullable: true })
|
|
84
|
+
manifestedBy: User
|
|
85
|
+
|
|
86
|
+
@RelationId((orderPackage: OrderPackage) => orderPackage.manifestedBy)
|
|
87
|
+
manifestedById: string
|
|
88
|
+
|
|
89
|
+
@Column({ nullable: true })
|
|
90
|
+
@Field({ nullable: true })
|
|
91
|
+
status: string
|
|
92
|
+
|
|
93
|
+
@CreateDateColumn()
|
|
94
|
+
@Field({ nullable: true })
|
|
95
|
+
createdAt?: Date
|
|
96
|
+
|
|
97
|
+
@UpdateDateColumn()
|
|
98
|
+
@Field({ nullable: true })
|
|
99
|
+
updatedAt?: Date
|
|
100
|
+
|
|
101
|
+
@ManyToOne(type => User, {
|
|
102
|
+
nullable: true
|
|
103
|
+
})
|
|
104
|
+
@Field({ nullable: true })
|
|
105
|
+
creator?: User
|
|
106
|
+
|
|
107
|
+
@RelationId((orderPackage: OrderPackage) => orderPackage.creator)
|
|
108
|
+
creatorId?: string
|
|
109
|
+
|
|
110
|
+
@ManyToOne(type => User, {
|
|
111
|
+
nullable: true
|
|
112
|
+
})
|
|
113
|
+
@Field({ nullable: true })
|
|
114
|
+
updater?: User
|
|
115
|
+
|
|
116
|
+
@RelationId((orderPackage: OrderPackage) => orderPackage.creator)
|
|
117
|
+
updaterId?: string
|
|
118
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { OrderPackageItem } from './order-package-item'
|
|
2
|
+
import { OrderPackageItemQuery } from './order-package-item-query'
|
|
3
|
+
import { OrderPackageItemMutation } from './order-package-item-mutation'
|
|
4
|
+
|
|
5
|
+
export const entities = [OrderPackageItem]
|
|
6
|
+
export const resolvers = [OrderPackageItemQuery, OrderPackageItemMutation]
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
2
|
+
import { In } from 'typeorm'
|
|
3
|
+
|
|
4
|
+
import { OrderPackageItem } from './order-package-item'
|
|
5
|
+
import { NewOrderPackageItem, OrderPackageItemPatch } from './order-package-item-types'
|
|
6
|
+
|
|
7
|
+
@Resolver(OrderPackageItem)
|
|
8
|
+
export class OrderPackageItemMutation {
|
|
9
|
+
@Directive('@transaction')
|
|
10
|
+
@Mutation(returns => OrderPackageItem, { description: 'To create new OrderPackageItem' })
|
|
11
|
+
async createOrderPackageItem(
|
|
12
|
+
@Arg('orderPackageItem') orderPackageItem: NewOrderPackageItem,
|
|
13
|
+
@Ctx() context: any
|
|
14
|
+
): Promise<OrderPackageItem> {
|
|
15
|
+
const { domain, user, tx } = context.state
|
|
16
|
+
|
|
17
|
+
return await tx.getRepository(OrderPackageItem).save({
|
|
18
|
+
...orderPackageItem,
|
|
19
|
+
domain,
|
|
20
|
+
creator: user,
|
|
21
|
+
updater: user
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Directive('@transaction')
|
|
26
|
+
@Mutation(returns => OrderPackageItem, { description: 'To modify OrderPackageItem information' })
|
|
27
|
+
async updateOrderPackageItem(
|
|
28
|
+
@Arg('id') id: string,
|
|
29
|
+
@Arg('patch') patch: OrderPackageItemPatch,
|
|
30
|
+
@Ctx() context: any
|
|
31
|
+
): Promise<OrderPackageItem> {
|
|
32
|
+
const { domain, user, tx } = context.state
|
|
33
|
+
|
|
34
|
+
const repository = tx.getRepository(OrderPackageItem)
|
|
35
|
+
const orderPackageItem = await repository.findOne({
|
|
36
|
+
where: { domain, id }
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
return await repository.save({
|
|
40
|
+
...orderPackageItem,
|
|
41
|
+
...patch,
|
|
42
|
+
updater: user
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Directive('@transaction')
|
|
47
|
+
@Mutation(returns => [OrderPackageItem], { description: "To modify multiple OrderPackageItems' information" })
|
|
48
|
+
async updateMultipleOrderPackageItem(
|
|
49
|
+
@Arg('patches', type => [OrderPackageItemPatch]) patches: OrderPackageItemPatch[],
|
|
50
|
+
@Ctx() context: any
|
|
51
|
+
): Promise<OrderPackageItem[]> {
|
|
52
|
+
const { domain, user, tx } = context.state
|
|
53
|
+
|
|
54
|
+
let results = []
|
|
55
|
+
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
56
|
+
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
57
|
+
const orderPackageItemRepo = tx.getRepository(OrderPackageItem)
|
|
58
|
+
|
|
59
|
+
if (_createRecords.length > 0) {
|
|
60
|
+
for (let i = 0; i < _createRecords.length; i++) {
|
|
61
|
+
const newRecord = _createRecords[i]
|
|
62
|
+
|
|
63
|
+
const result = await orderPackageItemRepo.save({
|
|
64
|
+
...newRecord,
|
|
65
|
+
domain,
|
|
66
|
+
creator: user,
|
|
67
|
+
updater: user
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
results.push({ ...result, cuFlag: '+' })
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (_updateRecords.length > 0) {
|
|
75
|
+
for (let i = 0; i < _updateRecords.length; i++) {
|
|
76
|
+
const newRecord = _updateRecords[i]
|
|
77
|
+
const orderPackageItem = await orderPackageItemRepo.findOne(newRecord.id)
|
|
78
|
+
|
|
79
|
+
const result = await orderPackageItemRepo.save({
|
|
80
|
+
...orderPackageItem,
|
|
81
|
+
...newRecord,
|
|
82
|
+
updater: user
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
results.push({ ...result, cuFlag: 'M' })
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return results
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@Directive('@transaction')
|
|
93
|
+
@Mutation(returns => Boolean, { description: 'To delete OrderPackageItem' })
|
|
94
|
+
async deleteOrderPackageItem(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
|
|
95
|
+
const { domain, tx } = context.state
|
|
96
|
+
|
|
97
|
+
await tx.getRepository(OrderPackageItem).delete({ domain, id })
|
|
98
|
+
return true
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Directive('@transaction')
|
|
102
|
+
@Mutation(returns => Boolean, { description: 'To delete multiple orderPackageItems' })
|
|
103
|
+
async deleteOrderPackageItems(@Arg('ids', type => [String]) ids: string[], @Ctx() context: any): Promise<boolean> {
|
|
104
|
+
const { domain, tx } = context.state
|
|
105
|
+
|
|
106
|
+
await tx.getRepository(OrderPackageItem).delete({
|
|
107
|
+
domain,
|
|
108
|
+
id: In(ids)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
return true
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
+
import { getRepository } from 'typeorm'
|
|
3
|
+
|
|
4
|
+
import { User } from '@things-factory/auth-base'
|
|
5
|
+
import { convertListParams, Domain, Filter, ListParam } from '@things-factory/shell'
|
|
6
|
+
|
|
7
|
+
import { OrderPackageItem } from './order-package-item'
|
|
8
|
+
import { OrderPackageItemList, TrackingInformation } from './order-package-item-types'
|
|
9
|
+
|
|
10
|
+
@Resolver(OrderPackageItem)
|
|
11
|
+
export class OrderPackageItemQuery {
|
|
12
|
+
@Query(returns => OrderPackageItem, { description: 'To fetch a OrderPackageItem' })
|
|
13
|
+
async orderPackageItem(@Arg('id') id: string, @Ctx() context: any): Promise<OrderPackageItem> {
|
|
14
|
+
const { domain } = context.state
|
|
15
|
+
|
|
16
|
+
return await getRepository(OrderPackageItem).findOne({
|
|
17
|
+
where: { domain, id }
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
@Query(returns => OrderPackageItemList, { description: 'To fetch multiple OrderPackageItems' })
|
|
22
|
+
async orderPackageItems(@Args() params: ListParam, @Ctx() context: any): Promise<OrderPackageItemList> {
|
|
23
|
+
const { domain } = context.state
|
|
24
|
+
|
|
25
|
+
const convertedParams = convertListParams(params, domain.id)
|
|
26
|
+
const [items, total] = await getRepository(OrderPackageItem).findAndCount(convertedParams)
|
|
27
|
+
|
|
28
|
+
return { items, total }
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Query(returns => [TrackingInformation], { description: 'To fetch multiple OrderPackageItems' })
|
|
32
|
+
async orderPackageItemsGroup(
|
|
33
|
+
@Ctx() context: any,
|
|
34
|
+
@Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[]
|
|
35
|
+
): Promise<TrackingInformation[]> {
|
|
36
|
+
const { domain } = context.state
|
|
37
|
+
|
|
38
|
+
const bizplaceIdParam = filters.find(item => item.name === 'bizplaceId')
|
|
39
|
+
const releaseGoodIdParam = filters.find(item => item.name === 'releaseGoodId')
|
|
40
|
+
|
|
41
|
+
let qb = getRepository(OrderPackageItem)
|
|
42
|
+
.createQueryBuilder('opki')
|
|
43
|
+
.select('opk.tracking_no', 'trackingNo')
|
|
44
|
+
.addSelect('prd.sku', 'sku')
|
|
45
|
+
.addSelect('SUM(opki.release_qty)', 'releaseQty')
|
|
46
|
+
.innerJoin('opki.orderPackage', 'opk')
|
|
47
|
+
.innerJoin('opki.orderProduct', 'op')
|
|
48
|
+
.innerJoin('op.product', 'prd')
|
|
49
|
+
.where('opk.domain_id = :domainId', { domainId: domain.id })
|
|
50
|
+
|
|
51
|
+
if (bizplaceIdParam) {
|
|
52
|
+
qb.andWhere('opk.bizplace_id = :bizplaceId', { bizplaceId: bizplaceIdParam.value })
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (releaseGoodIdParam) {
|
|
56
|
+
qb.andWhere('opk.release_good_id = :releaseGoodId', { releaseGoodId: releaseGoodIdParam.value })
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
qb.groupBy('opk.trackingNo')
|
|
60
|
+
qb.addGroupBy('prd.sku')
|
|
61
|
+
|
|
62
|
+
let qbResult: any[] = await qb.getRawMany()
|
|
63
|
+
|
|
64
|
+
let items: any = qbResult.map(itm => {
|
|
65
|
+
return {
|
|
66
|
+
trackingNo: itm.trackingNo,
|
|
67
|
+
sku: itm.sku,
|
|
68
|
+
releaseQty: itm.releaseQty
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
return items
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@FieldResolver(type => Domain)
|
|
76
|
+
async domain(@Root() orderPackageItem: OrderPackageItem): Promise<Domain> {
|
|
77
|
+
return await getRepository(Domain).findOne(orderPackageItem.domainId)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@FieldResolver(type => User)
|
|
81
|
+
async updater(@Root() orderPackageItem: OrderPackageItem): Promise<User> {
|
|
82
|
+
return await getRepository(User).findOne(orderPackageItem.updaterId)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@FieldResolver(type => User)
|
|
86
|
+
async creator(@Root() orderPackageItem: OrderPackageItem): Promise<User> {
|
|
87
|
+
return await getRepository(User).findOne(orderPackageItem.creatorId)
|
|
88
|
+
}
|
|
89
|
+
}
|