-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
84 lines (69 loc) · 2.83 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class JiraApiClient {
constructor(apiKey, apiUrl, username, query) {
this.apiKey = apiKey;
this.apiUrl = apiUrl;
this.username = username;
this.query = query;
}
getJSON() {
const auth = 'Basic ' + utils.base64Encode(this.username + ":" + this.apiKey);
const response = utils.request(
this.apiUrl,
'GET',
{
'Authorization': auth,
'Content-Type': 'application/json'
},
{
"jql": this.query,
"maxResults": 1000,
}
);
const statusCode = response['statusCode'];
const result = response['result'];
if (statusCode === 200) {
return JSON.parse(result);
} else {
tyme.showAlert('Jira API Error', JSON.stringify(response));
return null;
}
}
}
class JiraImporter {
constructor(apiKey, apiUrl, username, query) {
this.apiClient = new JiraApiClient(apiKey, apiUrl, username, query);
}
start() {
const response = this.apiClient.getJSON();
const idPrefix = "jira-";
tyme.showAlert('Jira', 'Found ' + response.total + ' elements.');
const id = idPrefix + 0;
let tymeCategory = Category.fromID(id) ?? Category.create(id);
tymeCategory.name = "Jira";
response.issues.forEach(function (entry) {
const id = entry["id"];
// create for project
const project = entry.fields.project;
const projectId = idPrefix + project.id;
let tymeProject = Project.fromID(projectId) ?? Project.create(projectId);
tymeProject.name = project["key"];
tymeProject.defaultHourlyRate = 90;
tymeProject.category = tymeCategory;
// create tasks
const taskId = idPrefix + id;
let tymeTask = TimedTask.fromID(taskId) ?? TimedTask.create(taskId);
tymeTask.name = entry.key + ", " + entry.fields.summary.trim() + " (" + entry.fields.issuetype.name + ")";
tymeTask.isCompleted = entry.fields.status.name === "Done";
tymeTask.billable = true;
tymeTask.plannedDuration = entry.fields.timeoriginalestimate;
tymeTask.roundingMethod = 2; // int, down=0, nearest=1, up=2
tymeTask.roundingMinutes = 15;
if (entry.fields.duedate != null && entry.fields.duedate !== "<null>") {
tymeTask.dueDate = new Date(entry.fields.duedate);
}
//tymeTask.startDate = new Date(entry.fields.created);
tymeTask.project = tymeProject;
}.bind(this));
}
}
const importer = new JiraImporter(formValue.jiraKey, formValue.jiraUrl, formValue.jiraUsername, formValue.jiraQuery);