@angro/nav-connector
Version:
Node.js module which provides an interface for communicating with NAV online invoice service.
93 lines (77 loc) • 2.73 kB
JavaScript
const createBaseRequest = require('./create-base-request.js');
const sendRequest = require('./send-request.js');
/**
* Get the result of a previously sent manage invoice request.
* @async
* @param {Object} params Function params.
* @param {string} params.transactionId Manage invoice operation transaction id.
* @param {boolean} [params.returnOriginalRequest=false] Flag for api response to contain the original invoice.
* @param {Object} params.technicalUser Technical user’s data.
* @param {Object} params.softwareData Invoice software data.
* @param {Object} params.axios Axios instance.
* @returns {Promise<Array>} processingResults
*/
module.exports = async function queryTransactionStatus({
transactionId,
returnOriginalRequest = false,
technicalUser,
softwareData,
axios,
}) {
const request = createBaseRequest({
requestType: 'QueryTransactionStatusRequest',
technicalUser,
softwareData,
});
Object.assign(request.QueryTransactionStatusRequest, {
transactionId,
returnOriginalRequest,
});
const responseData = await sendRequest({
request,
axios,
path: '/queryTransactionStatus',
});
const { processingResults } = responseData.QueryTransactionStatusResponse;
/* Normalize processingResults to Array. */
if (!processingResults) {
return [];
}
let { processingResult } = processingResults;
if (!Array.isArray(processingResult)) {
processingResult = [processingResult];
}
processingResult.forEach(result => {
const {
index,
compressedContentIndicator,
technicalValidationMessages,
businessValidationMessages,
} = result;
/* eslint-disable no-param-reassign */
/* Type conversion. */
result.index = Number(index);
result.compressedContentIndicator = compressedContentIndicator === 'true';
/* Normalize technicalValidationMessages to Array. */
if (!technicalValidationMessages) {
result.technicalValidationMessages = [];
} else if (!Array.isArray(technicalValidationMessages)) {
result.technicalValidationMessages = [technicalValidationMessages];
}
/* Normalize businessValidationMessages to Array. */
if (!businessValidationMessages) {
result.businessValidationMessages = [];
} else if (!Array.isArray(businessValidationMessages)) {
result.businessValidationMessages = [businessValidationMessages];
}
/* Type conversion. */
result.businessValidationMessages.forEach(validationResult => {
const { pointer } = validationResult;
if (pointer && pointer.line) {
pointer.line = Number(pointer.line);
}
});
/* eslint-enable no-param-reassign */
});
return processingResult;
};