idosell 0.4.9 → 0.4.12

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.
@@ -0,0 +1,29 @@
1
+ import type { SearchProductsResponse } from "./responses.d.ts"
2
+
3
+ export enum ProductQuantityKey {
4
+ ProductSizeQuantityOwnStock = "productSizeQuantityOwnStock",
5
+ ProductSizeQuantityOutsideStock = "productSizeQuantityOutsideStock",
6
+ ProductSizeQuantityAllStocks = "productSizeQuantityAllStocks",
7
+ ProductStocksQuantities = "productStocksQuantities",
8
+ ProductOrdersUnfinishedQuantities = "productOrdersUnfinishedQuantities",
9
+ ProductSizesDeliveries = "productSizesDeliveries",
10
+ ProductSizesDispositionsInAuctions = "productSizesDispositionsInAuctions",
11
+ }
12
+
13
+ export type IdosellProduct = SearchProductsResponse['results'][0];
14
+
15
+ export type GetIaICodeFunction = (productId: number|string, sizeId: string) => string;
16
+
17
+ export type SumProductQuantitiesFunction = (productStocksData: IdosellProduct['productStocksData'], stockType?: ProductQuantityKey) => number;
18
+
19
+ export type MapSizeQuantitesFunction = (product: IdosellProduct, stockType?: ProductQuantityKey) => Record<string,number>;
20
+
21
+ export type MapProductCodesFunction = (product: IdosellProduct, codeType?: 'productSizeCodeExternal'|'productSizeCodeProducer'|'sizePanelName') => Record<string,string>;
22
+
23
+ declare const _default: {
24
+ getIaiCode: GetIaICodeFunction;
25
+ sumProductQuantities: SumProductQuantitiesFunction;
26
+ mapSizeQuantites: MapSizeQuantitesFunction;
27
+ mapProductCodes: MapProductCodesFunction;
28
+ };
29
+ export default _default;
package/dist/utils.js ADDED
@@ -0,0 +1,96 @@
1
+ export var ProductQuantityKey;
2
+ (function (ProductQuantityKey) {
3
+ ProductQuantityKey["ProductSizeQuantityOwnStock"] = "productSizeQuantityOwnStock";
4
+ ProductQuantityKey["ProductSizeQuantityOutsideStock"] = "productSizeQuantityOutsideStock";
5
+ ProductQuantityKey["ProductSizeQuantityAllStocks"] = "productSizeQuantityAllStocks";
6
+ ProductQuantityKey["ProductStocksQuantities"] = "productStocksQuantities";
7
+ ProductQuantityKey["ProductOrdersUnfinishedQuantities"] = "productOrdersUnfinishedQuantities";
8
+ ProductQuantityKey["ProductSizesDeliveries"] = "productSizesDeliveries";
9
+ ProductQuantityKey["ProductSizesDispositionsInAuctions"] = "productSizesDispositionsInAuctions";
10
+ })(ProductQuantityKey || (ProductQuantityKey = {}));
11
+ const productQuantityPathMap = {
12
+ // ----- Product Dispositions -----
13
+ [ProductQuantityKey.ProductSizeQuantityOwnStock]: ["productSizesDispositions", "productSizesDispositionsInSales", "productSizeQuantityOwnStock"],
14
+ [ProductQuantityKey.ProductSizeQuantityOutsideStock]: ["productSizesDispositions", "productSizesDispositionsInSales", "productSizeQuantityOutsideStock"],
15
+ [ProductQuantityKey.ProductSizeQuantityAllStocks]: ["productSizesDispositions", "productSizesDispositionsInSales", "productSizeQuantityAllStocks"],
16
+ [ProductQuantityKey.ProductSizesDispositionsInAuctions]: ["productSizesDispositions", "productSizesDispositionsInAuctions", "productSizeQuantity"],
17
+ // ----- Stocks & related quantities -----
18
+ [ProductQuantityKey.ProductStocksQuantities]: ["productStocksQuantities", "productSizeQuantity"],
19
+ [ProductQuantityKey.ProductOrdersUnfinishedQuantities]: ["productOrdersUnfinishedQuantities", "productSizeQuantity"],
20
+ [ProductQuantityKey.ProductSizesDeliveries]: ["productSizesDeliveries", "productSizeQuantity"],
21
+ };
22
+ const getProductSizeArrayNode = (productStocksData, key) => {
23
+ const pathNode = productQuantityPathMap[key];
24
+ if (!pathNode)
25
+ throw new Error("Invalid stock type " + key);
26
+ const path = pathNode.slice(0, -1);
27
+ const node = pathNode[pathNode.length - 1];
28
+ const arr = getProductSizeArray(productStocksData, path);
29
+ return { arr, node };
30
+ };
31
+ const getProductSizeArray = (productStocksData, path) => {
32
+ let current = productStocksData;
33
+ for (const segment of path) {
34
+ if (current && typeof current === "object" && segment in current) {
35
+ current = current[segment];
36
+ }
37
+ else {
38
+ return [];
39
+ }
40
+ }
41
+ if (Array.isArray(current)) {
42
+ if (current.length && current[0]?.productSizesData) {
43
+ return current.flatMap((s) => s.productSizesData);
44
+ }
45
+ return current;
46
+ }
47
+ return [];
48
+ };
49
+ const sumProductQuantities = (productStocksData, stockType = ProductQuantityKey.ProductSizeQuantityOwnStock) => {
50
+ const { arr, node } = getProductSizeArrayNode(productStocksData, stockType);
51
+ return arr.reduce((total, item) => {
52
+ const value = item[node];
53
+ if (typeof value === 'number')
54
+ total += value;
55
+ return total;
56
+ }, 0);
57
+ };
58
+ const getIaiCode = (productId, sizeId) => {
59
+ return [productId, sizeId].join('-');
60
+ };
61
+ const mapSizeQuantites = (product, stockType = ProductQuantityKey.ProductSizeQuantityOwnStock) => {
62
+ const obj = {};
63
+ if (!product.productStocksData)
64
+ return obj;
65
+ const { arr, node } = getProductSizeArrayNode(product.productStocksData, stockType);
66
+ for (const item of arr) {
67
+ const value = item[node];
68
+ if (typeof value !== 'number')
69
+ continue;
70
+ const index = getIaiCode(product.productId, item.sizeId);
71
+ if (!obj[index])
72
+ obj[index] = value;
73
+ else
74
+ obj[index] += value;
75
+ }
76
+ return obj;
77
+ };
78
+ const mapProductCodes = (product, codeType = 'productSizeCodeProducer') => {
79
+ const obj = {};
80
+ if (product.productSizesAttributes) {
81
+ for (const size of product.productSizesAttributes) {
82
+ const code = size[codeType];
83
+ if (!code)
84
+ continue;
85
+ const sku = getIaiCode(product.productId, size.sizeId);
86
+ obj[sku] = code;
87
+ }
88
+ }
89
+ return obj;
90
+ };
91
+ export default {
92
+ getIaiCode,
93
+ sumProductQuantities,
94
+ mapSizeQuantites,
95
+ mapProductCodes
96
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "idosell",
3
- "version": "0.4.9",
3
+ "version": "0.4.12",
4
4
  "description": "Idosell 3 REST connector",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/gateways.d.ts",
@@ -4,4 +4,14 @@ import { expect, test } from "vitest"
4
4
  test("postPackagesLabelsEventType", () => {
5
5
  const params = idosell().postPackagesLabels.eventId(15).eventType("order").checkParams();
6
6
  expect(params).toEqual({"eventId":15,"eventType":"order"});
7
+ })
8
+
9
+ test("postPackagesLabelsOrderSn", () => {
10
+ const params = idosell().postPackagesLabels.orderSn(39).checkParams();
11
+ expect(params).toEqual({"eventId":39,"eventType":"order"});
12
+ })
13
+
14
+ test("postPackagesLabelsSize", () => {
15
+ const params = idosell().postPackagesLabels.orderSn(39).size("small").checkParams();
16
+ expect(params).toEqual({"eventId":39,"eventType":"order","parcelParameters":[{"id":"defaultParcelGauge","value":"small"}]});
7
17
  })