public bool UpdateIssueFields(string issuekey, object fields)
        {
            var request = new RestRequest
            {
                Resource      = $"{ResourceUrls.IssueByKey(issuekey)}",
                Method        = Method.PUT,
                RequestFormat = DataFormat.Json,
            };

            //request.AddBody(
            //	new
            //	{
            //		update = fields
            //	});

            // Alternative for "simple" fields
            //request.AddBody(
            //	new { fields = new { customfield_11421 = "1.0.0" } }
            //);
            request.AddBody(fields);

            // No response expected
            var response = _client.Execute(request);

            ValidateResponse(response);

            return(response.StatusCode == HttpStatusCode.NoContent);
        }
        /// <summary>
        /// Returns the Issue with the specified key. If the fields parameter
        /// is specified only the given field names will be loaded. Issue
        /// contains the availible field names, for example Issue.SUMMARY. Throws
        /// a JiraApiException if the request was unable to execute.
        /// </summary>
        /// <param name="issueKey">Issue key</param>
        /// <param name="fields">Fields to load</param>
        /// <returns>
        /// The issue with the specified key or null if no such issue was found.
        /// </returns>
        public Issue GetIssue(string issueKey, IEnumerable <string> fields = null)
        {
            var fieldsString = ToCommaSeparatedString(fields);

            var request = new RestRequest();

            request.Resource = string.Format("{0}?fields={1}", ResourceUrls.IssueByKey(issueKey), fieldsString);
            request.Method   = Method.GET;

            var issue = Execute <Issue>(request, HttpStatusCode.OK);

            return(issue.fields != null ? issue : null);
        }
        /// <summary>
        /// Returns the Issue with the specified key. If the fields parameter
        /// is specified only the given field names will be loaded. Issue
        /// contains the availible field names, for example Issue.SUMMARY. Throws
        /// a JiraApiException if the request was unable to execute.
        /// </summary>
        /// <param name="issueKey">Issue key</param>
        /// <param name="fields">Fields to load</param>
        /// <returns>
        /// The issue with the specified key or null if no such issue was found.
        /// </returns>
        public Issue GetIssue(string issueKey, IEnumerable <string> fields = null)
        {
            var fieldsString = ToCommaSeparatedString(fields);

            var request = new RestRequest
            {
                Resource = $"{ResourceUrls.IssueByKey(issueKey)}?fields={fieldsString}",
                Method   = Method.GET
            };

            var issue = Execute <Issue>(request, HttpStatusCode.OK);

            return(issue.fields != null ? issue : null);
        }
        /// <summary>
        /// Update time tracking estimates
        /// </summary>
        /// <param name="issuekey"></param>
        /// <param name="orginialEstimateMinutes"></param>
        /// <param name="remainingEstimateMinutes"></param>
        /// <returns></returns>
        public bool UpdateTimetracking(string issuekey, int orginialEstimateMinutes, int remainingEstimateMinutes)
        {
            var request = new RestRequest()
            {
                Resource      = string.Format("{0}", ResourceUrls.IssueByKey(issuekey)),
                Method        = Method.PUT,
                RequestFormat = DataFormat.Json,
            };

            // Alternative for "simple" fields
            //request.AddBody(
            //    new { fields = new { summary = issue.fields.summary } }
            //);

            request.AddBody(
                new
            {
                update = new
                {
                    timetracking = new object[] { new
                                                  {
                                                      edit = new
                                                      {
                                                          // No entry in seconds possible apparently
                                                          originalEstimate  = string.Format("{0}m", orginialEstimateMinutes),
                                                          remainingEstimate = string.Format("{0}m", remainingEstimateMinutes)
                                                      }
                                                  } }
                }
            }
                );

            // No response expected
            var response = client.Execute(request);

            validateResponse(response);

            return(response.StatusCode == HttpStatusCode.NoContent);
        }