@things-factory/worksheet-base 4.3.137 → 4.3.138

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 (70) hide show
  1. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +59 -73
  2. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js +2 -4
  4. package/dist-server/controllers/inspect/cycle-count-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/outbound/loading-worksheet-controller.js +5 -4
  6. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/outbound/packing-worksheet-controller.js +23 -23
  8. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/picking-worksheet-controller.js +78 -45
  10. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +14 -14
  12. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/vas/vas-worksheet-controller.js +1 -2
  14. package/dist-server/controllers/vas/vas-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/worksheet-controller.js +7 -7
  16. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  17. package/dist-server/entities/index.js +3 -2
  18. package/dist-server/entities/index.js.map +1 -1
  19. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +29 -62
  20. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
  21. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +6 -0
  22. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  23. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js +1 -2
  24. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +6 -6
  26. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  27. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +2 -2
  28. package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -1
  29. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +2 -1
  30. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  31. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +4 -1
  32. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +3 -2
  34. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/transfer.js +9 -9
  36. package/dist-server/graphql/resolvers/worksheet/transfer.js.map +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
  39. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js +17 -17
  40. package/dist-server/graphql/resolvers/worksheet/vas-transactions/common-utils.js.map +1 -1
  41. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +4 -4
  42. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
  43. package/dist-server/graphql/types/worksheet-detail/index.js +1 -0
  44. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  45. package/dist-server/utils/inventory-util.js +1 -98
  46. package/dist-server/utils/inventory-util.js.map +1 -1
  47. package/package.json +16 -16
  48. package/server/controllers/inbound/unloading-worksheet-controller.ts +74 -86
  49. package/server/controllers/inspect/cycle-count-worksheet-controller.ts +2 -4
  50. package/server/controllers/outbound/loading-worksheet-controller.ts +13 -3
  51. package/server/controllers/outbound/packing-worksheet-controller.ts +32 -37
  52. package/server/controllers/outbound/picking-worksheet-controller.ts +94 -59
  53. package/server/controllers/outbound/sorting-worksheet-controller.ts +14 -21
  54. package/server/controllers/vas/vas-worksheet-controller.ts +2 -2
  55. package/server/controllers/worksheet-controller.ts +15 -10
  56. package/server/entities/index.ts +2 -2
  57. package/server/entities/warehouse-bizplace-onhand-inventory.ts +29 -63
  58. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +6 -0
  59. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +1 -2
  60. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +2 -2
  61. package/server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts +2 -2
  62. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +3 -1
  63. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +4 -2
  64. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +3 -2
  65. package/server/graphql/resolvers/worksheet/transfer.ts +18 -16
  66. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +1 -1
  67. package/server/graphql/resolvers/worksheet/vas-transactions/common-utils.ts +3 -2
  68. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +4 -1
  69. package/server/graphql/types/worksheet-detail/index.ts +1 -0
  70. package/server/utils/inventory-util.ts +1 -126
@@ -32,6 +32,7 @@ export const batchPickingWorksheetResolver = {
32
32
  .addSelect('"PROD".name', 'productName')
33
33
  .addSelect('"PROD".sku', 'productSku')
34
34
  .addSelect('"PROD".description', 'productDescription')
35
+ .addSelect('"PROD_DET".id', 'productDetailId')
35
36
  .addSelect('"INV".qty', 'qty')
36
37
  .addSelect('"INV".packing_type', 'packingType')
37
38
  .addSelect('"INV".packing_size', 'packingSize')
@@ -47,6 +48,7 @@ export const batchPickingWorksheetResolver = {
47
48
  .leftJoin('WSD.targetInventory', 'T_INV')
48
49
  .leftJoin('T_INV.inventory', 'INV')
49
50
  .leftJoin('T_INV.product', 'PROD')
51
+ .leftJoin('T_INV.productDetail', 'PROD_DET')
50
52
  .leftJoin('T_INV.binLocation', 'BIN_LOC')
51
53
  .leftJoin('INV.location', 'LOC')
52
54
  .where('"WSD"."worksheet_id" = :worksheetId', { worksheetId: worksheet.id })
@@ -64,6 +66,7 @@ export const batchPickingWorksheetResolver = {
64
66
  .addGroupBy('"PROD".name')
65
67
  .addGroupBy('"PROD".sku')
66
68
  .addGroupBy('"PROD".description')
69
+ .addGroupBy('"PROD_DET".id')
67
70
  .addGroupBy('"T_INV".batch_id')
68
71
  .addGroupBy('"T_INV".packing_type')
69
72
  .addGroupBy('BIN_LOC.name')
@@ -126,6 +129,9 @@ export const batchPickingWorksheetResolver = {
126
129
  name: item?.productName,
127
130
  description: item?.productDescription,
128
131
  sku: item?.productSku
132
+ },
133
+ productDetail: {
134
+ id: item?.productDetailId
129
135
  }
130
136
  }
131
137
  }
@@ -13,10 +13,9 @@ import {
13
13
  ReleaseGood
14
14
  } from '@things-factory/sales-base'
15
15
  import { Domain } from '@things-factory/shell'
16
- import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location } from '@things-factory/warehouse-base'
16
+ import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location, generateInventoryHistory } from '@things-factory/warehouse-base'
17
17
 
