repzo-sap-absjo 1.0.21 → 1.0.23
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/changelog.md +1 -0
- package/lib/actions/create_invoice.js +48 -33
- package/lib/actions/create_proforma.js +50 -24
- package/lib/actions/create_return_invoice.js +2 -2
- package/lib/actions/create_transfer.js +1 -1
- package/lib/commands/client.js +1 -1
- package/lib/commands/measureunit.js +1 -1
- package/lib/commands/product.js +1 -1
- package/lib/commands/tax.js +1 -1
- package/lib/test/actions/create_invoice.js +1 -1
- package/lib/test/actions/create_payment.js +1 -1
- package/lib/test/actions/create_proforma.js +1 -1
- package/lib/test/actions/create_return_invoice.js +1 -1
- package/lib/test/actions/create_transfer.js +1 -1
- package/lib/test/commands/brand.js +1 -1
- package/lib/test/commands/category.js +1 -1
- package/lib/test/commands/channel.js +1 -1
- package/lib/test/commands/payment_term.js +1 -1
- package/lib/test/commands/price_list.js +1 -1
- package/lib/test/commands/price_list_disabled.js +1 -1
- package/lib/test/commands/warehouse.js +1 -1
- package/lib/util.d.ts +13 -0
- package/lib/util.js +26 -0
- package/package.json +2 -2
- package/src/actions/create_invoice.ts +31 -20
- package/src/actions/create_proforma.ts +33 -1
- package/src/commands/basic.ts +1 -1
- package/src/commands/price_list_disabled.ts +8 -8
- package/src/util.ts +26 -1
package/changelog.md
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
- [command/measureunit-family] use _.xor instead or _.difference @maramalshen
|
|
21
21
|
- [command/price_list] fix bug in priceList-item @maramalshen
|
|
22
22
|
- [actions/**] don't update integration_meta.sync_to_sap_succeeded if it is already true @maramalshen
|
|
23
|
+
- [actions/create_invoice] include item.get_promotion in MEO_Serial & Promotion_Name @maramalshen
|
|
23
24
|
|
|
24
25
|
### Removed
|
|
25
26
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import Repzo from "repzo";
|
|
2
|
-
import { _create } from "../util.js";
|
|
2
|
+
import { _create, getUniqueConcatenatedValues } from "../util.js";
|
|
3
3
|
import { v4 as uuid } from "uuid";
|
|
4
4
|
import moment from "moment-timezone";
|
|
5
5
|
export const create_invoice = async (event, options) => {
|
|
6
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
6
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
7
7
|
const repzo = new Repzo(
|
|
8
8
|
(_a = options.data) === null || _a === void 0 ? void 0 : _a.repzoApiKey,
|
|
9
9
|
{ env: options.env }
|
|
@@ -197,28 +197,42 @@ export const create_invoice = async (event, options) => {
|
|
|
197
197
|
},
|
|
198
198
|
{ per_page: 50000 }
|
|
199
199
|
);
|
|
200
|
+
const all_promotions = {};
|
|
201
|
+
(_g =
|
|
202
|
+
repzo_invoice === null || repzo_invoice === void 0
|
|
203
|
+
? void 0
|
|
204
|
+
: repzo_invoice.promotions) === null || _g === void 0
|
|
205
|
+
? void 0
|
|
206
|
+
: _g.forEach((promo) => {
|
|
207
|
+
if (!promo) return;
|
|
208
|
+
all_promotions[promo._id] = {
|
|
209
|
+
_id: promo._id,
|
|
210
|
+
name: promo.name,
|
|
211
|
+
ref: promo.ref,
|
|
212
|
+
};
|
|
213
|
+
});
|
|
200
214
|
// Prepare SAP_invoice_items
|
|
201
215
|
const items = [];
|
|
202
216
|
for (
|
|
203
217
|
let i = 0;
|
|
204
218
|
i <
|
|
205
|
-
((
|
|
219
|
+
((_h =
|
|
206
220
|
repzo_invoice === null || repzo_invoice === void 0
|
|
207
221
|
? void 0
|
|
208
|
-
: repzo_invoice.items) === null ||
|
|
222
|
+
: repzo_invoice.items) === null || _h === void 0
|
|
209
223
|
? void 0
|
|
210
|
-
:
|
|
224
|
+
: _h.length);
|
|
211
225
|
i++
|
|
212
226
|
) {
|
|
213
227
|
const item = repzo_invoice.items[i];
|
|
214
228
|
// Get Repzo Tax
|
|
215
229
|
const repzo_tax =
|
|
216
|
-
(
|
|
230
|
+
(_j =
|
|
217
231
|
repzo_taxes === null || repzo_taxes === void 0
|
|
218
232
|
? void 0
|
|
219
|
-
: repzo_taxes.data) === null ||
|
|
233
|
+
: repzo_taxes.data) === null || _j === void 0
|
|
220
234
|
? void 0
|
|
221
|
-
:
|
|
235
|
+
: _j.find((t) => {
|
|
222
236
|
var _a, _b, _c;
|
|
223
237
|
return (
|
|
224
238
|
((_a = t._id) === null || _a === void 0
|
|
@@ -235,12 +249,12 @@ export const create_invoice = async (event, options) => {
|
|
|
235
249
|
if (!repzo_tax) throw `Tax with _id: ${item.tax._id} not found in Repzo`;
|
|
236
250
|
// Get Repzo UoM
|
|
237
251
|
const repzo_measureunit =
|
|
238
|
-
(
|
|
252
|
+
(_k =
|
|
239
253
|
repzo_measureunits === null || repzo_measureunits === void 0
|
|
240
254
|
? void 0
|
|
241
|
-
: repzo_measureunits.data) === null ||
|
|
255
|
+
: repzo_measureunits.data) === null || _k === void 0
|
|
242
256
|
? void 0
|
|
243
|
-
:
|
|
257
|
+
: _k.find((m) => {
|
|
244
258
|
var _a, _b, _c;
|
|
245
259
|
return (
|
|
246
260
|
((_a = m._id) === null || _a === void 0
|
|
@@ -256,16 +270,16 @@ export const create_invoice = async (event, options) => {
|
|
|
256
270
|
});
|
|
257
271
|
if (!repzo_measureunit)
|
|
258
272
|
throw `Uom with _id: ${
|
|
259
|
-
(
|
|
273
|
+
(_l = item.measureunit) === null || _l === void 0 ? void 0 : _l._id
|
|
260
274
|
} not found in Repzo`;
|
|
261
275
|
// Get Repzo Product
|
|
262
276
|
const repzo_product =
|
|
263
|
-
(
|
|
277
|
+
(_m =
|
|
264
278
|
repzo_products === null || repzo_products === void 0
|
|
265
279
|
? void 0
|
|
266
|
-
: repzo_products.data) === null ||
|
|
280
|
+
: repzo_products.data) === null || _m === void 0
|
|
267
281
|
? void 0
|
|
268
|
-
:
|
|
282
|
+
: _m.find((p) => {
|
|
269
283
|
var _a, _b, _c;
|
|
270
284
|
return (
|
|
271
285
|
((_a = p._id) === null || _a === void 0
|
|
@@ -282,8 +296,18 @@ export const create_invoice = async (event, options) => {
|
|
|
282
296
|
if (!repzo_product)
|
|
283
297
|
throw `Product with _id: ${item.measureunit._id} not found in Repzo`;
|
|
284
298
|
items.push({
|
|
285
|
-
MEO_Serial: getUniqueConcatenatedValues(
|
|
286
|
-
|
|
299
|
+
MEO_Serial: getUniqueConcatenatedValues(
|
|
300
|
+
item,
|
|
301
|
+
"ref",
|
|
302
|
+
" | ",
|
|
303
|
+
all_promotions
|
|
304
|
+
),
|
|
305
|
+
Promotion_Name: getUniqueConcatenatedValues(
|
|
306
|
+
item,
|
|
307
|
+
"name",
|
|
308
|
+
" | ",
|
|
309
|
+
all_promotions
|
|
310
|
+
),
|
|
287
311
|
ItemCode: item.variant.variant_name,
|
|
288
312
|
Quantity: item.qty,
|
|
289
313
|
TaxCode: repzo_tax.integration_meta.TaxCode,
|
|
@@ -293,19 +317,19 @@ export const create_invoice = async (event, options) => {
|
|
|
293
317
|
LineTotal: item.total_before_tax / 1000,
|
|
294
318
|
UomCode: repzo_measureunit.integration_meta.ALTUOMID,
|
|
295
319
|
Brand:
|
|
296
|
-
(
|
|
320
|
+
(_o = repzo_product.integration_meta) === null || _o === void 0
|
|
297
321
|
? void 0
|
|
298
|
-
:
|
|
322
|
+
: _o.BRAND,
|
|
299
323
|
Department:
|
|
300
|
-
((
|
|
324
|
+
((_p =
|
|
301
325
|
repzo_rep === null || repzo_rep === void 0
|
|
302
326
|
? void 0
|
|
303
|
-
: repzo_rep.integration_meta) === null ||
|
|
327
|
+
: repzo_rep.integration_meta) === null || _p === void 0
|
|
304
328
|
? void 0
|
|
305
|
-
:
|
|
306
|
-
((
|
|
329
|
+
: _p.DEPARTMENTCODE) ||
|
|
330
|
+
((_q = options.data) === null || _q === void 0
|
|
307
331
|
? void 0
|
|
308
|
-
:
|
|
332
|
+
: _q.DepartmentCode), // "D2",
|
|
309
333
|
});
|
|
310
334
|
}
|
|
311
335
|
const sap_invoice = {
|
|
@@ -369,12 +393,3 @@ export const get_invoice_from_sap = async (serviceEndPoint, query) => {
|
|
|
369
393
|
throw e;
|
|
370
394
|
}
|
|
371
395
|
};
|
|
372
|
-
function getUniqueConcatenatedValues(item, key, delimiter) {
|
|
373
|
-
item.general_promotions = item.general_promotions || [];
|
|
374
|
-
item.used_promotions = item.used_promotions || [];
|
|
375
|
-
const allPromotions = [...item.general_promotions, ...item.used_promotions];
|
|
376
|
-
const uniqueValues = new Set(
|
|
377
|
-
allPromotions.map((promotion) => promotion[key]).filter((value) => value)
|
|
378
|
-
);
|
|
379
|
-
return [...uniqueValues].join(delimiter);
|
|
380
|
-
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import Repzo from "repzo";
|
|
2
|
-
import { _create } from "../util.js";
|
|
2
|
+
import { _create, getUniqueConcatenatedValues } from "../util.js";
|
|
3
3
|
import { v4 as uuid } from "uuid";
|
|
4
4
|
import moment from "moment-timezone";
|
|
5
5
|
export const create_proforma = async (event, options) => {
|
|
6
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
6
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
7
7
|
const repzo = new Repzo(
|
|
8
8
|
(_a = options.data) === null || _a === void 0 ? void 0 : _a.repzoApiKey,
|
|
9
9
|
{ env: options.env }
|
|
@@ -137,28 +137,42 @@ export const create_proforma = async (event, options) => {
|
|
|
137
137
|
},
|
|
138
138
|
{ per_page: 50000 }
|
|
139
139
|
);
|
|
140
|
+
const all_promotions = {};
|
|
141
|
+
(_g =
|
|
142
|
+
repzo_proforma === null || repzo_proforma === void 0
|
|
143
|
+
? void 0
|
|
144
|
+
: repzo_proforma.promotions) === null || _g === void 0
|
|
145
|
+
? void 0
|
|
146
|
+
: _g.forEach((promo) => {
|
|
147
|
+
if (!promo) return;
|
|
148
|
+
all_promotions[promo._id] = {
|
|
149
|
+
_id: promo._id,
|
|
150
|
+
name: promo.name,
|
|
151
|
+
ref: promo.ref,
|
|
152
|
+
};
|
|
153
|
+
});
|
|
140
154
|
// Prepare SAP_invoice_items
|
|
141
155
|
const items = [];
|
|
142
156
|
for (
|
|
143
157
|
let i = 0;
|
|
144
158
|
i <
|
|
145
|
-
((
|
|
159
|
+
((_h =
|
|
146
160
|
repzo_proforma === null || repzo_proforma === void 0
|
|
147
161
|
? void 0
|
|
148
|
-
: repzo_proforma.items) === null ||
|
|
162
|
+
: repzo_proforma.items) === null || _h === void 0
|
|
149
163
|
? void 0
|
|
150
|
-
:
|
|
164
|
+
: _h.length);
|
|
151
165
|
i++
|
|
152
166
|
) {
|
|
153
167
|
const item = repzo_proforma.items[i];
|
|
154
168
|
// Get Repzo Tax
|
|
155
169
|
const repzo_tax =
|
|
156
|
-
(
|
|
170
|
+
(_j =
|
|
157
171
|
repzo_taxes === null || repzo_taxes === void 0
|
|
158
172
|
? void 0
|
|
159
|
-
: repzo_taxes.data) === null ||
|
|
173
|
+
: repzo_taxes.data) === null || _j === void 0
|
|
160
174
|
? void 0
|
|
161
|
-
:
|
|
175
|
+
: _j.find((t) => {
|
|
162
176
|
var _a, _b, _c;
|
|
163
177
|
return (
|
|
164
178
|
((_a = t._id) === null || _a === void 0
|
|
@@ -175,12 +189,12 @@ export const create_proforma = async (event, options) => {
|
|
|
175
189
|
if (!repzo_tax) throw `Tax with _id: ${item.tax._id} not found in Repzo`;
|
|
176
190
|
// Get Repzo UoM
|
|
177
191
|
const repzo_measureunit =
|
|
178
|
-
(
|
|
192
|
+
(_k =
|
|
179
193
|
repzo_measureunits === null || repzo_measureunits === void 0
|
|
180
194
|
? void 0
|
|
181
|
-
: repzo_measureunits.data) === null ||
|
|
195
|
+
: repzo_measureunits.data) === null || _k === void 0
|
|
182
196
|
? void 0
|
|
183
|
-
:
|
|
197
|
+
: _k.find((m) => {
|
|
184
198
|
var _a, _b, _c;
|
|
185
199
|
return (
|
|
186
200
|
((_a = m._id) === null || _a === void 0
|
|
@@ -196,16 +210,16 @@ export const create_proforma = async (event, options) => {
|
|
|
196
210
|
});
|
|
197
211
|
if (!repzo_measureunit)
|
|
198
212
|
throw `Uom with _id: ${
|
|
199
|
-
(
|
|
213
|
+
(_l = item.measureunit) === null || _l === void 0 ? void 0 : _l._id
|
|
200
214
|
} not found in Repzo`;
|
|
201
215
|
// Get Repzo Product
|
|
202
216
|
const repzo_product =
|
|
203
|
-
(
|
|
217
|
+
(_m =
|
|
204
218
|
repzo_products === null || repzo_products === void 0
|
|
205
219
|
? void 0
|
|
206
|
-
: repzo_products.data) === null ||
|
|
220
|
+
: repzo_products.data) === null || _m === void 0
|
|
207
221
|
? void 0
|
|
208
|
-
:
|
|
222
|
+
: _m.find((p) => {
|
|
209
223
|
var _a, _b, _c;
|
|
210
224
|
return (
|
|
211
225
|
((_a = p._id) === null || _a === void 0
|
|
@@ -222,6 +236,18 @@ export const create_proforma = async (event, options) => {
|
|
|
222
236
|
if (!repzo_product)
|
|
223
237
|
throw `Product with _id: ${item.measureunit._id} not found in Repzo`;
|
|
224
238
|
items.push({
|
|
239
|
+
MEO_Serial: getUniqueConcatenatedValues(
|
|
240
|
+
item,
|
|
241
|
+
"ref",
|
|
242
|
+
" | ",
|
|
243
|
+
all_promotions
|
|
244
|
+
),
|
|
245
|
+
Promotion_Name: getUniqueConcatenatedValues(
|
|
246
|
+
item,
|
|
247
|
+
"name",
|
|
248
|
+
" | ",
|
|
249
|
+
all_promotions
|
|
250
|
+
),
|
|
225
251
|
ItemCode: item.variant.variant_name,
|
|
226
252
|
Quantity: item.qty,
|
|
227
253
|
TaxCode: repzo_tax.integration_meta.TaxCode,
|
|
@@ -231,28 +257,28 @@ export const create_proforma = async (event, options) => {
|
|
|
231
257
|
LineTotal: item.total_before_tax / 1000,
|
|
232
258
|
UomCode: repzo_measureunit.integration_meta.ALTUOMID,
|
|
233
259
|
Brand:
|
|
234
|
-
(
|
|
260
|
+
(_o = repzo_product.integration_meta) === null || _o === void 0
|
|
235
261
|
? void 0
|
|
236
|
-
:
|
|
262
|
+
: _o.BRAND,
|
|
237
263
|
Department:
|
|
238
|
-
((
|
|
264
|
+
((_p =
|
|
239
265
|
repzo_rep === null || repzo_rep === void 0
|
|
240
266
|
? void 0
|
|
241
|
-
: repzo_rep.integration_meta) === null ||
|
|
267
|
+
: repzo_rep.integration_meta) === null || _p === void 0
|
|
242
268
|
? void 0
|
|
243
|
-
:
|
|
244
|
-
((
|
|
269
|
+
: _p.DEPARTMENTCODE) ||
|
|
270
|
+
((_q = options.data) === null || _q === void 0
|
|
245
271
|
? void 0
|
|
246
|
-
:
|
|
272
|
+
: _q.DepartmentCode), // "D2"
|
|
247
273
|
});
|
|
248
274
|
}
|
|
249
275
|
const sap_invoice = {
|
|
250
276
|
RefNum: repzo_proforma.serial_number.formatted,
|
|
251
277
|
SalPersCode: repzo_rep
|
|
252
278
|
? repzo_rep.integration_id
|
|
253
|
-
: (
|
|
279
|
+
: (_r = options.data) === null || _r === void 0
|
|
254
280
|
? void 0
|
|
255
|
-
:
|
|
281
|
+
: _r.SalPersCode,
|
|
256
282
|
DocDate: moment(repzo_proforma.issue_date, "YYYY-MM-DD").format(
|
|
257
283
|
"YYYYMMDD"
|
|
258
284
|
),
|
|
@@ -253,7 +253,7 @@ export const create_return_invoice = async (event, options) => {
|
|
|
253
253
|
Brand:
|
|
254
254
|
(_o = repzo_product.integration_meta) === null || _o === void 0
|
|
255
255
|
? void 0
|
|
256
|
-
: _o.BRAND,
|
|
256
|
+
: _o.BRAND, // "B1",
|
|
257
257
|
Department:
|
|
258
258
|
((_p =
|
|
259
259
|
repzo_rep === null || repzo_rep === void 0
|
|
@@ -263,7 +263,7 @@ export const create_return_invoice = async (event, options) => {
|
|
|
263
263
|
: _p.DEPARTMENTCODE) ||
|
|
264
264
|
((_q = options.data) === null || _q === void 0
|
|
265
265
|
? void 0
|
|
266
|
-
: _q.DepartmentCode),
|
|
266
|
+
: _q.DepartmentCode), // "D2"
|
|
267
267
|
Return_Reason:
|
|
268
268
|
item_return_reason === null || item_return_reason === void 0
|
|
269
269
|
? void 0
|
|
@@ -171,7 +171,7 @@ export const create_transfer = async (event, options) => {
|
|
|
171
171
|
? repzo_rep.integration_id
|
|
172
172
|
: (_o = options.data) === null || _o === void 0
|
|
173
173
|
? void 0
|
|
174
|
-
: _o.SalesPersonCode,
|
|
174
|
+
: _o.SalesPersonCode, // "111"
|
|
175
175
|
FromWarehouse: body.from.code,
|
|
176
176
|
ToWarehouse: body.to.code,
|
|
177
177
|
RepzoStockTransferLines: variants,
|
package/lib/commands/client.js
CHANGED
|
@@ -231,7 +231,7 @@ export const sync_client = async (commandEvent) => {
|
|
|
231
231
|
paymentTerm: paymentTerm ? paymentTerm._id : undefined,
|
|
232
232
|
sv_priceList: priceList ? priceList._id : undefined,
|
|
233
233
|
disabled: sap_client.ACTIVE == "Y" ? false : true,
|
|
234
|
-
payment_type: sap_client.PAYMENTTERM ? "credit" : "cash",
|
|
234
|
+
payment_type: sap_client.PAYMENTTERM ? "credit" : "cash", // sap_client.CLIENTGROUP == "Cash Van"
|
|
235
235
|
integrated_client_balance:
|
|
236
236
|
client_credit_consumed && Math.round(client_credit_consumed * 1000),
|
|
237
237
|
};
|
|
@@ -197,7 +197,7 @@ export const sync_measureunit = async (commandEvent) => {
|
|
|
197
197
|
const body = {
|
|
198
198
|
parent: repzo_parent_id,
|
|
199
199
|
name: sap_UoM.ALTUOMCODE,
|
|
200
|
-
factor: sap_UoM.repzo_factor || 0,
|
|
200
|
+
factor: sap_UoM.repzo_factor || 0, // ??????
|
|
201
201
|
disabled: false,
|
|
202
202
|
integration_meta: {
|
|
203
203
|
id: `${nameSpace}_${sap_UoM.UOMGROUPENTRY}_${sap_UoM.ALTUOMID}`,
|
package/lib/commands/product.js
CHANGED
|
@@ -299,7 +299,7 @@ export const sync_product = async (commandEvent) => {
|
|
|
299
299
|
{
|
|
300
300
|
disabled: false,
|
|
301
301
|
name: sap_product.ITEMCODE,
|
|
302
|
-
price: 0,
|
|
302
|
+
price: 0, // Math.round(sap_product.PRICE * 1000),
|
|
303
303
|
integration_meta: {
|
|
304
304
|
id: `${nameSpace}_${sap_product.ITEMCODE}`,
|
|
305
305
|
ITEMCODE: sap_product.ITEMCODE,
|
package/lib/commands/tax.js
CHANGED
|
@@ -96,7 +96,7 @@ export const sync_tax = async (commandEvent) => {
|
|
|
96
96
|
const body = {
|
|
97
97
|
name: sap_tax.TaxName,
|
|
98
98
|
rate: Number(sap_tax.TaxRate / 100),
|
|
99
|
-
type: "additive",
|
|
99
|
+
type: "additive", // hardcode
|
|
100
100
|
disabled: sap_tax.Inactive === "N" ? false : true,
|
|
101
101
|
integration_meta: {
|
|
102
102
|
id: `${nameSpace}_${sap_tax.TaxCode}`,
|
|
@@ -6,7 +6,7 @@ Actions(
|
|
|
6
6
|
rawPath: "/actions",
|
|
7
7
|
rawQueryString: "app=repzo-sap-absjo&action=create_invoice",
|
|
8
8
|
headers: {
|
|
9
|
-
action_sync_id: "Actions-0000001",
|
|
9
|
+
action_sync_id: "Actions-0000001", // SYNC_ID
|
|
10
10
|
accept: "*/*",
|
|
11
11
|
"accept-encoding": "gzip, deflate",
|
|
12
12
|
"content-length": "3658",
|
|
@@ -6,7 +6,7 @@ Actions(
|
|
|
6
6
|
rawPath: "/actions",
|
|
7
7
|
rawQueryString: "app=repzo-sap-absjo&action=create_payment",
|
|
8
8
|
headers: {
|
|
9
|
-
action_sync_id: "Actions-0000004",
|
|
9
|
+
action_sync_id: "Actions-0000004", // SYNC_ID
|
|
10
10
|
accept: "*/*",
|
|
11
11
|
"accept-encoding": "gzip, deflate",
|
|
12
12
|
"content-length": "3658",
|
|
@@ -6,7 +6,7 @@ Actions(
|
|
|
6
6
|
rawPath: "/actions",
|
|
7
7
|
rawQueryString: "app=repzo-sap-absjo&action=create_proforma",
|
|
8
8
|
headers: {
|
|
9
|
-
action_sync_id: "Actions-0000003",
|
|
9
|
+
action_sync_id: "Actions-0000003", // SYNC_ID
|
|
10
10
|
accept: "*/*",
|
|
11
11
|
"accept-encoding": "gzip, deflate",
|
|
12
12
|
"content-length": "3658",
|
|
@@ -6,7 +6,7 @@ Actions(
|
|
|
6
6
|
rawPath: "/actions",
|
|
7
7
|
rawQueryString: "app=repzo-sap-absjo&action=create_return_invoice",
|
|
8
8
|
headers: {
|
|
9
|
-
action_sync_id: "Actions-0000002",
|
|
9
|
+
action_sync_id: "Actions-0000002", // SYNC_ID
|
|
10
10
|
accept: "*/*",
|
|
11
11
|
"accept-encoding": "gzip, deflate",
|
|
12
12
|
"content-length": "3658",
|
|
@@ -6,7 +6,7 @@ Actions(
|
|
|
6
6
|
rawPath: "/actions",
|
|
7
7
|
rawQueryString: "app=repzo-sap-absjo&action=create_transfer",
|
|
8
8
|
headers: {
|
|
9
|
-
action_sync_id: "Actions-0000005",
|
|
9
|
+
action_sync_id: "Actions-0000005", // SYNC_ID
|
|
10
10
|
accept: "*/*",
|
|
11
11
|
"accept-encoding": "gzip, deflate",
|
|
12
12
|
"content-length": "3658",
|
|
@@ -341,7 +341,7 @@ let commandEvent = {
|
|
|
341
341
|
timezone: "Asia/Amman",
|
|
342
342
|
meta: "",
|
|
343
343
|
env: "staging",
|
|
344
|
-
sync_id: "9811c42a-d26e-41e0-bee5-e75260c04767",
|
|
344
|
+
sync_id: "9811c42a-d26e-41e0-bee5-e75260c04767", // should change
|
|
345
345
|
command: "price_list",
|
|
346
346
|
};
|
|
347
347
|
Commands(commandEvent);
|
|
@@ -353,7 +353,7 @@ let commandEvent = {
|
|
|
353
353
|
timezone: "Asia/Amman",
|
|
354
354
|
meta: "",
|
|
355
355
|
env: "staging",
|
|
356
|
-
sync_id: "a7e620b6-c5a2-44f7-b44b-3599b3ea1b54",
|
|
356
|
+
sync_id: "a7e620b6-c5a2-44f7-b44b-3599b3ea1b54", // should change
|
|
357
357
|
command: "price_list_disabled",
|
|
358
358
|
};
|
|
359
359
|
Commands(commandEvent);
|
package/lib/util.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Repzo from "repzo";
|
|
2
2
|
import { CommandType } from "./types";
|
|
3
|
+
import { Service } from "repzo/src/types";
|
|
3
4
|
interface Params {
|
|
4
5
|
[key: string]: any;
|
|
5
6
|
}
|
|
@@ -79,4 +80,16 @@ export declare const send_command_to_marketplace: ({
|
|
|
79
80
|
env: "production" | "staging" | "local";
|
|
80
81
|
repzoApiKey: string;
|
|
81
82
|
}) => Promise<void>;
|
|
83
|
+
export declare const getUniqueConcatenatedValues: (
|
|
84
|
+
item: Service.Item.Schema,
|
|
85
|
+
key: "name" | "ref",
|
|
86
|
+
delimiter: string,
|
|
87
|
+
all_promos: {
|
|
88
|
+
[promo_id: string]: {
|
|
89
|
+
_id: string;
|
|
90
|
+
name: string;
|
|
91
|
+
ref?: string | undefined;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
) => string;
|
|
82
95
|
export {};
|
package/lib/util.js
CHANGED
|
@@ -192,3 +192,29 @@ export const send_command_to_marketplace = async ({
|
|
|
192
192
|
throw e;
|
|
193
193
|
}
|
|
194
194
|
};
|
|
195
|
+
export const getUniqueConcatenatedValues = function (
|
|
196
|
+
item,
|
|
197
|
+
key,
|
|
198
|
+
delimiter,
|
|
199
|
+
all_promos
|
|
200
|
+
) {
|
|
201
|
+
var _a, _b, _c;
|
|
202
|
+
item.general_promotions = item.general_promotions || [];
|
|
203
|
+
item.used_promotions = item.used_promotions || [];
|
|
204
|
+
const allPromotions = [...item.general_promotions, ...item.used_promotions];
|
|
205
|
+
if ((_a = item.promotions) === null || _a === void 0 ? void 0 : _a.isGet) {
|
|
206
|
+
const promo_id =
|
|
207
|
+
(_c =
|
|
208
|
+
(_b = item.promotions.bookings) === null || _b === void 0
|
|
209
|
+
? void 0
|
|
210
|
+
: _b[0]) === null || _c === void 0
|
|
211
|
+
? void 0
|
|
212
|
+
: _c.promotion;
|
|
213
|
+
if (promo_id && all_promos[promo_id])
|
|
214
|
+
allPromotions.push(all_promos[promo_id]);
|
|
215
|
+
}
|
|
216
|
+
const uniqueValues = new Set(
|
|
217
|
+
allPromotions.map((promotion) => promotion[key]).filter((value) => value)
|
|
218
|
+
);
|
|
219
|
+
return [...uniqueValues].join(delimiter);
|
|
220
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "repzo-sap-absjo",
|
|
3
3
|
"description": "repzo SAP ABS jo integration",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.23",
|
|
5
5
|
"homepage": "",
|
|
6
6
|
"keywords": [],
|
|
7
7
|
"author": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"jsonwebtoken": "^8.5.1",
|
|
46
46
|
"lodash": "^4.17.21",
|
|
47
47
|
"moment-timezone": "^0.5.34",
|
|
48
|
-
"repzo": "^1.0.
|
|
48
|
+
"repzo": "^1.0.33",
|
|
49
49
|
"uuid": "^8.3.2"
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import Repzo from "repzo";
|
|
2
2
|
import { EVENT, Config } from "../types";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
_fetch,
|
|
5
|
+
_create,
|
|
6
|
+
_update,
|
|
7
|
+
_delete,
|
|
8
|
+
getUniqueConcatenatedValues,
|
|
9
|
+
} from "../util.js";
|
|
4
10
|
import { Service } from "repzo/src/types";
|
|
5
11
|
import { v4 as uuid } from "uuid";
|
|
6
12
|
import moment from "moment-timezone";
|
|
@@ -211,6 +217,18 @@ export const create_invoice = async (event: EVENT, options: Config) => {
|
|
|
211
217
|
{ per_page: 50000 }
|
|
212
218
|
);
|
|
213
219
|
|
|
220
|
+
const all_promotions: {
|
|
221
|
+
[promo_id: string]: { _id: string; name: string; ref?: string };
|
|
222
|
+
} = {};
|
|
223
|
+
repzo_invoice?.promotions?.forEach((promo) => {
|
|
224
|
+
if (!promo) return;
|
|
225
|
+
all_promotions[promo._id] = {
|
|
226
|
+
_id: promo._id,
|
|
227
|
+
name: promo.name,
|
|
228
|
+
ref: promo.ref,
|
|
229
|
+
};
|
|
230
|
+
});
|
|
231
|
+
|
|
214
232
|
// Prepare SAP_invoice_items
|
|
215
233
|
const items = [];
|
|
216
234
|
|
|
@@ -238,8 +256,18 @@ export const create_invoice = async (event: EVENT, options: Config) => {
|
|
|
238
256
|
throw `Product with _id: ${item.measureunit._id} not found in Repzo`;
|
|
239
257
|
|
|
240
258
|
items.push({
|
|
241
|
-
MEO_Serial: getUniqueConcatenatedValues(
|
|
242
|
-
|
|
259
|
+
MEO_Serial: getUniqueConcatenatedValues(
|
|
260
|
+
item,
|
|
261
|
+
"ref",
|
|
262
|
+
" | ",
|
|
263
|
+
all_promotions
|
|
264
|
+
),
|
|
265
|
+
Promotion_Name: getUniqueConcatenatedValues(
|
|
266
|
+
item,
|
|
267
|
+
"name",
|
|
268
|
+
" | ",
|
|
269
|
+
all_promotions
|
|
270
|
+
),
|
|
243
271
|
ItemCode: item.variant.variant_name,
|
|
244
272
|
Quantity: item.qty,
|
|
245
273
|
TaxCode: repzo_tax.integration_meta.TaxCode,
|
|
@@ -325,20 +353,3 @@ export const get_invoice_from_sap = async (
|
|
|
325
353
|
throw e;
|
|
326
354
|
}
|
|
327
355
|
};
|
|
328
|
-
|
|
329
|
-
function getUniqueConcatenatedValues(
|
|
330
|
-
item: Service.Item.Schema,
|
|
331
|
-
key: "name" | "ref",
|
|
332
|
-
delimiter: string
|
|
333
|
-
): string {
|
|
334
|
-
item.general_promotions = item.general_promotions || [];
|
|
335
|
-
item.used_promotions = item.used_promotions || [];
|
|
336
|
-
const allPromotions: { name: string; ref?: string; [key: string]: any }[] = [
|
|
337
|
-
...item.general_promotions,
|
|
338
|
-
...item.used_promotions,
|
|
339
|
-
];
|
|
340
|
-
const uniqueValues = new Set(
|
|
341
|
-
allPromotions.map((promotion) => promotion[key]).filter((value) => value)
|
|
342
|
-
);
|
|
343
|
-
return [...uniqueValues].join(delimiter);
|
|
344
|
-
}
|
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
import Repzo from "repzo";
|
|
2
2
|
import { EVENT, Config } from "../types";
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
_fetch,
|
|
5
|
+
_create,
|
|
6
|
+
_update,
|
|
7
|
+
_delete,
|
|
8
|
+
getUniqueConcatenatedValues,
|
|
9
|
+
} from "../util.js";
|
|
4
10
|
import { Service } from "repzo/src/types";
|
|
5
11
|
import { v4 as uuid } from "uuid";
|
|
6
12
|
import moment from "moment-timezone";
|
|
7
13
|
|
|
8
14
|
interface SAPProformaItem {
|
|
15
|
+
MEO_Serial: string; // "INV-1021-4 | 010-LAG-PO0002";
|
|
16
|
+
Promotion_Name: string; // "INV-1021-4 | 010-LAG-PO0002";
|
|
9
17
|
ItemCode: string; // "010-LAG-PO0002";
|
|
10
18
|
Quantity: number; // 10;
|
|
11
19
|
TaxCode: string; // "S16";
|
|
@@ -135,6 +143,18 @@ export const create_proforma = async (event: EVENT, options: Config) => {
|
|
|
135
143
|
{ per_page: 50000 }
|
|
136
144
|
);
|
|
137
145
|
|
|
146
|
+
const all_promotions: {
|
|
147
|
+
[promo_id: string]: { _id: string; name: string; ref?: string };
|
|
148
|
+
} = {};
|
|
149
|
+
repzo_proforma?.promotions?.forEach((promo) => {
|
|
150
|
+
if (!promo) return;
|
|
151
|
+
all_promotions[promo._id] = {
|
|
152
|
+
_id: promo._id,
|
|
153
|
+
name: promo.name,
|
|
154
|
+
ref: promo.ref,
|
|
155
|
+
};
|
|
156
|
+
});
|
|
157
|
+
|
|
138
158
|
// Prepare SAP_invoice_items
|
|
139
159
|
const items: SAPProformaItem[] = [];
|
|
140
160
|
|
|
@@ -162,6 +182,18 @@ export const create_proforma = async (event: EVENT, options: Config) => {
|
|
|
162
182
|
throw `Product with _id: ${item.measureunit._id} not found in Repzo`;
|
|
163
183
|
|
|
164
184
|
items.push({
|
|
185
|
+
MEO_Serial: getUniqueConcatenatedValues(
|
|
186
|
+
item,
|
|
187
|
+
"ref",
|
|
188
|
+
" | ",
|
|
189
|
+
all_promotions
|
|
190
|
+
),
|
|
191
|
+
Promotion_Name: getUniqueConcatenatedValues(
|
|
192
|
+
item,
|
|
193
|
+
"name",
|
|
194
|
+
" | ",
|
|
195
|
+
all_promotions
|
|
196
|
+
),
|
|
165
197
|
ItemCode: item.variant.variant_name,
|
|
166
198
|
Quantity: item.qty,
|
|
167
199
|
TaxCode: repzo_tax.integration_meta.TaxCode,
|
package/src/commands/basic.ts
CHANGED
|
@@ -35,7 +35,7 @@ export const sync_price_list_disabled = async (commandEvent: CommandEvent) => {
|
|
|
35
35
|
const commandLog = new Repzo.CommandLog(
|
|
36
36
|
repzo,
|
|
37
37
|
commandEvent.app,
|
|
38
|
-
commandEvent.command
|
|
38
|
+
commandEvent.command
|
|
39
39
|
);
|
|
40
40
|
|
|
41
41
|
try {
|
|
@@ -66,7 +66,7 @@ export const sync_price_list_disabled = async (commandEvent: CommandEvent) => {
|
|
|
66
66
|
result.repzo_PL_total = repzo_price_lists?.data?.length;
|
|
67
67
|
await commandLog
|
|
68
68
|
.addDetail(
|
|
69
|
-
`${repzo_price_lists?.data?.length} Active Price Lists in Repzo
|
|
69
|
+
`${repzo_price_lists?.data?.length} Active Price Lists in Repzo`
|
|
70
70
|
)
|
|
71
71
|
.commit();
|
|
72
72
|
|
|
@@ -89,7 +89,7 @@ export const sync_price_list_disabled = async (commandEvent: CommandEvent) => {
|
|
|
89
89
|
{
|
|
90
90
|
updateAt: "20000101:000000",
|
|
91
91
|
PLDID: sap_price_list_id,
|
|
92
|
-
}
|
|
92
|
+
}
|
|
93
93
|
);
|
|
94
94
|
|
|
95
95
|
result.sap_PL_items_total += sap_price_list_items?.length || 0;
|
|
@@ -140,7 +140,7 @@ export const sync_price_list_disabled = async (commandEvent: CommandEvent) => {
|
|
|
140
140
|
console.log(
|
|
141
141
|
"Disable Price List Item Failed >> ",
|
|
142
142
|
e?.response?.data,
|
|
143
|
-
repzo_item
|
|
143
|
+
repzo_item
|
|
144
144
|
);
|
|
145
145
|
failed_docs_report.push({
|
|
146
146
|
method: "update",
|
|
@@ -159,12 +159,12 @@ export const sync_price_list_disabled = async (commandEvent: CommandEvent) => {
|
|
|
159
159
|
repzo,
|
|
160
160
|
commandEvent.app._id,
|
|
161
161
|
bench_time_key,
|
|
162
|
-
new_bench_time
|
|
162
|
+
new_bench_time
|
|
163
163
|
);
|
|
164
164
|
await commandLog
|
|
165
165
|
.setStatus(
|
|
166
166
|
"success",
|
|
167
|
-
failed_docs_report.length ? failed_docs_report : null
|
|
167
|
+
failed_docs_report.length ? failed_docs_report : null
|
|
168
168
|
)
|
|
169
169
|
.setBody(result)
|
|
170
170
|
.commit();
|
|
@@ -179,13 +179,13 @@ export const sync_price_list_disabled = async (commandEvent: CommandEvent) => {
|
|
|
179
179
|
|
|
180
180
|
const get_sap_price_list = async (
|
|
181
181
|
serviceEndPoint: string,
|
|
182
|
-
query?: { updateAt?: string; PLDID?: string }
|
|
182
|
+
query?: { updateAt?: string; PLDID?: string }
|
|
183
183
|
): Promise<SAPPriceListItem[]> => {
|
|
184
184
|
try {
|
|
185
185
|
const sap_price_lists: SAPPriceListItems = await _create(
|
|
186
186
|
serviceEndPoint,
|
|
187
187
|
"/PriceList",
|
|
188
|
-
{ UpdateAt: query?.updateAt, PLDID: query?.PLDID }
|
|
188
|
+
{ UpdateAt: query?.updateAt, PLDID: query?.PLDID }
|
|
189
189
|
);
|
|
190
190
|
return sap_price_lists.PriceList;
|
|
191
191
|
} catch (e: any) {
|
package/src/util.ts
CHANGED
|
@@ -2,7 +2,7 @@ import axios from "axios";
|
|
|
2
2
|
import Repzo from "repzo";
|
|
3
3
|
import moment from "moment-timezone";
|
|
4
4
|
import { CommandType } from "./types";
|
|
5
|
-
|
|
5
|
+
import { Service } from "repzo/src/types";
|
|
6
6
|
interface Params {
|
|
7
7
|
[key: string]: any;
|
|
8
8
|
}
|
|
@@ -241,3 +241,28 @@ export const send_command_to_marketplace = async ({
|
|
|
241
241
|
throw e;
|
|
242
242
|
}
|
|
243
243
|
};
|
|
244
|
+
|
|
245
|
+
export const getUniqueConcatenatedValues = function (
|
|
246
|
+
item: Service.Item.Schema,
|
|
247
|
+
key: "name" | "ref",
|
|
248
|
+
delimiter: string,
|
|
249
|
+
all_promos: {
|
|
250
|
+
[promo_id: string]: { _id: string; name: string; ref?: string };
|
|
251
|
+
}
|
|
252
|
+
): string {
|
|
253
|
+
item.general_promotions = item.general_promotions || [];
|
|
254
|
+
item.used_promotions = item.used_promotions || [];
|
|
255
|
+
const allPromotions: { name: string; ref?: string; [key: string]: any }[] = [
|
|
256
|
+
...item.general_promotions,
|
|
257
|
+
...item.used_promotions,
|
|
258
|
+
];
|
|
259
|
+
if (item.promotions?.isGet) {
|
|
260
|
+
const promo_id = item.promotions.bookings?.[0]?.promotion;
|
|
261
|
+
if (promo_id && all_promos[promo_id])
|
|
262
|
+
allPromotions.push(all_promos[promo_id]);
|
|
263
|
+
}
|
|
264
|
+
const uniqueValues = new Set(
|
|
265
|
+
allPromotions.map((promotion) => promotion[key]).filter((value) => value)
|
|
266
|
+
);
|
|
267
|
+
return [...uniqueValues].join(delimiter);
|
|
268
|
+
};
|