@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,765 +0,0 @@
|
|
|
1
|
-
import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
|
|
2
|
-
import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
|
|
3
|
-
import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
|
|
4
|
-
import { EntityManager, getConnection, In, IsNull, Repository } from 'typeorm'
|
|
5
|
-
|
|
6
|
-
import { Attachment, createAttachments, deleteAttachmentsByRef } from '@things-factory/attachment-base'
|
|
7
|
-
import { User } from '@things-factory/auth-base'
|
|
8
|
-
import { Bizplace, getPermittedBizplaces } from '@things-factory/biz-base'
|
|
9
|
-
import { generateId } from '@things-factory/id-rule-base'
|
|
10
|
-
import { Product, ProductBundle, ProductDetail } from '@things-factory/product-base'
|
|
11
|
-
import { Setting } from '@things-factory/setting-base'
|
|
12
|
-
import { Domain, getRepository } from '@things-factory/shell'
|
|
13
|
-
|
|
14
|
-
// import { Location } from '@things-factory/warehouse-base'
|
|
15
|
-
import { DraftReleaseGood, DraftReleaseGoodPatch, NewDraftReleaseGood, OrderProduct } from '../'
|
|
16
|
-
import {
|
|
17
|
-
ATTACHMENT_TYPE,
|
|
18
|
-
DRAFT_RELEASE_ORDER_STATUS,
|
|
19
|
-
ORDER_NUMBER_RULE_TYPE,
|
|
20
|
-
ORDER_NUMBER_SETTING_KEY,
|
|
21
|
-
ORDER_STATUS
|
|
22
|
-
} from '../../constants'
|
|
23
|
-
import { ValidationError } from '../../errors'
|
|
24
|
-
import { InventoryUtil, OrderNoGenerator } from '../../utils'
|
|
25
|
-
import { OrderProductPatch } from '../order-product/order-product-types'
|
|
26
|
-
import { ReleaseGood } from '../release-good/release-good'
|
|
27
|
-
import { bulkGenerateReleaseGood, confirmReleaseGood } from '../release-good/release-good-mutation'
|
|
28
|
-
import { bulkReleaseGoodsAvailableItemsFunction } from '../release-good/release-good-query'
|
|
29
|
-
import { ShippingOrder } from '../shipping-order/shipping-order'
|
|
30
|
-
import { ShippingOrderPatch } from '../shipping-order/shipping-order-types'
|
|
31
|
-
// import {
|
|
32
|
-
// checkArrivedNoticeFunction,
|
|
33
|
-
// confirmArrivalNoticeFunction,
|
|
34
|
-
// generateArrivalNoticeFunction,
|
|
35
|
-
// receiveArrivalNoticeFunction
|
|
36
|
-
// } from '../arrival-notice/arrival-notice-mutation'
|
|
37
|
-
import { getDraftReleaseGoodFunction } from './draft-release-good-query'
|
|
38
|
-
|
|
39
|
-
@Resolver(DraftReleaseGood)
|
|
40
|
-
export class DraftReleaseGoodMutation {
|
|
41
|
-
@Directive('@privilege(category: "order_customer", privilege: "mutation")')
|
|
42
|
-
@Directive('@transaction')
|
|
43
|
-
@Mutation(returns => DraftReleaseGood)
|
|
44
|
-
async upsertDraftReleaseGood(
|
|
45
|
-
@Ctx() context: ResolverContext,
|
|
46
|
-
@Arg('draftReleaseGood', type => DraftReleaseGoodPatch) draftReleaseGood: DraftReleaseGoodPatch,
|
|
47
|
-
@Arg('orderProducts', type => [OrderProductPatch]) orderProducts: [OrderProductPatch],
|
|
48
|
-
@Arg('files', type => [GraphQLUpload], { nullable: true }) files?: FileUpload[],
|
|
49
|
-
@Arg('shippingOrder', type => ShippingOrderPatch, { nullable: true }) shippingOrder?: ShippingOrderPatch
|
|
50
|
-
): Promise<DraftReleaseGood> {
|
|
51
|
-
try {
|
|
52
|
-
const { tx } = context.state
|
|
53
|
-
const createdDraftReleaseGood: DraftReleaseGood = await upsertDraftReleaseGoodFunction(
|
|
54
|
-
null,
|
|
55
|
-
draftReleaseGood,
|
|
56
|
-
orderProducts,
|
|
57
|
-
shippingOrder,
|
|
58
|
-
files,
|
|
59
|
-
context,
|
|
60
|
-
tx
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
return createdDraftReleaseGood
|
|
64
|
-
} catch (error) {
|
|
65
|
-
throw error
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
@Directive('@transaction')
|
|
70
|
-
@Mutation(returns => DraftReleaseGood, { description: 'To create new DraftReleaseGood' })
|
|
71
|
-
async createDraftReleaseGood(
|
|
72
|
-
@Arg('draftReleaseGood', type => NewDraftReleaseGood, { nullable: true }) draftReleaseGood: NewDraftReleaseGood,
|
|
73
|
-
@Ctx() context: ResolverContext
|
|
74
|
-
): Promise<DraftReleaseGood> {
|
|
75
|
-
const { domain, user, tx } = context.state
|
|
76
|
-
|
|
77
|
-
let drg = await tx.getRepository(DraftReleaseGood).save({
|
|
78
|
-
...(draftReleaseGood as any),
|
|
79
|
-
domain,
|
|
80
|
-
status: 'INSUFFICIENT',
|
|
81
|
-
creator: user,
|
|
82
|
-
updater: user
|
|
83
|
-
})
|
|
84
|
-
|
|
85
|
-
// add order products
|
|
86
|
-
|
|
87
|
-
return drg
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
@Directive('@transaction')
|
|
91
|
-
@Mutation(returns => DraftReleaseGood, { description: 'To modify DraftReleaseGood information' })
|
|
92
|
-
async updateDraftReleaseGood(
|
|
93
|
-
@Arg('id') id: string,
|
|
94
|
-
@Arg('patch', type => DraftReleaseGoodPatch) patch: DraftReleaseGoodPatch,
|
|
95
|
-
@Ctx() context: ResolverContext
|
|
96
|
-
): Promise<DraftReleaseGood> {
|
|
97
|
-
const { domain, user, tx } = context.state
|
|
98
|
-
|
|
99
|
-
const repository = tx.getRepository(DraftReleaseGood)
|
|
100
|
-
const draftReleaseGood = await repository.findOne({
|
|
101
|
-
where: { domain: { id: domain.id }, id }
|
|
102
|
-
})
|
|
103
|
-
|
|
104
|
-
return await repository.save({
|
|
105
|
-
...draftReleaseGood,
|
|
106
|
-
...(patch as any),
|
|
107
|
-
updater: user
|
|
108
|
-
})
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
@Directive('@transaction')
|
|
112
|
-
@Mutation(returns => [DraftReleaseGood], { description: "To modify multiple DraftReleaseGoods' information" })
|
|
113
|
-
async updateMultipleDraftReleaseGood(
|
|
114
|
-
@Arg('patches', type => [DraftReleaseGoodPatch]) patches: DraftReleaseGoodPatch[],
|
|
115
|
-
@Ctx() context: ResolverContext
|
|
116
|
-
): Promise<DraftReleaseGood[]> {
|
|
117
|
-
const { domain, user, tx } = context.state
|
|
118
|
-
|
|
119
|
-
let results = []
|
|
120
|
-
const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
|
|
121
|
-
const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
|
|
122
|
-
const draftReleaseGoodRepo = tx.getRepository(DraftReleaseGood)
|
|
123
|
-
|
|
124
|
-
if (_createRecords.length > 0) {
|
|
125
|
-
for (let i = 0; i < _createRecords.length; i++) {
|
|
126
|
-
const newRecord = _createRecords[i]
|
|
127
|
-
|
|
128
|
-
const result = await draftReleaseGoodRepo.save({
|
|
129
|
-
...(newRecord as any),
|
|
130
|
-
domain,
|
|
131
|
-
creator: user,
|
|
132
|
-
updater: user
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
results.push({ ...result, cuFlag: '+' })
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
if (_updateRecords.length > 0) {
|
|
140
|
-
for (let i = 0; i < _updateRecords.length; i++) {
|
|
141
|
-
const newRecord = _updateRecords[i]
|
|
142
|
-
const draftReleaseGood = await draftReleaseGoodRepo.findOneBy({ id: newRecord.id })
|
|
143
|
-
|
|
144
|
-
const result = await draftReleaseGoodRepo.save({
|
|
145
|
-
...draftReleaseGood,
|
|
146
|
-
...(newRecord as any),
|
|
147
|
-
updater: user
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
results.push({ ...result, cuFlag: 'M' })
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
return results
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
@Directive('@transaction')
|
|
158
|
-
@Mutation(returns => Boolean, { description: 'To delete DraftReleaseGood' })
|
|
159
|
-
async deleteDraftReleaseGood(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
|
160
|
-
const { domain, tx } = context.state
|
|
161
|
-
|
|
162
|
-
await tx.getRepository(DraftReleaseGood).delete({ domain: { id: domain.id }, id })
|
|
163
|
-
return true
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
@Directive('@transaction')
|
|
167
|
-
@Mutation(returns => Boolean, { description: 'To delete multiple draftReleaseGoods' })
|
|
168
|
-
async deleteDraftReleaseGoods(
|
|
169
|
-
@Arg('ids', type => [String]) ids: string[],
|
|
170
|
-
@Ctx() context: ResolverContext
|
|
171
|
-
): Promise<boolean> {
|
|
172
|
-
const { domain, tx } = context.state
|
|
173
|
-
|
|
174
|
-
await tx.getRepository(DraftReleaseGood).delete({
|
|
175
|
-
domain: { id: domain.id },
|
|
176
|
-
id: In(ids)
|
|
177
|
-
})
|
|
178
|
-
|
|
179
|
-
return true
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
@Directive('@privilege(category: "order_customer", privilege: "mutation")')
|
|
183
|
-
@Directive('@transaction')
|
|
184
|
-
@Mutation(returns => Boolean, { description: 'To generate Release Goods from Draft' })
|
|
185
|
-
async generateReleaseGoodsFromDraft(
|
|
186
|
-
@Ctx() context: ResolverContext,
|
|
187
|
-
@Arg('ids', type => [String]) ids: string[]
|
|
188
|
-
// @Arg('rawReleaseGoods', type => [NewReleaseGood], { nullable: true }) rawReleaseGoods: NewReleaseGood[],
|
|
189
|
-
// @Arg('bizplaceId', type => String) bizplaceId: string
|
|
190
|
-
): Promise<boolean> {
|
|
191
|
-
const { domain, user, tx } = context.state
|
|
192
|
-
|
|
193
|
-
const updatableDraftOrders = await tx.getRepository(DraftReleaseGood).find({
|
|
194
|
-
where: {
|
|
195
|
-
domain: { id: domain.id },
|
|
196
|
-
id: In(ids),
|
|
197
|
-
status: DRAFT_RELEASE_ORDER_STATUS.DRAFT
|
|
198
|
-
},
|
|
199
|
-
relations: [
|
|
200
|
-
'orderProducts',
|
|
201
|
-
'orderProducts.product',
|
|
202
|
-
'orderProducts.productBundle',
|
|
203
|
-
'shippingOrder',
|
|
204
|
-
'bizplace',
|
|
205
|
-
'domain',
|
|
206
|
-
'creator',
|
|
207
|
-
'updater'
|
|
208
|
-
]
|
|
209
|
-
})
|
|
210
|
-
if (updatableDraftOrders.length > 0) {
|
|
211
|
-
let createdReleaseGoods: ReleaseGood[] = []
|
|
212
|
-
const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
|
|
213
|
-
|
|
214
|
-
const roNoSetting: Setting = await settingRepo.findOne({
|
|
215
|
-
where: {
|
|
216
|
-
domain: { id: domain.id },
|
|
217
|
-
name: ORDER_NUMBER_SETTING_KEY.RO_NUMBER_RULE
|
|
218
|
-
}
|
|
219
|
-
})
|
|
220
|
-
|
|
221
|
-
for (let index = 0; index < updatableDraftOrders.length; index++) {
|
|
222
|
-
await getConnection().transaction(async (parentTx: EntityManager) => {
|
|
223
|
-
const draftOrder = updatableDraftOrders[index]
|
|
224
|
-
|
|
225
|
-
let foundPermittedBizplace: Bizplace
|
|
226
|
-
let companyBizplace: Bizplace
|
|
227
|
-
|
|
228
|
-
if (draftOrder?.bizplace?.id) {
|
|
229
|
-
foundPermittedBizplace = await parentTx.getRepository(Bizplace).findOne({
|
|
230
|
-
where: { id: draftOrder.bizplace.id },
|
|
231
|
-
relations: ['company', 'company.domain']
|
|
232
|
-
})
|
|
233
|
-
const companyDomain: Domain = foundPermittedBizplace.company.domain
|
|
234
|
-
companyBizplace = await parentTx
|
|
235
|
-
.getRepository(Bizplace)
|
|
236
|
-
.findOne({ where: { domain: { id: companyDomain.id } } })
|
|
237
|
-
} else {
|
|
238
|
-
return false
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
const bizplaces: Bizplace[] = [foundPermittedBizplace, companyBizplace]
|
|
242
|
-
|
|
243
|
-
let productInventory = await InventoryUtil.bizplaceProductInventory(
|
|
244
|
-
bizplaces,
|
|
245
|
-
{
|
|
246
|
-
filters: [
|
|
247
|
-
{
|
|
248
|
-
name: 'productId',
|
|
249
|
-
operator: 'in',
|
|
250
|
-
value: [
|
|
251
|
-
...draftOrder.orderProducts
|
|
252
|
-
.filter(itm => itm?.product)
|
|
253
|
-
.map(itm => {
|
|
254
|
-
return itm.product.id
|
|
255
|
-
}),
|
|
256
|
-
...draftOrder.orderProducts
|
|
257
|
-
.filter(itm => itm?.productBundle)
|
|
258
|
-
.map(itm => {
|
|
259
|
-
return itm.productBundle.id
|
|
260
|
-
})
|
|
261
|
-
]
|
|
262
|
-
}
|
|
263
|
-
]
|
|
264
|
-
},
|
|
265
|
-
context,
|
|
266
|
-
parentTx
|
|
267
|
-
)
|
|
268
|
-
|
|
269
|
-
draftOrder.orderProducts = draftOrder.orderProducts.map(itm => {
|
|
270
|
-
let foundProductInv = productInventory.items.find(
|
|
271
|
-
i =>
|
|
272
|
-
(i.productId == itm?.product?.id || i.productId == itm?.productBundle?.id) &&
|
|
273
|
-
i.packingType == itm.packingType &&
|
|
274
|
-
i.packingSize == itm.packingSize &&
|
|
275
|
-
i.uom == itm.uom &&
|
|
276
|
-
itm.releaseQty <= i.remainQty
|
|
277
|
-
)
|
|
278
|
-
return {
|
|
279
|
-
...itm,
|
|
280
|
-
releaseUomValue: (foundProductInv.remainUomValue / foundProductInv.remainQty) * itm.releaseQty,
|
|
281
|
-
status: foundProductInv ? 'suffice' : 'insufficient'
|
|
282
|
-
}
|
|
283
|
-
})
|
|
284
|
-
|
|
285
|
-
let insufficient = draftOrder.orderProducts.find(op => op.status == 'insufficient')
|
|
286
|
-
if (!insufficient) {
|
|
287
|
-
//create RO
|
|
288
|
-
let releaseGood = { ...draftOrder }
|
|
289
|
-
delete releaseGood.id
|
|
290
|
-
delete releaseGood.name
|
|
291
|
-
delete releaseGood.createdAt
|
|
292
|
-
delete (releaseGood as any).createdBy
|
|
293
|
-
delete releaseGood.updatedAt
|
|
294
|
-
delete (releaseGood as any).updatedBy
|
|
295
|
-
|
|
296
|
-
let orderInventories = []
|
|
297
|
-
|
|
298
|
-
for (let index = 0; index < draftOrder.orderProducts.length; index++) {
|
|
299
|
-
const itm: Partial<OrderProduct> = draftOrder.orderProducts[index]
|
|
300
|
-
let data = []
|
|
301
|
-
if (itm.productBundle) {
|
|
302
|
-
let bundle: ProductBundle = await parentTx.getRepository(ProductBundle).findOne({
|
|
303
|
-
where: { id: itm.productBundle.id },
|
|
304
|
-
relations: [
|
|
305
|
-
'productBundleSettings',
|
|
306
|
-
'productBundleSettings.productDetail',
|
|
307
|
-
'productBundleSettings.product'
|
|
308
|
-
]
|
|
309
|
-
})
|
|
310
|
-
|
|
311
|
-
for (let index2 = 0; index2 < bundle.productBundleSettings.length; index2++) {
|
|
312
|
-
const objProductBundleSetting = bundle.productBundleSettings[index2]
|
|
313
|
-
data.push({
|
|
314
|
-
sku: objProductBundleSetting.product.sku,
|
|
315
|
-
packingType: objProductBundleSetting.productDetail.packingType,
|
|
316
|
-
packingSize: objProductBundleSetting.productDetail.packingSize,
|
|
317
|
-
uom: objProductBundleSetting.productDetail.uom,
|
|
318
|
-
releaseQty: objProductBundleSetting.bundleQty * itm.releaseQty,
|
|
319
|
-
assignedQty: undefined,
|
|
320
|
-
assignedUomValue: undefined,
|
|
321
|
-
releaseUomValue: objProductBundleSetting.bundleQty * itm.releaseQty * itm.releaseUomValue
|
|
322
|
-
})
|
|
323
|
-
}
|
|
324
|
-
} else {
|
|
325
|
-
data = [
|
|
326
|
-
{
|
|
327
|
-
sku: itm.product.sku,
|
|
328
|
-
packingType: itm.packingType,
|
|
329
|
-
packingSize: itm.packingSize,
|
|
330
|
-
uom: itm.uom,
|
|
331
|
-
releaseQty: itm.releaseQty,
|
|
332
|
-
assignedQty: undefined,
|
|
333
|
-
assignedUomValue: undefined,
|
|
334
|
-
releaseUomValue: itm.releaseUomValue
|
|
335
|
-
}
|
|
336
|
-
]
|
|
337
|
-
}
|
|
338
|
-
|
|
339
|
-
data.forEach(data => {
|
|
340
|
-
let existingOI = orderInventories.find(
|
|
341
|
-
itm =>
|
|
342
|
-
itm.sku == data.sku &&
|
|
343
|
-
itm.packingType == data.packingType &&
|
|
344
|
-
itm.packingSize == data.packingSize &&
|
|
345
|
-
itm.uom == data.uom
|
|
346
|
-
)
|
|
347
|
-
|
|
348
|
-
if (existingOI) {
|
|
349
|
-
existingOI.releaseQty = existingOI.releaseQty + data.releaseQty
|
|
350
|
-
existingOI.releaseUomValue = existingOI.releaseUomValue + data.uomValue
|
|
351
|
-
existingOI.uomValue = existingOI.uomValue + data.uomValue
|
|
352
|
-
} else {
|
|
353
|
-
orderInventories.push({ ...data, orderProduct: itm })
|
|
354
|
-
}
|
|
355
|
-
})
|
|
356
|
-
}
|
|
357
|
-
try {
|
|
358
|
-
await getConnection().transaction(async (childTx: EntityManager) => {
|
|
359
|
-
let availableItems: any[] = await bulkReleaseGoodsAvailableItemsFunction(
|
|
360
|
-
orderInventories,
|
|
361
|
-
draftOrder.bizplace.id,
|
|
362
|
-
context,
|
|
363
|
-
childTx
|
|
364
|
-
)
|
|
365
|
-
if (availableItems.some(item => !item.releaseQty || item.releaseQty > item.assignedQty)) {
|
|
366
|
-
throw new ValidationError({
|
|
367
|
-
...ValidationError.ERROR_CODES.INSUFFICIENT_STOCK,
|
|
368
|
-
detail: { data: JSON.stringify(availableItems) }
|
|
369
|
-
})
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
// update orderInventories if availableItems are valid
|
|
373
|
-
;(releaseGood as any).orderInventories = availableItems.map(itm => {
|
|
374
|
-
return {
|
|
375
|
-
...itm,
|
|
376
|
-
releaseQty: itm.releaseQty,
|
|
377
|
-
releaseUomValue: itm.releaseUomValue,
|
|
378
|
-
uomValue: itm.uomValue
|
|
379
|
-
}
|
|
380
|
-
})
|
|
381
|
-
let createdReleaseGood: ReleaseGood = await bulkGenerateReleaseGood(
|
|
382
|
-
releaseGood,
|
|
383
|
-
releaseGood.bizplace.id,
|
|
384
|
-
roNoSetting,
|
|
385
|
-
domain,
|
|
386
|
-
user,
|
|
387
|
-
childTx
|
|
388
|
-
)
|
|
389
|
-
await childTx
|
|
390
|
-
.getRepository(DraftReleaseGood)
|
|
391
|
-
.update(
|
|
392
|
-
{ id: draftOrder.id },
|
|
393
|
-
{ releaseGood: createdReleaseGood, status: DRAFT_RELEASE_ORDER_STATUS.SUBMITTED }
|
|
394
|
-
)
|
|
395
|
-
createdReleaseGood = await confirmReleaseGood(createdReleaseGood.name, context, childTx)
|
|
396
|
-
})
|
|
397
|
-
} catch (error) {
|
|
398
|
-
console.error(error)
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
})
|
|
402
|
-
}
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
return true
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
export async function upsertDraftReleaseGoodFunction(
|
|
410
|
-
_: any,
|
|
411
|
-
draftReleaseGood: any,
|
|
412
|
-
orderProducts: OrderProductPatch[],
|
|
413
|
-
shippingOrder: any,
|
|
414
|
-
files: FileUpload[],
|
|
415
|
-
context: any,
|
|
416
|
-
tx?: EntityManager
|
|
417
|
-
): Promise<DraftReleaseGood> {
|
|
418
|
-
if (!draftReleaseGood.id) {
|
|
419
|
-
draftReleaseGood = await createDraftReleaseGoodFunction(
|
|
420
|
-
_,
|
|
421
|
-
draftReleaseGood,
|
|
422
|
-
orderProducts,
|
|
423
|
-
shippingOrder,
|
|
424
|
-
files,
|
|
425
|
-
context,
|
|
426
|
-
tx
|
|
427
|
-
)
|
|
428
|
-
} else {
|
|
429
|
-
draftReleaseGood = await updateDraftReleaseGoodFunction(
|
|
430
|
-
_,
|
|
431
|
-
draftReleaseGood,
|
|
432
|
-
orderProducts,
|
|
433
|
-
shippingOrder,
|
|
434
|
-
files,
|
|
435
|
-
context,
|
|
436
|
-
tx
|
|
437
|
-
)
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
return draftReleaseGood
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
export async function createDraftReleaseGoodFunction(
|
|
444
|
-
_: any,
|
|
445
|
-
draftReleaseGood: any,
|
|
446
|
-
orderProducts: OrderProductPatch[],
|
|
447
|
-
shippingOrder: any,
|
|
448
|
-
files: FileUpload[],
|
|
449
|
-
context: any,
|
|
450
|
-
tx?: EntityManager
|
|
451
|
-
): Promise<DraftReleaseGood> {
|
|
452
|
-
const { domain, user } = context.state
|
|
453
|
-
|
|
454
|
-
let myBizplace: Bizplace
|
|
455
|
-
let orderNo: string = ''
|
|
456
|
-
let arrError: string[] = []
|
|
457
|
-
|
|
458
|
-
const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
|
|
459
|
-
|
|
460
|
-
if (draftReleaseGood?.bizplace?.id) {
|
|
461
|
-
const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)
|
|
462
|
-
let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == draftReleaseGood.bizplace.id)
|
|
463
|
-
|
|
464
|
-
if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)
|
|
465
|
-
|
|
466
|
-
draftReleaseGood.bizplace = foundPermittedBizplace
|
|
467
|
-
} else {
|
|
468
|
-
arrError.push(`No bizplace was selected`)
|
|
469
|
-
}
|
|
470
|
-
|
|
471
|
-
if (arrError.length > 0) {
|
|
472
|
-
throw new Error(arrError.join(', '))
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
// // find DRO number rule setting
|
|
476
|
-
const droNoSetting: Setting = await settingRepo.findOne({
|
|
477
|
-
where: {
|
|
478
|
-
domain: { id: domain.id },
|
|
479
|
-
name: ORDER_NUMBER_SETTING_KEY.DO_NUMBER_RULE
|
|
480
|
-
}
|
|
481
|
-
})
|
|
482
|
-
|
|
483
|
-
if (droNoSetting) {
|
|
484
|
-
orderNo = await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.DRO_NUMBER, seed: {} })
|
|
485
|
-
} else {
|
|
486
|
-
orderNo = OrderNoGenerator.draftReleaseGood()
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
// // 1. Create shipping order if found
|
|
490
|
-
if (shippingOrder) {
|
|
491
|
-
let newShippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).save({
|
|
492
|
-
...shippingOrder,
|
|
493
|
-
name: OrderNoGenerator.shippingOrder(),
|
|
494
|
-
domain,
|
|
495
|
-
bizplace: draftReleaseGood.bizplace,
|
|
496
|
-
status: ORDER_STATUS.PENDING,
|
|
497
|
-
creator: user,
|
|
498
|
-
updater: user
|
|
499
|
-
})
|
|
500
|
-
draftReleaseGood.shippingOrder = newShippingOrder
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
// // 2. Create draft release good
|
|
504
|
-
const createdDraftReleaseGood: DraftReleaseGood = await tx.getRepository(DraftReleaseGood).save({
|
|
505
|
-
...draftReleaseGood,
|
|
506
|
-
name: orderNo,
|
|
507
|
-
status: DRAFT_RELEASE_ORDER_STATUS.DRAFT,
|
|
508
|
-
domain,
|
|
509
|
-
creator: user,
|
|
510
|
-
updater: user
|
|
511
|
-
})
|
|
512
|
-
|
|
513
|
-
// // 3. Create draft release good product
|
|
514
|
-
await upsertDraftReleaseGoodProducts(
|
|
515
|
-
domain,
|
|
516
|
-
draftReleaseGood.bizplace,
|
|
517
|
-
createdDraftReleaseGood,
|
|
518
|
-
orderProducts,
|
|
519
|
-
user,
|
|
520
|
-
tx
|
|
521
|
-
)
|
|
522
|
-
|
|
523
|
-
// // 4. Create Attachments
|
|
524
|
-
if (files?.length) {
|
|
525
|
-
const attachments: Partial<Attachment>[] = files.map(attachment => {
|
|
526
|
-
return {
|
|
527
|
-
file: attachment,
|
|
528
|
-
refType: ATTACHMENT_TYPE.DGRN,
|
|
529
|
-
refBy: createdDraftReleaseGood.id,
|
|
530
|
-
category: ATTACHMENT_TYPE.DGRN /* TODO use refType */
|
|
531
|
-
}
|
|
532
|
-
})
|
|
533
|
-
await createAttachments(_, { attachments }, context)
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
return createdDraftReleaseGood
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
export async function updateDraftReleaseGoodFunction(
|
|
540
|
-
_: any,
|
|
541
|
-
draftReleaseGood: any,
|
|
542
|
-
orderProducts: OrderProductPatch[],
|
|
543
|
-
shippingOrder: any,
|
|
544
|
-
files: FileUpload[],
|
|
545
|
-
context: any,
|
|
546
|
-
tx?: EntityManager
|
|
547
|
-
): Promise<DraftReleaseGood> {
|
|
548
|
-
const { domain, user } = context.state
|
|
549
|
-
|
|
550
|
-
let existingDraftReleaseGood: any = await getDraftReleaseGoodFunction(_, draftReleaseGood.name, context, tx)
|
|
551
|
-
|
|
552
|
-
if (draftReleaseGood?.bizplace?.id) {
|
|
553
|
-
const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)
|
|
554
|
-
let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == draftReleaseGood.bizplace.id)
|
|
555
|
-
|
|
556
|
-
if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)
|
|
557
|
-
|
|
558
|
-
draftReleaseGood.bizplace = foundPermittedBizplace
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
if (shippingOrder) {
|
|
562
|
-
// case to update existing shippingOrder
|
|
563
|
-
if (existingDraftReleaseGood.shippingOrder) {
|
|
564
|
-
await tx.getRepository(ShippingOrder).update(existingDraftReleaseGood.shippingOrder.id, shippingOrder)
|
|
565
|
-
} else {
|
|
566
|
-
let newShippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).save({
|
|
567
|
-
...shippingOrder,
|
|
568
|
-
name: OrderNoGenerator.shippingOrder(),
|
|
569
|
-
domain,
|
|
570
|
-
bizplace: draftReleaseGood.bizplace,
|
|
571
|
-
status: ORDER_STATUS.PENDING,
|
|
572
|
-
creator: user,
|
|
573
|
-
updater: user
|
|
574
|
-
})
|
|
575
|
-
draftReleaseGood.shippingOrder = newShippingOrder
|
|
576
|
-
}
|
|
577
|
-
} else {
|
|
578
|
-
// case to delete existing shippingOrder
|
|
579
|
-
if (existingDraftReleaseGood.shippingOrder) {
|
|
580
|
-
await tx.getRepository(ShippingOrder).delete(existingDraftReleaseGood.shippingOrder)
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
// // 1. Update draft release good
|
|
585
|
-
const updateDraftReleaseGood: DraftReleaseGood = await tx.getRepository(DraftReleaseGood).save({
|
|
586
|
-
...existingDraftReleaseGood,
|
|
587
|
-
...draftReleaseGood,
|
|
588
|
-
domain,
|
|
589
|
-
creator: existingDraftReleaseGood.creator,
|
|
590
|
-
updater: user
|
|
591
|
-
})
|
|
592
|
-
|
|
593
|
-
// // 2. Update draft release good product
|
|
594
|
-
await upsertDraftReleaseGoodProducts(domain, draftReleaseGood.bizplace, draftReleaseGood, orderProducts, user, tx)
|
|
595
|
-
|
|
596
|
-
// // 3. Remove Purchase Order Attachment
|
|
597
|
-
const foundAttachments: Attachment[] = await getRepository(Attachment).find({
|
|
598
|
-
where: {
|
|
599
|
-
domain: { id: domain.id },
|
|
600
|
-
refBy: draftReleaseGood.id,
|
|
601
|
-
category: ATTACHMENT_TYPE.DGRN
|
|
602
|
-
}
|
|
603
|
-
})
|
|
604
|
-
|
|
605
|
-
// // 4. Remove All Attachment
|
|
606
|
-
if (foundAttachments?.length) {
|
|
607
|
-
await deleteAttachmentsByRef(_, { refBys: foundAttachments.map(file => file.refBy) }, context)
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
// // 5. Add New Attachment
|
|
611
|
-
if (files?.length > 0) {
|
|
612
|
-
const attachments: Partial<Attachment>[] = files.map(attachment => {
|
|
613
|
-
return {
|
|
614
|
-
file: attachment,
|
|
615
|
-
refType: ATTACHMENT_TYPE.DGRN,
|
|
616
|
-
refBy: updateDraftReleaseGood.id,
|
|
617
|
-
category: ATTACHMENT_TYPE.DGRN /* TODO use refType */
|
|
618
|
-
}
|
|
619
|
-
})
|
|
620
|
-
await createAttachments(_, { attachments }, context)
|
|
621
|
-
}
|
|
622
|
-
|
|
623
|
-
return existingDraftReleaseGood
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
export async function upsertDraftReleaseGoodProducts(
|
|
627
|
-
domain: Domain,
|
|
628
|
-
bizplace: Bizplace,
|
|
629
|
-
draftReleaseGood: DraftReleaseGood,
|
|
630
|
-
orderProductsPatch: OrderProductPatch[],
|
|
631
|
-
user: User,
|
|
632
|
-
tx?: EntityManager
|
|
633
|
-
): Promise<void> {
|
|
634
|
-
try {
|
|
635
|
-
let orderProducts: OrderProduct[] = []
|
|
636
|
-
|
|
637
|
-
const draftReleaseGoodRepo: Repository<DraftReleaseGood> =
|
|
638
|
-
tx?.getRepository(DraftReleaseGood) || getRepository(DraftReleaseGood)
|
|
639
|
-
const bizplaceRepo: Repository<Bizplace> = tx?.getRepository(Bizplace) || getRepository(Bizplace)
|
|
640
|
-
const orderProductRepo: Repository<OrderProduct> = tx?.getRepository(OrderProduct) || getRepository(OrderProduct)
|
|
641
|
-
const productRepo: Repository<Product> = tx?.getRepository(Product) || getRepository(Product)
|
|
642
|
-
const productBundleRepo: Repository<ProductBundle> =
|
|
643
|
-
tx?.getRepository(ProductBundle) || getRepository(ProductBundle)
|
|
644
|
-
|
|
645
|
-
draftReleaseGood = (await draftReleaseGoodRepo.findOne({
|
|
646
|
-
where: { id: draftReleaseGood.id },
|
|
647
|
-
relations: [
|
|
648
|
-
'orderProducts',
|
|
649
|
-
'orderProducts.product',
|
|
650
|
-
'orderProducts.productBundle',
|
|
651
|
-
'orderProducts.creator',
|
|
652
|
-
'orderProducts.updater'
|
|
653
|
-
]
|
|
654
|
-
})) as any
|
|
655
|
-
|
|
656
|
-
// Remove all existing order products that do not exist in current input
|
|
657
|
-
let removeOP = draftReleaseGood.orderProducts.filter(
|
|
658
|
-
existingOP => orderProductsPatch.filter(inOP => inOP.id == existingOP.id).length == 0
|
|
659
|
-
)
|
|
660
|
-
// removeOP.forEach(async op => {
|
|
661
|
-
// await orderProductRepo.delete(op)
|
|
662
|
-
// })
|
|
663
|
-
|
|
664
|
-
if (removeOP.length > 0) await orderProductRepo.delete(removeOP.map(itm => itm.id))
|
|
665
|
-
|
|
666
|
-
bizplace = await bizplaceRepo.findOne({
|
|
667
|
-
where: { id: bizplace.id },
|
|
668
|
-
relations: ['domain', 'company', 'company.domain']
|
|
669
|
-
})
|
|
670
|
-
|
|
671
|
-
orderProducts = await Promise.all(
|
|
672
|
-
orderProductsPatch.map(async (op: any) => {
|
|
673
|
-
if (!op?.id) delete op.id
|
|
674
|
-
|
|
675
|
-
const customerCompanyDomain: Domain = bizplace.company.domain
|
|
676
|
-
let product: Product = null
|
|
677
|
-
let productBundle: ProductBundle = null
|
|
678
|
-
let existingOP = draftReleaseGood.orderProducts.find(existOP => existOP.id == op.id)
|
|
679
|
-
|
|
680
|
-
let updatePatch = {
|
|
681
|
-
...existingOP,
|
|
682
|
-
...op,
|
|
683
|
-
domain,
|
|
684
|
-
batchId: '',
|
|
685
|
-
packQty: 0,
|
|
686
|
-
actualPackQty: 0,
|
|
687
|
-
palletQty: 0,
|
|
688
|
-
actualPalletQty: 0,
|
|
689
|
-
bizplace: bizplace,
|
|
690
|
-
name: op?.id ? op.name : OrderNoGenerator.orderProduct(),
|
|
691
|
-
draftReleaseGood: draftReleaseGood,
|
|
692
|
-
status: draftReleaseGood.status,
|
|
693
|
-
creator: op?.id ? op.creator : user,
|
|
694
|
-
updater: user
|
|
695
|
-
}
|
|
696
|
-
|
|
697
|
-
if (op?.product?.id) {
|
|
698
|
-
product = await productRepo.findOne({
|
|
699
|
-
where: { domain: { id: customerCompanyDomain.id }, id: op.product.id }
|
|
700
|
-
})
|
|
701
|
-
updatePatch['product'] = product || undefined
|
|
702
|
-
|
|
703
|
-
if (!product) {
|
|
704
|
-
productBundle = await productBundleRepo.findOne({
|
|
705
|
-
where: { domain: { id: customerCompanyDomain.id }, id: op.product.id }
|
|
706
|
-
})
|
|
707
|
-
updatePatch['productBundle'] = productBundle || undefined
|
|
708
|
-
}
|
|
709
|
-
|
|
710
|
-
if (!product && !productBundle) throw new Error(`product not found`)
|
|
711
|
-
} else {
|
|
712
|
-
if (existingOP) {
|
|
713
|
-
product = existingOP.product
|
|
714
|
-
productBundle = existingOP.productBundle
|
|
715
|
-
updatePatch['product'] = existingOP.product || undefined
|
|
716
|
-
updatePatch['productBundle'] = existingOP.productBundle || undefined
|
|
717
|
-
} else {
|
|
718
|
-
product = await productRepo.findOne({
|
|
719
|
-
where: { domain: { id: customerCompanyDomain.id }, sku: op.product.sku, deletedAt: IsNull() },
|
|
720
|
-
relations: ['productDetails']
|
|
721
|
-
})
|
|
722
|
-
if (product) {
|
|
723
|
-
const productDetails: ProductDetail[] = product.productDetails
|
|
724
|
-
let selectedProductDetail: ProductDetail[]
|
|
725
|
-
if (op?.product?.packingType) {
|
|
726
|
-
selectedProductDetail = productDetails.filter(pd => pd.packingType == op.product.packingType)
|
|
727
|
-
} else {
|
|
728
|
-
selectedProductDetail = productDetails.filter(pd => pd.isDefault)
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
product.packingType = selectedProductDetail[0].packingType
|
|
732
|
-
product.primaryUnit = selectedProductDetail[0].uom
|
|
733
|
-
product.primaryValue = selectedProductDetail[0].uomValue
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
updatePatch['product'] = product || undefined
|
|
737
|
-
|
|
738
|
-
if (!product) {
|
|
739
|
-
productBundle = await productBundleRepo.findOne({
|
|
740
|
-
where: { domain: { id: customerCompanyDomain.id }, sku: op.product.sku }
|
|
741
|
-
})
|
|
742
|
-
updatePatch['productBundle'] = productBundle || undefined
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
if (!product && !productBundle) throw new Error(`product not found`)
|
|
746
|
-
}
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
updatePatch['packingType'] = op?.packingType
|
|
750
|
-
? op.packingType
|
|
751
|
-
: product?.packingType
|
|
752
|
-
? product.packingType
|
|
753
|
-
: productBundle.packingType
|
|
754
|
-
updatePatch['uom'] = op?.uom ? op.uom : product?.primaryUnit ? product.primaryUnit : 'UNIT'
|
|
755
|
-
updatePatch['uomValue'] = op?.uomValue ? op.uomValue : product?.primaryValue ? product.primaryValue : 0
|
|
756
|
-
|
|
757
|
-
return updatePatch
|
|
758
|
-
})
|
|
759
|
-
)
|
|
760
|
-
|
|
761
|
-
await orderProductRepo.save(orderProducts)
|
|
762
|
-
} catch (error) {
|
|
763
|
-
throw error
|
|
764
|
-
}
|
|
765
|
-
}
|