diff options
Diffstat (limited to 'models/csvCreator.js')
-rw-r--r-- | models/csvCreator.js | 102 |
1 files changed, 86 insertions, 16 deletions
diff --git a/models/csvCreator.js b/models/csvCreator.js index 025a3179..696d2205 100644 --- a/models/csvCreator.js +++ b/models/csvCreator.js @@ -50,6 +50,7 @@ export class CsvCreator { */ mapHeadertoCardFieldIndex(headerRow) { const index = {}; + index.customFields = []; for (let i = 0; i < headerRow.length; i++) { switch (headerRow[i].trim().toLowerCase()) { case 'title': @@ -98,9 +99,50 @@ export class CsvCreator { index.modifiedAt = i; break; } + if (headerRow[i].toLowerCase().startsWith('customfield')) { + if (headerRow[i].split('-')[2] === 'dropdown') { + index.customFields.push({ + name: headerRow[i].split('-')[1], + type: headerRow[i].split('-')[2], + options: headerRow[i].split('-')[3].split('/'), + position: i, + }); + } else { + index.customFields.push({ + name: headerRow[i].split('-')[1], + type: headerRow[i].split('-')[2], + position: i, + }); + } + } } this.fieldIndex = index; } + createCustomFields(boardId) { + this.fieldIndex.customFields.forEach(customField => { + let settings = {}; + if (customField.type === 'dropdown') { + settings = { + dropdownItems: customField.options.map(option => { + return { _id: Random.id(6), name: option }; + }), + }; + } else { + settings = {}; + } + const id = CustomFields.direct.insert({ + name: customField.name, + type: customField.type, + settings, + showOnCard: false, + automaticallyOnCard: false, + showLabelOnMiniCard: false, + boardIds: [boardId], + }); + customField.id = id; + customField.settings = settings; + }); + } createBoard(csvData) { const boardToCreate = { @@ -228,9 +270,10 @@ export class CsvCreator { const cardToCreate = { archived: false, boardId, - createdAt: csvData[i][this.fieldIndex.createdAt] - ? this._now(new Date(csvData[i][this.fieldIndex.createdAt])) - : null, + createdAt: + csvData[i][this.fieldIndex.createdAt] !== ' ' || '' + ? this._now(new Date(csvData[i][this.fieldIndex.createdAt])) + : null, dateLastActivity: this._now(), description: csvData[i][this.fieldIndex.description], listId: this.lists[csvData[i][this.fieldIndex.stage]], @@ -238,20 +281,24 @@ export class CsvCreator { sort: -1, title: csvData[i][this.fieldIndex.title], userId: this._user(), - startAt: csvData[i][this.fieldIndex.startAt] - ? this._now(new Date(csvData[i][this.fieldIndex.startAt])) - : null, - dueAt: csvData[i][this.fieldIndex.dueAt] - ? this._now(new Date(csvData[i][this.fieldIndex.dueAt])) - : null, - endAt: csvData[i][this.fieldIndex.endAt] - ? this._now(new Date(csvData[i][this.fieldIndex.endAt])) - : null, + startAt: + csvData[i][this.fieldIndex.startAt] !== ' ' || '' + ? this._now(new Date(csvData[i][this.fieldIndex.startAt])) + : null, + dueAt: + csvData[i][this.fieldIndex.dueAt] !== ' ' || '' + ? this._now(new Date(csvData[i][this.fieldIndex.dueAt])) + : null, + endAt: + csvData[i][this.fieldIndex.endAt] !== ' ' || '' + ? this._now(new Date(csvData[i][this.fieldIndex.endAt])) + : null, spentTime: null, labelIds: [], - modifiedAt: csvData[i][this.fieldIndex.modifiedAt] - ? this._now(new Date(csvData[i][this.fieldIndex.modifiedAt])) - : null, + modifiedAt: + csvData[i][this.fieldIndex.modifiedAt] !== ' ' || '' + ? this._now(new Date(csvData[i][this.fieldIndex.modifiedAt])) + : null, }; // add the labels if (csvData[i][this.fieldIndex.labels]) { @@ -290,7 +337,29 @@ export class CsvCreator { cardToCreate.members = wekanMembers; } } - Cards.direct.insert(cardToCreate); + // add the custom fields + if (this.fieldIndex.customFields.length > 0) { + const customFields = []; + this.fieldIndex.customFields.forEach(customField => { + if (csvData[i][customField.position] !== ' ') { + if (customField.type === 'dropdown') { + customFields.push({ + _id: customField.id, + value: customField.settings.dropdownItems.find( + ({ name }) => name === csvData[i][customField.position], + )._id, + }); + } else { + customFields.push({ + _id: customField.id, + value: csvData[i][customField.position], + }); + } + } + cardToCreate.customFields = customFields; + }); + Cards.direct.insert(cardToCreate); + } } } @@ -307,6 +376,7 @@ export class CsvCreator { const boardId = this.createBoard(board); this.createLists(board, boardId); this.createSwimlanes(boardId); + this.createCustomFields(boardId); this.createCards(board, boardId); return boardId; } |