18
18
  import { Worksheet, WorksheetDetail } from '../../../entities'
19
- import { generateInventoryHistory } from '../../../utils'
20
19
 
21
20
  export const confirmCancellationReleaseOrder = {
22
21
  async confirmCancellationReleaseOrder(_: any, { name }, context: any) {
@@ -4,12 +4,12 @@ import { User } from '@things-factory/auth-base'
4
4
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
5
  import { InventoryCheck, ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory } from '@things-factory/sales-base'
6
6
  import { Domain } from '@things-factory/shell'
7
- import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location } from '@things-factory/warehouse-base'
7
+ import { Inventory, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE, Location, generateInventoryHistory } from '@things-factory/warehouse-base'
8
8
 
9
9
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
10
10
  import { SellercraftController } from '../../../controllers'
11
11
  import { Worksheet, WorksheetDetail } from '../../../entities'
12
- import { generateInventoryHistory, switchLocationStatus } from '../../../utils'
12
+ import { switchLocationStatus } from '../../../utils'
13
13
 
14
14
  export const cycleCountAdjustmentResolver = {
15
15
  async cycleCountAdjustment(_: any, { cycleCountNo }, context: any) {
@@ -19,7 +19,7 @@ export const findSortingReleaseOrdersByTaskNoResolver = {
19
19
  async findSortingReleaseOrdersByTaskNo(_: any, { taskNo }, context: any) {
20
20
  const { domain, tx, user }: { domain: Domain; tx: EntityManager; user: User } = context.state
21
21
  let task = await tx.getRepository(WorksheetEntity).findOne({
22
- where: { taskNo, type: WORKSHEET_TYPE.SORTING },
22
+ where: { taskNo, type: WORKSHEET_TYPE.SORTING, domain },
23
23
  relations: ['bizplace', 'bizplace.domain', 'worksheetDetails']
24
24
  })
25
25
 
@@ -51,7 +51,7 @@ export const findSortingReleaseOrdersByTaskNoResolver = {
51
51
  if (orderInventoryByBin?.releaseGood_id) {
52
52
  taskNo = orderInventoryByBin.ws_task_no
53
53
  task = await tx.getRepository(WorksheetEntity).findOne({
54
- where: { taskNo, status: WORKSHEET_STATUS.DEACTIVATED, type: WORKSHEET_TYPE.SORTING }
54
+ where: { taskNo, status: WORKSHEET_STATUS.DEACTIVATED, type: WORKSHEET_TYPE.SORTING, domain }
55
55
  })
56
56
  } else {
57
57
  throw new Error(`Bin do not have any batch picking order.`)
@@ -40,6 +40,7 @@ export const inventoriesByPalletResolver = {
40
40
  qb.leftJoinAndSelect('iv.domain', 'domain')
41
41
  .leftJoinAndSelect('iv.bizplace', 'bizplace')
42
42
  .leftJoinAndSelect('iv.product', 'product')
43
+ .leftJoinAndSelect('iv.productDetail', 'productDetail')
43
44
  .leftJoinAndSelect('iv.warehouse', 'warehouse')
44
45
  .leftJoinAndSelect('iv.location', 'location')
45
46
  .leftJoinAndSelect('iv.creator', 'creator')
@@ -134,7 +135,8 @@ export const inventoriesByPalletResolver = {
134
135
  productName: item.product.name,
135
136
  productSKU: item.product.sku,
136
137
  productBrand: item.product.brand,
137
- productId: item.product.id
138
+ productId: item.product.id,
139
+ productDetailId: item.productDetail.id
138
140
  }
139
141
  })
140
142
  )
@@ -14,7 +14,7 @@ import { PartnerSetting, Setting } from '@things-factory/setting-base'
14
14
  import { Domain } from '@things-factory/shell'
15
15
  import { Inventory, Location } from '@things-factory/warehouse-base'
16
16
 
17
- import { WORKSHEET_TYPE } from '../../../constants'
17
+ import { WORKSHEET_TYPE, WORKSHEET_STATUS } from '../../../constants'
18
18
  import { PackingWorksheetController, SellercraftController } from '../../../controllers'
19
19
  import { Worksheet, WorksheetDetail } from '../../../entities'
20
20
 
@@ -104,7 +104,9 @@ export const packingWorksheetResolver = {
104
104
 
105
105
  if (!worksheet) throw new Error('Worksheet does not exist')
106
106
 
107
- if (worksheet.status === 'DEACTIVATED') {
107
+ if (worksheet.status === WORKSHEET_STATUS.DONE) {
108
+ throw new Error(`Worksheet is completed already`)
109
+ } else if (worksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
108
110
  const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
109
111
 
110
112
  const directActivatePackingWorksheet: Setting = await tx.getRepository(Setting).findOne({
@@ -76,6 +76,7 @@ export async function pickingWorksheet(
76
76
  .leftJoinAndSelect('T_INV.binLocation', 'BIN_LOC')
77
77
  .leftJoinAndSelect('T_INV.inventory', 'INV')
78
78
  .leftJoinAndSelect('T_INV.product', 'PROD')
79
+ .leftJoinAndSelect('T_INV.productDetail', 'PROD_DET')
79
80
  .leftJoinAndSelect('INV.location', 'LOC')
80
81
 
81
82
  if (locationSortingRules?.length > 0) {
@@ -114,8 +115,8 @@ export async function pickingWorksheet(
114
115
  const inventoryChangesCount: number = await tx.getRepository(InventoryChange).count({
115
116
  where: {
116
117
  inventory: inventory.id,
117
- status: "PENDING",
118
- transactionType: "MISSING"
118
+ status: 'PENDING',
119
+ transactionType: 'MISSING'
119
120
  },
120
121
  relations: ['inventory', 'product']
121
122
  })
@@ -1,38 +1,36 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { Bizplace } from '@things-factory/biz-base'
5
+ import { ORDER_PRODUCT_STATUS, OrderInventory } from '@things-factory/sales-base'
3
6
  import { Domain } from '@things-factory/shell'
4
- import { OrderInventory, ORDER_PRODUCT_STATUS } from '@things-factory/sales-base'
5
7
  import {
6
8
  Inventory,
7
- InventoryHistory,
8
- InventoryNoGenerator,
9
9
  INVENTORY_STATUS,
10
- INVENTORY_TRANSACTION_TYPE
10
+ INVENTORY_TRANSACTION_TYPE,
11
+ InventoryHistory,
12
+ InventoryNoGenerator
11
13
  } from '@things-factory/warehouse-base'
12
- import { EntityManager } from 'typeorm'
14
+
13
15
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
14
16
  import { Worksheet, WorksheetDetail } from '../../../entities'
15
17
 
16
18
  export const transfer = {
17
19
  async transfer(_: any, { palletId, toPalletId, qty }, context: any) {
18
- const {
19
- tx,
20
- domain,
21
- bizplace,
22
- user
23
- }: { tx: EntityManager; domain: Domain; bizplace: Bizplace; user: User } = context.state
20
+ const { tx, domain, bizplace, user }: { tx: EntityManager; domain: Domain; bizplace: Bizplace; user: User } =
21
+ context.state
24
22
 
25
23
  // 1. get to inventory
26
24
  let toInventory: Inventory = await tx.getRepository(Inventory).findOne({
27
25
  where: { domain: domain, palletId: toPalletId },
28
- relations: ['bizplace', 'product', 'warehouse', 'location']
26
+ relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
29
27
  })
30
28
  if (!toInventory) throw new Error(`to pallet doesn't exists`)
31
29
 
32
30
  // 2. get from inventory
33
31
  let fromInventory: Inventory = await tx.getRepository(Inventory).findOne({
34
32
  where: { domain: domain, palletId },
35
- relations: ['bizplace', 'product', 'warehouse', 'location']
33
+ relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
36
34
  })
37
35
  if (!fromInventory) throw new Error(`from pallet doesn't exists`)
38
36
  if (toInventory.batchId !== fromInventory.batchId) throw new Error(`Can't transfer to different batch`)
@@ -74,6 +72,7 @@ export const transfer = {
74
72
  domain: domain,
75
73
  name: InventoryNoGenerator.inventoryHistoryName(),
76
74
  product: toInventory.product,
75
+ productDetail: toInventory.productDetail,
77
76
  warehouse: toInventory.warehouse,
78
77
  location: toInventory.location,
79
78
  seq: toInventory.lastSeq,
@@ -97,7 +96,7 @@ export const transfer = {
97
96
 
98
97
  fromInventory = await tx.getRepository(Inventory).findOne({
99
98
  where: { id: fromInventory.id },
100
- relations: ['bizplace', 'product', 'warehouse', 'location']
99
+ relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
101
100
  })
102
101
 
103
102
  // - add inventory history
@@ -105,6 +104,7 @@ export const transfer = {
105
104
  ...fromInventory,
106
105
  name: InventoryNoGenerator.inventoryHistoryName(),
107
106
  product: fromInventory.product,
107
+ productDetail: fromInventory.productDetail,
108
108
  warehouse: fromInventory.warehouse,
109
109
  location: fromInventory.location,
110
110
  seq: fromInventory.lastSeq,
@@ -131,7 +131,7 @@ export const transfer = {
131
131
 
132
132
  toInventory = await tx.getRepository(Inventory).findOne({
133
133
  where: { id: toInventory.id },
134
- relations: ['bizplace', 'product', 'warehouse', 'location']
134
+ relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
135
135
  })
136
136
  // - add inventory history
137
137
  delete toInventory.id
@@ -140,6 +140,7 @@ export const transfer = {
140
140
  domain,
141
141
  name: InventoryNoGenerator.inventoryHistoryName(),
142
142
  product: toInventory.product,
143
+ productDetail: toInventory.productDetail,
143
144
  warehouse: toInventory.warehouse,
144
145
  location: toInventory.location,
145
146
  seq: toInventory.lastSeq,
@@ -157,7 +158,7 @@ export const transfer = {
157
158
 
158
159
  fromInventory = await tx.getRepository(Inventory).findOne({
159
160
  where: { id: fromInventory.id },
160
- relations: ['bizplace', 'product', 'warehouse', 'location']
161
+ relations: ['bizplace', 'product', 'productDetail', 'warehouse', 'location']
161
162
  })
162
163
 
163
164
  // - add inventory history
@@ -165,6 +166,7 @@ export const transfer = {
165
166
  ...fromInventory,
166
167
  name: InventoryNoGenerator.inventoryHistoryName(),
167
168
  product: fromInventory.product,
169
+ productDetail: fromInventory.productDetail,
168
170
  warehouse: fromInventory.warehouse,
169
171
  location: fromInventory.location,
170
172
  seq: fromInventory.lastSeq,
@@ -44,7 +44,7 @@ export const unloadedInventories = {
44
44
  orderProductId: In(foundWorksheetDetails.map(wsd => wsd.targetProduct.id)),
45
45
  status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED])
46
46
  },
47
- relations: ['reusablePallet', 'product', 'bizplace']
47
+ relations: ['reusablePallet', 'product', 'bizplace', 'inventoryItems']
48
48
  })
49
49
  const items = foundInv.map((inv: Inventory) => {
50
50
  const expirationDate: Date = inv.expirationDate ? new Date(inv.expirationDate) : null
@@ -19,12 +19,13 @@ import {
19
19
  InventoryNoGenerator,
20
20
  Location,
21
21
  Pallet,
22
- Warehouse
22
+ Warehouse,
23
+ generateInventoryHistory
23
24
  } from '@things-factory/warehouse-base'
24
25
 
25
26
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
26
27
  import { Worksheet, WorksheetDetail } from '../../../../entities'
27
- import { generateInventoryHistory, WorksheetNoGenerator } from '../../../../utils'
28
+ import { WorksheetNoGenerator } from '../../../../utils'
28
29
  import {
29
30
  OperationGuideInterface,
30
31
  PackingUnits,
@@ -19,7 +19,7 @@ import { WorksheetNoGenerator } from '../../../utils'
19
19
  export const regenerateReleaseGoodWorksheetDetailsResolver = {
20
20
  async regenerateReleaseGoodWorksheetDetails(
21
21
  _: any,
22
- { worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails },
22
+ { worksheetNo, batchId, productId, productDetailId, packingType, packingSize, orderProductId, worksheetDetails },
23
23
  context: any
24
24
  ): Promise<void> {
25
25
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
@@ -30,6 +30,7 @@ export const regenerateReleaseGoodWorksheetDetailsResolver = {
30
30
  worksheetNo,
31
31
  batchId,
32
32
  productId,
33
+ productDetailId,
33
34
  packingType,
34
35
  packingSize,
35
36
  orderProductId,
@@ -45,6 +46,7 @@ export async function regenerateReleaseGoodWorksheetDetails(
45
46
  worksheetNo: string,
46
47
  batchId: string,
47
48
  productId: string,
49
+ productDetailId: string,
48
50
  packingType: string,
49
51
  packingSize: number,
50
52
  orderProductId: string,
@@ -115,6 +117,7 @@ export async function regenerateReleaseGoodWorksheetDetails(
115
117
  batchIdRef: inventory.batchIdRef,
116
118
  status: ORDER_INVENTORY_STATUS.READY_TO_PICK,
117
119
  product: await tx.getRepository(Product).findOne(productId),
120
+ productDetail: productDetailId,
118
121
  packingType,
119
122
  packingSize,
120
123
  orderProduct: targetProduct,
@@ -32,6 +32,7 @@ export const Mutation = /* GraphQL */ `
32
32
  worksheetNo: String!
33
33
  batchId: String!
34
34
  productId: String!
35
+ productDetailId: String!
35
36
  packingType: String!
36
37
  packingSize: Float!
37
38
  orderProductId: String!
@@ -4,134 +4,9 @@ import { User } from '@things-factory/auth-base'
4
4
  import { Bizplace } from '@things-factory/biz-base'
5
5
  import { Product } from '@things-factory/product-base'
6
6
  import { Domain } from '@things-factory/shell'
7
- import {
8
- Inventory,
9
- INVENTORY_STATUS,
10
- InventoryHistory,
11
- InventoryNoGenerator,
12
- Location,
13
- LOCATION_STATUS,
14
- LOCATION_TYPE
15
- } from '@things-factory/warehouse-base'
7
+ import { Inventory, INVENTORY_STATUS, Location, LOCATION_STATUS, LOCATION_TYPE } from '@things-factory/warehouse-base'
16
8
 
17
9
  /**
18
- * @description It will insert new record into inventory histories table.
19
- * seq will be calculated based on number of records for one specific pallet id (provided by inventory object)
20
- */
21
- export async function generateInventoryHistory(
22
- inventory: Inventory,
23
- refOrder: any,
24
- transactionType: string,
25
- qty: number = 0,
26
- uomValue: number = 0,
27
- user: User,
28
- trxMgr?: EntityManager,
29
- targetInventory: Inventory = {}
30
- ): Promise<InventoryHistory> {
31
- const invHistoryRepo: Repository<InventoryHistory> =
32
- trxMgr?.getRepository(InventoryHistory) || getRepository(InventoryHistory)
33
- const invRepo: Repository<Inventory> = trxMgr?.getRepository(Inventory) || getRepository(Inventory)
34
-
35
- if (!inventory?.id) throw new Error(`Can't find out ID of inventory.`)
36
- if (!refOrder?.id || !refOrder.name) throw new Error(`Can't find out ID or Name of Reference Order`)
37
- if (
38
- !inventory?.domain ||
39
- !inventory?.bizplace ||
40
- !inventory?.product?.id ||
41
- !inventory?.warehouse?.id ||
42
- !inventory?.location?.id
43
- ) {
44
- inventory = await invRepo.findOne({
45
- where: { id: inventory.id },
46
- relations: ['domain', 'bizplace', 'product', 'warehouse', 'location']
47
- })
48
- }
49
-
50
- const domain: Domain = inventory.domain
51
- const location: Location = inventory.location
52
-
53
- const seq: number = await invHistoryRepo.count({ domain: inventory.domain, palletId: inventory.palletId })
54
- let openingQty: number = 0
55
- let openingUomValue: number = 0
56
-
57
- if (seq) {
58
- const lastInvHistory: InventoryHistory = await invHistoryRepo.findOne({
59
- domain: inventory.domain,
60
- palletId: inventory.palletId,
61
- seq: seq - 1
62
- })
63
-
64
- openingQty = lastInvHistory.openingQty + lastInvHistory.qty
65
- openingUomValue = lastInvHistory.openingUomValue + lastInvHistory.uomValue
66
- }
67
-
68
- if (transactionType == 'PICKING' || transactionType == 'UNLOADING') {
69
- const [findSameOrderHistory, total]: InventoryHistory = await invHistoryRepo.findAndCount({
70
- domain: inventory.domain,
71
- palletId: inventory.palletId,
72
- refOrderId: refOrder.id
73
- })
74
-
75
- if (findSameOrderHistory) {
76
- let prevTotalQty = 0
77
- let prevTotalUomValue = 0
78
- for (let oh of findSameOrderHistory) {
79
- prevTotalQty += oh.qty
80
- prevTotalUomValue += oh.uomValue
81
- }
82
- qty -= prevTotalQty
83
- uomValue -= prevTotalUomValue
84
- }
85
- }
86
-
87
- let inventoryHistory: InventoryHistory = new InventoryHistory()
88
- inventoryHistory.name = InventoryNoGenerator.inventoryHistoryName()
89
- inventoryHistory.description = inventory.description
90
- inventoryHistory.seq = seq
91
- inventoryHistory.palletId = inventory.palletId
92
- inventoryHistory.cartonId = inventory.cartonId
93
- inventoryHistory.batchId = inventory.batchId
94
- inventoryHistory.batchIdRef = inventory.batchIdRef
95
- inventoryHistory.status = inventory.status
96
- inventoryHistory.transactionType = transactionType
97
- inventoryHistory.refOrderId = refOrder?.id || null
98
- inventoryHistory.orderNo = refOrder?.name || null
99
- inventoryHistory.orderRefNo = refOrder?.refNo || null
100
- inventoryHistory.inventory = inventory
101
- inventoryHistory.targetInventory = targetInventory
102
- inventoryHistory.product = inventory.product
103
- inventoryHistory.reusablePallet = inventory.reusablePallet
104
- inventoryHistory.zone = inventory.zone
105
- inventoryHistory.warehouse = inventory.warehouse
106
- inventoryHistory.location = inventory.location
107
- inventoryHistory.expirationDate = inventory.expirationDate
108
- inventoryHistory.packingType = inventory.packingType
109
- inventoryHistory.packingSize = inventory.packingSize
110
- inventoryHistory.uom = inventory.uom
111
- inventoryHistory.qty = qty
112
- inventoryHistory.openingQty = openingQty
113
- inventoryHistory.uomValue = uomValue
114
- inventoryHistory.openingUomValue = openingUomValue
115
- inventoryHistory.unitCost = inventory.unitCost
116
- inventoryHistory.domain = inventory.domain
117
- inventoryHistory.bizplace = inventory.bizplace
118
- inventoryHistory.creator = user
119
- inventoryHistory.updater = user
120
-
121
- inventoryHistory = await invHistoryRepo.save(inventoryHistory)
122
-
123
- if (inventory.lastSeq !== seq) {
124
- await invRepo.save({
125
- id: inventory.id,
126
- lastSeq: inventoryHistory.seq,
127
- updater: user
128
- })
129
- }
130
-
131
- await switchLocationStatus(domain, location, user, trxMgr)
132
- return inventoryHistory
133
- }
134
-
135
10
  /**
136
11
  * @description: Check location emptiness and update status of location
137
12
  * @param domain