@things-factory/operato-hub 4.3.80-alpha.2 → 4.3.80-alpha.5
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/auto-update-all-marketplace-product-variation-quantity.js +149 -0
- package/dist-server/graphql/resolvers/synchronization/auto-update-all-marketplace-product-variation-quantity.js.map +1 -0
- package/dist-server/graphql/resolvers/synchronization/index.js +2 -1
- package/dist-server/graphql/resolvers/synchronization/index.js.map +1 -1
- package/dist-server/graphql/types/synchronization/index.js +1 -0
- package/dist-server/graphql/types/synchronization/index.js.map +1 -1
- package/package.json +54 -54
- package/server/graphql/resolvers/synchronization/auto-update-all-marketplace-product-variation-quantity.ts +180 -0
- package/server/graphql/resolvers/synchronization/index.ts +3 -1
- package/server/graphql/types/synchronization/index.ts +1 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.autoUpdateAllMarketplaceProductVariationQuantityResolver = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const env_1 = require("@things-factory/env");
|
|
6
|
+
const integration_fulfillment_1 = require("@things-factory/integration-fulfillment");
|
|
7
|
+
const integration_marketplace_1 = require("@things-factory/integration-marketplace");
|
|
8
|
+
const marketplace_base_1 = require("@things-factory/marketplace-base");
|
|
9
|
+
const product_base_1 = require("@things-factory/product-base");
|
|
10
|
+
const shell_1 = require("@things-factory/shell");
|
|
11
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
12
|
+
exports.autoUpdateAllMarketplaceProductVariationQuantityResolver = {
|
|
13
|
+
async autoUpdateAllMarketplaceProductVariationQuantity(_, { companyDomainId, warehouseId }, context) {
|
|
14
|
+
const companyDomain = await (0, typeorm_1.getRepository)(shell_1.Domain).findOne(companyDomainId);
|
|
15
|
+
const marketplaceStores = await (0, typeorm_1.getRepository)(integration_marketplace_1.MarketplaceStore).find({
|
|
16
|
+
where: { domain: companyDomain, status: 'ACTIVE' },
|
|
17
|
+
relations: ['marketplaceDistributors']
|
|
18
|
+
});
|
|
19
|
+
const fulfilmentCenter = await integration_fulfillment_1.FulfillmentAPI.getFulfillmentCenter(warehouseId);
|
|
20
|
+
const centerId = fulfilmentCenter.centerId;
|
|
21
|
+
const warehouseDomain = await (0, typeorm_1.getRepository)(shell_1.Domain).findOne({ where: { subdomain: centerId } });
|
|
22
|
+
let products = await (0, typeorm_1.getRepository)(product_base_1.Product).find({
|
|
23
|
+
where: { domain: companyDomain },
|
|
24
|
+
relations: ['productDetails']
|
|
25
|
+
});
|
|
26
|
+
let inventoryProducts = await Promise.all(products.map(async (product) => {
|
|
27
|
+
const productDetails = product.productDetails;
|
|
28
|
+
const defaultProductDetail = productDetails.filter(productDetail => productDetail.isDefault)[0];
|
|
29
|
+
let qb = await (0, typeorm_1.getRepository)(warehouse_base_1.Inventory).createQueryBuilder('inv');
|
|
30
|
+
qb.leftJoinAndSelect('inv.location', 'loc')
|
|
31
|
+
.andWhere('"inv"."domain_id" = :domainId')
|
|
32
|
+
.andWhere('"inv"."product_id" = :productId')
|
|
33
|
+
.andWhere('"inv"."status" != :status')
|
|
34
|
+
.andWhere('"loc"."type" NOT IN (:...locationTypes)')
|
|
35
|
+
.setParameters({
|
|
36
|
+
domainId: warehouseDomain.id,
|
|
37
|
+
productId: product.id,
|
|
38
|
+
status: warehouse_base_1.INVENTORY_STATUS.TERMINATED,
|
|
39
|
+
locationTypes: [warehouse_base_1.LOCATION_TYPE.QUARANTINE, warehouse_base_1.LOCATION_TYPE.RESERVE]
|
|
40
|
+
});
|
|
41
|
+
let inventories = await qb.getMany();
|
|
42
|
+
const inventoryQty = inventories.reduce((total, currentValue) => {
|
|
43
|
+
total += currentValue.qty;
|
|
44
|
+
return total;
|
|
45
|
+
}, 0);
|
|
46
|
+
const inventoryLockedQty = inventories.reduce((total, currentValue) => {
|
|
47
|
+
total += currentValue.lockedQty;
|
|
48
|
+
return total;
|
|
49
|
+
}, 0);
|
|
50
|
+
return {
|
|
51
|
+
product,
|
|
52
|
+
sku: product.sku,
|
|
53
|
+
name: product.name,
|
|
54
|
+
packingType: defaultProductDetail.packingType,
|
|
55
|
+
packingSize: defaultProductDetail.packingSize,
|
|
56
|
+
uom: defaultProductDetail.uom,
|
|
57
|
+
qty: inventoryQty - inventoryLockedQty
|
|
58
|
+
};
|
|
59
|
+
}));
|
|
60
|
+
await (0, typeorm_1.getConnection)().transaction(async (tx) => {
|
|
61
|
+
let bundleProductInventories = await (0, warehouse_base_1.getProductBundleInventory)(warehouseDomain, companyDomain, inventoryProducts, tx);
|
|
62
|
+
bundleProductInventories.map(bundleProductInventory => {
|
|
63
|
+
inventoryProducts.push(bundleProductInventory);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
for (let i = 0; i < marketplaceStores.length; i++) {
|
|
67
|
+
try {
|
|
68
|
+
const marketplaceStore = marketplaceStores[i];
|
|
69
|
+
const marketplaceSetting = await (0, typeorm_1.getRepository)(integration_marketplace_1.MarketplaceSetting).findOne({
|
|
70
|
+
where: { marketplaceStore, category: 'stock_allocation' }
|
|
71
|
+
});
|
|
72
|
+
for (let j = 0; j < inventoryProducts.length; j++) {
|
|
73
|
+
try {
|
|
74
|
+
await (0, typeorm_1.getConnection)().transaction(async (tx) => {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
const inventoryProduct = inventoryProducts[j];
|
|
77
|
+
const marketplaceProductVariations = await tx
|
|
78
|
+
.getRepository(marketplace_base_1.MarketplaceProductVariation)
|
|
79
|
+
.find({
|
|
80
|
+
where: { domain: companyDomain, sku: inventoryProduct.sku },
|
|
81
|
+
relations: ['marketplaceProduct', 'marketplaceProduct.marketplaceStore']
|
|
82
|
+
});
|
|
83
|
+
let storeProductVariations = marketplaceProductVariations.filter(productVariation => productVariation.marketplaceProduct.marketplaceStore.id === marketplaceStore.id);
|
|
84
|
+
let percentageValue = 100;
|
|
85
|
+
if (storeProductVariations) {
|
|
86
|
+
for (let k = 0; k < storeProductVariations.length; k++) {
|
|
87
|
+
let storeProductVariation = storeProductVariations[k];
|
|
88
|
+
if (marketplaceSetting) {
|
|
89
|
+
percentageValue = parseInt(marketplaceSetting.value);
|
|
90
|
+
}
|
|
91
|
+
let remainQty = Math.floor((inventoryProduct.qty - storeProductVariation.reserveQty) * (percentageValue / 100));
|
|
92
|
+
if (remainQty < 0)
|
|
93
|
+
remainQty = 0;
|
|
94
|
+
let productVariationLocationId = storeProductVariation === null || storeProductVariation === void 0 ? void 0 : storeProductVariation.locationId;
|
|
95
|
+
let adjustQty = remainQty;
|
|
96
|
+
if (marketplaceStore.platform === 'shopify') {
|
|
97
|
+
let locationIds = JSON.parse(productVariationLocationId);
|
|
98
|
+
adjustQty = adjustQty - storeProductVariation.qty;
|
|
99
|
+
if ((_a = locationIds[0]) === null || _a === void 0 ? void 0 : _a.location_id)
|
|
100
|
+
productVariationLocationId = locationIds[0].location_id;
|
|
101
|
+
}
|
|
102
|
+
let validMarketplaceDistributors = [];
|
|
103
|
+
if (marketplaceStore.marketplaceDistributors) {
|
|
104
|
+
validMarketplaceDistributors = marketplaceStore.marketplaceDistributors.filter(distributor => distributor.status === 'ACTIVE');
|
|
105
|
+
}
|
|
106
|
+
const hasVariation = (_b = storeProductVariation === null || storeProductVariation === void 0 ? void 0 : storeProductVariation.marketplaceProduct) === null || _b === void 0 ? void 0 : _b.hasVariation;
|
|
107
|
+
if (hasVariation) {
|
|
108
|
+
await integration_marketplace_1.StoreAPI.updateStoreProductVariationStock(marketplaceStore, [
|
|
109
|
+
{
|
|
110
|
+
itemId: storeProductVariation.marketplaceProduct.itemId,
|
|
111
|
+
variationId: storeProductVariation.variationId,
|
|
112
|
+
variationSku: storeProductVariation.variationSku,
|
|
113
|
+
qty: adjustQty,
|
|
114
|
+
locationId: productVariationLocationId,
|
|
115
|
+
inventoryItemId: storeProductVariation.inventoryItemId,
|
|
116
|
+
distributors: validMarketplaceDistributors
|
|
117
|
+
}
|
|
118
|
+
]);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
await integration_marketplace_1.StoreAPI.updateStoreProductStock(marketplaceStore, [
|
|
122
|
+
{
|
|
123
|
+
itemId: storeProductVariation.marketplaceProduct.itemId,
|
|
124
|
+
variationId: storeProductVariation.variationId,
|
|
125
|
+
variationSku: storeProductVariation.variationSku,
|
|
126
|
+
qty: adjustQty,
|
|
127
|
+
distributors: validMarketplaceDistributors
|
|
128
|
+
}
|
|
129
|
+
]);
|
|
130
|
+
}
|
|
131
|
+
storeProductVariation.qty = remainQty;
|
|
132
|
+
await tx.getRepository(marketplace_base_1.MarketplaceProductVariation).save(storeProductVariation);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
env_1.logger.error(`interface-with-hub[autoUpdateAllMarketplaceProductVariationQuantity]inventoryProducts: ${error}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
env_1.logger.error(`interface-with-hub[autoUpdateAllMarketplaceProductVariationQuantity]marketplaceStores: ${e}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=auto-update-all-marketplace-product-variation-quantity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-update-all-marketplace-product-variation-quantity.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/auto-update-all-marketplace-product-variation-quantity.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ const sync_products_from_account_1 = require("./sync-products-from-account");
|
|
|
10
10
|
const sync_products_to_account_1 = require("./sync-products-to-account");
|
|
11
11
|
const sync_products_to_sellercraft_1 = require("./sync-products-to-sellercraft");
|
|
12
12
|
const create_dat_shipments_1 = require("./create-dat-shipments");
|
|
13
|
+
const auto_update_all_marketplace_product_variation_quantity_1 = require("./auto-update-all-marketplace-product-variation-quantity");
|
|
13
14
|
exports.Query = Object.assign(Object.assign(Object.assign({}, fetch_sync_products_1.fetchSyncProductsResolver), fetch_sync_purchase_orders_1.fetchSyncPurchaseOrdersResolver), fetch_sync_invoices_1.fetchSyncInvoicesResolver);
|
|
14
|
-
exports.Mutation = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sync_products_to_sellercraft_1.syncProductsToSellercraftResolver), sync_products_from_account_1.syncProductsFromAccountResolver), sync_products_to_account_1.syncProductsToAccountResolver), sync_all_products_to_sellercraft_1.syncAllProductsToSellercraftResolver), sellercraft_pack_marketplace_order_1.sellercraftPackMarketplaceOrderResolver), create_dat_shipments_1.createDatShipments);
|
|
15
|
+
exports.Mutation = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, sync_products_to_sellercraft_1.syncProductsToSellercraftResolver), sync_products_from_account_1.syncProductsFromAccountResolver), sync_products_to_account_1.syncProductsToAccountResolver), sync_all_products_to_sellercraft_1.syncAllProductsToSellercraftResolver), sellercraft_pack_marketplace_order_1.sellercraftPackMarketplaceOrderResolver), create_dat_shipments_1.createDatShipments), auto_update_all_marketplace_product_variation_quantity_1.autoUpdateAllMarketplaceProductVariationQuantityResolver);
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/index.ts"],"names":[],"mappings":";;;AAAA,+DAAiE;AACjE,+DAAiE;AACjE,6EAA8E;AAC9E,6FAA8F;AAC9F,yFAAyF;AACzF,6EAA8E;AAC9E,yEAA0E;AAC1E,iFAAkF;AAClF,iEAA2D;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/synchronization/index.ts"],"names":[],"mappings":";;;AAAA,+DAAiE;AACjE,+DAAiE;AACjE,6EAA8E;AAC9E,6FAA8F;AAC9F,yFAAyF;AACzF,6EAA8E;AAC9E,yEAA0E;AAC1E,iFAAkF;AAClF,iEAA2D;AAC3D,qIAAmI;AAEtH,QAAA,KAAK,iDACb,+CAAyB,GACzB,4DAA+B,GAC/B,+CAAyB,EAC7B;AAEY,QAAA,QAAQ,yGAChB,gEAAiC,GACjC,4DAA+B,GAC/B,wDAA6B,GAC7B,uEAAoC,GACpC,4EAAuC,GACvC,yCAAkB,GAClB,iHAAwD,EAC5D"}
|
|
@@ -19,6 +19,7 @@ exports.Mutation = `
|
|
|
19
19
|
syncAllProductsToSellercraft: Boolean @transaction
|
|
20
20
|
sellercraftPackMarketplaceOrder: Boolean @transaction
|
|
21
21
|
createDatShipments: Boolean @transaction
|
|
22
|
+
autoUpdateAllMarketplaceProductVariationQuantity(companyDomainId: String, warehouseId: String): Boolean @transaction
|
|
22
23
|
`;
|
|
23
24
|
exports.Types = [
|
|
24
25
|
sync_product_set_1.SyncProductSet,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/synchronization/index.ts"],"names":[],"mappings":";;;AAAA,2DAAqD;AACrD,yDAAoE;AACpE,2DAAqD;AACrD,yDAAmD;AACnD,yEAAkE;AAClE,uEAAiF;AAEpE,QAAA,KAAK,GAAiB;;;;CAIlC,CAAA;AAEY,QAAA,QAAQ,GAAiB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/synchronization/index.ts"],"names":[],"mappings":";;;AAAA,2DAAqD;AACrD,yDAAoE;AACpE,2DAAqD;AACrD,yDAAmD;AACnD,yEAAkE;AAClE,uEAAiF;AAEpE,QAAA,KAAK,GAAiB;;;;CAIlC,CAAA;AAEY,QAAA,QAAQ,GAAiB;;;;;;;;CAQrC,CAAA;AAEY,QAAA,KAAK,GAAG;IACnB,iCAAc;IACd,mCAAe;IACf,8CAAoB;IACpB,gDAAqB;IACrB,GAAG,+BAAM;IACT,iCAAc;IACd,mCAAe;IACf,GAAG,wBAAM;CACV,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/operato-hub",
|
|
3
|
-
"version": "4.3.80-alpha.
|
|
3
|
+
"version": "4.3.80-alpha.5",
|
|
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.8",
|
|
57
57
|
"@operato/scene-table": "^0.1.8",
|
|
58
58
|
"@operato/scene-wheel-sorter": "^0.1.8",
|
|
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.80-alpha.
|
|
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.80-alpha.
|
|
92
|
-
"@things-factory/resource-ui": "^4.3.
|
|
93
|
-
"@things-factory/sales-base": "^4.3.80-alpha.
|
|
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.80-alpha.
|
|
109
|
-
"@things-factory/worksheet-base": "^4.3.80-alpha.
|
|
59
|
+
"@things-factory/api": "^4.3.80-alpha.5",
|
|
60
|
+
"@things-factory/apptool-ui": "^4.3.80-alpha.5",
|
|
61
|
+
"@things-factory/attachment-base": "^4.3.80-alpha.5",
|
|
62
|
+
"@things-factory/auth-base": "^4.3.80-alpha.5",
|
|
63
|
+
"@things-factory/auth-ui": "^4.3.80-alpha.5",
|
|
64
|
+
"@things-factory/biz-base": "^4.3.80-alpha.5",
|
|
65
|
+
"@things-factory/biz-ui": "^4.3.80-alpha.5",
|
|
66
|
+
"@things-factory/board-service": "^4.3.80-alpha.5",
|
|
67
|
+
"@things-factory/board-ui": "^4.3.80-alpha.5",
|
|
68
|
+
"@things-factory/code-ui": "^4.3.80-alpha.5",
|
|
69
|
+
"@things-factory/component-ui": "^4.3.80-alpha.5",
|
|
70
|
+
"@things-factory/context-ui": "^4.3.80-alpha.5",
|
|
71
|
+
"@things-factory/document-template-ui": "^4.3.80-alpha.5",
|
|
72
|
+
"@things-factory/export-ui": "^4.3.80-alpha.5",
|
|
73
|
+
"@things-factory/export-ui-csv": "^4.3.80-alpha.5",
|
|
74
|
+
"@things-factory/export-ui-excel": "^4.3.80-alpha.5",
|
|
75
|
+
"@things-factory/grist-ui": "^4.3.80-alpha.5",
|
|
76
|
+
"@things-factory/help": "^4.3.80-alpha.5",
|
|
77
|
+
"@things-factory/i18n-base": "^4.3.80-alpha.5",
|
|
78
|
+
"@things-factory/import-ui": "^4.3.80-alpha.5",
|
|
79
|
+
"@things-factory/import-ui-excel": "^4.3.80-alpha.5",
|
|
80
|
+
"@things-factory/integration-accounting": "^4.3.80-alpha.5",
|
|
81
|
+
"@things-factory/integration-fulfillment": "^4.3.80-alpha.5",
|
|
82
|
+
"@things-factory/integration-lmd": "^4.3.80-alpha.5",
|
|
83
|
+
"@things-factory/integration-marketplace": "^4.3.80-alpha.5",
|
|
84
|
+
"@things-factory/integration-pos": "^4.3.80-alpha.5",
|
|
85
|
+
"@things-factory/integration-sellercraft": "^4.3.80-alpha.5",
|
|
86
|
+
"@things-factory/integration-sftp": "^4.3.80-alpha.5",
|
|
87
|
+
"@things-factory/lite-menu": "^4.3.80-alpha.5",
|
|
88
|
+
"@things-factory/more-ui": "^4.3.80-alpha.5",
|
|
89
|
+
"@things-factory/notification": "^4.3.80-alpha.5",
|
|
90
|
+
"@things-factory/pdf": "^4.3.80-alpha.5",
|
|
91
|
+
"@things-factory/product-ui": "^4.3.80-alpha.5",
|
|
92
|
+
"@things-factory/resource-ui": "^4.3.80-alpha.5",
|
|
93
|
+
"@things-factory/sales-base": "^4.3.80-alpha.5",
|
|
94
|
+
"@things-factory/scene-data-transform": "^4.3.80-alpha.5",
|
|
95
|
+
"@things-factory/scene-excel": "^4.3.80-alpha.5",
|
|
96
|
+
"@things-factory/scene-firebase": "^4.3.80-alpha.5",
|
|
97
|
+
"@things-factory/scene-form": "^4.3.80-alpha.5",
|
|
98
|
+
"@things-factory/scene-google-map": "^4.3.80-alpha.5",
|
|
99
|
+
"@things-factory/scene-graphql": "^4.3.80-alpha.5",
|
|
100
|
+
"@things-factory/scene-label": "^4.3.80-alpha.5",
|
|
101
|
+
"@things-factory/scene-marker": "^4.3.80-alpha.5",
|
|
102
|
+
"@things-factory/scene-mqtt": "^4.3.80-alpha.5",
|
|
103
|
+
"@things-factory/scene-restful": "^4.3.80-alpha.5",
|
|
104
|
+
"@things-factory/scene-visualizer": "^4.3.80-alpha.5",
|
|
105
|
+
"@things-factory/setting-ui": "^4.3.80-alpha.5",
|
|
106
|
+
"@things-factory/shell": "^4.3.80-alpha.5",
|
|
107
|
+
"@things-factory/system-ui": "^4.3.80-alpha.5",
|
|
108
|
+
"@things-factory/warehouse-base": "^4.3.80-alpha.5",
|
|
109
|
+
"@things-factory/worksheet-base": "^4.3.80-alpha.5",
|
|
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.80-alpha.5"
|
|
116
116
|
},
|
|
117
117
|
"resolutions": {
|
|
118
118
|
"core-js": "^3.16.0"
|
|
119
119
|
},
|
|
120
|
-
"gitHead": "
|
|
120
|
+
"gitHead": "62777e60c67b5a4628391261badd6b6f2ee0a7af"
|
|
121
121
|
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { getConnection, getRepository } from 'typeorm'
|
|
2
|
+
|
|
3
|
+
import { logger } from '@things-factory/env'
|
|
4
|
+
import { FulfillmentAPI } from '@things-factory/integration-fulfillment'
|
|
5
|
+
import { MarketplaceSetting, MarketplaceStore, StoreAPI } from '@things-factory/integration-marketplace'
|
|
6
|
+
import { MarketplaceProductVariation } from '@things-factory/marketplace-base'
|
|
7
|
+
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
8
|
+
import { Domain } from '@things-factory/shell'
|
|
9
|
+
import { getProductBundleInventory, Inventory, INVENTORY_STATUS, LOCATION_TYPE } from '@things-factory/warehouse-base'
|
|
10
|
+
|
|
11
|
+
export const autoUpdateAllMarketplaceProductVariationQuantityResolver = {
|
|
12
|
+
async autoUpdateAllMarketplaceProductVariationQuantity(_: any, { companyDomainId, warehouseId }, context: any) {
|
|
13
|
+
const companyDomain: Domain = await getRepository(Domain).findOne(companyDomainId)
|
|
14
|
+
|
|
15
|
+
const marketplaceStores: MarketplaceStore[] = await getRepository(MarketplaceStore).find({
|
|
16
|
+
where: { domain: companyDomain, status: 'ACTIVE' },
|
|
17
|
+
relations: ['marketplaceDistributors']
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
const fulfilmentCenter = await FulfillmentAPI.getFulfillmentCenter(warehouseId)
|
|
21
|
+
const centerId: string = fulfilmentCenter.centerId
|
|
22
|
+
const warehouseDomain: Domain = await getRepository(Domain).findOne({ where: { subdomain: centerId } })
|
|
23
|
+
|
|
24
|
+
let products: Product[] = await getRepository(Product).find({
|
|
25
|
+
where: { domain: companyDomain },
|
|
26
|
+
relations: ['productDetails']
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
let inventoryProducts: any[] = await Promise.all(
|
|
30
|
+
products.map(async product => {
|
|
31
|
+
const productDetails: ProductDetail[] = product.productDetails
|
|
32
|
+
const defaultProductDetail: ProductDetail = productDetails.filter(productDetail => productDetail.isDefault)[0]
|
|
33
|
+
|
|
34
|
+
let qb = await getRepository(Inventory).createQueryBuilder('inv')
|
|
35
|
+
qb.leftJoinAndSelect('inv.location', 'loc')
|
|
36
|
+
.andWhere('"inv"."domain_id" = :domainId')
|
|
37
|
+
.andWhere('"inv"."product_id" = :productId')
|
|
38
|
+
.andWhere('"inv"."status" != :status')
|
|
39
|
+
.andWhere('"loc"."type" NOT IN (:...locationTypes)')
|
|
40
|
+
.setParameters({
|
|
41
|
+
domainId: warehouseDomain.id,
|
|
42
|
+
productId: product.id,
|
|
43
|
+
status: INVENTORY_STATUS.TERMINATED,
|
|
44
|
+
locationTypes: [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
let inventories: Inventory[] = await qb.getMany()
|
|
48
|
+
|
|
49
|
+
const inventoryQty: number = inventories.reduce((total, currentValue) => {
|
|
50
|
+
total += currentValue.qty
|
|
51
|
+
return total
|
|
52
|
+
}, 0)
|
|
53
|
+
|
|
54
|
+
const inventoryLockedQty: number = inventories.reduce((total, currentValue) => {
|
|
55
|
+
total += currentValue.lockedQty
|
|
56
|
+
return total
|
|
57
|
+
}, 0)
|
|
58
|
+
|
|
59
|
+
return {
|
|
60
|
+
product,
|
|
61
|
+
sku: product.sku,
|
|
62
|
+
name: product.name,
|
|
63
|
+
packingType: defaultProductDetail.packingType,
|
|
64
|
+
packingSize: defaultProductDetail.packingSize,
|
|
65
|
+
uom: defaultProductDetail.uom,
|
|
66
|
+
qty: inventoryQty - inventoryLockedQty
|
|
67
|
+
}
|
|
68
|
+
})
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
await getConnection().transaction(async tx => {
|
|
72
|
+
let bundleProductInventories: any[] = await getProductBundleInventory(
|
|
73
|
+
warehouseDomain,
|
|
74
|
+
companyDomain,
|
|
75
|
+
inventoryProducts,
|
|
76
|
+
tx
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
bundleProductInventories.map(bundleProductInventory => {
|
|
80
|
+
inventoryProducts.push(bundleProductInventory)
|
|
81
|
+
})
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
for (let i = 0; i < marketplaceStores.length; i++) {
|
|
85
|
+
try {
|
|
86
|
+
const marketplaceStore: MarketplaceStore = marketplaceStores[i]
|
|
87
|
+
|
|
88
|
+
const marketplaceSetting: MarketplaceSetting = await getRepository(MarketplaceSetting).findOne({
|
|
89
|
+
where: { marketplaceStore, category: 'stock_allocation' }
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
for (let j = 0; j < inventoryProducts.length; j++) {
|
|
93
|
+
try {
|
|
94
|
+
await getConnection().transaction(async tx => {
|
|
95
|
+
const inventoryProduct = inventoryProducts[j]
|
|
96
|
+
const marketplaceProductVariations: MarketplaceProductVariation[] = await tx
|
|
97
|
+
.getRepository(MarketplaceProductVariation)
|
|
98
|
+
.find({
|
|
99
|
+
where: { domain: companyDomain, sku: inventoryProduct.sku },
|
|
100
|
+
relations: ['marketplaceProduct', 'marketplaceProduct.marketplaceStore']
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
let storeProductVariations: MarketplaceProductVariation[] = marketplaceProductVariations.filter(
|
|
104
|
+
productVariation => productVariation.marketplaceProduct.marketplaceStore.id === marketplaceStore.id
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
let percentageValue: number = 100
|
|
108
|
+
if (storeProductVariations) {
|
|
109
|
+
for (let k = 0; k < storeProductVariations.length; k++) {
|
|
110
|
+
let storeProductVariation: MarketplaceProductVariation = storeProductVariations[k]
|
|
111
|
+
if (marketplaceSetting) {
|
|
112
|
+
percentageValue = parseInt(marketplaceSetting.value)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
let remainQty: number = Math.floor(
|
|
116
|
+
(inventoryProduct.qty - storeProductVariation.reserveQty) * (percentageValue / 100)
|
|
117
|
+
)
|
|
118
|
+
if (remainQty < 0) remainQty = 0
|
|
119
|
+
|
|
120
|
+
let productVariationLocationId = storeProductVariation?.locationId
|
|
121
|
+
let adjustQty: number = remainQty
|
|
122
|
+
|
|
123
|
+
if (marketplaceStore.platform === 'shopify') {
|
|
124
|
+
let locationIds: any[] = JSON.parse(productVariationLocationId)
|
|
125
|
+
adjustQty = adjustQty - storeProductVariation.qty
|
|
126
|
+
if (locationIds[0]?.location_id) productVariationLocationId = locationIds[0].location_id
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
let validMarketplaceDistributors: any[] = []
|
|
130
|
+
if (marketplaceStore.marketplaceDistributors) {
|
|
131
|
+
validMarketplaceDistributors = marketplaceStore.marketplaceDistributors.filter(
|
|
132
|
+
distributor => distributor.status === 'ACTIVE'
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const hasVariation: boolean = storeProductVariation?.marketplaceProduct?.hasVariation
|
|
137
|
+
|
|
138
|
+
if (hasVariation) {
|
|
139
|
+
await StoreAPI.updateStoreProductVariationStock(marketplaceStore, [
|
|
140
|
+
{
|
|
141
|
+
itemId: storeProductVariation.marketplaceProduct.itemId,
|
|
142
|
+
variationId: storeProductVariation.variationId,
|
|
143
|
+
variationSku: storeProductVariation.variationSku,
|
|
144
|
+
qty: adjustQty,
|
|
145
|
+
locationId: productVariationLocationId,
|
|
146
|
+
inventoryItemId: storeProductVariation.inventoryItemId,
|
|
147
|
+
distributors: validMarketplaceDistributors
|
|
148
|
+
}
|
|
149
|
+
])
|
|
150
|
+
} else {
|
|
151
|
+
await StoreAPI.updateStoreProductStock(marketplaceStore, [
|
|
152
|
+
{
|
|
153
|
+
itemId: storeProductVariation.marketplaceProduct.itemId,
|
|
154
|
+
variationId: storeProductVariation.variationId,
|
|
155
|
+
variationSku: storeProductVariation.variationSku,
|
|
156
|
+
qty: adjustQty,
|
|
157
|
+
distributors: validMarketplaceDistributors
|
|
158
|
+
}
|
|
159
|
+
])
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
storeProductVariation.qty = remainQty
|
|
163
|
+
await tx.getRepository(MarketplaceProductVariation).save(storeProductVariation)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
})
|
|
167
|
+
} catch (error) {
|
|
168
|
+
logger.error(
|
|
169
|
+
`interface-with-hub[autoUpdateAllMarketplaceProductVariationQuantity]inventoryProducts: ${error}`
|
|
170
|
+
)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
} catch (e) {
|
|
174
|
+
logger.error(`interface-with-hub[autoUpdateAllMarketplaceProductVariationQuantity]marketplaceStores: ${e}`)
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return true
|
|
179
|
+
}
|
|
180
|
+
}
|
|
@@ -7,6 +7,7 @@ import { syncProductsFromAccountResolver } from './sync-products-from-account'
|
|
|
7
7
|
import { syncProductsToAccountResolver } from './sync-products-to-account'
|
|
8
8
|
import { syncProductsToSellercraftResolver } from './sync-products-to-sellercraft'
|
|
9
9
|
import { createDatShipments } from './create-dat-shipments'
|
|
10
|
+
import { autoUpdateAllMarketplaceProductVariationQuantityResolver } from './auto-update-all-marketplace-product-variation-quantity'
|
|
10
11
|
|
|
11
12
|
export const Query = {
|
|
12
13
|
...fetchSyncProductsResolver,
|
|
@@ -20,5 +21,6 @@ export const Mutation = {
|
|
|
20
21
|
...syncProductsToAccountResolver,
|
|
21
22
|
...syncAllProductsToSellercraftResolver,
|
|
22
23
|
...sellercraftPackMarketplaceOrderResolver,
|
|
23
|
-
...createDatShipments
|
|
24
|
+
...createDatShipments,
|
|
25
|
+
...autoUpdateAllMarketplaceProductVariationQuantityResolver
|
|
24
26
|
}
|
|
@@ -18,6 +18,7 @@ export const Mutation = /* GraphQL */ `
|
|
|
18
18
|
syncAllProductsToSellercraft: Boolean @transaction
|
|
19
19
|
sellercraftPackMarketplaceOrder: Boolean @transaction
|
|
20
20
|
createDatShipments: Boolean @transaction
|
|
21
|
+
autoUpdateAllMarketplaceProductVariationQuantity(companyDomainId: String, warehouseId: String): Boolean @transaction
|
|
21
22
|
`
|
|
22
23
|
|
|
23
24
|
export const Types = [
|