@things-factory/worksheet-base 4.3.159 → 4.3.161
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/inbound/putaway-returning-worksheet-controller.js +3 -1
- package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js +3 -1
- package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +25 -14
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-manifest.js +11 -11
- package/dist-server/controllers/render-manifest.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +9 -17
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +20 -13
- package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +155 -124
- package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +249 -217
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +23 -5
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +2 -2
- package/dist-server/utils/inventory-util.js +29 -1
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +6 -6
- package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +3 -1
- package/server/controllers/inbound/putaway-worksheet-controller.ts +3 -1
- package/server/controllers/outbound/picking-worksheet-controller.ts +32 -16
- package/server/controllers/render-manifest.ts +10 -12
- package/server/controllers/worksheet-controller.ts +13 -17
- package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +24 -13
- package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +180 -142
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +276 -239
- package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +38 -8
- package/server/graphql/types/worksheet/index.ts +2 -2
- package/server/utils/inventory-util.ts +36 -0
package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts
CHANGED
|
@@ -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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
):
|
|
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
|
-
):
|
|
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
|
+
}
|