@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.
@@ -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 = 1;
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 integration_fulfillment_1.FulfillmentAPI.getInventoryProductGroupOpenAPI(fulfilmentCenter, {
25
- warehouseId: customerBizplace.id,
26
- paginationEntriesPerPage: limit,
27
- paginationOffset: page
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
- await Promise.all(items.map(async (item) => {
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.productSKU,
40
- gtin: (defaultProductDetail === null || defaultProductDetail === void 0 ? void 0 : defaultProductDetail.gtin) ? defaultProductDetail.gtin : '',
61
+ sku: item.product_sku,
62
+ gtin: item.gtin,
41
63
  stock: {
42
- quantity_total: item.totalQty * packingSize,
43
- quantity_reserved: item.totalLockedQty * packingSize,
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: defaultProductDetail.nettWeight < 1 ? 1 : defaultProductDetail.nettWeight,
68
+ package_weight_gm: item.nett_weight <= 0 ? 1 : item.nett_weight,
47
69
  package_dimensions: {
48
- length_mm: defaultProductDetail.depth < 1 ? 1 : defaultProductDetail.depth,
49
- width_mm: defaultProductDetail.width < 1 ? 1 : defaultProductDetail.width,
50
- height_mm: defaultProductDetail.height < 1 ? 1 : defaultProductDetail.height
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(5000);
79
+ await delay(500);
58
80
  await integration_sellercraft_1.SellercraftAPI.updateProduct(sellercraft, { context, accountId: sellercraft.accountId, sellercraftInv });
59
- if ((sellercraftInv === null || sellercraftInv === void 0 ? void 0 : sellercraftInv.length) != 0 && (sellercraftInv === null || sellercraftInv === void 0 ? void 0 : sellercraftInv.length) < total)
60
- page++;
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 - page ${page}: ${e}`);
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":"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"}
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.17",
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.14",
60
- "@things-factory/apptool-ui": "^4.3.14",
61
- "@things-factory/attachment-base": "^4.3.14",
62
- "@things-factory/auth-base": "^4.3.14",
63
- "@things-factory/auth-ui": "^4.3.14",
64
- "@things-factory/biz-base": "^4.3.14",
65
- "@things-factory/biz-ui": "^4.3.14",
66
- "@things-factory/board-service": "^4.3.14",
67
- "@things-factory/board-ui": "^4.3.14",
68
- "@things-factory/code-ui": "^4.3.14",
69
- "@things-factory/component-ui": "^4.3.14",
70
- "@things-factory/context-ui": "^4.3.14",
71
- "@things-factory/document-template-ui": "^4.3.14",
72
- "@things-factory/export-ui": "^4.3.14",
73
- "@things-factory/export-ui-csv": "^4.3.14",
74
- "@things-factory/export-ui-excel": "^4.3.14",
75
- "@things-factory/grist-ui": "^4.3.14",
76
- "@things-factory/help": "^4.3.14",
77
- "@things-factory/i18n-base": "^4.3.14",
78
- "@things-factory/import-ui": "^4.3.14",
79
- "@things-factory/import-ui-excel": "^4.3.14",
80
- "@things-factory/integration-accounting": "^4.3.15",
81
- "@things-factory/integration-fulfillment": "^4.3.15",
82
- "@things-factory/integration-lmd": "^4.3.15",
83
- "@things-factory/integration-marketplace": "^4.3.15",
84
- "@things-factory/integration-pos": "^4.3.15",
85
- "@things-factory/integration-sellercraft": "^4.3.15",
86
- "@things-factory/integration-sftp": "^4.3.15",
87
- "@things-factory/lite-menu": "^4.3.14",
88
- "@things-factory/more-ui": "^4.3.14",
89
- "@things-factory/notification": "^4.3.14",
90
- "@things-factory/pdf": "^4.3.14",
91
- "@things-factory/product-ui": "^4.3.14",
92
- "@things-factory/resource-ui": "^4.3.14",
93
- "@things-factory/sales-base": "^4.3.17",
94
- "@things-factory/scene-data-transform": "^4.3.14",
95
- "@things-factory/scene-excel": "^4.3.14",
96
- "@things-factory/scene-firebase": "^4.3.14",
97
- "@things-factory/scene-form": "^4.3.14",
98
- "@things-factory/scene-google-map": "^4.3.14",
99
- "@things-factory/scene-graphql": "^4.3.14",
100
- "@things-factory/scene-label": "^4.3.14",
101
- "@things-factory/scene-marker": "^4.3.14",
102
- "@things-factory/scene-mqtt": "^4.3.14",
103
- "@things-factory/scene-restful": "^4.3.14",
104
- "@things-factory/scene-visualizer": "^4.3.14",
105
- "@things-factory/setting-ui": "^4.3.14",
106
- "@things-factory/shell": "^4.3.14",
107
- "@things-factory/system-ui": "^4.3.14",
108
- "@things-factory/warehouse-base": "^4.3.16",
109
- "@things-factory/worksheet-base": "^4.3.17",
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.14"
115
+ "@things-factory/builder": "^4.3.20"
116
116
  },
117
117
  "resolutions": {
118
118
  "core-js": "^3.16.0"
119
119
  },
120
- "gitHead": "5347681c08bd9c85d0ecd390f2411f07d20c1a78"
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 = 1
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
- warehouseId: customerBizplace.id,
37
- paginationEntriesPerPage: limit,
38
- paginationOffset: page
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
- await Promise.all(
44
- items.map(async item => {
45
- const product: Product = await tx.getRepository(Product).findOne({
46
- where: { domain, sku: item.productSKU },
47
- relations: ['productDetails', 'productDetails.childProductDetail']
48
- })
49
-
50
- const productDetails: ProductDetail[] = product.productDetails
51
- const defaultProductDetail: ProductDetail = productDetails.find(productDetail => productDetail.isDefault)
52
-
53
- let packingSize: number = 1
54
-
55
- sellercraftInv.push({
56
- sku: item.productSKU,
57
- gtin: defaultProductDetail?.gtin ? defaultProductDetail.gtin : '',
58
- stock: {
59
- quantity_total: item.totalQty * packingSize,
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(5000)
99
+ await delay(500)
78
100
 
79
101
  await SellercraftAPI.updateProduct(sellercraft, { context, accountId: sellercraft.accountId, sellercraftInv })
80
102
 
81
- if (sellercraftInv?.length != 0 && sellercraftInv?.length < total) page++
82
- hasMorePage = Boolean(sellercraftInv?.length != 0 && sellercraftInv?.length < total)
103
+ page++
104
+ hasMorePage = (total[0]?.count || 0) > (page * limit)
83
105
  } catch (e) {
84
- logger.error(`syncProductsToSellercraftResolver - page ${page}: ${e}`)
106
+ logger.error(`[syncProductsToSellercraftResolver] sellercraftID:${sellercraftId} fulfillmentCenterId:${fulfillmentCenterId} page:${page} - ${e}`)
85
107
  }
86
108
  }
87
109
  } catch (e) {