@shushed/helpers 0.0.231-main-20260109162744 → 0.0.231
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/cjs/contracts/index.js +5 -1
- package/dist/cjs/contracts/product-draft.schema.json +159 -5
- package/dist/cjs/contracts/purchase-orderline.schema.json +135 -0
- package/dist/cjs/contracts/stock-movement.schema.json +144 -0
- package/dist/cjs/dist-dereferenced/index.js +5 -1
- package/dist/cjs/dist-dereferenced/messages/product-draft.js +1 -1
- package/dist/cjs/dist-dereferenced/product-draft.js +1 -1
- package/dist/cjs/dist-dereferenced/purchase-orderline.js +4 -0
- package/dist/cjs/dist-dereferenced/stock-movement.js +4 -0
- package/dist/cjs/dist-types/purchase-orderline.js +2 -0
- package/dist/cjs/dist-types/stock-movement.js +2 -0
- package/dist/cjs/src-public/airtable.js +96 -59
- package/dist/cjs/src-public/centra.js +56 -5
- package/dist/cjs/src-public/env.js +1 -1
- package/dist/cjs/src-public/index.js +3 -1
- package/dist/cjs/src-public/pubsub.js +35 -16
- package/dist/cjs/src-public/runtime.js +48 -9
- package/dist/cjs/src-public/sitoo.js +349 -0
- package/dist/cjs/src-public/utils.js +3 -0
- package/dist/package.json +3 -2
- package/dist/types/contracts/index.d.ts +2 -0
- package/dist/types/dist-dereferenced/index.d.ts +2 -0
- package/dist/types/dist-dereferenced/messages/product-draft.d.ts +148 -1
- package/dist/types/dist-dereferenced/product-draft.d.ts +148 -1
- package/dist/types/dist-dereferenced/purchase-orderline.d.ts +114 -0
- package/dist/types/dist-dereferenced/stock-movement.d.ts +110 -0
- package/dist/types/dist-types/index.d.ts +2 -0
- package/dist/types/dist-types/messages/product-draft.d.ts +23 -4
- package/dist/types/dist-types/product-draft.d.ts +23 -4
- package/dist/types/dist-types/purchase-orderline.d.ts +31 -0
- package/dist/types/dist-types/stock-movement.d.ts +30 -0
- package/dist/types/src-public/airtable.d.ts +0 -9
- package/dist/types/src-public/centra.d.ts +3 -0
- package/dist/types/src-public/env.d.ts +1 -1
- package/dist/types/src-public/index.d.ts +1 -0
- package/dist/types/src-public/pubsub.d.ts +4 -7
- package/dist/types/src-public/runtime.d.ts +17 -4
- package/dist/types/src-public/sitoo.d.ts +254 -0
- package/dist/types/src-public/types.d.ts +6 -0
- package/dist/types/src-public/utils.d.ts +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SitooOrderItemType = exports.SitooPaymentState = exports.SitooOrderType = exports.SitooOrderState = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const lodash_groupby_1 = __importDefault(require("lodash.groupby"));
|
|
9
|
+
const env_1 = __importDefault(require("./env"));
|
|
10
|
+
const SITOO_TR_TYPE_MANUAL_IN = 10;
|
|
11
|
+
const SITOO_TR_TYPE_MANUAL_OUT = 20;
|
|
12
|
+
var SitooOrderState;
|
|
13
|
+
(function (SitooOrderState) {
|
|
14
|
+
SitooOrderState[SitooOrderState["Abandoned"] = -1] = "Abandoned";
|
|
15
|
+
SitooOrderState[SitooOrderState["Open"] = 0] = "Open";
|
|
16
|
+
SitooOrderState[SitooOrderState["Closed"] = 10] = "Closed";
|
|
17
|
+
SitooOrderState[SitooOrderState["Cancelled"] = 20] = "Cancelled";
|
|
18
|
+
})(SitooOrderState || (exports.SitooOrderState = SitooOrderState = {}));
|
|
19
|
+
var SitooOrderType;
|
|
20
|
+
(function (SitooOrderType) {
|
|
21
|
+
SitooOrderType[SitooOrderType["Order"] = 10] = "Order";
|
|
22
|
+
SitooOrderType[SitooOrderType["Booking"] = 100] = "Booking";
|
|
23
|
+
SitooOrderType[SitooOrderType["POSParked"] = 110] = "POSParked";
|
|
24
|
+
})(SitooOrderType || (exports.SitooOrderType = SitooOrderType = {}));
|
|
25
|
+
var SitooPaymentState;
|
|
26
|
+
(function (SitooPaymentState) {
|
|
27
|
+
SitooPaymentState[SitooPaymentState["None"] = 0] = "None";
|
|
28
|
+
SitooPaymentState[SitooPaymentState["Pending"] = 10] = "Pending";
|
|
29
|
+
SitooPaymentState[SitooPaymentState["Reserved"] = 15] = "Reserved";
|
|
30
|
+
SitooPaymentState[SitooPaymentState["Successful"] = 20] = "Successful";
|
|
31
|
+
SitooPaymentState[SitooPaymentState["Cancelled"] = 30] = "Cancelled";
|
|
32
|
+
SitooPaymentState[SitooPaymentState["Failed"] = 40] = "Failed";
|
|
33
|
+
})(SitooPaymentState || (exports.SitooPaymentState = SitooPaymentState = {}));
|
|
34
|
+
var SitooOrderItemType;
|
|
35
|
+
(function (SitooOrderItemType) {
|
|
36
|
+
SitooOrderItemType[SitooOrderItemType["Product"] = 10] = "Product";
|
|
37
|
+
SitooOrderItemType[SitooOrderItemType["Discount"] = 20] = "Discount";
|
|
38
|
+
})(SitooOrderItemType || (exports.SitooOrderItemType = SitooOrderItemType = {}));
|
|
39
|
+
const BATCH_SIZE = 900;
|
|
40
|
+
class SitooHelper extends env_1.default {
|
|
41
|
+
opts;
|
|
42
|
+
shaToken;
|
|
43
|
+
baseUrl;
|
|
44
|
+
siteId;
|
|
45
|
+
constructor(options, opts) {
|
|
46
|
+
super(options);
|
|
47
|
+
this.opts = opts;
|
|
48
|
+
this.shaToken = crypto_1.default.createHash('sha256').update(opts.accessToken).digest('hex').slice(0, 8);
|
|
49
|
+
this.baseUrl = opts.sitooBaseUrl.replace(/\/$/, '');
|
|
50
|
+
this.siteId = opts.sitooSiteId;
|
|
51
|
+
}
|
|
52
|
+
async getAllOrders(options) {
|
|
53
|
+
const allOrders = [];
|
|
54
|
+
const pageSize = 100;
|
|
55
|
+
let start = 0;
|
|
56
|
+
let hasMore = true;
|
|
57
|
+
while (hasMore) {
|
|
58
|
+
const queryParams = new URLSearchParams();
|
|
59
|
+
queryParams.set('num', pageSize.toString());
|
|
60
|
+
queryParams.set('start', start.toString());
|
|
61
|
+
queryParams.set('sort', 'orderid');
|
|
62
|
+
if (options?.fromTimestamp !== undefined) {
|
|
63
|
+
queryParams.set('orderdatefrom', options.fromTimestamp.toString());
|
|
64
|
+
}
|
|
65
|
+
if (options?.untilTimestamp !== undefined) {
|
|
66
|
+
queryParams.set('orderdateto', options.untilTimestamp.toString());
|
|
67
|
+
}
|
|
68
|
+
if (options?.filterByState !== undefined) {
|
|
69
|
+
queryParams.set('orderstate', options.filterByState.toString());
|
|
70
|
+
}
|
|
71
|
+
const url = `${this.baseUrl}/sites/${this.siteId}/orders.json?${queryParams.toString()}`;
|
|
72
|
+
const response = await fetch(url, {
|
|
73
|
+
method: 'GET',
|
|
74
|
+
headers: {
|
|
75
|
+
'Authorization': `Basic ${this.opts.accessToken}`,
|
|
76
|
+
'Content-Type': 'application/json',
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok) {
|
|
80
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
81
|
+
throw new Error(`Sitoo API error: ${response.status} ${response.statusText} - ${errorText}`);
|
|
82
|
+
}
|
|
83
|
+
const envelope = await response.json();
|
|
84
|
+
allOrders.push(...envelope.items);
|
|
85
|
+
if (envelope.items.length < pageSize) {
|
|
86
|
+
hasMore = false;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
start += envelope.items.length;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return allOrders;
|
|
93
|
+
}
|
|
94
|
+
async getSitooWarehouses() {
|
|
95
|
+
const url = `${this.baseUrl}/sites/${this.siteId}/warehouses.json`;
|
|
96
|
+
const response = await fetch(url, {
|
|
97
|
+
method: 'GET',
|
|
98
|
+
headers: {
|
|
99
|
+
'Authorization': `Basic ${this.opts.accessToken}`,
|
|
100
|
+
'Content-Type': 'application/json',
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
105
|
+
throw new Error(`Sitoo API error: ${response.status} ${response.statusText} - ${errorText}`);
|
|
106
|
+
}
|
|
107
|
+
const data = await response.json();
|
|
108
|
+
const nameToId = {};
|
|
109
|
+
const warehouses = {};
|
|
110
|
+
for (const warehouse of data.items) {
|
|
111
|
+
nameToId[warehouse.name] = warehouse.warehouseid;
|
|
112
|
+
warehouses[warehouse.warehouseid] = warehouse;
|
|
113
|
+
}
|
|
114
|
+
return { nameToId, warehouses };
|
|
115
|
+
}
|
|
116
|
+
async fetchWarehouseTransactionsWithFilter(params) {
|
|
117
|
+
const queryParams = new URLSearchParams();
|
|
118
|
+
queryParams.set('num', (params.num || 100).toString());
|
|
119
|
+
if (params.transactiontype !== undefined) {
|
|
120
|
+
queryParams.set('transactiontype', params.transactiontype.toString());
|
|
121
|
+
}
|
|
122
|
+
if (params.datecreatedfrom !== undefined) {
|
|
123
|
+
queryParams.set('datecreatedfrom', params.datecreatedfrom.toString());
|
|
124
|
+
}
|
|
125
|
+
if (params.start !== undefined) {
|
|
126
|
+
queryParams.set('start', params.start.toString());
|
|
127
|
+
}
|
|
128
|
+
queryParams.set('sort', params.ascending ? 'warehousetransactionid' : '-warehousetransactionid');
|
|
129
|
+
const url = `${this.baseUrl}/sites/${this.siteId}/warehouses/${params.warehouseid}/warehousetransactions.json?${queryParams.toString()}`;
|
|
130
|
+
const response = await fetch(url, {
|
|
131
|
+
method: 'GET',
|
|
132
|
+
headers: {
|
|
133
|
+
'Authorization': `Basic ${this.opts.accessToken}`,
|
|
134
|
+
'Content-Type': 'application/json',
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
139
|
+
throw new Error(`Sitoo API error: ${response.status} ${response.statusText} - ${errorText}`);
|
|
140
|
+
}
|
|
141
|
+
return await response.json();
|
|
142
|
+
}
|
|
143
|
+
async searchTransactionsInApi(warehouseId, entryNosToFind, transactionType, datecreatedfrom) {
|
|
144
|
+
const found = new Map();
|
|
145
|
+
let lowestTransactionId = undefined;
|
|
146
|
+
if (entryNosToFind.size === 0) {
|
|
147
|
+
return { found, lowestTransactionId };
|
|
148
|
+
}
|
|
149
|
+
let hasMore = true;
|
|
150
|
+
const pageSize = 100;
|
|
151
|
+
const currentDateFrom = datecreatedfrom;
|
|
152
|
+
let currentStart = 0;
|
|
153
|
+
while (hasMore && found.size < entryNosToFind.size) {
|
|
154
|
+
const envelope = await this.fetchWarehouseTransactionsWithFilter({
|
|
155
|
+
warehouseid: warehouseId,
|
|
156
|
+
datecreatedfrom: currentDateFrom,
|
|
157
|
+
transactiontype: transactionType,
|
|
158
|
+
ascending: false,
|
|
159
|
+
num: pageSize,
|
|
160
|
+
start: currentStart,
|
|
161
|
+
});
|
|
162
|
+
const transactions = envelope.items;
|
|
163
|
+
if (transactions.length === 0) {
|
|
164
|
+
hasMore = false;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
for (const transaction of transactions) {
|
|
168
|
+
if (lowestTransactionId === undefined || transaction.warehousetransactionid < lowestTransactionId) {
|
|
169
|
+
lowestTransactionId = transaction.warehousetransactionid;
|
|
170
|
+
}
|
|
171
|
+
if (transaction.description) {
|
|
172
|
+
for (const entryNo of entryNosToFind) {
|
|
173
|
+
if (!found.has(entryNo) && transaction.description.includes(`'${entryNo}'`)) {
|
|
174
|
+
found.set(entryNo, transaction);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (found.size === entryNosToFind.size) {
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
currentStart = currentStart ? currentStart + transactions.length : transactions.length;
|
|
183
|
+
if (transactions.length < pageSize) {
|
|
184
|
+
hasMore = false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return { found, lowestTransactionId };
|
|
188
|
+
}
|
|
189
|
+
async batchAddWarehouseTransactions(transactions) {
|
|
190
|
+
if (transactions.length === 0)
|
|
191
|
+
return [];
|
|
192
|
+
if (transactions.length > BATCH_SIZE) {
|
|
193
|
+
throw new Error(`Batch size exceeds maximum of ${BATCH_SIZE}. Got ${transactions.length}`);
|
|
194
|
+
}
|
|
195
|
+
const url = `${this.baseUrl}/sites/${this.siteId}/warehousetransactions.json`;
|
|
196
|
+
const response = await fetch(url, {
|
|
197
|
+
method: 'POST',
|
|
198
|
+
headers: {
|
|
199
|
+
'Authorization': `Basic ${this.opts.accessToken}`,
|
|
200
|
+
'Content-Type': 'application/json',
|
|
201
|
+
},
|
|
202
|
+
body: JSON.stringify(transactions),
|
|
203
|
+
});
|
|
204
|
+
if (!response.ok) {
|
|
205
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
206
|
+
throw new Error(`Sitoo API error: ${response.status} ${response.statusText} - ${errorText}`);
|
|
207
|
+
}
|
|
208
|
+
const result = await response.json();
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
async syncWarehouseTransactions(items, options) {
|
|
212
|
+
if (items.length === 0) {
|
|
213
|
+
return [];
|
|
214
|
+
}
|
|
215
|
+
const locationCodeToWarehouse = (await this.getSitooWarehouses()).nameToId;
|
|
216
|
+
const foundEntryNos = new Map();
|
|
217
|
+
const results = {};
|
|
218
|
+
const entryNoToIdx = {};
|
|
219
|
+
const entriesByWarehouseAndTransactionType = new Map();
|
|
220
|
+
for (let i = 0; i < items.length; i++) {
|
|
221
|
+
const entry = items[i];
|
|
222
|
+
const warehouseId = locationCodeToWarehouse[entry.location_code];
|
|
223
|
+
const transactionType = entry.type === 'transfer' ? (entry.quantity > 0 ? SITOO_TR_TYPE_MANUAL_IN : SITOO_TR_TYPE_MANUAL_OUT) : undefined;
|
|
224
|
+
entryNoToIdx[entry.entry_no] = i;
|
|
225
|
+
if (transactionType === undefined) {
|
|
226
|
+
results[i] = {
|
|
227
|
+
error: false,
|
|
228
|
+
message: `Not supported transaction type: ${entry.type}`,
|
|
229
|
+
};
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
if (warehouseId === undefined) {
|
|
233
|
+
results[i] = {
|
|
234
|
+
error: false,
|
|
235
|
+
message: `Not supported warehouse in Sitoo: ${entry.location_code}`,
|
|
236
|
+
};
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const key = `${warehouseId}-${transactionType}`;
|
|
240
|
+
if (!entriesByWarehouseAndTransactionType.has(key)) {
|
|
241
|
+
entriesByWarehouseAndTransactionType.set(key, []);
|
|
242
|
+
}
|
|
243
|
+
entriesByWarehouseAndTransactionType.get(key).push(entry);
|
|
244
|
+
}
|
|
245
|
+
for (const [_, warehouseEntries] of entriesByWarehouseAndTransactionType) {
|
|
246
|
+
if (warehouseEntries.length > 0) {
|
|
247
|
+
let datecreatedfrom = undefined;
|
|
248
|
+
for (const entry of warehouseEntries) {
|
|
249
|
+
const entryCreatedAt = Math.floor(new Date(entry.created_at).getTime() / 1000);
|
|
250
|
+
if (datecreatedfrom === undefined || entryCreatedAt < datecreatedfrom) {
|
|
251
|
+
datecreatedfrom = entryCreatedAt;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
const { found: apiFound } = await this.searchTransactionsInApi(locationCodeToWarehouse[warehouseEntries[0].location_code], new Set(warehouseEntries.map(e => e.entry_no.toString())), warehouseEntries[0].quantity > 0 ? SITOO_TR_TYPE_MANUAL_IN : SITOO_TR_TYPE_MANUAL_OUT, datecreatedfrom);
|
|
255
|
+
for (const [entryNo, transaction] of apiFound) {
|
|
256
|
+
foundEntryNos.set(entryNo, transaction.warehousetransactionid);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
for (const [entryNo, transactionId] of foundEntryNos) {
|
|
261
|
+
const idx = entryNoToIdx[entryNo];
|
|
262
|
+
results[idx] = {
|
|
263
|
+
error: false,
|
|
264
|
+
message: `Found transaction in Sitoo: ${transactionId} for the entry ${entryNo}`,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
const batches = [[]];
|
|
268
|
+
for (const [_, warehouseEntries] of entriesByWarehouseAndTransactionType) {
|
|
269
|
+
for (let i = 0; i < warehouseEntries.length; i += 1) {
|
|
270
|
+
if (!foundEntryNos.has(warehouseEntries[i].entry_no)) {
|
|
271
|
+
if ((batches[batches.length - 1].length + 1) >= BATCH_SIZE) {
|
|
272
|
+
batches.push([]);
|
|
273
|
+
}
|
|
274
|
+
batches[batches.length - 1].push(warehouseEntries[i]);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
const hasMissingEntries = batches[0].length > 0;
|
|
279
|
+
if (!options?.preview && hasMissingEntries) {
|
|
280
|
+
for (let i = 0; i < batches.length; i++) {
|
|
281
|
+
const warehouseEntities = (0, lodash_groupby_1.default)(batches[i], e => `${locationCodeToWarehouse[e.location_code]}-${e.quantity > 0 ? 'positive' : 'negative'}`);
|
|
282
|
+
const entryNosInBatches = {};
|
|
283
|
+
const transactionsToCreate = [];
|
|
284
|
+
for (const k in warehouseEntities) {
|
|
285
|
+
const entriesToCreate = warehouseEntities[k];
|
|
286
|
+
const warehouseId = locationCodeToWarehouse[entriesToCreate[0].location_code];
|
|
287
|
+
const entryType = entriesToCreate[0].quantity > 0 ? SITOO_TR_TYPE_MANUAL_IN : SITOO_TR_TYPE_MANUAL_OUT;
|
|
288
|
+
entryNosInBatches[transactionsToCreate.length] = entriesToCreate.map(e => e.entry_no);
|
|
289
|
+
transactionsToCreate.push({
|
|
290
|
+
warehouseid: warehouseId,
|
|
291
|
+
transactiontype: entryType,
|
|
292
|
+
description: entriesToCreate.map(e => `'${e.entry_no}'`).join(', '),
|
|
293
|
+
items: entriesToCreate.map(e => ({
|
|
294
|
+
sku: [e.style_id, e.colour_id, e.size_code].filter(Boolean).join('-'),
|
|
295
|
+
decimalquantity: `${e.quantity.toFixed(3)}`,
|
|
296
|
+
moneypricein: (((e.unit_cost?.value ?? 0) / 100) * e.quantity).toFixed(2),
|
|
297
|
+
})),
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
const createdIds = await this.batchAddWarehouseTransactions(transactionsToCreate);
|
|
302
|
+
for (let j = 0; j < transactionsToCreate.length; j++) {
|
|
303
|
+
const transactionId = createdIds[j];
|
|
304
|
+
for (let k = 0; k < entryNosInBatches[j].length; k += 1) {
|
|
305
|
+
const entryNo = entryNosInBatches[j][k];
|
|
306
|
+
const idx = entryNoToIdx[entryNo];
|
|
307
|
+
results[idx] = {
|
|
308
|
+
entryNo: entryNo,
|
|
309
|
+
transactionId: transactionId,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
catch (error) {
|
|
315
|
+
for (const entry of batches[i]) {
|
|
316
|
+
const idx = entryNoToIdx[entry.entry_no];
|
|
317
|
+
results[idx] = error;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
for (let i = 0; i < batches.length; i++) {
|
|
324
|
+
for (let j = 0; j < batches[i].length; j += 1) {
|
|
325
|
+
const entry = batches[i][j];
|
|
326
|
+
const idx = entryNoToIdx[entry.entry_no];
|
|
327
|
+
const warehouseId = locationCodeToWarehouse[entry.location_code];
|
|
328
|
+
const transactionType = entry.quantity > 0 ? SITOO_TR_TYPE_MANUAL_IN : SITOO_TR_TYPE_MANUAL_OUT;
|
|
329
|
+
results[idx] = {
|
|
330
|
+
error: false,
|
|
331
|
+
message: `In Preview Mode. ${entry.entry_no} scheduled to be created as transction type: ${transactionType} in the warehouse: ${warehouseId}. Batch: ${i}`
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
const resultsAsArray = [];
|
|
337
|
+
for (let i = 0; i < items.length; i += 1) {
|
|
338
|
+
const result = results[i];
|
|
339
|
+
if (!result) {
|
|
340
|
+
resultsAsArray.push(new Error(`${items[i].entry_no} got missed in processing`));
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
resultsAsArray.push(result);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return resultsAsArray;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
exports.default = SitooHelper;
|
|
@@ -264,6 +264,9 @@ function setRetryAfterVariable(value, options) {
|
|
|
264
264
|
global.functionsCache = global.functionsCache || {};
|
|
265
265
|
exports.FUNCTION_EXPR_ERROR = Symbol('function');
|
|
266
266
|
function createFunction(expression) {
|
|
267
|
+
if (typeof expression === 'function') {
|
|
268
|
+
return expression;
|
|
269
|
+
}
|
|
267
270
|
if (!global.functionsCache[expression]) {
|
|
268
271
|
global.functionsCache[expression] = new Function('symbol', 'payload', 'try { return ' + expression + ' } catch (err) { return symbol; }');
|
|
269
272
|
}
|
package/dist/package.json
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"description": "",
|
|
7
7
|
"dependencies": {
|
|
8
|
+
"@google-cloud/firestore": "^7.11.1",
|
|
8
9
|
"@hackylabs/deep-redact": "^2.2.1",
|
|
9
10
|
"ajv": "^8.17.1",
|
|
10
11
|
"ajv-formats": "^3.0.1",
|
|
@@ -12,15 +13,15 @@
|
|
|
12
13
|
"jose": "^6.0.11",
|
|
13
14
|
"lodash.chunk": "^4.2.0",
|
|
14
15
|
"lodash.clonedeep": "^4.5.0",
|
|
16
|
+
"lodash.groupby": "^4.6.0",
|
|
15
17
|
"lodash.isequal": "^4.5.0",
|
|
16
18
|
"lodash.omit": "^4.5.0",
|
|
17
19
|
"lodash.pick": "^4.4.0",
|
|
18
20
|
"mime-types": "^3.0.1",
|
|
19
21
|
"p-limit": "^7.1.1",
|
|
20
22
|
"rate-limiter-flexible": "^7.2.0",
|
|
21
|
-
"uuid": "^11.1.0",
|
|
22
23
|
"redis": "^5.6.0",
|
|
23
|
-
"
|
|
24
|
+
"uuid": "^11.1.0"
|
|
24
25
|
},
|
|
25
26
|
"files": [
|
|
26
27
|
"dist"
|
|
@@ -10,6 +10,8 @@ export { default as DevelopmentColour } from './development-colour.schema.json';
|
|
|
10
10
|
export { default as Asset } from './asset.schema.json';
|
|
11
11
|
export { default as CustomerSegment } from './customer-segment.schema.json';
|
|
12
12
|
export { default as MarketingPref } from './marketing-preferences.schema.json';
|
|
13
|
+
export { default as StockMovement } from './stock-movement.schema.json';
|
|
14
|
+
export { default as PurchaseOrderline } from './purchase-orderline.schema.json';
|
|
13
15
|
export * from './order';
|
|
14
16
|
export { default as Order } from './order.schema.json';
|
|
15
17
|
export * from './messages';
|
|
@@ -10,6 +10,8 @@ export { default as Price } from './price';
|
|
|
10
10
|
export { default as ProductCategory } from './product-category';
|
|
11
11
|
export { default as ProductDraft } from './product-draft';
|
|
12
12
|
export { default as Product } from './product';
|
|
13
|
+
export { default as PurchaseOrderline } from './purchase-orderline';
|
|
14
|
+
export { default as StockMovement } from './stock-movement';
|
|
13
15
|
export { default as Stock } from './stock';
|
|
14
16
|
export { default as Total } from './total';
|
|
15
17
|
export * as Messages from './messages';
|
|
@@ -16,6 +16,12 @@ declare const schema: {
|
|
|
16
16
|
readonly type: "string";
|
|
17
17
|
readonly pattern: "^[A-Z]{2}\\d{2}[A-Z]+?-\\d{6}$";
|
|
18
18
|
};
|
|
19
|
+
readonly centric_id: {
|
|
20
|
+
readonly type: readonly ["string"];
|
|
21
|
+
};
|
|
22
|
+
readonly style_centric_id: {
|
|
23
|
+
readonly type: readonly ["string"];
|
|
24
|
+
};
|
|
19
25
|
readonly product_id: {
|
|
20
26
|
readonly type: readonly ["string"];
|
|
21
27
|
};
|
|
@@ -23,12 +29,29 @@ declare const schema: {
|
|
|
23
29
|
readonly type: "string";
|
|
24
30
|
readonly format: "date-time";
|
|
25
31
|
};
|
|
32
|
+
readonly erp_settings: {
|
|
33
|
+
readonly type: readonly ["string", "null"];
|
|
34
|
+
};
|
|
35
|
+
readonly erp_created_at: {
|
|
36
|
+
readonly type: readonly ["string", "null"];
|
|
37
|
+
readonly format: "date-time";
|
|
38
|
+
};
|
|
39
|
+
readonly erp_export_settings: {
|
|
40
|
+
readonly type: "array";
|
|
41
|
+
readonly items: {
|
|
42
|
+
readonly type: "string";
|
|
43
|
+
readonly enum: readonly ["Exportable to Website", "Exportable to Next", "Available to sell"];
|
|
44
|
+
};
|
|
45
|
+
};
|
|
26
46
|
readonly is_colourway_approved: {
|
|
27
47
|
readonly type: "boolean";
|
|
28
48
|
};
|
|
29
49
|
readonly product_name: {
|
|
30
50
|
readonly type: readonly ["string", "null"];
|
|
31
51
|
};
|
|
52
|
+
readonly erp_name: {
|
|
53
|
+
readonly type: readonly ["string", "null"];
|
|
54
|
+
};
|
|
32
55
|
readonly colour_id: {
|
|
33
56
|
readonly type: "string";
|
|
34
57
|
};
|
|
@@ -76,6 +99,9 @@ declare const schema: {
|
|
|
76
99
|
};
|
|
77
100
|
};
|
|
78
101
|
};
|
|
102
|
+
readonly store_grade: {
|
|
103
|
+
readonly type: readonly ["string", "null"];
|
|
104
|
+
};
|
|
79
105
|
readonly drops: {
|
|
80
106
|
readonly type: "array";
|
|
81
107
|
readonly items: {
|
|
@@ -90,6 +116,22 @@ declare const schema: {
|
|
|
90
116
|
};
|
|
91
117
|
};
|
|
92
118
|
};
|
|
119
|
+
readonly direct_stock_buffer: {
|
|
120
|
+
readonly type: readonly ["number", "null"];
|
|
121
|
+
};
|
|
122
|
+
readonly qa_completed: {
|
|
123
|
+
readonly type: readonly ["boolean", "null"];
|
|
124
|
+
};
|
|
125
|
+
readonly warehouse_instructions: {
|
|
126
|
+
readonly type: readonly ["string", "null"];
|
|
127
|
+
};
|
|
128
|
+
readonly available_to_sell_from: {
|
|
129
|
+
readonly type: readonly ["string", "null"];
|
|
130
|
+
readonly format: "date-time";
|
|
131
|
+
};
|
|
132
|
+
readonly processing_time_warehouse: {
|
|
133
|
+
readonly type: readonly ["number", "null"];
|
|
134
|
+
};
|
|
93
135
|
readonly stock_type: {
|
|
94
136
|
readonly type: readonly ["string", "null"];
|
|
95
137
|
};
|
|
@@ -99,6 +141,9 @@ declare const schema: {
|
|
|
99
141
|
readonly packing_method: {
|
|
100
142
|
readonly type: readonly ["string", "null"];
|
|
101
143
|
};
|
|
144
|
+
readonly packaging_code: {
|
|
145
|
+
readonly type: readonly ["string", "null"];
|
|
146
|
+
};
|
|
102
147
|
readonly is_bought_in_product: {
|
|
103
148
|
readonly type: readonly ["boolean", "null"];
|
|
104
149
|
};
|
|
@@ -335,6 +380,16 @@ declare const schema: {
|
|
|
335
380
|
};
|
|
336
381
|
};
|
|
337
382
|
};
|
|
383
|
+
readonly preorder_options: {
|
|
384
|
+
readonly type: readonly ["string", "null"];
|
|
385
|
+
readonly enum: readonly ["Never", "Default", "Weeks", null];
|
|
386
|
+
};
|
|
387
|
+
readonly preorder_num_period: {
|
|
388
|
+
readonly type: readonly ["string", "null"];
|
|
389
|
+
};
|
|
390
|
+
readonly vat_posting_group_code: {
|
|
391
|
+
readonly type: readonly ["string", "null"];
|
|
392
|
+
};
|
|
338
393
|
readonly retail_price: {
|
|
339
394
|
readonly oneOf: readonly [{
|
|
340
395
|
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
@@ -520,6 +575,92 @@ declare const schema: {
|
|
|
520
575
|
readonly duty_rate: {
|
|
521
576
|
readonly type: readonly ["number", "null"];
|
|
522
577
|
};
|
|
578
|
+
readonly unit_cost: {
|
|
579
|
+
readonly oneOf: readonly [{
|
|
580
|
+
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
581
|
+
readonly title: "Money";
|
|
582
|
+
readonly type: "object";
|
|
583
|
+
readonly additionalProperties: false;
|
|
584
|
+
readonly properties: {
|
|
585
|
+
readonly value: {
|
|
586
|
+
readonly type: "integer";
|
|
587
|
+
readonly minimum: 0;
|
|
588
|
+
};
|
|
589
|
+
readonly decimal_places: {
|
|
590
|
+
readonly type: "integer";
|
|
591
|
+
readonly minimum: 0;
|
|
592
|
+
readonly maximum: 4;
|
|
593
|
+
};
|
|
594
|
+
readonly currency: {
|
|
595
|
+
readonly title: "Currency";
|
|
596
|
+
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
597
|
+
readonly type: "string";
|
|
598
|
+
readonly enum: readonly ["AFN", "ALL", "DZD", "USD", "EUR", "AOA", "XCD", "ARS", "AMD", "AWG", "AUD", "AZN", "BSD", "BHD", "BDT", "BBD", "BYN", "BZD", "XOF", "BMD", "BTN", "INR", "BOB", "BOV", "BAM", "BWP", "NOK", "BRL", "BND", "BGN", "BIF", "CVE", "KHR", "XAF", "CAD", "KYD", "CLF", "CLP", "CNY", "COP", "COU", "KMF", "CDF", "NZD", "CRC", "CUC", "CUP", "ANG", "CZK", "DKK", "DJF", "DOP", "EGP", "SVC", "ERN", "ETB", "FKP", "FJD", "XPF", "GMD", "GEL", "GHS", "GIP", "GTQ", "GBP", "GNF", "GYD", "HTG", "HNL", "HKD", "HUF", "ISK", "IDR", "XDR", "IRR", "IQD", "ILS", "JMD", "JPY", "JOD", "KZT", "KES", "KPW", "KRW", "KWD", "KGS", "LAK", "LBP", "LSL", "ZAR", "LRD", "LYD", "CHF", "MOP", "MGA", "MWK", "MYR", "MVR", "MRU", "MUR", "XUA", "MXN", "MXV", "MDL", "MNT", "MAD", "MZN", "MMK", "NAD", "NPR", "NIO", "NGN", "OMR", "PKR", "PAB", "PGK", "PYG", "PEN", "PHP", "PLN", "QAR", "MKD", "RON", "RUB", "RWF", "SHP", "WST", "STN", "SAR", "RSD", "SCR", "SLE", "SGD", "XSU", "SBD", "SOS", "SSP", "LKR", "SDG", "SRD", "SZL", "SEK", "CHE", "CHW", "SYP", "TWD", "TJS", "TZS", "THB", "TOP", "TTD", "TND", "TRY", "TMT", "UGX", "UAH", "AED", "USN", "UYI", "UYU", "UZS", "VUV", "VEF", "VED", "VND", "YER", "ZMW", "ZWL"];
|
|
599
|
+
};
|
|
600
|
+
readonly lcy_value: {
|
|
601
|
+
readonly type: "integer";
|
|
602
|
+
readonly minimum: 0;
|
|
603
|
+
};
|
|
604
|
+
readonly lcy_currency: {
|
|
605
|
+
readonly title: "LCY Currency";
|
|
606
|
+
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
607
|
+
readonly type: "string";
|
|
608
|
+
readonly enum: readonly ["AFN", "ALL", "DZD", "USD", "EUR", "AOA", "XCD", "ARS", "AMD", "AWG", "AUD", "AZN", "BSD", "BHD", "BDT", "BBD", "BYN", "BZD", "XOF", "BMD", "BTN", "INR", "BOB", "BOV", "BAM", "BWP", "NOK", "BRL", "BND", "BGN", "BIF", "CVE", "KHR", "XAF", "CAD", "KYD", "CLF", "CLP", "CNY", "COP", "COU", "KMF", "CDF", "NZD", "CRC", "CUC", "CUP", "ANG", "CZK", "DKK", "DJF", "DOP", "EGP", "SVC", "ERN", "ETB", "FKP", "FJD", "XPF", "GMD", "GEL", "GHS", "GIP", "GTQ", "GBP", "GNF", "GYD", "HTG", "HNL", "HKD", "HUF", "ISK", "IDR", "XDR", "IRR", "IQD", "ILS", "JMD", "JPY", "JOD", "KZT", "KES", "KPW", "KRW", "KWD", "KGS", "LAK", "LBP", "LSL", "ZAR", "LRD", "LYD", "CHF", "MOP", "MGA", "MWK", "MYR", "MVR", "MRU", "MUR", "XUA", "MXN", "MXV", "MDL", "MNT", "MAD", "MZN", "MMK", "NAD", "NPR", "NIO", "NGN", "OMR", "PKR", "PAB", "PGK", "PYG", "PEN", "PHP", "PLN", "QAR", "MKD", "RON", "RUB", "RWF", "SHP", "WST", "STN", "SAR", "RSD", "SCR", "SLE", "SGD", "XSU", "SBD", "SOS", "SSP", "LKR", "SDG", "SRD", "SZL", "SEK", "CHE", "CHW", "SYP", "TWD", "TJS", "TZS", "THB", "TOP", "TTD", "TND", "TRY", "TMT", "UGX", "UAH", "AED", "USN", "UYI", "UYU", "UZS", "VUV", "VEF", "VED", "VND", "YER", "ZMW", "ZWL"];
|
|
609
|
+
};
|
|
610
|
+
readonly lcy_decimal_places: {
|
|
611
|
+
readonly type: "integer";
|
|
612
|
+
readonly minimum: 0;
|
|
613
|
+
readonly maximum: 4;
|
|
614
|
+
};
|
|
615
|
+
};
|
|
616
|
+
readonly required: readonly ["value", "currency", "lcy_value", "lcy_currency", "decimal_places", "lcy_decimal_places"];
|
|
617
|
+
}, {
|
|
618
|
+
readonly type: "null";
|
|
619
|
+
}];
|
|
620
|
+
};
|
|
621
|
+
readonly last_direct_cost: {
|
|
622
|
+
readonly oneOf: readonly [{
|
|
623
|
+
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
624
|
+
readonly title: "Money";
|
|
625
|
+
readonly type: "object";
|
|
626
|
+
readonly additionalProperties: false;
|
|
627
|
+
readonly properties: {
|
|
628
|
+
readonly value: {
|
|
629
|
+
readonly type: "integer";
|
|
630
|
+
readonly minimum: 0;
|
|
631
|
+
};
|
|
632
|
+
readonly decimal_places: {
|
|
633
|
+
readonly type: "integer";
|
|
634
|
+
readonly minimum: 0;
|
|
635
|
+
readonly maximum: 4;
|
|
636
|
+
};
|
|
637
|
+
readonly currency: {
|
|
638
|
+
readonly title: "Currency";
|
|
639
|
+
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
640
|
+
readonly type: "string";
|
|
641
|
+
readonly enum: readonly ["AFN", "ALL", "DZD", "USD", "EUR", "AOA", "XCD", "ARS", "AMD", "AWG", "AUD", "AZN", "BSD", "BHD", "BDT", "BBD", "BYN", "BZD", "XOF", "BMD", "BTN", "INR", "BOB", "BOV", "BAM", "BWP", "NOK", "BRL", "BND", "BGN", "BIF", "CVE", "KHR", "XAF", "CAD", "KYD", "CLF", "CLP", "CNY", "COP", "COU", "KMF", "CDF", "NZD", "CRC", "CUC", "CUP", "ANG", "CZK", "DKK", "DJF", "DOP", "EGP", "SVC", "ERN", "ETB", "FKP", "FJD", "XPF", "GMD", "GEL", "GHS", "GIP", "GTQ", "GBP", "GNF", "GYD", "HTG", "HNL", "HKD", "HUF", "ISK", "IDR", "XDR", "IRR", "IQD", "ILS", "JMD", "JPY", "JOD", "KZT", "KES", "KPW", "KRW", "KWD", "KGS", "LAK", "LBP", "LSL", "ZAR", "LRD", "LYD", "CHF", "MOP", "MGA", "MWK", "MYR", "MVR", "MRU", "MUR", "XUA", "MXN", "MXV", "MDL", "MNT", "MAD", "MZN", "MMK", "NAD", "NPR", "NIO", "NGN", "OMR", "PKR", "PAB", "PGK", "PYG", "PEN", "PHP", "PLN", "QAR", "MKD", "RON", "RUB", "RWF", "SHP", "WST", "STN", "SAR", "RSD", "SCR", "SLE", "SGD", "XSU", "SBD", "SOS", "SSP", "LKR", "SDG", "SRD", "SZL", "SEK", "CHE", "CHW", "SYP", "TWD", "TJS", "TZS", "THB", "TOP", "TTD", "TND", "TRY", "TMT", "UGX", "UAH", "AED", "USN", "UYI", "UYU", "UZS", "VUV", "VEF", "VED", "VND", "YER", "ZMW", "ZWL"];
|
|
642
|
+
};
|
|
643
|
+
readonly lcy_value: {
|
|
644
|
+
readonly type: "integer";
|
|
645
|
+
readonly minimum: 0;
|
|
646
|
+
};
|
|
647
|
+
readonly lcy_currency: {
|
|
648
|
+
readonly title: "LCY Currency";
|
|
649
|
+
readonly $schema: "http://json-schema.org/draft-07/schema#";
|
|
650
|
+
readonly type: "string";
|
|
651
|
+
readonly enum: readonly ["AFN", "ALL", "DZD", "USD", "EUR", "AOA", "XCD", "ARS", "AMD", "AWG", "AUD", "AZN", "BSD", "BHD", "BDT", "BBD", "BYN", "BZD", "XOF", "BMD", "BTN", "INR", "BOB", "BOV", "BAM", "BWP", "NOK", "BRL", "BND", "BGN", "BIF", "CVE", "KHR", "XAF", "CAD", "KYD", "CLF", "CLP", "CNY", "COP", "COU", "KMF", "CDF", "NZD", "CRC", "CUC", "CUP", "ANG", "CZK", "DKK", "DJF", "DOP", "EGP", "SVC", "ERN", "ETB", "FKP", "FJD", "XPF", "GMD", "GEL", "GHS", "GIP", "GTQ", "GBP", "GNF", "GYD", "HTG", "HNL", "HKD", "HUF", "ISK", "IDR", "XDR", "IRR", "IQD", "ILS", "JMD", "JPY", "JOD", "KZT", "KES", "KPW", "KRW", "KWD", "KGS", "LAK", "LBP", "LSL", "ZAR", "LRD", "LYD", "CHF", "MOP", "MGA", "MWK", "MYR", "MVR", "MRU", "MUR", "XUA", "MXN", "MXV", "MDL", "MNT", "MAD", "MZN", "MMK", "NAD", "NPR", "NIO", "NGN", "OMR", "PKR", "PAB", "PGK", "PYG", "PEN", "PHP", "PLN", "QAR", "MKD", "RON", "RUB", "RWF", "SHP", "WST", "STN", "SAR", "RSD", "SCR", "SLE", "SGD", "XSU", "SBD", "SOS", "SSP", "LKR", "SDG", "SRD", "SZL", "SEK", "CHE", "CHW", "SYP", "TWD", "TJS", "TZS", "THB", "TOP", "TTD", "TND", "TRY", "TMT", "UGX", "UAH", "AED", "USN", "UYI", "UYU", "UZS", "VUV", "VEF", "VED", "VND", "YER", "ZMW", "ZWL"];
|
|
652
|
+
};
|
|
653
|
+
readonly lcy_decimal_places: {
|
|
654
|
+
readonly type: "integer";
|
|
655
|
+
readonly minimum: 0;
|
|
656
|
+
readonly maximum: 4;
|
|
657
|
+
};
|
|
658
|
+
};
|
|
659
|
+
readonly required: readonly ["value", "currency", "lcy_value", "lcy_currency", "decimal_places", "lcy_decimal_places"];
|
|
660
|
+
}, {
|
|
661
|
+
readonly type: "null";
|
|
662
|
+
}];
|
|
663
|
+
};
|
|
523
664
|
};
|
|
524
665
|
};
|
|
525
666
|
readonly duty: {
|
|
@@ -532,6 +673,9 @@ declare const schema: {
|
|
|
532
673
|
readonly commodity_code: {
|
|
533
674
|
readonly type: readonly ["string", "null"];
|
|
534
675
|
};
|
|
676
|
+
readonly tariff_no: {
|
|
677
|
+
readonly type: readonly ["string", "null"];
|
|
678
|
+
};
|
|
535
679
|
};
|
|
536
680
|
readonly payment_terms: {
|
|
537
681
|
readonly type: "object";
|
|
@@ -569,6 +713,9 @@ declare const schema: {
|
|
|
569
713
|
readonly supplier_id: {
|
|
570
714
|
readonly type: readonly ["string", "null"];
|
|
571
715
|
};
|
|
716
|
+
readonly erp_supplier_id: {
|
|
717
|
+
readonly type: readonly ["string", "null"];
|
|
718
|
+
};
|
|
572
719
|
readonly supplier_name: {
|
|
573
720
|
readonly type: readonly ["string", "null"];
|
|
574
721
|
};
|
|
@@ -578,7 +725,7 @@ declare const schema: {
|
|
|
578
725
|
};
|
|
579
726
|
};
|
|
580
727
|
};
|
|
581
|
-
readonly required: readonly ["
|
|
728
|
+
readonly required: readonly ["product_id", "colour_id", "style_id"];
|
|
582
729
|
}, {
|
|
583
730
|
readonly type: "object";
|
|
584
731
|
readonly additionalProperties: false;
|