public IEnumerable<TimeSheetItem> GetWorkItems(DateTime firstDayOfWeek, string userName) { List<TimeSheetItem> dbEntries; using (var appDbContext = new AppDbContext()) { dbEntries = appDbContext.TimeSheetItems .Where(t => t.FirstDayOfWeek.Equals(firstDayOfWeek) && t.UserName.Equals(_tfsDataService.UserUniqueName) && t.ServerUrl.Equals(_url) && t.Project.Equals(_project)) .OrderBy(t => t.Name) .ToList(); } var tfsEntries = _tfsDataService.GetWorkItems(firstDayOfWeek, userName); // All dbEntries that aren't available in tfs anymore are removed or closed foreach (var entry in dbEntries.Where(entry => !tfsEntries.Any(t => t.WorkItemId.Equals(entry.WorkItemId)))) { entry.IsClosed = true; } // Add all new tfsEntries foreach (var timeSheetItem in tfsEntries) { var dbEntry = dbEntries.SingleOrDefault(t => t.WorkItemId.Equals(timeSheetItem.WorkItemId)); if (dbEntry == null) { dbEntries.Add(new TimeSheetItem { WorkItemId = timeSheetItem.WorkItemId, Name = timeSheetItem.Name, WorkRemaining = timeSheetItem.WorkRemaining, FirstDayOfWeek = firstDayOfWeek }); } else { dbEntry.WorkRemaining = timeSheetItem.WorkRemaining; } } return dbEntries; }
public void SaveItem(TimeSheetItem timeSheetItem, string changedPropertyName) { if (timeSheetItem == null) { throw new ArgumentNullException("timeSheetItem"); } if (string.IsNullOrWhiteSpace(changedPropertyName)) { throw new ArgumentNullException("changedPropertyName"); } using (var transactionScope = new TransactionScope()) { using (var appDbContext = new AppDbContext()) { var original = appDbContext.TimeSheetItems .SingleOrDefault(t => t.WorkItemId.Equals(timeSheetItem.WorkItemId) && t.UserName.Equals(_tfsDataService.UserUniqueName)); // Create a new item when it doesn't exist in the Db if (original == null) { original = new TimeSheetItem { WorkItemId = timeSheetItem.WorkItemId, Project = _project, ServerUrl = _url, Name = timeSheetItem.Name, FirstDayOfWeek = timeSheetItem.FirstDayOfWeek, UserName = _tfsDataService.UserUniqueName }; appDbContext.TimeSheetItems.Add(original); } var property = typeof(TimeSheetItem).GetProperty(changedPropertyName); // Check if we're updating the effort if (property.PropertyType == typeof(DateTime)) { var delta = GetDateTimeDelta(timeSheetItem, original, property); _tfsDataService.UpdateWorkItemEffort(original.WorkItemId, delta); // Update the object with the delta and save it into the Db property.SetValue(original, Convert.ToDateTime(property.GetValue(original)).Add(delta)); appDbContext.SaveChanges(); } // Or if we're updating the state else if (property.Name.Equals("IsClosed")) { _tfsDataService.UpdateWorkItemClosedState(original.WorkItemId); appDbContext.SaveChanges(); } // Commit the entire transaction transactionScope.Complete(); } } }