@things-factory/worksheet-base 4.3.247 → 4.3.249

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 (22) hide show
  1. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +2 -1
  2. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/picking-worksheet-controller.js +239 -27
  4. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  5. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +6 -4
  6. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +2 -1
  8. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/worksheet.js +15 -8
  10. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +1 -0
  12. package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -1
  13. package/dist-server/utils/inventory-util.js +6 -6
  14. package/dist-server/utils/inventory-util.js.map +1 -1
  15. package/package.json +18 -18
  16. package/server/controllers/inbound/putaway-worksheet-controller.ts +2 -1
  17. package/server/controllers/outbound/picking-worksheet-controller.ts +326 -36
  18. package/server/entities/warehouse-bizplace-onhand-inventory.ts +6 -4
  19. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +46 -62
  20. package/server/graphql/resolvers/worksheet/worksheet.ts +11 -4
  21. package/server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts +1 -0
  22. package/server/utils/inventory-util.ts +6 -6
@@ -198,11 +198,11 @@ async function isInventoryExpiring(inventory) {
198
198
  product = inventory.product;
199
199
  }
200
200
  const { expirationDate } = inventory;
201
- const { isRequiredCheckExpiry, expirationPeriod } = product;
202
- if (!isRequiredCheckExpiry || !expirationPeriod || expirationDate <= 0)
201
+ const { isRequiredCheckExpiry, minInboundShelfLife } = product;
202
+ if (!isRequiredCheckExpiry || !minInboundShelfLife || expirationDate <= 0)
203
203
  return false;
204
204
  let date = new Date();
205
- const acceptBefore = new Date(date.setDate(date.getDate() + expirationPeriod));
205
+ const acceptBefore = new Date(date.setDate(date.getDate() + minInboundShelfLife));
206
206
  const expiryDate = new Date(expirationDate);
207
207
  return expiryDate < acceptBefore;
208
208
  }
@@ -220,11 +220,11 @@ async function isInventoryObsolete(inventories) {
220
220
  product = inventory.product;
221
221
  }
222
222
  let { expirationDate } = inventories[i];
223
- const { shelfLife } = product;
224
- if (shelfLife && expirationDate) {
223
+ const { minOutboundShelfLife } = product;
224
+ if (minOutboundShelfLife && expirationDate) {
225
225
  let date = new Date();
226
226
  expirationDate = new Date(expirationDate);
227
- const releaseBefore = new Date(expirationDate.setDate(expirationDate.getDate() - shelfLife));
227
+ const releaseBefore = new Date(expirationDate.setDate(expirationDate.getDate() - minOutboundShelfLife));
228
228
  if (date > releaseBefore) {
229
229
  obsoleteInventories.push(inventories[i].id);
230
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/worksheet-base",
3
- "version": "4.3.247",
3
+ "version": "4.3.249",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -23,25 +23,25 @@
23
23
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
24
24
  },
25
25
  "dependencies": {
26
- "@things-factory/auth-base": "^4.3.237",
27
- "@things-factory/biz-base": "^4.3.237",
26
+ "@things-factory/auth-base": "^4.3.248",
27
+ "@things-factory/biz-base": "^4.3.248",
28
28
  "@things-factory/document-template-base": "^4.3.237",
29
- "@things-factory/id-rule-base": "^4.3.237",
30
- "@things-factory/integration-accounting": "^4.3.239",
31
- "@things-factory/integration-base": "^4.3.238",
32
- "@things-factory/integration-lmd": "^4.3.239",
33
- "@things-factory/integration-marketplace": "^4.3.239",
34
- "@things-factory/integration-powrup": "^4.3.244",
35
- "@things-factory/integration-sellercraft": "^4.3.239",
36
- "@things-factory/integration-sftp": "^4.3.239",
37
- "@things-factory/marketplace-base": "^4.3.239",
38
- "@things-factory/notification": "^4.3.237",
39
- "@things-factory/sales-base": "^4.3.246",
40
- "@things-factory/setting-base": "^4.3.237",
29
+ "@things-factory/id-rule-base": "^4.3.248",
30
+ "@things-factory/integration-accounting": "^4.3.248",
31
+ "@things-factory/integration-base": "^4.3.248",
32
+ "@things-factory/integration-lmd": "^4.3.248",
33
+ "@things-factory/integration-marketplace": "^4.3.248",
34
+ "@things-factory/integration-powrup": "^4.3.248",
35
+ "@things-factory/integration-sellercraft": "^4.3.248",
36
+ "@things-factory/integration-sftp": "^4.3.248",
37
+ "@things-factory/marketplace-base": "^4.3.248",
38
+ "@things-factory/notification": "^4.3.248",
39
+ "@things-factory/sales-base": "^4.3.249",
40
+ "@things-factory/setting-base": "^4.3.248",
41
41
  "@things-factory/shell": "^4.3.237",
42
- "@things-factory/transport-base": "^4.3.237",
43
- "@things-factory/warehouse-base": "^4.3.246",
42
+ "@things-factory/transport-base": "^4.3.248",
43
+ "@things-factory/warehouse-base": "^4.3.249",
44
44
  "uuid": "^9.0.0"
45
45
  },
46
- "gitHead": "1d7ff6cba871a66a8edceba43299d3c7517c62f3"
46
+ "gitHead": "ebd830d0d88c40b83c406c8f7f663c8fa345b2d5"
47
47
  }
@@ -284,7 +284,8 @@ export class PutawayWorksheetController extends VasWorksheetController {
284
284
  LOCATION_TYPE.BIN,
285
285
  LOCATION_TYPE.QUARANTINE,
286
286
  LOCATION_TYPE.RESERVE,
287
- LOCATION_TYPE.STORAGE
287
+ LOCATION_TYPE.STORAGE,
288
+ LOCATION_TYPE.DAMAGE
288
289
  ])
