@things-factory/worksheet-base 4.1.7 → 4.1.8
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/generate-worksheet/generate-multiple-release-good-worksheet.js +4 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +47 -2
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/package.json +5 -5
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +4 -2
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +70 -3
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateMultipleReleaseGoodWorksheetResolver = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
4
5
|
const generate_release_good_worksheet_1 = require("./generate-release-good-worksheet");
|
|
5
6
|
exports.generateMultipleReleaseGoodWorksheetResolver = {
|
|
6
7
|
async generateMultipleReleaseGoodWorksheet(_, { releaseGoodNos }, context) {
|
|
7
8
|
const { tx, domain, user } = context.state;
|
|
8
9
|
for (let idx = 0; idx < releaseGoodNos.length; idx++) {
|
|
9
|
-
await (0,
|
|
10
|
+
await (0, typeorm_1.getManager)().transaction(async (txMgr) => {
|
|
11
|
+
await (0, generate_release_good_worksheet_1.generatePickingWorksheet)(txMgr, domain, user, releaseGoodNos[idx]);
|
|
12
|
+
});
|
|
10
13
|
}
|
|
11
14
|
return true;
|
|
12
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-multiple-release-good-worksheet.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"generate-multiple-release-good-worksheet.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts"],"names":[],"mappings":";;;AAAA,qCAAmD;AASnD,uFAA4E;AAE/D,QAAA,4CAA4C,GAAG;IAC1D,KAAK,CAAC,oCAAoC,CAAC,CAAM,EAAE,EAAE,cAAc,EAAE,EAAE,OAAY;QACjF,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAE7F,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YACpD,MAAM,IAAA,oBAAU,GAAE,CAAC,WAAW,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;gBAC3C,MAAM,IAAA,0DAAwB,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;YAC1E,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generatePickingWorksheetDetail = exports.generatePickingWorksheet = exports.generateReleaseGoodWorksheetResolver = void 0;
|
|
4
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
5
|
+
const setting_base_1 = require("@things-factory/setting-base");
|
|
4
6
|
const controllers_1 = require("../../../../controllers/");
|
|
7
|
+
const entities_1 = require("../../../../entities");
|
|
8
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
5
9
|
exports.generateReleaseGoodWorksheetResolver = {
|
|
6
10
|
async generateReleaseGoodWorksheet(_, { releaseGoodNo }, context) {
|
|
7
11
|
const { tx, domain, user } = context.state;
|
|
@@ -9,8 +13,49 @@ exports.generateReleaseGoodWorksheetResolver = {
|
|
|
9
13
|
}
|
|
10
14
|
};
|
|
11
15
|
async function generatePickingWorksheet(tx, domain, user, releaseGoodNo) {
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
try {
|
|
17
|
+
const worksheetController = new controllers_1.PickingWorksheetController(tx, domain, user);
|
|
18
|
+
let releaseGood = await worksheetController.findRefOrder(sales_base_1.ReleaseGood, {
|
|
19
|
+
domain: domain,
|
|
20
|
+
name: releaseGoodNo,
|
|
21
|
+
status: sales_base_1.ORDER_STATUS.PENDING_WORKSHEET
|
|
22
|
+
});
|
|
23
|
+
let worksheet = new entities_1.Worksheet();
|
|
24
|
+
const directReleaseOrder = await tx.getRepository(setting_base_1.Setting).findOne({
|
|
25
|
+
where: { domain, category: 'id-rule', name: 'enable-direct-b2c-release-order' }
|
|
26
|
+
});
|
|
27
|
+
if (releaseGood.type == 'b2c' && directReleaseOrder && directReleaseOrder.value.toLowerCase() == 'true') {
|
|
28
|
+
const inventoryUtil = new warehouse_base_1.InventoryUtil(tx, domain, user);
|
|
29
|
+
let orderInventories = await tx.getRepository(sales_base_1.OrderInventory).find({
|
|
30
|
+
where: { domain, releaseGood },
|
|
31
|
+
relations: ['inventory']
|
|
32
|
+
});
|
|
33
|
+
for (let idx = 0; idx < orderInventories.length; idx++) {
|
|
34
|
+
let orderInventory = orderInventories[idx];
|
|
35
|
+
if (orderInventory.releaseQty <= 0 || (orderInventory.uomValue != null && orderInventory.uomValue <= 0)) {
|
|
36
|
+
throw new Error(`Invalid data for ${releaseGoodNo}. Please contact support.`);
|
|
37
|
+
}
|
|
38
|
+
orderInventory.uomValue = orderInventory.uomValue > 0 ? orderInventory.uomValue : 0;
|
|
39
|
+
let inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne({ where: { id: orderInventory.inventory.id } });
|
|
40
|
+
await inventoryUtil.transactionInventory({
|
|
41
|
+
id: inventory.id,
|
|
42
|
+
qty: inventory.qty - orderInventory.releaseQty,
|
|
43
|
+
uomValue: Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100,
|
|
44
|
+
lockedQty: inventory.lockedQty - orderInventory.releaseQty,
|
|
45
|
+
lockedUomValue: Math.round((inventory.lockedUomValue - orderInventory.releaseUomValue) * 100) / 100
|
|
46
|
+
}, releaseGood, -orderInventory.releaseQty, -orderInventory.releaseUomValue, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.DIRECT_DEDUCTION);
|
|
47
|
+
await tx.getRepository(sales_base_1.OrderInventory).save({ id: orderInventory.id, status: sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED });
|
|
48
|
+
}
|
|
49
|
+
await tx.getRepository(sales_base_1.ReleaseGood).save({ id: releaseGood.id, status: sales_base_1.ORDER_STATUS.DONE });
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo);
|
|
53
|
+
}
|
|
54
|
+
return worksheet;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
return new entities_1.Worksheet();
|
|
58
|
+
}
|
|
14
59
|
}
|
|
15
60
|
exports.generatePickingWorksheet = generatePickingWorksheet;
|
|
16
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-release-good-worksheet.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"generate-release-good-worksheet.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.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.1.
|
|
3
|
+
"version": "4.1.8",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -32,13 +32,13 @@
|
|
|
32
32
|
"@things-factory/integration-marketplace": "^4.1.6",
|
|
33
33
|
"@things-factory/integration-sellercraft": "^4.1.6",
|
|
34
34
|
"@things-factory/integration-sftp": "^4.1.6",
|
|
35
|
-
"@things-factory/marketplace-base": "^4.1.
|
|
35
|
+
"@things-factory/marketplace-base": "^4.1.8",
|
|
36
36
|
"@things-factory/notification": "^4.1.6",
|
|
37
|
-
"@things-factory/sales-base": "^4.1.
|
|
37
|
+
"@things-factory/sales-base": "^4.1.8",
|
|
38
38
|
"@things-factory/setting-base": "^4.1.6",
|
|
39
39
|
"@things-factory/shell": "^4.1.6",
|
|
40
40
|
"@things-factory/transport-base": "^4.1.6",
|
|
41
|
-
"@things-factory/warehouse-base": "^4.1.
|
|
41
|
+
"@things-factory/warehouse-base": "^4.1.8"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "a2c80a6ae7adc79c5779b5ef9173c66d5a5d89b9"
|
|
44
44
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EntityManager } from 'typeorm'
|
|
1
|
+
import { EntityManager, getManager } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
4
|
import { OrderInventory } from '@things-factory/sales-base'
|
|
@@ -14,7 +14,9 @@ export const generateMultipleReleaseGoodWorksheetResolver = {
|
|
|
14
14
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
15
15
|
|
|
16
16
|
for (let idx = 0; idx < releaseGoodNos.length; idx++) {
|
|
17
|
-
await
|
|
17
|
+
await getManager().transaction(async txMgr => {
|
|
18
|
+
await generatePickingWorksheet(txMgr, domain, user, releaseGoodNos[idx])
|
|
19
|
+
});
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
return true
|
package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { EntityManager } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import { OrderInventory } from '@things-factory/sales-base'
|
|
4
|
+
import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
|
|
5
5
|
import { Domain } from '@things-factory/shell'
|
|
6
|
+
import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
6
7
|
|
|
7
8
|
import { PickingWorksheetController } from '../../../../controllers/'
|
|
8
9
|
import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
9
10
|
|
|
11
|
+
import {
|
|
12
|
+
Inventory,
|
|
13
|
+
InventoryUtil,
|
|
14
|
+
INVENTORY_TRANSACTION_TYPE
|
|
15
|
+
} from '@things-factory/warehouse-base'
|
|
16
|
+
|
|
10
17
|
export const generateReleaseGoodWorksheetResolver = {
|
|
11
18
|
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo }, context: any) {
|
|
12
19
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
@@ -20,8 +27,68 @@ export async function generatePickingWorksheet(
|
|
|
20
27
|
user: User,
|
|
21
28
|
releaseGoodNo: string
|
|
22
29
|
): Promise<Worksheet> {
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
try {
|
|
31
|
+
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
32
|
+
|
|
33
|
+
let releaseGood: ReleaseGood = await worksheetController.findRefOrder(
|
|
34
|
+
ReleaseGood,
|
|
35
|
+
{
|
|
36
|
+
domain: domain,
|
|
37
|
+
name: releaseGoodNo,
|
|
38
|
+
status: ORDER_STATUS.PENDING_WORKSHEET
|
|
39
|
+
}
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
let worksheet: Worksheet = new Worksheet()
|
|
43
|
+
|
|
44
|
+
const directReleaseOrder: Setting = await tx.getRepository(Setting).findOne({
|
|
45
|
+
where: { domain, category: 'id-rule', name: 'enable-direct-b2c-release-order' }
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
if (releaseGood.type == 'b2c' && directReleaseOrder && directReleaseOrder.value.toLowerCase() == 'true') {
|
|
49
|
+
const inventoryUtil = new InventoryUtil(tx, domain, user)
|
|
50
|
+
|
|
51
|
+
let orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
|
|
52
|
+
where: { domain, releaseGood },
|
|
53
|
+
relations: ['inventory']
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
for (let idx = 0; idx < orderInventories.length; idx++) {
|
|
57
|
+
let orderInventory = orderInventories[idx]
|
|
58
|
+
if (orderInventory.releaseQty <= 0 || (orderInventory.uomValue != null && orderInventory.uomValue <= 0)) {
|
|
59
|
+
throw new Error(`Invalid data for ${releaseGoodNo}. Please contact support.`);
|
|
60
|
+
}
|
|
61
|
+
orderInventory.uomValue = orderInventory.uomValue > 0 ? orderInventory.uomValue : 0
|
|
62
|
+
|
|
63
|
+
let inventory: Inventory = await tx.getRepository(Inventory).findOne({ where: { id: orderInventory.inventory.id } })
|
|
64
|
+
|
|
65
|
+
await inventoryUtil.transactionInventory(
|
|
66
|
+
{
|
|
67
|
+
id: inventory.id,
|
|
68
|
+
qty: inventory.qty - orderInventory.releaseQty,
|
|
69
|
+
uomValue: Math.round((inventory.uomValue - orderInventory.releaseUomValue) * 100) / 100,
|
|
70
|
+
lockedQty: inventory.lockedQty - orderInventory.releaseQty,
|
|
71
|
+
lockedUomValue: Math.round((inventory.lockedUomValue - orderInventory.releaseUomValue) * 100) / 100
|
|
72
|
+
},
|
|
73
|
+
releaseGood,
|
|
74
|
+
- orderInventory.releaseQty,
|
|
75
|
+
- orderInventory.releaseUomValue,
|
|
76
|
+
INVENTORY_TRANSACTION_TYPE.DIRECT_DEDUCTION
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
await tx.getRepository(OrderInventory).save({ id: orderInventory.id, status: ORDER_INVENTORY_STATUS.TERMINATED })
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
await tx.getRepository(ReleaseGood).save({ id: releaseGood.id, status: ORDER_STATUS.DONE })
|
|
83
|
+
|
|
84
|
+
} else {
|
|
85
|
+
worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return worksheet
|
|
89
|
+
} catch (error) {
|
|
90
|
+
return new Worksheet()
|
|
91
|
+
}
|
|
25
92
|
}
|
|
26
93
|
|
|
27
94
|
/**
|