public ActionResult Create([Bind(Include = "Id,Title,Description,Created,ProjectId,TicketTypeId,TicketPriorityId,TicketStatusId,OwnerId,AssignedId")] Ticket ticket, string Title, string Status, string Type, string Priority, string Project) { if (ModelState.IsValid) { var queryp = db.Priorities.AsQueryable(); var querys = db.Status.AsQueryable(); var querypr = db.Projects.AsQueryable(); var queryty = db.Types.AsQueryable(); if(!string.IsNullOrWhiteSpace(Priority)) { var queryt = queryp.Where(x => x.Priority == Priority).Select(y => y.Id).Single(); ticket.TicketPriorityId = queryt; } if(!string.IsNullOrWhiteSpace(Status)) { var queryt = querys.Where(x => x.Status == Status).Select(y => y.Id).Single(); ticket.TicketStatusId = queryt; } if(!string.IsNullOrWhiteSpace(Project)) { var queryt = querypr.Where(x => x.Project == Project).Select(y => y.Id).Single(); ticket.ProjectId = queryt; } if(!string.IsNullOrWhiteSpace(Type)) { var queryt = queryty.Where(x => x.Type == Type).Select(y => y.Id).Single(); ticket.TicketTypeId = queryt; } ticket.Title = Title; ticket.Created = System.DateTimeOffset.Now; ticket.OwnerId = User.Identity.GetUserId(); TicketNotify note = new TicketNotify(); note.TicketId = ticket.Id; note.NotifyUserId = ticket.OwnerId; db.Notifications.Add(note); UserRoleHelper helper = new UserRoleHelper(); var manager = db.ProjectUsers.Where(x => x.ProjectId == ticket.ProjectId).ToList(); foreach(var item in manager) { if(helper.IsUserInRole(item.ProjectUserId, "ProjectManager")) { TicketNotify note2 = new TicketNotify(); note2.TicketId = ticket.Id; note2.NotifyUserId = item.ProjectUserId; db.Notifications.Add(note2); } } var emails = db.Notifications.Where(x => x.TicketId == ticket.Id).Select(y => y.NotifyUser.Email).ToList(); var username = ConfigurationManager.AppSettings["SendGridUserName"]; var password = ConfigurationManager.AppSettings["SendGridPassword"]; var from = ConfigurationManager.AppSettings["ContactEmail"]; foreach (var email in emails) { SendGridMessage myMessage = new SendGridMessage(); myMessage.AddTo(email); myMessage.From = new MailAddress(from); myMessage.Subject = "Notification for Ticket #" + ticket.Id; myMessage.Html = "Ticket #" + ticket.Id + " has been created"; var credentials = new NetworkCredential(username, password); var transportWeb = new Web(credentials); transportWeb.DeliverAsync(myMessage); } db.Tickets.Add(ticket); db.SaveChanges(); return RedirectToAction("Index"); } return View(ticket); }
public ActionResult Edit([Bind(Include = "Id,Title,Description,Created,ProjectId,TicketTypeId,TicketPriorityId,TicketStatusId,OwnerId,AssignedId")] Ticket ticket, string Assigned, int ProjectIn) { bool sendemail = false; if (ModelState.IsValid) { if (!string.IsNullOrWhiteSpace(Assigned)) { var user = db.Users.Where(x => x.UserName == Assigned).Single(); ticket.AssignedId = user.Id; } ticket.ProjectId = ProjectIn; var dbin = db.Tickets.Single(x => x.Id == ticket.Id); db.Entry(dbin).CurrentValues.SetValues(ticket); var cnames = db.Entry(dbin).CurrentValues.PropertyNames; foreach (var curr in cnames) { var oldvalue = ""; var newvalue = ""; if (db.Entry(dbin).Property(curr).OriginalValue != null) { oldvalue = db.Entry(dbin).Property(curr).OriginalValue.ToString(); } if (db.Entry(dbin).Property(curr).CurrentValue != null) { newvalue = db.Entry(dbin).Property(curr).CurrentValue.ToString(); } if (oldvalue != newvalue) { TicketHistory hist = new TicketHistory(); hist.TicketFieldName = curr; hist.OldValue = oldvalue; hist.NewValue = newvalue; hist.HistoryUserId = User.Identity.GetUserId(); hist.TicketId = ticket.Id; hist.Changed = System.DateTimeOffset.Now; db.Histories.Add(hist); if(curr == "AssignedId" || curr == "TicketPriorityId" || curr == "TicketStatusId") { sendemail = true; } } } if (db.Entry(dbin).Property("AssignedId").CurrentValue != null) { if(!db.Entry(dbin).Property("AssignedId").OriginalValue.ToString().Equals(db.Entry(dbin).Property("AssignedId").CurrentValue.ToString())) { TicketNotify note = new TicketNotify(); note.TicketId = ticket.Id; note.NotifyUserId = ticket.AssignedId; db.Notifications.Add(note); db.SaveChanges(); } } if(sendemail) { var emails = db.Notifications.Where(x => x.TicketId == ticket.Id).ToList(); var username = ConfigurationManager.AppSettings["SendGridUserName"]; var password = ConfigurationManager.AppSettings["SendGridPassword"]; var from = ConfigurationManager.AppSettings["ContactEmail"]; foreach (var email in emails) { SendGridMessage myMessage = new SendGridMessage(); myMessage.AddTo(email.NotifyUser.Email); myMessage.From = new MailAddress(from); myMessage.Subject = "Notification for Ticket #" + ticket.Id; myMessage.Html = "Ticket #" + ticket.Id + " has been updated"; if (!string.IsNullOrWhiteSpace(ticket.AssignedId)) { if (ticket.AssignedId == email.NotifyUserId) { myMessage.Html = "Ticket #" + ticket.Id + " has been assigned to you or updated"; } } var credentials = new NetworkCredential(username, password); var transportWeb = new Web(credentials); transportWeb.DeliverAsync(myMessage); } } db.Entry(dbin).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } ViewBag.AssignedId = new SelectList(db.Users, "Id", "FirstName", ticket.AssignedId); ViewBag.OwnerId = new SelectList(db.Users, "Id", "FirstName", ticket.OwnerId); ViewBag.TicketPriorityId = new SelectList(db.Priorities, "Id", "Priority", ticket.TicketPriorityId); ViewBag.TicketStatusId = new SelectList(db.Status, "Id", "Status", ticket.TicketStatusId); ViewBag.TicketTypeId = new SelectList(db.Types, "Id", "Type", ticket.TicketTypeId); return View(ticket); }