289
290
  },
290
291
  relations: ['warehouse']
@@ -7,6 +7,7 @@ import { generateId } from '@things-factory/id-rule-base'
7
7
  import { Powrup } from '@things-factory/integration-powrup'
8
8
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
9
9
  import { Product, ProductBarcode, ProductDetail } from '@things-factory/product-base'
10
+
10
11
  import {
11
12
  GenerateBatchPickInfo,
12
13
  ORDER_INVENTORY_STATUS,
@@ -20,6 +21,8 @@ import {
20
21
  OrderToteSeal,
21
22
  OrderVas,
22
23
  ReleaseGood,
24
+ InventoryUtil,
25
+ ORDER_TYPES,
23
26
  PowrupController
24
27
  } from '@things-factory/sales-base'
25
28
  import { Setting } from '@things-factory/setting-base'
@@ -34,13 +37,14 @@ import {
34
37
  Location,
35
38
  LOCATION_TYPE,
36
39
  Tote,
37
- TOTE_STATUS
40
+ TOTE_STATUS,
41
+ ProductDetailStock
38
42
  } from '@things-factory/warehouse-base'
39
43
 
40
44
  import { TASK_NUMBER_RULE_TYPE, TASK_NUMBER_SETTING_KEY, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
41
45
  import { SellercraftController } from '../../controllers'
42
46
  import { Worksheet, WorksheetDetail } from '../../entities'
43
- import { isInventoryObsolete, WorksheetNoGenerator } from '../../utils'
47
+ import { isInventoryObsolete, WorksheetNoGenerator, inventoriesByStrategy } from '../../utils'
44
48
  import { VasWorksheetController } from '../vas/vas-worksheet-controller'
45
49
 
46
50
  export class PickingWorksheetController extends VasWorksheetController {
@@ -113,6 +117,10 @@ export class PickingWorksheetController extends VasWorksheetController {
113
117
  })
114
118
  })
115
119
 
120
+ const worksheetPickingAssignment: Setting = await this.trxMgr.getRepository(Setting).findOne({
121
+ where: { domain: this.domain, category: 'id-rule', name: 'enable-worksheet-picking-activation-assignment' }
122
+ })
123
+
116
124
  const worksheetSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
