@things-factory/worksheet-base 4.3.159 → 4.3.162

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 (33) hide show
  1. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +3 -1
  2. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +3 -1
  4. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/outbound/picking-worksheet-controller.js +25 -14
  6. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/render-manifest.js +11 -11
  8. package/dist-server/controllers/render-manifest.js.map +1 -1
  9. package/dist-server/controllers/worksheet-controller.js +9 -17
  10. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +20 -13
  12. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +155 -124
  14. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  15. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +249 -217
  16. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  17. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +23 -5
  18. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
  19. package/dist-server/graphql/types/worksheet/index.js +2 -2
  20. package/dist-server/utils/inventory-util.js +29 -1
  21. package/dist-server/utils/inventory-util.js.map +1 -1
  22. package/package.json +6 -6
  23. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +3 -1
  24. package/server/controllers/inbound/putaway-worksheet-controller.ts +3 -1
  25. package/server/controllers/outbound/picking-worksheet-controller.ts +32 -16
  26. package/server/controllers/render-manifest.ts +10 -12
  27. package/server/controllers/worksheet-controller.ts +13 -17
  28. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +24 -13
  29. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +180 -142
  30. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +276 -239
  31. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +38 -8
  32. package/server/graphql/types/worksheet/index.ts +2 -2
  33. package/server/utils/inventory-util.ts +36 -0
@@ -10,7 +10,7 @@ import {
10
10
  OrderProduct
11
11
  } from '@things-factory/sales-base'
12
12
  import { Domain } from '@things-factory/shell'
13
- import { Inventory } from '@things-factory/warehouse-base'
13
+ import { generateInventoryHistory, Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
14
14
 
15
15
  import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'
16
16
  import { Worksheet, WorksheetDetail } from '../../../entities'
@@ -62,6 +62,7 @@ export async function regenerateReleaseGoodWorksheetDetails(
62
62
  'worksheetDetails.targetInventory',
63
63
  'worksheetDetails.targetInventory.inventory',
64
64
  'worksheetDetails.targetInventory.product',
65
+ 'worksheetDetails.targetInventory.binLocation',
65
66
  'worksheetDetails.targetInventory.releaseGood',
66
67
  'worksheetDetails.targetInventory.orderProduct',
67
68
  'worksheetDetails.targetInventory.bizplace'
@@ -73,21 +74,49 @@ export async function regenerateReleaseGoodWorksheetDetails(
73
74
  if (targetInv.orderProductId === orderProductId) return wsd.id
74
75
  })
75
76
 
77
+ let binLocations: any = []
78
+
76
79
  // TODO: Update prev inventory locked qty and delete order inventories
77
80
  if (prevWSDs?.length) {
78
81
  const wsdIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.id)
79
82
  const prevOrderInvIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory.id)
80
83
  const prevOrderInventories: OrderInventory[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory)
84
+ binLocations = prevOrderInventories.map(oi => {
85
+ return {
86
+ product: oi?.product,
87
+ binLocation: oi?.binLocation || null
88
+ }
89
+ })
81
90
  await Promise.all(
82
91
  prevOrderInventories.map(async prevOI => {
83
92
  if (prevOI?.inventory) {
84
- await tx.getRepository(Inventory).update(
85
- { id: prevOI.inventory.id },
86
- {
87
- lockedQty: prevOI.inventory.lockedQty - prevOI.releaseQty,
88
- lockedUomValue: prevOI.inventory.lockedUomValue - prevOI.releaseUomValue
89
- }
90
- )
93
+ if (prevOI.pickedQty == prevOI.releaseQty) {
94
+ await tx.getRepository(Inventory).update(
95
+ { id: prevOI.inventory.id },
96
+ {
97
+ qty: prevOI.inventory.qty + prevOI.releaseQty,
98
+ uomValue: prevOI.inventory.uomValue + prevOI.releaseUomValue
99
+ }
100
+ )
101
+
102
+ await generateInventoryHistory(
103
+ prevOI.inventory,
104
+ prevOI.releaseGood,
105
+ INVENTORY_TRANSACTION_TYPE.RETURN,
106
+ prevOI.releaseQty,
107
+ prevOI.releaseUomValue,
108
+ user,
109
+ tx
110
+ )
111
+ } else {
112
+ await tx.getRepository(Inventory).update(
113
+ { id: prevOI.inventory.id },
114
+ {
115
+ lockedQty: prevOI.inventory.lockedQty - prevOI.releaseQty,
116
+ lockedUomValue: prevOI.inventory.lockedUomValue - prevOI.releaseUomValue
117
+ }
118
+ )
119
+ }
91
120
  }
92
121
  })
93
122
  )
@@ -122,6 +151,7 @@ export async function regenerateReleaseGoodWorksheetDetails(
122
151
  packingSize,
123
152
  orderProduct: targetProduct,
124
153
  refWorksheetId: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? worksheet.id : null,
154
+ binLocation: binLocations?.length ? binLocations.find(bl => bl.product.id === productId)?.binLocation : null,
125
155
  creator: user,
126
156
  updater: user
127
157
  })
@@ -426,7 +426,7 @@ export const Mutation = /* GraphQL */ `
426
426
 
427
427
  completePicking (
428
428
  releaseGoodNo: String!
429
- ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
429
+ ): Inventory @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
430
430
 
431
431
  completeOrderSorting (
432
432
  releaseGoodNo: String!
@@ -443,7 +443,7 @@ export const Mutation = /* GraphQL */ `
443
443
 
444
444
  completeBatchPicking (
445
445
  taskNo: String!
446
- ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
446
+ ): Inventory @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
447
447
 
448
448
  completeInspection (
449
449
  inventoryCheckNo: String!
@@ -143,6 +143,10 @@ export async function inventoriesByStrategy(
143
143
  .andWhere('"LOC"."type" NOT IN (:...locationTypes)', {
144
144
  locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]
145
145
  })
146
+ .andWhere('"INV"."obsolete" = false')
147
+ .andWhere(
148
+ 'case when "INV"."expiration_date" is not null and "PROD"."shelf_life" is not null then CURRENT_DATE < "INV"."expiration_date" - "PROD"."shelf_life" else true end'
149
+ )
146
150
  .setParameters({
147
151
  domainId: domain.id,
148
152
  productId,
@@ -257,3 +261,35 @@ export async function isInventoryExpiring(inventory: Inventory): Promise<boolean
257
261
 
258
262
  return expiryDate < acceptBefore
259
263
  }
264
+
265
+ export async function isInventoryObsolete(inventories: Inventory[]): Promise<any> {
266
+ if (inventories?.length < 1) throw new Error('No inventory id provided')
267
+
268
+ let obsoleteInventories = []
269
+
270
+ for (let i = 0; i < inventories.length; i++) {
271
+ let product: Product | undefined = inventories[i].product
272
+ if (!product) {
273
+ let inventory: Inventory = await getRepository(Inventory).findOne(inventories[i].id, {
274
+ relations: ['product']
275
+ })
276
+ product = inventory.product
277
+ }
278
+
279
+ let { expirationDate } = inventories[i]
280
+ const { shelfLife } = product
281
+
282
+ if (shelfLife && expirationDate) {
283
+ let date: Date = new Date()
284
+ expirationDate = new Date(expirationDate)
285
+
286
+ const releaseBefore: Date = new Date(expirationDate.setDate(expirationDate.getDate() - shelfLife))
287
+
288
+ if (date > releaseBefore) {
289
+ obsoleteInventories.push(inventories[i].id)
290
+ }
291
+ }
292
+ }
293
+
294
+ return obsoleteInventories
295
+ }