@things-factory/operato-hub 4.3.17 → 4.3.20
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/synchronization/sync-products-to-sellercraft.js +52 -31
- package/dist-server/graphql/resolvers/synchronization/sync-products-to-sellercraft.js.map +1 -1
- package/package.json +54 -54
- package/server/graphql/resolvers/synchronization/sync-products-to-sellercraft.ts +64 -42
|
@@ -5,63 +5,84 @@ const biz_base_1 = require("@things-factory/biz-base");
|
|
|
5
5
|
const env_1 = require("@things-factory/env");
|
|
6
6
|
const integration_fulfillment_1 = require("@things-factory/integration-fulfillment");
|
|
7
7
|
const integration_sellercraft_1 = require("@things-factory/integration-sellercraft");
|
|
8
|
-
const product_base_1 = require("@things-factory/product-base");
|
|
9
8
|
exports.syncProductsToSellercraftResolver = {
|
|
10
9
|
async syncProductsToSellercraft(_, { sellercraftId, fulfillmentCenterId }, context) {
|
|
10
|
+
var _a;
|
|
11
11
|
try {
|
|
12
12
|
const { domain, tx } = context.state;
|
|
13
|
-
let page =
|
|
13
|
+
let page = 0;
|
|
14
14
|
let hasMorePage = true;
|
|
15
15
|
const limit = 50;
|
|
16
|
-
const sellercraft = await tx
|
|
17
|
-
.getRepository(integration_sellercraft_1.Sellercraft)
|
|
18
|
-
.findOne({ where: { id: sellercraftId }, relations: ['domain'] });
|
|
16
|
+
const sellercraft = await tx.getRepository(integration_sellercraft_1.Sellercraft).findOne({ where: { id: sellercraftId }, relations: ['domain'] });
|
|
19
17
|
const customerDomain = sellercraft.domain;
|
|
20
18
|
const fulfilmentCenter = await integration_fulfillment_1.FulfillmentAPI.getFulfillmentCenter(fulfillmentCenterId);
|
|
21
19
|
const customerBizplace = await tx.getRepository(biz_base_1.Bizplace).findOne({ where: { domain: customerDomain } });
|
|
20
|
+
await tx.query(`
|
|
21
|
+
create temp table temp_warehouse_product_inventory ON COMMIT DROP as (
|
|
22
|
+
select p.id, p.sku as product_sku, p.name as product_name, p.description as product_description,
|
|
23
|
+
pd.gtin, pd.uom, pd.packing_size, coalesce(pd.nett_weight, 0) as nett_weight, pd.width, pd."depth", pd.height,
|
|
24
|
+
coalesce(src.qty, 0) as available_qty, coalesce(src.qty - src."remainQty", 0) as reserved_qty, coalesce(src."remainQty",0) as remain_qty
|
|
25
|
+
from bizplaces b
|
|
26
|
+
inner join companies c on c.id = b.company_id
|
|
27
|
+
inner join domains d on d.id = c.domain_id
|
|
28
|
+
inner join products p on p.domain_id = b.domain_id or p.domain_id = c.domain_id
|
|
29
|
+
inner join product_details pd on pd.product_id = p.id
|
|
30
|
+
left join (
|
|
31
|
+
select wboi.* from warehouse_bizplace_onhand_inventories wboi
|
|
32
|
+
inner join domains d on d.id = wboi."domainId"
|
|
33
|
+
inner join fulfillment_centers fc on d.subdomain = fc.center_id
|
|
34
|
+
where fc.id= $1
|
|
35
|
+
and wboi."bizplaceId" = $2 and "groupType" = 'SINGLE'
|
|
36
|
+
) src on src."productId" = pd."product_id"
|
|
37
|
+
and src."packingType" = pd."packing_type"
|
|
38
|
+
and src."packingSize" = pd."packing_size"
|
|
39
|
+
and src."uom" = pd."uom"
|
|
40
|
+
where b.id = $2
|
|
41
|
+
)
|
|
42
|
+
`, [fulfilmentCenter.id, customerBizplace.id]);
|
|
43
|
+
let total = await tx.query(`
|
|
44
|
+
select count(*) from temp_warehouse_product_inventory
|
|
45
|
+
`);
|
|
22
46
|
while (hasMorePage) {
|
|
47
|
+
hasMorePage = false;
|
|
23
48
|
try {
|
|
24
|
-
const { items, total } = await
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
})
|
|
49
|
+
// const { items, total } = await FulfillmentAPI.getInventoryProductGroupOpenAPI(fulfilmentCenter, {
|
|
50
|
+
// warehouseId: customerBizplace.id,
|
|
51
|
+
// paginationEntriesPerPage: limit,
|
|
52
|
+
// paginationOffset: page
|
|
53
|
+
// })
|
|
54
|
+
const items = await tx.query(`
|
|
55
|
+
select * from temp_warehouse_product_inventory limit $1 offset $2
|
|
56
|
+
`, [limit, page * limit]);
|
|
29
57
|
let sellercraftInv = [];
|
|
30
|
-
|
|
31
|
-
const product = await tx.getRepository(product_base_1.Product).findOne({
|
|
32
|
-
where: { domain, sku: item.productSKU },
|
|
33
|
-
relations: ['productDetails', 'productDetails.childProductDetail']
|
|
34
|
-
});
|
|
35
|
-
const productDetails = product.productDetails;
|
|
36
|
-
const defaultProductDetail = productDetails.find(productDetail => productDetail.isDefault);
|
|
58
|
+
items.map(async (item) => {
|
|
37
59
|
let packingSize = 1;
|
|
38
60
|
sellercraftInv.push({
|
|
39
|
-
sku: item.
|
|
40
|
-
gtin:
|
|
61
|
+
sku: item.product_sku,
|
|
62
|
+
gtin: item.gtin,
|
|
41
63
|
stock: {
|
|
42
|
-
quantity_total: item.
|
|
43
|
-
quantity_reserved: item.
|
|
64
|
+
quantity_total: item.available_qty * packingSize < 0 ? 0 : item.available_qty * packingSize,
|
|
65
|
+
quantity_reserved: item.reserved_qty * packingSize < 0 ? 0 : item.reserved_qty * packingSize,
|
|
44
66
|
unit_of_measure: 'EA'
|
|
45
67
|
},
|
|
46
|
-
package_weight_gm:
|
|
68
|
+
package_weight_gm: item.nett_weight <= 0 ? 1 : item.nett_weight,
|
|
47
69
|
package_dimensions: {
|
|
48
|
-
length_mm:
|
|
49
|
-
width_mm:
|
|
50
|
-
height_mm:
|
|
70
|
+
length_mm: item.depth <= 0 ? 1 : item.depth,
|
|
71
|
+
width_mm: item.width <= 0 ? 1 : item.width,
|
|
72
|
+
height_mm: item.height <= 0 ? 1 : item.height
|
|
51
73
|
}
|
|
52
74
|
});
|
|
53
|
-
})
|
|
75
|
+
});
|
|
54
76
|
const delay = (ms) => {
|
|
55
77
|
return new Promise(resolve => setTimeout(resolve, ms));
|
|
56
78
|
};
|
|
57
|
-
await delay(
|
|
79
|
+
await delay(500);
|
|
58
80
|
await integration_sellercraft_1.SellercraftAPI.updateProduct(sellercraft, { context, accountId: sellercraft.accountId, sellercraftInv });
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
hasMorePage = Boolean((sellercraftInv === null || sellercraftInv === void 0 ? void 0 : sellercraftInv.length) != 0 && (sellercraftInv === null || sellercraftInv === void 0 ? void 0 : sellercraftInv.length) < total);
|
|
81
|
+
page++;
|
|
82
|
+
hasMorePage = (((_a = total[0]) === null || _a === void 0 ? void 0 : _a.count) || 0) > (page * limit);
|
|
62
83
|
}
|
|
63
84
|
catch (e) {
|
|
64
|
-
env_1.logger.error(`syncProductsToSellercraftResolver
|
|
85
|
+
env_1.logger.error(`[syncProductsToSellercraftResolver] sellercraftID:${sellercraftId} fulfillmentCenterId:${fulfillmentCenterId} page:${page} - ${e}`);
|
|
65
86
|
}
|
|
66
87
|
}
|
|
67
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-products-to-sellercraft.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/sync-products-to-sellercraft.ts"],"names":[],"mappings":";;;AAEA,uDAAmD;AACnD,6CAA4C;AAC5C,qFAA2F;AAC3F,qFAAqF;
|
|
1
|
+
{"version":3,"file":"sync-products-to-sellercraft.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/sync-products-to-sellercraft.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/operato-hub",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.20",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -56,66 +56,66 @@
|
|
|
56
56
|
"@operato/scene-tab": "^0.1.6",
|
|
57
57
|
"@operato/scene-table": "^0.1.6",
|
|
58
58
|
"@operato/scene-wheel-sorter": "^0.1.6",
|
|
59
|
-
"@things-factory/api": "^4.3.
|
|
60
|
-
"@things-factory/apptool-ui": "^4.3.
|
|
61
|
-
"@things-factory/attachment-base": "^4.3.
|
|
62
|
-
"@things-factory/auth-base": "^4.3.
|
|
63
|
-
"@things-factory/auth-ui": "^4.3.
|
|
64
|
-
"@things-factory/biz-base": "^4.3.
|
|
65
|
-
"@things-factory/biz-ui": "^4.3.
|
|
66
|
-
"@things-factory/board-service": "^4.3.
|
|
67
|
-
"@things-factory/board-ui": "^4.3.
|
|
68
|
-
"@things-factory/code-ui": "^4.3.
|
|
69
|
-
"@things-factory/component-ui": "^4.3.
|
|
70
|
-
"@things-factory/context-ui": "^4.3.
|
|
71
|
-
"@things-factory/document-template-ui": "^4.3.
|
|
72
|
-
"@things-factory/export-ui": "^4.3.
|
|
73
|
-
"@things-factory/export-ui-csv": "^4.3.
|
|
74
|
-
"@things-factory/export-ui-excel": "^4.3.
|
|
75
|
-
"@things-factory/grist-ui": "^4.3.
|
|
76
|
-
"@things-factory/help": "^4.3.
|
|
77
|
-
"@things-factory/i18n-base": "^4.3.
|
|
78
|
-
"@things-factory/import-ui": "^4.3.
|
|
79
|
-
"@things-factory/import-ui-excel": "^4.3.
|
|
80
|
-
"@things-factory/integration-accounting": "^4.3.
|
|
81
|
-
"@things-factory/integration-fulfillment": "^4.3.
|
|
82
|
-
"@things-factory/integration-lmd": "^4.3.
|
|
83
|
-
"@things-factory/integration-marketplace": "^4.3.
|
|
84
|
-
"@things-factory/integration-pos": "^4.3.
|
|
85
|
-
"@things-factory/integration-sellercraft": "^4.3.
|
|
86
|
-
"@things-factory/integration-sftp": "^4.3.
|
|
87
|
-
"@things-factory/lite-menu": "^4.3.
|
|
88
|
-
"@things-factory/more-ui": "^4.3.
|
|
89
|
-
"@things-factory/notification": "^4.3.
|
|
90
|
-
"@things-factory/pdf": "^4.3.
|
|
91
|
-
"@things-factory/product-ui": "^4.3.
|
|
92
|
-
"@things-factory/resource-ui": "^4.3.
|
|
93
|
-
"@things-factory/sales-base": "^4.3.
|
|
94
|
-
"@things-factory/scene-data-transform": "^4.3.
|
|
95
|
-
"@things-factory/scene-excel": "^4.3.
|
|
96
|
-
"@things-factory/scene-firebase": "^4.3.
|
|
97
|
-
"@things-factory/scene-form": "^4.3.
|
|
98
|
-
"@things-factory/scene-google-map": "^4.3.
|
|
99
|
-
"@things-factory/scene-graphql": "^4.3.
|
|
100
|
-
"@things-factory/scene-label": "^4.3.
|
|
101
|
-
"@things-factory/scene-marker": "^4.3.
|
|
102
|
-
"@things-factory/scene-mqtt": "^4.3.
|
|
103
|
-
"@things-factory/scene-restful": "^4.3.
|
|
104
|
-
"@things-factory/scene-visualizer": "^4.3.
|
|
105
|
-
"@things-factory/setting-ui": "^4.3.
|
|
106
|
-
"@things-factory/shell": "^4.3.
|
|
107
|
-
"@things-factory/system-ui": "^4.3.
|
|
108
|
-
"@things-factory/warehouse-base": "^4.3.
|
|
109
|
-
"@things-factory/worksheet-base": "^4.3.
|
|
59
|
+
"@things-factory/api": "^4.3.20",
|
|
60
|
+
"@things-factory/apptool-ui": "^4.3.20",
|
|
61
|
+
"@things-factory/attachment-base": "^4.3.20",
|
|
62
|
+
"@things-factory/auth-base": "^4.3.20",
|
|
63
|
+
"@things-factory/auth-ui": "^4.3.20",
|
|
64
|
+
"@things-factory/biz-base": "^4.3.20",
|
|
65
|
+
"@things-factory/biz-ui": "^4.3.20",
|
|
66
|
+
"@things-factory/board-service": "^4.3.20",
|
|
67
|
+
"@things-factory/board-ui": "^4.3.20",
|
|
68
|
+
"@things-factory/code-ui": "^4.3.20",
|
|
69
|
+
"@things-factory/component-ui": "^4.3.20",
|
|
70
|
+
"@things-factory/context-ui": "^4.3.20",
|
|
71
|
+
"@things-factory/document-template-ui": "^4.3.20",
|
|
72
|
+
"@things-factory/export-ui": "^4.3.20",
|
|
73
|
+
"@things-factory/export-ui-csv": "^4.3.20",
|
|
74
|
+
"@things-factory/export-ui-excel": "^4.3.20",
|
|
75
|
+
"@things-factory/grist-ui": "^4.3.20",
|
|
76
|
+
"@things-factory/help": "^4.3.20",
|
|
77
|
+
"@things-factory/i18n-base": "^4.3.20",
|
|
78
|
+
"@things-factory/import-ui": "^4.3.20",
|
|
79
|
+
"@things-factory/import-ui-excel": "^4.3.20",
|
|
80
|
+
"@things-factory/integration-accounting": "^4.3.20",
|
|
81
|
+
"@things-factory/integration-fulfillment": "^4.3.20",
|
|
82
|
+
"@things-factory/integration-lmd": "^4.3.20",
|
|
83
|
+
"@things-factory/integration-marketplace": "^4.3.20",
|
|
84
|
+
"@things-factory/integration-pos": "^4.3.20",
|
|
85
|
+
"@things-factory/integration-sellercraft": "^4.3.20",
|
|
86
|
+
"@things-factory/integration-sftp": "^4.3.20",
|
|
87
|
+
"@things-factory/lite-menu": "^4.3.20",
|
|
88
|
+
"@things-factory/more-ui": "^4.3.20",
|
|
89
|
+
"@things-factory/notification": "^4.3.20",
|
|
90
|
+
"@things-factory/pdf": "^4.3.20",
|
|
91
|
+
"@things-factory/product-ui": "^4.3.20",
|
|
92
|
+
"@things-factory/resource-ui": "^4.3.20",
|
|
93
|
+
"@things-factory/sales-base": "^4.3.20",
|
|
94
|
+
"@things-factory/scene-data-transform": "^4.3.20",
|
|
95
|
+
"@things-factory/scene-excel": "^4.3.20",
|
|
96
|
+
"@things-factory/scene-firebase": "^4.3.20",
|
|
97
|
+
"@things-factory/scene-form": "^4.3.20",
|
|
98
|
+
"@things-factory/scene-google-map": "^4.3.20",
|
|
99
|
+
"@things-factory/scene-graphql": "^4.3.20",
|
|
100
|
+
"@things-factory/scene-label": "^4.3.20",
|
|
101
|
+
"@things-factory/scene-marker": "^4.3.20",
|
|
102
|
+
"@things-factory/scene-mqtt": "^4.3.20",
|
|
103
|
+
"@things-factory/scene-restful": "^4.3.20",
|
|
104
|
+
"@things-factory/scene-visualizer": "^4.3.20",
|
|
105
|
+
"@things-factory/setting-ui": "^4.3.20",
|
|
106
|
+
"@things-factory/shell": "^4.3.20",
|
|
107
|
+
"@things-factory/system-ui": "^4.3.20",
|
|
108
|
+
"@things-factory/warehouse-base": "^4.3.20",
|
|
109
|
+
"@things-factory/worksheet-base": "^4.3.20",
|
|
110
110
|
"koa2-swagger-ui": "^5.0.2",
|
|
111
111
|
"swagger-jsdoc": "^5.0.0",
|
|
112
112
|
"yamljs": "^0.3.0"
|
|
113
113
|
},
|
|
114
114
|
"devDependencies": {
|
|
115
|
-
"@things-factory/builder": "^4.3.
|
|
115
|
+
"@things-factory/builder": "^4.3.20"
|
|
116
116
|
},
|
|
117
117
|
"resolutions": {
|
|
118
118
|
"core-js": "^3.16.0"
|
|
119
119
|
},
|
|
120
|
-
"gitHead": "
|
|
120
|
+
"gitHead": "2f86da10f36746b46428bc7408b586d0ec8aa793"
|
|
121
121
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { EntityManager } from 'typeorm'
|
|
1
|
+
import { EntityManager, getRepository } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { Bizplace } from '@things-factory/biz-base'
|
|
4
4
|
import { logger } from '@things-factory/env'
|
|
5
5
|
import { FulfillmentAPI, FulfillmentCenter } from '@things-factory/integration-fulfillment'
|
|
6
6
|
import { Sellercraft, SellercraftAPI } from '@things-factory/integration-sellercraft'
|
|
7
7
|
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
8
|
+
import { WarehouseBizplaceOnhandInventory } from '@things-factory/worksheet-base'
|
|
8
9
|
import { Domain } from '@things-factory/shell'
|
|
9
10
|
|
|
10
11
|
export const syncProductsToSellercraftResolver = {
|
|
@@ -19,69 +20,90 @@ export const syncProductsToSellercraftResolver = {
|
|
|
19
20
|
try {
|
|
20
21
|
const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
|
|
21
22
|
|
|
22
|
-
let page: number =
|
|
23
|
+
let page: number = 0
|
|
23
24
|
let hasMorePage: boolean = true
|
|
24
25
|
const limit: number = 50
|
|
25
26
|
|
|
26
|
-
const sellercraft: Sellercraft = await tx
|
|
27
|
-
.getRepository(Sellercraft)
|
|
28
|
-
.findOne({ where: { id: sellercraftId }, relations: ['domain'] })
|
|
27
|
+
const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({ where: { id: sellercraftId }, relations: ['domain'] })
|
|
29
28
|
const customerDomain: Domain = sellercraft.domain
|
|
30
29
|
const fulfilmentCenter: FulfillmentCenter = await FulfillmentAPI.getFulfillmentCenter(fulfillmentCenterId)
|
|
31
30
|
const customerBizplace: Bizplace = await tx.getRepository(Bizplace).findOne({ where: { domain: customerDomain } })
|
|
32
31
|
|
|
32
|
+
await tx.query(`
|
|
33
|
+
create temp table temp_warehouse_product_inventory ON COMMIT DROP as (
|
|
34
|
+
select p.id, p.sku as product_sku, p.name as product_name, p.description as product_description,
|
|
35
|
+
pd.gtin, pd.uom, pd.packing_size, coalesce(pd.nett_weight, 0) as nett_weight, pd.width, pd."depth", pd.height,
|
|
36
|
+
coalesce(src.qty, 0) as available_qty, coalesce(src.qty - src."remainQty", 0) as reserved_qty, coalesce(src."remainQty",0) as remain_qty
|
|
37
|
+
from bizplaces b
|
|
38
|
+
inner join companies c on c.id = b.company_id
|
|
39
|
+
inner join domains d on d.id = c.domain_id
|
|
40
|
+
inner join products p on p.domain_id = b.domain_id or p.domain_id = c.domain_id
|
|
41
|
+
inner join product_details pd on pd.product_id = p.id
|
|
42
|
+
left join (
|
|
43
|
+
select wboi.* from warehouse_bizplace_onhand_inventories wboi
|
|
44
|
+
inner join domains d on d.id = wboi."domainId"
|
|
45
|
+
inner join fulfillment_centers fc on d.subdomain = fc.center_id
|
|
46
|
+
where fc.id= $1
|
|
47
|
+
and wboi."bizplaceId" = $2 and "groupType" = 'SINGLE'
|
|
48
|
+
) src on src."productId" = pd."product_id"
|
|
49
|
+
and src."packingType" = pd."packing_type"
|
|
50
|
+
and src."packingSize" = pd."packing_size"
|
|
51
|
+
and src."uom" = pd."uom"
|
|
52
|
+
where b.id = $2
|
|
53
|
+
)
|
|
54
|
+
`, [fulfilmentCenter.id, customerBizplace.id])
|
|
55
|
+
|
|
56
|
+
let total = await tx.query(`
|
|
57
|
+
select count(*) from temp_warehouse_product_inventory
|
|
58
|
+
`)
|
|
59
|
+
|
|
33
60
|
while (hasMorePage) {
|
|
61
|
+
hasMorePage = false
|
|
34
62
|
try {
|
|
35
|
-
const { items, total } = await FulfillmentAPI.getInventoryProductGroupOpenAPI(fulfilmentCenter, {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
})
|
|
63
|
+
// const { items, total } = await FulfillmentAPI.getInventoryProductGroupOpenAPI(fulfilmentCenter, {
|
|
64
|
+
// warehouseId: customerBizplace.id,
|
|
65
|
+
// paginationEntriesPerPage: limit,
|
|
66
|
+
// paginationOffset: page
|
|
67
|
+
// })
|
|
68
|
+
|
|
69
|
+
const items = await tx.query(`
|
|
70
|
+
select * from temp_warehouse_product_inventory limit $1 offset $2
|
|
71
|
+
`, [limit, page * limit])
|
|
40
72
|
|
|
41
73
|
let sellercraftInv: any[] = []
|
|
42
74
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
quantity_reserved: item.totalLockedQty * packingSize,
|
|
61
|
-
unit_of_measure: 'EA'
|
|
62
|
-
},
|
|
63
|
-
package_weight_gm: defaultProductDetail.nettWeight < 1 ? 1 : defaultProductDetail.nettWeight,
|
|
64
|
-
package_dimensions: {
|
|
65
|
-
length_mm: defaultProductDetail.depth < 1 ? 1 : defaultProductDetail.depth,
|
|
66
|
-
width_mm: defaultProductDetail.width < 1 ? 1 : defaultProductDetail.width,
|
|
67
|
-
height_mm: defaultProductDetail.height < 1 ? 1 : defaultProductDetail.height
|
|
68
|
-
}
|
|
69
|
-
})
|
|
75
|
+
items.map(async item => {
|
|
76
|
+
let packingSize: number = 1
|
|
77
|
+
|
|
78
|
+
sellercraftInv.push({
|
|
79
|
+
sku: item.product_sku,
|
|
80
|
+
gtin: item.gtin,
|
|
81
|
+
stock: {
|
|
82
|
+
quantity_total: item.available_qty * packingSize < 0 ? 0 : item.available_qty * packingSize,
|
|
83
|
+
quantity_reserved: item.reserved_qty * packingSize < 0 ? 0 : item.reserved_qty * packingSize,
|
|
84
|
+
unit_of_measure: 'EA'
|
|
85
|
+
},
|
|
86
|
+
package_weight_gm: item.nett_weight <= 0 ? 1 : item.nett_weight,
|
|
87
|
+
package_dimensions: {
|
|
88
|
+
length_mm: item.depth <= 0 ? 1 : item.depth,
|
|
89
|
+
width_mm: item.width <= 0 ? 1 : item.width,
|
|
90
|
+
height_mm: item.height <= 0 ? 1 : item.height
|
|
91
|
+
}
|
|
70
92
|
})
|
|
71
|
-
)
|
|
93
|
+
})
|
|
72
94
|
|
|
73
95
|
const delay = (ms: number) => {
|
|
74
96
|
return new Promise(resolve => setTimeout(resolve, ms))
|
|
75
97
|
}
|
|
76
98
|
|
|
77
|
-
await delay(
|
|
99
|
+
await delay(500)
|
|
78
100
|
|
|
79
101
|
await SellercraftAPI.updateProduct(sellercraft, { context, accountId: sellercraft.accountId, sellercraftInv })
|
|
80
102
|
|
|
81
|
-
|
|
82
|
-
hasMorePage =
|
|
103
|
+
page++
|
|
104
|
+
hasMorePage = (total[0]?.count || 0) > (page * limit)
|
|
83
105
|
} catch (e) {
|
|
84
|
-
logger.error(`syncProductsToSellercraftResolver
|
|
106
|
+
logger.error(`[syncProductsToSellercraftResolver] sellercraftID:${sellercraftId} fulfillmentCenterId:${fulfillmentCenterId} page:${page} - ${e}`)
|
|
85
107
|
}
|
|
86
108
|
}
|
|
87
109
|
} catch (e) {
|