117
125
  where: {
118
126
  domain: this.domain,
@@ -136,24 +144,42 @@ export class PickingWorksheetController extends VasWorksheetController {
136
144
  worksheet.updater = this.user
137
145
  worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
138
146
 
139
- if (orderInventories.some((oi: OrderInventory) => oi.inventory?.id)) {
140
- const hasInventoryOIs: OrderInventory[] = orderInventories.filter(
141
- (orderInventory: OrderInventory) => orderInventory.inventory !== null
142
- )
147
+ if (orderInventories?.length > 0) {
148
+ if (orderInventories.some((oi: OrderInventory) => oi.inventory?.id)) {
149
+ const hasInventoryOIs: OrderInventory[] = orderInventories.filter(
150
+ (orderInventory: OrderInventory) => orderInventory.inventory !== null
151
+ )
143
152
 
144
- worksheet.worksheetDetails = await this.createWorksheetDetails(
145
- worksheet,
146
- WORKSHEET_TYPE.BATCH_PICKING,
147
- hasInventoryOIs
148
- )
149
- }
153
+ worksheet.worksheetDetails = await this.createWorksheetDetails(
154
+ worksheet,
155
+ WORKSHEET_TYPE.BATCH_PICKING,
156
+ hasInventoryOIs
157
+ )
158
+ }
150
159
 
151
- orderInventories.forEach((oi: OrderInventory) => {
152
- oi.refWorksheetId = worksheet.id
153
- oi.status = oi.inventory?.id ? ORDER_INVENTORY_STATUS.READY_TO_PICK : ORDER_INVENTORY_STATUS.PENDING_SPLIT
154
- oi.updater = this.user
155
- })
156
- await this.updateOrderTargets(orderInventories)
160
+ orderInventories.forEach((oi: OrderInventory) => {
161
+ oi.refWorksheetId = worksheet.id
162
+ oi.status = oi.inventory?.id ? ORDER_INVENTORY_STATUS.READY_TO_PICK : ORDER_INVENTORY_STATUS.PENDING_SPLIT
163
+ oi.updater = this.user
164
+ })
165
+
166
+ await this.updateOrderTargets(orderInventories)
167
+ } else {
168
+ let orderProducts: OrderProduct[] = []
169
+ releaseGoods.map((releaseGood: ReleaseGood) => {
170
+ const foundOPs: OrderProduct[] = releaseGood.orderProducts
171
+ foundOPs.map((op: OrderProduct) => {
172
+ orderProducts.push(op)
173
+ })
174
+ })
175
+ if (worksheetPickingAssignment && orderProducts?.length > 0) {
176
+ worksheet.worksheetDetails = await this.createWorksheetDetails(
177
+ worksheet,
178
+ WORKSHEET_TYPE.BATCH_PICKING,
179
+ orderProducts
180
+ )
181
+ }
182
+ }
157
183
 
158
184
  releaseGoods = releaseGoods.map((releaseGood: ReleaseGood) => {
159
185
  return {
@@ -192,6 +218,9 @@ export class PickingWorksheetController extends VasWorksheetController {
192
218
  'releaseGood.domain',
193
219
  'releaseGood.lastMileDelivery',
194
220
  'releaseGood.bizplace.domain',
221
+ 'releaseGood.orderProducts',
222
+ 'releaseGood.orderProducts.productDetail',
223
+ 'releaseGood.orderProducts.productDetail.product',
195
224
  'releaseGood.orderPackages',
196
225
  'releaseGood.orderPackages.orderPackageItems',
197
226
  'releaseGood.orderPackages.orderPackageItems.orderProduct',
@@ -206,17 +235,25 @@ export class PickingWorksheetController extends VasWorksheetController {
206
235
  'worksheetDetails.targetInventory.product'
207
236
  ])
208
237
 
209
- const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
210
- const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
211
- let targetInventory: OrderInventory = wsd.targetInventory
212
- targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
213
- targetInventory.updater = this.user
238
+ let worksheetDetails: WorksheetDetail[]
239
+ let releaseGood: ReleaseGood = worksheet.releaseGood
214
240
 
215
- return targetInventory
216
- })
217
- this.updateOrderTargets(targetInventories)
241
+ // assign inventory if unassigned
242
+ if (!releaseGood.assignedInventory) {
243
+ worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet)
244
+ worksheet.worksheetDetails = worksheetDetails
245
+ releaseGood.assignedInventory = true
246
+ } else {
247
+ worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
248
+ const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
249
+ let targetInventory: OrderInventory = wsd.targetInventory
250
+ targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
251
+ targetInventory.updater = this.user
218
252
 
219
- let releaseGood: ReleaseGood = worksheet.releaseGood
253
+ return targetInventory
254
+ })
255
+ this.updateOrderTargets(targetInventories)
256
+ }
220
257
  releaseGood.status = ORDER_STATUS.PICKING
221
258
  releaseGood.updater = this.user
222
259
  this.updateRefOrder(releaseGood)
