Skip to content

Commit 57e39f5

Browse files
committed
Adds append mode
1 parent 07d53d6 commit 57e39f5

File tree

1 file changed

+68
-16
lines changed

1 file changed

+68
-16
lines changed

index.js

Lines changed: 68 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ var opts = require('nomnom')
4040
abbr: 'm',
4141
full: 'only-members',
4242
flag: true
43+
},
44+
append: {
45+
help: 'Append tasks when exists the same project',
46+
abbr: 'a',
47+
flag: true
4348
}
4449
})
4550
.parse();
@@ -80,10 +85,10 @@ var getUniqueName = function getUniqueName(name, haystack) {
8085
}
8186
};
8287

83-
var convertMap = function convertToMap(data, map) {
88+
var convertMap = function convertMap(data, map) {
8489
if (_.isArray(data)) {
8590
return _.compact(_.map(data, id => {
86-
return convertToMap(id, map);
91+
return convertMap(id, map);
8792
}));
8893
}
8994

@@ -120,7 +125,9 @@ fs.readJson(opts.config).then(function (config) {
120125
var asanaData = {
121126
projects: [],
122127
tags: [],
123-
users: []
128+
users: [],
129+
tasks: [],
130+
sections: []
124131
};
125132

126133
var uploadImageToAsana = function (taskId, file, filename) {
@@ -224,6 +231,7 @@ fs.readJson(opts.config).then(function (config) {
224231
let labelToTagMap = {};
225232
let checklistMap = {};
226233
let userMap = {};
234+
let promise;
227235

228236
_.each(file.checklists, checklist => {
229237
checklistMap[checklist.id] = checklist;
@@ -233,26 +241,57 @@ fs.readJson(opts.config).then(function (config) {
233241
userMap[user.id] = user.name;
234242
});
235243

236-
// Creates a Project
237-
return client.projects.createInTeam(config.asana.team, {
238-
name: getUniqueName(file.name, _.pluck(asanaData.projects, 'name')),
239-
notes: file.desc,
240-
layout: 'board'
241-
}).then(result => {
242-
console.log(`Created ${result.name} project in your team.`);
243-
projectData = result;
244-
asanaData.projects.push(result);
244+
// Append tasks
245+
if (opts.append && _.contains(_.pluck(asanaData.projects, 'name'), file.name)) {
246+
projectData = _.find(asanaData.projects, project => {
247+
return project.name === file.name;
248+
});
249+
250+
promise = client.tasks.findByProject(projectData.id).then(fetch).then(tasks => {
251+
console.log(`Loaded exists ${tasks.length} tasks.`);
252+
asanaData.tasks = tasks;
253+
254+
return client.sections.findByProject(projectData.id);
255+
}).then(sections => {
256+
console.log(`Loaded exists ${sections.length} sections.`);
257+
asanaData.sections = sections;
258+
});
259+
} else {
260+
promise = client.projects.createInTeam(config.asana.team, {
261+
name: getUniqueName(file.name, _.pluck(asanaData.projects, 'name')),
262+
notes: file.desc,
263+
layout: 'board'
264+
}).then(result => {
265+
console.log(`Created ${result.name} project in your team.`);
266+
projectData = result;
267+
asanaData.projects.push(result);
268+
});
269+
}
270+
271+
return promise.then(function () {
272+
var filteredList = _.filter(file.lists, list => {
273+
var matchedSection = _.find(asanaData.sections, section => {
274+
return section.name === list.name;
275+
});
276+
277+
if (matchedSection) {
278+
listToSectionMap[list.id] = matchedSection.id;
279+
return false;
280+
} else {
281+
return true;
282+
}
283+
});
245284

246285
// Creates sections in order
247-
return Promise.mapSeries(file.lists, list => {
286+
return Promise.mapSeries(filteredList, list => {
248287
return client.sections.createInProject(projectData.id, {
249288
name: list.name
250289
}).then(result => {
251290
listToSectionMap[list.id] = result.id;
252291
console.log(`Created ${list.name} section.`);
253292
});
254293
});
255-
}).then(() => {
294+
}).then(function () {
256295
// Filter exists tags same with label
257296
var labels = _.filter(file.labels, label => {
258297
var matchedTag = _.find(asanaData.tags, tag => {
@@ -283,11 +322,24 @@ fs.readJson(opts.config).then(function (config) {
283322
}, {
284323
concurrency: 3
285324
}).then(function () {
286-
console.log(`Creating ${file.cards.length} tasks...`);
287325
let countTask = 0;
326+
var filteredCards = _.filter(file.cards, card => {
327+
var matchedTask = _.find(asanaData.tasks, task => {
328+
return task.name === card.name;
329+
});
330+
331+
if (matchedTask) {
332+
cardToTaskMap[card.id] = matchedTask.id
333+
return false;
334+
} else {
335+
return true;
336+
}
337+
});
338+
339+
console.log(`Creating ${filteredCards.length} of ${file.cards.length} tasks...`);
288340

289341
// Creates tasks
290-
return Promise.mapSeries(file.cards, card => {
342+
return Promise.mapSeries(filteredCards, card => {
291343
return client.tasks.create({
292344
assignee: card.idMembers.length ? convertMap(_.first(card.idMembers), config.member) : null,
293345
due_at: card.due,

0 commit comments

Comments
 (0)