I am working on a MEAN project in which I am trying to import the data from excel by converting the data using convertexceltojson plugin and then importing it into database . The entire frontend and backend code is attached. It i working fine. The data is getting imported but its getting imported twice. The function is being called twice. It is working find when I execute the same API using Postman but when done from link in my frontend, its creating problem. Can someone help ?
//// Frontend - HTML
<a class="dropdown-item" (click)="excelUploadOrder({'type': 'order'})" *ngIf="userData.permission === 'L3'">Import Order</a>
/// Frontend - Function and Service
excelUploadOrder(data1) {
this.salesService.excelUploadOrder(data1).subscribe((obj) => {
}, (error) => {
});
public excelUploadOrder(data1): Observable<any> {
return this.httpClient.post(`${environment.origin}/order/orderexcelToData`, data1).
pipe(catchError(this.handleError()));
}
/// BACKEND - Function to extract the excel to json and fill the data array
const excelToData = (req, res) => {
const type = req.body.type;
let path;
if (type === 'dc') {
path = "<my_excel_path>"
} else if (type === 'slip') {
path = "<my_excel_path>"
} else {
path = "<my_excel_path>"
}
const result = excelToJson({
sourceFile: path
});
if (result && result['Sheet1']) {
const data = []
for (let i = 1; i < result['Sheet1'].length; i++) {
const configForOrder = config.get(type);
for (var key in configForOrder) {
if (typeof configForOrder[key] !== 'string') {
for (var childobj of configForOrder[key]) {
for (var childKey in childobj) {
childobj[childKey] = typeChecker(childKey, result['Sheet1'][i][childobj[childKey].toUpperCase()])
if (childobj[childKey] === undefined) {
delete childobj[childKey];
}
}
}
} else {
configForOrder[key] = typeChecker(key, result['Sheet1'][i][configForOrder[key].toUpperCase()])
if (configForOrder[key] === undefined) {
delete configForOrder[key]
}
}
}
data.push(configForOrder)
}
if (type === 'order') {
orderModel.importData(data).then(res => {
}, error => {
})
} else if (type === 'slip') {
} else {
orderModel.importDC(data).then(res => {
}, error => {
})
}
}
}
/// BACKEND - Post the data into databse
const importData = (data) => {
return new Promise((resolved, reject) => {
db.getDocument(config.get('mongodb.database.db.collection.customer')).then((resp) => {
insetToDb(data, resp);
}, (error)=> {
reject(error)
})
});
}
const insetToDb = (orderData, customerData) => {
return new Promise((resolved, reject) => {
if(orderData) {
const order = orderData.pop();
if (order) {
order.material = order.displayMaterial
order.lamination = order.displayLamination
order.coating = order.displayCoating
order.emboss = order.displayEmboss
order.foil = order.displayFoil
order.rEmboss = order.displayREmboss
if(order.size && order.size.indexOf('*') > -1) {
const sizeLBH = order.size.split('*');
order.sizeL = parseInt(sizeLBH[0]) ;
if(sizeLBH[1] && sizeLBH[1].indexOf(' ') > -1){
const sizeBUnit = sizeLBH[1].split(' ');
order.sizeB = parseInt(sizeBUnit[0])
order.sizeUnit = sizeBUnit[1]
} else {
order.sizeB = parseInt(sizeLBH[1]);
}
if(sizeLBH[2] && sizeLBH[2].indexOf(' ') > -1){
const sizeHUnit = sizeLBH[2].split(' ');
order.sizeH = parseInt(sizeHUnit[0])
order.sizeUnit = sizeHUnit[1]
} else if (sizeLBH[2]){
order.sizeH = parseInt(sizeLBH[2]);
}
}
const customer = customerData.find(obj => obj.cId === order.customerId);
if(customer) {
order.customerId = customer._id.toString();
for(const location of order.deliveryDetails) {
const selectdLocation = customer.deliveryLocations.find(dLocation => dLocation.locationName === location.locationId)
if (selectdLocation) {
location.locationId = selectdLocation.id;
}
}
const selectdLedgers = customer.ledgers.find(dLocation => dLocation.name === order.customerLedger)
if (selectdLedgers) {
order.customerLedger = selectdLedgers.id;
}
}
saveOrder(order, customerData).then(res => {
insetToDb(orderData, customerData)
}, error => {
})
} else {
resolved(true)
}
} else {
resolved(true)
}
})
}