@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.
- package/dist-server/constants/order.js +5 -1
- package/dist-server/constants/order.js.map +1 -1
- package/dist-server/service/order-vas/order-vas-types.js +72 -8
- package/dist-server/service/order-vas/order-vas-types.js.map +1 -1
- package/dist-server/service/order-vas/order-vas.js +102 -7
- package/dist-server/service/order-vas/order-vas.js.map +1 -1
- package/dist-server/service/order-vas-item/order-vas-item-type.js +13 -1
- package/dist-server/service/order-vas-item/order-vas-item-type.js.map +1 -1
- package/dist-server/service/order-vas-item/order-vas-item.js +20 -5
- package/dist-server/service/order-vas-item/order-vas-item.js.map +1 -1
- package/dist-server/service/release-good/release-good-mutation.js +4 -2
- package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +41 -0
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/vas/vas-mutation.js +333 -25
- package/dist-server/service/vas/vas-mutation.js.map +1 -1
- package/package.json +3 -3
- package/server/constants/order.ts +5 -1
- package/server/service/order-vas/order-vas-types.ts +48 -0
- package/server/service/order-vas/order-vas.ts +72 -0
- package/server/service/order-vas-item/order-vas-item-type.ts +12 -2
- package/server/service/order-vas-item/order-vas-item.ts +27 -13
- package/server/service/release-good/release-good-mutation.ts +6 -2
- package/server/service/release-good/release-good-query.ts +99 -9
- 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
|
|
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.
|
|
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 {
|
|
2
|
-
|
|
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 {
|
|
6
|
-
|
|
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 {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 {
|
|
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
|