@things-factory/sales-base 4.0.12 → 4.0.17
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/arrival-notice/arrival-notice-query.js +0 -1
- package/dist-server/service/arrival-notice/arrival-notice-query.js.map +1 -1
- package/dist-server/service/manifest/manifest-mutation.js +63 -72
- package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
- package/dist-server/service/manifest/manifest-query.js +49 -8
- package/dist-server/service/manifest/manifest-query.js.map +1 -1
- package/dist-server/service/manifest/manifest-type.js +67 -27
- package/dist-server/service/manifest/manifest-type.js.map +1 -1
- package/dist-server/service/manifest/manifest.js +5 -0
- package/dist-server/service/manifest/manifest.js.map +1 -1
- package/dist-server/service/others/other-types.js +4 -0
- package/dist-server/service/others/other-types.js.map +1 -1
- package/dist-server/service/release-good/release-good-mutation.js +360 -1
- package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +160 -0
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/release-good/release-good-types.js +34 -2
- package/dist-server/service/release-good/release-good-types.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js +66 -19
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js +84 -72
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js +144 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js.map +1 -1
- package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js +17 -7
- package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.js.map +1 -1
- package/package.json +12 -12
- package/server/service/arrival-notice/arrival-notice-query.ts +0 -2
- package/server/service/manifest/manifest-mutation.ts +78 -88
- package/server/service/manifest/manifest-query.ts +64 -8
- package/server/service/manifest/manifest-type.ts +47 -20
- package/server/service/manifest/manifest.ts +5 -0
- package/server/service/others/other-types.ts +3 -0
- package/server/service/release-good/release-good-mutation.ts +512 -0
- package/server/service/release-good/release-good-query.ts +197 -2
- package/server/service/release-good/release-good-types.ts +31 -7
- package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +82 -21
- package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +95 -79
- package/server/service/reverse-kitting-order/reverse-kitting-order-type.ts +106 -1
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.ts +31 -14
|
@@ -1,112 +1,102 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
2
|
+
|
|
3
|
+
import { DISPATCHMENT_STATUS } from '../../constants'
|
|
4
|
+
import { OrderNoGenerator } from '../../utils'
|
|
5
|
+
import { ReleaseGood } from '../release-good/release-good'
|
|
6
|
+
import { Manifest, ManifestStatus } from './manifest'
|
|
7
|
+
import { ManifestPatch, NewManifest } from './manifest-type'
|
|
5
8
|
|
|
6
9
|
@Resolver(Manifest)
|
|
7
10
|
export class ManifestMutation {
|
|
8
11
|
@Directive('@transaction')
|
|
9
|
-
@Mutation(returns =>
|
|
10
|
-
async
|
|
11
|
-
const { domain,
|
|
12
|
-
|
|
13
|
-
return await tx.getRepository(Manifest).save({
|
|
14
|
-
...manifest,
|
|
15
|
-
domain,
|
|
16
|
-
creator: user,
|
|
17
|
-
updater: user
|
|
18
|
-
})
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@Directive('@transaction')
|
|
22
|
-
@Mutation(returns => Manifest, { description: 'To modify Manifest information' })
|
|
23
|
-
async updateManifest(
|
|
24
|
-
@Arg('id') id: string,
|
|
25
|
-
@Arg('patch') patch: ManifestPatch,
|
|
26
|
-
@Ctx() context: any
|
|
27
|
-
): Promise<Manifest> {
|
|
28
|
-
const { domain, user, tx } = context.state
|
|
29
|
-
|
|
30
|
-
const repository = tx.getRepository(Manifest)
|
|
31
|
-
const manifest = await repository.findOne({
|
|
32
|
-
where: { domain, id }
|
|
33
|
-
})
|
|
12
|
+
@Mutation(returns => Boolean, { description: 'To delete Manifest' })
|
|
13
|
+
async deleteManifest(@Arg('name') name: string, @Ctx() context: any): Promise<boolean> {
|
|
14
|
+
const { domain, tx } = context.state
|
|
34
15
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
...patch,
|
|
38
|
-
updater: user
|
|
39
|
-
})
|
|
16
|
+
await tx.getRepository(Manifest).delete({ domain, name })
|
|
17
|
+
return true
|
|
40
18
|
}
|
|
41
19
|
|
|
42
20
|
@Directive('@transaction')
|
|
43
|
-
@Mutation(returns =>
|
|
44
|
-
async
|
|
45
|
-
@Arg('patches', type => [ManifestPatch]) patches: ManifestPatch[],
|
|
46
|
-
@Ctx() context: any
|
|
47
|
-
): Promise<Manifest[]> {
|
|
21
|
+
@Mutation(returns => Boolean, { description: 'To generate new Manifest' })
|
|
22
|
+
async generateManifest(@Arg('manifest') manifest: NewManifest, @Ctx() context: any): Promise<boolean> {
|
|
48
23
|
const { domain, user, tx } = context.state
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
24
|
+
const manifestItems: any[] = manifest.manifestItems
|
|
25
|
+
|
|
26
|
+
// regroup array of object by transporter
|
|
27
|
+
let shippingProviderGrouping: any = manifestItems.reduce((a, b) => {
|
|
28
|
+
a[b.transporter] = [...(a[b.transporter] || []), b]
|
|
29
|
+
return a
|
|
30
|
+
}, {})
|
|
31
|
+
|
|
32
|
+
for (const transporter in shippingProviderGrouping) {
|
|
33
|
+
const items: any[] = shippingProviderGrouping[transporter]
|
|
34
|
+
|
|
35
|
+
const openManifest: Manifest = await tx
|
|
36
|
+
.getRepository(Manifest)
|
|
37
|
+
.findOne({ domain, shippingProvider: transporter, status: ManifestStatus.OPEN })
|
|
38
|
+
|
|
39
|
+
let manifest: Manifest
|
|
40
|
+
|
|
41
|
+
if (openManifest) {
|
|
42
|
+
manifest = openManifest
|
|
43
|
+
} else {
|
|
44
|
+
manifest = new Manifest()
|
|
45
|
+
manifest.domain = domain
|
|
46
|
+
manifest.shippingProvider = transporter
|
|
47
|
+
manifest.name = OrderNoGenerator.manifest()
|
|
48
|
+
manifest.creator = user
|
|
49
|
+
manifest = await tx.getRepository(Manifest).save(manifest)
|
|
67
50
|
}
|
|
68
|
-
}
|
|
69
51
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
updater: user
|
|
52
|
+
await Promise.all(
|
|
53
|
+
items.map(async item => {
|
|
54
|
+
let releaseOrder: ReleaseGood = await tx
|
|
55
|
+
.getRepository(ReleaseGood)
|
|
56
|
+
.findOne({ domain, refNo: item.refNo, trackingNo: item.trackingNo })
|
|
57
|
+
releaseOrder.manifest = manifest
|
|
58
|
+
releaseOrder.updater = user
|
|
59
|
+
await tx.getRepository(ReleaseGood).save(releaseOrder)
|
|
79
60
|
})
|
|
80
|
-
|
|
81
|
-
results.push({ ...result, cuFlag: 'M' })
|
|
82
|
-
}
|
|
61
|
+
)
|
|
83
62
|
}
|
|
84
63
|
|
|
85
|
-
return results
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
@Directive('@transaction')
|
|
89
|
-
@Mutation(returns => Boolean, { description: 'To delete Manifest' })
|
|
90
|
-
async deleteManifest(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
|
|
91
|
-
const { domain, tx } = context.state
|
|
92
|
-
|
|
93
|
-
await tx.getRepository(Manifest).delete({ domain, id })
|
|
94
64
|
return true
|
|
95
65
|
}
|
|
96
66
|
|
|
97
67
|
@Directive('@transaction')
|
|
98
|
-
@Mutation(returns =>
|
|
99
|
-
async
|
|
100
|
-
@Arg('
|
|
68
|
+
@Mutation(returns => Manifest, { description: 'To dispatch Manifest when courier service collect packages' })
|
|
69
|
+
async dispatchManifest(
|
|
70
|
+
@Arg('name') name: string,
|
|
71
|
+
@Arg('patch') patch: ManifestPatch,
|
|
101
72
|
@Ctx() context: any
|
|
102
|
-
): Promise<
|
|
103
|
-
const { domain, tx } = context.state
|
|
73
|
+
): Promise<Manifest> {
|
|
74
|
+
const { domain, user, tx } = context.state
|
|
104
75
|
|
|
105
|
-
await tx.getRepository(Manifest).
|
|
106
|
-
domain,
|
|
107
|
-
id: In(ids)
|
|
76
|
+
const manifest: Manifest = await tx.getRepository(Manifest).findOne({
|
|
77
|
+
where: { domain, name, status: ManifestStatus.OPEN }
|
|
108
78
|
})
|
|
79
|
+
if (!manifest) throw new Error(`Unable to find ${name}`)
|
|
109
80
|
|
|
110
|
-
|
|
81
|
+
let releaseGoods: any[] = await tx.getRepository(ReleaseGood).find({ where: { domain, manifest } })
|
|
82
|
+
|
|
83
|
+
releaseGoods = await Promise.all(
|
|
84
|
+
releaseGoods.map((releaseGood: ReleaseGood) => {
|
|
85
|
+
return {
|
|
86
|
+
...releaseGood,
|
|
87
|
+
dispatchmentStatus: DISPATCHMENT_STATUS.DISPATCHED,
|
|
88
|
+
updater: user
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
)
|
|
92
|
+
await tx.getRepository(ReleaseGood).save(releaseGoods)
|
|
93
|
+
|
|
94
|
+
return await tx.getRepository(Manifest).save({
|
|
95
|
+
...manifest,
|
|
96
|
+
...patch,
|
|
97
|
+
status: ManifestStatus.CLOSED,
|
|
98
|
+
dispatchedAt: new Date(),
|
|
99
|
+
updater: user
|
|
100
|
+
})
|
|
111
101
|
}
|
|
112
102
|
}
|
|
@@ -1,27 +1,83 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
2
|
import { getRepository } from 'typeorm'
|
|
3
|
-
|
|
3
|
+
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
|
5
|
+
import { convertListParams, Domain, ListParam } from '@things-factory/shell'
|
|
6
|
+
|
|
7
|
+
import { ReleaseGood } from '../release-good/release-good'
|
|
5
8
|
import { Manifest } from './manifest'
|
|
6
9
|
import { ManifestList } from './manifest-type'
|
|
7
10
|
|
|
8
11
|
@Resolver(Manifest)
|
|
9
12
|
export class ManifestQuery {
|
|
10
13
|
@Query(returns => Manifest, { description: 'To fetch a Manifest' })
|
|
11
|
-
async manifest(@Arg('
|
|
12
|
-
const { domain } = context.state
|
|
14
|
+
async manifest(@Arg('name') name: string, @Ctx() context: any): Promise<Manifest> {
|
|
15
|
+
const { domain, tx } = context.state
|
|
16
|
+
const manifest: Manifest = await tx.getRepository(Manifest).findOne({ where: { domain, name } })
|
|
13
17
|
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
const releaseGoods: ReleaseGood[] = await tx.getRepository(ReleaseGood).find({ where: { manifest } })
|
|
19
|
+
|
|
20
|
+
const trackingNos: any[] = releaseGoods.map(releaseGood => {
|
|
21
|
+
return {
|
|
22
|
+
trackingNo: releaseGood.trackingNo,
|
|
23
|
+
refNo: releaseGood.refNo,
|
|
24
|
+
deliveryAddress: releaseGood.deliveryAddress1,
|
|
25
|
+
attentionTo: releaseGood.attentionTo,
|
|
26
|
+
postalCode: releaseGood.postalCode,
|
|
27
|
+
city: releaseGood.city,
|
|
28
|
+
phone: releaseGood.phone1,
|
|
29
|
+
dispatchmentStatus: releaseGood.dispatchmentStatus
|
|
30
|
+
}
|
|
16
31
|
})
|
|
32
|
+
|
|
33
|
+
return {
|
|
34
|
+
...manifest,
|
|
35
|
+
trackingNos
|
|
36
|
+
}
|
|
17
37
|
}
|
|
18
38
|
|
|
19
39
|
@Query(returns => ManifestList, { description: 'To fetch multiple Manifests' })
|
|
20
40
|
async manifests(@Args() params: ListParam, @Ctx() context: any): Promise<ManifestList> {
|
|
21
41
|
const { domain } = context.state
|
|
22
42
|
|
|
23
|
-
const
|
|
24
|
-
|
|
43
|
+
const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
|
|
44
|
+
if (fromDateParamIdx >= 0) {
|
|
45
|
+
let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
|
|
46
|
+
params.filters.splice(fromDateParamIdx, 1)
|
|
47
|
+
|
|
48
|
+
params.filters.push({
|
|
49
|
+
name: 'createdAt',
|
|
50
|
+
operator: 'gte',
|
|
51
|
+
value: fromDateVal.toISOString(),
|
|
52
|
+
relation: false
|
|
53
|
+
})
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const toDateParamIdx = params.filters.findIndex(param => param.name === 'toDate')
|
|
57
|
+
if (toDateParamIdx >= 0) {
|
|
58
|
+
let toDateVal = new Date(params.filters[toDateParamIdx].value)
|
|
59
|
+
params.filters.splice(toDateParamIdx, 1)
|
|
60
|
+
|
|
61
|
+
params.filters.push({
|
|
62
|
+
name: 'createdAt',
|
|
63
|
+
operator: 'lt',
|
|
64
|
+
value: new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
|
|
65
|
+
relation: false
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
params.filters.push({
|
|
70
|
+
name: 'domain',
|
|
71
|
+
operator: 'eq',
|
|
72
|
+
value: domain.id,
|
|
73
|
+
relation: true
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const convertedParams = convertListParams(params)
|
|
77
|
+
const [items, total] = await getRepository(Manifest).findAndCount({
|
|
78
|
+
...convertedParams,
|
|
79
|
+
relations: ['domain', 'creator', 'updater']
|
|
80
|
+
})
|
|
25
81
|
|
|
26
82
|
return { items, total }
|
|
27
83
|
}
|
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Field, ID, InputType, Int, ObjectType } from 'type-graphql'
|
|
2
2
|
|
|
3
3
|
import { Manifest, ManifestStatus } from './manifest'
|
|
4
4
|
|
|
5
5
|
@InputType()
|
|
6
6
|
export class NewManifest {
|
|
7
|
-
@Field()
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
@Field({ nullable: true })
|
|
11
|
-
description?: string
|
|
12
|
-
|
|
13
|
-
@Field(type => ManifestStatus, { nullable: true })
|
|
14
|
-
state?: ManifestStatus
|
|
15
|
-
|
|
16
|
-
@Field({ nullable: true })
|
|
17
|
-
active?: boolean
|
|
18
|
-
|
|
19
|
-
@Field({ nullable: true })
|
|
20
|
-
params?: string
|
|
7
|
+
@Field(type => [ManifestItem])
|
|
8
|
+
manifestItems: ManifestItem[]
|
|
21
9
|
}
|
|
22
10
|
|
|
23
11
|
@InputType()
|
|
@@ -29,16 +17,28 @@ export class ManifestPatch {
|
|
|
29
17
|
name?: string
|
|
30
18
|
|
|
31
19
|
@Field({ nullable: true })
|
|
32
|
-
|
|
20
|
+
shippingProvider?: string
|
|
21
|
+
|
|
22
|
+
@Field({ nullable: true })
|
|
23
|
+
dispatcherName?: string
|
|
24
|
+
|
|
25
|
+
@Field({ nullable: true })
|
|
26
|
+
dispatcherIdentity?: string
|
|
33
27
|
|
|
34
28
|
@Field(type => ManifestStatus, { nullable: true })
|
|
35
|
-
|
|
29
|
+
status?: ManifestStatus
|
|
30
|
+
}
|
|
36
31
|
|
|
32
|
+
@InputType()
|
|
33
|
+
export class ManifestItem {
|
|
37
34
|
@Field({ nullable: true })
|
|
38
|
-
|
|
35
|
+
trackingNo?: string
|
|
39
36
|
|
|
40
|
-
@Field()
|
|
41
|
-
|
|
37
|
+
@Field({ nullable: true })
|
|
38
|
+
refNo?: string
|
|
39
|
+
|
|
40
|
+
@Field({ nullable: true })
|
|
41
|
+
transporter?: string
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
@ObjectType()
|
|
@@ -49,3 +49,30 @@ export class ManifestList {
|
|
|
49
49
|
@Field(type => Int)
|
|
50
50
|
total: number
|
|
51
51
|
}
|
|
52
|
+
|
|
53
|
+
@ObjectType()
|
|
54
|
+
export class TrackingNo {
|
|
55
|
+
@Field({ nullable: true })
|
|
56
|
+
trackingNo?: string
|
|
57
|
+
|
|
58
|
+
@Field({ nullable: true })
|
|
59
|
+
refNo?: string
|
|
60
|
+
|
|
61
|
+
@Field({ nullable: true })
|
|
62
|
+
dispatchmentStatus?: string
|
|
63
|
+
|
|
64
|
+
@Field({ nullable: true })
|
|
65
|
+
deliveryAddress?: string
|
|
66
|
+
|
|
67
|
+
@Field({ nullable: true })
|
|
68
|
+
attentionTo?: string
|
|
69
|
+
|
|
70
|
+
@Field({ nullable: true })
|
|
71
|
+
postalCode?: string
|
|
72
|
+
|
|
73
|
+
@Field({ nullable: true })
|
|
74
|
+
phone?: string
|
|
75
|
+
|
|
76
|
+
@Field({ nullable: true })
|
|
77
|
+
city?: string
|
|
78
|
+
}
|
|
@@ -14,6 +14,8 @@ import { User } from '@things-factory/auth-base'
|
|
|
14
14
|
import { config } from '@things-factory/env'
|
|
15
15
|
import { Domain } from '@things-factory/shell'
|
|
16
16
|
|
|
17
|
+
import { TrackingNo } from './manifest-type'
|
|
18
|
+
|
|
17
19
|
const ORMCONFIG = config.get('ormconfig', {})
|
|
18
20
|
const DATABASE_TYPE = ORMCONFIG.type
|
|
19
21
|
|
|
@@ -74,6 +76,9 @@ export class Manifest {
|
|
|
74
76
|
})
|
|
75
77
|
status: ManifestStatus
|
|
76
78
|
|
|
79
|
+
@Field(type => [TrackingNo], { nullable: true })
|
|
80
|
+
trackingNos?: TrackingNo[]
|
|
81
|
+
|
|
77
82
|
@CreateDateColumn()
|
|
78
83
|
@Field({ nullable: true })
|
|
79
84
|
createdAt?: Date
|