@things-factory/sales-base 4.3.769 → 4.3.771

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 (58) hide show
  1. package/dist-server/service/draft-release-good/draft-release-good-create.js +138 -139
  2. package/dist-server/service/draft-release-good/draft-release-good-create.js.map +1 -1
  3. package/dist-server/service/index.js +16 -2
  4. package/dist-server/service/index.js.map +1 -1
  5. package/dist-server/service/loading-package-items/index.js +9 -0
  6. package/dist-server/service/loading-package-items/index.js.map +1 -0
  7. package/dist-server/service/loading-package-items/loading-package-items-mutation.js +120 -0
  8. package/dist-server/service/loading-package-items/loading-package-items-mutation.js.map +1 -0
  9. package/dist-server/service/loading-package-items/loading-package-items-query.js +87 -0
  10. package/dist-server/service/loading-package-items/loading-package-items-query.js.map +1 -0
  11. package/dist-server/service/loading-package-items/loading-package-items-type.js +77 -0
  12. package/dist-server/service/loading-package-items/loading-package-items-type.js.map +1 -0
  13. package/dist-server/service/loading-package-items/loading-package-items.js +173 -0
  14. package/dist-server/service/loading-package-items/loading-package-items.js.map +1 -0
  15. package/dist-server/service/loading-packages/index.js +9 -0
  16. package/dist-server/service/loading-packages/index.js.map +1 -0
  17. package/dist-server/service/loading-packages/loading-packages-mutation.js +151 -0
  18. package/dist-server/service/loading-packages/loading-packages-mutation.js.map +1 -0
  19. package/dist-server/service/loading-packages/loading-packages-query.js +316 -0
  20. package/dist-server/service/loading-packages/loading-packages-query.js.map +1 -0
  21. package/dist-server/service/loading-packages/loading-packages-type.js +77 -0
  22. package/dist-server/service/loading-packages/loading-packages-type.js.map +1 -0
  23. package/dist-server/service/loading-packages/loading-packages.js +138 -0
  24. package/dist-server/service/loading-packages/loading-packages.js.map +1 -0
  25. package/dist-server/service/order-inventory/order-inventory.js +1 -0
  26. package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
  27. package/dist-server/service/release-good/release-good-mutation.js +48 -15
  28. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  29. package/dist-server/service/release-good/release-good-query.js +61 -3
  30. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  31. package/dist-server/service/release-good/release-good-types.js +15 -1
  32. package/dist-server/service/release-good/release-good-types.js.map +1 -1
  33. package/dist-server/service/release-good/release-good.js +4 -0
  34. package/dist-server/service/release-good/release-good.js.map +1 -1
  35. package/dist-server/utils/inventory-util.js +6 -2
  36. package/dist-server/utils/inventory-util.js.map +1 -1
  37. package/dist-server/utils/order-no-generator.js +8 -0
  38. package/dist-server/utils/order-no-generator.js.map +1 -1
  39. package/package.json +8 -8
  40. package/server/service/draft-release-good/draft-release-good-create.ts +201 -206
  41. package/server/service/index.ts +16 -2
  42. package/server/service/loading-package-items/index.ts +6 -0
  43. package/server/service/loading-package-items/loading-package-items-mutation.ts +112 -0
  44. package/server/service/loading-package-items/loading-package-items-query.ts +43 -0
  45. package/server/service/loading-package-items/loading-package-items-type.ts +45 -0
  46. package/server/service/loading-package-items/loading-package-items.ts +140 -0
  47. package/server/service/loading-packages/index.ts +6 -0
  48. package/server/service/loading-packages/loading-packages-mutation.ts +150 -0
  49. package/server/service/loading-packages/loading-packages-query.ts +272 -0
  50. package/server/service/loading-packages/loading-packages-type.ts +45 -0
  51. package/server/service/loading-packages/loading-packages.ts +110 -0
  52. package/server/service/order-inventory/order-inventory.ts +1 -0
  53. package/server/service/release-good/release-good-mutation.ts +49 -21
  54. package/server/service/release-good/release-good-query.ts +103 -36
  55. package/server/service/release-good/release-good-types.ts +9 -0
  56. package/server/service/release-good/release-good.ts +5 -1
  57. package/server/utils/inventory-util.ts +7 -2
  58. package/server/utils/order-no-generator.ts +12 -0
