@things-factory/worksheet-base 4.3.468 → 4.3.470
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.
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.inventoriesByPalletResolver = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
|
-
const biz_base_1 = require("@things-factory/biz-base");
|
|
6
5
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
6
|
const shell_1 = require("@things-factory/shell");
|
|
8
7
|
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
@@ -10,36 +9,37 @@ exports.inventoriesByPalletResolver = {
|
|
|
10
9
|
async inventoriesByPallet(_, { filters, pagination, sortings, locationSortingRules }, context) {
|
|
11
10
|
const { domain, user } = context.state;
|
|
12
11
|
const params = { filters, pagination };
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
.leftJoinAndSelect('iv.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
12
|
+
try {
|
|
13
|
+
const bizplaceId = params.filters.find(x => x.name == 'bizplace_id');
|
|
14
|
+
const productFilters = params.filters.filter(x => x.name == 'productName');
|
|
15
|
+
const inventoriesFilters = params.filters.find(x => x.name == 'invFilter');
|
|
16
|
+
const recallFilters = params.filters.find(x => x.name === 'recall');
|
|
17
|
+
const skipLockCheckFilters = params.filters.find(x => x.name === 'skipLockCheck');
|
|
18
|
+
let skipLockCheck = skipLockCheckFilters && (skipLockCheckFilters === null || skipLockCheckFilters === void 0 ? void 0 : skipLockCheckFilters.value) ? skipLockCheckFilters === null || skipLockCheckFilters === void 0 ? void 0 : skipLockCheckFilters.value : false;
|
|
19
|
+
const productFilterColumns = ['sku', 'brandSku', 'name', 'description', 'brand', 'subBrand'];
|
|
20
|
+
params.filters = params.filters.filter(x => x.name != 'productName' && x.name != 'invFilter');
|
|
21
|
+
const batchIdFilters = params.filters.find(x => x.name == 'batchId');
|
|
22
|
+
if (!params.filters.find((filter) => filter.name === 'bizplace_id')) {
|
|
23
|
+
throw new Error('No Bizplace found');
|
|
24
|
+
}
|
|
25
|
+
const locationFilters = params.filters.find(x => x.name == 'locationName');
|
|
26
|
+
params.filters = params.filters.filter(x => x.name != 'locationName');
|
|
27
|
+
const qb = (0, typeorm_1.getRepository)(warehouse_base_1.Inventory).createQueryBuilder('iv');
|
|
28
|
+
(0, shell_1.buildQuery)(qb, params, context);
|
|
29
|
+
qb.leftJoinAndSelect('iv.domain', 'domain')
|
|
30
|
+
.leftJoinAndSelect('iv.bizplace', 'bizplace')
|
|
31
|
+
.leftJoinAndSelect('iv.product', 'product')
|
|
32
|
+
.leftJoinAndSelect('iv.productDetail', 'productDetail')
|
|
33
|
+
.leftJoin('product_detail_stocks', 'pds', 'pds.product_detail_id = iv.product_detail_id')
|
|
34
|
+
.leftJoinAndSelect('iv.warehouse', 'warehouse')
|
|
35
|
+
.leftJoinAndSelect('iv.location', 'location')
|
|
36
|
+
.leftJoinAndSelect('iv.creator', 'creator')
|
|
37
|
+
.leftJoinAndSelect('iv.updater', 'updater')
|
|
38
|
+
.andWhere('iv.qty > 0')
|
|
39
|
+
.andWhere('iv.transfer_qty <= 0')
|
|
40
|
+
.andWhere('iv.transfer_uom_value <= 0')
|
|
41
|
+
.andWhere(`location.type ${(recallFilters === null || recallFilters === void 0 ? void 0 : recallFilters.value) === true ? '' : 'NOT'} IN ('${warehouse_base_1.LOCATION_TYPE.QUARANTINE}', '${warehouse_base_1.LOCATION_TYPE.RESERVE}', '${warehouse_base_1.LOCATION_TYPE.DAMAGE}')`)
|
|
42
|
+
.andWhere(`(iv.batch_id, product.name, iv.packing_type, product.brand) NOT IN (
|
|
43
43
|
SELECT
|
|
44
44
|
oi.batch_id, p2.name, oi.packing_type, p2.brand
|
|
45
45
|
FROM
|
|
@@ -53,27 +53,14 @@ exports.inventoriesByPalletResolver = {
|
|
|
53
53
|
AND oi.domain_id = (:domainId)
|
|
54
54
|
AND oi.bizplace_id = (:bizplaceId)
|
|
55
55
|
)`, { bizplaceId: bizplaceId.value, domainId: domain.id });
|
|
56
|
-
if (locationFilters) {
|
|
57
|
-
qb.andWhere(`location.name ilike '${locationFilters.value}'`);
|
|
58
|
-
}
|
|
59
|
-
if (productFilters && productFilters.length > 0) {
|
|
60
|
-
let productInfo = productFilters[0];
|
|
61
|
-
qb.andWhere(new typeorm_1.Brackets(qb2 => {
|
|
62
|
-
productFilterColumns.forEach(filter => {
|
|
63
|
-
const condition = (0, shell_1.buildCondition)('product', filter, 'i_like', productInfo.value, false, Object.keys(qb.getParameters()).length);
|
|
64
|
-
qb2.orWhere(condition.clause, condition.parameters);
|
|
65
|
-
});
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
if (!skipLockCheck) {
|
|
69
|
-
qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0');
|
|
70
|
-
qb.andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0');
|
|
71
|
-
}
|
|
72
|
-
if ((recallFilters === null || recallFilters === void 0 ? void 0 : recallFilters.value) === true) {
|
|
73
|
-
qb.orWhere('(iv.domain_id = (:domainId) and iv.bizplace_id = (:bizplaceId)');
|
|
74
56
|
if (locationFilters) {
|
|
75
57
|
qb.andWhere(`location.name ilike '${locationFilters.value}'`);
|
|
76
58
|
}
|
|
59
|
+
if (inventoriesFilters.value.length > 0) {
|
|
60
|
+
qb.andWhere('iv.id NOT IN (:...inventoriesIds)', {
|
|
61
|
+
inventoriesIds: inventoriesFilters.value
|
|
62
|
+
});
|
|
63
|
+
}
|
|
77
64
|
if (productFilters && productFilters.length > 0) {
|
|
78
65
|
let productInfo = productFilters[0];
|
|
79
66
|
qb.andWhere(new typeorm_1.Brackets(qb2 => {
|
|
@@ -83,38 +70,60 @@ exports.inventoriesByPalletResolver = {
|
|
|
83
70
|
});
|
|
84
71
|
}));
|
|
85
72
|
}
|
|
86
|
-
if (
|
|
87
|
-
qb.andWhere(
|
|
73
|
+
if (!skipLockCheck) {
|
|
74
|
+
qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0');
|
|
75
|
+
qb.andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0');
|
|
88
76
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
77
|
+
if ((recallFilters === null || recallFilters === void 0 ? void 0 : recallFilters.value) === true) {
|
|
78
|
+
qb.orWhere('(iv.domain_id = (:domainId) and iv.bizplace_id = (:bizplaceId)');
|
|
79
|
+
if (locationFilters) {
|
|
80
|
+
qb.andWhere(`location.name ilike '${locationFilters.value}'`);
|
|
81
|
+
}
|
|
82
|
+
if (productFilters && productFilters.length > 0) {
|
|
83
|
+
let productInfo = productFilters[0];
|
|
84
|
+
qb.andWhere(new typeorm_1.Brackets(qb2 => {
|
|
85
|
+
productFilterColumns.forEach(filter => {
|
|
86
|
+
const condition = (0, shell_1.buildCondition)('product', filter, 'i_like', productInfo.value, false, Object.keys(qb.getParameters()).length);
|
|
87
|
+
qb2.orWhere(condition.clause, condition.parameters);
|
|
88
|
+
});
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
if (batchIdFilters) {
|
|
92
|
+
qb.andWhere(`iv.batch_id ilike '${batchIdFilters.value}'`);
|
|
93
|
+
}
|
|
94
|
+
qb.andWhere('iv.obsolete = true and case when iv.expiration_date is not null and product.min_outbound_shelf_life is not null then CURRENT_DATE > iv.expiration_date - product.min_outbound_shelf_life else true end)');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
qb.andWhere('iv.obsolete = false');
|
|
98
|
+
qb.andWhere('case when iv.expiration_date is not null and product.min_outbound_shelf_life is not null then CURRENT_DATE < iv.expiration_date - product.min_outbound_shelf_life else true end');
|
|
99
|
+
}
|
|
100
|
+
if ((sortings === null || sortings === void 0 ? void 0 : sortings.length) !== 0) {
|
|
101
|
+
const arrChildSortData = ['productName', 'productSKU'];
|
|
102
|
+
const remapChildSortData = ['name', 'sku'];
|
|
103
|
+
const sort = (sortings || []).reduce((acc, sort, idx) => (Object.assign(Object.assign({}, acc), { [arrChildSortData.indexOf(sort.name) >= 0 ? 'product' + '.' + remapChildSortData[idx] : 'iv.' + sort.name]: sort.desc ? 'DESC' : 'ASC' })), {});
|
|
104
|
+
qb.orderBy(sort);
|
|
105
|
+
}
|
|
106
|
+
if ((locationSortingRules === null || locationSortingRules === void 0 ? void 0 : locationSortingRules.length) > 0) {
|
|
107
|
+
locationSortingRules.forEach((rule) => {
|
|
108
|
+
qb.addOrderBy(`location.${rule.name}`, rule.desc ? 'DESC' : 'ASC');
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
qb.addOrderBy('location.name', 'DESC');
|
|
113
|
+
}
|
|
114
|
+
let [items, total] = await qb.getManyAndCount();
|
|
115
|
+
items = await Promise.all(items.map(async (item) => {
|
|
116
|
+
const { remainQty, remainUomValue } = await getRemainAmount(item);
|
|
117
|
+
return Object.assign(Object.assign({}, item), { remainQty,
|
|
118
|
+
remainUomValue, remainUomValueWithUom: remainUomValue + ' ' + item.uom,
|
|
119
|
+
// product: item.product,
|
|
120
|
+
productName: `${item.product.name}(${item.product.description})`, productSKU: item.product.sku, productBrand: item.product.brand, productId: item.product.id, productDetailId: item.productDetail.id });
|
|
121
|
+
}));
|
|
122
|
+
return { items, total };
|
|
105
123
|
}
|
|
106
|
-
|
|
107
|
-
|
|
124
|
+
catch (error) {
|
|
125
|
+
throw new Error(error);
|
|
108
126
|
}
|
|
109
|
-
let [items, total] = await qb.getManyAndCount();
|
|
110
|
-
items = await Promise.all(items.map(async (item) => {
|
|
111
|
-
const { remainQty, remainUomValue } = await getRemainAmount(item);
|
|
112
|
-
return Object.assign(Object.assign({}, item), { remainQty,
|
|
113
|
-
remainUomValue, remainUomValueWithUom: remainUomValue + ' ' + item.uom,
|
|
114
|
-
// product: item.product,
|
|
115
|
-
productName: `${item.product.name}(${item.product.description})`, productSKU: item.product.sku, productBrand: item.product.brand, productId: item.product.id, productDetailId: item.productDetail.id });
|
|
116
|
-
}));
|
|
117
|
-
return { items, total };
|
|
118
127
|
}
|
|
119
128
|
};
|
|
120
129
|
async function getRemainAmount(inventory) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventories-by-pallet.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/inventories-by-pallet.ts"],"names":[],"mappings":";;;AAAA,qCAAqE;AAGrE,
|
|
1
|
+
{"version":3,"file":"inventories-by-pallet.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/inventories-by-pallet.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.
|
|
3
|
+
"version": "4.3.470",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -29,21 +29,21 @@
|
|
|
29
29
|
"@things-factory/id-rule-base": "^4.3.452",
|
|
30
30
|
"@things-factory/integration-accounting": "^4.3.452",
|
|
31
31
|
"@things-factory/integration-base": "^4.3.452",
|
|
32
|
-
"@things-factory/integration-lmd": "^4.3.
|
|
33
|
-
"@things-factory/integration-marketplace": "^4.3.
|
|
34
|
-
"@things-factory/integration-powrup": "^4.3.
|
|
35
|
-
"@things-factory/integration-sellercraft": "^4.3.
|
|
32
|
+
"@things-factory/integration-lmd": "^4.3.470",
|
|
33
|
+
"@things-factory/integration-marketplace": "^4.3.470",
|
|
34
|
+
"@things-factory/integration-powrup": "^4.3.470",
|
|
35
|
+
"@things-factory/integration-sellercraft": "^4.3.470",
|
|
36
36
|
"@things-factory/integration-sftp": "^4.3.452",
|
|
37
|
-
"@things-factory/marketplace-base": "^4.3.
|
|
37
|
+
"@things-factory/marketplace-base": "^4.3.470",
|
|
38
38
|
"@things-factory/notification": "^4.3.452",
|
|
39
|
-
"@things-factory/sales-base": "^4.3.
|
|
39
|
+
"@things-factory/sales-base": "^4.3.470",
|
|
40
40
|
"@things-factory/setting-base": "^4.3.452",
|
|
41
41
|
"@things-factory/shell": "^4.3.434",
|
|
42
42
|
"@things-factory/transport-base": "^4.3.452",
|
|
43
|
-
"@things-factory/warehouse-base": "^4.3.
|
|
43
|
+
"@things-factory/warehouse-base": "^4.3.470",
|
|
44
44
|
"jspdf": "2.5.1",
|
|
45
45
|
"puppeteer": "21.0.3",
|
|
46
46
|
"uuid": "^9.0.0"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "8e72b695084f81b57770f574336df8588b769eb6"
|
|
49
49
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Brackets, getRepository, SelectQueryBuilder } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import { getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
5
4
|
import { ORDER_INVENTORY_STATUS } from '@things-factory/sales-base'
|
|
6
5
|
import { buildCondition, buildQuery, Domain } from '@things-factory/shell'
|
|
7
6
|
import { Inventory, LOCATION_TYPE } from '@things-factory/warehouse-base'
|
|
@@ -10,15 +9,16 @@ export const inventoriesByPalletResolver = {
|
|
|
10
9
|
async inventoriesByPallet(_: any, { filters, pagination, sortings, locationSortingRules }, context: any) {
|
|
11
10
|
const { domain, user }: { domain: Domain; user: User } = context.state
|
|
12
11
|
const params = { filters, pagination }
|
|
13
|
-
|
|
12
|
+
try {
|
|
14
13
|
const bizplaceId = params.filters.find(x => x.name == 'bizplace_id')
|
|
15
14
|
const productFilters = params.filters.filter(x => x.name == 'productName')
|
|
15
|
+
const inventoriesFilters = params.filters.find(x => x.name == 'invFilter')
|
|
16
16
|
const recallFilters = params.filters.find(x => x.name === 'recall')
|
|
17
17
|
const skipLockCheckFilters = params.filters.find(x => x.name === 'skipLockCheck')
|
|
18
18
|
let skipLockCheck: Boolean =
|
|
19
19
|
skipLockCheckFilters && skipLockCheckFilters?.value ? skipLockCheckFilters?.value : false
|
|
20
20
|
const productFilterColumns = ['sku', 'brandSku', 'name', 'description', 'brand', 'subBrand']
|
|
21
|
-
params.filters = params.filters.filter(x => x.name != 'productName')
|
|
21
|
+
params.filters = params.filters.filter(x => x.name != 'productName' && x.name != 'invFilter')
|
|
22
22
|
const batchIdFilters = params.filters.find(x => x.name == 'batchId')
|
|
23
23
|
|
|
24
24
|
if (!params.filters.find((filter: any) => filter.name === 'bizplace_id')) {
|
|
@@ -28,28 +28,28 @@ export const inventoriesByPalletResolver = {
|
|
|
28
28
|
const locationFilters = params.filters.find(x => x.name == 'locationName')
|
|
29
29
|
params.filters = params.filters.filter(x => x.name != 'locationName')
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
31
|
+
const qb: SelectQueryBuilder<Inventory> = getRepository(Inventory).createQueryBuilder('iv')
|
|
32
|
+
buildQuery(qb, params, context)
|
|
33
|
+
|
|
34
|
+
qb.leftJoinAndSelect('iv.domain', 'domain')
|
|
35
|
+
.leftJoinAndSelect('iv.bizplace', 'bizplace')
|
|
36
|
+
.leftJoinAndSelect('iv.product', 'product')
|
|
37
|
+
.leftJoinAndSelect('iv.productDetail', 'productDetail')
|
|
38
|
+
.leftJoin('product_detail_stocks', 'pds', 'pds.product_detail_id = iv.product_detail_id')
|
|
39
|
+
.leftJoinAndSelect('iv.warehouse', 'warehouse')
|
|
40
|
+
.leftJoinAndSelect('iv.location', 'location')
|
|
41
|
+
.leftJoinAndSelect('iv.creator', 'creator')
|
|
42
|
+
.leftJoinAndSelect('iv.updater', 'updater')
|
|
43
|
+
.andWhere('iv.qty > 0')
|
|
44
|
+
.andWhere('iv.transfer_qty <= 0')
|
|
45
|
+
.andWhere('iv.transfer_uom_value <= 0')
|
|
46
|
+
.andWhere(
|
|
47
|
+
`location.type ${recallFilters?.value === true ? '' : 'NOT'} IN ('${LOCATION_TYPE.QUARANTINE}', '${
|
|
48
|
+
LOCATION_TYPE.RESERVE
|
|
49
|
+
}', '${LOCATION_TYPE.DAMAGE}')`
|
|
50
|
+
)
|
|
51
|
+
.andWhere(
|
|
52
|
+
`(iv.batch_id, product.name, iv.packing_type, product.brand) NOT IN (
|
|
53
53
|
SELECT
|
|
54
54
|
oi.batch_id, p2.name, oi.packing_type, p2.brand
|
|
55
55
|
FROM
|
|
@@ -63,43 +63,21 @@ export const inventoriesByPalletResolver = {
|
|
|
63
63
|
AND oi.domain_id = (:domainId)
|
|
64
64
|
AND oi.bizplace_id = (:bizplaceId)
|
|
65
65
|
)`,
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (locationFilters) {
|
|
70
|
-
qb.andWhere(`location.name ilike '${locationFilters.value}'`)
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
if (productFilters && productFilters.length > 0) {
|
|
74
|
-
let productInfo = productFilters[0]
|
|
75
|
-
qb.andWhere(
|
|
76
|
-
new Brackets(qb2 => {
|
|
77
|
-
productFilterColumns.forEach(filter => {
|
|
78
|
-
const condition = buildCondition(
|
|
79
|
-
'product',
|
|
80
|
-
filter,
|
|
81
|
-
'i_like',
|
|
82
|
-
productInfo.value,
|
|
83
|
-
false,
|
|
84
|
-
Object.keys(qb.getParameters()).length
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
qb2.orWhere(condition.clause, condition.parameters)
|
|
88
|
-
})
|
|
89
|
-
})
|
|
90
|
-
)
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (!skipLockCheck) {
|
|
94
|
-
qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0')
|
|
95
|
-
qb.andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0')
|
|
96
|
-
}
|
|
66
|
+
{ bizplaceId: bizplaceId.value, domainId: domain.id }
|
|
67
|
+
)
|
|
97
68
|
|
|
98
|
-
if (recallFilters?.value === true) {
|
|
99
|
-
qb.orWhere('(iv.domain_id = (:domainId) and iv.bizplace_id = (:bizplaceId)')
|
|
100
69
|
if (locationFilters) {
|
|
101
70
|
qb.andWhere(`location.name ilike '${locationFilters.value}'`)
|
|
102
71
|
}
|
|
72
|
+
|
|
73
|
+
if (inventoriesFilters.value.length > 0) {
|
|
74
|
+
|
|
75
|
+
qb.andWhere('iv.id NOT IN (:...inventoriesIds)', {
|
|
76
|
+
inventoriesIds: inventoriesFilters.value
|
|
77
|
+
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
|
|
103
81
|
if (productFilters && productFilters.length > 0) {
|
|
104
82
|
let productInfo = productFilters[0]
|
|
105
83
|
qb.andWhere(
|
|
@@ -119,64 +97,97 @@ export const inventoriesByPalletResolver = {
|
|
|
119
97
|
})
|
|
120
98
|
)
|
|
121
99
|
}
|
|
122
|
-
|
|
123
|
-
|
|
100
|
+
|
|
101
|
+
if (!skipLockCheck) {
|
|
102
|
+
qb.andWhere('CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END >= 0')
|
|
103
|
+
qb.andWhere('iv.qty - CASE WHEN iv.lockedQty IS NULL THEN 0 ELSE iv.lockedQty END > 0')
|
|
124
104
|
}
|
|
125
|
-
qb.andWhere(
|
|
126
|
-
'iv.obsolete = true and case when iv.expiration_date is not null and product.min_outbound_shelf_life is not null then CURRENT_DATE > iv.expiration_date - product.min_outbound_shelf_life else true end)'
|
|
127
|
-
)
|
|
128
|
-
} else {
|
|
129
|
-
qb.andWhere('iv.obsolete = false')
|
|
130
|
-
qb.andWhere(
|
|
131
|
-
'case when iv.expiration_date is not null and product.min_outbound_shelf_life is not null then CURRENT_DATE < iv.expiration_date - product.min_outbound_shelf_life else true end'
|
|
132
|
-
)
|
|
133
|
-
}
|
|
134
105
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
106
|
+
if (recallFilters?.value === true) {
|
|
107
|
+
qb.orWhere('(iv.domain_id = (:domainId) and iv.bizplace_id = (:bizplaceId)')
|
|
108
|
+
if (locationFilters) {
|
|
109
|
+
qb.andWhere(`location.name ilike '${locationFilters.value}'`)
|
|
110
|
+
}
|
|
111
|
+
if (productFilters && productFilters.length > 0) {
|
|
112
|
+
let productInfo = productFilters[0]
|
|
113
|
+
qb.andWhere(
|
|
114
|
+
new Brackets(qb2 => {
|
|
115
|
+
productFilterColumns.forEach(filter => {
|
|
116
|
+
const condition = buildCondition(
|
|
117
|
+
'product',
|
|
118
|
+
filter,
|
|
119
|
+
'i_like',
|
|
120
|
+
productInfo.value,
|
|
121
|
+
false,
|
|
122
|
+
Object.keys(qb.getParameters()).length
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
qb2.orWhere(condition.clause, condition.parameters)
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
if (batchIdFilters) {
|
|
131
|
+
qb.andWhere(`iv.batch_id ilike '${batchIdFilters.value}'`)
|
|
132
|
+
}
|
|
133
|
+
qb.andWhere(
|
|
134
|
+
'iv.obsolete = true and case when iv.expiration_date is not null and product.min_outbound_shelf_life is not null then CURRENT_DATE > iv.expiration_date - product.min_outbound_shelf_life else true end)'
|
|
135
|
+
)
|
|
136
|
+
} else {
|
|
137
|
+
qb.andWhere('iv.obsolete = false')
|
|
138
|
+
qb.andWhere(
|
|
139
|
+
'case when iv.expiration_date is not null and product.min_outbound_shelf_life is not null then CURRENT_DATE < iv.expiration_date - product.min_outbound_shelf_life else true end'
|
|
140
|
+
)
|
|
141
|
+
}
|
|
149
142
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
143
|
+
if (sortings?.length !== 0) {
|
|
144
|
+
const arrChildSortData = ['productName', 'productSKU']
|
|
145
|
+
|
|
146
|
+
const remapChildSortData = ['name', 'sku']
|
|
147
|
+
const sort = (sortings || []).reduce(
|
|
148
|
+
(acc, sort, idx) => ({
|
|
149
|
+
...acc,
|
|
150
|
+
[arrChildSortData.indexOf(sort.name) >= 0 ? 'product' + '.' + remapChildSortData[idx] : 'iv.' + sort.name]:
|
|
151
|
+
sort.desc ? 'DESC' : 'ASC'
|
|
152
|
+
}),
|
|
153
|
+
{}
|
|
154
|
+
)
|
|
155
|
+
qb.orderBy(sort)
|
|
156
|
+
}
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
...item,
|
|
166
|
-
remainQty,
|
|
167
|
-
remainUomValue,
|
|
168
|
-
remainUomValueWithUom: remainUomValue + ' ' + item.uom,
|
|
169
|
-
// product: item.product,
|
|
170
|
-
productName: `${item.product.name}(${item.product.description})`,
|
|
171
|
-
productSKU: item.product.sku,
|
|
172
|
-
productBrand: item.product.brand,
|
|
173
|
-
productId: item.product.id,
|
|
174
|
-
productDetailId: item.productDetail.id
|
|
175
|
-
}
|
|
176
|
-
})
|
|
177
|
-
)
|
|
158
|
+
if (locationSortingRules?.length > 0) {
|
|
159
|
+
locationSortingRules.forEach((rule: { name: string; desc: boolean }) => {
|
|
160
|
+
qb.addOrderBy(`location.${rule.name}`, rule.desc ? 'DESC' : 'ASC')
|
|
161
|
+
})
|
|
162
|
+
} else {
|
|
163
|
+
qb.addOrderBy('location.name', 'DESC')
|
|
164
|
+
}
|
|
178
165
|
|
|
179
|
-
|
|
166
|
+
let [items, total] = await qb.getManyAndCount()
|
|
167
|
+
|
|
168
|
+
items = await Promise.all(
|
|
169
|
+
items.map(async (item: Inventory) => {
|
|
170
|
+
const { remainQty, remainUomValue } = await getRemainAmount(item)
|
|
171
|
+
|
|
172
|
+
return {
|
|
173
|
+
...item,
|
|
174
|
+
remainQty,
|
|
175
|
+
remainUomValue,
|
|
176
|
+
remainUomValueWithUom: remainUomValue + ' ' + item.uom,
|
|
177
|
+
// product: item.product,
|
|
178
|
+
productName: `${item.product.name}(${item.product.description})`,
|
|
179
|
+
productSKU: item.product.sku,
|
|
180
|
+
productBrand: item.product.brand,
|
|
181
|
+
productId: item.product.id,
|
|
182
|
+
productDetailId: item.productDetail.id
|
|
183
|
+
}
|
|
184
|
+
})
|
|
185
|
+
)
|
|
186
|
+
|
|
187
|
+
return { items, total }
|
|
188
|
+
} catch (error) {
|
|
189
|
+
throw new Error(error)
|
|
190
|
+
}
|
|
180
191
|
}
|
|
181
192
|
}
|
|
182
193
|
|