Skip to content

Commit bc5e7fa

Browse files
committed
Merge pull request loveleif#13 from naxxxel/dev
method to update timetracking estimates
2 parents 19f2760 + 1ecfd70 commit bc5e7fa

File tree

2 files changed

+90
-13
lines changed

2 files changed

+90
-13
lines changed

JiraClient.cs

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,22 @@ public JiraClient(JiraAccount account)
4141
// Won't throw exception.
4242
var response = client.Execute<T>(request);
4343

44-
if (response.ResponseStatus != ResponseStatus.Completed || response.ErrorException != null)
45-
throw new JiraApiException(string.Format("RestSharp response status: {0} - HTTP response: {1} - {2} - {3}", response.ResponseStatus, response.StatusCode, response.StatusDescription, response.Content));
44+
validateResponse(response);
4645

4746
return response.Data;
4847
}
4948

49+
/// <summary>
50+
/// Throws exception with details if request was not unsucessful
51+
/// </summary>
52+
/// <typeparam name="T"></typeparam>
53+
/// <param name="response"></param>
54+
private static void validateResponse(IRestResponse response)
55+
{
56+
if (response.ResponseStatus != ResponseStatus.Completed || response.ErrorException != null || response.StatusCode == HttpStatusCode.BadRequest)
57+
throw new JiraApiException(string.Format("RestSharp response status: {0} - HTTP response: {1} - {2} - {3}", response.ResponseStatus, response.StatusCode, response.StatusDescription, response.Content));
58+
}
59+
5060
/// <summary>
5161
/// Returns a comma separated string from the strings in the provided
5262
/// IEnumerable of strings. Returns an empty string if null is provided.
@@ -75,11 +85,11 @@ private static string ToCommaSeparatedString(IEnumerable<string> strings)
7585
public Issue GetIssue(string issueKey, IEnumerable<string> fields = null)
7686
{
7787
var fieldsString = ToCommaSeparatedString(fields);
78-
88+
7989
var request = new RestRequest();
8090
request.Resource = string.Format("{0}?fields={1}", ResourceUrls.IssueByKey(issueKey), fieldsString);
8191
request.Method = Method.GET;
82-
92+
8393
var issue = Execute<Issue>(request, HttpStatusCode.OK);
8494
return issue.fields != null ? issue : null;
8595
}
@@ -148,7 +158,7 @@ public List<Project> GetProjects()
148158
};
149159

150160
return Execute<List<Project>>(request, HttpStatusCode.OK);
151-
}
161+
}
152162

153163
/// <summary>
154164
/// Returns a list of all possible priorities. Throws
@@ -174,10 +184,12 @@ public ProjectMeta GetProjectMeta(string projectKey)
174184
{
175185
var request = new RestRequest();
176186
request.Resource = ResourceUrls.CreateMeta();
177-
request.AddParameter(new Parameter()
178-
{ Name = "projectKeys",
179-
Value = projectKey,
180-
Type = ParameterType.GetOrPost });
187+
request.AddParameter(new Parameter()
188+
{
189+
Name = "projectKeys",
190+
Value = projectKey,
191+
Type = ParameterType.GetOrPost
192+
});
181193
request.Method = Method.GET;
182194
var createMeta = Execute<IssueCreateMeta>(request, HttpStatusCode.OK);
183195
if (createMeta.projects[0].key != projectKey || createMeta.projects.Count != 1)
@@ -231,7 +243,7 @@ public ApplicationProperty GetApplicationProperty(string propertyKey)
231243
Resource = ResourceUrls.ApplicationProperties(),
232244
RequestFormat = DataFormat.Json
233245
};
234-
246+
235247
request.AddParameter(new Parameter()
236248
{
237249
Name = "key",
@@ -274,6 +286,53 @@ public void DeleteAttachment(string attachmentId)
274286
var response = client.Execute(request);
275287
if (response.ResponseStatus != ResponseStatus.Completed || response.StatusCode != HttpStatusCode.NoContent)
276288
throw new JiraApiException("Failed to delete attachment with id=" + attachmentId);
289+
}
290+
291+
/// <summary>
292+
/// Update time tracking estimates
293+
/// </summary>
294+
/// <param name="issuekey"></param>
295+
/// <param name="orginialEstimateMinutes"></param>
296+
/// <param name="remainingEstimateMinutes"></param>
297+
/// <returns></returns>
298+
public bool UpdateTimetracking(string issuekey, int orginialEstimateMinutes, int remainingEstimateMinutes)
299+
{
300+
var request = new RestRequest()
301+
{
302+
Resource = string.Format("{0}", ResourceUrls.IssueByKey(issuekey)),
303+
Method = Method.PUT,
304+
RequestFormat = DataFormat.Json,
305+
};
306+
307+
// Alternative for "simple" fields
308+
//request.AddBody(
309+
// new { fields = new { summary = issue.fields.summary } }
310+
//);
311+
312+
request.AddBody(
313+
new
314+
{
315+
update = new
316+
{
317+
timetracking = new object[] {new
318+
{
319+
edit = new
320+
{
321+
// No entry in seconds possible apparently
322+
originalEstimate = string.Format("{0}m", orginialEstimateMinutes),
323+
remainingEstimate= string.Format("{0}m", remainingEstimateMinutes)
324+
}
325+
}}
326+
}
327+
}
328+
);
329+
330+
// No response expected
331+
var response = client.Execute(request);
332+
333+
validateResponse(response);
334+
335+
return response.StatusCode == HttpStatusCode.NoContent;
277336
}
278337
}
279338
}

JiraModel/Issue.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using AnotherJiraRestClient.JiraModel;
1+
using System;
2+
using AnotherJiraRestClient.JiraModel;
23
using System.Collections.Generic;
34

45
namespace AnotherJiraRestClient
@@ -59,15 +60,15 @@ public class BasicIssue
5960
public string key { get; set; }
6061
}
6162

62-
public class Fields
63+
public partial class Fields
6364
{
6465
public Progress progress { get; set; }
6566
public string summary { get; set; }
6667
public Timetracking timetracking { get; set; }
6768
public IssueType issuetype { get; set; }
6869
public Votes votes { get; set; }
6970
public Resolution resolution { get; set; }
70-
public List<object> fixVersions { get; set; }
71+
public List<fixversion> fixVersions { get; set; }
7172
public string resolutiondate { get; set; }
7273
public int timespent { get; set; }
7374
public Author reporter { get; set; }
@@ -98,6 +99,23 @@ public class Fields
9899
public int aggregatetimespent { get; set; }
99100
}
100101

102+
public class fixversion
103+
{
104+
public string self { get; set; }
105+
public string id { get; set; }
106+
public string name { get; set; }
107+
public string archived { get; set; }
108+
public string released { get; set; }
109+
public DateTime releaseDate { get; set; }
110+
}
111+
112+
public class customfield
113+
{
114+
public string self { get; set; }
115+
public string value { get; set; }
116+
public string id { get; set; }
117+
}
118+
101119
public class Subtask
102120
{
103121
public string id { get; set; }

0 commit comments

Comments
 (0)