@@ -49,6 +49,8 @@ import { entities as ShippingOrderEntity, resolvers as ShippingOrderResolvers }
49
49
  import { entities as TransferOrderEntity, resolvers as TransferOrderResolvers } from './transfer-order'
50
50
  import { entities as VasEntity, resolvers as VasResolvers } from './vas'
51
51
  import { entities as VasOrderEntity, resolvers as VasOrderResolvers } from './vas-order'
52
+ import { entities as LoadingPackagesEntities, resolvers as LoadingPackagesResolvers } from './loading-packages'
53
+ import { entities as LoadingPackageItemsEntities, resolvers as LoadingPackageItemsResolvers } from './loading-package-items'
52
54
 
53
55
  /* EXPORT ENTITY TYPES */
54
56
  export * from './order-consignment/order-consignment'
@@ -89,6 +91,8 @@ export * from './shipping-order/shipping-order'
89
91
  export * from './transfer-order/transfer-order'
90
92
  export * from './vas-order/vas-order'
91
93
  export * from './vas/vas'
94
+ export * from './loading-packages/loading-packages'
95
+ export * from './loading-package-items/loading-package-items'
92
96
 
93
97
  /* EXPORT TYPES */
94
98
  export * from './arrival-notice/arrival-notice-types'
@@ -123,6 +127,8 @@ export * from './transfer-order/transfer-order-types'
123
127
  export * from './vas-order/vas-order-types'
124
128
  export * from './vas/vas-types'
125
129
  export * from './order-vas-item/order-vas-item-type'
130
+ export * from './loading-packages/loading-packages-type'
131
+ export * from './loading-package-items/loading-package-items-type'
126
132
 
127
133
  /* EXPORT MUTATIONS */
128
134
  export * from './arrival-notice/arrival-notice-mutation'
@@ -156,6 +162,8 @@ export * from './transfer-order/transfer-order-mutation'
156
162
  export * from './vas-order/vas-order-mutation'
157
163
  export * from './vas/vas-mutation'
158
164
  export * from './release-good-logs/release-good-logs-mutation'
165
+ export * from './loading-packages/loading-packages-mutation'
166
+ export * from './loading-package-items/loading-package-items-mutation'
159
167
 
160
168
  /* EXPORT QUERIES */
161
169
  export * from './arrival-notice/arrival-notice-query'
@@ -189,6 +197,8 @@ export * from './shipping-order/shipping-order-query'
189
197
  export * from './transfer-order/transfer-order-query'
190
198
  export * from './vas-order/vas-order-query'
191
199
  export * from './vas/vas-query'
200
+ export * from './loading-packages/loading-packages-query'
201
+ export * from './loading-package-items/loading-package-items-query'
192
202
 
