public static List <ReportingItemSummary> GetReportingItems(DateTime startDate, DateTime endDate, IEnumerable <string> fileNames) { //get all projects, tasks and users for efficiency (rather than looking each one up from file each time) List <Project> projs = OperationsReadOnly.GetAllProjects(); List <Task> tasks = OperationsReadOnly.GetAllTasks(); List <User> users = OperationsReadOnly.GetAllUsers(); List <ReportingItemSummary> results = new List <ReportingItemSummary>(); foreach (string currFile in fileNames) { List <TimeEntry> entries = AllTimeEntry.GetBetween(startDate, endDate, true, currFile); foreach (TimeEntry currEntry in entries) { ReportingItemSummary item = new ReportingItemSummary(); item.Details = currEntry.Details; item.EndDateTime = currEntry.EndDateTime; item.ExceptionDetails = currEntry.ExceptionDetails; item.ExceptionMinutes = currEntry.ExceptionMinutes; item.ProjectId = currEntry.ProjectId; Project prj = projs.Where(i => i.Id == currEntry.ProjectId).FirstOrDefault(); item.ProjectName = prj == null ? string.Empty : prj.Description; item.StartDateTime = currEntry.StartDateTime; item.TaskId = currEntry.TaskId; Task tsk = tasks.Where(i => i.Id == currEntry.TaskId).FirstOrDefault(); item.TaskName = tsk == null ? string.Empty : tsk.Description; item.TimeEntryId = currEntry.TimeEntryId; item.TotalMinutes = currEntry.TotalMinutesMinusExceptions; User usr = users.Where(i => i.UserId == currEntry.UserId).FirstOrDefault(); item.UserDisplayName = usr == null ? string.Empty : usr.DisplayName; item.UserId = currEntry.UserId; results.Add(item); } } return(results); }
public static List <ReportingGoalSummary> GetReportingGoals(DateTime startDate, DateTime endDate, IEnumerable <string> fileNames) { //get all users for efficiency (rather than looking each one up from file each time) List <User> users = OperationsReadOnly.GetAllUsers(); List <ReportingGoalSummary> results = new List <ReportingGoalSummary>(); foreach (string currFile in fileNames) { List <Goal> entries = AllGoals.GetAllCompleteBetween(currFile, startDate, endDate); foreach (Goal currEntry in entries) { ReportingGoalSummary item = new ReportingGoalSummary(); item.ActualCompletionDate = currEntry.ActualCompletionDate; item.Completed = currEntry.Completed; item.Description = currEntry.Description; item.GoalId = currEntry.GoalId; item.Improvements = currEntry.Improvements; item.Positives = currEntry.Positives; item.ResultMeasure = currEntry.ResultMeasure; item.ResultMeasureRating = currEntry.ResultMeasureRating; item.ResultTimelinessRating = currEntry.ResultTimelinessRating; item.TargetCompletionDate = currEntry.TargetCompletionDate; item.TargetMeasure = currEntry.TargetMeasure; User usr = users.Where(i => i.UserId == currEntry.UserId).FirstOrDefault(); item.UserDisplayName = usr == null ? string.Empty : usr.DisplayName; item.UserId = currEntry.UserId; results.Add(item); } } return(results); }
public static List <ValidationMessage> SaveTimeEntry( ValidatableParameter <Guid> timeEntryId, ValidatableParameter <Guid> userId, ValidatableParameter <Guid> projectId, ValidatableParameter <Guid> taskId, ValidatableParameter <string> details, ValidatableParameter <DateTime?> startTime, ValidatableParameter <DateTime?> endTime, ValidatableParameter <int> exceptionMinutes, ValidatableParameter <string> exceptionDetail, out TimeEntry savedItem ) { savedItem = null; List <ValidationMessage> errors = new List <ValidationMessage>(); //check if user exists User usr = OperationsReadOnly.GetUser(userId.Value); if (usr == null) { errors.Add(new ValidationMessage { MessageText = string.Format("User with id '{0}' was not found", userId.Value.ToString()), Source = userId.Source }); } else { //check if project exists if (projectId.Value == Guid.Empty) { errors.Add(new ValidationMessage { MessageText = string.Format("Project must be selected"), Source = projectId.Source }); } else if (OperationsReadOnly.GetProjectForUser(projectId.Value, usr.UserId) == null) { //check if project exists for user errors.Add(new ValidationMessage { MessageText = string.Format("Project with id '{0}' is not associated with User '{1}'", projectId.Value.ToString(), userId.Value.ToString()), Source = projectId.Source }); } //check if task exists if (taskId.Value == Guid.Empty) { errors.Add(new ValidationMessage { MessageText = string.Format("Task must be selected"), Source = taskId.Source }); } else if (OperationsReadOnly.GetTaskById(taskId.Value, projectId.Value, usr.UserId) == null) { //check if project exists for user errors.Add(new ValidationMessage { MessageText = string.Format("Task with id '{0}' is not associated with Project '{1}' and/or User '{2}'", taskId.Value.ToString(), projectId.Value.ToString(), userId.Value.ToString()), Source = taskId.Source }); } } //check dates if (startTime.Value == null || !startTime.Value.HasValue) { errors.Add(new ValidationMessage { MessageText = string.Format("Start time must be supplied"), Source = startTime.Source }); } else if (endTime.Value == null || !endTime.Value.HasValue) { errors.Add(new ValidationMessage { MessageText = string.Format("End time was not supplied"), Source = endTime.Source }); } else { //we have both dates, compare if (startTime.Value >= endTime.Value) { errors.Add(new ValidationMessage { MessageText = string.Format("Start time must be before End time"), Source = startTime.Source }); errors.Add(new ValidationMessage { MessageText = string.Format("End time must be after Start time"), Source = endTime.Source }); } else { //check for overlaps List <TimeEntry> overlaps = OperationsReadOnly.GetTimeEntryForDateTimesRange(startTime.Value.Value, endTime.Value.Value, userId.Value); if (overlaps != null && overlaps.Count > 0) { foreach (TimeEntry currItem in overlaps) { if (currItem.TimeEntryId != timeEntryId.Value) { if (currItem.StartDateTime < startTime.Value.Value) { errors.Add(new ValidationMessage { MessageText = string.Format("Start time overlaps with another item, Project: {0}, Task: {1} with start time {2} and end time {3}", currItem.ProjectName, currItem.TaskName, currItem.StartDateTime.ToString(Constants.cstrDateFormatDisplay), currItem.EndDateTime.ToString(Constants.cstrDateFormatDisplay)), Source = startTime.Source }); } if (currItem.EndDateTime > endTime.Value.Value) { errors.Add(new ValidationMessage { MessageText = string.Format("End time overlaps with another item, Project: {0}, Task: {1} with start time {2} and end time {3}", currItem.ProjectName, currItem.TaskName, currItem.StartDateTime.ToString(Constants.cstrDateFormatDisplay), currItem.EndDateTime.ToString(Constants.cstrDateFormatDisplay)), Source = endTime.Source }); } } } } if (exceptionMinutes.Value > 0 && exceptionDetail.Value.Trim().Length == 0) { errors.Add(new ValidationMessage { MessageText = string.Format("Subtract description text must be entered if period in minutes is to be recorded"), Source = exceptionDetail.Source }); } //check for minutes empty but text not if (exceptionMinutes.Value <= 0 && exceptionDetail.Value.Trim().Length > 0) { errors.Add(new ValidationMessage { MessageText = string.Format("Subtract period in minutes must be entered if text is be recorded"), Source = exceptionMinutes.Source }); } int timeDifferenceMinutes = Convert.ToInt32(endTime.Value.Value.Subtract(startTime.Value.Value).TotalMinutes); if (exceptionMinutes.Value > timeDifferenceMinutes) { errors.Add(new ValidationMessage { MessageText = string.Format("Subtract period in minutes must be less than the total number of minutes spent on the task"), Source = exceptionMinutes.Source }); } //if ( exceptionEntries != null && exceptionEntries.Count > 0 ) //{ // //we have both dates, we can check exceptions // int timeDifferenceMinutes = Convert.ToInt32( endTime.Value.Value.Subtract( startTime.Value.Value ).TotalMinutes ); // bool hadOneGreater = false; // int totalExceptionMinutes = 0; // foreach ( ValidatableIntStringPair currEx in exceptionEntries ) // { // //Check for text empty but minutes not // if ( currEx.IntValue.Value > 0 && currEx.StringValue.Value.Trim().Length == 0 ) // { // errors.Add( new ValidationMessage { MessageText = string.Format( "Exception text must be entered if period in minutes is to be recorded" ), Source = currEx.StringValue.Source } ); // } // //check for minutes empty but text not // if ( currEx.IntValue.Value <= 0 && currEx.StringValue.Value.Trim().Length > 0 ) // { // errors.Add( new ValidationMessage { MessageText = string.Format( "Exception period in minutes must be entered if text is be recorded" ), Source = currEx.IntValue.Source } ); // } // //check if any one is greater then the actual task number of minutes // if ( currEx.IntValue.Value > 0 && currEx.IntValue.Value > timeDifferenceMinutes ) // { // errors.Add( new ValidationMessage { MessageText = string.Format( "An exception period must be less than than the total time spent on the task" ), Source = currEx.IntValue.Source } ); // hadOneGreater = true; // } // if ( !hadOneGreater && ( currEx.IntValue.Value > 0 ) ) // { // //if not one single one was greater than the tiem difference, check if the total minutes is greater // //than the actual task number of minutes - If so attach error to it (any any after it) // totalExceptionMinutes += currEx.IntValue.Value; // if ( totalExceptionMinutes >= timeDifferenceMinutes ) // { // errors.Add( new ValidationMessage { MessageText = string.Format( "The total exception period of all exceptions together must be less than the total time spent on the task" ), Source = currEx.IntValue.Source } ); // } // } // } //} } } if (errors.Count == 0) { AllTimeEntry dataItems = new AllTimeEntry(); TimeEntry item = new TimeEntry { EndDateTime = endTime.Value.Value, Details = details.Value, ProjectId = projectId.Value, StartDateTime = startTime.Value.Value, TaskId = taskId.Value, TimeEntryId = timeEntryId.Value, UserId = userId.Value, ExceptionDetails = exceptionDetail.Value, ExceptionMinutes = exceptionMinutes.Value }; if (timeEntryId.Value != Guid.Empty) { //update TimeEntry updItem = dataItems.Where(i => i.TimeEntryId == item.TimeEntryId).SingleOrDefault(); if (updItem == null) { throw new ApplicationException(string.Format("Time entry with id '{0}' not found", timeEntryId.Value.ToString())); } else { //save it dataItems.Remove(updItem); dataItems.Add(item); } } else { //add time entry item.TimeEntryId = Guid.NewGuid(); //set id dataItems.Add(item); } dataItems.Save(); savedItem = item; //set the saved item } return(errors); }