@things-factory/warehouse-base 4.3.81 → 4.3.82
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/warehouse-controller.js.map +1 -1
- package/dist-server/service/inventory/inventory-mutation.js.map +1 -1
- package/dist-server/service/inventory/inventory-query.js +10 -4
- package/dist-server/service/inventory/inventory-query.js.map +1 -1
- package/dist-server/service/inventory/inventory-types.js.map +1 -1
- package/dist-server/service/inventory/inventory.js +6 -1
- package/dist-server/service/inventory/inventory.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-mutation.js +16 -5
- package/dist-server/service/inventory-change/inventory-change-mutation.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-query.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-types.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-mutation.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-query.js +1 -1
- package/dist-server/service/inventory-history/inventory-history-query.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-types.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item-mutation.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item-query.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item-type.js.map +1 -1
- package/dist-server/service/inventory-item/inventory-item.js +8 -3
- package/dist-server/service/inventory-item/inventory-item.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change-mutation.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change-query.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change-type.js.map +1 -1
- package/dist-server/service/inventory-item-change/inventory-item-change.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product-mutation.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product-query.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product-type.js.map +1 -1
- package/dist-server/service/inventory-product/inventory-product.js +8 -3
- package/dist-server/service/inventory-product/inventory-product.js.map +1 -1
- package/dist-server/service/location/location-mutation.js.map +1 -1
- package/dist-server/service/location/location-query.js.map +1 -1
- package/dist-server/service/location/location-types.js.map +1 -1
- package/dist-server/service/location/location.js.map +1 -1
- package/dist-server/service/movement/movement-mutation.js.map +1 -1
- package/dist-server/service/movement/movement-query.js.map +1 -1
- package/dist-server/service/movement/movement-types.js.map +1 -1
- package/dist-server/service/movement/movement.js.map +1 -1
- package/dist-server/service/pallet/pallet-mutation.js.map +1 -1
- package/dist-server/service/pallet/pallet-query.js.map +1 -1
- package/dist-server/service/pallet/pallet-types.js.map +1 -1
- package/dist-server/service/pallet/pallet.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count-mutation.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count-query.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count-types.js.map +1 -1
- package/dist-server/service/pallet-count/pallet-count.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history-mutation.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history-query.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history-types.js.map +1 -1
- package/dist-server/service/pallet-history/pallet-history.js.map +1 -1
- package/dist-server/service/reduced-inventory-history/reduced-inventory-history.js.map +1 -1
- package/dist-server/service/tote/tote-mutation.js.map +1 -1
- package/dist-server/service/tote/tote-query.js.map +1 -1
- package/dist-server/service/tote/tote-types.js.map +1 -1
- package/dist-server/service/tote/tote.js.map +1 -1
- package/dist-server/service/warehouse/warehouse-mutation.js.map +1 -1
- package/dist-server/service/warehouse/warehouse-query.js.map +1 -1
- package/dist-server/service/warehouse/warehouse-types.js.map +1 -1
- package/dist-server/service/warehouse/warehouse.js.map +1 -1
- package/dist-server/utils/inventory-util.js +83 -24
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +8 -8
- package/server/controllers/warehouse-controller.ts +0 -1
- package/server/service/inventory/inventory-query.ts +25 -12
- package/server/service/inventory/inventory.ts +3 -0
- package/server/service/inventory-change/inventory-change-mutation.ts +18 -11
- package/server/service/inventory-history/inventory-history-query.ts +1 -1
- package/server/service/inventory-item/inventory-item.ts +9 -2
- package/server/service/inventory-product/inventory-product.ts +5 -1
- package/server/utils/inventory-util.ts +117 -51
|
@@ -17,13 +17,13 @@ import { logger } from '@things-factory/env'
|
|
|
17
17
|
export class InventoryQuery {
|
|
18
18
|
/**
|
|
19
19
|
* Combined single query resolver to perform extraction of data with or without pagination
|
|
20
|
-
* @param context
|
|
21
|
-
* @param filters
|
|
22
|
-
* @param pagination
|
|
23
|
-
* @param sortings
|
|
24
|
-
* @param locationSortingRules
|
|
25
|
-
* @param exportItem
|
|
26
|
-
* @returns
|
|
20
|
+
* @param context
|
|
21
|
+
* @param filters
|
|
22
|
+
* @param pagination
|
|
23
|
+
* @param sortings
|
|
24
|
+
* @param locationSortingRules
|
|
25
|
+
* @param exportItem
|
|
26
|
+
* @returns
|
|
27
27
|
*/
|
|
28
28
|
@Directive('@privilege(category: "inventory", privilege: "query")')
|
|
29
29
|
@Directive('@transaction')
|
|
@@ -45,7 +45,7 @@ export class InventoryQuery {
|
|
|
45
45
|
const remainOnlyParam = filters.find((filter: any) => filter.name == 'remainOnly')
|
|
46
46
|
const bizplace = filters.find((filter: any) => filter.name === 'bizplace')
|
|
47
47
|
|
|
48
|
-
filters = filters.filter(x =>
|
|
48
|
+
filters = filters.filter(x => ['productInfo', 'remainOnly'].indexOf(x.name) < 0)
|
|
49
49
|
|
|
50
50
|
const params = { filters, pagination }
|
|
51
51
|
|
|
@@ -66,7 +66,12 @@ export class InventoryQuery {
|
|
|
66
66
|
|
|
67
67
|
qb.leftJoinAndSelect('inventory.bizplace', 'bizplace')
|
|
68
68
|
.leftJoinAndSelect('inventory.product', 'product')
|
|
69
|
-
.leftJoinAndSelect('
|
|
69
|
+
.leftJoinAndSelect('inventory.productDetail', 'productDetail')
|
|
70
|
+
.leftJoinAndSelect(
|
|
71
|
+
'product.productDetails',
|
|
72
|
+
'productDetails',
|
|
73
|
+
'productDetails.id = inventory.product_detail_id'
|
|
74
|
+
)
|
|
70
75
|
.leftJoinAndSelect('inventory.warehouse', 'warehouse')
|
|
71
76
|
.leftJoinAndSelect('inventory.location', 'location')
|
|
72
77
|
.leftJoinAndSelect('inventory.creator', 'creator')
|
|
@@ -77,7 +82,10 @@ export class InventoryQuery {
|
|
|
77
82
|
subQuery => {
|
|
78
83
|
return subQuery
|
|
79
84
|
.select('inventoryItems.inventory_id', 'inventory_item_inventory_id')
|
|
80
|
-
.addSelect(
|
|
85
|
+
.addSelect(
|
|
86
|
+
`SUM(case when "inventoryItems"."status" = 'STORED' then 1 else 0 end)`,
|
|
87
|
+
'inventory_item_count'
|
|
88
|
+
)
|
|
81
89
|
.addSelect(`string_agg(inventoryItems.serial_number, ', ')`, 'serial_numbers')
|
|
82
90
|
.from('inventory_items', 'inventoryItems')
|
|
83
91
|
.where(`inventoryItems.domain_id = :domainId`, { domainId: domain.id })
|
|
@@ -133,7 +141,9 @@ export class InventoryQuery {
|
|
|
133
141
|
}
|
|
134
142
|
|
|
135
143
|
if (locationSortingRules?.length > 0) {
|
|
136
|
-
locationSortingRules.forEach(
|
|
144
|
+
locationSortingRules.forEach(rule => {
|
|
145
|
+
qb.addOrderBy(`location.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
|
|
146
|
+
})
|
|
137
147
|
}
|
|
138
148
|
|
|
139
149
|
// Fetch all row for exporting
|
|
@@ -645,7 +655,7 @@ export class InventoryQuery {
|
|
|
645
655
|
|
|
646
656
|
const productBundleSettings: ProductBundleSetting[] = await getRepository(ProductBundleSetting).find({
|
|
647
657
|
where: { productBundle: productBundleId },
|
|
648
|
-
relations: ['product', 'productBundle']
|
|
658
|
+
relations: ['product', 'productDetail', 'productBundle']
|
|
649
659
|
})
|
|
650
660
|
|
|
651
661
|
if (!productBundleSettings.length) {
|
|
@@ -656,6 +666,7 @@ export class InventoryQuery {
|
|
|
656
666
|
buildQuery(qb, params, context)
|
|
657
667
|
|
|
658
668
|
qb.select('iv.product_id', 'productId')
|
|
669
|
+
.addSelect('iv.product_detail_id', 'productDetailId')
|
|
659
670
|
.addSelect('iv.batch_id', 'batchId')
|
|
660
671
|
.addSelect('iv.batch_id_ref', 'batchIdRef')
|
|
661
672
|
.addSelect('iv.packing_type', 'packingType')
|
|
@@ -684,6 +695,7 @@ export class InventoryQuery {
|
|
|
684
695
|
productIds: productBundleSettings.map(productBundle => productBundle.product.id)
|
|
685
696
|
})
|
|
686
697
|
.groupBy('iv.product_id')
|
|
698
|
+
.addGroupBy('iv.product_detail_id')
|
|
687
699
|
.addGroupBy('iv.batch_id')
|
|
688
700
|
.addGroupBy('iv.batch_id_ref')
|
|
689
701
|
.addGroupBy('iv.packing_type')
|
|
@@ -712,6 +724,7 @@ export class InventoryQuery {
|
|
|
712
724
|
return {
|
|
713
725
|
id: pbs.id,
|
|
714
726
|
productId: pbs.product.id,
|
|
727
|
+
productDetailId: pbs.productDetail.id,
|
|
715
728
|
bundleId: pbs.productBundle.id,
|
|
716
729
|
bundleQty: pbs.bundleQty,
|
|
717
730
|
releaseQty: bundleReleaseQty * pbs.bundleQty,
|
|
@@ -6,8 +6,7 @@ import { Bizplace } from '@things-factory/biz-base'
|
|
|
6
6
|
import { generateId } from '@things-factory/id-rule-base'
|
|
7
7
|
import { MarketplaceStore } from '@things-factory/integration-marketplace'
|
|
8
8
|
import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
|
|
9
|
-
import {
|
|
10
|
-
import { Product } from '@things-factory/product-base'
|
|
9
|
+
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
11
10
|
import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
12
11
|
import { Domain } from '@things-factory/shell'
|
|
13
12
|
|
|
@@ -138,14 +137,18 @@ export class InventoryChangeMutation {
|
|
|
138
137
|
) {
|
|
139
138
|
const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state
|
|
140
139
|
try {
|
|
141
|
-
|
|
142
140
|
const _createRecords = []
|
|
143
141
|
const _updateRecords = []
|
|
144
142
|
|
|
145
143
|
for (let i = 0; i < patches.length; i++) {
|
|
146
|
-
let foundExistingPallet = await tx
|
|
144
|
+
let foundExistingPallet = await tx
|
|
145
|
+
.getRepository(Inventory)
|
|
146
|
+
.createQueryBuilder('iv')
|
|
147
147
|
.where('iv.domain_id = :domain_id', { domain_id: domain.id })
|
|
148
|
-
.andWhere('(iv.pallet_id = :pallet_id or iv.id = :id)', {
|
|
148
|
+
.andWhere('(iv.pallet_id = :pallet_id or iv.id = :id)', {
|
|
149
|
+
pallet_id: patches[i]?.palletId,
|
|
150
|
+
id: patches[i]?.id
|
|
151
|
+
})
|
|
149
152
|
.getOne()
|
|
150
153
|
|
|
151
154
|
//remove any unchanged records
|
|
@@ -193,7 +196,9 @@ export class InventoryChangeMutation {
|
|
|
193
196
|
newRecord.bizplace = await tx.getRepository(Bizplace).findOne(newRecord.bizplace.id)
|
|
194
197
|
|
|
195
198
|
var product: Product = await tx.getRepository(Product).findOne(newRecord.product.id)
|
|
199
|
+
var productDetail: ProductDetail = await tx.getRepository(ProductDetail).findOne(newRecord.productDetailId)
|
|
196
200
|
newRecord.product = product
|
|
201
|
+
newRecord.productDetail = productDetail
|
|
197
202
|
|
|
198
203
|
newRecord.status = 'PENDING'
|
|
199
204
|
newRecord.transactionType = 'NEW'
|
|
@@ -355,7 +360,9 @@ export class InventoryChangeMutation {
|
|
|
355
360
|
newInventoryItemChange.status = updatedInventoryChange.status
|
|
356
361
|
newInventoryItemChange.inventory = updatedInventoryChange.inventory
|
|
357
362
|
newInventoryItemChange.inventoryItem =
|
|
358
|
-
newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW
|
|
363
|
+
newInventoryItemChange?.type == INVENTORY_ITEM_CHANGE_TYPE.NEW
|
|
364
|
+
? null
|
|
365
|
+
: inventoryItemChange.inventoryItem
|
|
359
366
|
newInventoryItemChange.inventoryChange = updatedInventoryChange
|
|
360
367
|
newInventoryItemChange.domain = domain
|
|
361
368
|
newInventoryItemChange.creator = user
|
|
@@ -417,11 +424,9 @@ export class InventoryChangeMutation {
|
|
|
417
424
|
// }
|
|
418
425
|
|
|
419
426
|
return true
|
|
420
|
-
|
|
421
427
|
} catch (error) {
|
|
422
428
|
throw error
|
|
423
429
|
}
|
|
424
|
-
|
|
425
430
|
}
|
|
426
431
|
|
|
427
432
|
@Directive('@privilege(category: "inventory_adjustment_approval", privilege: "mutation")')
|
|
@@ -520,6 +525,7 @@ async function upsertInventoryItems(context, inventoryChange, approvalStatus, tx
|
|
|
520
525
|
inventoryItem.serialNumber = inventoryItemChange.serialNumber
|
|
521
526
|
inventoryItem.status = INVENTORY_STATUS.STORED
|
|
522
527
|
inventoryItem.product = inventoryChange.inventory.product
|
|
528
|
+
inventoryItem.productDetail = inventoryChange.inventory.productDetail
|
|
523
529
|
inventoryItem.domain = inventoryItemChange.domain
|
|
524
530
|
inventoryItem.inventory = inventoryChange.inventory
|
|
525
531
|
inventoryItem.source = INVENTORY_ITEM_SOURCE.ADJUSTMENT
|
|
@@ -539,7 +545,8 @@ async function upsertInventoryItems(context, inventoryChange, approvalStatus, tx
|
|
|
539
545
|
inventoryItem = {
|
|
540
546
|
...existingInventoryItem,
|
|
541
547
|
serialNumber: inventoryItemChange.serialNumber,
|
|
542
|
-
product: inventoryItemChange.inventory.product
|
|
548
|
+
product: inventoryItemChange.inventory.product,
|
|
549
|
+
productDetail: inventoryItemChange.inventory.productDetail
|
|
543
550
|
}
|
|
544
551
|
} else if (changeType == INVENTORY_ITEM_CHANGE_TYPE.REMOVED) {
|
|
545
552
|
inventoryItem = {
|
|
@@ -576,6 +583,7 @@ export async function approveInventoryChanges(patches: any, context: any) {
|
|
|
576
583
|
'bizplace.company',
|
|
577
584
|
'bizplace.company.domain',
|
|
578
585
|
'product',
|
|
586
|
+
'productDetail',
|
|
579
587
|
'product.productDetails',
|
|
580
588
|
'product.productDetails.childProductDetail',
|
|
581
589
|
'location'
|
|
@@ -611,6 +619,7 @@ export async function approveInventoryChanges(patches: any, context: any) {
|
|
|
611
619
|
'bizplace.company',
|
|
612
620
|
'bizplace.company.domain',
|
|
613
621
|
'product',
|
|
622
|
+
'productDetail',
|
|
614
623
|
'product.productDetails',
|
|
615
624
|
'product.productDetails.childProductDetail',
|
|
616
625
|
'warehouse',
|
|
@@ -620,8 +629,6 @@ export async function approveInventoryChanges(patches: any, context: any) {
|
|
|
620
629
|
]
|
|
621
630
|
})
|
|
622
631
|
|
|
623
|
-
const customerDomain: Domain = inventory.bizplace.domain
|
|
624
|
-
|
|
625
632
|
// Check for locked inventory, and stop from udpating inventory
|
|
626
633
|
if (inventory.qty < inventory.lockedQty) {
|
|
627
634
|
arrLockedInventory.push(_inventoryChanges[i])
|
|
@@ -1425,7 +1425,7 @@ export class InventoryHistoryQuery {
|
|
|
1425
1425
|
rih.bizplace_id as bizplace_id,
|
|
1426
1426
|
cast(rih.created_at + (interval '8 hour') as DATE) as "tempDate"
|
|
1427
1427
|
from reduced_inventory_histories rih
|
|
1428
|
-
left join product_details pd on pd.
|
|
1428
|
+
left join product_details pd on pd.id = rih.product_detail_id
|
|
1429
1429
|
where rih.status not like 'TERMINATED' and rih.bizplace_id = $1
|
|
1430
1430
|
group by CAST(rih.created_at + (interval '8 hour') as DATE), rih.bizplace_id
|
|
1431
1431
|
)
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from 'typeorm'
|
|
12
12
|
|
|
13
13
|
import { User } from '@things-factory/auth-base'
|
|
14
|
-
import { Product } from '@things-factory/product-base'
|
|
14
|
+
import { Product, ProductDetail} from '@things-factory/product-base'
|
|
15
15
|
import { Domain } from '@things-factory/shell'
|
|
16
16
|
|
|
17
17
|
import { Inventory } from '../inventory/inventory'
|
|
@@ -32,7 +32,8 @@ export class InventoryItem {
|
|
|
32
32
|
|
|
33
33
|
@RelationId((inventoryItem: InventoryItem) => inventoryItem.domain)
|
|
34
34
|
domainId?: string
|
|
35
|
-
|
|
35
|
+
|
|
36
|
+
|
|
36
37
|
@Column()
|
|
37
38
|
@Field()
|
|
38
39
|
name: string
|
|
@@ -57,13 +58,19 @@ export class InventoryItem {
|
|
|
57
58
|
@Field({ nullable: true })
|
|
58
59
|
outboundOrderId: string
|
|
59
60
|
|
|
61
|
+
|
|
60
62
|
@ManyToOne(type => Product)
|
|
61
63
|
@Field(type => Product, { nullable: true })
|
|
62
64
|
product?: Product
|
|
63
65
|
|
|
66
|
+
|
|
64
67
|
@RelationId((inventoryItem: InventoryItem) => inventoryItem.product)
|
|
65
68
|
productId?: string
|
|
66
69
|
|
|
70
|
+
@ManyToOne(type => ProductDetail, { nullable: true })
|
|
71
|
+
@Field({ nullable: true })
|
|
72
|
+
productDetail: ProductDetail
|
|
73
|
+
|
|
67
74
|
@ManyToOne(type => Inventory)
|
|
68
75
|
@Field(type => Inventory)
|
|
69
76
|
inventory?: Inventory
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
} from 'typeorm'
|
|
12
12
|
|
|
13
13
|
import { User } from '@things-factory/auth-base'
|
|
14
|
-
import { Product } from '@things-factory/product-base'
|
|
14
|
+
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
15
15
|
import { Domain } from '@things-factory/shell'
|
|
16
16
|
|
|
17
17
|
@Entity()
|
|
@@ -60,6 +60,10 @@ export class InventoryProduct {
|
|
|
60
60
|
@RelationId((inventoryProduct: InventoryProduct) => inventoryProduct.product)
|
|
61
61
|
productId?: string
|
|
62
62
|
|
|
63
|
+
@ManyToOne(type => ProductDetail, { nullable: true })
|
|
64
|
+
@Field({ nullable: true })
|
|
65
|
+
productDetail: ProductDetail
|
|
66
|
+
|
|
63
67
|
@CreateDateColumn()
|
|
64
68
|
@Field({ nullable: true })
|
|
65
69
|
createdAt?: Date
|
|
@@ -147,68 +147,134 @@ export async function generateInventoryHistory(
|
|
|
147
147
|
}
|
|
148
148
|
})
|
|
149
149
|
|
|
150
|
-
let
|
|
151
|
-
let
|
|
152
|
-
let
|
|
153
|
-
|
|
154
|
-
if (lastInvHistory) {
|
|
155
|
-
openingQty = lastInvHistory.openingQty + lastInvHistory.qty
|
|
156
|
-
openingUomValue = lastInvHistory.openingUomValue + lastInvHistory.uomValue
|
|
157
|
-
seq = lastInvHistory.seq + 1
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
let remainQty = (openingQty || 0) + (qty || 0)
|
|
161
|
-
|
|
162
|
-
let inventoryHistory: any = new InventoryHistory()
|
|
163
|
-
|
|
164
|
-
inventoryHistory = {
|
|
165
|
-
...inventory,
|
|
166
|
-
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
167
|
-
inventory,
|
|
168
|
-
seq: seq,
|
|
169
|
-
status: remainQty == 0 ? INVENTORY_STATUS.TERMINATED : inventory.status,
|
|
170
|
-
transactionType,
|
|
150
|
+
let lastSeq: number
|
|
151
|
+
let res: any
|
|
152
|
+
let inventoryHistoryFields: any = {
|
|
171
153
|
refOrderId: refOrder?.id || null,
|
|
172
154
|
orderNo: refOrder?.name || null,
|
|
173
155
|
orderRefNo: refOrder?.refNo || null,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
uomValue,
|
|
177
|
-
openingUomValue: openingUomValue,
|
|
156
|
+
uom: inventory?.uom,
|
|
157
|
+
|
|
178
158
|
creator: user,
|
|
179
|
-
updater: user
|
|
159
|
+
updater: user,
|
|
160
|
+
domain: inventory?.domain,
|
|
161
|
+
bizplace: inventory?.bizplace,
|
|
162
|
+
reusablePallet: inventory?.reusablePallet,
|
|
163
|
+
inventory: inventory,
|
|
164
|
+
product: inventory?.product,
|
|
165
|
+
warehouse: inventory?.warehouse,
|
|
166
|
+
location: inventory?.location,
|
|
167
|
+
|
|
168
|
+
palletId: inventory?.palletId,
|
|
169
|
+
batchId: inventory?.batchId,
|
|
170
|
+
zone: inventory?.zone,
|
|
171
|
+
packingType: inventory?.packingType,
|
|
172
|
+
description: inventory?.description,
|
|
173
|
+
expirationDate: inventory?.expirationDate,
|
|
174
|
+
unitCost: inventory?.unitCost,
|
|
175
|
+
batchIdRef: inventory?.batchIdRef,
|
|
176
|
+
cartonId: inventory?.cartonId,
|
|
177
|
+
manufactureYear: inventory?.manufactureYear,
|
|
178
|
+
packingSize: inventory?.packingSize,
|
|
179
|
+
manufactureDate: inventory?.manufactureDate
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
182
|
+
if (!lastInvHistory) {
|
|
183
|
+
res = await invHistoryRepo
|
|
184
|
+
.createQueryBuilder()
|
|
185
|
+
.insert()
|
|
186
|
+
.into(InventoryHistory)
|
|
187
|
+
.values([
|
|
188
|
+
{
|
|
189
|
+
...inventoryHistoryFields,
|
|
190
|
+
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
191
|
+
status: inventory.status,
|
|
192
|
+
transactionType,
|
|
193
|
+
qty,
|
|
194
|
+
openingQty: 0,
|
|
195
|
+
uomValue,
|
|
196
|
+
openingUomValue: 0,
|
|
197
|
+
seq: 0
|
|
198
|
+
}
|
|
199
|
+
])
|
|
200
|
+
.returning('*')
|
|
201
|
+
.execute()
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
if (transactionType == 'PICKING' || transactionType == 'UNLOADING') {
|
|
205
|
+
const findSameOrderHistory: InventoryHistory[] = await invHistoryRepo.find({
|
|
206
|
+
domain: inventory.domain,
|
|
207
|
+
palletId: inventory.palletId,
|
|
208
|
+
refOrderId: refOrder.id
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
if (findSameOrderHistory.length > 0) {
|
|
212
|
+
let prevTotalQty = 0
|
|
213
|
+
let prevTotalUomValue = 0
|
|
214
|
+
for (let oh of findSameOrderHistory) {
|
|
215
|
+
prevTotalQty += oh.qty
|
|
216
|
+
prevTotalUomValue += oh.uomValue
|
|
217
|
+
}
|
|
218
|
+
qty -= prevTotalQty
|
|
219
|
+
uomValue -= prevTotalUomValue
|
|
220
|
+
}
|
|
201
221
|
}
|
|
222
|
+
|
|
223
|
+
res = await invHistoryRepo
|
|
224
|
+
.createQueryBuilder()
|
|
225
|
+
.insert()
|
|
226
|
+
.into(InventoryHistory)
|
|
227
|
+
.values([
|
|
228
|
+
{
|
|
229
|
+
...inventoryHistoryFields,
|
|
230
|
+
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
231
|
+
status: () =>
|
|
232
|
+
`(select case when opening_qty + ${qty} = 0 then 'TERMINATED' else 'STORED' end as status from inventory_histories where inventory_id = '${inventory.id}' order by seq desc limit 1)`,
|
|
233
|
+
transactionType,
|
|
234
|
+
qty,
|
|
235
|
+
openingQty: () =>
|
|
236
|
+
`(select opening_qty from inventory_histories where inventory_id = '${inventory.id}' order by seq desc limit 1) + ${qty}`,
|
|
237
|
+
uomValue,
|
|
238
|
+
openingUomValue: () =>
|
|
239
|
+
`(select opening_uom_value from inventory_histories where inventory_id = '${inventory.id}' order by seq desc limit 1) + ${uomValue}`,
|
|
240
|
+
seq: () =>
|
|
241
|
+
`(select seq from inventory_histories where inventory_id = '${inventory.id}' order by seq desc limit 1) + 1`
|
|
242
|
+
}
|
|
243
|
+
])
|
|
244
|
+
.returning('*')
|
|
245
|
+
.execute()
|
|
246
|
+
}
|
|
202
247
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
248
|
+
let newInventoryHistory: InventoryHistory = res.generatedMaps[0]
|
|
249
|
+
lastSeq = newInventoryHistory.seq
|
|
250
|
+
|
|
251
|
+
if (newInventoryHistory.openingQty == 0) {
|
|
252
|
+
let terminatedRes = await invHistoryRepo
|
|
253
|
+
.createQueryBuilder()
|
|
254
|
+
.insert()
|
|
255
|
+
.into(InventoryHistory)
|
|
256
|
+
.values([
|
|
257
|
+
{
|
|
258
|
+
...inventoryHistoryFields,
|
|
259
|
+
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
260
|
+
status: INVENTORY_STATUS.TERMINATED,
|
|
261
|
+
transactionType: INVENTORY_TRANSACTION_TYPE.TERMINATED,
|
|
262
|
+
qty: 0,
|
|
263
|
+
openingQty: 0,
|
|
264
|
+
uomValue: 0,
|
|
265
|
+
openingUomValue: 0,
|
|
266
|
+
seq: () =>
|
|
267
|
+
`(select seq from inventory_histories where inventory_id = '${inventory.id}' order by seq desc limit 1) + 1`
|
|
268
|
+
}
|
|
269
|
+
])
|
|
270
|
+
.returning('seq')
|
|
271
|
+
.execute()
|
|
272
|
+
|
|
273
|
+
lastSeq = terminatedRes.generatedMaps[0].seq
|
|
206
274
|
inventory.status = INVENTORY_STATUS.TERMINATED
|
|
207
275
|
}
|
|
208
276
|
|
|
209
|
-
|
|
210
|
-
await invRepo.update(inventory.id, { lastSeq: newInventoryHistory.seq, updater: user })
|
|
211
|
-
}
|
|
277
|
+
await invRepo.update(inventory.id, { lastSeq, updater: user })
|
|
212
278
|
|
|
213
279
|
await switchLocationStatus(domain, location, user, trxMgr)
|
|
214
280
|
return newInventoryHistory
|