repzo-sap-absjo 1.0.54 → 1.0.56

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.
@@ -20,6 +20,8 @@ interface SAPRep {
20
20
  USERCHECKACCTCODE: string; // "124020003";
21
21
  USERWHSCODE: string; // "MToffers";
22
22
  INVOICESTATUS: "Y" | "N";
23
+ VIRTUALWAREHOUSECODE: null | number;
24
+ VIRTUALWAREHOUSENAME: null | string;
23
25
  }
24
26
 
25
27
  interface SAPReps {
@@ -41,6 +43,9 @@ export const sync_rep = async (commandEvent: CommandEvent) => {
41
43
 
42
44
  const new_bench_time = new Date().toISOString();
43
45
  const bench_time_key = "bench_time_rep";
46
+ const consider_virtual_warehouse =
47
+ commandEvent.app.formData?.virtualWarehouses
48
+ ?.consider_virtual_warehouse || false;
44
49
 
45
50
  await commandLog.load(commandEvent.sync_id);
46
51
  await commandLog.addDetail("Repzo SAP: Started Syncing Reps").commit();
@@ -86,6 +91,8 @@ export const sync_rep = async (commandEvent: CommandEvent) => {
86
91
  USERCHECKACCTCODE: true,
87
92
  USERWHSCODE: true,
88
93
  INVOICESTATUS: true,
94
+ VIRTUALWAREHOUSECODE: true,
95
+ VIRTUALWAREHOUSENAME: true,
89
96
  });
90
97
  db.load(sap_reps?.Users);
91
98
 
@@ -117,6 +124,17 @@ export const sync_rep = async (commandEvent: CommandEvent) => {
117
124
  if (warehouse_res) warehouse = warehouse_res._id;
118
125
  }
119
126
 
127
+ let virtual_warehouse;
128
+ if (consider_virtual_warehouse && sap_rep.VIRTUALWAREHOUSECODE) {
129
+ const virtual_warehouse_res = repzo_warehouses?.data.find(
130
+ (w) =>
131
+ w.integration_meta?.is_virtual_warehouse &&
132
+ w.code == `Virtual ${sap_rep.VIRTUALWAREHOUSECODE}`
133
+ );
134
+ if (virtual_warehouse_res)
135
+ virtual_warehouse = virtual_warehouse_res._id;
136
+ }
137
+
120
138
  const body: Service.Rep.Create.Body | Service.Rep.Update.Body = {
121
139
  name: sap_rep.USERDESC,
122
140
  password: Math.round(Math.random() * (9999 - 1000) + 1000).toString(),
@@ -128,9 +146,11 @@ export const sync_rep = async (commandEvent: CommandEvent) => {
128
146
  USERCHECKACCTCODE: sap_rep.USERCHECKACCTCODE,
129
147
  USERWHSCODE: sap_rep.USERWHSCODE,
130
148
  INVOICESTATUS: sap_rep.INVOICESTATUS,
149
+ VIRTUALWAREHOUSECODE: sap_rep.VIRTUALWAREHOUSECODE,
150
+ VIRTUALWAREHOUSENAME: sap_rep.VIRTUALWAREHOUSENAME,
131
151
  id: `${nameSpace}_${sap_rep.USERID}`,
132
152
  },
133
- assigned_warehouse: warehouse,
153
+ assigned_warehouse: virtual_warehouse || warehouse,
134
154
  company_namespace: [nameSpace],
135
155
  "settings.treating_invoice_as_proforma_for_etax":
136
156
  sap_rep.INVOICESTATUS === "Y" ? true : false,
@@ -161,6 +181,10 @@ export const sync_rep = async (commandEvent: CommandEvent) => {
161
181
  USERCHECKACCTCODE: repzo_rep.integration_meta?.USERCHECKACCTCODE,
162
182
  USERWHSCODE: repzo_rep.integration_meta?.USERWHSCODE,
163
183
  INVOICESTATUS: repzo_rep.integration_meta?.INVOICESTATUS,
184
+ VIRTUALWAREHOUSECODE:
185
+ repzo_rep.integration_meta?.VIRTUALWAREHOUSECODE,
186
+ VIRTUALWAREHOUSENAME:
187
+ repzo_rep.integration_meta?.VIRTUALWAREHOUSENAME,
164
188
  });
165
189
  if (found_identical_docs.length) continue;
166
190
  // Update
@@ -17,7 +17,13 @@ interface WarehouseBody {
17
17
  type: "van" | "main";
18
18
  disabled?: boolean;
19
19
  code?: string;
20
- integration_meta?: { id: string };
20
+ integration_meta?: {
21
+ id?: string;
22
+ is_virtual_warehouse?: boolean;
23
+ main_warehouses_codes?: string[];
24
+ VIRTUALWAREHOUSECODE?: null | number;
25
+ VIRTUALWAREHOUSENAME?: null | string;
26
+ };
21
27
  }
22
28
 
23
29
  interface SAPWarehouse {
@@ -27,6 +33,8 @@ interface SAPWarehouse {
27
33
  INACTIVE: string; // "N";
28
34
  CREATEDATE: string; // "2021-12-20T21:00:00Z";
29
35
  UPDATEDATE: string; // "2021-12-29T21:00:00Z";
36
+ VIRTUALWAREHOUSECODE: null | number;
37
+ VIRTUALWAREHOUSENAME: null | string;
30
38
  }
31
39
 
32
40
  interface SAPWarehouses {
@@ -87,6 +95,8 @@ export const sync_warehouse = async (commandEvent: CommandEvent) => {
87
95
  db.createIndex({
88
96
  WAREHOUSECODE: true,
89
97
  WAREHOUSENAME: true,
98
+ VIRTUALWAREHOUSECODE: true,
99
+ VIRTUALWAREHOUSENAME: true,
90
100
  });
91
101
  db.load(sap_warehouses?.Warehouses);
92
102
 
@@ -114,6 +124,11 @@ export const sync_warehouse = async (commandEvent: CommandEvent) => {
114
124
  ? "van"
115
125
  : "main",
116
126
  disabled: sap_warehouse.INACTIVE == "N" ? false : true,
127
+ integration_meta: {
128
+ is_virtual_warehouse: false,
129
+ VIRTUALWAREHOUSECODE: sap_warehouse.VIRTUALWAREHOUSECODE,
130
+ VIRTUALWAREHOUSENAME: sap_warehouse.VIRTUALWAREHOUSENAME,
131
+ },
117
132
  };
118
133
 
119
134
  if (!repzo_warehouse) {
@@ -134,6 +149,10 @@ export const sync_warehouse = async (commandEvent: CommandEvent) => {
134
149
  const found_identical_docs = db.search({
135
150
  WAREHOUSECODE: repzo_warehouse.code,
136
151
  WAREHOUSENAME: repzo_warehouse.name,
152
+ VIRTUALWAREHOUSECODE:
153
+ repzo_warehouse.integration_meta?.VIRTUALWAREHOUSECODE,
154
+ VIRTUALWAREHOUSENAME:
155
+ repzo_warehouse.integration_meta?.VIRTUALWAREHOUSENAME,
137
156
  });
138
157
  if (found_identical_docs.length) continue; // Nothing has changed so no need for updates
139
158
 
@@ -157,6 +176,120 @@ export const sync_warehouse = async (commandEvent: CommandEvent) => {
157
176
  }
158
177
  }
159
178
 
179
+ if (
180
+ commandEvent.app.formData?.virtualWarehouses?.consider_virtual_warehouse
181
+ ) {
182
+ await commandLog
183
+ .addDetail("Repzo SAP: Started Syncing Virtual Warehouses")
184
+ .commit();
185
+ const unique_virtual_warehouses: {
186
+ [key: number]: {
187
+ code: number;
188
+ name: string;
189
+ main_warehouses_codes: string[];
190
+ };
191
+ } = {};
192
+ sap_warehouses?.Warehouses?.forEach((sap_warehouse) => {
193
+ if (
194
+ sap_warehouse.VIRTUALWAREHOUSECODE &&
195
+ sap_warehouse.VIRTUALWAREHOUSENAME
196
+ ) {
197
+ if (!unique_virtual_warehouses[sap_warehouse.VIRTUALWAREHOUSECODE]) {
198
+ unique_virtual_warehouses[sap_warehouse.VIRTUALWAREHOUSECODE] = {
199
+ code: sap_warehouse.VIRTUALWAREHOUSECODE,
200
+ name: sap_warehouse.VIRTUALWAREHOUSENAME,
201
+ main_warehouses_codes: [sap_warehouse.WAREHOUSECODE],
202
+ };
203
+ } else {
204
+ unique_virtual_warehouses[
205
+ sap_warehouse.VIRTUALWAREHOUSECODE
206
+ ].main_warehouses_codes.push(sap_warehouse.WAREHOUSECODE);
207
+ }
208
+ }
209
+ });
210
+
211
+ const sap_virtual_warehouses = Object.values(unique_virtual_warehouses);
212
+ await commandLog
213
+ .addDetail(
214
+ `${sap_virtual_warehouses?.length} virtual warehouses changed since ever`
215
+ )
216
+ .commit();
217
+
218
+ const db_2 = new DataSet([], { autoIndex: false });
219
+ db_2.createIndex({ name: true, code: true, main_warehouses_codes: true });
220
+ db_2.load(Object.values(sap_virtual_warehouses));
221
+
222
+ for (let i = 0; i < sap_virtual_warehouses.length; i++) {
223
+ const sap_warehouse: { code: number; name: string } =
224
+ sap_virtual_warehouses[i];
225
+ const repzo_warehouse = repzo_warehouses.data.find(
226
+ (r_warehouse) =>
227
+ r_warehouse.integration_meta?.is_virtual_warehouse &&
228
+ (r_warehouse.integration_meta?.code ==
229
+ `Virtual ${sap_warehouse.code}` ||
230
+ r_warehouse.name == sap_warehouse.name)
231
+ );
232
+
233
+ const body: WarehouseBody = {
234
+ _id: repzo_warehouse?._id,
235
+ name: sap_warehouse.name,
236
+ code: `Virtual ${sap_warehouse.code}`,
237
+ type: "main",
238
+ disabled: false,
239
+ integration_meta: {
240
+ is_virtual_warehouse: true,
241
+ main_warehouses_codes:
242
+ unique_virtual_warehouses[sap_warehouse.code]
243
+ .main_warehouses_codes,
244
+ VIRTUALWAREHOUSECODE: sap_warehouse.code,
245
+ VIRTUALWAREHOUSENAME: sap_warehouse.name,
246
+ },
247
+ };
248
+
249
+ if (!repzo_warehouse) {
250
+ // Create
251
+ try {
252
+ const created_warehouse = await repzo.warehouse.create(body);
253
+ result.created++;
254
+ } catch (e: any) {
255
+ // console.log("Create warehouse Failed >> ", e?.response, body);
256
+ failed_docs_report.push({
257
+ method: "create",
258
+ doc: body,
259
+ error_message: set_error(e),
260
+ });
261
+ result.failed++;
262
+ }
263
+ } else {
264
+ const found_identical_docs = db_2.search({
265
+ code: repzo_warehouse.code,
266
+ name: repzo_warehouse.name,
267
+ main_warehouses_codes:
268
+ repzo_warehouse.integration_meta?.main_warehouses_codes || [],
269
+ });
270
+ if (found_identical_docs.length) continue; // Nothing has changed so no need for updates
271
+
272
+ // Update
273
+ try {
274
+ const updated_warehouse = await repzo.warehouse.update(
275
+ repzo_warehouse._id,
276
+ body
277
+ );
278
+ result.updated++;
279
+ } catch (e) {
280
+ // console.log("Update warehouse Failed >> ", e, body);
281
+ failed_docs_report.push({
282
+ method: "update",
283
+ doc_id: repzo_warehouse?._id,
284
+ doc: body,
285
+ error_message: set_error(e),
286
+ });
287
+ result.failed++;
288
+ }
289
+ }
290
+ }
291
+ }
292
+
160
293
  // console.log(result);
161
294
 
162
295
  await update_bench_time(
package/src/types.ts CHANGED
@@ -96,6 +96,10 @@ export interface FormData {
96
96
  SalPersCode?: string; // "111";
97
97
  SalesPersonCode?: string; // "111";
98
98
  measureUnitInjections?: { itemCode: string; uom: string }[];
99
+ virtualWarehouses?: {
100
+ consider_virtual_warehouse: boolean;
101
+ absolute_qty_for_virtual_warehouses_before_accumulation: boolean;
102
+ };
99
103
  invoices?: {
100
104
  createInvoiceHook?: boolean;
101
105
  createReturnInvoiceHook?: boolean;