@@ -311,6 +348,11 @@ export class PickingWorksheetController extends VasWorksheetController {
311
348
  async activateBatchPicking(worksheetNo: string): Promise<Worksheet> {
312
349
  let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.BATCH_PICKING, [
313
350
  'worksheetDetails',
351
+ 'worksheetDetails.targetProduct',
352
+ 'worksheetDetails.targetProduct.bizplace',
353
+ 'worksheetDetails.targetProduct.product',
354
+ 'worksheetDetails.targetProduct.productDetail',
355
+ 'worksheetDetails.targetProduct.releaseGood',
314
356
  'worksheetDetails.targetInventory',
315
357
  'worksheetDetails.targetInventory.releaseGood',
316
358
  'worksheetDetails.targetInventory.releaseGood.domain',
@@ -321,15 +363,21 @@ export class PickingWorksheetController extends VasWorksheetController {
321
363
  'bizplace.company.domain'
322
364
  ])
323
365
 
324
- const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
325
- const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
326
- let targetInventory: OrderInventory = wsd.targetInventory
327
- targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
328
- targetInventory.updater = this.user
366
+ let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
329
367
 
330
- return targetInventory
331
- })
332
- this.updateOrderTargets(targetInventories)
368
+ if (worksheet.worksheetDetails.find(wsd => wsd.targetProduct.releaseGood.assignedInventory == false)) {
369
+ worksheetDetails = await this.assignInventoriesForUnassignedMergedOrder(worksheet)
370
+ worksheet.worksheetDetails = worksheetDetails
371
+ } else {
372
+ const targetInventories: OrderInventory[] = worksheetDetails.map((wsd: WorksheetDetail) => {
373
+ let targetInventory: OrderInventory = wsd.targetInventory
374
+ targetInventory.status = ORDER_INVENTORY_STATUS.PICKING
375
+ targetInventory.updater = this.user
376
+
377
+ return targetInventory
378
+ })
379
+ this.updateOrderTargets(targetInventories)
380
+ }
333
381
 
334
382
  worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [])
335
383
 
@@ -419,7 +467,8 @@ export class PickingWorksheetController extends VasWorksheetController {
419
467
  return {
420
468
  ...releaseGood,
421
469
  status: ORDER_STATUS.PICKING,
422
- updater: this.user
470
+ updater: this.user,
471
+ assignedInventory: true
423
472
  }
424
473
  })
425
474
  )
@@ -1970,4 +2019,245 @@ export class PickingWorksheetController extends VasWorksheetController {
1970
2019
  })
1971
2020
  }
1972
2021
  }
