@things-factory/worksheet-base 4.3.239 → 4.3.242

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.
Files changed (48) hide show
  1. package/dist-server/controllers/outbound/loading-worksheet-controller.js +36 -9
  2. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/picking-worksheet-controller.js +13 -7
  4. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/render-ro-do.js +21 -8
  6. package/dist-server/controllers/render-ro-do.js.map +1 -1
  7. package/dist-server/controllers/vas/vas-worksheet-controller.js +157 -31
  8. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/worksheet-controller.js +21 -8
  10. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  12. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js +4 -4
  13. package/dist-server/graphql/resolvers/worksheet/loading/undo-loading.js.map +1 -1
  14. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +62 -3
  15. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  16. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +18 -1
  17. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  18. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js +22 -1
  19. package/dist-server/graphql/resolvers/worksheet/vas/complete-vas.js.map +1 -1
  20. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js +9 -7
  21. package/dist-server/graphql/resolvers/worksheet/vas-worksheet.js.map +1 -1
  22. package/dist-server/graphql/resolvers/worksheet/worksheet.js +31 -16
  23. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  24. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js +3 -0
  25. package/dist-server/graphql/resolvers/worksheet-detail/create-worksheet-detail.js.map +1 -1
  26. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js +1 -1
  27. package/dist-server/graphql/resolvers/worksheet-detail/worksheet-detail.js.map +1 -1
  28. package/dist-server/graphql/types/worksheet/index.js +2 -1
  29. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  30. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +1 -0
  31. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  32. package/package.json +4 -4
  33. package/server/controllers/outbound/loading-worksheet-controller.ts +38 -10
  34. package/server/controllers/outbound/picking-worksheet-controller.ts +13 -6
  35. package/server/controllers/render-ro-do.ts +25 -6
  36. package/server/controllers/vas/vas-worksheet-controller.ts +239 -49
  37. package/server/controllers/worksheet-controller.ts +21 -10
  38. package/server/graphql/resolvers/worksheet/loading/loading.ts +0 -2
  39. package/server/graphql/resolvers/worksheet/loading/undo-loading.ts +5 -4
  40. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +68 -2
  41. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +20 -1
  42. package/server/graphql/resolvers/worksheet/vas/complete-vas.ts +27 -2
  43. package/server/graphql/resolvers/worksheet/vas-worksheet.ts +7 -5
  44. package/server/graphql/resolvers/worksheet/worksheet.ts +34 -13
  45. package/server/graphql/resolvers/worksheet-detail/create-worksheet-detail.ts +5 -1
  46. package/server/graphql/resolvers/worksheet-detail/worksheet-detail.ts +1 -1
  47. package/server/graphql/types/worksheet/index.ts +2 -1
  48. package/server/graphql/types/worksheet/worksheet-detail-info.ts +1 -0
@@ -43,6 +43,7 @@ exports.WorksheetDetailInfo = (0, apollo_server_koa_1.gql) `
43
43
  targetType: String
44
44
  targetBatchId: String
45
45
  targetProduct: Product
46
+ targetVas: OrderVas
46
47
  otherTarget: String
47
48
  vas: Vas
48
49
  targetName: String
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsErC,CAAA"}
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.239",
3
+ "version": "4.3.242",
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.239",
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.239",
43
+ "@things-factory/warehouse-base": "^4.3.241",
44
44
  "uuid": "^9.0.0"
45
45
  },
46
- "gitHead": "ed967aa995647ed1ebd4dd08d162d3a7ffddee51"
46
+ "gitHead": "bed41128f2997bc35a711b1ab73d17b8334567e7"
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 = targetInventory.releaseQty
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 = loadedQty
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 = ORDER_TYPES.RELEASE_OF_GOODS
195
+ newTargetInventory.type = targetInventory.type
184
196
  newTargetInventory.status = ORDER_INVENTORY_STATUS.LOADING
185
- newTargetInventory.releaseQty = remainQty
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.releaseQty += undoTargetOrderInventory.releaseQty
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
- try {
226
- const vasWorksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.VAS)
227
- if (vasWorksheet) {
228
- await this.activateVAS(vasWorksheet.name, vasWorksheet.worksheetDetails)
229
- }
230
- } catch (e) {}
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,15 @@ 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
+ } else if (orderVas.length > 0) {
1352
+ orderStatus = ORDER_STATUS.VAS
1346
1353
  } else {
1347
1354
  orderStatus = ORDER_STATUS.LOADING
1348
1355
  }
@@ -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: `${inventory.product.name} (${inventory.product.description})`,
178
- product_desc: `${inventory.product?.description || ''}`,
179
- product_nameOnly: `${inventory.product.name}`,
180
- product_sku: `${inventory.product.sku}`,
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: targetInventory.releaseQty,
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: `${inventory.product?.brandSku || ''}`,
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(orderNo: string, orderType: string, vasWorksheetDetails: WorksheetDetail[]): Promise<Worksheet> {
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
- const { issue }: { issue: string } = foundWorksheetDetails.find(
739
- (wsd: WorksheetDetail) => wsd.targetVas.id === targetVas.id
740
- )
741
-
742
- // if (targetVas.operationGuide && (!issue || (targetVas.vas.name.toUpperCase() == VAS.REPACKAGING && issue))) {
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
- if (targetVas.operationGuide && !issue) {
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
- if (targetVas.vas.name.toUpperCase() === VAS.UNPACKING && !(refOrder instanceof ArrivalNotice)) {
753
- // Update qty and uom value of parent inventory (only applies for pure vas and RO)
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
- // add TERMINATED status if inventory qty = 0
785
- if (newParentInventory.qty === 0) {
786
- newParentInventory.status = INVENTORY_STATUS.TERMINATED
787
- await this.transactionInventory(newParentInventory, refOrder, 0, 0, INVENTORY_TRANSACTION_TYPE.TERMINATED)
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[] = worksheet.worksheetDetails
825
- .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
826
- .map((wsd: WorksheetDetail) => {
827
- let targetInventory: OrderInventory = wsd.targetInventory
828
- targetInventory.status = ORDER_INVENTORY_STATUS.TERMINATED
829
- targetInventory.updater = this.user
830
- return targetInventory
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,