Exemplo n.º 1
0
        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());
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
 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));
 }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
 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));
 }
Exemplo n.º 9
0
        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));
        }
Exemplo n.º 13
0
        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();
        }
Exemplo n.º 14
0
        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));
        }
Exemplo n.º 15
0
        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));
        }
Exemplo n.º 16
0
        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);
        }
Exemplo n.º 17
0
        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();
            }
        }
Exemplo n.º 18
0
        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));
        }
Exemplo n.º 19
0
        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));
        }
Exemplo n.º 20
0
        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"));
        }
Exemplo n.º 21
0
        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();
            }
        }
Exemplo n.º 22
0
        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));
        }
Exemplo n.º 23
0
        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));
        }