@things-factory/warehouse-base 4.3.107 → 4.3.108
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-query.js +26 -20
- package/dist-server/service/inventory/inventory-query.js.map +1 -1
- package/dist-server/service/inventory/inventory-types.js +16 -12
- package/dist-server/service/inventory/inventory-types.js.map +1 -1
- package/dist-server/service/inventory/inventory.js +4 -1
- package/dist-server/service/inventory/inventory.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-mutation.js +6 -2
- package/dist-server/service/inventory-change/inventory-change-mutation.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-query.js +5 -3
- package/dist-server/service/inventory-history/inventory-history-query.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-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 +3 -1
- package/dist-server/service/location/location-mutation.js.map +1 -1
- package/dist-server/service/pallet/pallet-mutation.js +35 -33
- package/dist-server/service/pallet/pallet-mutation.js.map +1 -1
- package/dist-server/service/tote/tote-mutation.js +1 -1
- package/dist-server/service/tote/tote-mutation.js.map +1 -1
- package/dist-server/service/tote/tote-query.js +7 -5
- package/dist-server/service/tote/tote-query.js.map +1 -1
- package/dist-server/service/warehouse/warehouse-mutation.js +33 -1
- package/dist-server/service/warehouse/warehouse-mutation.js.map +1 -1
- package/dist-server/utils/inventory-util.js +86 -25
- 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 -21
- package/server/service/inventory/inventory-types.ts +3 -0
- package/server/service/inventory/inventory.ts +3 -1
- package/server/service/inventory-change/inventory-change-mutation.ts +8 -5
- package/server/service/inventory-history/inventory-history-query.ts +43 -8
- package/server/service/inventory-item/inventory-item.ts +9 -2
- package/server/service/inventory-product/inventory-product.ts +5 -1
- package/server/service/location/location-mutation.ts +3 -1
- package/server/service/pallet/pallet-mutation.ts +50 -69
- package/server/service/tote/tote-mutation.ts +1 -1
- package/server/service/tote/tote-query.ts +9 -7
- package/server/service/warehouse/warehouse-mutation.ts +41 -2
- package/server/utils/inventory-util.ts +116 -51
- package/translations/en.json +4 -2
- package/translations/ko.json +4 -2
- package/translations/ms.json +4 -2
- package/translations/zh.json +14 -12
|
@@ -131,7 +131,7 @@ export async function generateInventoryHistory(
|
|
|
131
131
|
|
|
132
132
|
inventory = await invRepo.findOne({
|
|
133
133
|
where: { id: inventory.id },
|
|
134
|
-
relations: ['domain', 'bizplace', 'product', 'warehouse', 'location']
|
|
134
|
+
relations: ['domain', 'bizplace', 'product', 'warehouse', 'location', 'productDetail']
|
|
135
135
|
})
|
|
136
136
|
|
|
137
137
|
const domain: Domain = inventory.domain
|
|
@@ -147,68 +147,133 @@ 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
|
+
productDetail: inventory?.productDetail,
|
|
166
|
+
warehouse: inventory?.warehouse,
|
|
167
|
+
location: inventory?.location,
|
|
168
|
+
|
|
169
|
+
palletId: inventory?.palletId,
|
|
170
|
+
batchId: inventory?.batchId,
|
|
171
|
+
zone: inventory?.zone,
|
|
172
|
+
packingType: inventory?.packingType,
|
|
173
|
+
description: inventory?.description,
|
|
174
|
+
expirationDate: inventory?.expirationDate,
|
|
175
|
+
unitCost: inventory?.unitCost,
|
|
176
|
+
batchIdRef: inventory?.batchIdRef,
|
|
177
|
+
cartonId: inventory?.cartonId,
|
|
178
|
+
manufactureYear: inventory?.manufactureYear,
|
|
179
|
+
packingSize: inventory?.packingSize,
|
|
180
|
+
manufactureDate: inventory?.manufactureDate,
|
|
181
|
+
status: inventory.status
|
|
180
182
|
}
|
|
181
183
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
184
|
+
if (!lastInvHistory) {
|
|
185
|
+
res = await invHistoryRepo
|
|
186
|
+
.createQueryBuilder()
|
|
187
|
+
.insert()
|
|
188
|
+
.into(InventoryHistory)
|
|
189
|
+
.values([
|
|
190
|
+
{
|
|
191
|
+
...inventoryHistoryFields,
|
|
192
|
+
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
193
|
+
status: inventory.status,
|
|
194
|
+
transactionType,
|
|
195
|
+
qty,
|
|
196
|
+
openingQty: 0,
|
|
197
|
+
uomValue,
|
|
198
|
+
openingUomValue: 0,
|
|
199
|
+
seq: 0
|
|
200
|
+
}
|
|
201
|
+
])
|
|
202
|
+
.returning('*')
|
|
203
|
+
.execute()
|
|
204
|
+
} else {
|
|
205
|
+
if (transactionType == 'PICKING' || transactionType == 'UNLOADING') {
|
|
206
|
+
const findSameOrderHistory: InventoryHistory[] = await invHistoryRepo.find({
|
|
207
|
+
domain: inventory.domain,
|
|
208
|
+
palletId: inventory.palletId,
|
|
209
|
+
refOrderId: refOrder.id
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
if (findSameOrderHistory.length > 0) {
|
|
213
|
+
let prevTotalQty = 0
|
|
214
|
+
let prevTotalUomValue = 0
|
|
215
|
+
for (let oh of findSameOrderHistory) {
|
|
216
|
+
prevTotalQty += oh.qty
|
|
217
|
+
prevTotalUomValue += oh.uomValue
|
|
218
|
+
}
|
|
219
|
+
qty -= prevTotalQty
|
|
220
|
+
uomValue -= prevTotalUomValue
|
|
221
|
+
}
|
|
201
222
|
}
|
|
202
223
|
|
|
203
|
-
|
|
224
|
+
res = await invHistoryRepo
|
|
225
|
+
.createQueryBuilder()
|
|
226
|
+
.insert()
|
|
227
|
+
.into(InventoryHistory)
|
|
228
|
+
.values([
|
|
229
|
+
{
|
|
230
|
+
...inventoryHistoryFields,
|
|
231
|
+
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
232
|
+
transactionType,
|
|
233
|
+
qty,
|
|
234
|
+
openingQty: () =>
|
|
235
|
+
`(select opening_qty from inventory_histories where pallet_id = '${inventory.palletId}' and domain_id = '${domain.id}' order by seq desc limit 1) + (select qty from inventory_histories where pallet_id = '${inventory.palletId}' and domain_id = '${domain.id}' order by seq desc limit 1)`,
|
|
236
|
+
uomValue,
|
|
237
|
+
openingUomValue: () =>
|
|
238
|
+
`(select opening_uom_value from inventory_histories where pallet_id = '${inventory.palletId}' and domain_id = '${domain.id}' order by seq desc limit 1) + ${uomValue}`,
|
|
239
|
+
seq: () =>
|
|
240
|
+
`(select seq from inventory_histories where pallet_id = '${inventory.palletId}' and domain_id = '${domain.id}' order by seq desc limit 1) + 1`
|
|
241
|
+
}
|
|
242
|
+
])
|
|
243
|
+
.returning('*')
|
|
244
|
+
.execute()
|
|
245
|
+
}
|
|
204
246
|
|
|
205
|
-
|
|
247
|
+
let newInventoryHistory: InventoryHistory = res.generatedMaps[0]
|
|
248
|
+
lastSeq = newInventoryHistory.seq
|
|
249
|
+
|
|
250
|
+
if (newInventoryHistory.openingQty + qty == 0 && transactionType != 'UNDO_UNLOADING') {
|
|
251
|
+
let terminatedRes = await invHistoryRepo
|
|
252
|
+
.createQueryBuilder()
|
|
253
|
+
.insert()
|
|
254
|
+
.into(InventoryHistory)
|
|
255
|
+
.values([
|
|
256
|
+
{
|
|
257
|
+
...inventoryHistoryFields,
|
|
258
|
+
name: InventoryNoGenerator.inventoryHistoryName(),
|
|
259
|
+
status: INVENTORY_STATUS.TERMINATED,
|
|
260
|
+
transactionType: INVENTORY_TRANSACTION_TYPE.TERMINATED,
|
|
261
|
+
qty: 0,
|
|
262
|
+
openingQty: 0,
|
|
263
|
+
uomValue: 0,
|
|
264
|
+
openingUomValue: 0,
|
|
265
|
+
seq: () =>
|
|
266
|
+
`(select seq from inventory_histories where inventory_id = '${inventory.id}' order by seq desc limit 1) + 1`
|
|
267
|
+
}
|
|
268
|
+
])
|
|
269
|
+
.returning('seq')
|
|
270
|
+
.execute()
|
|
271
|
+
|
|
272
|
+
lastSeq = terminatedRes.generatedMaps[0].seq
|
|
206
273
|
inventory.status = INVENTORY_STATUS.TERMINATED
|
|
207
274
|
}
|
|
208
275
|
|
|
209
|
-
|
|
210
|
-
await invRepo.update(inventory.id, { lastSeq: newInventoryHistory.seq, updater: user })
|
|
211
|
-
}
|
|
276
|
+
await invRepo.update(inventory.id, { lastSeq, updater: user })
|
|
212
277
|
|
|
213
278
|
await switchLocationStatus(domain, location, user, trxMgr)
|
|
214
279
|
return newInventoryHistory
|
package/translations/en.json
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"error.no_location_found": "no location found",
|
|
3
|
+
"error.pallet (x) already exists": "Pallet ({x}) already exists",
|
|
4
|
+
"error.warehouse (x) already exists": "Warehouse ({x}) already exists",
|
|
2
5
|
"field.location": "location",
|
|
3
6
|
"field.product_batch": "product batch",
|
|
4
7
|
"field.lot": "lot",
|
|
@@ -16,6 +19,5 @@
|
|
|
16
19
|
"field.qty": "qty",
|
|
17
20
|
"field.state": "state",
|
|
18
21
|
"field.date": "date",
|
|
19
|
-
"field.type": "type"
|
|
20
|
-
"error.no_location_found": "no location found"
|
|
22
|
+
"field.type": "type"
|
|
21
23
|
}
|
package/translations/ko.json
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"error.no_location_found": "발견된 로케이션이 없습니다",
|
|
3
|
+
"error.pallet (x) already exists": "[ko] Pallet ({x}) already exists",
|
|
4
|
+
"error.warehouse (x) already exists": "[ko] Warehouse ({x}) already exists",
|
|
2
5
|
"field.location": "로케이션",
|
|
3
6
|
"field.product_batch": "제품 배치",
|
|
4
7
|
"field.lot": "롯트",
|
|
@@ -16,6 +19,5 @@
|
|
|
16
19
|
"field.qty": "수량",
|
|
17
20
|
"field.state": "국가",
|
|
18
21
|
"field.date": "날짜",
|
|
19
|
-
"field.type": "유형"
|
|
20
|
-
"error.no_location_found": "발견된 로케이션이 없습니다"
|
|
22
|
+
"field.type": "유형"
|
|
21
23
|
}
|
package/translations/ms.json
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"error.no_location_found": "[ms]no location found",
|
|
3
|
+
"error.pallet (x) already exists": "[ms] Pallet ({x}) already exists",
|
|
4
|
+
"error.warehouse (x) already exists": "[ko] Warehouse ({x}) already exists",
|
|
2
5
|
"field.location": "lokasi",
|
|
3
6
|
"field.product_batch": "kumpulan produk",
|
|
4
7
|
"field.lot": "lot",
|
|
@@ -16,6 +19,5 @@
|
|
|
16
19
|
"field.qty": "kuantiti",
|
|
17
20
|
"field.state": "keadaan",
|
|
18
21
|
"field.date": "tarikh",
|
|
19
|
-
"field.type": "jenis"
|
|
20
|
-
"error.no_location_found": "[ms]no location found"
|
|
22
|
+
"field.type": "jenis"
|
|
21
23
|
}
|
package/translations/zh.json
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"field.warehouse": "仓库",
|
|
6
|
-
"field.zone": "区",
|
|
7
|
-
"field.section": "段",
|
|
8
|
-
"field.unit": "单元",
|
|
9
|
-
"field.shelf": "架子",
|
|
2
|
+
"error.no_location_found": "[zh]no location found",
|
|
3
|
+
"error.pallet (x) already exists": "[zh] Pallet ({x}) already exists",
|
|
4
|
+
"error.warehouse (x) already exists": "[ko] Warehouse ({x}) already exists",
|
|
10
5
|
"field.bizplace": "分部",
|
|
11
|
-
"field.
|
|
6
|
+
"field.date": "日期",
|
|
7
|
+
"field.end_qty": "最终数量",
|
|
12
8
|
"field.in_qty": "进口数量",
|
|
9
|
+
"field.location": "位置",
|
|
10
|
+
"field.lot": "地块",
|
|
13
11
|
"field.out_qty": "出口数量",
|
|
14
|
-
"field.
|
|
12
|
+
"field.product_batch": "产品批次",
|
|
15
13
|
"field.product": "产品",
|
|
16
14
|
"field.qty": "数量",
|
|
15
|
+
"field.section": "段",
|
|
16
|
+
"field.shelf": "架子",
|
|
17
|
+
"field.start_qty": "开始数量",
|
|
17
18
|
"field.state": "状态",
|
|
18
|
-
"field.date": "日期",
|
|
19
19
|
"field.type": "类型",
|
|
20
|
-
"
|
|
20
|
+
"field.unit": "单元",
|
|
21
|
+
"field.warehouse": "仓库",
|
|
22
|
+
"field.zone": "区"
|
|
21
23
|
}
|