From 8c149da9e920de3c1c15119030d24b0752769cfc Mon Sep 17 00:00:00 2001 From: Bryan Mutai Date: Tue, 26 May 2020 22:56:47 +0300 Subject: Fix vote export to CSV/TSV & export currency custom field. --- models/csvCreator.js | 11 +++++++++++ models/export.js | 4 ++-- models/exporter.js | 49 +++++++++++++++++++++++++++---------------------- 3 files changed, 40 insertions(+), 24 deletions(-) (limited to 'models') diff --git a/models/csvCreator.js b/models/csvCreator.js index 696d2205..72b8a3b4 100644 --- a/models/csvCreator.js +++ b/models/csvCreator.js @@ -107,6 +107,13 @@ export class CsvCreator { options: headerRow[i].split('-')[3].split('/'), position: i, }); + } else if (headerRow[i].split('-')[2] === 'currency') { + index.customFields.push({ + name: headerRow[i].split('-')[1], + type: headerRow[i].split('-')[2], + currencyCode: headerRow[i].split('-')[3], + position: i, + }); } else { index.customFields.push({ name: headerRow[i].split('-')[1], @@ -127,6 +134,10 @@ export class CsvCreator { return { _id: Random.id(6), name: option }; }), }; + } else if (customField.type === 'currency') { + settings = { + currencyCode: customField.currencyCode, + }; } else { settings = {}; } diff --git a/models/export.js b/models/export.js index c3783679..9dd03a38 100644 --- a/models/export.js +++ b/models/export.js @@ -85,10 +85,10 @@ if (Meteor.isServer) { ? exporter.buildCsv(params.query.delimiter) : exporter.buildCsv(); res.writeHead(200, { - 'Content-Length': body[0].length, + 'Content-Length': body.length, 'Content-Type': params.query.delimiter ? 'text/csv' : 'text/tsv', }); - res.write(body[0]); + res.write(body); res.end(); } else { res.writeHead(403); diff --git a/models/exporter.js b/models/exporter.js index 39e8aeca..b6188ece 100644 --- a/models/exporter.js +++ b/models/exporter.js @@ -37,7 +37,7 @@ export class Exporter { result.cards = Cards.find(byBoardNoLinked, noBoardId).fetch(); result.swimlanes = Swimlanes.find(byBoard, noBoardId).fetch(); result.customFields = CustomFields.find( - { boardIds: this.boardId }, + { boardIds: this._boardId }, { fields: { boardIds: 0 } }, ).fetch(); result.comments = CardComments.find(byBoard, noBoardId).fetch(); @@ -217,7 +217,6 @@ export class Exporter { const customFieldMap = {}; let i = 0; result.customFields.forEach(customField => { - customFieldMap[customField._id] = i; customFieldMap[customField._id] = { position: i, type: customField.type, @@ -225,11 +224,15 @@ export class Exporter { if (customField.type === 'dropdown') { let options = ''; customField.settings.dropdownItems.forEach(item => { - options = options === '' ? item.name : `/${options + item.name}`; + options = options === '' ? item.name : `${`${options}/${item.name}`}`; }); columnHeaders.push( `CustomField-${customField.name}-${customField.type}-${options}`, ); + } else if (customField.type === 'currency') { + columnHeaders.push( + `CustomField-${customField.name}-${customField.type}-${customField.settings.currencyCode}`, + ); } else { columnHeaders.push( `CustomField-${customField.name}-${customField.type}`, @@ -322,7 +325,7 @@ export class Exporter { currentRow.push( card.dateLastActivity ? moment(card.dateLastActivity).format() : ' ', ); - if (card.vote.question !== undefined) { + if (card.vote && card.vote.question !== '') { let positiveVoters = ''; let negativeVoters = ''; card.vote.positive.forEach(userId => { @@ -350,23 +353,25 @@ export class Exporter { //Custom fields const customFieldValuesToPush = new Array(result.customFields.length); card.customFields.forEach(field => { - if (customFieldMap[field._id].type === 'date') { - customFieldValuesToPush[customFieldMap[field._id].position] = moment( - field.value, - ).format(); - } else if (customFieldMap[field._id].type === 'dropdown') { - const dropdownOptions = result.customFields.find( - ({ _id }) => _id === field._id, - ).settings.dropdownItems; - const fieldValue = dropdownOptions.find( - ({ _id }) => _id === field.value, - ).name; - customFieldValuesToPush[ - customFieldMap[field._id].position - ] = fieldValue; - } else { - customFieldValuesToPush[customFieldMap[field._id].position] = - field.value; + if (field.value !== null) { + if (customFieldMap[field._id].type === 'date') { + customFieldValuesToPush[ + customFieldMap[field._id].position + ] = moment(field.value).format(); + } else if (customFieldMap[field._id].type === 'dropdown') { + const dropdownOptions = result.customFields.find( + ({ _id }) => _id === field._id, + ).settings.dropdownItems; + const fieldValue = dropdownOptions.find( + ({ _id }) => _id === field.value, + ).name; + customFieldValuesToPush[ + customFieldMap[field._id].position + ] = fieldValue; + } else { + customFieldValuesToPush[customFieldMap[field._id].position] = + field.value; + } } }); for ( @@ -383,7 +388,7 @@ export class Exporter { stringifier.write(currentRow); }); stringifier.end(); - return cardRows; + return cardRows[0]; } canExport(user) { -- cgit v1.2.3-1-g7c22