2022
+
2023
+ async assignInventoriesForUnassignedOrder(worksheet: Worksheet): Promise<any> {
2024
+ const releaseGood = worksheet.releaseGood
2025
+ const orderProducts = releaseGood.orderProducts
2026
+ let finalOrderInventories: OrderInventory[] = []
2027
+ let newWorksheetDetails: WorksheetDetail[] = []
2028
+ const inventoryAssignmentSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
2029
+ where: { domain: this.domain, name: 'rule-for-inventory-assignment' }
2030
+ })
2031
+
2032
+ for (let op of orderProducts) {
2033
+ let locationSortingRules = []
2034
+ if (inventoryAssignmentSetting) {
2035
+ let locationSetting = JSON.parse(inventoryAssignmentSetting.value)
2036
+ for (const key in locationSetting) {
2037
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })
2038
+ }
2039
+ }
2040
+
2041
+ let assignedOrderInventories: OrderInventory[] = await InventoryUtil.autoAssignInventoryForRelease(
2042
+ op,
2043
+ op.productDetail.product,
2044
+ op.productDetail,
2045
+ locationSortingRules,
2046
+ releaseGood.bizplace,
2047
+ this.domain,
2048
+ this.trxMgr,
2049
+ op.batchId
2050
+ )
2051
+
2052
+ assignedOrderInventories = assignedOrderInventories.map(aoi => {
2053
+ delete aoi.id
2054
+ return {
2055
+ ...aoi,
2056
+ orderProduct: op,
2057
+ status: ORDER_INVENTORY_STATUS.PICKING,
2058
+ name: OrderNoGenerator.orderInventory(),
2059
+ domain: this.domain,
2060
+ bizplace: { id: releaseGood.bizplace.id },
2061
+ releaseGood
2062
+ }
2063
+ })
2064
+
2065
+ finalOrderInventories.push(...assignedOrderInventories)
2066
+
2067
+ await this.trxMgr
2068
+ .getRepository(OrderProduct)
2069
+ .update({ id: op.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user })
2070
+ }
2071
+
2072
+ for (let oi of finalOrderInventories) {
2073
+ // update inventory locked qty and uom value
2074
+ oi = await this.trxMgr.getRepository(OrderInventory).save({ ...oi })
2075
+
2076
+ await this.trxMgr.getRepository(Inventory).update(oi.inventory.id, {
2077
+ lockedQty: (oi.inventory?.lockedQty || 0) + oi.releaseQty,
2078
+ lockedUomValue: (oi.inventory?.lockedUomValue || 0) + oi.releaseUomValue,
2079
+ updater: this.user
2080
+ })
2081
+
2082
+ // update product detail stock deduct unassigned qty and unassigned uom value
2083
+ await this.trxMgr
2084
+ .getRepository(ProductDetailStock)
2085
+ .createQueryBuilder()
2086
+ .update(ProductDetailStock)
2087
+ .set({
2088
+ unassignedQty: () => `"unassigned_qty" - ${oi.releaseQty}`,
2089
+ unassignedUomValue: () => `"unassigned_uom_value" - ${oi.releaseUomValue}`
2090
+ })
2091
+ .where({ productDetail: oi.productDetail.id })
2092
+ .execute()
2093
+
2094
+ const worksheetDetail: WorksheetDetail = Object.assign(new WorksheetDetail(), {
2095
+ domain: this.domain,
2096
+ bizplace: { id: releaseGood.bizplace.id },
2097
+ worksheet,
2098
+ name: WorksheetNoGenerator.pickingDetail(),
2099
+ seq: 0,
2100
+ targetInventory: oi,
2101
+ targetProduct: oi.orderProduct,
2102
+ type: WORKSHEET_TYPE.PICKING,
2103
+ status: WORKSHEET_STATUS.DEACTIVATED,
2104
+ creator: this.user,
2105
+ updater: this.user
2106
+ })
2107
+
2108
+ newWorksheetDetails.push(worksheetDetail)
2109
+ }
2110
+ newWorksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(newWorksheetDetails)
2111
+
2112
+ return newWorksheetDetails
2113
+ }
2114
+
2115
+ async assignInventoriesForUnassignedMergedOrder(worksheet: Worksheet): Promise<any> {
2116
+ //const releaseGood = worksheet.releaseGood
2117
+ const orderProducts = worksheet.worksheetDetails.map(wsd => wsd.targetProduct)
2118
+ const releaseGoodIds = [...new Set(orderProducts.map(op => op.releaseGood.id))]
2119
+ let newWorksheetDetails: WorksheetDetail[] = []
2120
+
2121
+ const inventoryAssignmentSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
2122
+ where: { domain: this.domain, name: 'rule-for-inventory-assignment' }
2123
+ })
2124
+
2125
+ for (let i = 0; i < orderProducts.length; i++) {
2126
+ let pInventoryList = inventoriesByStrategy(
2127
+ {
2128
+ ...orderProducts[i],
2129
+ worksheetId: worksheet.id,
2130
+ bizplaceId: worksheet.bizplace.id,
2131
+ locationSortingRules: inventoryAssignmentSetting ? JSON.parse(inventoryAssignmentSetting.value) : false,
2132
+ pickingStrategy: orderProducts[i].product.pickingStrategy
2133
+ },
2134
+ this.domain,
2135
+ this.trxMgr
2136
+ )
2137
+
2138
+ let idx = 0
2139
+ let [inventoryList] = await Promise.all([pInventoryList])
2140
+
2141
+ let { releaseQty, releaseUomValue } = orderProducts[i]
2142
+
2143
+ while (releaseQty > 0 && idx < inventoryList.items.length) {
2144
+ let targetInventory: Inventory = await this.trxMgr
2145
+ .getRepository(Inventory)
2146
+ .findOne({ where: { id: inventoryList.items[idx].id } })
2147
+
2148
+ let inventoryAvailableQty = targetInventory.qty - (targetInventory?.lockedQty || 0)
2149
+ let inventoryAvailableUomValue = targetInventory.uomValue - (targetInventory?.lockedUomValue || 0)
2150
+
2151
+ if (inventoryAvailableQty > 0) {
2152
+ let allocatedQty = 0,
2153
+ allocatedUomValue = 0
2154
+ if (inventoryAvailableQty < releaseQty) {
2155
+ idx = idx + 1
2156
+ allocatedQty = inventoryAvailableQty
2157
+ allocatedUomValue = inventoryAvailableUomValue
2158
+ } else {
2159
+ allocatedQty = releaseQty
2160
+ allocatedUomValue = releaseUomValue
2161
+ }
2162
+
2163
+ releaseQty = releaseQty - allocatedQty
2164
+ releaseUomValue = releaseUomValue - allocatedUomValue
2165
+
2166
+ //// Update inventory locked quantity
2167
+ await this.trxMgr
2168
+ .getRepository(Inventory)
2169
+ .createQueryBuilder('inv')
2170
+ .update(Inventory)
2171
+ .set({
2172
+ lockedUomValue: () => `COALESCE(locked_uom_value,0) + ${allocatedUomValue}`,
2173
+ lockedQty: () => `COALESCE(locked_qty,0) + ${allocatedQty}`
2174
+ })
2175
+ .where('id = :id', { id: targetInventory.id })
2176
+ .execute()
2177
+
2178
+ // update product detail stock deduct unassigned qty and unassigned uom value
2179
+ await this.trxMgr
2180
+ .getRepository(ProductDetailStock)
2181
+ .createQueryBuilder()
2182
+ .update(ProductDetailStock)
2183
+ .set({
2184
+ unassignedQty: () => `"unassigned_qty" - ${allocatedQty}`,
2185
+ unassignedUomValue: () => `"unassigned_uom_value" - ${allocatedUomValue}`
2186
+ })
2187
+ .where({ productDetail: orderProducts[i].productDetail.id })
2188
+ .execute()
2189
+
2190
+ // update order product status to ASSIGNED
2191
+ await this.trxMgr
2192
+ .getRepository(OrderProduct)
2193
+ .update({ id: orderProducts[i].id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user })
2194
+
2195
+ // Create new order inventory with status -> READY_TO_PICK, type -> RELEASE_OF_GOODS
2196
+ let newTargetInventory: OrderInventory = new OrderInventory()
2197
+ newTargetInventory = {
2198
+ domain: this.domain,
2199
+ bizplace: orderProducts[i].bizplace,
2200
+ name: OrderNoGenerator.orderInventory(),
2201
+ releaseGood: orderProducts[i].releaseGood,
2202
+ batchId: orderProducts[i].batchId,
2203
+ status: ORDER_INVENTORY_STATUS.PICKING,
2204
+ type: ORDER_TYPES.RELEASE_OF_GOODS,
2205
+ refWorksheetId: worksheet.id,
2206
+ product: orderProducts[i].product,
2207
+ productDetail: orderProducts[i].productDetail,
2208
+ packingType: orderProducts[i].packingType,
2209
+ packingSize: parseFloat(orderProducts[i].packingSize),
2210
+ creator: this.user,
2211
+ inventory: targetInventory,
2212
+ releaseQty: allocatedQty,
2213
+ releaseUomValue: allocatedUomValue,
2214
+ uom: orderProducts[i].uom,
2215
+ orderProduct: orderProducts[i]
2216
+ }
2217
+ newTargetInventory = await this.trxMgr.getRepository(OrderInventory).save(newTargetInventory)
2218
+
2219
+ if (idx == 0) {
2220
+ let updatedWorksheetDetail = {
2221
+ ...worksheet.worksheetDetails[i],
2222
+ targetInventory: newTargetInventory,
2223
+ worksheet,
2224
+ bizplace: worksheet.bizplace,
2225
+ domain: this.domain,
2226
+ updater: this.user,
2227
+ creator: this.user
2228
+ }
2229
+ await this.trxMgr.getRepository(WorksheetDetail).update(worksheet.worksheetDetails[i].id, {
2230
+ targetInventory: newTargetInventory,
2231
+ worksheet,
2232
+ bizplace: worksheet.bizplace,
2233
+ domain: this.domain,
2234
+ updater: this.user,
2235
+ creator: this.user
2236
+ })
2237
+
2238
+ newWorksheetDetails.push(updatedWorksheetDetail)
2239
+ } else {
2240
+ let newWorksheetDetail = {
2241
+ ...worksheet.worksheetDetails[i],
2242
+ name: WorksheetNoGenerator.batchPickingDetail(),
2243
+ targetInventory: newTargetInventory,
2244
+ worksheet,
2245
+ bizplace: worksheet.bizplace,
2246
+ domain: this.domain,
2247
+ updater: this.user,
2248
+ creator: this.user
2249
+ }
2250
+ delete newWorksheetDetail.id
2251
+
2252
+ newWorksheetDetail = await this.trxMgr.getRepository(WorksheetDetail).save(newWorksheetDetail)
2253
+ newWorksheetDetails.push(newWorksheetDetail)
2254
+ }
2255
+ } else {
2256
+ idx = idx + 1
2257
+ }
2258
+ }
2259
+ await this.trxMgr.getRepository(ReleaseGood).update(releaseGoodIds, { assignedInventory: true })
2260
+ }
2261
+ return newWorksheetDetails
2262
+ }
1973
2263
  }
