@things-factory/sales-base 8.0.3 → 8.0.6
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,458 +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, 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, ContactPoint, getPermittedBizplaces } from '@things-factory/biz-base'
|
|
9
|
-
import { generateId } from '@things-factory/id-rule-base'
|
|
10
|
-
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
11
|
-
import { Setting } from '@things-factory/setting-base'
|
|
12
|
-
import { Domain, getRepository } from '@things-factory/shell'
|
|
13
|
-
import { Location } from '@things-factory/warehouse-base'
|
|
14
|
-
|
|
15
|
-
import {
|
|
16
|
-
ArrivalNotice,
|
|
17
|
-
NewPurchaseOrder,
|
|
18
|
-
OrderProduct,
|
|
19
|
-
PurchaseOrder,
|
|
20
|
-
PurchaseOrderOtherCharge,
|
|
21
|
-
PurchaseOrderPatch
|
|
22
|
-
} from '../'
|
|
23
|
-
import {
|
|
24
|
-
ATTACHMENT_TYPE,
|
|
25
|
-
ORDER_NUMBER_RULE_TYPE,
|
|
26
|
-
ORDER_NUMBER_SETTING_KEY,
|
|
27
|
-
ORDER_STATUS,
|
|
28
|
-
PURCHASE_ORDER_STATUS
|
|
29
|
-
} from '../../constants'
|
|
30
|
-
import { OrderNoGenerator } from '../../utils'
|
|
31
|
-
import { checkArrivedNoticeFunction, generateArrivalNoticeFunction } from '../arrival-notice/arrival-notice-mutation'
|
|
32
|
-
import { getPurchaseOrderFunction } from './purchase-order-query'
|
|
33
|
-
|
|
34
|
-
@Resolver(PurchaseOrder)
|
|
35
|
-
export class PurchaseOrderMutation {
|
|
36
|
-
@Directive('@privilege(category: "order_customer", privilege: "mutation")')
|
|
37
|
-
@Directive('@transaction')
|
|
38
|
-
@Mutation(returns => PurchaseOrder)
|
|
39
|
-
async upsertPurchaseOrder(
|
|
40
|
-
@Ctx() context: ResolverContext,
|
|
41
|
-
@Arg('purchaseOrder', type => PurchaseOrderPatch) purchaseOrder: PurchaseOrderPatch,
|
|
42
|
-
@Arg('files', type => [GraphQLUpload], { nullable: true }) files?: FileUpload
|
|
43
|
-
): Promise<PurchaseOrder> {
|
|
44
|
-
try {
|
|
45
|
-
const { tx } = context.state
|
|
46
|
-
const createdPurchaseOrder: PurchaseOrder = await upsertPurchaseOrderFunction(
|
|
47
|
-
null,
|
|
48
|
-
purchaseOrder,
|
|
49
|
-
files,
|
|
50
|
-
context,
|
|
51
|
-
tx
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
return createdPurchaseOrder
|
|
55
|
-
} catch (error) {
|
|
56
|
-
throw error
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
@Directive('@privilege(category: "order_customer", privilege: "mutation")')
|
|
61
|
-
@Directive('@transaction')
|
|
62
|
-
@Mutation(returns => PurchaseOrder)
|
|
63
|
-
async approvePurchaseOrder(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<PurchaseOrder> {
|
|
64
|
-
const { tx, domain, user } = context.state
|
|
65
|
-
|
|
66
|
-
const findPurchaseOrder: PurchaseOrder = await getRepository(PurchaseOrder).findOne({
|
|
67
|
-
where: { domain: { id: domain.id }, id },
|
|
68
|
-
relations: ['orderProducts', 'orderProducts.product', 'bufferLocation', 'bizplace', 'domain']
|
|
69
|
-
})
|
|
70
|
-
|
|
71
|
-
// const findPurchaseOrder: PurchaseOrder = await tx.getRepository(PurchaseOrder).findOne({where: {id}, relations:['bizplace']})
|
|
72
|
-
// const findOrderProducts: OrderProduct[] = await tx.getRepository(OrderProduct).findBy({purchaseOrder: {id: findPurchaseOrder.id}}})
|
|
73
|
-
|
|
74
|
-
// // 1. Approve purchase order
|
|
75
|
-
const approvePurchaseOrder: PurchaseOrder = await tx.getRepository(PurchaseOrder).save({
|
|
76
|
-
...findPurchaseOrder,
|
|
77
|
-
status: PURCHASE_ORDER_STATUS.APPROVED,
|
|
78
|
-
approvedBy: user,
|
|
79
|
-
approvedOn: new Date().toUTCString(),
|
|
80
|
-
updater: user
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
await tx.getRepository(OrderProduct).save(
|
|
84
|
-
findPurchaseOrder.orderProducts.map(itm => {
|
|
85
|
-
return {
|
|
86
|
-
...itm,
|
|
87
|
-
status: PURCHASE_ORDER_STATUS.APPROVED
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
)
|
|
91
|
-
|
|
92
|
-
// // 2. Create and confirm arrival notice
|
|
93
|
-
let newGANOrder = {
|
|
94
|
-
...findPurchaseOrder,
|
|
95
|
-
orderProducts: findPurchaseOrder.orderProducts.map(itm => {
|
|
96
|
-
delete itm.id, itm.name
|
|
97
|
-
return {
|
|
98
|
-
...itm
|
|
99
|
-
}
|
|
100
|
-
}),
|
|
101
|
-
customerBizplaceId: findPurchaseOrder.bizplace.id,
|
|
102
|
-
purchaseOrder: approvePurchaseOrder,
|
|
103
|
-
orderVass: [],
|
|
104
|
-
creator: user,
|
|
105
|
-
updater: user
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
delete newGANOrder.id
|
|
109
|
-
//change gan status to intransit and call check arrived notice function right
|
|
110
|
-
newGANOrder.status = ORDER_STATUS.INTRANSIT
|
|
111
|
-
|
|
112
|
-
const createdGAN: ArrivalNotice = await generateArrivalNoticeFunction(null, newGANOrder, true, [], context, tx)
|
|
113
|
-
|
|
114
|
-
// await confirmArrivalNoticeFunction(createdGAN.name, context, tx)
|
|
115
|
-
|
|
116
|
-
// await receiveArrivalNoticeFunction(null, createdGAN.name, context)
|
|
117
|
-
|
|
118
|
-
await checkArrivedNoticeFunction(createdGAN.name, context, tx)
|
|
119
|
-
|
|
120
|
-
return approvePurchaseOrder
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
@Directive('@privilege(category: "order_customer", privilege: "mutation")')
|
|
124
|
-
@Directive('@transaction')
|
|
125
|
-
@Mutation(returns => PurchaseOrder)
|
|
126
|
-
async rejectPurchaseOrder(@Arg('id') id: string, @Ctx() context: ResolverContext): Promise<PurchaseOrder> {
|
|
127
|
-
const { tx, domain, user } = context.state
|
|
128
|
-
|
|
129
|
-
const findPurchaseOrder: PurchaseOrder = await getRepository(PurchaseOrder).findOne({
|
|
130
|
-
where: { domain: { id: domain.id }, id },
|
|
131
|
-
relations: ['orderProducts']
|
|
132
|
-
})
|
|
133
|
-
// // 1. Reject purchase order
|
|
134
|
-
const rejectedPurchaseOrder: PurchaseOrder = await tx.getRepository(PurchaseOrder).save({
|
|
135
|
-
...findPurchaseOrder,
|
|
136
|
-
status: PURCHASE_ORDER_STATUS.REJECTED,
|
|
137
|
-
updater: user
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
await tx.getRepository(OrderProduct).save(
|
|
141
|
-
findPurchaseOrder.orderProducts.map(itm => {
|
|
142
|
-
return {
|
|
143
|
-
...itm,
|
|
144
|
-
status: PURCHASE_ORDER_STATUS.REJECTED
|
|
145
|
-
}
|
|
146
|
-
})
|
|
147
|
-
)
|
|
148
|
-
|
|
149
|
-
return rejectedPurchaseOrder
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
@Directive('@transaction')
|
|
153
|
-
@Mutation(returns => PurchaseOrder)
|
|
154
|
-
async createPurchaseOrder(
|
|
155
|
-
@Arg('purchaseOrder', type => NewPurchaseOrder) purchaseOrder: NewPurchaseOrder,
|
|
156
|
-
@Ctx() context: ResolverContext
|
|
157
|
-
): Promise<PurchaseOrder> {
|
|
158
|
-
const { tx, domain, user } = context.state
|
|
159
|
-
|
|
160
|
-
return await tx.getRepository(PurchaseOrder).save({
|
|
161
|
-
...purchaseOrder,
|
|
162
|
-
domain,
|
|
163
|
-
creator: user,
|
|
164
|
-
updater: user
|
|
165
|
-
})
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
@Directive('@transaction')
|
|
169
|
-
@Mutation(returns => PurchaseOrder)
|
|
170
|
-
async updatePurchaseOrder(
|
|
171
|
-
@Arg('name') name: string,
|
|
172
|
-
@Arg('patch', type => PurchaseOrderPatch) patch: PurchaseOrderPatch,
|
|
173
|
-
@Ctx() context: ResolverContext
|
|
174
|
-
): Promise<PurchaseOrder> {
|
|
175
|
-
const { tx, domain, user } = context.state
|
|
176
|
-
|
|
177
|
-
const repository = tx.getRepository(PurchaseOrder)
|
|
178
|
-
const purchaseOrder = await repository.findOne({
|
|
179
|
-
where: { domain: { id: domain.id }, name }
|
|
180
|
-
})
|
|
181
|
-
|
|
182
|
-
return await repository.save({
|
|
183
|
-
...purchaseOrder,
|
|
184
|
-
...patch,
|
|
185
|
-
updater: user
|
|
186
|
-
})
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
@Directive('@transaction')
|
|
190
|
-
@Mutation(returns => Boolean)
|
|
191
|
-
async deletePurchaseOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<boolean> {
|
|
192
|
-
const { tx, domain } = context.state
|
|
193
|
-
await tx.getRepository(PurchaseOrder).delete({ domain: { id: domain.id }, name })
|
|
194
|
-
return true
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
export async function upsertPurchaseOrderFunction(
|
|
199
|
-
_: any,
|
|
200
|
-
purchaseOrder: any,
|
|
201
|
-
files: FileUpload[],
|
|
202
|
-
context: any,
|
|
203
|
-
tx?: EntityManager
|
|
204
|
-
): Promise<PurchaseOrder> {
|
|
205
|
-
if (!purchaseOrder.id) {
|
|
206
|
-
purchaseOrder = await createPurchaseOrderFunction(_, purchaseOrder, files, context, tx)
|
|
207
|
-
} else {
|
|
208
|
-
purchaseOrder = await updatePurchaseOrderFunction(_, purchaseOrder, files, context, tx)
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
return purchaseOrder
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
export async function createPurchaseOrderFunction(
|
|
215
|
-
_: any,
|
|
216
|
-
purchaseOrder: any,
|
|
217
|
-
files: FileUpload[],
|
|
218
|
-
context: any,
|
|
219
|
-
tx?: EntityManager
|
|
220
|
-
): Promise<PurchaseOrder> {
|
|
221
|
-
const { domain, user } = context.state
|
|
222
|
-
let orderProducts: OrderProduct[] = purchaseOrder.orderProducts
|
|
223
|
-
let otherCharges: PurchaseOrderOtherCharge[] = purchaseOrder.otherCharges
|
|
224
|
-
|
|
225
|
-
let myBizplace: Bizplace
|
|
226
|
-
let orderNo: string = ''
|
|
227
|
-
let arrError: string[] = []
|
|
228
|
-
|
|
229
|
-
const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
|
|
230
|
-
|
|
231
|
-
if (purchaseOrder?.bizplace?.id) {
|
|
232
|
-
const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)
|
|
233
|
-
let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == purchaseOrder.bizplace.id)
|
|
234
|
-
|
|
235
|
-
if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)
|
|
236
|
-
|
|
237
|
-
purchaseOrder.bizplace = foundPermittedBizplace
|
|
238
|
-
} else {
|
|
239
|
-
arrError.push(`No bizplace was selected`)
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
if (purchaseOrder?.supplier?.id) {
|
|
243
|
-
purchaseOrder.supplier = await getRepository(ContactPoint).findOneBy({ id: purchaseOrder.supplier.id })
|
|
244
|
-
} else {
|
|
245
|
-
arrError.push(`No supplier was selected`)
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
if (purchaseOrder?.bufferLocation?.id) {
|
|
249
|
-
purchaseOrder.bufferLocation = await getRepository(Location).findOneBy({ id: purchaseOrder.bufferLocation.id })
|
|
250
|
-
} else {
|
|
251
|
-
arrError.push(`No buffer location was selected`)
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
if (arrError.length > 0) {
|
|
255
|
-
throw new Error(arrError.join(', '))
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// // find PO number rule setting
|
|
259
|
-
const poNoSetting: Setting = await settingRepo.findOne({
|
|
260
|
-
where: {
|
|
261
|
-
domain: { id: domain.id },
|
|
262
|
-
name: ORDER_NUMBER_SETTING_KEY.PO_NUMBER_RULE
|
|
263
|
-
}
|
|
264
|
-
})
|
|
265
|
-
|
|
266
|
-
orderNo = poNoSetting
|
|
267
|
-
? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.PO_NUMBER, seed: {} })
|
|
268
|
-
: OrderNoGenerator.purchaseOrder()
|
|
269
|
-
|
|
270
|
-
// // 1. Create purchase order
|
|
271
|
-
const createdPurchaseOrder: PurchaseOrder = await tx.getRepository(PurchaseOrder).save({
|
|
272
|
-
...purchaseOrder,
|
|
273
|
-
name: orderNo,
|
|
274
|
-
domain,
|
|
275
|
-
looseItem: purchaseOrder?.looseItem ? purchaseOrder.looseItem : false,
|
|
276
|
-
creator: user,
|
|
277
|
-
updater: user
|
|
278
|
-
})
|
|
279
|
-
|
|
280
|
-
// // 2. Create purchase order product
|
|
281
|
-
await upsertPurchaseOrderProducts(domain, purchaseOrder.bizplace, createdPurchaseOrder, orderProducts, user, tx)
|
|
282
|
-
|
|
283
|
-
// // 3. Create purchase order misc charges
|
|
284
|
-
for await (let oc of otherCharges) {
|
|
285
|
-
delete oc.id
|
|
286
|
-
await tx.getRepository(PurchaseOrderOtherCharge).save({
|
|
287
|
-
...oc,
|
|
288
|
-
domain,
|
|
289
|
-
purchaseOrder: createdPurchaseOrder,
|
|
290
|
-
creator: user,
|
|
291
|
-
updater: user
|
|
292
|
-
})
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
// // 4. Create Attacments
|
|
296
|
-
if (files?.length) {
|
|
297
|
-
const attachments: Partial<Attachment>[] = files.map(attachment => {
|
|
298
|
-
return {
|
|
299
|
-
file: attachment,
|
|
300
|
-
refType: ATTACHMENT_TYPE.PO,
|
|
301
|
-
refBy: createdPurchaseOrder.id,
|
|
302
|
-
category: ATTACHMENT_TYPE.PO /* TODO use refType */
|
|
303
|
-
}
|
|
304
|
-
})
|
|
305
|
-
await createAttachments(_, { attachments }, context)
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
return createdPurchaseOrder
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
export async function updatePurchaseOrderFunction(
|
|
312
|
-
_: any,
|
|
313
|
-
purchaseOrder: any,
|
|
314
|
-
files: FileUpload[],
|
|
315
|
-
context: any,
|
|
316
|
-
tx?: EntityManager
|
|
317
|
-
): Promise<PurchaseOrder> {
|
|
318
|
-
const { domain, user } = context.state
|
|
319
|
-
|
|
320
|
-
let existingPurchaseOrder: any = await getPurchaseOrderFunction(_, purchaseOrder.name, context, tx)
|
|
321
|
-
|
|
322
|
-
let orderProducts: OrderProduct[] = purchaseOrder.orderProducts
|
|
323
|
-
let otherCharges: PurchaseOrderOtherCharge[] = purchaseOrder.otherCharges
|
|
324
|
-
|
|
325
|
-
if (purchaseOrder?.bizplace?.id) {
|
|
326
|
-
const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)
|
|
327
|
-
let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == purchaseOrder.bizplace.id)
|
|
328
|
-
|
|
329
|
-
if (!foundPermittedBizplace) throw new Error(`This user does not permitted for this company`)
|
|
330
|
-
|
|
331
|
-
purchaseOrder.bizplace = foundPermittedBizplace
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
if (purchaseOrder?.supplier?.id) {
|
|
335
|
-
purchaseOrder.supplier = await getRepository(ContactPoint).findOneBy({ id: purchaseOrder.supplier.id })
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
if (purchaseOrder?.bufferLocation?.id) {
|
|
339
|
-
purchaseOrder.bufferLocation = await getRepository(Location).findOneBy({ id: purchaseOrder.bufferLocation.id })
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// // 1. Update purchase order
|
|
343
|
-
const updatePurchaseOrder: PurchaseOrder = await tx.getRepository(PurchaseOrder).save({
|
|
344
|
-
...existingPurchaseOrder,
|
|
345
|
-
...purchaseOrder,
|
|
346
|
-
domain,
|
|
347
|
-
creator: user,
|
|
348
|
-
updater: user
|
|
349
|
-
})
|
|
350
|
-
|
|
351
|
-
// // 2. Update purchase order product
|
|
352
|
-
await upsertPurchaseOrderProducts(domain, purchaseOrder.bizplace, purchaseOrder, orderProducts, user, tx)
|
|
353
|
-
|
|
354
|
-
// // 3. Delete Removed Other Charges
|
|
355
|
-
const otherChargesRepo: Repository<PurchaseOrderOtherCharge> =
|
|
356
|
-
tx?.getRepository(PurchaseOrderOtherCharge) || getRepository(PurchaseOrderOtherCharge)
|
|
357
|
-
let removeOC = existingPurchaseOrder.otherCharges.filter(
|
|
358
|
-
existingOC => (otherCharges.filter(inOC => inOC.id == existingOC.id).length = 0)
|
|
359
|
-
)
|
|
360
|
-
removeOC.forEach(async oc => {
|
|
361
|
-
await otherChargesRepo.delete(oc)
|
|
362
|
-
})
|
|
363
|
-
|
|
364
|
-
// // 4. Process Purchase Other Other Charges Data and Insert/ Update data
|
|
365
|
-
for await (let oc of otherCharges) {
|
|
366
|
-
if (!oc?.id) delete oc.id
|
|
367
|
-
await otherChargesRepo.save({
|
|
368
|
-
...oc,
|
|
369
|
-
domain,
|
|
370
|
-
purchaseOrder: existingPurchaseOrder,
|
|
371
|
-
creator: oc?.id ? oc.creator : user,
|
|
372
|
-
updater: user
|
|
373
|
-
})
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// // 5. Remove Purchase Order Products
|
|
377
|
-
const foundAttachments: Attachment[] = await getRepository(Attachment).find({
|
|
378
|
-
where: {
|
|
379
|
-
domain: { id: domain.id },
|
|
380
|
-
refBy: purchaseOrder.id,
|
|
381
|
-
category: ATTACHMENT_TYPE.PO
|
|
382
|
-
}
|
|
383
|
-
})
|
|
384
|
-
|
|
385
|
-
// // 6. Remove All Attachment
|
|
386
|
-
if (foundAttachments?.length) {
|
|
387
|
-
await deleteAttachmentsByRef(_, { refBys: foundAttachments.map(file => file.refBy) }, context)
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
// // 7. Add New Attachment
|
|
391
|
-
if (files?.length > 0) {
|
|
392
|
-
const attachments: Partial<Attachment>[] = files.map(attachment => {
|
|
393
|
-
return {
|
|
394
|
-
file: attachment,
|
|
395
|
-
refType: ATTACHMENT_TYPE.PO,
|
|
396
|
-
refBy: updatePurchaseOrder.id,
|
|
397
|
-
category: ATTACHMENT_TYPE.PO /* TODO use refType */
|
|
398
|
-
}
|
|
399
|
-
})
|
|
400
|
-
await createAttachments(_, { attachments }, context)
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
return existingPurchaseOrder
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
export async function upsertPurchaseOrderProducts(
|
|
407
|
-
domain: Domain,
|
|
408
|
-
bizplace: Bizplace,
|
|
409
|
-
purchaseOrder: PurchaseOrder,
|
|
410
|
-
orderProducts: OrderProduct[],
|
|
411
|
-
user: User,
|
|
412
|
-
tx?: EntityManager
|
|
413
|
-
): Promise<void> {
|
|
414
|
-
try {
|
|
415
|
-
const purchaseOrderRepo: Repository<PurchaseOrder> =
|
|
416
|
-
tx?.getRepository(PurchaseOrder) || getRepository(PurchaseOrder)
|
|
417
|
-
const bizplaceRepo: Repository<Bizplace> = tx?.getRepository(Bizplace) || getRepository(Bizplace)
|
|
418
|
-
const orderProductRepo: Repository<OrderProduct> = tx?.getRepository(OrderProduct) || getRepository(OrderProduct)
|
|
419
|
-
const productRepo: Repository<Product> = tx?.getRepository(Product) || getRepository(Product)
|
|
420
|
-
|
|
421
|
-
// // Remove all existing order products that do not exist in current input
|
|
422
|
-
let removeOP = purchaseOrder.orderProducts.filter(
|
|
423
|
-
existingOP => (orderProducts.filter(inOP => inOP.id == existingOP.id).length = 0)
|
|
424
|
-
)
|
|
425
|
-
removeOP.forEach(async op => {
|
|
426
|
-
await orderProductRepo.delete(op.id)
|
|
427
|
-
})
|
|
428
|
-
|
|
429
|
-
purchaseOrder = await purchaseOrderRepo.findOneBy({ id: purchaseOrder.id })
|
|
430
|
-
|
|
431
|
-
bizplace = await bizplaceRepo.findOneBy({ id: bizplace.id })
|
|
432
|
-
|
|
433
|
-
orderProducts = await Promise.all(
|
|
434
|
-
orderProducts.map(async (op: OrderProduct) => {
|
|
435
|
-
if (!op?.id) delete op.id
|
|
436
|
-
let foundProductDetail: ProductDetail = await tx
|
|
437
|
-
.getRepository(ProductDetail)
|
|
438
|
-
.findOne({ where: { product: { id: op.product.id }, packingType: op.packingType } })
|
|
439
|
-
return {
|
|
440
|
-
...op,
|
|
441
|
-
domain,
|
|
442
|
-
bizplace: bizplace,
|
|
443
|
-
name: op?.id ? op.name : OrderNoGenerator.orderProduct(),
|
|
444
|
-
product: await productRepo.findOneBy({ id: op.product.id }),
|
|
445
|
-
packingSize: foundProductDetail?.packingSize || 1,
|
|
446
|
-
purchaseOrder: purchaseOrder,
|
|
447
|
-
status: purchaseOrder.status,
|
|
448
|
-
creator: op?.id ? op.creator : user,
|
|
449
|
-
updater: user
|
|
450
|
-
}
|
|
451
|
-
})
|
|
452
|
-
)
|
|
453
|
-
|
|
454
|
-
await orderProductRepo.save(orderProducts)
|
|
455
|
-
} catch (error) {
|
|
456
|
-
throw error
|
|
457
|
-
}
|
|
458
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { Arg, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
|
|
2
|
-
import { EntityManager, In } from 'typeorm'
|
|
3
|
-
|
|
4
|
-
import { Attachment } from '@things-factory/attachment-base'
|
|
5
|
-
import { User } from '@things-factory/auth-base'
|
|
6
|
-
import { Bizplace, getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
7
|
-
import { buildQuery, Domain, Filter, getRepository, Pagination, Sorting } from '@things-factory/shell'
|
|
8
|
-
|
|
9
|
-
import { PurchaseOrderList } from '../'
|
|
10
|
-
import { ATTACHMENT_TYPE } from '../../constants'
|
|
11
|
-
import { PurchaseOrder } from './purchase-order'
|
|
12
|
-
|
|
13
|
-
@Resolver(PurchaseOrder)
|
|
14
|
-
export class PurchaseOrderQuery {
|
|
15
|
-
@Query(returns => PurchaseOrderList)
|
|
16
|
-
async purchaseOrders(
|
|
17
|
-
@Ctx() context: ResolverContext,
|
|
18
|
-
@Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
|
|
19
|
-
@Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
|
|
20
|
-
@Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[]
|
|
21
|
-
): Promise<PurchaseOrderList> {
|
|
22
|
-
const queryBuilder = getRepository(PurchaseOrder).createQueryBuilder()
|
|
23
|
-
buildQuery(queryBuilder, { filters, pagination, sortings }, context)
|
|
24
|
-
const [items, total] = await queryBuilder
|
|
25
|
-
.leftJoinAndSelect('PurchaseOrder.supplier', 'Supplier')
|
|
26
|
-
.leftJoinAndSelect('PurchaseOrder.domain', 'Domain')
|
|
27
|
-
.leftJoinAndSelect('PurchaseOrder.creator', 'Creator')
|
|
28
|
-
.leftJoinAndSelect('PurchaseOrder.updater', 'Updater')
|
|
29
|
-
.leftJoinAndSelect('PurchaseOrder.arrivalNotice', 'ArrivalNotice')
|
|
30
|
-
.getManyAndCount()
|
|
31
|
-
|
|
32
|
-
return { items, total }
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
@Query(returns => PurchaseOrder)
|
|
36
|
-
async purchaseOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<PurchaseOrder> {
|
|
37
|
-
const { tx } = context.state
|
|
38
|
-
return getPurchaseOrderFunction(null, name, context, tx)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@FieldResolver(type => Domain)
|
|
42
|
-
async domain(@Root() purchaseOrder: PurchaseOrder): Promise<Domain> {
|
|
43
|
-
return await getRepository(Domain).findOneBy({ id: purchaseOrder.domainId })
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@FieldResolver(type => User)
|
|
47
|
-
async creator(@Root() purchaseOrder: PurchaseOrder): Promise<User> {
|
|
48
|
-
return await getRepository(User).findOneBy({ id: purchaseOrder.creatorId })
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
@FieldResolver(type => User)
|
|
52
|
-
async updater(@Root() purchaseOrder: PurchaseOrder): Promise<User> {
|
|
53
|
-
return await getRepository(User).findOneBy({ id: purchaseOrder.updaterId })
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export async function getPurchaseOrderFunction(_: any, name: any, context: any, tx?: EntityManager) {
|
|
58
|
-
const { domain, user, bizplace }: { domain: Domain; user: User; bizplace: Bizplace } = context.state
|
|
59
|
-
|
|
60
|
-
let result = await getRepository(PurchaseOrder).findOne({
|
|
61
|
-
where: { domain: { id: domain.id }, name, bizplace: { id: In(await getPermittedBizplaceIds(domain, user)) } },
|
|
62
|
-
relations: [
|
|
63
|
-
'arrivalNotice',
|
|
64
|
-
'supplier',
|
|
65
|
-
'orderProducts',
|
|
66
|
-
'orderProducts.product',
|
|
67
|
-
'otherCharges',
|
|
68
|
-
'bufferLocation',
|
|
69
|
-
'bizplace',
|
|
70
|
-
'domain',
|
|
71
|
-
'creator',
|
|
72
|
-
'updater'
|
|
73
|
-
]
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
if (!result?.id) throw new Error(`Failed to find arrival notice with ${name}`)
|
|
77
|
-
|
|
78
|
-
const foundAttachments: Attachment[] = await getRepository(Attachment).find({
|
|
79
|
-
where: {
|
|
80
|
-
domain: { id: domain.id },
|
|
81
|
-
refBy: result.id,
|
|
82
|
-
category: ATTACHMENT_TYPE.PO
|
|
83
|
-
}
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
return {
|
|
87
|
-
...result,
|
|
88
|
-
attachment: foundAttachments
|
|
89
|
-
}
|
|
90
|
-
}
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
import { ObjectRef } from '@things-factory/shell'
|
|
2
|
-
import { Field, InputType, Int, ObjectType } from 'type-graphql'
|
|
3
|
-
import { OrderProductPatch } from '../order-product/order-product-types'
|
|
4
|
-
import { PurchaseOrder, PurchaseOrderOtherChargePatch, PurchaseOrderOtherCharge } from '../'
|
|
5
|
-
|
|
6
|
-
@ObjectType()
|
|
7
|
-
export class PurchaseOrderList {
|
|
8
|
-
@Field(type => [PurchaseOrder], { nullable: true })
|
|
9
|
-
items: PurchaseOrder[]
|
|
10
|
-
|
|
11
|
-
@Field(type => Int, { nullable: true })
|
|
12
|
-
total: number
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
@InputType()
|
|
16
|
-
export class NewPurchaseOrder {
|
|
17
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
18
|
-
bizplace: ObjectRef
|
|
19
|
-
|
|
20
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
21
|
-
bufferLocation: ObjectRef
|
|
22
|
-
|
|
23
|
-
@Field({ nullable: true })
|
|
24
|
-
container: boolean
|
|
25
|
-
|
|
26
|
-
@Field({ nullable: true })
|
|
27
|
-
containerNo: string
|
|
28
|
-
|
|
29
|
-
@Field({ nullable: true })
|
|
30
|
-
containerSize: string
|
|
31
|
-
|
|
32
|
-
@Field({ nullable: true })
|
|
33
|
-
currency: string
|
|
34
|
-
|
|
35
|
-
@Field({ nullable: true })
|
|
36
|
-
deliveryOrderNo: string
|
|
37
|
-
|
|
38
|
-
@Field({ nullable: true })
|
|
39
|
-
description: string
|
|
40
|
-
|
|
41
|
-
@Field({ nullable: true })
|
|
42
|
-
etaDate: string
|
|
43
|
-
|
|
44
|
-
@Field({ nullable: true })
|
|
45
|
-
importCargo: boolean
|
|
46
|
-
|
|
47
|
-
@Field({ nullable: true })
|
|
48
|
-
issuedOn: string
|
|
49
|
-
|
|
50
|
-
@Field({ nullable: true })
|
|
51
|
-
looseItem: boolean
|
|
52
|
-
|
|
53
|
-
@Field({ nullable: true })
|
|
54
|
-
name: string
|
|
55
|
-
|
|
56
|
-
@Field(type => [OrderProductPatch], { nullable: true })
|
|
57
|
-
orderProducts: OrderProductPatch[]
|
|
58
|
-
|
|
59
|
-
@Field(type => [PurchaseOrderOtherChargePatch], { nullable: true })
|
|
60
|
-
otherCharges: (PurchaseOrderOtherCharge | PurchaseOrderOtherChargePatch)[]
|
|
61
|
-
|
|
62
|
-
@Field({ nullable: true })
|
|
63
|
-
ownTransport: boolean
|
|
64
|
-
|
|
65
|
-
@Field({ nullable: true })
|
|
66
|
-
refNo: string
|
|
67
|
-
|
|
68
|
-
@Field({ nullable: true })
|
|
69
|
-
remark: string
|
|
70
|
-
|
|
71
|
-
@Field({ nullable: true })
|
|
72
|
-
status: string
|
|
73
|
-
|
|
74
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
75
|
-
warehouse: ObjectRef
|
|
76
|
-
|
|
77
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
78
|
-
supplier: ObjectRef
|
|
79
|
-
|
|
80
|
-
@Field({ nullable: true })
|
|
81
|
-
truckNo: string
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
@InputType()
|
|
85
|
-
export class PurchaseOrderPatch {
|
|
86
|
-
@Field({ nullable: true })
|
|
87
|
-
id: string
|
|
88
|
-
|
|
89
|
-
@Field({ nullable: true })
|
|
90
|
-
name: string
|
|
91
|
-
|
|
92
|
-
@Field({ nullable: true })
|
|
93
|
-
description: string
|
|
94
|
-
|
|
95
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
96
|
-
bizplace: ObjectRef
|
|
97
|
-
|
|
98
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
99
|
-
bufferLocation: ObjectRef
|
|
100
|
-
|
|
101
|
-
@Field({ nullable: true })
|
|
102
|
-
container: boolean
|
|
103
|
-
|
|
104
|
-
@Field({ nullable: true })
|
|
105
|
-
containerNo: string
|
|
106
|
-
|
|
107
|
-
@Field({ nullable: true })
|
|
108
|
-
containerSize: string
|
|
109
|
-
|
|
110
|
-
@Field({ nullable: true })
|
|
111
|
-
currency: string
|
|
112
|
-
|
|
113
|
-
@Field({ nullable: true })
|
|
114
|
-
deliveryOrderNo: string
|
|
115
|
-
|
|
116
|
-
@Field({ nullable: true })
|
|
117
|
-
etaDate: string
|
|
118
|
-
|
|
119
|
-
@Field({ nullable: true })
|
|
120
|
-
importCargo: boolean
|
|
121
|
-
|
|
122
|
-
@Field({ nullable: true })
|
|
123
|
-
issuedOn: string
|
|
124
|
-
|
|
125
|
-
@Field({ nullable: true })
|
|
126
|
-
looseItem: boolean
|
|
127
|
-
|
|
128
|
-
@Field(type => [OrderProductPatch], { nullable: true })
|
|
129
|
-
orderProducts: OrderProductPatch[]
|
|
130
|
-
|
|
131
|
-
@Field(type => [PurchaseOrderOtherChargePatch], { nullable: true })
|
|
132
|
-
otherCharges: PurchaseOrderOtherChargePatch[]
|
|
133
|
-
|
|
134
|
-
@Field({ nullable: true })
|
|
135
|
-
ownTransport: boolean
|
|
136
|
-
|
|
137
|
-
@Field({ nullable: true })
|
|
138
|
-
refNo: string
|
|
139
|
-
|
|
140
|
-
@Field({ nullable: true })
|
|
141
|
-
remark: string
|
|
142
|
-
|
|
143
|
-
@Field({ nullable: true })
|
|
144
|
-
status: string
|
|
145
|
-
|
|
146
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
147
|
-
warehouse: ObjectRef
|
|
148
|
-
|
|
149
|
-
@Field(type => ObjectRef, { nullable: true })
|
|
150
|
-
supplier: ObjectRef
|
|
151
|
-
|
|
152
|
-
@Field({ nullable: true })
|
|
153
|
-
truckNo: string
|
|
154
|
-
}
|