@things-factory/sales-base 4.3.513 → 4.3.514

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 (25) hide show
  1. package/dist-server/constants/order.js +5 -1
  2. package/dist-server/constants/order.js.map +1 -1
  3. package/dist-server/service/order-vas/order-vas-types.js +72 -8
  4. package/dist-server/service/order-vas/order-vas-types.js.map +1 -1
  5. package/dist-server/service/order-vas/order-vas.js +102 -7
  6. package/dist-server/service/order-vas/order-vas.js.map +1 -1
  7. package/dist-server/service/order-vas-item/order-vas-item-type.js +13 -1
  8. package/dist-server/service/order-vas-item/order-vas-item-type.js.map +1 -1
  9. package/dist-server/service/order-vas-item/order-vas-item.js +20 -5
  10. package/dist-server/service/order-vas-item/order-vas-item.js.map +1 -1
  11. package/dist-server/service/release-good/release-good-mutation.js +4 -2
  12. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  13. package/dist-server/service/release-good/release-good-query.js +41 -0
  14. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  15. package/dist-server/service/vas/vas-mutation.js +333 -25
  16. package/dist-server/service/vas/vas-mutation.js.map +1 -1
  17. package/package.json +3 -3
  18. package/server/constants/order.ts +5 -1
  19. package/server/service/order-vas/order-vas-types.ts +48 -0
  20. package/server/service/order-vas/order-vas.ts +72 -0
  21. package/server/service/order-vas-item/order-vas-item-type.ts +12 -2
  22. package/server/service/order-vas-item/order-vas-item.ts +27 -13
  23. package/server/service/release-good/release-good-mutation.ts +6 -2
  24. package/server/service/release-good/release-good-query.ts +99 -9
  25. package/server/service/vas/vas-mutation.ts +399 -36
