Untitled
unknown
plain_text
a year ago
30 kB
5
Indexable
import { ChangeDetectorRef, Component, ViewChild } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { MenuItem, MessageService } from 'primeng/api';
import { Api } from '../utils/Model/dashboard/api.interface';
import CommonFunctions from '../utils/Util/CommonFunctions';
import { ApiTemplateService } from './api-template.service';
import { FileUpload, FileUploadEvent } from 'primeng/fileupload';
import * as XLSX from 'xlsx';
import * as JsonToXML from "js2xmlparser";
import { FileSaverService } from 'ngx-filesaver';
import { Sheet } from '../utils/Model/dashboard/sheet.interface';
import { Constants } from '../utils/Constants/Constants';
import { CreateOutstandingBuilder } from '../utils/Model/builders/CreateOutstandingBuilder';
import { OutstandingGeneralData } from '../utils/Model/request/CreateOutstanding/model/OutstandingGeneralData';
import { Calendars } from '../utils/Model/request/CreateOutstanding/model/Calendars';
import { MisCodes } from '../utils/Model/request/CreateOutstanding/model/MisCodes';
import { AdjustForCloseGeneralData } from '../utils/Model/request/AdjustForClose/model/AdjustForCloseGeneralData';
import { AdjustForCloseBuilder } from '../utils/Model/builders/AdjustForCloseBuilder';
import { HttpEvent, HttpEventType } from '@angular/common/http';
import { SheetComponent } from '../utils/Model/dashboard/sheetComponent.interface';
import { AlterMISCodesBuilder } from '../utils/Model/builders/AlterMISCodesBuilder';
import { AlterMISCodesGeneralDataRequest } from '../utils/Model/request/AlterMISCodes/model/AlterMISCodesGeneralDataRequest';
@Component({
selector: 'app-api-template',
templateUrl: './api-template.component.html',
styleUrls: ['./api-template.component.scss'],
providers: [MessageService]
})
export class ApiTemplateComponent {
api!: Api;
loading: boolean = true;
isSend: boolean = false;
fileUploading: boolean = false;
tabs: Array<Sheet> = [];
visibleMsgArray: Array<boolean> = [];
checkSuccessArray: any = {};
checkCommentArray: any = {};
checkObjectArray: any = {};
checkSuccessArrayCopy: any = {};
checkCommentArrayCopy: any = {};
checkObjectArrayCopy: any = {};
requestArray: Array<any> = [];
activeIndex: number = 0;
items: MenuItem[] | undefined;
itemsSplit: MenuItem[] = [
{
label: 'Clear',
icon: 'pi pi-refresh',
command: () => {
this.clear();
}
}
];
home: MenuItem | undefined;
rows: any = {};
jsonToSend: any = {};
pasteMode: boolean = false;
constructor(
private changeDetection: ChangeDetectorRef,
private route: ActivatedRoute,
private apiTemplateService: ApiTemplateService,
private messageService: MessageService,
private fileSaverService: FileSaverService) { }
@ViewChild('fileUpload') fileUp!: FileUpload;
ngOnInit() {
let fileName = Constants.BLANK;
this.route.params.subscribe(params => {
fileName = params['fileName'];
});
this.apiTemplateService.getFile('assets/plantillas/' + fileName + '.json').subscribe({
next: (response) => {
this.api = JSON.parse(response);
},
error: (error) => console.error(error),
complete: () => {
console.log(fileName + ' loaded');
this.loading = false;
this.items = [{ label: this.api.apiName }];
this.home = { icon: 'pi pi-home', routerLink: '/dashboard' };
this.loadTabs();
}
});
}
ngAfterViewInit() {
this.fileUp.validate = (file: File): boolean => {
let fileType = false;
let acceptableTypes = this.fileUp.accept?.split(',').map((type) => type.trim());
for (let type of acceptableTypes!) {
let acceptable = this.fileUp.isWildcard(type) ? this.fileUp.getTypeClass(file.type) === this.fileUp.getTypeClass(type) : file.type == type || this.fileUp.getFileExtension(file).toLowerCase() === type.toLowerCase();
if (acceptable) {
fileType = true;
}
}
if (this.fileUp.accept && !fileType) {
this.messageService.add(CommonFunctions.createError(Constants.ERROR_HEADER,
this.fileUp.invalidFileTypeMessageSummary.replace('{0}', file.name) +
this.fileUp.invalidFileTypeMessageDetail.replace('{0}', this.fileUp.accept))
);
return false;
}
if (this.fileUp.maxFileSize && file.size > this.fileUp.maxFileSize) {
this.messageService.add(CommonFunctions.createError(Constants.ERROR_HEADER,
this.fileUp.invalidFileSizeMessageSummary.replace('{0}', file.name) +
this.fileUp.invalidFileSizeMessageDetail.replace('{0}', this.fileUp.formatSize(this.fileUp.maxFileSize)))
);
return false;
}
return true;
}
}
excelDateToJSDate(serial: string): Date {
let utc_days = Math.floor(Number(serial) - 25569);
let utc_value = utc_days * 86400;
let date_info = new Date(utc_value * 1000);
let fractional_day = Number(serial) - Math.floor(Number(serial)) + 0.0000001;
let total_seconds = Math.floor(86400 * fractional_day);
let seconds = total_seconds % 60;
total_seconds -= seconds;
let hours = Math.floor(total_seconds / (60 * 60));
let minutes = Math.floor(total_seconds / 60) % 60;
return new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);
}
capturarArchivo(event: FileUploadEvent) {
let misElementos: any[] = [];
const file: File = event.files[0];
if (file) {
let reader: FileReader = new FileReader();
reader.onloadend = (e) => {
let json = XLSX.read(reader.result, {
type: 'binary'
});
Object.keys(json.Sheets).forEach((element: any) => {
if (json.Sheets[element]) {
const elemento: HTMLElement | null = document.getElementById("table_" + element);
if (elemento) {
misElementos = this.transformarObjeto(json.Sheets[element]);
const filaImput: number = elemento.querySelectorAll('thead tr th').length;
const keys: number[] = Array.prototype.slice.call(Object.keys(misElementos));
if (keys.length > 0) {
const maxRows: number = Math.max(...keys) + 1;
let maxColumns: number = 0;
keys.forEach((columns: number) => {
const subKeys: number[] = Array.prototype.slice.call(Object.keys(misElementos[columns]));
if (Math.max(...subKeys) > maxColumns) {
maxColumns = Math.max(...subKeys);
}
});
if (maxColumns >= filaImput) {
this.messageService.add(CommonFunctions.createError(Constants.ERROR_HEADER, 'Bad excell format in the Page ' + element));
return;
}
this.rows[element] = maxRows;
this.changeDetection.detectChanges();
const inputElements: NodeListOf<Element> = elemento.querySelectorAll('tbody input');
keys.forEach((row: number) => {
const subKeys: number[] = Array.prototype.slice.call(Object.keys(misElementos[row]));
subKeys.forEach((column: number) => {
const input: any = inputElements[(+row) * filaImput + (+column)];
input['value'] = misElementos[row][column].value;
if (misElementos[row][column].date && (typeof misElementos[row][column].value) == 'number') {
input['value'] = this.excelDateToJSDate(misElementos[row][column].value.toString()).toLocaleDateString("en-GB");
}
});
});
}
} else {
this.messageService.add(CommonFunctions.createError(Constants.ERROR_HEADER, 'Bad name of the Page ' + element));
}
}
});
this.fileUploading = false;
}
reader.readAsBinaryString(file);
}
this.fileUp.clear();
}
getColumnNumber(column: string): number {
let result = 0;
for (let i = 0; i < column.length; i++) {
result *= 26;
result += column.charCodeAt(i) - 'A'.charCodeAt(0) + 1;
}
return result;
}
transformarObjeto(objetoOriginal: any): any {
let objetoTransformado: any = {};
for (let clave in objetoOriginal) {
if (clave !== "!ref" && clave !== "!margins") {
let partesClave = clave.match(/([A-Z]+)(\d+)/);
if (partesClave != null) {
let indiceFila = parseInt(partesClave[2]) - 1;
let indiceColumna = this.getColumnNumber(partesClave[1]) - 1;
if (!objetoTransformado[indiceFila]) {
objetoTransformado[indiceFila] = {};
}
objetoTransformado[indiceFila][indiceColumna] = {
"value": objetoOriginal[clave]["v"]
};
const formatoFechaRegex = /^\d+\/\d+\/\d+$/;
if (formatoFechaRegex.test(objetoOriginal[clave]["w"])) {
objetoTransformado[indiceFila][indiceColumna]["date"] = true;
objetoTransformado[indiceFila][indiceColumna]["value"] = objetoOriginal[clave]["v"];
}
}
}
}
delete objetoTransformado['0'];
Object.keys(objetoTransformado).forEach((key) => {
const newKey = (parseInt(key) - 1);
objetoTransformado[newKey] = objetoTransformado[key];
delete objetoTransformado[key];
});
console.log(objetoTransformado);
return objetoTransformado;
}
loadTabs() {
this.api.structure.forEach((element) => {
this.tabs.push(element);
});
}
getItems(tab: string) {
return this.api.structure.filter((sheet) => sheet.sheetName == tab)[0].sheetMap;
}
getNumRows(tab: string) {
if (this.rows[tab] == null || this.rows[tab] == undefined) {
this.rows[tab] = 1;
}
return Array(this.rows[tab]);
}
addRow(tab: string) {
this.rows[tab] += 1;
}
checkSuccess(i: number, tab: string): string {
return this.checkSuccessArray[tab][i];
}
showDialog(i: number) {
this.visibleMsgArray[i] = true;
}
getComment(i: number, tab: string): string {
let finalMsg: string = Constants.BLANK;
try {
this.checkCommentArray[tab][i].messagesList.forEach((element: { value: string; }) => {
finalMsg = finalMsg.concat(element.value);
finalMsg = finalMsg.concat(" # ");
});
} catch (error) {
//console.log('waiting') ONLY FOR DEVELOPMENT
}
return finalMsg;
}
removeRow(tab: string, msg?: boolean) {
if (this.rows[tab] != 1) {
this.rows[tab] -= 1;
} else {
this.isSend = false;
if (!msg) {
this.messageService.add(CommonFunctions.createWarn(Constants.WARN_HEADER, 'You can\'t delete more rows.'));
}
}
}
sendInfo() {
this.loading = true;
this.requestArray = [];
let regexCheck = true;
this.tabs.forEach((element) => {
this.deleteBlankRows(element);
if (regexCheck && this.isPageNotBlank(element)) {
if (this.isSend) {
this.checkSuccessArrayCopy[element.sheetName] = this.checkSuccessArray[element.sheetName];
this.checkCommentArrayCopy[element.sheetName] = this.checkCommentArray[element.sheetName];
this.checkObjectArrayCopy[element.sheetName] = this.checkObjectArray[element.sheetName];
}
this.checkSuccessArray[element.sheetName] = [];
this.checkCommentArray[element.sheetName] = [];
this.checkObjectArray[element.sheetName] = [];
this.jsonToSend[element.sheetName] = [];
const table = document.getElementById("table_" + element.sheetName);
if (table) {
const rows = Array.from(table.querySelectorAll('tbody > tr'));
rows.forEach((tr) => {
let tempJson: any = {};
const inputs = Array.from(tr.getElementsByTagName('input'));
inputs.forEach((input) => {
const header = input.getAttribute('header');
const value = input.value;
if (header != null) {
if (this.checkRequired(header, element.sheetName) && value === Constants.BLANK && regexCheck) {
regexCheck = false;
this.isSend = false;
this.handleError('Page ' + element.sheetName + ' ' + header + ' required inputs can\'t be empty');
} else if (value !== Constants.BLANK && input.checkValidity() === false && regexCheck) {
regexCheck = false;
this.isSend = false;
this.handleError('Page ' + element.sheetName + ' ' + header + ' validation error');
} else {
tempJson[header] = value;
}
}
});
if (Object.keys(tempJson).length !== 0) {
this.jsonToSend[element.sheetName].push(tempJson);
}
});
}
}
});
if (regexCheck && this.isPageNotBlank(this.tabs[0])) {
let finalRequest: any;
switch (this.api.endPoint) {
case '/api/loanDrawdown':
this.jsonToSend['OutstandingGeneralData'].forEach((jsonString: OutstandingGeneralData, index: number) => {
let arrayPrimaryKeys: Array<string> = ['aliasDealName', 'facilityName', 'alias'];
finalRequest = new CreateOutstandingBuilder().withOutstandingGeneralData(jsonString);
if (this.isPageNotBlank(this.tabs[1])) {
let arrayMisCodes: Array<MisCodes> = [];
this.jsonToSend['MisCodes'].forEach((misCodeJson: MisCodes) => {
if (this.checkPrimaryKeys(jsonString, misCodeJson, arrayPrimaryKeys)) {
arrayMisCodes.push(misCodeJson);
}
});
finalRequest = finalRequest.withMisCodes(arrayMisCodes);
}
if (this.isPageNotBlank(this.tabs[2])) {
let arrayCalendars: Array<Calendars> = [];
this.jsonToSend['HolidayCalendar'].forEach((calendarJson: Calendars) => {
if (this.checkPrimaryKeys(jsonString, calendarJson, arrayPrimaryKeys)) {
arrayCalendars.push(calendarJson);
}
});
finalRequest = finalRequest.withCalendars(arrayCalendars);
}
finalRequest = finalRequest.build();
if (finalRequest != null) {
finalRequest = this.limpiarObjeto(finalRequest);
console.log(finalRequest);
this.requestArray.push(finalRequest);
}
});
break;
case '/api/discount/adjustForClose':
this.jsonToSend['GeneralData'].forEach((jsonString: AdjustForCloseGeneralData, index: number) => {
finalRequest = new AdjustForCloseBuilder().withAdjustForCloseGeneralData(jsonString).build();
if (finalRequest != null) {
finalRequest = this.limpiarObjeto(finalRequest);
console.log(finalRequest);
this.requestArray.push(finalRequest);
}
});
break;
case '/api/alterMISCodes':
this.jsonToSend['GeneralData'].forEach((jsonString: AlterMISCodesGeneralDataRequest, index: number) => {
let arrayPrimaryKeys: Array<string> = ['ownerId'];
finalRequest = new AlterMISCodesBuilder().withAlterMISCodesGeneralDataRequest(jsonString);
if (this.isPageNotBlank(this.tabs[1])) {
let arrayMisCodes: Array<MisCodes> = [];
this.jsonToSend['MisCodes'].forEach((misCodeJson: MisCodes) => {
if (this.checkPrimaryKeys(jsonString, misCodeJson, arrayPrimaryKeys)) {
arrayMisCodes.push(misCodeJson);
}
});
finalRequest = finalRequest.withMisCodes(arrayMisCodes);
}
finalRequest = finalRequest.build();
if (finalRequest != null) {
finalRequest = this.limpiarObjeto(finalRequest);
console.log(finalRequest);
this.requestArray.push(finalRequest);
}
});
break;
default:
this.handleError('Api endpoint not found or this api is not implemented yet.');
break;
}
} else {
regexCheck = false;
this.isSend = false;
this.loading = false;
this.handleError('Page ' + this.tabs[0].sheetName + ' validation error');
}
this.doRequestsInBatch(this.requestArray);
}
async doRequest(finalRequest: any, index: number): Promise<any> {
this.setWait(index);
if (this.isSend &&
this.checkSuccessArrayCopy &&
this.checkSuccessArrayCopy[this.tabs[0].sheetName] &&
this.checkSuccessArrayCopy[this.tabs[0].sheetName][index] == Constants.TRUE) {
this.cloneValue(index);
this.loading = false;
return Promise.resolve();
} else {
return new Promise((resolve, reject) => {
this.apiTemplateService.postJson(this.api.endPoint, finalRequest).subscribe({
next: (response) => {
this.setResponse(index, response, finalRequest);
this.loading = false;
this.isSend = true;
resolve(response); // Resuelve la promesa con la respuesta
},
error: (error) => {
this.loading = false;
this.isSend = true;
console.error(error);
this.handleError(error);
reject(error); // Rechaza la promesa con el error
}
});
});
}
}
async doRequestsInBatch(requests: any[], startIndex: number = 0) {
if (startIndex >= requests.length) {
return;
}
const batch = requests.slice(startIndex, startIndex + Constants.OPEN_PORTS_NUMBER);
const promises = batch.map((request, index) => this.doRequest(request, startIndex + index));
await Promise.all(promises);
await this.doRequestsInBatch(requests, startIndex + Constants.OPEN_PORTS_NUMBER);
}
limpiarObjeto(obj: any): any {
for (const clave in obj) {
if (obj.hasOwnProperty(clave)) {
const valor = obj[clave];
if (valor == Constants.BLANK) {
delete obj[clave];
} else if (Array.isArray(valor)) {
obj[clave] = valor.map((elemento: any) => this.limpiarObjeto(elemento));
obj[clave] = obj[clave].filter((elemento: any) => {
return Object.keys(elemento).length > 0;
});
if (obj[clave].length === 0) {
delete obj[clave];
}
} else if (typeof valor === 'object') {
obj[clave] = this.limpiarObjeto(valor);
if (Object.keys(obj[clave]).length === 0) {
delete obj[clave];
}
}
}
}
return obj;
}
isPageNotBlank(page: Sheet): boolean {
const table = document.getElementById("table_" + page.sheetName);
if (table != null) {
const rows = Array.from(table.querySelectorAll('tbody > tr'));
if (rows.length > 1) {
return true;
}
const inputs = Array.from(rows[0].getElementsByTagName('input'));
return !inputs.every(input => input.value.trim() === Constants.BLANK);
}
return true;
}
deleteBlankRows(page: Sheet): void {
const tableId = "table_" + page.sheetName;
const table = document.getElementById(tableId);
if (table) {
const rows = Array.from(table.querySelectorAll('tbody > tr'));
if (rows.length > 1) {
const reverseRows = [...rows].reverse();
for (const row of reverseRows) {
const inputs = Array.from(row.querySelectorAll('input'));
if (inputs.every(input => input.value.trim() === Constants.BLANK)) {
this.removeRow(page.sheetName, true);
this.changeDetection.detectChanges();
}
}
}
}
}
checkPrimaryKeys(baseObject: any, objectToCheck: any, primaryKeys: Array<string>): boolean {
for (const objectKey of primaryKeys) {
if(objectToCheck[objectKey] == undefined) {
objectToCheck[objectKey] = Constants.BLANK;
}
if (baseObject[objectKey] != objectToCheck[objectKey]) {
return false;
}
}
return true;
}
handleError(message: string) {
this.loading = false;
this.messageService.add(CommonFunctions.createError(Constants.ERROR_HEADER, message));
}
onPaste(event: ClipboardEvent, tab: string) {
if (this.pasteMode) {
event.preventDefault();
const clipboardData = event.clipboardData;
if (clipboardData) {
const pastedText = clipboardData.getData('text');
const rows = pastedText.split('\r\n');
const table = rows.map(row => row.split('\t'));
const rowsOld = this.rows[tab];
this.rows[tab] += rows.length - 1;
this.changeDetection.detectChanges();
const tabElement = document.getElementById(`table_${tab}`);
if (!tabElement) {
return;
}
const inputElements = tabElement.querySelectorAll('tbody input');
const nInputPorFila = tabElement.querySelectorAll('tbody tr')[0].querySelectorAll('input').length;
let rowIndex = -1;
let columnIndex = -1;
inputElements.forEach((input, index) => {
if (input == event.target) {
rowIndex = Math.floor(index / nInputPorFila);
columnIndex = index % nInputPorFila;
if (rowsOld < rowIndex + table.length - 1) {
this.rows[tab] = rowIndex + table.length - 1;
} else {
this.rows[tab] = rowsOld;
}
}
});
if (rowIndex === -1 || columnIndex === -1) {
return;
}
if (columnIndex + table[0].length > nInputPorFila) {
this.rows[tab] = rowsOld;
this.messageService.add(CommonFunctions.createWarn(Constants.WARN_HEADER, 'You can\'t paste more column than the ones in the file.'));
return;
}
let rowCounter = 0;
for (let i = rowIndex; i < rowIndex + table.length - 1; i++) {
let colCounter = 0;
for (let j = columnIndex; j < columnIndex + table[0].length; j++) {
const input: any = inputElements[i * nInputPorFila + j];
input['value'] = table[rowCounter][colCounter];
colCounter++;
if (colCounter == table[0].length) {
colCounter = 0;
rowCounter++;
}
}
}
}
}
}
getCurrentSheetName(): string {
return this.tabs[this.activeIndex].sheetName;
}
checkRequired(input: string, sheet: string): boolean {
let ret = false;
this.api.structure.forEach((element) => {
if (element.sheetName == sheet) {
element.sheetMap.forEach((campos) => {
if (campos.keyName == input) {
ret = campos.required;
}
});
}
});
return ret;
}
clear() {
this.isSend = false;
this.api.structure.forEach((element) => {
this.rows[element.sheetName] = 1;
});
Array.prototype.slice.call(document.getElementsByTagName('input')).forEach((input) => {
input.value = Constants.BLANK;
});
}
customUpload() {
this.fileUploading = true;
this.fileUp.uploading = true;
this.fileUp.msgs = [];
let formData = new FormData();
this.fileUp.onBeforeUpload.emit({
formData: formData
});
for (let i = 0; i < this.fileUp.files.length; i++) {
formData.append(this.fileUp.name!, this.fileUp.files[i], this.fileUp.files[i].name);
}
this.apiTemplateService.postFile(
this.fileUp.method,
this.fileUp.url, formData,
this.fileUp.headers,
this.fileUp.withCredentials
).subscribe({
next: (event: HttpEvent<any>) => {
switch (event.type) {
case HttpEventType.Sent:
this.fileUp.onSend.emit({
originalEvent: event,
formData: formData
});
break;
case HttpEventType.Response:
this.fileUp.uploading = false;
this.fileUp.progress = 0;
if (event['status'] >= 200 && event['status'] < 300) {
if (this.fileUp.fileLimit) {
this.fileUp.uploadedFileCount += this.fileUp.files.length;
}
this.fileUp.onUpload.emit({ originalEvent: event, files: this.fileUp.files });
} else {
this.fileUp.onError.emit({ files: this.fileUp.files });
}
this.clear();
break;
case HttpEventType.UploadProgress: {
if (event['loaded']) {
this.fileUp.progress = Math.round((event['loaded'] * 100) / event['total']!);
}
this.fileUp.onProgress.emit({ originalEvent: event, progress: this.fileUp.progress });
break;
}
}
this.fileUp.cd.markForCheck();
},
error: (error: ErrorEvent) => {
this.fileUploading = false;
this.fileUp.uploading = false;
this.fileUp.onError.emit({ files: this.fileUp.files, error: error });
}
});
}
getUrl(): string {
return CommonFunctions.findEntorno(Number(localStorage.getItem('entornoId'))).getUrl() + "/api/upload";
}
downloadTemplate(): void {
this.apiTemplateService.getExcel('assets/templates/' + this.api.fileName + '.xlsx').subscribe({
next: (data) => {
const blob = new Blob([data], { type: 'application/vnd.ms-excel;charset=utf-8' });
this.fileSaverService.save(blob, this.api.fileName + '.xlsx');
},
error: (error) => console.error(error)
});
}
isSomeDataPending(): { icon: string, msg: string, disabled: boolean } {
let object: { icon: string, msg: string, disabled: boolean } = {
icon: "pi pi-database",
msg: "Results",
disabled: false
};
if (this.checkSuccessArray[this.tabs[0].sheetName].includes('wait')) {
object = {
icon: "pi pi-spin pi-cog",
msg: "Generating",
disabled: true
};
}
return object;
}
uploadIcon(): string {
let icono = this.fileUploading ? "pi-spin pi-spinner" : "pi-file-import";
return icono;
}
setWait(index: number) {
this.checkSuccessArray[this.tabs[0].sheetName][index] = Constants.WAIT;
this.checkCommentArray[this.tabs[0].sheetName][index] = Constants.WAIT;
this.checkObjectArray[this.tabs[0].sheetName][index] = Constants.WAIT;
}
cloneValue(index: number) {
this.checkSuccessArray[this.tabs[0].sheetName][index] = this.checkSuccessArrayCopy[this.tabs[0].sheetName][index];
this.checkCommentArray[this.tabs[0].sheetName][index] = this.checkCommentArrayCopy[this.tabs[0].sheetName][index];
this.checkObjectArray[this.tabs[0].sheetName][index] = this.checkObjectArrayCopy[this.tabs[0].sheetName][index];
}
setResponse(index: number, response: any, finalRequest: any) {
this.checkSuccessArray[this.tabs[0].sheetName][index] = JSON.parse(response).success;
this.checkCommentArray[this.tabs[0].sheetName][index] = JSON.parse(response).messages;
this.checkObjectArray[this.tabs[0].sheetName][index] = JSON.stringify(finalRequest);
}
getResultString(i: number, tab: string): string {
if (this.checkSuccessArray[tab][i] == Constants.TRUE) {
return "OK ✔️";
} else if (this.checkSuccessArray[tab][i] == Constants.FALSE) {
return "KO ❌";
} else if (this.checkSuccessArray[tab][i] == Constants.WAIT) {
return "IN PROGRESS";
}
return "NOT SENT";
}
downloadData(): void {
let resultado: Array<any> = [];
this.checkSuccessArray[this.tabs[0].sheetName].forEach((element: string, index: number) => {
let obj: any = {
row: index + 2,
response: this.getResultString(index, this.tabs[0].sheetName),
comments: this.getComment(index, this.tabs[0].sheetName)
}
let json = JSON.parse(this.checkObjectArray[this.tabs[0].sheetName][index]);
this.tabs.forEach((str: Sheet) => {
if(str.endpointObject in json) {
str.sheetMap.forEach((sheetComponent: SheetComponent) => {
if(!Array.isArray(json[str.endpointObject])) {
if(sheetComponent.keyName in json[str.endpointObject]) {
obj[str.endpointObject+ '_' +sheetComponent.keyName] = json[str.endpointObject][sheetComponent.keyName]
}
} else {
if(sheetComponent.keyName in json[str.endpointObject][0]) {
obj[str.endpointObject+ '_' +sheetComponent.keyName] = json[str.endpointObject][0][sheetComponent.keyName]
}
}
});
}
});
obj['json'] = this.checkObjectArray[this.tabs[0].sheetName][index];
resultado.push(obj);
});
const fileName = `${this.api.fileName}.xml`;
const fileType = this.fileSaverService.genType(fileName);
const txtBlob = new Blob([
JsonToXML.parse("resultados", { "resultado": resultado }, {
format: {
doubleQuotes: true
},
declaration: {
include: true,
encoding: 'UTF-8'
}
}
)], { type: fileType });
this.fileSaverService.save(txtBlob, fileName);
}
}
Editor is loading...
Leave a Comment