public Models.ActionItem createNewActionItem(Models.Release release, Models.ActionItem toCreate) { SQLActionItem toSave = new SQLActionItem() { ActionItemTypeId = toCreate.CurrentType.ID, CreatedByUserId = toCreate.CreatedBy.ID, InReleaseId = release.ID, CurrentPriority = toCreate.CurrentPriority.Order, CurrentStatusId = toCreate.CurrentStatus.ID, DateCompleted = toCreate.DateCompleted, DateCreated = toCreate.DateCreated, Description = toCreate.Description, ID = toCreate.ID == Guid.Empty ? Guid.NewGuid() : toCreate.ID, Name = toCreate.Title, IndividualTargetDate = toCreate.TargetDate, Estimate = null, TimeSpent = null }; if (toCreate.Estimate.HasValue) toSave.Estimate = toCreate.Estimate.Value.Ticks; if (toCreate.TimeSpent.HasValue) toSave.TimeSpent = toCreate.TimeSpent.Value.Ticks; db.SQLActionItems.Add(toSave); db.SaveChanges(); return toCreate; }
public Models.ActionItem createNewActionItem(Models.User creator, Models.Release release, Models.ActionItem toCreate, Models.User assignedTo) { toCreate.AssignedTo = new List<Models.User>(){ assignedTo }; SQLActionItem toInsert = new SQLActionItem() { ActionItemTypeId = toCreate.CurrentType.ID, CreatedByUserId = toCreate.CreatedBy.ID, CurrentPriority = toCreate.CurrentPriority.Order, CurrentStatusId = toCreate.CurrentStatus.ID, DateCompleted = toCreate.DateCompleted, DateCreated = toCreate.DateCreated, Description = toCreate.Description, ID = toCreate.ID == Guid.Empty ? Guid.NewGuid() : toCreate.ID, Estimate = null, InReleaseId = release.ID, Name = toCreate.Title, TimeSpent = null }; #warning this should accept multiple users instead of just one SQLActionItemUser assignmentsToCreate = new SQLActionItemUser() { ActionItemId = toInsert.ID, AssignedToUserID = assignedTo.ID }; if (toCreate.Estimate.HasValue) toInsert.Estimate = toCreate.Estimate.Value.Ticks; if (toCreate.TimeSpent.HasValue) toInsert.TimeSpent = toCreate.TimeSpent.Value.Ticks; db.SQLActionItems.Add(toInsert); db.SaveChanges(); db.SQLActionItemUsers.Add(assignmentsToCreate); List<SQLActionItemHistory> historicEvents = new List<SQLActionItemHistory>(); if (toInsert.Estimate.HasValue) historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set estimate to: {0}", toInsert.Estimate.Value), ThingChanged = "Estimate" }); historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set type to: {0}", toInsert.ActionItemType.Name), ThingChanged = "Type" }); historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set priority to: {0}", toInsert.CurrentPriority), ThingChanged = "Priority" }); historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set status to: {0}", toInsert.Status.Name), ThingChanged = "Status" }); if (toInsert.DateCompleted.HasValue) historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set completion date to: {0}", toInsert.DateCompleted.Value), ThingChanged = "Date Completed" }); historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set action-item description: {0}", toInsert.Description), ThingChanged = "Description" }); if (toInsert.IndividualTargetDate.HasValue) historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set target date: {0}", toInsert.IndividualTargetDate.Value), ThingChanged = "Target Date" }); var toAdd = new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = "", ThingChanged = "Assigned To" }; foreach (var assignedUser in toInsert.ActionItemUsers) { if (assignedUser.User != null) toAdd.DescriptionOfChange += string.Format("{0},", assignedUser.User.Email); } historicEvents.Add(toAdd); historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set title to: {0}", toInsert.Name), ThingChanged = "Title" }); if (toInsert.TimeSpent.HasValue) historicEvents.Add(new SQLActionItemHistory() { ActionItemID = toInsert.ID, DescriptionOfChange = string.Format("set time spent to: {0}", toInsert.TimeSpent.Value), ThingChanged = "Time Spent" }); Guid createEventID = Guid.NewGuid(); foreach (var history in historicEvents) { history.ID = Guid.NewGuid(); history.ChangeGrouping = createEventID; history.ChangedWhen = toInsert.DateCreated; history.ChangedBy = creator.ID; db.SQLActionItemHistories.Add(history); } db.SaveChanges(); return toCreate; }
private List<SQLActionItemHistory> findDifferences(SQLActionItem oldItem, Models.ActionItem newItem) { List<SQLActionItemHistory> returnMe = new List<SQLActionItemHistory>(); var actionType = oldItem.GetType(); var properties = actionType.GetProperties(); #warning TODO: Use reflection for this when you have time to figure out how to easily get user-friendly names for properties //foreach (var prop in properties) //{ // var oldProp = prop.GetValue(oldItem); // var newProp = prop.GetValue(newItem); // if (oldProp != newProp) // { // returnMe.Add(new SQLActionItemHistory() // { // ActionItemID = newItem.ID, // DescriptionOfChange = newProp.ToString(), // ThingChanged = prop.Name, // ID = Guid.NewGuid() // }); // } //} if (oldItem.Estimate != (newItem.Estimate.HasValue ? newItem.Estimate.Value : new TimeSpan(0)).TotalMilliseconds) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = newItem.Estimate.HasValue ? string.Format("updated estimate to: {0}", newItem.Estimate.Value) : "removed estimate", ThingChanged = "Estimate" }); if (oldItem.ActionItemTypeId != newItem.CurrentType.ID) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = string.Format("updated type to: {0}", newItem.CurrentType.Title), ThingChanged = "Type" }); if (oldItem.CurrentPriority != newItem.CurrentPriority.Order) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = string.Format("updated priority to: {0}", newItem.CurrentPriority.Name), ThingChanged = "Priority" }); if (oldItem.Status.ID != newItem.CurrentStatus.ID) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = string.Format("updated status to: {0}", newItem.CurrentStatus.Name), ThingChanged = "Status" }); if (oldItem.DateCompleted != newItem.DateCompleted) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = oldItem.DateCompleted.HasValue ? (newItem.DateCompleted.HasValue ? string.Format("updated completed date / time to: {0}", newItem.DateCompleted.Value) : "removed completion date / time") : (newItem.DateCompleted.HasValue ? string.Format("added a completion date / time: {0}", newItem.DateCompleted.Value) : ""), ThingChanged = "Date Completed" }); if (oldItem.Description != newItem.Description) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = "updated action-item description", ThingChanged = "Description" }); if (oldItem.IndividualTargetDate != newItem.TargetDate) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = oldItem.IndividualTargetDate.HasValue ? (newItem.TargetDate.HasValue ? string.Format("updated target date / time to: {0}", newItem.TargetDate.Value) : "removed target date / time") : (newItem.TargetDate.HasValue ? string.Format("added a target date / time: {0}", newItem.TargetDate.Value) : ""), ThingChanged = "Target Date" }); if (oldItem.ActionItemUsers.Select(x => x.User.Email).OrderBy(y => y) != newItem.AssignedTo.Select(x => x.Email).OrderBy(y => y)) { var toAdd = new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = "", ThingChanged = "Assigned To" }; foreach (var assignedUser in oldItem.ActionItemUsers) { toAdd.DescriptionOfChange += string.Format("{0},", assignedUser.User.Email); } returnMe.Add(toAdd); } if (oldItem.Name != newItem.Title) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = string.Format("updated title to: {0}", newItem.Title), ThingChanged = "Title" }); if (newItem.TimeSpent != newItem.TimeSpent) returnMe.Add(new SQLActionItemHistory() { ActionItemID = oldItem.ID, DescriptionOfChange = newItem.TimeSpent.HasValue ? string.Format("updated time spent to: {0}", newItem.TimeSpent.Value) : "removed time spent", ThingChanged = "Time Spent" }); return returnMe; }