UNPKG

@adncorp/account-book-parser-adapter

Version:

parsing sheet adapter for account book

151 lines (126 loc) 5.14 kB
"use strict"; /* eslint-disable spellcheck/spell-checker */ /** * Build by modifying te following package source code : https://github.com/rahil471/node-xls-json */ var xlsx = require('xlsx'); var cvcsv = require('csv'); var fileUtils = require('../utils/fileUtils.js'); var xlsxTocsv = require('../utils/xlsxTocsv.js'); // eslint-disable-next-line camelcase exports = module.exports = XLSXJson; var lastRowIndex; function XLSXJson(config, callback) { if (!config.input) { console.error('You miss an input file'); process.exit(1); } // eslint-disable-next-line no-unused-vars var cv = new CV(config, callback); } function CV(config, callback) { this.loadXlsx(config.input).then(function (wss) { var wb = wss; var ws = getWS(config, wb); // skip line and start à line var range = xlsx.utils.decode_range(ws['!ref']); range.s.r += config.skip === undefined || config.skip === null ? 0 : config.skip; lastRowIndex = range.e.r; ws['!ref'] = xlsx.utils.encode_range(range); var csv = getCSV(ws); cvjson(csv, config.lowerCaseHeaders, config.mapping, callback); })["catch"](function (err) { if (err) { callback(err, [], config.lowerCaseHeaders); } else { callback(null, [], config.lowerCaseHeaders); } }); } CV.prototype.loadXlsx = function (input) { if (fileUtils.isUri(input)) { return new Promise(function (resolve, reject) { fileUtils.readFileUri(input).then(function (data) { resolve(xlsx.read(data, { type: 'buffer' })); })["catch"](function (err) { reject(err); }); }); } return new Promise(function (resolve) { resolve(xlsx.readFile(input)); }); }; var getWS = function getWS(config, wb) { var targetSheet = config.sheet; if (targetSheet == null) { targetSheet = wb.SheetNames[0]; } var ws = wb.Sheets[targetSheet]; return ws; }; var getCSV = function getCSV(ws) { var csvFile = xlsxTocsv.sheet_to_csv(ws); return csvFile; }; var cvjson = function cvjson(csv, lowerCaseHeaders, mapping, callback, settings) { var record = []; var compte = ''; var values = []; var tour = 1; var columnMap = mapping === undefined || mapping === null ? [] : mapping.slice(0); // clone var header = columnMap; var validateHeader = true; cvcsv().from.string(csv).on('record', function (row, index) { if (index === 0) { if (row[1] === undefined || row[1] === '' || row[1] === null || row[5] === undefined || row[5] === '' || row[5] === null || row[6] === undefined || row[6] === '' || row[6] === null) { validateHeader = false; } else if (row[1].trim().toUpperCase() !== header[1].trim().toUpperCase() && row[5].trim().toUpperCase() !== header[5].trim().toUpperCase() && row[6].trim().toUpperCase() !== header[6].trim().toUpperCase()) { validateHeader = false; } } if (validateHeader) { if (index > 0) { if (row[0].trim().toLowerCase() !== 'total'.toLowerCase()) { var object = {}; if (tour === 1) { compte = row[0].trim(); tour++; } else if (tour === 2) { // rien à faire tour++; } else { header.forEach(function (column, index) { var key = lowerCaseHeaders ? column.trim().toLowerCase() : column.trim(); if (key.trim() !== '') { object[key] = row[index].trim(); } }); // ajout des données relatives à un compte values.push(object); // console.log(values } } else if (index !== lastRowIndex) { // console.log(row[0].toLowerCase()) var accountbookobject = {}; var debit = row[5].trim() === '' ? 0 : row[5].trim(); var credit = row[6].trim() === '' ? 0 : row[6].trim(); var cumul = row[7].trim() === '' ? 0 : row[7].trim(); // construction de l'objet accountbook accountbookobject.account = compte.split(' ')[0]; accountbookobject.account_label = compte.split(' ')[1] + (compte.split(' ')[2] === undefined ? '' : ' ' + compte.split(' ')[2]) + (compte.split(' ')[3] === undefined ? '' : ' ' + compte.split(' ')[3]) + (compte.split(' ')[4] === undefined ? '' : ' ' + compte.split(' ')[4]) + (compte.split(' ')[5] === undefined ? '' : ' ' + compte.split(' ')[5]) + (compte.split(' ')[6] === undefined ? '' : ' ' + compte.split(' ')[6]) + (compte.split(' ')[7] === undefined ? '' : ' ' + compte.split(' ')[7]); accountbookobject.values = values; accountbookobject.cumul_bal_debit = debit; accountbookobject.cumul_bal_credit = credit; accountbookobject.cumul_bal_total = cumul; record.push(accountbookobject); values = []; tour = 1; } } } }).on('end', function (count) { // when writing to a file, use the 'close' event // the 'end' event may fire before the file has been written callback(null, record, header); }).on('error', function (error) { console.error(error.message); }); }; //# sourceMappingURL=parser.js.map