193
203
  export const entities = [
194
204
  /* ENTITIES */
@@ -229,7 +239,9 @@ export const entities = [
229
239
  ...ShippingOrderEntity,
230
240
  ...TransferOrderEntity,
231
241
  ...VasEntity,
232
- ...VasOrderEntity
242
+ ...VasOrderEntity,
243
+ ...LoadingPackagesEntities,
244
+ ...LoadingPackageItemsEntities,
233
245
  ]
234
246
 
235
247
  export const schema = {
@@ -273,7 +285,9 @@ export const schema = {
273
285
  ...ShippingOrderResolvers,
274
286
  ...TransferOrderResolvers,
275
287
  ...VasResolvers,
276
- ...VasOrderResolvers
288
+ ...VasOrderResolvers,
289
+ ...LoadingPackagesResolvers,
290
+ ...LoadingPackageItemsResolvers,
277
291
  ]
278
292
  }
279
293
 
@@ -0,0 +1,6 @@
1
+ import { LoadingPackageItems } from './loading-package-items'
2
+ import { LoadingPackageItemsQuery } from './loading-package-items-query'
3
+ import { LoadingPackageItemsMutation } from './loading-package-items-mutation'
4
+
5
+ export const entities = [LoadingPackageItems]
6
+ export const resolvers = [LoadingPackageItemsQuery, LoadingPackageItemsMutation]
@@ -0,0 +1,112 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { getRepository, In } from 'typeorm'
3
+ import { LoadingPackageItems } from './loading-package-items'
4
+ import { NewLoadingPackageItems, LoadingPackageItemsPatch } from './loading-package-items-type'
5
+
6
+ @Resolver(LoadingPackageItems)
7
+ export class LoadingPackageItemsMutation {
8
+ @Directive('@transaction')
9
+ @Mutation(returns => LoadingPackageItems, { description: 'To create new LoadingPackageItems' })
10
+ async createLoadingPackageItems(@Arg('loadingPackageItems') loadingPackageItems: NewLoadingPackageItems, @Ctx() context: any): Promise<LoadingPackageItems> {
11
+ const { domain, user, tx } = context.state
12
+
13
+ return await tx.getRepository(LoadingPackageItems).save({
14
+ ...loadingPackageItems,
15
+ domain,
16
+ creator: user,
17
+ updater: user
18
+ })
19
+ }
20
+
21
+ @Directive('@transaction')
22
+ @Mutation(returns => LoadingPackageItems, { description: 'To modify LoadingPackageItems information' })
23
+ async updateLoadingPackageItems(
24
+ @Arg('id') id: string,
25
+ @Arg('patch') patch: LoadingPackageItemsPatch,
26
+ @Ctx() context: any
27
+ ): Promise<LoadingPackageItems> {
28
+ const { domain, user, tx } = context.state
29
+
30
+ const repository = tx.getRepository(LoadingPackageItems)
31
+ const loadingPackageItems = await repository.findOne({
32
+ where: { domain, id }
33
+ })
34
+
35
+ return await repository.save({
36
+ ...loadingPackageItems,
37
+ ...patch,
38
+ updater: user
39
+ })
40
+ }
41
+
42
+ @Directive('@transaction')
43
+ @Mutation(returns => [LoadingPackageItems], { description: "To modify multiple LoadingPackageItems' information" })
44
+ async updateMultipleLoadingPackageItems(
45
+ @Arg('patches', type => [LoadingPackageItemsPatch]) patches: LoadingPackageItemsPatch[],
46
+ @Ctx() context: any
47
+ ): Promise<LoadingPackageItems[]> {
48
+ const { domain, user, tx } = context.state
49
+
50
+ let results = []
51
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
52
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
53
+ const loadingPackageItemsRepo = tx.getRepository(LoadingPackageItems)
54
+
55
+ if (_createRecords.length > 0) {
56
+ for (let i = 0; i < _createRecords.length; i++) {
57
+ const newRecord = _createRecords[i]
58
+
59
+ const result = await loadingPackageItemsRepo.save({
60
+ ...newRecord,
61
+ domain,
62
+ creator: user,
63
+ updater: user
64
+ })
65
+
66
+ results.push({ ...result, cuFlag: '+' })
67
+ }
68
+ }
69
+
70
+ if (_updateRecords.length > 0) {
71
+ for (let i = 0; i < _updateRecords.length; i++) {
72
+ const newRecord = _updateRecords[i]
73
+ const loadingPackageItems = await loadingPackageItemsRepo.findOne(newRecord.id)
74
+
75
+ const result = await loadingPackageItemsRepo.save({
76
+ ...loadingPackageItems,
77
+ ...newRecord,
78
+ updater: user
79
+ })
80
+
81
+ results.push({ ...result, cuFlag: 'M' })
82
+ }
83
+ }
84
+
85
+ return results
86
+ }
87
+
88
+ @Directive('@transaction')
89
+ @Mutation(returns => Boolean, { description: 'To delete LoadingPackageItems' })
90
+ async deleteLoadingPackageItems(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
91
+ const { domain, tx } = context.state
92
+
93
+ await tx.getRepository(LoadingPackageItems).delete({ domain, id })
94
+ return true
95
+ }
96
+
97
+ @Directive('@transaction')
98
+ @Mutation(returns => Boolean, { description: 'To delete multiple loadingPackageItemss' })
99
+ async deleteMultipleLoadingPackageItems(
100
+ @Arg('ids', type => [String]) ids: string[],
101
+ @Ctx() context: any
102
+ ): Promise<boolean> {
103
+ const { domain, tx } = context.state
104
+
105
+ await tx.getRepository(LoadingPackageItems).delete({
106
+ domain,
107
+ id: In(ids)
108
+ })
109
+
110
+ return true
111
+ }
112
+ }
@@ -0,0 +1,43 @@
1
+ import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { getRepository } from 'typeorm'
3
+ import { Domain, ListParam, convertListParams } from '@things-factory/shell'
4
+ import { User } from '@things-factory/auth-base'
5
+ import { LoadingPackageItems } from './loading-package-items'
6
+ import { LoadingPackageItemsList } from './loading-package-items-type'
7
+
8
+ @Resolver(LoadingPackageItems)
9
+ export class LoadingPackageItemsQuery {
10
+ @Query(returns => LoadingPackageItems, { description: 'To fetch a LoadingPackageItems' })
11
+ async loadingPackageItem(@Arg('id') id: string, @Ctx() context: any): Promise<LoadingPackageItems> {
12
+ const { domain } = context.state
13
+
14
+ return await getRepository(LoadingPackageItems).findOne({
15
+ where: { domain, id }
16
+ })
17
+ }
18
+
19
+ @Query(returns => LoadingPackageItemsList, { description: 'To fetch multiple LoadingPackageItems' })
20
+ async loadingPackageItems(@Args() params: ListParam, @Ctx() context: any): Promise<LoadingPackageItemsList> {
21
+ const { domain } = context.state
22
+
23
+ const convertedParams = convertListParams(params, domain.id)
24
+ const [items, total] = await getRepository(LoadingPackageItems).findAndCount(convertedParams)
25
+
26
+ return { items, total }
27
+ }
28
+
29
+ @FieldResolver(type => Domain)
30
+ async domain(@Root() loadingPackageItems: LoadingPackageItems): Promise<Domain> {
31
+ return await getRepository(Domain).findOne(loadingPackageItems.domainId)
32
+ }
33
+
34
+ @FieldResolver(type => User)
35
+ async updater(@Root() loadingPackageItems: LoadingPackageItems): Promise<User> {
36
+ return await getRepository(User).findOne(loadingPackageItems.updaterId)
37
+ }
38
+
39
+ @FieldResolver(type => User)
40
+ async creator(@Root() loadingPackageItems: LoadingPackageItems): Promise<User> {
41
+ return await getRepository(User).findOne(loadingPackageItems.creatorId)
42
+ }
43
+ }
@@ -0,0 +1,45 @@
1
+ import { ObjectType, Field, InputType, Int, ID, registerEnumType } from 'type-graphql'
2
+
3
+ import { LoadingPackageItems } from './loading-package-items'
4
+
5
+ @InputType()
6
+ export class NewLoadingPackageItems {
7
+ @Field()
8
+ name: string
9
+
10
+ @Field({ nullable: true })
11
+ description?: string
12
+
13
+ @Field({ nullable: true })
14
+ active?: boolean
15
+
16
+ @Field({ nullable: true })
17
+ params?: string
18
+ }
19
+
20
+ @InputType()
21
+ export class LoadingPackageItemsPatch {
22
+ @Field(type => ID, { nullable: true })
23
+ id?: string
24
+
25
+ @Field({ nullable: true })
26
+ name?: string
27
+
28
+ @Field({ nullable: true })
29
+ description?: string
30
+
31
+ @Field({ nullable: true })
32
+ active?: boolean
33
+
34
+ @Field()
35
+ cuFlag: string
36
+ }
37
+
38
+ @ObjectType()
39
+ export class LoadingPackageItemsList {
40
+ @Field(type => [LoadingPackageItems])
41
+ items: LoadingPackageItems[]
42
+
43
+ @Field(type => Int)
44
+ total: number
45
+ }
@@ -0,0 +1,140 @@
1
+ import {
2
+ CreateDateColumn,
3
+ UpdateDateColumn,
4
+ Entity,
5
+ Index,
6
+ Column,
7
+ RelationId,
8
+ ManyToOne,
9
+ PrimaryGeneratedColumn
10
+ } from 'typeorm'
11
+ import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
12
+
13
+ import { Domain } from '@things-factory/shell'
14
+ import { User } from '@things-factory/auth-base'
15
+ import { Bizplace } from '@things-factory/biz-base'
16
+ import { LoadingPackages, OrderProduct, OrderInventory } from '../'
17
+ import { ProductDetail } from '@things-factory/product-base'
18
+
19
+ @Entity()
20
+ @Index('ix_loading_package_items_0', (loadingPackageItems: LoadingPackageItems) => [loadingPackageItems.domain, loadingPackageItems.name], { unique: true })
21
+ @ObjectType({ description: 'Entity for LoadingPackageItems' })
22
+ export class LoadingPackageItems {
23
+ @PrimaryGeneratedColumn('uuid')
24
+ @Field(type => ID)
25
+ readonly id: string
26
+
27
+ @ManyToOne(type => Domain)
28
+ @Field({ nullable: true })
29
+ domain?: Domain
30
+
31
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.domain)
32
+ domainId?: string
33
+
34
+ @Column()
35
+ @Field()
36
+ name: string
37
+
38
+ @ManyToOne(type => Bizplace)
39
+ @Field(type => Bizplace, { nullable: true })
40
+ bizplace?: Bizplace
41
+
42
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.bizplace)
43
+ bizplaceId?: string
44
+
45
+ @ManyToOne(type => LoadingPackages)
46
+ @Field(type => LoadingPackages)
47
+ loadingPackage?: LoadingPackages
48
+
49
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.loadingPackage)
50
+ loadingPackageId?: string
51
+
52
+ @ManyToOne(type => OrderProduct)
53
+ @Field(type => OrderProduct, { nullable: true })
54
+ orderProduct?: OrderProduct
55
+
56
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.orderProduct)
57
+ orderProductId?: string
58
+
59
+ @Column({
60
+ nullable: true
61
+ })
62
+ @Field({ nullable: true })
63
+ status?: string
64
+
65
+ @Column({
66
+ type: 'decimal',
67
+ scale: 3,
68
+ nullable: true,
69
+ transformer: {
70
+ to: (value: string | null) => value,
71
+ from: (value: string | null) => {
72
+ if (value === null || value === undefined) return null
73
+ const parsed = parseFloat(value)
74
+ return isNaN(parsed) ? null : parsed
75
+ }
76
+ }
77
+ })
78
+ @Field({ nullable: true })
79
+ releaseQty: number
80
+
81
+ @Column({
82
+ type: 'decimal',
83
+ scale: 3,
84
+ nullable: true,
85
+ transformer: {
86
+ to: (value: string | null) => value,
87
+ from: (value: string | null) => {
88
+ if (value === null || value === undefined) return null
89
+ const parsed = parseFloat(value)
90
+ return isNaN(parsed) ? null : parsed
91
+ }
92
+ }
93
+ })
94
+ @Field({ nullable: true })
95
+ packedQty: number
96
+
97
+ @ManyToOne(type => ProductDetail, { nullable: true })
98
+ @Field(type => ProductDetail, { nullable: true })
99
+ productDetail: ProductDetail
100
+
101
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.productDetail)
102
+ productDetailId?: string
103
+
104
+ @CreateDateColumn()
105
+ @Field({ nullable: true })
106
+ createdAt?: Date
107
+
108
+ @UpdateDateColumn()
109
+ @Field({ nullable: true })
110
+ updatedAt?: Date
111
+
112
+ @ManyToOne(type => User, {
113
+ nullable: true
114
+ })
115
+ @Field({ nullable: true })
116
+ creator?: User
117
+
118
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.creator)
119
+ creatorId?: string
120
+
121
+ @ManyToOne(type => User, {
122
+ nullable: true
123
+ })
124
+ @Field({ nullable: true })
125
+ updater?: User
126
+
127
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.updater)
128
+ updaterId?: string
129
+
130
+ @Column({ nullable: true })
131
+ @Field({ nullable: true })
132
+ deletedAt?: Date
133
+
134
+ @ManyToOne(type => User, { nullable: true })
135
+ @Field({ nullable: true })
136
+ deletedBy?: User
137
+
138
+ @RelationId((loadingPackageItems: LoadingPackageItems) => loadingPackageItems.deletedBy)
139
+ deletedById?: string
140
+ }
@@ -0,0 +1,6 @@
1
+ import { LoadingPackages } from './loading-packages'
2
+ import { LoadingPackagesQuery } from './loading-packages-query'
3
+ import { LoadingPackagesMutation } from './loading-packages-mutation'
4
+
5
+ export const entities = [LoadingPackages]
6
+ export const resolvers = [LoadingPackagesQuery, LoadingPackagesMutation]
@@ -0,0 +1,150 @@
1
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
2
+ import { getRepository, In, IsNull } from 'typeorm'
3
+ import { LoadingPackages } from './loading-packages'
4
+ import { LoadingPackageItems } from '../loading-package-items/loading-package-items'
5
+ import { NewLoadingPackages, LoadingPackagesPatch } from './loading-packages-type'
6
+
7
+ @Resolver(LoadingPackages)
8
+ export class LoadingPackagesMutation {
9
+ @Directive('@transaction')
10
+ @Mutation(returns => LoadingPackages, { description: 'To create new LoadingPackages' })
11
+ async createLoadingPackages(@Arg('loadingPackages') loadingPackages: NewLoadingPackages, @Ctx() context: any): Promise<LoadingPackages> {
12
+ const { domain, user, tx } = context.state
13
+
14
+ return await tx.getRepository(LoadingPackages).save({
15
+ ...loadingPackages,
16
+ domain,
17
+ creator: user,
18
+ updater: user
19
+ })
20
+ }
21
+
22
+ @Directive('@transaction')
23
+ @Mutation(returns => LoadingPackages, { description: 'To modify LoadingPackages information' })
24
+ async updateLoadingPackages(
25
+ @Arg('id') id: string,
26
+ @Arg('patch') patch: LoadingPackagesPatch,
27
+ @Ctx() context: any
28
+ ): Promise<LoadingPackages> {
29
+ const { domain, user, tx } = context.state
30
+
31
+ const repository = tx.getRepository(LoadingPackages)
32
+ const loadingPackages = await repository.findOne({
33
+ where: { domain, id }
34
+ })
35
+
36
+ return await repository.save({
37
+ ...loadingPackages,
38
+ ...patch,
39
+ updater: user
40
+ })
41
+ }
42
+
43
+ @Directive('@transaction')
44
+ @Mutation(returns => [LoadingPackages], { description: "To modify multiple LoadingPackages' information" })
45
+ async updateMultipleLoadingPackages(
46
+ @Arg('patches', type => [LoadingPackagesPatch]) patches: LoadingPackagesPatch[],
47
+ @Ctx() context: any
48
+ ): Promise<LoadingPackages[]> {
49
+ const { domain, user, tx } = context.state
50
+
51
+ let results = []
52
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
53
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
54
+ const loadingPackagesRepo = tx.getRepository(LoadingPackages)
55
+
56
+ if (_createRecords.length > 0) {
57
+ for (let i = 0; i < _createRecords.length; i++) {
58
+ const newRecord = _createRecords[i]
59
+
60
+ const result = await loadingPackagesRepo.save({
61
+ ...newRecord,
62
+ domain,
63
+ creator: user,
64
+ updater: user
65
+ })
66
+
67
+ results.push({ ...result, cuFlag: '+' })
68
+ }
69
+ }
70
+
71
+ if (_updateRecords.length > 0) {
72
+ for (let i = 0; i < _updateRecords.length; i++) {
73
+ const newRecord = _updateRecords[i]
74
+ const loadingPackages = await loadingPackagesRepo.findOne(newRecord.id)
75
+
76
+ const result = await loadingPackagesRepo.save({
77
+ ...loadingPackages,
78
+ ...newRecord,
79
+ updater: user
80
+ })
81
+
82
+ results.push({ ...result, cuFlag: 'M' })
83
+ }
84
+ }
85
+
86
+ return results
87
+ }
88
+
89
+ @Directive('@transaction')
90
+ @Mutation(returns => Boolean, { description: 'To delete LoadingPackages' })
91
+ async deleteLoadingPackages(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
92
+ const { domain, tx } = context.state
93
+
94
+ await tx.getRepository(LoadingPackages).delete({ domain, id })
95
+ return true
96
+ }
97
+
98
+ @Directive('@transaction')
99
+ @Mutation(returns => Boolean, { description: 'To undo (soft delete) LoadingPackages' })
100
+ async undoLoadingPackages(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
101
+ const { domain, user, tx } = context.state
102
+
103
+ // Find the loading package with its items
104
+ const loadingPackage = await tx.getRepository(LoadingPackages).findOne({
105
+ where: { domain, id },
106
+ relations: ['loadingPackageItems']
107
+ })
108
+
109
+ if (!loadingPackage) {
110
+ throw new Error('Loading package not found')
111
+ }
112
+
113
+ // Use same timestamp for both package and items
114
+ const deletedAt = new Date()
115
+
116
+ // Soft delete the loading package
117
+ await tx.getRepository(LoadingPackages).save({
118
+ ...loadingPackage,
119
+ deletedAt,
120
+ deletedBy: user
121
+ })
122
+
123
+ // Soft delete all related loading package items in a single query
124
+ if (loadingPackage.loadingPackageItems && loadingPackage.loadingPackageItems.length > 0) {
125
+ const itemIds = loadingPackage.loadingPackageItems.map(item => item.id)
126
+ await tx.getRepository(LoadingPackageItems).update(
127
+ { id: In(itemIds) },
128
+ { deletedAt, deletedBy: user }
129
+ )
130
+ }
131
+
132
+ return true
133
+ }
134
+
135
+ @Directive('@transaction')
136
+ @Mutation(returns => Boolean, { description: 'To delete multiple loadingPackagess' })
137
+ async deleteMultipleLoadingPackages(
138
+ @Arg('ids', type => [String]) ids: string[],
139
+ @Ctx() context: any
140
+ ): Promise<boolean> {
141
+ const { domain, tx } = context.state
142
+
143
+ await tx.getRepository(LoadingPackages).delete({
144
+ domain,
145
+ id: In(ids)
146
+ })
147
+
148
+ return true
149
+ }
150
+ }