@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.
Files changed (55) hide show
  1. package/dist-server/service/index.js +39 -25
  2. package/dist-server/service/index.js.map +1 -1
  3. package/dist-server/service/manifest/manifest-mutation.js +13 -9
  4. package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
  5. package/dist-server/service/manifest/manifest-query.js +14 -24
  6. package/dist-server/service/manifest/manifest-query.js.map +1 -1
  7. package/dist-server/service/order-package/index.js +9 -0
  8. package/dist-server/service/order-package/index.js.map +1 -0
  9. package/dist-server/service/order-package/order-package-mutation.js +120 -0
  10. package/dist-server/service/order-package/order-package-mutation.js.map +1 -0
  11. package/dist-server/service/order-package/order-package-query.js +119 -0
  12. package/dist-server/service/order-package/order-package-query.js.map +1 -0
  13. package/dist-server/service/order-package/order-package-types.js +105 -0
  14. package/dist-server/service/order-package/order-package-types.js.map +1 -0
  15. package/dist-server/service/order-package/order-package.js +147 -0
  16. package/dist-server/service/order-package/order-package.js.map +1 -0
  17. package/dist-server/service/order-package-item/index.js +9 -0
  18. package/dist-server/service/order-package-item/index.js.map +1 -0
  19. package/dist-server/service/order-package-item/order-package-item-mutation.js +120 -0
  20. package/dist-server/service/order-package-item/order-package-item-mutation.js.map +1 -0
  21. package/dist-server/service/order-package-item/order-package-item-query.js +126 -0
  22. package/dist-server/service/order-package-item/order-package-item-query.js.map +1 -0
  23. package/dist-server/service/order-package-item/order-package-item-types.js +87 -0
  24. package/dist-server/service/order-package-item/order-package-item-types.js.map +1 -0
  25. package/dist-server/service/order-package-item/order-package-item.js +123 -0
  26. package/dist-server/service/order-package-item/order-package-item.js.map +1 -0
  27. package/dist-server/service/order-product/order-product.js +6 -0
  28. package/dist-server/service/order-product/order-product.js.map +1 -1
  29. package/dist-server/service/others/other-query.js +19 -17
  30. package/dist-server/service/others/other-query.js.map +1 -1
  31. package/dist-server/service/release-good/release-good-query.js +15 -4
  32. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  33. package/dist-server/service/release-good/release-good.js +10 -0
  34. package/dist-server/service/release-good/release-good.js.map +1 -1
  35. package/dist-server/utils/order-no-generator.js +7 -0
  36. package/dist-server/utils/order-no-generator.js.map +1 -1
  37. package/package.json +14 -14
  38. package/server/service/index.ts +41 -29
  39. package/server/service/manifest/manifest-mutation.ts +18 -9
  40. package/server/service/manifest/manifest-query.ts +22 -30
  41. package/server/service/order-package/index.ts +6 -0
  42. package/server/service/order-package/order-package-mutation.ts +113 -0
  43. package/server/service/order-package/order-package-query.ts +86 -0
  44. package/server/service/order-package/order-package-types.ts +66 -0
  45. package/server/service/order-package/order-package.ts +118 -0
  46. package/server/service/order-package-item/index.ts +6 -0
  47. package/server/service/order-package-item/order-package-item-mutation.ts +113 -0
  48. package/server/service/order-package-item/order-package-item-query.ts +89 -0
  49. package/server/service/order-package-item/order-package-item-types.ts +51 -0
  50. package/server/service/order-package-item/order-package-item.ts +102 -0
  51. package/server/service/order-product/order-product.ts +5 -0
  52. package/server/service/others/other-query.ts +25 -25
  53. package/server/service/release-good/release-good-query.ts +26 -10
  54. package/server/service/release-good/release-good.ts +9 -0
  55. 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 { convertListParams, Domain, ListParam, buildQuery, Sorting } from '@things-factory/shell'
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
- const releaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
43
- ...convertedParams,
44
- where: { manifest }
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[] = releaseGoods.map(releaseGood => {
36
+ const trackingNos: any[] = orderPackages.map(opk => {
37
+ const releaseGood: ReleaseGood = opk.releaseGood
48
38
  return {
49
- trackingNo: releaseGood.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('release_goods', 'rg', 'rg.manifest_id = mf.id')
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('rg.tracking_no ilike :trackingNo', { trackingNo: trackingNoFilter }) : ''
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(ReleaseGood).count({ where: { manifest: item.id } })
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
+ }