@things-factory/worksheet-base 4.3.7 → 4.3.14
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/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
- package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +3 -0
- package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
- package/package.json +17 -17
- package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
- package/server/graphql/types/worksheet-detail/inventory-detail.ts +3 -0
|
@@ -1,30 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generatePalletIdResolver = void 0;
|
|
4
|
-
const id_rule_base_1 = require("@things-factory/id-rule-base");
|
|
5
4
|
const typeorm_1 = require("typeorm");
|
|
5
|
+
const id_rule_base_1 = require("@things-factory/id-rule-base");
|
|
6
6
|
const entities_1 = require("../../../entities");
|
|
7
7
|
exports.generatePalletIdResolver = {
|
|
8
8
|
async generatePalletId(_, { targets, type }, context) {
|
|
9
|
-
var _a, _b;
|
|
9
|
+
var _a, _b, _c;
|
|
10
10
|
const { tx, domain } = context.state;
|
|
11
|
-
// 1. get
|
|
12
|
-
const
|
|
13
|
-
const year = today.getFullYear();
|
|
14
|
-
const month = today.getMonth();
|
|
15
|
-
const day = today.getDate();
|
|
16
|
-
const yy = String(year).substr(String(year).length - 2);
|
|
17
|
-
const mm = String(month + 1).padStart(2, '0');
|
|
18
|
-
const dd = String(day).padStart(2, '0');
|
|
19
|
-
const date = yy + mm + dd;
|
|
11
|
+
// 1. get date in yymmdd format
|
|
12
|
+
const date = new Date().toJSON().slice(0, 10).replace(/-/g, '').slice(2, 8);
|
|
20
13
|
let results = [];
|
|
21
|
-
// 2. get worksheet
|
|
22
|
-
let ids = targets.map(target => target.id);
|
|
23
|
-
// - getRepository using In(array) to pass the value to defined variable
|
|
14
|
+
// 2. get worksheet details
|
|
24
15
|
const foundWorksheetDetails = await tx.getRepository(entities_1.WorksheetDetail).find({
|
|
25
16
|
where: {
|
|
26
17
|
domain,
|
|
27
|
-
id: (0, typeorm_1.In)(
|
|
18
|
+
id: (0, typeorm_1.In)(targets.map(target => target.id))
|
|
28
19
|
},
|
|
29
20
|
relations: [
|
|
30
21
|
'domain',
|
|
@@ -32,6 +23,8 @@ exports.generatePalletIdResolver = {
|
|
|
32
23
|
'worksheet',
|
|
33
24
|
'worker',
|
|
34
25
|
'targetProduct',
|
|
26
|
+
'targetProduct.arrivalNotice',
|
|
27
|
+
'targetProduct.arrivalNotice.purchaseOrder',
|
|
35
28
|
'targetProduct.product',
|
|
36
29
|
'targetInventory',
|
|
37
30
|
'targetInventory.product',
|
|
@@ -40,7 +33,7 @@ exports.generatePalletIdResolver = {
|
|
|
40
33
|
]
|
|
41
34
|
});
|
|
42
35
|
// 3. from worksheet detail get product name, product type, batchid, packing type, bizplace
|
|
43
|
-
if (foundWorksheetDetails
|
|
36
|
+
if (!(foundWorksheetDetails === null || foundWorksheetDetails === void 0 ? void 0 : foundWorksheetDetails.length))
|
|
44
37
|
throw new Error('Unable to find worksheet details');
|
|
45
38
|
else {
|
|
46
39
|
for (let i = 0; i < foundWorksheetDetails.length; i++) {
|
|
@@ -49,28 +42,25 @@ exports.generatePalletIdResolver = {
|
|
|
49
42
|
if (foundWSD.id === targets[idx].id) {
|
|
50
43
|
// 4. generate pallet id based on print qty > call generateId resolver
|
|
51
44
|
for (let i = 0; i < targets[idx].printQty; i++) {
|
|
52
|
-
|
|
53
|
-
domain,
|
|
54
|
-
type,
|
|
55
|
-
seed: {
|
|
56
|
-
batchId: ((_a = foundWSD === null || foundWSD === void 0 ? void 0 : foundWSD.targetProduct) === null || _a === void 0 ? void 0 : _a.batchId)
|
|
57
|
-
? foundWSD.targetProduct.batchId
|
|
58
|
-
: ((_b = foundWSD === null || foundWSD === void 0 ? void 0 : foundWSD.targetInventory) === null || _b === void 0 ? void 0 : _b.batchId)
|
|
59
|
-
? foundWSD.targetInventory.batchId
|
|
60
|
-
: foundWSD.targetVas.targetBatchId,
|
|
61
|
-
date: date
|
|
62
|
-
}
|
|
63
|
-
});
|
|
45
|
+
let result = {};
|
|
64
46
|
// 5. map all data to be returned
|
|
65
|
-
if (foundWSD.targetProduct
|
|
66
|
-
|
|
47
|
+
if (foundWSD.targetProduct) {
|
|
48
|
+
result = Object.assign(Object.assign({}, foundWSD.targetProduct), { bizplace: foundWSD.bizplace, orderProductRemark: foundWSD.targetProduct.remark, purchaseOrderNo: ((_b = (_a = foundWSD.targetProduct.arrivalNotice) === null || _a === void 0 ? void 0 : _a.purchaseOrder) === null || _b === void 0 ? void 0 : _b.name) || '', arrivalNoticeRefNo: ((_c = foundWSD.targetProduct.arrivalNotice) === null || _c === void 0 ? void 0 : _c.refNo) || '' });
|
|
67
49
|
}
|
|
68
|
-
else if (foundWSD.targetInventory
|
|
69
|
-
|
|
50
|
+
else if (foundWSD.targetInventory) {
|
|
51
|
+
result = Object.assign(Object.assign({}, foundWSD.targetInventory), { bizplace: foundWSD.bizplace, orderProductRemark: '', purchaseOrderNo: '', arrivalNoticeRefNo: '' });
|
|
70
52
|
}
|
|
71
|
-
else if (foundWSD.targetVas
|
|
72
|
-
|
|
53
|
+
else if (foundWSD.targetVas) {
|
|
54
|
+
result = Object.assign(Object.assign({}, foundWSD.targetVas), { bizplace: foundWSD.bizplace, batchId: foundWSD.targetVas.targetBatchId, orderProductRemark: '', purchaseOrderNo: '', arrivalNoticeRefNo: '' });
|
|
73
55
|
}
|
|
56
|
+
results.push(Object.assign(Object.assign({}, result), { palletId: await (0, id_rule_base_1.generateId)({
|
|
57
|
+
domain,
|
|
58
|
+
type,
|
|
59
|
+
seed: {
|
|
60
|
+
batchId: result.batchId || '',
|
|
61
|
+
date
|
|
62
|
+
}
|
|
63
|
+
}) }));
|
|
74
64
|
}
|
|
75
65
|
}
|
|
76
66
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-pallet-id.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"generate-pallet-id.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,9 @@ exports.InventoryDetail = (0, graphql_tag_1.default) `
|
|
|
36
36
|
updater: User
|
|
37
37
|
createdAt: String
|
|
38
38
|
updatedAt: String
|
|
39
|
+
orderProductRemark: String
|
|
40
|
+
purchaseOrderNo: String
|
|
41
|
+
arrivalNoticeRefNo: String
|
|
39
42
|
}
|
|
40
43
|
`;
|
|
41
44
|
//# sourceMappingURL=inventory-detail.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-detail.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet-detail/inventory-detail.ts"],"names":[],"mappings":";;;;;;AAAA,8DAA6B;AAEhB,QAAA,eAAe,GAAG,IAAA,qBAAG,EAAA
|
|
1
|
+
{"version":3,"file":"inventory-detail.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet-detail/inventory-detail.ts"],"names":[],"mappings":";;;;;;AAAA,8DAA6B;AAEhB,QAAA,eAAe,GAAG,IAAA,qBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCjC,CAAA"}
|
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.14",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,21 +24,21 @@
|
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@things-factory/auth-base": "^4.3.
|
|
28
|
-
"@things-factory/biz-base": "^4.3.
|
|
29
|
-
"@things-factory/document-template-base": "^4.3.
|
|
30
|
-
"@things-factory/id-rule-base": "^4.3.
|
|
31
|
-
"@things-factory/integration-lmd": "^4.3.
|
|
32
|
-
"@things-factory/integration-marketplace": "^4.3.
|
|
33
|
-
"@things-factory/integration-sellercraft": "^4.3.
|
|
34
|
-
"@things-factory/integration-sftp": "^4.3.
|
|
35
|
-
"@things-factory/marketplace-base": "^4.3.
|
|
36
|
-
"@things-factory/notification": "^4.3.
|
|
37
|
-
"@things-factory/sales-base": "^4.3.
|
|
38
|
-
"@things-factory/setting-base": "^4.3.
|
|
39
|
-
"@things-factory/shell": "^4.3.
|
|
40
|
-
"@things-factory/transport-base": "^4.3.
|
|
41
|
-
"@things-factory/warehouse-base": "^4.3.
|
|
27
|
+
"@things-factory/auth-base": "^4.3.14",
|
|
28
|
+
"@things-factory/biz-base": "^4.3.14",
|
|
29
|
+
"@things-factory/document-template-base": "^4.3.14",
|
|
30
|
+
"@things-factory/id-rule-base": "^4.3.14",
|
|
31
|
+
"@things-factory/integration-lmd": "^4.3.14",
|
|
32
|
+
"@things-factory/integration-marketplace": "^4.3.14",
|
|
33
|
+
"@things-factory/integration-sellercraft": "^4.3.14",
|
|
34
|
+
"@things-factory/integration-sftp": "^4.3.14",
|
|
35
|
+
"@things-factory/marketplace-base": "^4.3.14",
|
|
36
|
+
"@things-factory/notification": "^4.3.14",
|
|
37
|
+
"@things-factory/sales-base": "^4.3.14",
|
|
38
|
+
"@things-factory/setting-base": "^4.3.14",
|
|
39
|
+
"@things-factory/shell": "^4.3.14",
|
|
40
|
+
"@things-factory/transport-base": "^4.3.14",
|
|
41
|
+
"@things-factory/warehouse-base": "^4.3.14"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "d99f715c7ac6f520c23d6ff95d85b26bff892590"
|
|
44
44
|
}
|
|
@@ -1,33 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { EntityManager, In } from 'typeorm'
|
|
2
|
+
|
|
3
3
|
import { generateId } from '@things-factory/id-rule-base'
|
|
4
|
-
import {
|
|
4
|
+
import { Domain } from '@things-factory/shell'
|
|
5
|
+
|
|
5
6
|
import { WorksheetDetail } from '../../../entities'
|
|
6
7
|
|
|
7
8
|
export const generatePalletIdResolver = {
|
|
8
9
|
async generatePalletId(_: any, { targets, type }, context: any) {
|
|
9
10
|
const { tx, domain }: { tx: EntityManager; domain: Domain } = context.state
|
|
10
|
-
// 1. get
|
|
11
|
-
const
|
|
12
|
-
const year = today.getFullYear()
|
|
13
|
-
const month = today.getMonth()
|
|
14
|
-
const day = today.getDate()
|
|
15
|
-
|
|
16
|
-
const yy = String(year).substr(String(year).length - 2)
|
|
17
|
-
const mm = String(month + 1).padStart(2, '0')
|
|
18
|
-
const dd = String(day).padStart(2, '0')
|
|
19
|
-
|
|
20
|
-
const date = yy + mm + dd
|
|
11
|
+
// 1. get date in yymmdd format
|
|
12
|
+
const date = new Date().toJSON().slice(0, 10).replace(/-/g, '').slice(2, 8)
|
|
21
13
|
let results = []
|
|
22
14
|
|
|
23
|
-
// 2. get worksheet
|
|
24
|
-
let ids = targets.map(target => target.id)
|
|
25
|
-
|
|
26
|
-
// - getRepository using In(array) to pass the value to defined variable
|
|
15
|
+
// 2. get worksheet details
|
|
27
16
|
const foundWorksheetDetails: WorksheetDetail[] = await tx.getRepository(WorksheetDetail).find({
|
|
28
17
|
where: {
|
|
29
18
|
domain,
|
|
30
|
-
id: In(
|
|
19
|
+
id: In(targets.map(target => target.id))
|
|
31
20
|
},
|
|
32
21
|
relations: [
|
|
33
22
|
'domain',
|
|
@@ -35,6 +24,8 @@ export const generatePalletIdResolver = {
|
|
|
35
24
|
'worksheet',
|
|
36
25
|
'worker',
|
|
37
26
|
'targetProduct',
|
|
27
|
+
'targetProduct.arrivalNotice',
|
|
28
|
+
'targetProduct.arrivalNotice.purchaseOrder',
|
|
38
29
|
'targetProduct.product',
|
|
39
30
|
'targetInventory',
|
|
40
31
|
'targetInventory.product',
|
|
@@ -44,8 +35,7 @@ export const generatePalletIdResolver = {
|
|
|
44
35
|
})
|
|
45
36
|
|
|
46
37
|
// 3. from worksheet detail get product name, product type, batchid, packing type, bizplace
|
|
47
|
-
|
|
48
|
-
if (foundWorksheetDetails.length <= 0) throw new Error('Unable to find worksheet details')
|
|
38
|
+
if (!foundWorksheetDetails?.length) throw new Error('Unable to find worksheet details')
|
|
49
39
|
else {
|
|
50
40
|
for (let i = 0; i < foundWorksheetDetails.length; i++) {
|
|
51
41
|
let foundWSD = foundWorksheetDetails[i]
|
|
@@ -53,39 +43,46 @@ export const generatePalletIdResolver = {
|
|
|
53
43
|
if (foundWSD.id === targets[idx].id) {
|
|
54
44
|
// 4. generate pallet id based on print qty > call generateId resolver
|
|
55
45
|
for (let i = 0; i < targets[idx].printQty; i++) {
|
|
56
|
-
|
|
57
|
-
domain,
|
|
58
|
-
type,
|
|
59
|
-
seed: {
|
|
60
|
-
batchId: foundWSD?.targetProduct?.batchId
|
|
61
|
-
? foundWSD.targetProduct.batchId
|
|
62
|
-
: foundWSD?.targetInventory?.batchId
|
|
63
|
-
? foundWSD.targetInventory.batchId
|
|
64
|
-
: foundWSD.targetVas.targetBatchId,
|
|
65
|
-
date: date
|
|
66
|
-
}
|
|
67
|
-
})
|
|
68
|
-
|
|
46
|
+
let result: any = {}
|
|
69
47
|
// 5. map all data to be returned
|
|
70
|
-
if (foundWSD.targetProduct
|
|
71
|
-
|
|
48
|
+
if (foundWSD.targetProduct) {
|
|
49
|
+
result = {
|
|
72
50
|
...foundWSD.targetProduct,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
51
|
+
bizplace: foundWSD.bizplace,
|
|
52
|
+
orderProductRemark: foundWSD.targetProduct.remark,
|
|
53
|
+
purchaseOrderNo: foundWSD.targetProduct.arrivalNotice?.purchaseOrder?.name || '',
|
|
54
|
+
arrivalNoticeRefNo: foundWSD.targetProduct.arrivalNotice?.refNo || ''
|
|
55
|
+
}
|
|
56
|
+
} else if (foundWSD.targetInventory) {
|
|
57
|
+
result = {
|
|
78
58
|
...foundWSD.targetInventory,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
59
|
+
bizplace: foundWSD.bizplace,
|
|
60
|
+
orderProductRemark: '',
|
|
61
|
+
purchaseOrderNo: '',
|
|
62
|
+
arrivalNoticeRefNo: ''
|
|
63
|
+
}
|
|
64
|
+
} else if (foundWSD.targetVas) {
|
|
65
|
+
result = {
|
|
84
66
|
...foundWSD.targetVas,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
67
|
+
bizplace: foundWSD.bizplace,
|
|
68
|
+
batchId: foundWSD.targetVas.targetBatchId,
|
|
69
|
+
orderProductRemark: '',
|
|
70
|
+
purchaseOrderNo: '',
|
|
71
|
+
arrivalNoticeRefNo: ''
|
|
72
|
+
}
|
|
88
73
|
}
|
|
74
|
+
|
|
75
|
+
results.push({
|
|
76
|
+
...result,
|
|
77
|
+
palletId: await generateId({
|
|
78
|
+
domain,
|
|
79
|
+
type,
|
|
80
|
+
seed: {
|
|
81
|
+
batchId: result.batchId || '',
|
|
82
|
+
date
|
|
83
|
+
}
|
|
84
|
+
})
|
|
85
|
+
})
|
|
89
86
|
}
|
|
90
87
|
}
|
|
91
88
|
}
|