@@ -12,8 +12,8 @@ import { ViewColumn, ViewEntity } from 'typeorm'
12
12
  i.uom,
13
13
  i.product_id as "product_id",
14
14
  null as "product_bundle_id",
15
- COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))) AS "remain_qty",
16
- COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) AS "remain_uom_value",
15
+ COALESCE(SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - SUM(COALESCE(pds.unassigned_qty, 0))) AS "remain_qty",
16
+ COALESCE(SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - SUM(COALESCE(pds.unassigned_uom_value, 0))) AS "remain_uom_value",
17
17
  COALESCE(sum(COALESCE(i.qty, 0::double precision))) AS "qty",
18
18
  COALESCE(sum(COALESCE(i.uom_value, 0::double precision))) AS "uom_value",
19
19
  COALESCE(sum(COALESCE(i.transfer_qty, 0::double precision))) AS "transfer_qty",
@@ -22,6 +22,7 @@ import { ViewColumn, ViewEntity } from 'typeorm'
22
22
  FROM inventories i
23
23
  INNER JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id AND l2.type NOT IN ('QUARANTINE', 'RESERVE')
24
24
  INNER JOIN products p ON p.id = i.product_id
25
+ LEFT JOIN product_detail_stocks pds on pds.product_detail_id = i.product_detail_id
25
26
  WHERE i.status = 'STORED' AND CASE WHEN i.expiration_date is not null and p.shelf_life is not null then CURRENT_DATE < i.expiration_date - p.shelf_life else true end