@@ -60,6 +60,10 @@ export class OrderVas {
60
60
  @Field({ nullable: true })
61
61
  batchId: string
62
62
 
63
+ @Column({ nullable: true })
64
+ @Field({ nullable: true })
65
+ adjustedBatchId: String
66
+
63
67
  // not used for restrructure VAS anymore
64
68
  @Column({ nullable: true })
65
69
  @Field({ nullable: true })
@@ -89,6 +93,20 @@ export class OrderVas {
89
93
  @RelationId((orderVas: OrderVas) => orderVas.product)
90
94
  productId: string
91
95
 
96
+ @ManyToOne(type => Product)
97
+ @Field(type => Product, { nullable: true })
98
+ adjustedProduct: Product
99
+
100
+ @RelationId((orderVas: OrderVas) => orderVas.adjustedProduct)
101
+ adjustedProductId: string
102
+
103
+ @ManyToOne(type => ProductDetail)
104
+ @Field({ nullable: true })
105
+ adjustedProductDetail: ProductDetail
106
+
107
+ @RelationId((orderVas: OrderVas) => orderVas.adjustedProduct)
108
+ adjustedProductDetailId: string
109
+
92
110
  // moved to order vas item
93
111
  // used to be productDetail
94
112
  @ManyToOne(type => ProductDetail, { nullable: true })
@@ -99,6 +117,10 @@ export class OrderVas {
99
117
  @Field({ nullable: true })
100
118
  outputQty: number
101
119
 
120
+ @Column({ nullable: true })
121
+ @Field({ nullable: true })
122
+ adjustedOutputQty: number
123
+
102
124
  @ManyToOne(type => OrderInventory)
103
125
  @Field(type => OrderInventory, { nullable: true })
104
126
  orderInventory: OrderInventory
@@ -120,6 +142,20 @@ export class OrderVas {
120
142
  @RelationId((orderVas: OrderVas) => orderVas.newProductDetail)
121
143
  newProductDetailId: string
122
144
 
145
+ @ManyToOne(type => Product)
146
+ @Field(type => Product, { nullable: true })
147
+ adjustedNewProduct: Product
148
+
149
+ @RelationId((orderVas: OrderVas) => orderVas.adjustedNewProduct)
150
+ adjustedNewProductId: string
151
+
152
+ @ManyToOne(type => ProductDetail, { nullable: true })
153
+ @Field({ nullable: true })
154
+ adjustedNewProductDetail: ProductDetail
155
+
156
+ @RelationId((orderVas: OrderVas) => orderVas.adjustedNewProductDetail)
157
+ adjustedNewProductDetailId: string
158
+
123
159
  // not used for restrructure VAS anymore
124
160
  @Column({ nullable: true })
125
161
  @Field({ nullable: true })
@@ -129,6 +165,10 @@ export class OrderVas {
129
165
  @Field({ nullable: true })
130
166
  qty: number
131
167
 
168
+ @Column({ nullable: true })
169
+ @Field({ nullable: true })
170
+ adjustedQty?: number
171
+
132
172
  // not used for restrructure VAS anymore
133
173
  @Column({ nullable: true })
134
174
  @Field({ nullable: true })
@@ -143,6 +183,14 @@ export class OrderVas {
143
183
  @Field({ nullable: true })
144
184
  uomValue: number
145
185
 
186
+ @Column({ nullable: true })
187
+ @Field({ nullable: true })
188
+ adjustedUom: String
189
+
190
+ @Column('float', { nullable: true })
191
+ @Field({ nullable: true })
192
+ adjustedUomValue: Number
193
+
146
194
  // not used for restrructure VAS anymore
147
195
  @Column('float', { nullable: true })
148
196
  @Field({ nullable: true })
@@ -157,6 +205,10 @@ export class OrderVas {
157
205
  @Field({ nullable: true })
158
206
  packingType: string
159
207
 
208
+ @Column({ nullable: true })
209
+ @Field({ nullable: true })
210
+ adjustedPackingType: String
211
+
160
212
  @ManyToOne(type => ArrivalNotice)
161
213
  @Field(type => ArrivalNotice, { nullable: true })
162
214
  arrivalNotice: ArrivalNotice
@@ -256,18 +308,34 @@ export class OrderVas {
256
308
  @Field({ nullable: true })
257
309
  newBatchId: string
258
310
 
311
+ @Column({ nullable: true })
312
+ @Field({ nullable: true })
313
+ adjustedNewBatchId: string
314
+
259
315
  @Column({ nullable: true })
260
316
  @Field({ nullable: true })
261
317
  newPackingType: string
262
318
 
319
+ @Column({ nullable: true })
320
+ @Field({ nullable: true })
321
+ adjustedNewPackingType: string
322
+
263
323
  @Column({ nullable: true })
264
324
  @Field({ nullable: true })
265
325
  newUom: string
266
326
 
327
+ @Column({ nullable: true })
328
+ @Field({ nullable: true })
329
+ adjustedNewUom: string
330
+
267
331
  @Column('float', { nullable: true })
268
332
  @Field({ nullable: true })
269
333
  newUomValue: number
270
334
 
335
+ @Column('float', { nullable: true })
336
+ @Field({ nullable: true })
337
+ adjustedNewUomValue: number
338
+
271
339
  @OneToMany(type => OrderVasItem, orderVasItem => orderVasItem.orderVas)
272
340
  @Field(type => [OrderVasItem])
273
341
  orderVasItems: OrderVasItem[]
@@ -313,4 +381,8 @@ export class OrderVas {
313
381
 
314
382
  @Field({ nullable: true })
315
383
  vasRemark?: string
384
+
385
+ @Column({ nullable: true})
386
+ @Field({ nullable: true })
387
+ editType?: string
316
388
  }
@@ -63,8 +63,18 @@ export class OrderVasItemPatch {
63
63
  @Field({ nullable: true })
64
64
  vasRemark?: string
65
65
 
66
- @Field()
67
- cuFlag: string
66
+ @Field({ nullable: true })
67
+ cuFlag?: string
68
+
69
+ @Field({ nullable: true })
70
+ adjustedVasRemark?: string
71
+
72
+ @Field({ nullable: true })
73
+ adjustedVasQty?: number
74
+
75
+ @Field({ nullable: true })
76
+ itemEditType?: string
77
+
68
78
  }
69
79
 
70
80
  @ObjectType()
@@ -1,29 +1,31 @@
1
1
  import {
2
+ Field,
3
+ ID,
4
+ ObjectType,
5
+ registerEnumType
6
+ } from 'type-graphql'
7
+ import {
8
+ Column,
2
9
  CreateDateColumn,
3
- UpdateDateColumn,
4
10
  Entity,
5
11
  Index,
6
- Column,
7
- RelationId,
8
12
  ManyToOne,
9
- PrimaryGeneratedColumn
13
+ PrimaryGeneratedColumn,
14
+ RelationId,
15
+ UpdateDateColumn
10
16
  } from 'typeorm'
11
- import { ObjectType, Field, Int, ID, registerEnumType } from 'type-graphql'
12
17
 
13
- import { Domain } from '@things-factory/shell'
14
18
  import { User } from '@things-factory/auth-base'
19
+ import { Domain } from '@things-factory/shell'
20
+
21
+ import { OrderVas } from '../order-vas/order-vas'
22
+ import { Vas } from '../vas/vas'
15
23
 
16
24
  export enum OrderVasItemStatus {
17
25
  STATUS_A = 'STATUS_A',
18
26
  STATUS_B = 'STATUS_B'
19
27
  }
20
28
 
21
- import { OrderInventory } from '../order-inventory/order-inventory'
22
- import { Product, ProductDetail } from '@things-factory/product-base'
23
- import { OrderVas } from '../order-vas/order-vas'
24
- import { Bizplace } from '@things-factory/biz-base'
25
- import { Vas } from '../vas/vas'
26
-
27
29
  registerEnumType(OrderVasItemStatus, {
28
30
  name: 'OrderVasItemStatus',
29
31
  description: 'state enumeration of a orderVasItem'
@@ -123,6 +125,18 @@ export class OrderVasItem {
123
125
  @Field({ nullable: true })
124
126
  updater?: User
125
127
 
126
- @RelationId((orderVasItem: OrderVasItem) => orderVasItem.creator)
128
+ @RelationId((orderVasItem: OrderVasItem) => orderVasItem.updater)
127
129
  updaterId?: string
130
+
131
+ @Column({ nullable: true })
132
+ @Field({ nullable: true })
133
+ adjustedVasRemark?: string
134
+
135
+ @Column({ nullable: true })
136
+ @Field({ nullable: true })
137
+ adjustedVasQty?: number
138
+
139
+ @Column({ nullable: true })
140
+ @Field({ nullable: true })
141
+ itemEditType?: string
128
142
  }
@@ -1197,7 +1197,9 @@ export async function confirmReleaseGood(name: string, context: any, tx?: Entity
1197
1197
  await tx.getRepository(OrderInventory).save(foundOIs)
1198
1198
 
1199
1199
  // 2. Update status of order vass
1200
- if (foundOVs && foundOVs.length) {
1200
+ if (foundOVs && foundOVs.length
1201
+ && foundOVs.some( vas => vas.status != ORDER_VAS_STATUS.PENDING_APPROVE )
1202
+ ) {
1201
1203
  foundOVs = foundOVs.map((orderVas: OrderVas) => {
1202
1204
  return {
1203
1205
  ...orderVas,
@@ -1284,7 +1286,9 @@ export async function receiveReleaseGood(name: string, context: any, tx: EntityM
1284
1286
  await tx.getRepository(OrderInventory).save(foundOIs)
1285
1287
 
1286
1288
  // 2. Update status of order vass
1287
- if (foundOVs && foundOVs.length) {
1289
+ if (foundOVs && foundOVs.length
1290
+ && foundOVs.some( vas => vas.status != ORDER_VAS_STATUS.PENDING_APPROVE )
1291
+ ) {
1288
1292
  foundOVs = foundOVs.map((orderVas: OrderVas) => {
1289
1293
  return {
1290
1294
  ...orderVas,
@@ -1,19 +1,61 @@
1
- import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { EntityManager, getRepository, In, Repository, SelectQueryBuilder } from 'typeorm'
1
+ import {
2
+ Arg,
3
+ Args,
4
+ Ctx,
5
+ Directive,
6
+ FieldResolver,
7
+ Query,
8
+ Resolver,
9
+ Root
10
+ } from 'type-graphql'
11
+ import {
12
+ EntityManager,
13
+ getRepository,
14
+ In,
15
+ Repository,
16
+ SelectQueryBuilder
17
+ } from 'typeorm'
3
18
 
4
19
  import { Attachment } from '@things-factory/attachment-base'
5
- import { checkUserBelongsDomain, User } from '@things-factory/auth-base'
6
- import { Bizplace, getCompanyBizplace, getMyBizplace, getPermittedBizplaceIds } from '@things-factory/biz-base'
20
+ import {
21
+ checkUserBelongsDomain,
22
+ User
23
+ } from '@things-factory/auth-base'
24
+ import {
25
+ Bizplace,
26
+ getCompanyBizplace,
27
+ getMyBizplace,
28
+ getPermittedBizplaceIds
29
+ } from '@things-factory/biz-base'
7
30
  import { logger } from '@things-factory/env'
8
- import { buildQuery, Domain, Filter, ListParam, Pagination, Sorting } from '@things-factory/shell'
9
- import { Inventory, LOCATION_TYPE } from '@things-factory/warehouse-base'
10
-
11
- import { ATTACHMENT_TYPE, ORDER_INVENTORY_STATUS, ORDER_STATUS } from '../../constants'
31
+ import {
32
+ buildQuery,
33
+ Domain,
34
+ Filter,
35
+ ListParam,
36
+ Pagination,
37
+ Sorting
38
+ } from '@things-factory/shell'
39
+ import {
40
+ Inventory,
41
+ LOCATION_TYPE
42
+ } from '@things-factory/warehouse-base'
43
+
44
+ import {
45
+ ATTACHMENT_TYPE,
46
+ ORDER_INVENTORY_STATUS,
47
+ ORDER_STATUS,
48
+ ORDER_VAS_STATUS
49
+ } from '../../constants'
12
50
  import { OrderInventory } from '../order-inventory/order-inventory'
13
51
  import { OrderPackage } from '../order-package/order-package'
14
52
  import { ShippingOrder } from '../shipping-order/shipping-order'
15
53
  import { ReleaseGood } from './release-good'
16
- import { NewReleaseGood, ReleasableInventoryList, ReleaseGoodList } from './release-good-types'
54
+ import {
55
+ NewReleaseGood,
56
+ ReleasableInventoryList,
57
+ ReleaseGoodList
58
+ } from './release-good-types'
17
59
 
18
60
  @Resolver(ReleaseGood)
19
61
  export class ReleaseGoodQuery {
@@ -191,8 +233,12 @@ export class ReleaseGoodQuery {
191
233
  'orderVass.vas',
192
234
  'orderVass.newProduct',
193
235
  'orderVass.newProductDetail',
236
+ 'orderVass.adjustedNewProduct',
237
+ 'orderVass.adjustedNewProductDetail',
194
238
  'orderVass.product',
195
239
  'orderVass.productDetail',
240
+ 'orderVass.adjustedProduct',
241
+ 'orderVass.adjustedProductDetail',
196
242
  'orderVass.inventory',
197
243
  'orderVass.orderVasItems',
198
244
  'orderVass.orderVasItems.vas',
@@ -311,6 +357,7 @@ export class ReleaseGoodQuery {
311
357
  const { domain, user }: { domain: Domain; user: User } = context.state
312
358
 
313
359
  const statusFilter = params.filters.some(e => e.name === 'status')
360
+ const vasStatusFilter = params.filters.find(e => e.name === 'vasStatus')
314
361
  const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
315
362
  const noOfItemsFilter = params.filters.find(param => param.name === 'noOfItems')
316
363
  const transporterFilter = params.filters.find(param => param.name === 'transporter')
@@ -323,6 +370,17 @@ export class ReleaseGoodQuery {
323
370
  const lmdFilter = params.filters.find(param => param.name === 'lmdOption')
324
371
  const priorityDeliveryFilter = params.filters.find(param => param.name === 'priorityDelivery')
325
372
  const platformCodeFilter = params.filters.find(param => param.name === 'platformCode')
373
+ const hasVas = params.filters.find(param => param.name === 'hasVas')
374
+ //remove vas from params
375
+ if (hasVas) {
376
+ const vasIdx = params.filters.findIndex(param => param.name === 'hasVas')
377
+ params.filters.splice(vasIdx, 1)
378
+ }
379
+
380
+ if (vasStatusFilter) {
381
+ const vasStatusIdx = params.filters.findIndex(param => param.name === 'vasStatus')
382
+ params.filters.splice(vasStatusIdx, 1)
383
+ }
326
384
 
327
385
  if (await checkUserBelongsDomain(domain, user)) {
328
386
  if (!statusFilter && !params.filters.some(e => e.name === 'name')) {
@@ -500,6 +558,7 @@ export class ReleaseGoodQuery {
500
558
  qb.leftJoinAndSelect('rg.acceptedBy', 'acceptedBy')
501
559
  qb.leftJoinAndSelect('rg.draftReleaseGood', 'draftReleaseGood')
502
560
  qb.leftJoinAndSelect('rg.deliverTo', 'deliverTo')
561
+ qb.leftJoinAndSelect('rg.orderVass', 'ov')
503
562
  qb.leftJoin(
504
563
  subQuery => {
505
564
  return subQuery
@@ -514,6 +573,37 @@ export class ReleaseGoodQuery {
514
573
  'cc.status = rg.status'
515
574
  )
516
575
 
576
+ if (hasVas) {
577
+ if (hasVas.value == true) {
578
+ qb.andWhere(
579
+ `ov.release_good_id notnull`
580
+ )
581
+ } else if (hasVas.value == false && !vasStatusFilter) {
582
+ qb.andWhere(
583
+ `ov.release_good_id is null`
584
+ )
585
+ }
586
+ }
587
+
588
+ if (vasStatusFilter) {
589
+ if (vasStatusFilter.value === ORDER_VAS_STATUS.PENDING_APPROVE) {
590
+ qb.andWhere(`ov.status = :vasStatus`, { vasStatus: vasStatusFilter.value })
591
+ } else {
592
+ qb.andWhere(
593
+ `
594
+ ov.status = :vasStatus
595
+ AND rg.id not IN (
596
+ SELECT
597
+ rg2.id
598
+ FROM
599
+ release_goods rg2
600
+ LEFT JOIN order_vass ov2 on ov2.release_good_id = rg2.id
601
+ WHERE ov2.status = 'PENDING_APPROVE'
602
+ )`, { vasStatus: vasStatusFilter.value}
603
+ )
604
+ }
605
+ }
606
+
517
607
  if (transporterFilter) {
518
608
  qb.andWhere(
519
609
  `exists (select id from order_packages op where