repzo-sap-absjo 1.0.54 → 1.0.55
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/lib/actions/create_invoice.js +55 -8
- package/lib/actions/create_proforma.js +67 -40
- package/lib/actions/create_return_invoice.js +46 -2
- package/lib/commands/adjust_inventory.js +221 -4
- package/lib/commands/rep.js +65 -29
- package/lib/commands/warehouse.js +149 -4
- package/lib/types.d.ts +4 -0
- package/package.json +1 -1
- package/src/actions/create_invoice.ts +11 -2
- package/src/actions/create_proforma.ts +12 -6
- package/src/actions/create_return_invoice.ts +10 -1
- package/src/commands/adjust_inventory.ts +167 -0
- package/src/commands/rep.ts +25 -1
- package/src/commands/warehouse.ts +134 -1
- package/src/types.ts +4 -0
package/src/commands/rep.ts
CHANGED
|
@@ -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?: {
|
|
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;
|