26
27
  AND i.obsolete is false
27
28
  GROUP by
@@ -51,14 +52,15 @@ import { ViewColumn, ViewEntity } from 'typeorm'
51
52
  FROM product_bundles pb
52
53
  INNER JOIN (
53
54
  SELECT i.domain_id, i.bizplace_id, pbs.product_id, pbs.product_bundle_id, min(pbs.bundle_qty),
54
- (SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0))) / min(pbs.bundle_qty) AS "available_qty",
55
- (SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0))) / min(pbs.bundle_qty) AS "available_uom_value",
55
+ (SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - SUM(COALESCE(pds.unassigned_qty, 0))) / min(pbs.bundle_qty) AS "available_qty",
56
+ (SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - SUM(COALESCE(pds.unassigned_uom_value, 0))) / min(pbs.bundle_qty) AS "available_uom_value",
56
57
  (sum(COALESCE(i.qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "qty",
57
58
  (sum(COALESCE(i.uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "uom_value",
58
59
  (sum(COALESCE(i.transfer_qty, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "transfer_qty",
59
60
  (sum(COALESCE(i.transfer_uom_value, 0::double precision))) / min(pbs.bundle_qty)::double precision AS "transfer_uom_value"
60
61
  FROM product_bundle_settings pbs
61
62
  LEFT JOIN inventories i ON i.product_id = pbs.product_id AND i.status = 'STORED' AND i.obsolete = false
63
+ LEFT JOIN product_detail_stocks pds ON pds.product_detail_id = i.product_detail_id
62
64
  INNER JOIN products p ON p.id = pbs.product_id AND CASE WHEN i.expiration_date is not null and p.shelf_life is not null then CURRENT_DATE < i.expiration_date - p.shelf_life else true end
63
65
  INNER JOIN locations l ON i.location_id = l.id AND i.domain_id = l.domain_id AND l.type NOT IN ('QUARANTINE', 'RESERVE')
64
66
  GROUP by