@things-factory/warehouse-base 4.0.9 → 4.0.13
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/constants/index.js +1 -0
- package/dist-server/constants/index.js.map +1 -1
- package/dist-server/constants/location.js +3 -2
- package/dist-server/constants/location.js.map +1 -1
- package/dist-server/constants/rule-type.js +8 -0
- package/dist-server/constants/rule-type.js.map +1 -0
- package/dist-server/service/inventory/inventory-mutation.js +68 -28
- package/dist-server/service/inventory/inventory-mutation.js.map +1 -1
- package/dist-server/service/inventory/inventory-query.js +119 -86
- package/dist-server/service/inventory/inventory-query.js.map +1 -1
- package/dist-server/service/inventory/inventory-types.js +16 -0
- package/dist-server/service/inventory/inventory-types.js.map +1 -1
- package/dist-server/service/inventory/inventory.js +13 -9
- package/dist-server/service/inventory/inventory.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change-mutation.js +7 -9
- package/dist-server/service/inventory-change/inventory-change-mutation.js.map +1 -1
- package/dist-server/service/inventory-change/inventory-change.js +5 -1
- package/dist-server/service/inventory-change/inventory-change.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-query.js +28 -26
- package/dist-server/service/inventory-history/inventory-history-query.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history-types.js +4 -4
- package/dist-server/service/inventory-history/inventory-history-types.js.map +1 -1
- package/dist-server/service/inventory-history/inventory-history.js +1 -1
- package/dist-server/service/inventory-history/inventory-history.js.map +1 -1
- package/dist-server/service/location/location-query.js +1 -1
- package/dist-server/service/location/location-query.js.map +1 -1
- package/dist-server/service/location/location-types.js +24 -0
- package/dist-server/service/location/location-types.js.map +1 -1
- package/dist-server/service/location/location.js +2 -2
- package/dist-server/service/location/location.js.map +1 -1
- package/dist-server/utils/datetime-util.js +49 -0
- package/dist-server/utils/datetime-util.js.map +1 -0
- package/dist-server/utils/index.js +1 -0
- package/dist-server/utils/index.js.map +1 -1
- package/dist-server/utils/inventory-util.js +104 -37
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +8 -8
- package/server/constants/index.ts +1 -0
- package/server/constants/location.ts +3 -2
- package/server/constants/rule-type.ts +4 -0
- package/server/service/inventory/inventory-mutation.ts +65 -20
- package/server/service/inventory/inventory-query.ts +151 -107
- package/server/service/inventory/inventory-types.ts +12 -0
- package/server/service/inventory/inventory.ts +13 -10
- package/server/service/inventory-change/inventory-change-mutation.ts +10 -11
- package/server/service/inventory-change/inventory-change.ts +6 -2
- package/server/service/inventory-history/inventory-history-query.ts +27 -28
- package/server/service/inventory-history/inventory-history-types.ts +2 -2
- package/server/service/inventory-history/inventory-history.ts +2 -2
- package/server/service/location/location-query.ts +1 -1
- package/server/service/location/location-types.ts +18 -0
- package/server/service/location/location.ts +2 -2
- package/server/utils/datetime-util.ts +54 -0
- package/server/utils/index.ts +1 -0
- package/server/utils/inventory-util.ts +162 -39
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DateTimeConverter = exports.DateGenerator = void 0;
|
|
4
|
+
class DateGenerator {
|
|
5
|
+
static generateDate() {
|
|
6
|
+
const today = new Date();
|
|
7
|
+
const year = today.getFullYear();
|
|
8
|
+
const month = today.getMonth();
|
|
9
|
+
const day = today.getDate();
|
|
10
|
+
const yy = String(year).substr(String(year).length - 2);
|
|
11
|
+
const mm = String(month + 1).padStart(2, '0');
|
|
12
|
+
const dd = String(day).padStart(2, '0');
|
|
13
|
+
return yy + mm + dd;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.DateGenerator = DateGenerator;
|
|
17
|
+
class DateTimeConverter {
|
|
18
|
+
static date(dateTime) {
|
|
19
|
+
let unloadDate = '';
|
|
20
|
+
if (dateTime) {
|
|
21
|
+
const unloadDateTime = new Date(dateTime);
|
|
22
|
+
var year = unloadDateTime.getFullYear();
|
|
23
|
+
var month = (1 + unloadDateTime.getMonth()).toString();
|
|
24
|
+
month = month.length > 1 ? month : '0' + month;
|
|
25
|
+
var day = unloadDateTime.getDate().toString();
|
|
26
|
+
day = day.length > 1 ? day : '0' + day;
|
|
27
|
+
unloadDate = day + '-' + month + '-' + year;
|
|
28
|
+
}
|
|
29
|
+
return unloadDate;
|
|
30
|
+
}
|
|
31
|
+
static datetime(dateTime, timezone) {
|
|
32
|
+
let unloadDate = '';
|
|
33
|
+
if (dateTime) {
|
|
34
|
+
const datetime = Number(dateTime);
|
|
35
|
+
const timezoneOffset = timezone * 60000;
|
|
36
|
+
const newUnloadDate = new Date(datetime - timezoneOffset).toISOString().slice(0, -1);
|
|
37
|
+
var dateTimeParts = newUnloadDate.split('T');
|
|
38
|
+
//handle date parts
|
|
39
|
+
var dateParts = dateTimeParts[0].split('-');
|
|
40
|
+
var newDate = DateTimeConverter.date(dateParts);
|
|
41
|
+
//handle time part
|
|
42
|
+
var timeParts = dateTimeParts[1].slice(0, -7);
|
|
43
|
+
unloadDate = newDate + ' ' + timeParts;
|
|
44
|
+
}
|
|
45
|
+
return unloadDate;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.DateTimeConverter = DateTimeConverter;
|
|
49
|
+
//# sourceMappingURL=datetime-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"datetime-util.js","sourceRoot":"","sources":["../../server/utils/datetime-util.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAa;IACxB,MAAM,CAAC,YAAY;QACjB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC9B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAE3B,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACvD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAEvC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACrB,CAAC;CACF;AAbD,sCAaC;AAED,MAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAC,QAAQ;QAClB,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,QAAQ,EAAE;YACZ,MAAM,cAAc,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC/C,IAAI,IAAI,GAAG,cAAc,CAAC,WAAW,EAAE,CAAA;YAEvC,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAA;YACtD,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAA;YAE9C,IAAI,GAAG,GAAG,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAA;YAC7C,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;YAEtC,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAA;SAC5C;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ;QAChC,IAAI,UAAU,GAAG,EAAE,CAAA;QACnB,IAAI,QAAQ,EAAE;YACZ,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;YACjC,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAA;YACvC,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAEpF,IAAI,aAAa,GAAQ,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEjD,mBAAmB;YACnB,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC3C,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAE/C,kBAAkB;YAClB,IAAI,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAE7C,UAAU,GAAG,OAAO,GAAG,GAAG,GAAG,SAAS,CAAA;SACvC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;CACF;AAtCD,8CAsCC"}
|
|
@@ -12,4 +12,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
__exportStar(require("./inventory-no-generator"), exports);
|
|
14
14
|
__exportStar(require("./inventory-util"), exports);
|
|
15
|
+
__exportStar(require("./datetime-util"), exports);
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2DAAwC;AACxC,mDAAgC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2DAAwC;AACxC,mDAAgC;AAChC,kDAA+B"}
|
|
@@ -1,11 +1,94 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getProductBundleInventory = exports.checkPalletIdenticallity = exports.checkPalletDuplication = exports.switchLocationStatus = exports.generateInventoryHistory = void 0;
|
|
3
|
+
exports.getProductBundleInventory = exports.checkPalletIdenticallity = exports.checkPalletDuplication = exports.switchLocationStatus = exports.generateInventoryHistory = exports.InventoryUtil = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
5
|
const product_base_1 = require("@things-factory/product-base");
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
7
|
const service_1 = require("../service");
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
|
+
class InventoryUtil {
|
|
10
|
+
constructor(trxMgr, domain, user) {
|
|
11
|
+
this.ERROR_MSG = {
|
|
12
|
+
FIND: {
|
|
13
|
+
NO_RESULT: (condition) => `There's no results matched with condition ${condition}`,
|
|
14
|
+
NO_CHILD_RESULT: (condition) => `There's no child result matched with condition ${condition}`,
|
|
15
|
+
NOT_MATCH: (source, target) => `Unable to find matching ${target} using ${source}`
|
|
16
|
+
},
|
|
17
|
+
ORDER_ITEM: {
|
|
18
|
+
NO_MATCHING_RESULT: (condition, condition2) => `Current item with ${condition} (${condition2}) not belong to this order`,
|
|
19
|
+
EXCESS_QTY: (condition, condition2, condition3) => `Excess qty is scanned for item ${condition}, ${condition2} (${condition3})`
|
|
20
|
+
},
|
|
21
|
+
PRODUCT: {
|
|
22
|
+
NO_MATCHING_RESULT: (condition, condition2) => `Order packing type and packing size not match with product master, ${condition} (${condition2})`,
|
|
23
|
+
BARCODE_NOT_EXIST: (condition, condition2, condition3) => `Product barcode - ${condition} with ${condition2} ${condition3}, not exist in master data.`
|
|
24
|
+
},
|
|
25
|
+
CREATE: {
|
|
26
|
+
ID_EXISTS: 'Target has ID already',
|
|
27
|
+
EMPTY_CREATOR: 'Cannot create without creator',
|
|
28
|
+
EMPTY_UPDATER: 'Cannot create without updater'
|
|
29
|
+
},
|
|
30
|
+
UPDATE: {
|
|
31
|
+
ID_NOT_EXISTS: `Target doesn't have ID`,
|
|
32
|
+
EMPTY_UPDATER: 'Cannot update without updater'
|
|
33
|
+
},
|
|
34
|
+
VALIDITY: {
|
|
35
|
+
UNEXPECTED_FIELD_VALUE: (field, expectedValue, actualValue) => `Expected ${field} value is ${expectedValue} but got ${actualValue}`,
|
|
36
|
+
DUPLICATED: (field, value) => `There is duplicated ${field} value (${value})`,
|
|
37
|
+
CANT_PROCEED_STEP_BY: (step, reason) => `Can't proceed to ${step} because ${reason}`
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
this.trxMgr = trxMgr;
|
|
41
|
+
this.domain = domain;
|
|
42
|
+
this.user = user;
|
|
43
|
+
}
|
|
44
|
+
async createInventory(inventory) {
|
|
45
|
+
inventory = this.setStamp(inventory);
|
|
46
|
+
return await this.trxMgr.getRepository(service_1.Inventory).save(inventory);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @summary Update inventory record
|
|
50
|
+
* @description It will update inventory after set a stamp (domain, updater)
|
|
51
|
+
* The special point of this function is that this changes won't generate inventory history
|
|
52
|
+
* If you want to generate inventory history automatically you would better to use transactionInventory function
|
|
53
|
+
*/
|
|
54
|
+
async updateInventory(inventory) {
|
|
55
|
+
if (!inventory.id)
|
|
56
|
+
throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS);
|
|
57
|
+
inventory = this.setStamp(inventory);
|
|
58
|
+
return await this.trxMgr.getRepository(service_1.Inventory).save(inventory);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @summary Do transaction on inventory record
|
|
62
|
+
* @description It will update inventory after set a temp (domain, updater)
|
|
63
|
+
* and then generate inventory history based on current changes
|
|
64
|
+
*/
|
|
65
|
+
async transactionInventory(inventory, refOrder, changedQty, changedUom, transactionType) {
|
|
66
|
+
if (inventory.id) {
|
|
67
|
+
inventory = await this.updateInventory(inventory);
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
inventory = await this.createInventory(inventory);
|
|
71
|
+
}
|
|
72
|
+
await generateInventoryHistory(inventory, refOrder, transactionType, changedQty, changedUom, this.user, this.trxMgr);
|
|
73
|
+
return inventory;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @summary set common stamp like domain, creator, updater
|
|
77
|
+
* @description Set common stamp to passed record
|
|
78
|
+
* If it doesn't have id it will handle it as creating one
|
|
79
|
+
* If it has id it will handle it as updating one
|
|
80
|
+
*/
|
|
81
|
+
setStamp(record) {
|
|
82
|
+
if (!record.domain)
|
|
83
|
+
record.domain = this.domain;
|
|
84
|
+
if (!record.id && !record.creator)
|
|
85
|
+
record.creator = this.user;
|
|
86
|
+
if (!record.updater)
|
|
87
|
+
record.updater = this.user;
|
|
88
|
+
return record;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.InventoryUtil = InventoryUtil;
|
|
9
92
|
/**
|
|
10
93
|
* @description It will insert new record into inventory histories table.
|
|
11
94
|
* seq will be calculated based on number of records for one specific pallet id (provided by inventory object)
|
|
@@ -33,50 +116,34 @@ async function generateInventoryHistory(inventory, refOrder, transactionType, qt
|
|
|
33
116
|
let openingUomValue = 0;
|
|
34
117
|
if (seq) {
|
|
35
118
|
const lastInvHistory = await invHistoryRepo.findOne({
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
119
|
+
where: {
|
|
120
|
+
domain: inventory.domain,
|
|
121
|
+
palletId: inventory.palletId,
|
|
122
|
+
},
|
|
123
|
+
order: {
|
|
124
|
+
seq: 'DESC'
|
|
125
|
+
},
|
|
39
126
|
});
|
|
40
127
|
openingQty = lastInvHistory.openingQty + lastInvHistory.qty;
|
|
41
128
|
openingUomValue = lastInvHistory.openingUomValue + lastInvHistory.uomValue;
|
|
42
129
|
}
|
|
130
|
+
let remainQty = ((openingQty || 0) + (qty || 0));
|
|
43
131
|
let inventoryHistory = new service_1.InventoryHistory();
|
|
44
|
-
inventoryHistory.name
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
inventoryHistory.orderNo = (refOrder === null || refOrder === void 0 ? void 0 : refOrder.name) || null;
|
|
55
|
-
inventoryHistory.orderRefNo = (refOrder === null || refOrder === void 0 ? void 0 : refOrder.refNo) || null;
|
|
56
|
-
inventoryHistory.inventory = inventory;
|
|
57
|
-
inventoryHistory.product = inventory.product;
|
|
58
|
-
inventoryHistory.reusablePallet = inventory.reusablePallet;
|
|
59
|
-
inventoryHistory.zone = inventory.zone;
|
|
60
|
-
inventoryHistory.warehouse = inventory.warehouse;
|
|
61
|
-
inventoryHistory.location = inventory.location;
|
|
62
|
-
inventoryHistory.expirationDate = inventory.expirationDate;
|
|
63
|
-
inventoryHistory.packingType = inventory.packingType;
|
|
64
|
-
inventoryHistory.uom = inventory.uom;
|
|
65
|
-
inventoryHistory.qty = qty;
|
|
66
|
-
inventoryHistory.openingQty = openingQty;
|
|
67
|
-
inventoryHistory.uomValue = uomValue;
|
|
68
|
-
inventoryHistory.openingUomValue = openingUomValue;
|
|
69
|
-
inventoryHistory.unitCost = inventory.unitCost;
|
|
70
|
-
inventoryHistory.domain = inventory.domain;
|
|
71
|
-
inventoryHistory.bizplace = inventory.bizplace;
|
|
72
|
-
inventoryHistory.creator = user;
|
|
73
|
-
inventoryHistory.updater = user;
|
|
74
|
-
inventoryHistory = await invHistoryRepo.save(inventoryHistory);
|
|
132
|
+
inventoryHistory = Object.assign(Object.assign({}, inventory), { name: utils_1.InventoryNoGenerator.inventoryHistoryName(), inventory, seq: seq - 1, status: remainQty == 0 ? constants_1.INVENTORY_STATUS.TERMINATED : inventory.status, transactionType, refOrderId: (refOrder === null || refOrder === void 0 ? void 0 : refOrder.id) || null, orderNo: (refOrder === null || refOrder === void 0 ? void 0 : refOrder.name) || null, orderRefNo: (refOrder === null || refOrder === void 0 ? void 0 : refOrder.refNo) || null, qty,
|
|
133
|
+
openingQty,
|
|
134
|
+
uomValue, openingUomValue: openingUomValue, creator: user, updater: user });
|
|
135
|
+
let newInventoryHistory = await invHistoryRepo.save(inventoryHistory);
|
|
136
|
+
if (remainQty == 0) {
|
|
137
|
+
let terminatedHistory = Object.assign(Object.assign({}, newInventoryHistory), { name: utils_1.InventoryNoGenerator.inventoryHistoryName(), seq: seq + 1, status: constants_1.INVENTORY_STATUS.TERMINATED, transactionType: constants_1.INVENTORY_TRANSACTION_TYPE.TERMINATED, uom: inventory.uom, qty: 0, openingQty: 0, uomValue: 0, openingUomValue: 0 });
|
|
138
|
+
delete terminatedHistory.id;
|
|
139
|
+
newInventoryHistory = await invHistoryRepo.save(terminatedHistory);
|
|
140
|
+
inventory.status = constants_1.INVENTORY_STATUS.TERMINATED;
|
|
141
|
+
}
|
|
75
142
|
if (inventory.lastSeq !== seq) {
|
|
76
|
-
await invRepo.save(Object.assign(Object.assign({}, inventory), { lastSeq:
|
|
143
|
+
await invRepo.save(Object.assign(Object.assign({}, inventory), { lastSeq: newInventoryHistory.seq, updater: user }));
|
|
77
144
|
}
|
|
78
145
|
await switchLocationStatus(domain, location, user, trxMgr);
|
|
79
|
-
return
|
|
146
|
+
return newInventoryHistory;
|
|
80
147
|
}
|
|
81
148
|
exports.generateInventoryHistory = generateInventoryHistory;
|
|
82
149
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-util.js","sourceRoot":"","sources":["../../server/utils/inventory-util.ts"],"names":[],"mappings":";;;AAAA,qCAAkE;AAIlE,+DAAsD;AAGtD,
|
|
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/warehouse-base",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.13",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@things-factory/biz-base": "^4.0.
|
|
28
|
-
"@things-factory/id-rule-base": "^4.0.
|
|
29
|
-
"@things-factory/integration-sellercraft": "^4.0.
|
|
30
|
-
"@things-factory/marketplace-base": "^4.0.
|
|
31
|
-
"@things-factory/product-base": "^4.0.
|
|
32
|
-
"@things-factory/setting-base": "^4.0.
|
|
27
|
+
"@things-factory/biz-base": "^4.0.13",
|
|
28
|
+
"@things-factory/id-rule-base": "^4.0.13",
|
|
29
|
+
"@things-factory/integration-sellercraft": "^4.0.13",
|
|
30
|
+
"@things-factory/marketplace-base": "^4.0.13",
|
|
31
|
+
"@things-factory/product-base": "^4.0.13",
|
|
32
|
+
"@things-factory/setting-base": "^4.0.13"
|
|
33
33
|
},
|
|
34
|
-
"gitHead": "
|
|
34
|
+
"gitHead": "a542fdd4e7c447c3b571fe91c92f5919561bdc2c"
|
|
35
35
|
}
|
|
@@ -4,10 +4,11 @@ import { EntityManager, In, MoreThan, SelectQueryBuilder } from 'typeorm'
|
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
|
5
5
|
import { Bizplace } from '@things-factory/biz-base'
|
|
6
6
|
import { Product } from '@things-factory/product-base'
|
|
7
|
+
import { generateId } from '@things-factory/id-rule-base'
|
|
7
8
|
import { Domain } from '@things-factory/shell'
|
|
8
9
|
|
|
9
|
-
import { INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE } from '../../constants'
|
|
10
|
-
import { generateInventoryHistory, InventoryNoGenerator } from '../../utils'
|
|
10
|
+
import { RULE_TYPE, INVENTORY_STATUS, INVENTORY_TRANSACTION_TYPE } from '../../constants'
|
|
11
|
+
import { generateInventoryHistory, InventoryNoGenerator, InventoryUtil, DateGenerator } from '../../utils'
|
|
11
12
|
import { InventoryHistory } from '../inventory-history/inventory-history'
|
|
12
13
|
import { Location } from '../location/location'
|
|
13
14
|
import { Inventory } from './inventory'
|
|
@@ -334,10 +335,12 @@ export class InventoryMutation {
|
|
|
334
335
|
@Directive('@transaction')
|
|
335
336
|
@Mutation(returns => Boolean)
|
|
336
337
|
async inventoryTransfer(
|
|
337
|
-
@Arg('
|
|
338
|
-
@Arg('
|
|
338
|
+
@Arg('originPalletId') originPalletId: string,
|
|
339
|
+
@Arg('palletId', { nullable: true }) palletId: string,
|
|
340
|
+
@Arg('cartonId', { nullable: true }) cartonId: string,
|
|
339
341
|
@Arg('fromLocationName') fromLocationName: string,
|
|
340
342
|
@Arg('toLocationName') toLocationName: string,
|
|
343
|
+
@Arg('qty') qty: number,
|
|
341
344
|
@Ctx() context: any
|
|
342
345
|
): Promise<Boolean> {
|
|
343
346
|
const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state
|
|
@@ -349,36 +352,78 @@ export class InventoryMutation {
|
|
|
349
352
|
})
|
|
350
353
|
if (!toLocation) throw new Error(`To location doesn't exists`)
|
|
351
354
|
|
|
352
|
-
|
|
353
|
-
where: { domain: domain, name: fromLocationName },
|
|
354
|
-
relations: ['domain', 'warehouse']
|
|
355
|
-
})
|
|
356
|
-
if (!toLocation) throw new Error(`From location doesn't exists`)
|
|
355
|
+
if (qty < 0) throw new Error(`Invalid quantity`)
|
|
357
356
|
|
|
358
357
|
// 2. search for related inventory
|
|
359
358
|
const invQb: SelectQueryBuilder<Inventory> = await tx
|
|
360
359
|
.getRepository(Inventory)
|
|
361
360
|
.createQueryBuilder('INV')
|
|
361
|
+
.innerJoinAndSelect('INV.location', 'loc')
|
|
362
|
+
.innerJoinAndSelect('INV.product', 'product')
|
|
363
|
+
.innerJoinAndSelect('INV.bizplace', 'bizplace')
|
|
364
|
+
.leftJoinAndSelect('INV.refInventory', 'refInventory')
|
|
365
|
+
.leftJoinAndSelect('INV.reusablePallet', 'reusablePallet')
|
|
366
|
+
.leftJoinAndSelect('INV.productDetail', 'productDetail')
|
|
362
367
|
.where('INV.domain_id = :domainId', { domainId: domain.id })
|
|
363
|
-
.andWhere('INV.
|
|
368
|
+
.andWhere('INV.pallet_id = :palletId', { palletId: originPalletId })
|
|
369
|
+
|
|
370
|
+
let inventory: Inventory = await invQb.getOne()
|
|
371
|
+
if (!inventory) throw new Error('Inventory not found')
|
|
372
|
+
|
|
373
|
+
if (qty > (inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0))) throw new Error('Transfer quantity exceeded inventory quantity')
|
|
374
|
+
|
|
375
|
+
if (toLocation.name == inventory.location.name) throw new Error('Inventory is in current location')
|
|
376
|
+
|
|
377
|
+
let transactionInventory = new InventoryUtil(tx, domain, user)
|
|
378
|
+
|
|
379
|
+
const partialTransferFunc = async function (inventory, qty, toLocation, palletId, context) {
|
|
380
|
+
const { user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state
|
|
381
|
+
|
|
382
|
+
if (qty < (inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0))) {
|
|
383
|
+
if (!palletId || palletId.trim() == '') throw new Error('Require new lot id for partial transfer')
|
|
384
|
+
|
|
385
|
+
let transferQty = qty
|
|
386
|
+
let transferUomValue = ((inventory.uomValue / inventory.qty) * qty)
|
|
387
|
+
let newInventory = { ...inventory, palletId, location: toLocation, warehouse: toLocation.warehouse, zone: toLocation.zone, creator: user, updater: user }
|
|
388
|
+
|
|
389
|
+
delete newInventory.id
|
|
390
|
+
delete newInventory.createdAt
|
|
391
|
+
delete newInventory.updatedAt
|
|
364
392
|
|
|
365
|
-
|
|
366
|
-
|
|
393
|
+
newInventory.qty = transferQty
|
|
394
|
+
newInventory.lockedQty = 0
|
|
395
|
+
newInventory.uomValue = transferUomValue
|
|
396
|
+
newInventory.lockedUomValue = 0
|
|
367
397
|
|
|
368
|
-
|
|
369
|
-
if (!inventories?.length) throw new Error('Inventory not found')
|
|
398
|
+
await transactionInventory.transactionInventory({ ...inventory, qty: inventory.qty - transferQty, uomValue: inventory.uomValue - transferUomValue }, null, -transferQty, -transferUomValue, INVENTORY_TRANSACTION_TYPE.RELOCATE)
|
|
370
399
|
|
|
371
|
-
|
|
372
|
-
|
|
400
|
+
await transactionInventory.transactionInventory(newInventory, null, transferQty, transferUomValue, INVENTORY_TRANSACTION_TYPE.RELOCATE)
|
|
401
|
+
} else {
|
|
373
402
|
inventory.warehouse = toLocation.warehouse
|
|
374
403
|
inventory.location = toLocation
|
|
375
404
|
inventory.zone = toLocation.zone
|
|
376
405
|
inventory.updater = user
|
|
377
|
-
inventory = await tx.getRepository(Inventory).save(inventory)
|
|
378
406
|
|
|
379
|
-
await
|
|
380
|
-
}
|
|
381
|
-
|
|
407
|
+
await transactionInventory.transactionInventory(inventory, null, 0, 0, INVENTORY_TRANSACTION_TYPE.RELOCATE)
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
if (inventory.cartonId && inventory.cartonId != '') {
|
|
412
|
+
if (!cartonId) throw new Error('Require carton id')
|
|
413
|
+
inventory.cartonId = cartonId
|
|
414
|
+
|
|
415
|
+
if (qty < (inventory.qty - (inventory?.lockedQty > 0 ? inventory.lockedQty : 0))) {
|
|
416
|
+
palletId = await generateId({
|
|
417
|
+
domain: domain,
|
|
418
|
+
type: RULE_TYPE.LOT_NUMBER_ID,
|
|
419
|
+
seed: { date: DateGenerator.generateDate() }
|
|
420
|
+
})
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
await partialTransferFunc(inventory, qty, toLocation, palletId, context)
|
|
424
|
+
} else {
|
|
425
|
+
await partialTransferFunc(inventory, qty, toLocation, palletId, context)
|
|
426
|
+
}
|
|
382
427
|
|
|
383
428
|
return true
|
|
384
429
|
}
|