async Task <IEnumerable <Tuple <EntityEntry, TicketHistory> > > AuditNonTemporaryProperties() { ChangeTracker.DetectChanges(); var entitiesToTrack = ChangeTracker.Entries().Where(e => !(e.Entity is TicketHistory) && e.State != EntityState.Detached && e.State != EntityState.Unchanged && (e.Entity is Ticket)); await TicketHistories.AddRangeAsync( entitiesToTrack.Where(e => !e.Properties.Any(p => p.IsTemporary)).Select(e => new TicketHistory() { Action = Enum.GetName(typeof(EntityState), e.State), When = DateTime.Now, ApplicationUser = this._httpContextAccessor?.HttpContext?.User?.Identity?.Name, KeyValue = JsonConvert.SerializeObject(e.Properties.Where(p => p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()), NewValue = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Added || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()), OldValue = JsonConvert.SerializeObject(e.Properties.Where(p => e.State == EntityState.Deleted || e.State == EntityState.Modified).ToDictionary(p => p.Metadata.Name, p => p.OriginalValue).NullIfEmpty()) }).ToList() );; //Return list of pairs of EntityEntry and ToolAudit return(entitiesToTrack.Where(e => e.Properties.Any(p => p.IsTemporary)) .Select(e => new Tuple <EntityEntry, TicketHistory>( e, new TicketHistory() { Action = Enum.GetName(typeof(EntityState), e.State), When = DateTime.Now, ApplicationUser = this._httpContextAccessor?.HttpContext?.User?.Identity?.Name, NewValue = JsonConvert.SerializeObject(e.Properties.Where(p => !p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty()) } )).ToList()); }
public async Task <ActionResult> Create([Bind(Include = "Id, TicketId,FilePath,Description,UserId,FileUrl")] TicketAttachments ticketAttachments, HttpPostedFileBase attachment) { var ticketHistory = new TicketHistories(); var tickets = new Tickets(); var user = User.Identity.GetUserId(); var currentUser = db.Users.Find(user); //var ticketId = db.Tickets.FirstOrDefault(t => t.OwnerUserId == user).Id; var ticketOwnerId = db.Tickets.FirstOrDefault(t => t.OwnerUserId == user); ticketAttachments.UserId = currentUser.Id; if (FileUploadValidator.IsWebFriendlyFile(attachment)) { var absPath = Path.GetFileName(attachment.FileName); attachment.SaveAs(Path.Combine(Server.MapPath("~/Uploads/"), absPath)); ticketAttachments.FileUrl = "~/Uploads/" + absPath; if (ModelState.IsValid) { //Send Notification var developer = db.Users.Find(tickets.AssignedToUserId); if (developer != null && developer.Email != null) { var svc = new EmailService(); var msg = new IdentityMessage(); msg.Destination = developer.Email; msg.Subject = "Bug Tracker Update: " + tickets.Title; msg.Body = ("An attachment has been added to Ticket ID: " + tickets.Id + " - " + tickets.Title); await svc.SendAsync(msg); } //Ticket History ticketHistory.TicketId = ticketAttachments.TicketId; ticketHistory.Property = "Added Attachment"; ticketHistory.NewValue = "Added"; ticketHistory.UserId = ticketAttachments.UserId; ticketHistory.ChangeDate = DateTime.Now; ticketAttachments.Created = DateTime.Now; db.TicketHistories.Add(ticketHistory); db.TicketAttachments.Add(ticketAttachments); db.SaveChanges(); return(RedirectToAction("Index", "Tickets", new { id = ticketAttachments.TicketId })); } } else { ModelState.AddModelError("attachment", "Invalid Format."); } // } //} ViewBag.TicketId = new SelectList(db.Tickets, "Id", "Title", ticketAttachments.Id); ViewBag.UserId = new SelectList(db.Users, "Id", "FirstName", ticketAttachments.UserId); return(View(ticketAttachments)); }
public ActionResult DeleteConfirmed(int id) { TicketHistories ticketHistories = db.ticketHistories.Find(id); db.ticketHistories.Remove(ticketHistories); db.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Edit([Bind(Include = "Id,Name,Description,TicketTypeId,TicketPriorityId,TicketStatusId,CreatorId,AssigneeId,BugId")] Ticket ticket) { if (ModelState.IsValid) { var dateChanged = DateTimeOffset.Now; var changes = new List <TicketHistories>(); // db.Entry(ticket).State = EntityState.Modified; var DbTicket = db.Ticket.FirstOrDefault(p => p.Id == ticket.Id); DbTicket.Name = ticket.Name; DbTicket.Description = ticket.Description; DbTicket.TicketTypeId = ticket.TicketTypeId; DbTicket.Updated = dateChanged; var originalValues = db.Entry(DbTicket).OriginalValues; var currentValues = db.Entry(DbTicket).CurrentValues; foreach (var property in originalValues.PropertyNames) { var originalValue = originalValues[property]?.ToString(); var currentValue = currentValues[property]?.ToString(); if (originalValue != currentValue) { var history = new TicketHistories(); history.Changed = dateChanged; history.NewValue = GetValueFromKey(property, currentValue); history.OldValue = GetValueFromKey(property, originalValue); history.Property = property; history.TicketId = DbTicket.Id; history.UserId = User.Identity.GetUserId(); changes.Add(history); } } db.TicketHistories.AddRange(changes); db.SaveChanges(); if (DbTicket.AssigneeId != null) { var user = db.Users.FirstOrDefault(p => p.Id == DbTicket.AssigneeId); var personalEmailService = new PersonalEmailService(); var mailMessage = new MailMessage( WebConfigurationManager.AppSettings["emailto"], user.Email ); mailMessage.Body = "Edit Ticket by Developer"; mailMessage.Subject = "Edit Tickets"; mailMessage.IsBodyHtml = true; personalEmailService.Send(mailMessage); } return(RedirectToAction("Index")); } ViewBag.AssigneeId = new SelectList(db.Users, "Id", "FirstName", ticket.AssigneeId); ViewBag.BugId = new SelectList(db.Bugs, "Id", "Name", ticket.BugId); ViewBag.CreatorId = new SelectList(db.Users, "Id", "FirstName", ticket.CreatorId); ViewBag.TicketPriorityId = new SelectList(db.TicketPriority, "Id", "Name", ticket.TicketPriorityId); ViewBag.TicketStatusId = new SelectList(db.TicketStatus, "Id", "Name", ticket.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.TicketType, "Id", "Name", ticket.TicketTypeId); return(View(ticket)); }
public ActionResult Edit([Bind(Include = "Id,UpdateDate,TicketId,Property,OldValue,NewValue,UpdaterId")] TicketHistories ticketHistories) { if (ModelState.IsValid) { db.Entry(ticketHistories).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } return(View(ticketHistories)); }
public ActionResult Create([Bind(Include = "Id,UpdateDate,TicketId,Property,OldValue,NewValue,UpdaterId")] TicketHistories ticketHistories) { if (ModelState.IsValid) { db.TicketHistories.Add(ticketHistories); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(ticketHistories)); }
async Task AuditTemporaryProperties(IEnumerable <Tuple <EntityEntry, TicketHistory> > temporatyEntities) { if (temporatyEntities != null && temporatyEntities.Any()) { await TicketHistories.AddRangeAsync( temporatyEntities.ForEach(t => t.Item2.KeyValue = JsonConvert.SerializeObject(t.Item1.Properties.Where(p => p.Metadata.IsPrimaryKey()).ToDictionary(p => p.Metadata.Name, p => p.CurrentValue).NullIfEmpty())) .Select(t => t.Item2) ); await SaveChangesAsync(); } await Task.CompletedTask; }
public ActionResult Edit([Bind(Include = "Id,TicketId,property,oldValue,newValue,changed,UserId")] TicketHistories ticketHistories) { if (ModelState.IsValid) { db.Entry(ticketHistories).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.TicketId = new SelectList(db.tickets, "Id", "title", ticketHistories.TicketId); ViewBag.UserId = new SelectList(db.Users, "Id", "firstName", ticketHistories.UserId); return(View(ticketHistories)); }
public void AddHistory(int tId, string userID, string old, string newVal, string property) { TicketHistories TH = new TicketHistories(); TH.TicketId = tId; TH.UserId = userID; TH.OldValue = old; TH.NewValue = newVal; TH.Property = property; db.TicketHistories.Add(TH); db.SaveChanges(); }
public ActionResult Create([Bind(Include = "Id,TicketId,Property,OldValue,NewValue,Changed,UserId")] TicketHistories ticketHistories) { if (ModelState.IsValid) { db.TicketHistories.Add(ticketHistories); db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.TicketId = new SelectList(db.Tickets, "Id", "Title", ticketHistories.TicketId); ViewBag.UserId = new SelectList(db.Users, "Id", "FirstName", ticketHistories.UserId); return(View(ticketHistories)); }
// GET: TicketHistories/Details/5 public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } TicketHistories ticketHistories = db.ticketHistories.Find(id); if (ticketHistories == null) { return(HttpNotFound()); } return(View(ticketHistories)); }
// GET: TicketHistories/Edit/5 public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } TicketHistories ticketHistories = db.ticketHistories.Find(id); if (ticketHistories == null) { return(HttpNotFound()); } ViewBag.TicketId = new SelectList(db.tickets, "Id", "title", ticketHistories.TicketId); ViewBag.UserId = new SelectList(db.Users, "Id", "firstName", ticketHistories.UserId); return(View(ticketHistories)); }
public void RecordHistoricalChanges(Tickets oldTicket, Tickets newTicket) { if (oldTicket.TicketStatusId != newTicket.TicketStatusId) { var newHistoryRecord = new TicketHistories { Property = "TicketStatusId", OldValue = oldTicket.TicketStatus.StatusName, NewValue = newTicket.TicketStatus.StatusName, UpdateDate = (DateTime)newTicket.Updated, UpdaterId = HttpContext.Current.User.Identity.GetUserId(), TicketId = newTicket.Id }; db.TicketHistories.Add(newHistoryRecord); } if (oldTicket.TicketPriorityId != newTicket.TicketPriorityId) { var newHistoryRecord = new TicketHistories { Property = "TicketPriorityId", OldValue = oldTicket.TicketPriority.PriorityName, NewValue = newTicket.TicketPriority.PriorityName, UpdateDate = (DateTime)newTicket.Updated, UpdaterId = HttpContext.Current.User.Identity.GetUserId(), TicketId = newTicket.Id }; db.TicketHistories.Add(newHistoryRecord); } if (oldTicket.OwnerUserId != newTicket.OwnerUserId) { var newHistoryRecord = new TicketHistories { Property = "DeveloperId", OldValue = oldTicket.OwnerUser == null ? "UnAssigned" : oldTicket.OwnerUser.LastName, NewValue = newTicket.OwnerUser == null ? "UnAssigned" : newTicket.OwnerUser.LastName, UpdateDate = (DateTime)newTicket.Updated, UpdaterId = HttpContext.Current.User.Identity.GetUserId(), TicketId = newTicket.Id }; } db.SaveChanges(); }
public async Task <ActionResult> AssignUsers(TicketsViewModel model, int ticketId, Tickets tickets) { var ticket = db.Tickets.Find(ticketId); var oldTic = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id); var userId = User.Identity.GetUserId(); var userid = User.Identity.GetUserId(); var changed = System.DateTime.Now; ticket.AssignedToUserId = model.SelectedUsers; ticket.Updated = DateTimeOffset.Now; db.SaveChanges(); foreach (var user in model.SelectedUsers) { if (oldTic?.AssignedToUserId != ticket.AssignedToUserId) { string oldAssignedToUserId = oldTic.AssignedToUserId; string newAssignedToUser = db.Users.Find(ticket.AssignedToUserId).DisplayName; TicketHistories th6 = new TicketHistories { TicketId = ticket.Id, Property = "AssignedToUserId", OldValue = oldTic?.AssignedToUser.DisplayName, NewValue = ticket.AssignedToUser.DisplayName, Changed = changed, UserId = userid }; db.TicketHistories.Add(th6); db.SaveChanges(); } } ApplicationUser NotifyUser = db.Users.FirstOrDefault(u => u.Id.Equals(tickets.AssignedToUserId)); //ApplicationUser NotifyUser = db.Users.Find(ticket.AssignedToUserId); if (NotifyUser != null /*|| !(await UserManager.IsEmailConfirmedAsync(user.Id))*/) { var callBackUrl = Url.Action("Details", "Tickets", new { id = tickets.Id }, protocol: Request.Url.Scheme); await UserManager.SendEmailAsync(NotifyUser.Id, "Ticket Update" + tickets.Id, "Good day, this is a notification that you have been assigned to this <a href=\"" + callBackUrl + "\">ticket</a>."); } return(RedirectToAction("Index", "Projects", model)); }
public ActionResult Edit([Bind(Include = "Id,Description,Name,Created,Updated,PriorityId,StatusId,TypeId,CreatorId,AssignedId")] TicketModels ticketModels) { if (ModelState.IsValid) { var dateChanged = DateTimeOffset.Now; var changes = new List <TicketHistories>(); var dbTicket = db.TicketModels.First(p => p.Id == ticketModels.Id); dbTicket.Title = ticketModels.Title; dbTicket.Description = ticketModels.Description; dbTicket.TypeId = ticketModels.TypeId; dbTicket.Updated = dateChanged; var originalValues = db.Entry(dbTicket).OriginalValues; var currentValues = db.Entry(dbTicket).CurrentValues; foreach (var property in originalValues.PropertyNames) { var originalValue = originalValues[property]?.ToString(); var currentValue = currentValues[property]?.ToString(); if (originalValue != currentValue) { var history = new TicketHistories(); history.Changed = dateChanged; history.NewValue = GetValueFromKey(property, currentValue); history.OldValue = GetValueFromKey(property, originalValue); history.property = property; history.TicketId = dbTicket.Id; history.UserId = User.Identity.GetUserId(); changes.Add(history); } } db.TicketHistories.AddRange(changes); db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.AssigneeId = new SelectList(db.Users, "Id", "Name", ticketModels.AssignedId); ViewBag.CreatorId = new SelectList(db.Users, "Id", "Name", ticketModels.CreatorId); ViewBag.PriorityId = new SelectList(db.Priority, "Id", "Name", ticketModels.PriorityId); ViewBag.StatusId = new SelectList(db.Status, "Id", "Name", ticketModels.StatusId); ViewBag.TypeId = new SelectList(db.Type, "Id", "Name", ticketModels.TypeId); ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", ticketModels.ProjectId); return(View(ticketModels)); }
public static string ManageData(TicketHistories item, int index) { var data = " "; switch (item.Property) { case "ProjectId": data = index == 0 ? ProjectHelper.GetProjectNameById(Convert.ToInt32(item.OldValue)) : ProjectHelper.GetProjectNameById(Convert.ToInt32(item.NewValue)); break; case "AssignedToUserId": data = index == 0 ? UserHelper.GetDisplayNameFromId(item.OldValue) : UserHelper.GetDisplayNameFromId(item.NewValue); break; case "RoleId": data = index == 0 ? RoleHelper.GetRoleName(item.OldValue) : RoleHelper.GetRoleName(item.NewValue); break; case "TicketPriorityId": data = index == 0 ? TicketsHelper.GetTicketPriorityNameById(Convert.ToInt32(item.OldValue)) : TicketsHelper.GetTicketPriorityNameById(Convert.ToInt32(item.NewValue)); break; case "TicketStatusId": data = index == 0 ? TicketsHelper.GetTicketStatusNameById(Convert.ToInt32(item.OldValue)) : TicketsHelper.GetTicketStatusNameById(Convert.ToInt32(item.NewValue)); break; case "TicketTypeId": data = index == 0 ? TicketsHelper.GetTicketTypeNameById(Convert.ToInt32(item.OldValue)) : TicketsHelper.GetTicketTypeNameById(Convert.ToInt32(item.NewValue)); break; case "OwnerUserId": data = index == 0 ? UserHelper.GetDisplayNameFromId(item.OldValue) : UserHelper.GetDisplayNameFromId(item.NewValue); break; default: data = index == 0 ? item.OldValue : item.NewValue; break; } return(data); }
public void AddTicketHistory(Tickets OGticket, Tickets newTicket, string userId) { var unassignedUserEmail = WebConfigurationManager.AppSettings["Unassigned"]; var unassignedUserId = db.Users.AsNoTracking().First(u => u.Email == unassignedUserEmail).Id; foreach (var prop in typeof(Tickets).GetProperties()) { foreach (var ticket in new List <Tickets> { OGticket, newTicket }) { if (prop.Name.ToLower().Contains("UserId") && prop.GetValue(ticket) == null) { prop.SetValue(ticket, unassignedUserId, null); } } if (object.ReferenceEquals(prop.GetValue(OGticket), prop.GetValue(newTicket))) { continue; } if (prop.GetValue(OGticket).Equals(prop.GetValue(newTicket))) { continue; } var ticketHistory = new TicketHistories() { TicketId = OGticket.Id, Property = prop.ToString(), OldValue = prop.GetValue(OGticket).ToString(), NewValue = prop.GetValue(newTicket).ToString(), Changed = DateTimeOffset.Now, UserId = userId }; db.TicketHistory.Add(ticketHistory); db.SaveChanges(); } }
public ActionResult Edit([Bind(Include = "Id,Title,Description,Created,ProjectId,TicketTypeId,TicketPriorityId,TicketStatusId,AssigneeId")] Ticket ticket) { if (ModelState.IsValid) { var dateChanged = DateTimeOffset.Now; var changes = new List <TicketHistories>(); var dbTicket = db.Tickets.First(p => p.Id == ticket.Id); dbTicket.Title = ticket.Title; dbTicket.Description = ticket.Description; dbTicket.TicketTypeId = ticket.TicketTypeId; dbTicket.Updated = dateChanged; var originalValues = db.Entry(dbTicket).OriginalValues; var currentValues = db.Entry(dbTicket).CurrentValues; foreach (var property in originalValues.PropertyNames) { var originalValue = originalValues[property]?.ToString(); var currentValue = currentValues[property]?.ToString(); if (originalValue != currentValue) { var history = new TicketHistories(); history.Changed = dateChanged; history.NewValue = currentValue; history.OldValue = originalValue; history.Property = property; history.TicketId = dbTicket.Id; history.UserId = User.Identity.GetUserId(); changes.Add(history); } } db.TicketHistories.AddRange(changes); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(ticket)); }
public ActionResult Create([Bind(Include = "Id,AssignedToUserId,OwnerUserId,Title,Description,ProjectId,TicketTypeId,TicketStatusId,TicketPrioritiesId")] Tickets tickets) { TicketHistories ticketHistory = new TicketHistories(); if (ModelState.IsValid) { tickets.Created = DateTime.Now; //Create the initial ticket history entry ticketHistory.TicketId = tickets.Id; ticketHistory.Property = "Ticket Created"; ticketHistory.NewValue = "All"; ticketHistory.UserId = tickets.OwnerUserId; ticketHistory.ChangeDate = tickets.Created; db.Tickets.Add(tickets); db.TicketHistories.Add(ticketHistory); db.SaveChanges(); //db.Tickets.Add(tickets); //db.SaveChanges(); return(RedirectToAction("Index")); } else { var errors = ModelState.Values.SelectMany(v => v.Errors); } ViewBag.AssignedToUserId = new SelectList(db.Users, "Id", "FirstName", tickets.AssignedToUserId); ViewBag.OwnerUserId = new SelectList(db.Users, "Id", "FirstName", tickets.OwnerUserId); ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", tickets.ProjectId); ViewBag.TicketPrioritiesId = new SelectList(db.TicketPriorities, "Id", "Name", tickets.TicketPrioritiesId); ViewBag.TicketStatusId = new SelectList(db.TicketStatuses, "Id", "Name", tickets.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name", tickets.TicketTypeId); return(View(tickets)); }
public async Task <ActionResult> Create([Bind(Include = "Id,TicketId,Comment")] TicketComments ticketComments) { //Send Notification var developer = db.Users.Find(ticketComments.Ticket.AssignedToUser); if (developer != null && developer.Email != null) { var svc = new EmailService(); var msg = new IdentityMessage(); msg.Destination = developer.Email; msg.Subject = "Bug Tracker Update: " + ticketComments.Ticket.Title; msg.Body = ("A comment has been added to Ticket ID: " + ticketComments.Ticket.Id + " - " + ticketComments.Ticket.Title); await svc.SendAsync(msg); } var ticketHistory = new TicketHistories(); var user = User.Identity.GetUserId(); var currentUser = db.Users.Find(user); var ticketOwnerId = db.Tickets.FirstOrDefault(t => t.OwnerUserId == user); ticketHistory.TicketId = (int)TempData["ticketId"]; ticketHistory.Property = "Added Comment"; ticketHistory.NewValue = "Added"; ticketHistory.UserId = user; ticketHistory.ChangeDate = DateTime.Now; ticketComments.Created = DateTime.Now; ticketComments.UserId = User.Identity.GetUserId(); db.TicketHistories.Add(ticketHistory); db.Comments.Add(ticketComments); db.SaveChanges(); return(RedirectToAction("Index", "Tickets")); }
public void CheckForHistory(Tickets originalTicket, Tickets model) { //Check Description if (originalTicket.Description != model.Description) { var history = new TicketHistories { Property = "Description", Oldvalue = originalTicket.Description, NewValue = model.Description, TicketId = originalTicket.Id, UserId = HttpContext.Current.User.Identity.GetUserId(), Changed = DateTime.Now }; db.TicketHistories.Add(history); db.SaveChanges(); } //Check Status if (originalTicket.TicketStatusId != model.TicketStatusId) { var history = new TicketHistories { Property = "Staus", Oldvalue = originalTicket.TicketStatus.Name, NewValue = model.TicketStatus.Name, TicketId = originalTicket.Id, UserId = HttpContext.Current.User.Identity.GetUserId(), Changed = DateTime.Now }; db.TicketHistories.Add(history); db.SaveChanges(); } //Check Assigned User if (originalTicket.AssignedToUserId != model.AssignedToUserId) { var history = new TicketHistories(); history.Property = "Assigned User"; history.Oldvalue = DetermineAssignedUserName(originalTicket); history.NewValue = DetermineAssignedUserName(model); history.TicketId = originalTicket.Id; history.UserId = HttpContext.Current.User.Identity.GetUserId(); history.Changed = DateTime.Now; db.TicketHistories.Add(history); db.SaveChanges(); } //check Title if (originalTicket.Title != model.Title) { var history = new TicketHistories(); history.Property = "Title"; history.Oldvalue = DetermineAssignedUserName(originalTicket); history.NewValue = DetermineAssignedUserName(model); history.TicketId = originalTicket.Id; history.UserId = HttpContext.Current.User.Identity.GetUserId(); history.Changed = DateTime.Now; db.TicketHistories.Add(history); db.SaveChanges(); } }
public async Task <ActionResult> Assign([Bind(Include = "Id,AssignedToUserId,Created,OwnerUserId,Title,Description,ProjectId,TicketTypeId,TicketStatusId,TicketPrioritiesId")] Tickets tickets) { HistoryHelper historyHelper = new HistoryHelper(); StringBuilder updateMessage = new StringBuilder(); var oldTicketInfo = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == tickets.Id); if (oldTicketInfo.AssignedToUserId != tickets.AssignedToUserId && oldTicketInfo.AssignedToUserId != null) { var oldAssignedUser = db.Users.Find(oldTicketInfo.AssignedToUserId).FirstName + " " + db.Users.Find(tickets.AssignedToUserId).LastName; var newAssignedUser2 = db.Users.Find(tickets.AssignedToUserId).FirstName + " " + db.Users.Find(tickets.AssignedToUserId).LastName; historyHelper.AddHistory(tickets.Id, "Assigned User", oldAssignedUser, newAssignedUser2, User.Identity.GetUserId()); updateMessage.AppendFormat("Assigned User: {0}, ", newAssignedUser2); } if (oldTicketInfo.AssignedToUserId == null && oldTicketInfo.AssignedToUserId != tickets.AssignedToUserId) { var oldAssignedUser = "******"; var newAssignedUser3 = db.Users.Find(tickets.AssignedToUserId).FirstName + " " + db.Users.Find(tickets.AssignedToUserId).LastName; historyHelper.AddHistory(tickets.Id, "Assigned User", oldAssignedUser, newAssignedUser3, User.Identity.GetUserId()); updateMessage.AppendFormat("Assigned User: {0}, ", newAssignedUser3); } //Send Notification var developer = db.Users.Find(tickets.AssignedToUserId); if (developer != null && developer.Email != null) { var svc = new EmailService(); var msg = new IdentityMessage(); msg.Destination = developer.Email; msg.Subject = "Bug Tracker Update: " + tickets.Title + " Assigned"; msg.Body = ("The following Ticket ID: " + tickets.Id + " - " + tickets.Title + ": " + updateMessage); await svc.SendAsync(msg); } TicketHistories ticketHistory = new TicketHistories(); var old = TempData["oldVal"]; var owner = TempData["owner"]; var newAssignedUser = db.Users.Find(tickets.AssignedToUserId).FirstName; if (ModelState.IsValid) { ticketHistory.TicketId = tickets.Id; ticketHistory.Property = "Ticket Assigned"; ticketHistory.OldValue = old.ToString(); ticketHistory.NewValue = newAssignedUser; ticketHistory.UserId = tickets.OwnerUserId; ticketHistory.ChangeDate = tickets.Created; ticketHistory.Changed = true; db.TicketHistories.Add(ticketHistory); //db.SaveChanges(); tickets.Updated = DateTime.Now; tickets.OwnerUserId = owner.ToString(); tickets.TicketStatusId = 2; db.Entry(tickets).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.AssignedToUserId = new SelectList(db.Users, "Id", "FirstName", tickets.AssignedToUserId); ViewBag.OwnerUserId = new SelectList(db.Users, "Id", "FirstName", tickets.OwnerUserId); ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", tickets.ProjectId); ViewBag.TicketPrioritiesId = new SelectList(db.TicketPriorities, "Id", "Name", tickets.TicketPrioritiesId); ViewBag.TicketStatusId = new SelectList(db.TicketStatuses, "Id", "Name", tickets.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.TicketTypes, "Id", "Name", tickets.TicketTypeId); return(View(tickets)); }
public async Task <ActionResult> Edit([Bind(Include = "Id,Title,Description,Created,Updated,ProjectId,TicketTypeId,TicketAttachment,TicketPriorityId,TicketStatusId,OwnerUserId,AssignedToUserId")] Tickets tickets) { if (ModelState.IsValid) { ApplicationUser NotifyUser = db.Users.FirstOrDefault(u => u.Id.Equals(tickets.AssignedToUserId)); var oldTic = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == tickets.Id); tickets.Updated = DateTime.Now; db.Tickets.Attach(tickets); db.Entry(tickets).State = EntityState.Modified; db.SaveChanges(); //return RedirectToAction("Index"); var userid = User.Identity.GetUserId(); var changed = System.DateTime.Now; if (oldTic?.Title != tickets.Title) { TicketHistories th1 = new TicketHistories { TicketId = tickets.Id, Property = "Title", OldValue = oldTic?.Title, NewValue = tickets.Title, Changed = changed, UserId = userid }; db.TicketHistories.Add(th1); } if (oldTic?.Description != tickets.Description) { TicketHistories th2 = new TicketHistories { TicketId = tickets.Id, Property = "Description", OldValue = oldTic?.Description, NewValue = tickets.Description, Changed = changed, UserId = userid }; db.TicketHistories.Add(th2); } //if (oldTic?.AssignedToUserId != tickets.AssignedToUserId) //{ // string oldAssignedToUserId = oldTic.AssignedToUserId; // string newAssignedToUser = db.Users.Find(tickets.AssignedToUserId).DisplayName; // TicketHistories th6 = new TicketHistories // { // TicketId = tickets.Id, // Property = "AssignedToUserId", // OldValue = oldTic?.AssignedToUser.DisplayName, // NewValue = tickets.AssignedToUser.DisplayName, // Changed = changed, // UserId = userid // }; // db.TicketHistories.Add(th6); //} if (oldTic?.TicketStatusId != tickets.TicketStatusId) { string oldTicketStatus = oldTic.TicketStatus.Name; string newTicketStatus = db.TicketStatus.Find(tickets.TicketStatusId).Name; TicketHistories th3 = new TicketHistories { TicketId = tickets.Id, Property = "Ticket Status", OldValue = oldTicketStatus, NewValue = newTicketStatus, Changed = changed, UserId = userid }; db.TicketHistories.Add(th3); } if (oldTic?.TicketPriorityId != tickets.TicketPriorityId) { string oldTicketPriority = oldTic.TicketPriority.Name; string newTicketPriority = db.TicketPriority.Find(tickets.TicketPriorityId).Name; TicketHistories th4 = new TicketHistories { TicketId = tickets.Id, Property = "Ticket Priority", OldValue = oldTicketPriority, NewValue = newTicketPriority, Changed = changed, UserId = userid }; db.TicketHistories.Add(th4); } if (oldTic?.TicketTypeId != tickets.TicketTypeId) { string oldTicketType = oldTic.TicketType.Name; string newTicketType = db.TicketType.Find(tickets.TicketTypeId).Name; TicketHistories th5 = new TicketHistories { TicketId = tickets.Id, Property = "Ticket Type", OldValue = oldTicketType, NewValue = newTicketType, Changed = changed, UserId = userid }; db.TicketHistories.Add(th5); } db.SaveChanges(); //await notHelper.Noto(tickets); if (NotifyUser != null /*|| !(await UserManager.IsEmailConfirmedAsync(user.Id))*/) { var callBackUrl = Url.Action("Details", "Tickets", new { id = tickets.Id }, protocol: Request.Url.Scheme); await UserManager.SendEmailAsync(NotifyUser.Id, "Ticket Update" + tickets.Id, "Good day, this is a notification of changes to this <a href=\"" + callBackUrl + "\">ticket</a> you are assigned."); } return(RedirectToAction("Index")); } ViewBag.ProjectId = new SelectList(db.Project, "Id", "Name", tickets.ProjectId); ViewBag.TicketPriorityId = new SelectList(db.TicketPriority, "Id", "Name", tickets.TicketPriorityId); ViewBag.TicketStatusId = new SelectList(db.TicketStatus, "Id", "Name", tickets.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.TicketType, "Id", "Name", tickets.TicketTypeId); return(View(tickets)); }