/// <summary> /// For Validating the time entry before saving /// </summary> /// <param name="dataAccessToken"></param> /// <param name="timeEntrySubmissionDetails"></param> /// <returns>ErrorBO</returns> private ErrorBO SubmitValidation(string dataAccessToken, string apiVersion, TimeEntrySubmissionBO timeEntrySubmissionDetails) { ErrorBO error = new ErrorBO(); try { CustomTerminologyBO customTerminology = GetCustomTerminology(Constants.CONSUMER_SECRET_TOKEN, dataAccessToken, apiVersion); // Validate Clientid, ProjectId, TaskId for required if (customTerminology != null) { if (string.IsNullOrEmpty(timeEntrySubmissionDetails.ClientId)) { error.Message = "Please select" + customTerminology.Client.Singular; return(error); } if (string.IsNullOrEmpty(timeEntrySubmissionDetails.ProjectId)) { error.Message = "Please select" + customTerminology.Project.Singular; return(error); } if (string.IsNullOrEmpty(timeEntrySubmissionDetails.TaskId)) { error.Message = "Please select" + customTerminology.Task.Singular; return(error); } } // Check Description for 4000 lenght if (!string.IsNullOrEmpty(timeEntrySubmissionDetails.Description)) { if (timeEntrySubmissionDetails.Description.Length > 4000) { error.Message = "Description cannot be greater than 4000 Characters."; return(error); } } // Check hours for greater than 0 if (!timeEntrySubmissionDetails.CalendarEntry) { if (timeEntrySubmissionDetails.Hours == 0.0) { error.Message = "Please Enter Total Hours"; return(error); } } // If Calendar entry check start/stop time for required and validity if (timeEntrySubmissionDetails.CalendarEntry) { if (string.IsNullOrEmpty(timeEntrySubmissionDetails.StartTime)) { error.Message = "Please Enter Start Time."; return(error); } if (string.IsNullOrEmpty(timeEntrySubmissionDetails.StopTime)) { error.Message = "Please Enter Stop Time."; return(error); } if (!Utility.IsValidTimeFormat(timeEntrySubmissionDetails.StartTime)) { error.Message = "Please enter valid start time."; return(error); } if (!Utility.IsValidTimeFormat(timeEntrySubmissionDetails.StopTime)) { error.Message = "Please enter valid stop time."; return(error); } if (!Utility.IsValidTime(Convert.ToDateTime(timeEntrySubmissionDetails.StartDate.ToShortDateString() + " " + timeEntrySubmissionDetails.StartTime), Convert.ToDateTime(timeEntrySubmissionDetails.EndDate.ToShortDateString() + " " + timeEntrySubmissionDetails.StopTime))) { error.Message = "Stop Time should be greater than Start Time"; return(error); } } return(error); } catch (Exception e) { logger.Log(LogLevel.Error, e); error.Message = e.Message; return(error); } }
/// <summary> /// For Updating time entry /// </summary> /// <param name="consumerSecretToken"></param> /// <param name="dataAccessToken"></param> /// <param name="version"></param> /// <param name="timeEntrySubmissionDetails"></param> /// <returns>IList<TimeEntryBO></returns> public IList <TimeEntryBO> UpdateTimeEntry(string consumerSecretToken, string dataAccessToken, string version, TimeEntrySubmissionBO timeEntrySubmissionDetails) { string fromDate = timeEntrySubmissionDetails.StartDate.ToString("yyyy-MM-dd"); timeEntrySubmissionDetails.Description = timeEntrySubmissionDetails.Description.Replace("\r", "\\r").Replace("\n", "\\n").Replace("\"", "'"); // Create Post Data CStringBuilder postData = new CStringBuilder(); postData.Append("{"); if (!string.IsNullOrEmpty(timeEntrySubmissionDetails.ClientId)) { postData.Append(string.Concat("\"ClientID\":\"", timeEntrySubmissionDetails.ClientId, "\",")); } postData.Append(string.Concat("\"ProjectID\":\"", timeEntrySubmissionDetails.ProjectId, "\",")); postData.Append(string.Concat("\"TaskID\":\"", timeEntrySubmissionDetails.TaskId, "\",")); postData.Append(string.Concat("\"EmployeeID\":\"", timeEntrySubmissionDetails.EmployeeId, "\",")); postData.Append(string.Concat("\"Date\":\"", fromDate, "\",")); // Convert start/stop time to 24 hours format if (!string.IsNullOrEmpty(timeEntrySubmissionDetails.StartTime)) { postData.Append(string.Concat("\"StartTime\":\"", Convert.ToDateTime(timeEntrySubmissionDetails.StartTime).ToString("HHmm"), "\",")); } if (!string.IsNullOrEmpty(timeEntrySubmissionDetails.StopTime)) { postData.Append(string.Concat("\"StopTime\":\"", Convert.ToDateTime(timeEntrySubmissionDetails.StopTime).ToString("HHmm"), "\",")); } postData.Append(string.Concat("\"Description\":\"", timeEntrySubmissionDetails.Description, "\",")); postData.Append(string.Concat("\"Billable\":\"", timeEntrySubmissionDetails.Billable ? "T" : "F", "\",")); postData.Append(string.Concat("\"TotalHours\":\"", timeEntrySubmissionDetails.Hours, "\",")); postData.Append("\"CustomFields\":"); postData.Append("["); StringBuilder innerPostData = new StringBuilder(); // For Custom Fields if (timeEntrySubmissionDetails.CustomFields != null && timeEntrySubmissionDetails.CustomFields.Count > 0) { foreach (CustomFieldSubmissionBO customField in timeEntrySubmissionDetails.CustomFields) { innerPostData.Append("{"); if (String.IsNullOrEmpty(customField.ID)) { innerPostData.Append(string.Concat("\"ID\":\"", "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF", "\",")); } else { innerPostData.Append(string.Concat("\"ID\":\"", customField.ID, "\",")); } innerPostData.Append(string.Concat("\"TemplateID\":\"", customField.TemplateID, "\",")); innerPostData.Append("\"Values\":"); innerPostData.Append("["); if (customField.Values != null) { foreach (ValueItemsSubmission item in customField.Values) { innerPostData.Append(string.Concat("\"", item.Value, "\",")); } innerPostData.Remove(innerPostData.Length - 1, 1); } innerPostData.Append("]"); innerPostData.Append("},"); } innerPostData.Remove(innerPostData.Length - 1, 1); } postData.Append(innerPostData.ToString()); postData.Append("]"); postData.Append("}"); // Create uri to hit and make request using Dovico.CommonLibrary CRestApiHelper.MakeAPIRequest method string uri = CRestApiHelper.BuildURI(string.Concat("TimeEntries/", timeEntrySubmissionDetails.TimeEntryId), null, version); string result = CRestApiHelper.MakeAPIRequest(uri, "PUT", CRestApiHelper.MIME_TYPE_APPLICATION_JSON, postData, consumerSecretToken, dataAccessToken); UtilityService.CheckErrorsInDovicoAPI(result); IList <TimeEntryBO> timeEntries = DeserializeObject(result).TimeEntries; return(timeEntries); }
/// <summary> /// Saves the Time Entry /// </summary> /// <param name="dataAccessToken"></param> /// <param name="timeEntrySubmissionDetails"></param> /// <returns>TimeEntryListBO</returns> public TimeEntryListBO SaveTimeEntry(string dataAccessToken, string apiVersion, TimeEntrySubmissionBO timeEntrySubmissionDetails) { ErrorBO output = null; TimeEntryListBO outputTimeEntries = new TimeEntryListBO(); try { // Calls the Validations before submitting data output = SubmitValidation(dataAccessToken, apiVersion, timeEntrySubmissionDetails); // If validations pass if (output != null && string.IsNullOrEmpty(output.Message)) { // Call SaveTimeEntry / UpdateTimeEntry of Integration layer based on timeentryId TimeEntryService integrationService = new TimeEntryService(); if (String.IsNullOrEmpty(timeEntrySubmissionDetails.TimeEntryId)) { outputTimeEntries.timeEntries = integrationService.SaveTimeEntry(Constants.CONSUMER_SECRET_TOKEN, UtilityService.DecryptedText(dataAccessToken), apiVersion, timeEntrySubmissionDetails); } else { outputTimeEntries.timeEntries = integrationService.UpdateTimeEntry(Constants.CONSUMER_SECRET_TOKEN, UtilityService.DecryptedText(dataAccessToken), apiVersion, timeEntrySubmissionDetails); } } else { outputTimeEntries.ErrorMessage = output.Message; } } catch (DovicoException e) { logger.Log(LogLevel.Error, e); outputTimeEntries.ErrorMessage = e.Message; } catch (Exception e) { logger.Log(LogLevel.Error, e); outputTimeEntries.ErrorMessage = "Error Saving Time Entry."; } return(outputTimeEntries); }