@things-factory/worksheet-base 4.3.239 → 4.3.241
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/controllers/outbound/loading-worksheet-controller.js +36 -9
- package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +13 -7
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-ro-do.js +21 -8
- package/dist-server/controllers/render-ro-do.js.map +1 -1
- package/dist-server/controllers/vas/vas-worksheet-controller.js +157 -31
- package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +21 -8
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +62 -3
- package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +18 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js +22 -1
- package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js +9 -7
- package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +31 -16
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js +3 -0
- package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +2 -1
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
- package/package.json +4 -4
- package/server/controllers/outbound/loading-worksheet-controller.ts +38 -10
- package/server/controllers/outbound/picking-worksheet-controller.ts +14 -6
- package/server/controllers/render-ro-do.ts +25 -6
- package/server/controllers/vas/vas-worksheet-controller.ts +239 -49
- package/server/controllers/worksheet-controller.ts +21 -10
- package/server/graphql/resolvers/worksheet/loading/loading.ts +0 -2
- package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +5 -4
- package/server/graphql/resolvers/worksheet/loading-worksheet.ts +68 -2
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +20 -1
- package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +27 -2
- package/server/graphql/resolvers/worksheet/vas-worksheet.ts +7 -5
- package/server/graphql/resolvers/worksheet/worksheet.ts +34 -13
- package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +5 -1
- package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +1 -1
- package/server/graphql/types/worksheet/index.ts +2 -1
- package/server/graphql/types/worksheet/worksheet-detail-info.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worksheet-detail-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/worksheet-detail-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,mBAAmB,GAAG,IAAA,uBAAG,EAAA
|
|
1
|
+
{"version":3,"file":"worksheet-detail-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/worksheet-detail-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,mBAAmB,GAAG,IAAA,uBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuErC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/worksheet-base",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.241",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"@things-factory/integration-sftp": "^4.3.239",
|
|
37
37
|
"@things-factory/marketplace-base": "^4.3.239",
|
|
38
38
|
"@things-factory/notification": "^4.3.237",
|
|
39
|
-
"@things-factory/sales-base": "^4.3.
|
|
39
|
+
"@things-factory/sales-base": "^4.3.241",
|
|
40
40
|
"@things-factory/setting-base": "^4.3.237",
|
|
41
41
|
"@things-factory/shell": "^4.3.237",
|
|
42
42
|
"@things-factory/transport-base": "^4.3.237",
|
|
43
|
-
"@things-factory/warehouse-base": "^4.3.
|
|
43
|
+
"@things-factory/warehouse-base": "^4.3.241",
|
|
44
44
|
"uuid": "^9.0.0"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "507fce6438f95509d660bc61cd1ddc615c868ee3"
|
|
47
47
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Equal, In, Not } from 'typeorm'
|
|
1
|
+
import { Equal, In, Not, IsNull } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { Bizplace } from '@things-factory/biz-base'
|
|
4
4
|
import {
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
OrderNoGenerator,
|
|
11
11
|
OrderTote,
|
|
12
12
|
OrderToteItem,
|
|
13
|
+
OrderVas,
|
|
13
14
|
ReleaseGood
|
|
14
15
|
} from '@things-factory/sales-base'
|
|
15
16
|
import {
|
|
@@ -112,6 +113,7 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
112
113
|
const bizplace: Bizplace = releaseGood.bizplace
|
|
113
114
|
|
|
114
115
|
for (let i = 0; i < worksheetDetails.length; i++) {
|
|
116
|
+
// const pickedQty: number = worksheetDetails[i].pickedQty
|
|
115
117
|
const loadedQty: number = worksheetDetails[i].loadedQty
|
|
116
118
|
const toteName: string = worksheetDetails[i].toteName
|
|
117
119
|
let worksheetDetail = await this.findExecutableWorksheetDetailByName(
|
|
@@ -132,7 +134,10 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
132
134
|
|
|
133
135
|
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
134
136
|
let targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
135
|
-
const pickedQty: number =
|
|
137
|
+
const pickedQty: number =
|
|
138
|
+
targetInventory.type === ORDER_TYPES.VAS_ORDER || targetInventory.releaseQty != targetInventory.pickedQty
|
|
139
|
+
? targetInventory.releaseQty
|
|
140
|
+
: targetInventory.pickedQty
|
|
136
141
|
let inventory: Inventory = targetInventory.inventory
|
|
137
142
|
|
|
138
143
|
targetInventory.loadedAt = new Date()
|
|
@@ -164,7 +169,14 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
164
169
|
const remainUomValue: number = parseFloat((targetInventory.releaseUomValue - loadedUomValue).toFixed(2))
|
|
165
170
|
|
|
166
171
|
targetInventory.status = ORDER_INVENTORY_STATUS.LOADED
|
|
167
|
-
targetInventory.releaseQty =
|
|
172
|
+
targetInventory.releaseQty =
|
|
173
|
+
targetInventory.type === ORDER_TYPES.VAS_ORDER || targetInventory.releaseQty != targetInventory.pickedQty
|
|
174
|
+
? remainQty
|
|
175
|
+
: targetInventory.releaseQty
|
|
176
|
+
targetInventory.pickedQty =
|
|
177
|
+
targetInventory.type === ORDER_TYPES.VAS_ORDER || targetInventory.releaseQty != targetInventory.pickedQty
|
|
178
|
+
? targetInventory.pickedQty
|
|
179
|
+
: loadedQty
|
|
168
180
|
targetInventory.releaseUomValue = loadedUomValue
|
|
169
181
|
targetInventory.updater = this.user
|
|
170
182
|
await this.updateOrderTargets([targetInventory])
|
|
@@ -180,9 +192,16 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
180
192
|
newTargetInventory.name = OrderNoGenerator.orderInventory()
|
|
181
193
|
newTargetInventory.releaseGood = releaseGood
|
|
182
194
|
newTargetInventory.inventory = inventory
|
|
183
|
-
newTargetInventory.type =
|
|
195
|
+
newTargetInventory.type = targetInventory.type
|
|
184
196
|
newTargetInventory.status = ORDER_INVENTORY_STATUS.LOADING
|
|
185
|
-
newTargetInventory.releaseQty =
|
|
197
|
+
newTargetInventory.releaseQty =
|
|
198
|
+
targetInventory.type === ORDER_TYPES.VAS_ORDER || targetInventory.releaseQty != targetInventory.pickedQty
|
|
199
|
+
? remainQty
|
|
200
|
+
: targetInventory.releaseQty
|
|
201
|
+
newTargetInventory.pickedQty =
|
|
202
|
+
targetInventory.type === ORDER_TYPES.VAS_ORDER || targetInventory.releaseQty != targetInventory.pickedQty
|
|
203
|
+
? targetInventory.pickedQty
|
|
204
|
+
: remainQty
|
|
186
205
|
newTargetInventory.releaseUomValue = remainUomValue
|
|
187
206
|
newTargetInventory.product = targetInventory.product
|
|
188
207
|
newTargetInventory.productDetail = targetInventory.productDetail
|
|
@@ -257,7 +276,7 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
257
276
|
return worksheetDetails
|
|
258
277
|
}
|
|
259
278
|
|
|
260
|
-
async undoLoading(deliveryOrder: Partial<DeliveryOrder>, palletIds: string[]): Promise<void> {
|
|
279
|
+
async undoLoading(deliveryOrder: Partial<DeliveryOrder>, palletIds: string[], productIds: string[]): Promise<void> {
|
|
261
280
|
deliveryOrder = await this.findRefOrder(DeliveryOrder, { id: deliveryOrder.id, domain: this.domain }, [
|
|
262
281
|
'releaseGood'
|
|
263
282
|
])
|
|
@@ -266,13 +285,15 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
266
285
|
|
|
267
286
|
const targetInventories: OrderInventory[] = await this.trxMgr.getRepository(OrderInventory).find({
|
|
268
287
|
where: { domain: this.domain, deliveryOrder, status: ORDER_INVENTORY_STATUS.LOADED },
|
|
269
|
-
relations: ['inventory']
|
|
288
|
+
relations: ['inventory', 'product', 'deliveryOrder']
|
|
270
289
|
})
|
|
271
290
|
// Filter out inventories which is included palletIds list.
|
|
272
291
|
let undoTargetOrderInventories: OrderInventory[] = targetInventories.filter(
|
|
273
292
|
(targetInventory: OrderInventory) =>
|
|
274
293
|
targetInventory.status === ORDER_INVENTORY_STATUS.LOADED &&
|
|
275
|
-
palletIds.includes(targetInventory.inventory.palletId)
|
|
294
|
+
palletIds.includes(targetInventory.inventory.palletId) &&
|
|
295
|
+
// productIds.includes(targetInventory.product.id) &&
|
|
296
|
+
deliveryOrder.id === targetInventory.deliveryOrder.id
|
|
276
297
|
)
|
|
277
298
|
|
|
278
299
|
// If there was remained items => Merge into previous order inventories
|
|
@@ -290,7 +311,8 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
290
311
|
id: Not(Equal(undoTargetOrderInventory.id)),
|
|
291
312
|
releaseGood,
|
|
292
313
|
status: ORDER_INVENTORY_STATUS.LOADING,
|
|
293
|
-
inventory: undoTargetOrderInventory.inventory
|
|
314
|
+
inventory: undoTargetOrderInventory.inventory,
|
|
315
|
+
product: undoTargetOrderInventory.product
|
|
294
316
|
}
|
|
295
317
|
})
|
|
296
318
|
|
|
@@ -301,7 +323,13 @@ export class LoadingWorksheetController extends VasWorksheetController {
|
|
|
301
323
|
if (prevTargetInventory) {
|
|
302
324
|
// If there's prev target inventory
|
|
303
325
|
// Merge qty and uomValue into prev target inventory
|
|
304
|
-
prevTargetInventory.
|
|
326
|
+
if (prevTargetInventory.type === ORDER_TYPES.VAS_ORDER) {
|
|
327
|
+
prevTargetInventory.releaseQty += undoTargetOrderInventory.releaseQty
|
|
328
|
+
prevTargetInventory.pickedQty = undoTargetOrderInventory.pickedQty
|
|
329
|
+
} else {
|
|
330
|
+
prevTargetInventory.releaseQty = undoTargetOrderInventory.releaseQty
|
|
331
|
+
prevTargetInventory.pickedQty += undoTargetOrderInventory.pickedQty
|
|
332
|
+
}
|
|
305
333
|
prevTargetInventory.releaseUomValue += undoTargetOrderInventory.releaseUomValue
|
|
306
334
|
prevTargetInventory.updater = this.user
|
|
307
335
|
await this.updateOrderTargets([prevTargetInventory])
|
|
@@ -222,12 +222,13 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
222
222
|
|
|
223
223
|
worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [])
|
|
224
224
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
225
|
+
// VAS will be activated after PICKING is completed
|
|
226
|
+
// try {
|
|
227
|
+
// const vasWorksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.VAS)
|
|
228
|
+
// if (vasWorksheet) {
|
|
229
|
+
// await this.activateVAS(vasWorksheet.name, vasWorksheet.worksheetDetails)
|
|
230
|
+
// }
|
|
231
|
+
// } catch (e) {}
|
|
231
232
|
|
|
232
233
|
const pendingSplitOIs: OrderInventory[] = await this.trxMgr.getRepository(OrderInventory).find({
|
|
233
234
|
where: { domain: this.domain, releaseGood, status: ORDER_INVENTORY_STATUS.PENDING_SPLIT }
|
|
@@ -1340,9 +1341,16 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
1340
1341
|
await this.trxMgr.getRepository(InventoryItem).save(inventoryItems)
|
|
1341
1342
|
}
|
|
1342
1343
|
|
|
1344
|
+
let orderVas: OrderVas[] = await this.trxMgr
|
|
1345
|
+
.getRepository(OrderVas)
|
|
1346
|
+
.find({ where: { releaseGood: releaseGood.id } })
|
|
1347
|
+
|
|
1343
1348
|
let orderStatus: string
|
|
1344
1349
|
if (releaseGood?.packingOption) {
|
|
1345
1350
|
orderStatus = ORDER_STATUS.READY_TO_PACK
|
|
1351
|
+
}
|
|
1352
|
+
if (orderVas.length > 0) {
|
|
1353
|
+
orderStatus = ORDER_STATUS.VAS
|
|
1346
1354
|
} else {
|
|
1347
1355
|
orderStatus = ORDER_STATUS.LOADING
|
|
1348
1356
|
}
|
|
@@ -120,6 +120,7 @@ export async function renderRODO({ doNo }, context: any) {
|
|
|
120
120
|
wdQb
|
|
121
121
|
.leftJoinAndSelect('wd.targetInventory', 'targetInventory')
|
|
122
122
|
.leftJoinAndSelect('targetInventory.inventory', 'inventory')
|
|
123
|
+
.leftJoinAndSelect('targetInventory.product', 'oiProduct')
|
|
123
124
|
.leftJoinAndSelect('inventory.location', 'location')
|
|
124
125
|
.leftJoinAndSelect('inventory.product', 'product')
|
|
125
126
|
.leftJoinAndSelect('product.productDetails', 'productDetails')
|
|
@@ -174,20 +175,38 @@ export async function renderRODO({ doNo }, context: any) {
|
|
|
174
175
|
productDetail => productDetail.packingType === inventory.packingType
|
|
175
176
|
)
|
|
176
177
|
return {
|
|
177
|
-
product_name:
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
178
|
+
product_name:
|
|
179
|
+
wsd.targetInventory.product.id === wsd.targetInventory.inventory.product.id
|
|
180
|
+
? `${inventory.product.name} (${inventory.product.description})`
|
|
181
|
+
: `${wsd.targetInventory.product.name} (${wsd.targetInventory.product.description})`,
|
|
182
|
+
product_desc:
|
|
183
|
+
wsd.targetInventory.product.id === wsd.targetInventory.inventory.product.id
|
|
184
|
+
? `${inventory.product?.description || ''}`
|
|
185
|
+
: `${wsd.targetInventory.product.description || ''}`,
|
|
186
|
+
product_nameOnly:
|
|
187
|
+
wsd.targetInventory.product.id === wsd.targetInventory.inventory.product.id
|
|
188
|
+
? `${inventory.product.name}`
|
|
189
|
+
: `${wsd.targetInventory.product.name}`,
|
|
190
|
+
product_sku:
|
|
191
|
+
wsd.targetInventory.product.id === wsd.targetInventory.inventory.product.id
|
|
192
|
+
? `${inventory.product.sku}`
|
|
193
|
+
: `${wsd.targetInventory.product.sku}`,
|
|
181
194
|
product_type: inventory.packingType,
|
|
182
195
|
product_size: matchedProductDetail ? matchedProductDetail.packingSize : inventory.packingSize,
|
|
183
196
|
product_batch: inventory.batchId,
|
|
184
197
|
product_batch_ref: inventory.batchIdRef,
|
|
185
|
-
product_qty:
|
|
198
|
+
product_qty:
|
|
199
|
+
targetInventory.type === 'VAS_ORDER' || targetInventory.releaseQty != targetInventory.pickedQty
|
|
200
|
+
? targetInventory.releaseQty
|
|
201
|
+
: targetInventory.pickedQty,
|
|
186
202
|
product_weight: targetInventory.releaseWeight,
|
|
187
203
|
product_gross_weight: inventory.product.grossWeight,
|
|
188
204
|
product_uom_value: targetInventory.releaseUomValue,
|
|
189
205
|
product_uom: inventory.uom,
|
|
190
|
-
product_brand_sku:
|
|
206
|
+
product_brand_sku:
|
|
207
|
+
wsd.targetInventory.product.id === wsd.targetInventory.inventory.product.id
|
|
208
|
+
? `${inventory.product?.brandSku || ''}`
|
|
209
|
+
: `${wsd.targetInventory.product?.brandSku || ''}`,
|
|
191
210
|
remark: targetInventory.remark,
|
|
192
211
|
inventory_remark: inventory.remark,
|
|
193
212
|
cross_docking: targetInventory.crossDocking,
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import { EntityManager, Equal, In, Not } from 'typeorm'
|
|
1
|
+
import { EntityManager, Equal, In, Not, getRepository, IsNull } from 'typeorm'
|
|
2
2
|
|
|
3
|
+
import { Domain } from '@things-factory/shell'
|
|
3
4
|
import { User } from '@things-factory/auth-base'
|
|
4
5
|
import { Bizplace } from '@things-factory/biz-base'
|
|
5
6
|
import { Product } from '@things-factory/product-base'
|
|
6
7
|
import {
|
|
7
8
|
ArrivalNotice,
|
|
9
|
+
OrderInventory,
|
|
8
10
|
ORDER_STATUS,
|
|
9
11
|
ORDER_TYPES,
|
|
10
12
|
ORDER_VAS_STATUS,
|
|
13
|
+
ORDER_INVENTORY_STATUS,
|
|
11
14
|
OrderNoGenerator,
|
|
12
15
|
OrderVas,
|
|
13
16
|
ReleaseGood,
|
|
@@ -38,6 +41,8 @@ import {
|
|
|
38
41
|
} from '../../graphql/resolvers/worksheet/vas-transactions'
|
|
39
42
|
import { PackingUnits } from '../../graphql/resolvers/worksheet/vas-transactions/interfaces/repackaging'
|
|
40
43
|
import { ReferenceOrderType, WorksheetController } from '../worksheet-controller'
|
|
44
|
+
import { LoadingWorksheetController } from '../../controllers'
|
|
45
|
+
import { v4 as uuidv4 } from 'uuid'
|
|
41
46
|
|
|
42
47
|
type CompleteTransactionType = (trxMgr: EntityManager, orderVas: OrderVas, user: User) => Promise<void>
|
|
43
48
|
|
|
@@ -681,7 +686,14 @@ export class VasWorksheetController extends WorksheetController {
|
|
|
681
686
|
return inventory
|
|
682
687
|
}
|
|
683
688
|
|
|
684
|
-
async completeVAS(
|
|
689
|
+
async completeVAS(
|
|
690
|
+
tx: any,
|
|
691
|
+
domain: Domain,
|
|
692
|
+
user: User,
|
|
693
|
+
orderNo: string,
|
|
694
|
+
orderType: string,
|
|
695
|
+
vasWorksheetDetails: WorksheetDetail[]
|
|
696
|
+
): Promise<Worksheet> {
|
|
685
697
|
const ENTITY_MAP: { [key: string]: ArrivalNotice | ReleaseGood | VasOrder } = {
|
|
686
698
|
[ORDER_TYPES.ARRIVAL_NOTICE]: ArrivalNotice,
|
|
687
699
|
[ORDER_TYPES.RELEASE_OF_GOODS]: ReleaseGood,
|
|
@@ -695,7 +707,9 @@ export class VasWorksheetController extends WorksheetController {
|
|
|
695
707
|
'worksheetDetails',
|
|
696
708
|
'worksheetDetails.targetVas',
|
|
697
709
|
'worksheetDetails.targetVas.vas',
|
|
698
|
-
'worksheetDetails.targetVas.inventory'
|
|
710
|
+
'worksheetDetails.targetVas.inventory',
|
|
711
|
+
'worksheetDetails.targetVas.orderVasItems',
|
|
712
|
+
'worksheetDetails.targetVas.orderVasItems.vas'
|
|
699
713
|
])
|
|
700
714
|
|
|
701
715
|
const isPureVAS: boolean = refOrder instanceof VasOrder
|
|
@@ -735,56 +749,59 @@ export class VasWorksheetController extends WorksheetController {
|
|
|
735
749
|
}, [])
|
|
736
750
|
|
|
737
751
|
for (const targetVas of targetVASs) {
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
// await this.doOperationTransaction(targetVas)
|
|
744
|
-
// } /*else if (targetVas.operationGuide && targetVas.vas.name.toUpperCase() === VAS.REPACKAGING && issue) {
|
|
745
|
-
// await this.doOperationTransaction(targetVas)
|
|
746
|
-
// }*/
|
|
752
|
+
if (targetVas.vas) {
|
|
753
|
+
// for old vas--> can be removed later
|
|
754
|
+
const { issue }: { issue: string } = foundWorksheetDetails.find(
|
|
755
|
+
(wsd: WorksheetDetail) => wsd.targetVas.id === targetVas.id
|
|
756
|
+
)
|
|
747
757
|
|
|
748
|
-
|
|
749
|
-
await this.doOperationTransaction(targetVas)
|
|
750
|
-
|
|
758
|
+
// if (targetVas.operationGuide && (!issue || (targetVas.vas.name.toUpperCase() == VAS.REPACKAGING && issue))) {
|
|
759
|
+
// await this.doOperationTransaction(targetVas)
|
|
760
|
+
// } /*else if (targetVas.operationGuide && targetVas.vas.name.toUpperCase() === VAS.REPACKAGING && issue) {
|
|
761
|
+
// await this.doOperationTransaction(targetVas)
|
|
762
|
+
// }*/
|
|
751
763
|
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
const parentInventory: Inventory = targetVas.inventory
|
|
755
|
-
let newParentInventory: Partial<Inventory> = Object.assign({}, parentInventory)
|
|
756
|
-
newParentInventory.qty = parentInventory.qty - targetVas.qty
|
|
757
|
-
newParentInventory.uomValue = Math.round((parentInventory.uomValue - targetVas.uomValue) * 100) / 100
|
|
758
|
-
newParentInventory.lockedQty = parentInventory.lockedQty - targetVas.qty
|
|
759
|
-
newParentInventory.lockedUomValue =
|
|
760
|
-
Math.round((parentInventory.lockedUomValue - targetVas.uomValue) * 100) / 100
|
|
761
|
-
|
|
762
|
-
// update qty and uomValue for VasOrder
|
|
763
|
-
// if refOrder is from ReleaseGood, no need to update because this trxn is consider similar to LOADING trxn
|
|
764
|
-
if (refOrder instanceof VasOrder) {
|
|
765
|
-
await this.transactionInventory(
|
|
766
|
-
newParentInventory,
|
|
767
|
-
refOrder,
|
|
768
|
-
-targetVas.qty,
|
|
769
|
-
-targetVas.uomValue,
|
|
770
|
-
INVENTORY_TRANSACTION_TYPE.UNPACKED
|
|
771
|
-
)
|
|
772
|
-
} else if (refOrder instanceof ReleaseGood) {
|
|
773
|
-
await generateInventoryHistory(
|
|
774
|
-
newParentInventory,
|
|
775
|
-
refOrder,
|
|
776
|
-
INVENTORY_TRANSACTION_TYPE.UNPACKED,
|
|
777
|
-
0,
|
|
778
|
-
0,
|
|
779
|
-
this.user,
|
|
780
|
-
this.trxMgr
|
|
781
|
-
)
|
|
764
|
+
if (targetVas.operationGuide && !issue) {
|
|
765
|
+
await this.doOperationTransaction(targetVas)
|
|
782
766
|
}
|
|
783
767
|
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
768
|
+
if (targetVas?.vas?.name.toUpperCase() === VAS.UNPACKING && !(refOrder instanceof ArrivalNotice)) {
|
|
769
|
+
// Update qty and uom value of parent inventory (only applies for pure vas and RO)
|
|
770
|
+
const parentInventory: Inventory = targetVas.inventory
|
|
771
|
+
let newParentInventory: Partial<Inventory> = Object.assign({}, parentInventory)
|
|
772
|
+
newParentInventory.qty = parentInventory.qty - targetVas.qty
|
|
773
|
+
newParentInventory.uomValue = Math.round((parentInventory.uomValue - targetVas.uomValue) * 100) / 100
|
|
774
|
+
newParentInventory.lockedQty = parentInventory.lockedQty - targetVas.qty
|
|
775
|
+
newParentInventory.lockedUomValue =
|
|
776
|
+
Math.round((parentInventory.lockedUomValue - targetVas.uomValue) * 100) / 100
|
|
777
|
+
|
|
778
|
+
// update qty and uomValue for VasOrder
|
|
779
|
+
// if refOrder is from ReleaseGood, no need to update because this trxn is consider similar to LOADING trxn
|
|
780
|
+
if (refOrder instanceof VasOrder) {
|
|
781
|
+
await this.transactionInventory(
|
|
782
|
+
newParentInventory,
|
|
783
|
+
refOrder,
|
|
784
|
+
-targetVas.qty,
|
|
785
|
+
-targetVas.uomValue,
|
|
786
|
+
INVENTORY_TRANSACTION_TYPE.UNPACKED
|
|
787
|
+
)
|
|
788
|
+
} else if (refOrder instanceof ReleaseGood) {
|
|
789
|
+
await generateInventoryHistory(
|
|
790
|
+
newParentInventory,
|
|
791
|
+
refOrder,
|
|
792
|
+
INVENTORY_TRANSACTION_TYPE.UNPACKED,
|
|
793
|
+
0,
|
|
794
|
+
0,
|
|
795
|
+
this.user,
|
|
796
|
+
this.trxMgr
|
|
797
|
+
)
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
// add TERMINATED status if inventory qty = 0
|
|
801
|
+
if (newParentInventory.qty === 0) {
|
|
802
|
+
newParentInventory.status = INVENTORY_STATUS.TERMINATED
|
|
803
|
+
await this.transactionInventory(newParentInventory, refOrder, 0, 0, INVENTORY_TRANSACTION_TYPE.TERMINATED)
|
|
804
|
+
}
|
|
788
805
|
}
|
|
789
806
|
}
|
|
790
807
|
}
|
|
@@ -812,7 +829,180 @@ export class VasWorksheetController extends WorksheetController {
|
|
|
812
829
|
? ORDER_STATUS.LOADING
|
|
813
830
|
: ORDER_STATUS.DONE
|
|
814
831
|
|
|
832
|
+
const releaseGood: ReleaseGood = await getRepository(ReleaseGood).findOne({
|
|
833
|
+
domain: domain.id,
|
|
834
|
+
name: orderNo
|
|
835
|
+
})
|
|
836
|
+
|
|
837
|
+
let qbOrderVas = await getRepository(OrderVas).createQueryBuilder('ov')
|
|
838
|
+
qbOrderVas
|
|
839
|
+
.leftJoinAndSelect(OrderInventory, 'oi', 'oi.release_good_id = ov.release_good_id')
|
|
840
|
+
.leftJoinAndSelect('ov.releaseGood', 'releaseGood')
|
|
841
|
+
.leftJoinAndSelect('ov.product', 'product')
|
|
842
|
+
.leftJoinAndSelect('ov.productDetail', 'productDetail')
|
|
843
|
+
.leftJoinAndSelect('ov.newProduct', 'newProduct')
|
|
844
|
+
.leftJoinAndSelect('ov.newProductDetail', 'newProductDetail')
|
|
845
|
+
.andWhere('ov.domain_id = :domain')
|
|
846
|
+
.andWhere('ov.release_good_id = :releaseGood')
|
|
847
|
+
.andWhere('ov.new_product_id notnull')
|
|
848
|
+
.andWhere('ov.new_product_detail_id notnull')
|
|
849
|
+
.setParameters({ domain: domain.id, releaseGood: releaseGood.id })
|
|
850
|
+
|
|
851
|
+
const orderVasWithNewSku: OrderVas[] = await qbOrderVas.getMany()
|
|
852
|
+
|
|
853
|
+
// .find({
|
|
854
|
+
// domain,
|
|
855
|
+
// releaseGood,
|
|
856
|
+
// newTargetProduct: Not(IsNull()),
|
|
857
|
+
// newTargetProductDetail: Not(IsNull())
|
|
858
|
+
// })
|
|
859
|
+
|
|
860
|
+
if (orderVasWithNewSku.length > 0) {
|
|
861
|
+
// const productId = orderVasWithNewSku.map(ov => {
|
|
862
|
+
// return ov.product.id
|
|
863
|
+
// })
|
|
864
|
+
|
|
865
|
+
let qbOrderInventories = await getRepository(OrderInventory)
|
|
866
|
+
.createQueryBuilder('oi')
|
|
867
|
+
.leftJoinAndSelect('oi.product', 'product')
|
|
868
|
+
.leftJoinAndSelect('oi.productDetail', 'productDetail')
|
|
869
|
+
.leftJoinAndSelect('oi.domain', 'domain')
|
|
870
|
+
.leftJoinAndSelect('oi.bizplace', 'bizplace')
|
|
871
|
+
.leftJoinAndSelect('oi.releaseGood', 'releaseGood')
|
|
872
|
+
.leftJoinAndSelect('oi.inventory', 'inventory')
|
|
873
|
+
.leftJoinAndSelect('oi.orderProduct', 'orderProduct')
|
|
874
|
+
.andWhere('oi.domain_id = :domain')
|
|
875
|
+
.andWhere('oi.product_id IN (:...productId)')
|
|
876
|
+
// .andWhere('inventory.batch_id IN (:...batchId)')
|
|
877
|
+
.andWhere('oi.release_good_id = :releaseGood')
|
|
878
|
+
.setParameters({
|
|
879
|
+
domain: domain.id,
|
|
880
|
+
productId: orderVasWithNewSku.map(ov => {
|
|
881
|
+
return ov.product.id
|
|
882
|
+
}),
|
|
883
|
+
// batchId: orderVasWithNewSku.map(ov => {
|
|
884
|
+
// return ov.batchId
|
|
885
|
+
// }),
|
|
886
|
+
releaseGood: releaseGood.id
|
|
887
|
+
})
|
|
888
|
+
|
|
889
|
+
let orderInventoryOrderVas: OrderInventory[] = await qbOrderInventories.getMany()
|
|
890
|
+
|
|
891
|
+
let updateOrderInventory: OrderInventory[] = []
|
|
892
|
+
|
|
893
|
+
let orderInventory: OrderInventory = {}
|
|
894
|
+
|
|
895
|
+
let saveOrderInventory: OrderInventory[] = []
|
|
896
|
+
|
|
897
|
+
// for saving oi
|
|
898
|
+
let newTargetInventory: OrderInventory = new OrderInventory()
|
|
899
|
+
|
|
900
|
+
let newOi: OrderInventory
|
|
901
|
+
// fix inventory
|
|
902
|
+
orderVasWithNewSku.forEach(ov => {
|
|
903
|
+
orderInventory = orderInventoryOrderVas.filter(oi => {
|
|
904
|
+
if (oi.product.id == ov.product.id && oi.releaseQty > 0 && oi.batchId == ov.batchId) {
|
|
905
|
+
if (oi.batchId == ov.batchId) {
|
|
906
|
+
return oi
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
})
|
|
910
|
+
let qtyVas: number = ov.qty
|
|
911
|
+
|
|
912
|
+
try {
|
|
913
|
+
for (let i = 0; qtyVas !== 0; i++) {
|
|
914
|
+
const oi = orderInventory[i]
|
|
915
|
+
//update old OI
|
|
916
|
+
const updatedReleaseQty: number = qtyVas <= oi.releaseQty ? oi.releaseQty - qtyVas : 0
|
|
917
|
+
const updatedReleaseUomValue: number = parseFloat(
|
|
918
|
+
(updatedReleaseQty * (oi.releaseUomValue / oi.releaseQty)).toFixed(2)
|
|
919
|
+
)
|
|
920
|
+
updateOrderInventory = {
|
|
921
|
+
...oi,
|
|
922
|
+
releaseQty: updatedReleaseQty,
|
|
923
|
+
pickedQty: oi.pickedQty,
|
|
924
|
+
status: updatedReleaseQty == 0 ? ORDER_INVENTORY_STATUS.TERMINATED : oi.status,
|
|
925
|
+
releaseUomValue: updatedReleaseUomValue,
|
|
926
|
+
updater: user,
|
|
927
|
+
updatedAt: new Date()
|
|
928
|
+
// cuFlag: 'M'
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
saveOrderInventory.push(updateOrderInventory)
|
|
932
|
+
|
|
933
|
+
// Duplicate oi for newSKU =
|
|
934
|
+
// new OrderInventory()
|
|
935
|
+
const newOiReleaseQty: number = qtyVas <= oi.releaseQty ? qtyVas : oi.releaseQty
|
|
936
|
+
//can delete
|
|
937
|
+
// const newOiReleaseUomValue: number = parseFloat((newOiReleaseQty * (ov.newUomValue / ov.qty)).toFixed(2))
|
|
938
|
+
|
|
939
|
+
newOi = {
|
|
940
|
+
...oi,
|
|
941
|
+
id: uuidv4(),
|
|
942
|
+
name: uuidv4(),
|
|
943
|
+
// domain: orderInventory.domain,
|
|
944
|
+
// bizplace: orderInventory.bizplace,
|
|
945
|
+
// releaseGood: orderInventory.releaseGood,
|
|
946
|
+
// inventory: orderInventory.inventory,
|
|
947
|
+
orderProduct: null,
|
|
948
|
+
// status: orderInventory.status, // can remove
|
|
949
|
+
batchId: newOi ? `${newOi.batchId} , ${oi.batchId}` : oi.batchId,
|
|
950
|
+
type: ORDER_TYPES.VAS_ORDER,
|
|
951
|
+
status: ORDER_INVENTORY_STATUS.LOADING,
|
|
952
|
+
releaseQty: ov.outputQty,
|
|
953
|
+
pickedQty: 0,
|
|
954
|
+
packingType: ov.newPackingType,
|
|
955
|
+
packingSize: ov.newProductDetail.packingSize,
|
|
956
|
+
uom: ov.newUom,
|
|
957
|
+
releaseUomValue: ov.newUomValue,
|
|
958
|
+
product: ov.newProduct,
|
|
959
|
+
productId: ov.newProduct.id,
|
|
960
|
+
productDetail: ov.newProductDetail,
|
|
961
|
+
creator: user,
|
|
962
|
+
updater: user,
|
|
963
|
+
createdAt: new Date(),
|
|
964
|
+
updatedAt: new Date()
|
|
965
|
+
// cuFlag: '+'
|
|
966
|
+
}
|
|
967
|
+
qtyVas = qtyVas - newOiReleaseQty
|
|
968
|
+
newTargetInventory = newOi
|
|
969
|
+
}
|
|
970
|
+
saveOrderInventory.push(newTargetInventory)
|
|
971
|
+
} catch (e) {
|
|
972
|
+
console.log(e)
|
|
973
|
+
}
|
|
974
|
+
})
|
|
975
|
+
await tx.getRepository(OrderInventory).save(saveOrderInventory)
|
|
976
|
+
// await tx.getRepository(OrderInventory).save(updateOrderInventory)
|
|
977
|
+
// .update({ id: orderInventory.id }, updateOrderInventory)
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
let orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
|
|
981
|
+
where: { domain: domain.id, releaseGood: releaseGood.id, status: Not(In([ORDER_INVENTORY_STATUS.TERMINATED])) }
|
|
982
|
+
// relations: ['product', 'productDetail', 'domain', 'bizplace', 'releaseGood', 'inventory', 'orderProduct']
|
|
983
|
+
})
|
|
984
|
+
|
|
985
|
+
// complete VAS worksheet
|
|
815
986
|
worksheet = await this.completeWorksheet(worksheet, orderStatus)
|
|
987
|
+
|
|
988
|
+
//generate and activate loading worksheet
|
|
989
|
+
if (releaseGood) {
|
|
990
|
+
const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
991
|
+
let loadingWorksheet = await this.generateWorksheet(
|
|
992
|
+
WORKSHEET_TYPE.LOADING,
|
|
993
|
+
releaseGood,
|
|
994
|
+
orderInventories,
|
|
995
|
+
ORDER_STATUS.LOADING,
|
|
996
|
+
ORDER_INVENTORY_STATUS.LOADING
|
|
997
|
+
)
|
|
998
|
+
const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
|
|
999
|
+
await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
|
|
1000
|
+
// here
|
|
1001
|
+
// const loadingWSCtrl: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
1002
|
+
// const loadingWorksheetDetails: WorksheetDetail[] = loadingWorksheet.worksheetDetails
|
|
1003
|
+
// await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails)
|
|
1004
|
+
}
|
|
1005
|
+
|
|
816
1006
|
return worksheet
|
|
817
1007
|
}
|
|
818
1008
|
|
|
@@ -416,7 +416,7 @@ export class WorksheetController {
|
|
|
416
416
|
let existingWorksheet: Worksheet
|
|
417
417
|
try {
|
|
418
418
|
existingWorksheet = await this.findWorksheetByRefOrder(refOrder, type)
|
|
419
|
-
} catch (e) {
|
|
419
|
+
} catch (e) {}
|
|
420
420
|
|
|
421
421
|
if (existingWorksheet)
|
|
422
422
|
throw new Error(
|
|
@@ -821,15 +821,26 @@ export class WorksheetController {
|
|
|
821
821
|
worksheetType === WORKSHEET_TYPE.PICKING_REPLENISHMENT ||
|
|
822
822
|
worksheetType === WORKSHEET_TYPE.PUTAWAY_REPLENISHMENT
|
|
823
823
|
) {
|
|
824
|
-
let targetInventories: OrderInventory[] =
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
824
|
+
let targetInventories: OrderInventory[] = []
|
|
825
|
+
if (updatedRefOrderStatus == 'VAS') {
|
|
826
|
+
targetInventories = worksheet.worksheetDetails
|
|
827
|
+
.filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
|
|
828
|
+
.map((wsd: WorksheetDetail) => {
|
|
829
|
+
let targetInventory: OrderInventory = wsd.targetInventory
|
|
830
|
+
targetInventory.status = updatedRefOrderStatus
|
|
831
|
+
targetInventory.updater = this.user
|
|
832
|
+
return targetInventory
|
|
833
|
+
})
|
|
834
|
+
} else {
|
|
835
|
+
targetInventories = worksheet.worksheetDetails
|
|
836
|
+
.filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
|
|
837
|
+
.map((wsd: WorksheetDetail) => {
|
|
838
|
+
let targetInventory: OrderInventory = wsd.targetInventory
|
|
839
|
+
targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
|
|
840
|
+
targetInventory.updater = this.user
|
|
841
|
+
return targetInventory
|
|
842
|
+
})
|
|
843
|
+
}
|
|
833
844
|
await this.updateOrderTargets(targetInventories)
|
|
834
845
|
}
|
|
835
846
|
|
|
@@ -16,10 +16,8 @@ export const loadingResolver = {
|
|
|
16
16
|
{ domain, name: releaseGoodNo },
|
|
17
17
|
['bizplace', 'deliverTo']
|
|
18
18
|
)
|
|
19
|
-
|
|
20
19
|
const loadingWorksheetController: LoadingWorksheetController = new LoadingWorksheetController(tx, domain, user)
|
|
21
20
|
let targetInventories: OrderInventory[] = worksheetDetails.map(itm => itm.targetInventory)
|
|
22
|
-
|
|
23
21
|
const bizplace: Bizplace = releaseGood.bizplace
|
|
24
22
|
orderInfo = {
|
|
25
23
|
...orderInfo,
|