@things-factory/sales-base 8.0.2 → 8.0.5
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/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/server/constants/attachment-type.ts +0 -9
- package/server/constants/index.ts +0 -7
- package/server/constants/load-type.ts +0 -4
- package/server/constants/order.ts +0 -203
- package/server/constants/product-group-type.ts +0 -4
- package/server/constants/release-good.ts +0 -9
- package/server/constants/transfer-order-type.ts +0 -6
- package/server/constants/validation-error-code.ts +0 -3
- package/server/constants/vas-target-type.ts +0 -25
- package/server/controllers/ecommerce/ecommerce-controller.ts +0 -122
- package/server/controllers/ecommerce/index.ts +0 -2
- package/server/controllers/ecommerce/sellercraft-controller.ts +0 -182
- package/server/controllers/index.ts +0 -2
- package/server/controllers/order-controller.ts +0 -296
- package/server/errors/index.ts +0 -1
- package/server/errors/validation-error.ts +0 -25
- package/server/index.ts +0 -5
- package/server/migrations/index.ts +0 -9
- package/server/service/arrival-notice/arrival-notice-mutation.ts +0 -1152
- package/server/service/arrival-notice/arrival-notice-query.ts +0 -549
- package/server/service/arrival-notice/arrival-notice-types.ts +0 -310
- package/server/service/arrival-notice/arrival-notice.ts +0 -202
- package/server/service/arrival-notice/index.ts +0 -9
- package/server/service/claim/claim-mutation.ts +0 -308
- package/server/service/claim/claim-query.ts +0 -122
- package/server/service/claim/claim-types.ts +0 -130
- package/server/service/claim/claim.ts +0 -140
- package/server/service/claim/index.ts +0 -9
- package/server/service/claim-detail/claim-detail-mutation.ts +0 -102
- package/server/service/claim-detail/claim-detail-query.ts +0 -55
- package/server/service/claim-detail/claim-detail-types.ts +0 -47
- package/server/service/claim-detail/claim-detail.ts +0 -69
- package/server/service/claim-detail/index.ts +0 -9
- package/server/service/claim-order/claim-order-mutation.ts +0 -101
- package/server/service/claim-order/claim-order-query.ts +0 -47
- package/server/service/claim-order/claim-order-types.ts +0 -35
- package/server/service/claim-order/claim-order.ts +0 -81
- package/server/service/claim-order/index.ts +0 -9
- package/server/service/collection-order/collection-order-mutation.ts +0 -245
- package/server/service/collection-order/collection-order-query.ts +0 -97
- package/server/service/collection-order/collection-order-types.ts +0 -165
- package/server/service/collection-order/collection-order.ts +0 -135
- package/server/service/collection-order/index.ts +0 -9
- package/server/service/delivery-order/delivery-order-mutation.ts +0 -967
- package/server/service/delivery-order/delivery-order-query.ts +0 -631
- package/server/service/delivery-order/delivery-order-types.ts +0 -268
- package/server/service/delivery-order/delivery-order.ts +0 -258
- package/server/service/delivery-order/index.ts +0 -9
- package/server/service/draft-release-good/draft-release-good-mutation.ts +0 -765
- package/server/service/draft-release-good/draft-release-good-query.ts +0 -354
- package/server/service/draft-release-good/draft-release-good-type.ts +0 -261
- package/server/service/draft-release-good/draft-release-good.ts +0 -284
- package/server/service/draft-release-good/index.ts +0 -9
- package/server/service/goods-receival-note/goods-receival-note-mutation.ts +0 -129
- package/server/service/goods-receival-note/goods-receival-note-query.ts +0 -280
- package/server/service/goods-receival-note/goods-receival-note-types.ts +0 -105
- package/server/service/goods-receival-note/goods-receival-note.ts +0 -127
- package/server/service/goods-receival-note/index.ts +0 -9
- package/server/service/index.ts +0 -238
- package/server/service/inventory-check/index.ts +0 -9
- package/server/service/inventory-check/inventory-check-mutation.ts +0 -149
- package/server/service/inventory-check/inventory-check-query.ts +0 -48
- package/server/service/inventory-check/inventory-check-types.ts +0 -48
- package/server/service/inventory-check/inventory-check.ts +0 -90
- package/server/service/invoice/index.ts +0 -9
- package/server/service/invoice/invoice-mutation.ts +0 -95
- package/server/service/invoice/invoice-query.ts +0 -53
- package/server/service/invoice/invoice-types.ts +0 -279
- package/server/service/invoice/invoice.ts +0 -230
- package/server/service/invoice-product/index.ts +0 -9
- package/server/service/invoice-product/invoice-product-mutation.ts +0 -54
- package/server/service/invoice-product/invoice-product-query.ts +0 -54
- package/server/service/invoice-product/invoice-product-types.ts +0 -84
- package/server/service/invoice-product/invoice-product.ts +0 -92
- package/server/service/job-sheet/index.ts +0 -9
- package/server/service/job-sheet/job-sheet-mutation.ts +0 -92
- package/server/service/job-sheet/job-sheet-query.ts +0 -112
- package/server/service/job-sheet/job-sheet-types.ts +0 -78
- package/server/service/job-sheet/job-sheet.ts +0 -102
- package/server/service/manifest/index.ts +0 -6
- package/server/service/manifest/manifest-mutation.ts +0 -190
- package/server/service/manifest/manifest-query.ts +0 -149
- package/server/service/manifest/manifest-type.ts +0 -84
- package/server/service/manifest/manifest.ts +0 -114
- package/server/service/order-inventory/index.ts +0 -9
- package/server/service/order-inventory/order-inventory-mutation.ts +0 -54
- package/server/service/order-inventory/order-inventory-query.ts +0 -722
- package/server/service/order-inventory/order-inventory-types.ts +0 -238
- package/server/service/order-inventory/order-inventory.ts +0 -401
- package/server/service/order-product/index.ts +0 -9
- package/server/service/order-product/order-product-mutation.ts +0 -48
- package/server/service/order-product/order-product-query.ts +0 -89
- package/server/service/order-product/order-product-types.ts +0 -335
- package/server/service/order-product/order-product.ts +0 -362
- package/server/service/order-tote/index.ts +0 -9
- package/server/service/order-tote/order-tote-mutation.ts +0 -31
- package/server/service/order-tote/order-tote-query.ts +0 -112
- package/server/service/order-tote/order-tote-types.ts +0 -47
- package/server/service/order-tote/order-tote.ts +0 -73
- package/server/service/order-tote-item/index.ts +0 -9
- package/server/service/order-tote-item/order-tote-item-mutation.ts +0 -31
- package/server/service/order-tote-item/order-tote-item-query.ts +0 -82
- package/server/service/order-tote-item/order-tote-item-types.ts +0 -56
- package/server/service/order-tote-item/order-tote-item.ts +0 -72
- package/server/service/order-tote-seal/index.ts +0 -9
- package/server/service/order-tote-seal/order-tote-seal-mutation.ts +0 -31
- package/server/service/order-tote-seal/order-tote-seal-query.ts +0 -59
- package/server/service/order-tote-seal/order-tote-seal-types.ts +0 -41
- package/server/service/order-tote-seal/order-tote-seal.ts +0 -46
- package/server/service/order-vas/index.ts +0 -9
- package/server/service/order-vas/order-vas-mutation.ts +0 -20
- package/server/service/order-vas/order-vas-query.ts +0 -72
- package/server/service/order-vas/order-vas-types.ts +0 -159
- package/server/service/order-vas/order-vas.ts +0 -207
- package/server/service/others/index.ts +0 -5
- package/server/service/others/other-query.ts +0 -563
- package/server/service/others/other-types.ts +0 -115
- package/server/service/purchase-order/index.ts +0 -9
- package/server/service/purchase-order/purchase-order-mutation.ts +0 -458
- package/server/service/purchase-order/purchase-order-query.ts +0 -90
- package/server/service/purchase-order/purchase-order-types.ts +0 -154
- package/server/service/purchase-order/purchase-order.ts +0 -172
- package/server/service/purchase-order-other-charge/index.ts +0 -9
- package/server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.ts +0 -31
- package/server/service/purchase-order-other-charge/purchase-order-other-charge-query.ts +0 -52
- package/server/service/purchase-order-other-charge/purchase-order-other-charge-types.ts +0 -44
- package/server/service/purchase-order-other-charge/purchase-order-other-charge.ts +0 -68
- package/server/service/release-good/index.ts +0 -9
- package/server/service/release-good/release-good-mutation.ts +0 -1686
- package/server/service/release-good/release-good-query.ts +0 -980
- package/server/service/release-good/release-good-types.ts +0 -662
- package/server/service/release-good/release-good.ts +0 -490
- package/server/service/retail-replenishment-order/index.ts +0 -9
- package/server/service/retail-replenishment-order/retail-replenishment-order-mutation.ts +0 -382
- package/server/service/retail-replenishment-order/retail-replenishment-order-query.ts +0 -54
- package/server/service/retail-replenishment-order/retail-replenishment-order-types.ts +0 -101
- package/server/service/retail-replenishment-order/retail-replenishment-order.ts +0 -115
- package/server/service/return-order/index.ts +0 -9
- package/server/service/return-order/return-order-mutation.ts +0 -516
- package/server/service/return-order/return-order-query.ts +0 -226
- package/server/service/return-order/return-order-types.ts +0 -196
- package/server/service/return-order/return-order.ts +0 -127
- package/server/service/reverse-kitting-order/index.ts +0 -9
- package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +0 -500
- package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +0 -197
- package/server/service/reverse-kitting-order/reverse-kitting-order-type.ts +0 -173
- package/server/service/reverse-kitting-order/reverse-kitting-order.ts +0 -121
- package/server/service/reverse-kitting-order-inventory/index.ts +0 -9
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.ts +0 -129
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.ts +0 -52
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.ts +0 -95
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts +0 -143
- package/server/service/shipping-order/index.ts +0 -9
- package/server/service/shipping-order/shipping-order-mutation.ts +0 -61
- package/server/service/shipping-order/shipping-order-query.ts +0 -61
- package/server/service/shipping-order/shipping-order-types.ts +0 -89
- package/server/service/shipping-order/shipping-order.ts +0 -129
- package/server/service/transfer-order/index.ts +0 -9
- package/server/service/transfer-order/transfer-order-mutation.ts +0 -309
- package/server/service/transfer-order/transfer-order-query.ts +0 -66
- package/server/service/transfer-order/transfer-order-types.ts +0 -97
- package/server/service/transfer-order/transfer-order.ts +0 -117
- package/server/service/vas/index.ts +0 -9
- package/server/service/vas/vas-mutation.ts +0 -106
- package/server/service/vas/vas-query.ts +0 -60
- package/server/service/vas/vas-types.ts +0 -71
- package/server/service/vas/vas.ts +0 -77
- package/server/service/vas-order/index.ts +0 -9
- package/server/service/vas-order/vas-order-mutation.ts +0 -259
- package/server/service/vas-order/vas-order-query.ts +0 -119
- package/server/service/vas-order/vas-order-types.ts +0 -49
- package/server/service/vas-order/vas-order.ts +0 -81
- package/server/utils/datetime-util.ts +0 -54
- package/server/utils/index.ts +0 -3
- package/server/utils/inventory-util.ts +0 -1155
- package/server/utils/order-no-generator.ts +0 -146
|
@@ -1,549 +0,0 @@
|
|
|
1
|
-
import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
-
import { EntityManager, In, OrderByCondition, SelectQueryBuilder } from 'typeorm'
|
|
3
|
-
|
|
4
|
-
import { Attachment } from '@things-factory/attachment-base'
|
|
5
|
-
import { checkUserBelongsDomain, User } from '@things-factory/auth-base'
|
|
6
|
-
import { Bizplace, getCompanyBizplace, getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
7
|
-
import { ProductDetail } from '@things-factory/product-base'
|
|
8
|
-
import { buildQuery, Domain, getRepository, ListParam } from '@things-factory/shell'
|
|
9
|
-
|
|
10
|
-
import { ArrivalNoticeList, NewArrivalNotice, RawArrivalNotice } from '../'
|
|
11
|
-
import { ATTACHMENT_TYPE, ORDER_STATUS } from '../../constants'
|
|
12
|
-
import { OrderInventory, OrderProduct } from '../../service'
|
|
13
|
-
import { ArrivalNotice } from './arrival-notice'
|
|
14
|
-
|
|
15
|
-
@Resolver(ArrivalNotice)
|
|
16
|
-
export class ArrivalNoticeQuery {
|
|
17
|
-
@Directive('@privilege(category: "order", privilege: "query", domainOwnerGranted: true)')
|
|
18
|
-
@Query(returns => ArrivalNotice)
|
|
19
|
-
async arrivalNotice(
|
|
20
|
-
@Ctx() context: ResolverContext,
|
|
21
|
-
@Arg('name', { nullable: true }) name?: string,
|
|
22
|
-
@Arg('refNo', { nullable: true }) refNo?: string
|
|
23
|
-
): Promise<ArrivalNotice> {
|
|
24
|
-
const { domain, user, bizplace }: { domain: Domain; user: User; bizplace?: Bizplace } = context.state
|
|
25
|
-
|
|
26
|
-
let param: any = { domain, bizplace: bizplace ? bizplace : In(await getPermittedBizplaceIds(domain, user)) }
|
|
27
|
-
|
|
28
|
-
if (name) param = { ...param, name }
|
|
29
|
-
else if (refNo) param = { ...param, refNo }
|
|
30
|
-
else return
|
|
31
|
-
|
|
32
|
-
let foundGAN: ArrivalNotice = await getRepository(ArrivalNotice).findOne({
|
|
33
|
-
where: { ...param },
|
|
34
|
-
relations: [
|
|
35
|
-
'domain',
|
|
36
|
-
'bizplace',
|
|
37
|
-
'bizplace.domain',
|
|
38
|
-
'releaseGood',
|
|
39
|
-
'purchaseOrder',
|
|
40
|
-
'purchaseOrder.bufferLocation',
|
|
41
|
-
'orderProducts',
|
|
42
|
-
'orderProducts.product',
|
|
43
|
-
'orderInventories',
|
|
44
|
-
'orderInventories.inventory',
|
|
45
|
-
'orderInventories.inventory.product',
|
|
46
|
-
'orderInventories.inventory.location',
|
|
47
|
-
'orderVass',
|
|
48
|
-
'orderVass.vas',
|
|
49
|
-
'orderVass.targetProduct',
|
|
50
|
-
'supplier',
|
|
51
|
-
'creator',
|
|
52
|
-
'updater'
|
|
53
|
-
]
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
if (name && !foundGAN) throw new Error(`Failed to find arrival notice with ${name}`)
|
|
57
|
-
|
|
58
|
-
if (foundGAN) {
|
|
59
|
-
const foundAttachments: Attachment[] = await getRepository(Attachment).find({
|
|
60
|
-
where: {
|
|
61
|
-
domain: { id: domain.id },
|
|
62
|
-
refBy: foundGAN?.id,
|
|
63
|
-
category: ATTACHMENT_TYPE.GAN
|
|
64
|
-
}
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
const foundPOAttachments: Attachment[] = foundGAN?.purchaseOrder?.id
|
|
68
|
-
? await getRepository(Attachment).find({
|
|
69
|
-
where: {
|
|
70
|
-
domain: { id: domain.id },
|
|
71
|
-
refBy: foundGAN.purchaseOrder?.id,
|
|
72
|
-
category: ATTACHMENT_TYPE.PO
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
: []
|
|
76
|
-
|
|
77
|
-
// add productDetails data to orderProduct.product
|
|
78
|
-
foundGAN.orderProducts = await Promise.all(
|
|
79
|
-
foundGAN.orderProducts.map(async (orderProduct: OrderProduct) => {
|
|
80
|
-
orderProduct.product['productDetails'] = await getRepository(ProductDetail).find({
|
|
81
|
-
where: {
|
|
82
|
-
product: { id: orderProduct.product.id },
|
|
83
|
-
packingType: orderProduct.packingType,
|
|
84
|
-
packingSize: orderProduct.packingSize
|
|
85
|
-
}
|
|
86
|
-
})
|
|
87
|
-
return orderProduct
|
|
88
|
-
})
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
// add productDetails data to orderInventory.inventory.product if orderInventory is exist
|
|
92
|
-
if (foundGAN.orderInventories && foundGAN.orderInventories.length) {
|
|
93
|
-
foundGAN.orderInventories = await Promise.all(
|
|
94
|
-
foundGAN.orderInventories.map(async (orderInventory: OrderInventory) => {
|
|
95
|
-
orderInventory.inventory.product['productDetails'] = await getRepository(ProductDetail).find({
|
|
96
|
-
where: {
|
|
97
|
-
product: { id: orderInventory.inventory.product.id },
|
|
98
|
-
packingType: orderInventory.inventory.packingType,
|
|
99
|
-
packingSize: orderInventory.inventory.packingSize
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
return orderInventory
|
|
103
|
-
})
|
|
104
|
-
)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return {
|
|
108
|
-
...foundGAN,
|
|
109
|
-
attachment: [...foundPOAttachments, ...foundAttachments]
|
|
110
|
-
}
|
|
111
|
-
} else {
|
|
112
|
-
return
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
@Directive('@privilege(category: "order_customer", privilege: "query", domainOwnerGranted: true)')
|
|
117
|
-
@Query(returns => ArrivalNoticeList)
|
|
118
|
-
async arrivalNotices(
|
|
119
|
-
@Ctx() context: ResolverContext,
|
|
120
|
-
@Args(type => ListParam) params: ListParam
|
|
121
|
-
): Promise<ArrivalNoticeList> {
|
|
122
|
-
const { domain, user } = context.state
|
|
123
|
-
|
|
124
|
-
if (await checkUserBelongsDomain(domain, user)) {
|
|
125
|
-
if (!params.filters.some(e => e.name === 'status') && !params.filters.some(e => e.name === 'name')) {
|
|
126
|
-
params.filters.push({
|
|
127
|
-
name: 'status',
|
|
128
|
-
operator: 'notin',
|
|
129
|
-
value: [ORDER_STATUS.PENDING, ORDER_STATUS.EDITING],
|
|
130
|
-
relation: false
|
|
131
|
-
})
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
if (!params.filters.find((filter: any) => filter.name === 'bizplace')) {
|
|
136
|
-
params.filters.push({
|
|
137
|
-
name: 'bizplaceId',
|
|
138
|
-
operator: 'in',
|
|
139
|
-
value: await getPermittedBizplaceIds(domain, user),
|
|
140
|
-
relation: false
|
|
141
|
-
})
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
|
|
145
|
-
if (fromDateParamIdx >= 0) {
|
|
146
|
-
let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
|
|
147
|
-
params.filters.splice(fromDateParamIdx, 1)
|
|
148
|
-
|
|
149
|
-
params.filters.push({
|
|
150
|
-
name: 'createdAt',
|
|
151
|
-
operator: 'gte',
|
|
152
|
-
value: fromDateVal.toISOString(),
|
|
153
|
-
relation: false
|
|
154
|
-
})
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const toDateParamIdx = params.filters.findIndex(param => param.name === 'toDate')
|
|
158
|
-
if (toDateParamIdx >= 0) {
|
|
159
|
-
let toDateVal = new Date(params.filters[toDateParamIdx].value)
|
|
160
|
-
params.filters.splice(toDateParamIdx, 1)
|
|
161
|
-
|
|
162
|
-
params.filters.push({
|
|
163
|
-
name: 'createdAt',
|
|
164
|
-
operator: 'lt',
|
|
165
|
-
value: new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
|
|
166
|
-
relation: false
|
|
167
|
-
})
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const qb: SelectQueryBuilder<ArrivalNotice> = getRepository(ArrivalNotice).createQueryBuilder('an')
|
|
171
|
-
buildQuery(qb, params, context)
|
|
172
|
-
qb.addSelect('COALESCE("cc".rank, 9999)', 'rank')
|
|
173
|
-
qb.leftJoinAndSelect('an.domain', 'domain')
|
|
174
|
-
qb.leftJoinAndSelect('an.bizplace', 'bizplace')
|
|
175
|
-
qb.leftJoinAndSelect('an.releaseGood', 'ro')
|
|
176
|
-
qb.leftJoinAndSelect('an.creator', 'creator')
|
|
177
|
-
qb.leftJoinAndSelect('an.updater', 'updater')
|
|
178
|
-
qb.leftJoinAndSelect('an.acceptedBy', 'accepter')
|
|
179
|
-
qb.leftJoin(
|
|
180
|
-
subQuery => {
|
|
181
|
-
return subQuery
|
|
182
|
-
.select(`ccd.rank`, 'rank')
|
|
183
|
-
.addSelect(`ccd.name`, 'status')
|
|
184
|
-
.from(`common_code_details`, 'ccd')
|
|
185
|
-
.innerJoin(`ccd.commonCode`, 'cc')
|
|
186
|
-
.where(`ccd.domain_id = :domainId`, { domainId: domain.id })
|
|
187
|
-
.andWhere(`cc.name = 'ORDER_STATUS'`)
|
|
188
|
-
},
|
|
189
|
-
'cc',
|
|
190
|
-
'cc.status = an.status'
|
|
191
|
-
)
|
|
192
|
-
|
|
193
|
-
const arrChildSortData = ['bizplace']
|
|
194
|
-
const sort: OrderByCondition = (params.sortings || []).reduce(
|
|
195
|
-
(acc, sort) => ({
|
|
196
|
-
...acc,
|
|
197
|
-
[arrChildSortData.indexOf(sort.name) >= 0 ? sort.name + '.name' : 'an.' + sort.name]: sort.desc ? 'DESC' : 'ASC'
|
|
198
|
-
}),
|
|
199
|
-
!params.sortings.some(e => e.name === 'status') ? { rank: 'ASC' } : {}
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
qb.orderBy(sort)
|
|
203
|
-
|
|
204
|
-
const [items, total] = await qb.getManyAndCount()
|
|
205
|
-
|
|
206
|
-
return { items, total }
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
@Directive('@privilege(category: "order_warehouse", privilege: "query", domainOwnerGranted: true)')
|
|
210
|
-
@Query(returns => ArrivalNoticeList)
|
|
211
|
-
async arrivalNoticeRequests(
|
|
212
|
-
@Args(type => ListParam) params: ListParam,
|
|
213
|
-
@Ctx() context: ResolverContext
|
|
214
|
-
): Promise<ArrivalNoticeList> {
|
|
215
|
-
try {
|
|
216
|
-
const { domain, user } = context.state
|
|
217
|
-
const statusFilter = params.filters.some(e => e.name === 'status')
|
|
218
|
-
const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
|
|
219
|
-
|
|
220
|
-
if (!statusFilter) {
|
|
221
|
-
params.filters.push({
|
|
222
|
-
name: 'status',
|
|
223
|
-
operator: 'notin',
|
|
224
|
-
value: [ORDER_STATUS.PENDING, ORDER_STATUS.EDITING],
|
|
225
|
-
relation: false
|
|
226
|
-
})
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (!bizplaceFilter) {
|
|
230
|
-
params.filters.push({
|
|
231
|
-
name: 'bizplaceId',
|
|
232
|
-
operator: 'in',
|
|
233
|
-
value: await getPermittedBizplaceIds(domain, user),
|
|
234
|
-
relation: false
|
|
235
|
-
})
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
|
|
239
|
-
if (fromDateParamIdx >= 0) {
|
|
240
|
-
let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
|
|
241
|
-
params.filters.splice(fromDateParamIdx, 1)
|
|
242
|
-
|
|
243
|
-
params.filters.push({
|
|
244
|
-
name: 'createdAt',
|
|
245
|
-
operator: 'gte',
|
|
246
|
-
value: fromDateVal.toISOString(),
|
|
247
|
-
relation: false
|
|
248
|
-
})
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const toDateParamIdx = params.filters.findIndex(param => param.name === 'toDate')
|
|
252
|
-
if (toDateParamIdx >= 0) {
|
|
253
|
-
let toDateVal = new Date(params.filters[toDateParamIdx].value)
|
|
254
|
-
params.filters.splice(toDateParamIdx, 1)
|
|
255
|
-
|
|
256
|
-
params.filters.push({
|
|
257
|
-
name: 'createdAt',
|
|
258
|
-
operator: 'lt',
|
|
259
|
-
value: new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
|
|
260
|
-
relation: false
|
|
261
|
-
})
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
const qb: SelectQueryBuilder<ArrivalNotice> = getRepository(ArrivalNotice).createQueryBuilder('an')
|
|
265
|
-
buildQuery(qb, params, context)
|
|
266
|
-
qb.addSelect('COALESCE("cc".rank, 9999)', 'rank')
|
|
267
|
-
qb.leftJoinAndSelect('an.domain', 'domain')
|
|
268
|
-
qb.leftJoinAndSelect('an.bizplace', 'bizplace')
|
|
269
|
-
qb.leftJoinAndSelect('an.releaseGood', 'ro')
|
|
270
|
-
qb.leftJoinAndSelect('an.creator', 'creator')
|
|
271
|
-
qb.leftJoinAndSelect('an.updater', 'updater')
|
|
272
|
-
qb.leftJoinAndSelect('an.acceptedBy', 'accepter')
|
|
273
|
-
qb.leftJoin(
|
|
274
|
-
subQuery => {
|
|
275
|
-
return subQuery
|
|
276
|
-
.select(`ccd.rank`, 'rank')
|
|
277
|
-
.addSelect(`ccd.name`, 'status')
|
|
278
|
-
.from(`common_code_details`, 'ccd')
|
|
279
|
-
.innerJoin(`ccd.commonCode`, 'cc')
|
|
280
|
-
.where(`ccd.domain_id = :domainId`, { domainId: domain.id })
|
|
281
|
-
.andWhere(`cc.name = 'ORDER_STATUS'`)
|
|
282
|
-
},
|
|
283
|
-
'cc',
|
|
284
|
-
'cc.status = an.status'
|
|
285
|
-
)
|
|
286
|
-
|
|
287
|
-
const arrChildSortData = ['bizplace']
|
|
288
|
-
const sort: OrderByCondition = (params.sortings || []).reduce(
|
|
289
|
-
(acc, sort) => ({
|
|
290
|
-
...acc,
|
|
291
|
-
[arrChildSortData.indexOf(sort.name) >= 0 ? sort.name + '.name' : 'an.' + sort.name]: sort.desc
|
|
292
|
-
? 'DESC'
|
|
293
|
-
: 'ASC'
|
|
294
|
-
}),
|
|
295
|
-
!params.sortings.some(e => e.name === 'status') ? { rank: 'ASC' } : {}
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
qb.orderBy(sort)
|
|
299
|
-
|
|
300
|
-
const [items, total] = await qb.getManyAndCount()
|
|
301
|
-
|
|
302
|
-
return { items, total }
|
|
303
|
-
} catch (error) {
|
|
304
|
-
throw error
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
@Directive('@transaction')
|
|
309
|
-
@Query(returns => [RawArrivalNotice])
|
|
310
|
-
async validateBulkArrivalNotices(
|
|
311
|
-
@Ctx() context: ResolverContext,
|
|
312
|
-
@Arg('rawArrivalNotices', type => [NewArrivalNotice], { nullable: true }) rawArrivalNotices: NewArrivalNotice[],
|
|
313
|
-
@Arg('bizplaceId', type => String) bizplaceId: string
|
|
314
|
-
): Promise<RawArrivalNotice[]> {
|
|
315
|
-
const tx: EntityManager = context.state.tx
|
|
316
|
-
return await validateBulkArrivalNoticesFunction(rawArrivalNotices, bizplaceId, tx)
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
@FieldResolver(type => Domain)
|
|
320
|
-
async domain(@Root() arrivalNotice: ArrivalNotice): Promise<Domain> {
|
|
321
|
-
return await getRepository(Domain).findOneBy({ id: arrivalNotice.domainId })
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
@FieldResolver(type => User)
|
|
325
|
-
async creator(@Root() arrivalNotice: ArrivalNotice): Promise<User> {
|
|
326
|
-
return await getRepository(User).findOneBy({ id: arrivalNotice.creatorId })
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
@FieldResolver(type => User)
|
|
330
|
-
async updater(@Root() arrivalNotice: ArrivalNotice): Promise<User> {
|
|
331
|
-
return await getRepository(User).findOneBy({ id: arrivalNotice.updaterId })
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
export async function validateBulkArrivalNoticesFunction(
|
|
336
|
-
rawArrivalNotices: NewArrivalNotice[],
|
|
337
|
-
bizplaceId: string,
|
|
338
|
-
trxMgr: EntityManager
|
|
339
|
-
): Promise<RawArrivalNotice[]> {
|
|
340
|
-
const companyBizplace: Bizplace = await getCompanyBizplace(null, null, bizplaceId)
|
|
341
|
-
|
|
342
|
-
const json_oi = JSON.stringify(
|
|
343
|
-
rawArrivalNotices.map(raw => {
|
|
344
|
-
return {
|
|
345
|
-
ref_no: raw.refNo || null,
|
|
346
|
-
ref_no_2: raw.refNo2 || null,
|
|
347
|
-
ref_no_3: raw.refNo3 || null,
|
|
348
|
-
eta_date: raw.etaDate || null,
|
|
349
|
-
truck_no: raw.truckNo || null,
|
|
350
|
-
own_transport: !!raw.truckNo || false,
|
|
351
|
-
loose_item: raw.looseItem || false,
|
|
352
|
-
import_cargo: raw.importCargo || false,
|
|
353
|
-
container: (!!raw.containerNo && !!raw.containerSize) || false,
|
|
354
|
-
container_no: raw.containerNo || null,
|
|
355
|
-
container_size: raw.containerSize || null,
|
|
356
|
-
sku: raw.sku || null,
|
|
357
|
-
batch_id: raw.batchId || null,
|
|
358
|
-
batch_id_ref: raw.batchIdRef || null,
|
|
359
|
-
packing_type: raw.packingType || null,
|
|
360
|
-
packing_size: raw.packingSize || null,
|
|
361
|
-
uom: raw.uom || null,
|
|
362
|
-
pack_qty: raw.packQty || null,
|
|
363
|
-
pallet_qty: raw.palletQty || null,
|
|
364
|
-
unit_price: raw.unitPrice || null,
|
|
365
|
-
manufacture_date: raw.manufactureDate || null
|
|
366
|
-
}
|
|
367
|
-
})
|
|
368
|
-
)
|
|
369
|
-
|
|
370
|
-
await trxMgr.query(
|
|
371
|
-
`
|
|
372
|
-
CREATE TEMP TABLE raw_arrival_notices(
|
|
373
|
-
ref_no VARCHAR(150),
|
|
374
|
-
ref_no_2 VARCHAR(150),
|
|
375
|
-
ref_no_3 VARCHAR(150),
|
|
376
|
-
eta_date VARCHAR(24),
|
|
377
|
-
truck_no VARCHAR(10),
|
|
378
|
-
own_transport BOOLEAN,
|
|
379
|
-
container BOOLEAN,
|
|
380
|
-
container_no VARCHAR(50),
|
|
381
|
-
container_size VARCHAR(24),
|
|
382
|
-
import_cargo BOOLEAN,
|
|
383
|
-
loose_item BOOLEAN,
|
|
384
|
-
sku VARCHAR(150),
|
|
385
|
-
batch_id VARCHAR(100),
|
|
386
|
-
batch_id_ref VARCHAR(100),
|
|
387
|
-
packing_type VARCHAR(50),
|
|
388
|
-
packing_size INT,
|
|
389
|
-
uom VARCHAR(10),
|
|
390
|
-
pack_qty INT,
|
|
391
|
-
pallet_qty INT,
|
|
392
|
-
unit_price FLOAT8,
|
|
393
|
-
manufacture_date DATE
|
|
394
|
-
);
|
|
395
|
-
`
|
|
396
|
-
)
|
|
397
|
-
|
|
398
|
-
await trxMgr.query(
|
|
399
|
-
`
|
|
400
|
-
CREATE TEMP TABLE temp_gan AS (
|
|
401
|
-
SELECT an.name, an.ref_no, an.ref_no_2, an.ref_no_3, an.eta_date, an.truck_no, an.own_transport, an.container, an.container_no, an.container_size, an.import_cargo, an.loose_item
|
|
402
|
-
FROM arrival_notices an
|
|
403
|
-
WHERE EXISTS (
|
|
404
|
-
SELECT raw.* FROM
|
|
405
|
-
JSON_POPULATE_RECORDSET(NULL:: arrival_notices, $1) raw
|
|
406
|
-
WHERE raw.ref_no = an.ref_no
|
|
407
|
-
AND raw.ref_no_2 = an.ref_no_2
|
|
408
|
-
AND raw.ref_no_3 = an.ref_no_3
|
|
409
|
-
AND raw.eta_date::date = an.eta_date::date
|
|
410
|
-
AND raw.truck_no = an.truck_no
|
|
411
|
-
AND raw.own_transport = an.own_transport
|
|
412
|
-
AND raw.container = an.container
|
|
413
|
-
AND raw.container_no = an.container_no
|
|
414
|
-
AND raw.container_size = an.container_size
|
|
415
|
-
AND raw.loose_item = an.loose_item
|
|
416
|
-
AND raw.import_cargo = an.import_cargo
|
|
417
|
-
)
|
|
418
|
-
)
|
|
419
|
-
`,
|
|
420
|
-
[json_oi]
|
|
421
|
-
)
|
|
422
|
-
|
|
423
|
-
await trxMgr.query(
|
|
424
|
-
`
|
|
425
|
-
INSERT INTO raw_arrival_notices
|
|
426
|
-
SELECT
|
|
427
|
-
js.ref_no, js.ref_no_2, js.ref_no_3, js.eta_date, js.truck_no, js.own_transport, js.container,
|
|
428
|
-
js.container_no, js.container_size, js.import_cargo, js.loose_item, js.sku, js.batch_id,
|
|
429
|
-
js.batch_id_ref, js.packing_type, js.packing_size, js.uom, js.pack_qty, js.pallet_qty,
|
|
430
|
-
js.unit_price, js.manufacture_date
|
|
431
|
-
FROM
|
|
432
|
-
JSON_POPULATE_RECORDSET(NULL:: raw_arrival_notices, $1) js;
|
|
433
|
-
`,
|
|
434
|
-
[json_oi]
|
|
435
|
-
)
|
|
436
|
-
|
|
437
|
-
const insertResult: any[] = await trxMgr.query(`
|
|
438
|
-
SELECT * from raw_arrival_notices
|
|
439
|
-
`)
|
|
440
|
-
|
|
441
|
-
let validatedItems = await trxMgr.query(
|
|
442
|
-
`
|
|
443
|
-
WITH foo AS (
|
|
444
|
-
SELECT
|
|
445
|
-
an.name AS gan_name,
|
|
446
|
-
an.ref_no AS gan_ref_no,
|
|
447
|
-
raw.ref_no,
|
|
448
|
-
raw.ref_no_2,
|
|
449
|
-
raw.ref_no_3,
|
|
450
|
-
raw.eta_date,
|
|
451
|
-
raw.truck_no,
|
|
452
|
-
raw.own_transport,
|
|
453
|
-
raw.container,
|
|
454
|
-
raw.container_no,
|
|
455
|
-
raw.container_size,
|
|
456
|
-
raw.import_cargo,
|
|
457
|
-
raw.loose_item,
|
|
458
|
-
pr.id AS product_id,
|
|
459
|
-
pd.id AS product_detail_id,
|
|
460
|
-
raw.sku AS sku,
|
|
461
|
-
CASE WHEN pr.description NOT IN (NULL, '', '-') THEN CONCAT(pr.name, '(', pr.description, ')') ELSE pr.name END AS product_info,
|
|
462
|
-
raw.batch_id,
|
|
463
|
-
raw.batch_id_ref,
|
|
464
|
-
pd.packing_type,
|
|
465
|
-
pd.packing_size,
|
|
466
|
-
sum(raw.pack_qty) AS pack_qty,
|
|
467
|
-
sum(pd.uom_value) AS uom_value,
|
|
468
|
-
pd.uom,
|
|
469
|
-
sum(raw.pallet_qty) AS pallet_qty,
|
|
470
|
-
raw.unit_price,
|
|
471
|
-
raw.manufacture_date
|
|
472
|
-
FROM
|
|
473
|
-
raw_arrival_notices raw
|
|
474
|
-
LEFT JOIN temp_gan an ON raw.ref_no = an.ref_no
|
|
475
|
-
AND raw.ref_no_2 = an.ref_no_2
|
|
476
|
-
AND raw.ref_no_3 = an.ref_no_3
|
|
477
|
-
AND raw.eta_date::date = an.eta_date::date
|
|
478
|
-
AND raw.truck_no = an.truck_no
|
|
479
|
-
AND raw.own_transport = an.own_transport
|
|
480
|
-
AND raw.container = an.container
|
|
481
|
-
AND raw.container_no = an.container_no
|
|
482
|
-
AND raw.container_size = an.container_size
|
|
483
|
-
AND raw.loose_item = an.loose_item
|
|
484
|
-
AND raw.import_cargo = an.import_cargo
|
|
485
|
-
LEFT JOIN products pr ON LOWER(pr.sku) = LOWER(raw.sku)
|
|
486
|
-
LEFT JOIN product_details pd ON pr.id = pd.product_id
|
|
487
|
-
AND CASE WHEN raw.packing_type NOTNULL AND raw.packing_size NOTNULL AND raw.uom NOTNULL
|
|
488
|
-
THEN pd.packing_type = raw.packing_type AND pd.packing_size = raw.packing_size AND pd.uom = raw.uom
|
|
489
|
-
WHEN raw.packing_type NOTNULL AND raw.packing_size NOTNULL AND raw.uom ISNULL
|
|
490
|
-
THEN pd.packing_type = raw.packing_type AND pd.packing_size = raw.packing_size AND pd.is_default IS TRUE
|
|
491
|
-
WHEN raw.packing_type ISNULL AND raw.packing_size ISNULL AND raw.uom NOTNULL
|
|
492
|
-
THEN pd.uom = raw.uom AND pd.is_default IS TRUE ELSE pd.is_default IS TRUE
|
|
493
|
-
END
|
|
494
|
-
WHERE pr.bizplace_id = $1
|
|
495
|
-
GROUP BY raw.ref_no, raw.ref_no_2, raw.ref_no_3, raw.eta_date, raw.truck_no, raw.own_transport, raw.container, raw.container_no, raw.container_size, raw.import_cargo, raw.loose_item,
|
|
496
|
-
pr.id, pd.id, raw.sku, pr.name, pr.description, raw.batch_id, raw.batch_id_ref, raw.packing_type, raw.packing_size, raw.uom, raw.unit_price, raw.manufacture_date, an.ref_no, an.name
|
|
497
|
-
) SELECT foo.*,
|
|
498
|
-
CONCAT(COALESCE(ROUND(foo.uom_value:: numeric, 2), 0) * COALESCE(foo.pack_qty, 0), ' ', foo.uom) AS total_uom_value,
|
|
499
|
-
CASE WHEN foo.gan_ref_no NOTNULL THEN concat('order duplicated with ', foo.gan_name)
|
|
500
|
-
WHEN foo.manufacture_date > current_date THEN 'invalid manufacture date'
|
|
501
|
-
WHEN foo.product_id ISNULL OR foo.product_detail_id ISNULL OR foo.sku ISNULL THEN 'product not found'
|
|
502
|
-
WHEN foo.pack_qty ISNULL OR foo.pack_qty <= 0 THEN 'invalid pack qty'
|
|
503
|
-
WHEN foo.batch_id ISNULL THEN 'batch no. is required'
|
|
504
|
-
WHEN foo.ref_no ISNULL OR foo.ref_no = '' THEN 'ref no. is required'
|
|
505
|
-
WHEN foo.eta_date ISNULL THEN 'eta date is required'
|
|
506
|
-
WHEN foo.container_no NOTNULL AND foo.container_size ISNULL OR foo.container_no ISNULL AND foo.container_size NOTNULL THEN 'incomplete container information'
|
|
507
|
-
WHEN foo.unit_price < 0 THEN 'invalid unit price'
|
|
508
|
-
WHEN foo.pallet_qty < 0 THEN 'invalid pallet qty'
|
|
509
|
-
ELSE '' END AS error_msg
|
|
510
|
-
FROM foo
|
|
511
|
-
ORDER BY foo.ref_no, foo.ref_no_2, foo.ref_no_3, foo.sku
|
|
512
|
-
`,
|
|
513
|
-
[companyBizplace.id]
|
|
514
|
-
)
|
|
515
|
-
|
|
516
|
-
await trxMgr.query('DROP TABLE raw_arrival_notices, temp_gan')
|
|
517
|
-
|
|
518
|
-
return validatedItems.map(item => {
|
|
519
|
-
return {
|
|
520
|
-
refNo: item.ref_no,
|
|
521
|
-
refNo2: item.ref_no_2,
|
|
522
|
-
refNo3: item.ref_no_3,
|
|
523
|
-
etaDate: item.eta_date,
|
|
524
|
-
truckNo: item.truck_no,
|
|
525
|
-
ownTransport: !!item.own_transport,
|
|
526
|
-
container: item.container,
|
|
527
|
-
containerNo: item.container_no,
|
|
528
|
-
containerSize: item.container_size,
|
|
529
|
-
importCargo: !!item.import_cargo,
|
|
530
|
-
looseItem: !!item.loose_item,
|
|
531
|
-
productId: item.product_id,
|
|
532
|
-
productDetailId: item.product_detail_id,
|
|
533
|
-
sku: item.sku,
|
|
534
|
-
productInfo: item.product_info,
|
|
535
|
-
batchId: item.batch_id,
|
|
536
|
-
batchIdRef: item.batch_id_ref,
|
|
537
|
-
packingType: item.packing_type,
|
|
538
|
-
packingSize: item.packing_size,
|
|
539
|
-
uom: item.uom,
|
|
540
|
-
packQty: item.pack_qty,
|
|
541
|
-
uomValue: item.uom_value,
|
|
542
|
-
totalUomValue: item.total_uom_value,
|
|
543
|
-
palletQty: item.pallet_qty,
|
|
544
|
-
unitPrice: item.unit_price,
|
|
545
|
-
manufactureDate: item.manufacture_date,
|
|
546
|
-
errorMsg: item.error_msg
|
|
547
|
-
}
|
|
548
|
-
})
|
|
549
|
-
}
|