Пример #1
0
        private string GetEditedProperties(TicketCreateEditViewModel newValues, Ticket oldValues)
        {
            var properties = new List <string>
            {
                "Title", "Description", "DueDate",
                "AssignedTo", "ProjectId", "TicketPriorityId", "TicketStatusId",
                "TicketTypeId"
            };

            var editedProperties = new List <string>();

            foreach (var prop in properties)
            {
                var oldValue = oldValues.GetType().GetProperty(prop).GetValue(oldValues, null);
                var newValue = newValues.GetType().GetProperty(prop).GetValue(newValues, null);

                if (oldValue.ToString() != newValue.ToString())
                {
                    editedProperties.Add(prop);
                }
            }

            if (editedProperties.Count > 0)
            {
                var result = string.Join(", ", editedProperties);

                return("Edited " + result);
            }
            return(null);
        }
Пример #2
0
        public async Task <IActionResult> Edit(int id, TicketCreateEditViewModel ticketViewModel)
        {
            var userId = _userManager.GetUserId(User);

            if (id != ticketViewModel.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                var ticketToUpdate = await _unitOfWork.Tickets.GetById(ticketViewModel.Id);

                LogEditActivity(ticketViewModel, ticketToUpdate);

                _mapper.Map(ticketViewModel, ticketToUpdate);
                ticketToUpdate.UpdatedOn       = DateTime.Now;
                ticketToUpdate.UpdatedByUserId = userId;

                await _unitOfWork.Complete();

                return(RedirectToAction(nameof(Index)));
            }

            PrepareCreateEditViewModel(ref ticketViewModel);
            return(View(ticketViewModel));
        }
Пример #3
0
        public IActionResult Create()
        {
            var viewModel = new TicketCreateEditViewModel();

            PrepareCreateEditViewModel(ref viewModel);

            return(View(viewModel));
        }
Пример #4
0
 private void PrepareCreateEditViewModel(ref TicketCreateEditViewModel ticketCreateEditViewModel)
 {
     ticketCreateEditViewModel.AllAppUsers         = _userManager.Users.ToList();
     ticketCreateEditViewModel.AllProjects         = _unitOfWork.Projects.GetAllSynchronously();
     ticketCreateEditViewModel.AllTicketPriorities = _unitOfWork.TicketPriorities.GetAllSynchronously();
     ticketCreateEditViewModel.AllTicketStatuses   = _unitOfWork.TicketStatuses.GetAllSynchronously();
     ticketCreateEditViewModel.AllTicketTypes      = _unitOfWork.TicketTypes.GetAllSynchronously();
 }
        public IActionResult Create()
        {
            Product[] products = _context.Products.ToArray();
            TicketCreateEditViewModel model = new TicketCreateEditViewModel()
            {
                Ticket   = new Ticket(),
                Products = products.Select(x => new SelectListItem {
                    Value = x.ProductId.ToString(), Text = x.Name
                })
            };

            return(View(model));
        }
Пример #6
0
        private void LogEditActivity(TicketCreateEditViewModel newValues, Ticket oldValues)
        {
            string editedProperties = GetEditedProperties(newValues, oldValues);

            if (editedProperties != null)
            {
                var activityLog = new TicketActivityLog()
                {
                    ActivityDate        = DateTime.Now,
                    ActivityDescription = editedProperties,
                    TicketId            = oldValues.Id,
                    ApplicationUserId   = _userManager.GetUserId(User)
                };

                _unitOfWork.TicketActivityLogs.Add(activityLog);
            }
        }
        public async Task <IActionResult> Create(TicketCreateEditViewModel ticketModel)
        {
            var user = await GetCurrentUserAsync();

            if (ticketModel.Ticket.ProductId != 0)
            {
                var ticket = ticketModel.Ticket;
                ticket.Product = await _context.Products.SingleOrDefaultAsync(p => p.ProductId == ticket.ProductId);

                ticket.StatusId = 1;
                ticket.Status   = await _context.Statuses.SingleOrDefaultAsync(s => s.StatusId == 1);

                ticket.CreateDate = DateTime.Now;
                ticket.UpdateDate = DateTime.Now;
                ticket.PriorityId = 1;
                ticket.Priority   = await _context.Priorities.SingleOrDefaultAsync(s => s.PriorityId == 1);

                ticket.OwnerId = user.Id;
                ticket.Owner   = await _context.Users.SingleOrDefaultAsync(u => u.Id == ticket.OwnerId);

                if (ModelState.IsValid)
                {
                    await _userManager.AddToRoleAsync(user, "Owner");

                    user.OwnerTickets.Add(ticket);
                    _context.Tickets.Add(ticket);
                    _context.Users.Update(user);
                    await _context.SaveChangesAsync();

                    List <FileDetail> fileDetails = await FileUploadHelperExtensions.UploadFileAsync
                                                        (_hostingEnvironment,
                                                        _context,
                                                        ticket.TicketId,
                                                        Request.Form.Files);

                    ticket.FileDetails = fileDetails;
                    _context.Tickets.Update(ticket);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
            }
            return(View(ticketModel));
        }
        public async Task <IActionResult> Edit(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var ticket = await _context.Tickets.Include(u => u.Owner)
                         .Include(e => e.Employee)
                         .Include(m => m.Product)
                         .Include(f => f.FileDetails)
                         .Include(p => p.Priority)
                         .Include(s => s.Status)
                         .SingleOrDefaultAsync(m => m.TicketId == id);

            Product[]  products   = _context.Products.ToArray();
            Status[]   statuses   = _context.Statuses.ToArray();
            Priority[] priorities = _context.Priorities.ToArray();
            User[]     users      = _context.Users.Where(u => !String.IsNullOrEmpty(u.WorkerCardNumber) && !u.WorkerCardNumber.Equals("00-00")).ToArray();
            var        model      = new TicketCreateEditViewModel()
            {
                Ticket   = ticket,
                Products = products.Select(x => new SelectListItem {
                    Value = x.ProductId.ToString(), Text = x.Name, Selected = false
                }),
                Users = users.Select(x => new SelectListItem {
                    Value = x.Id.ToString(), Text = x.FullName, Selected = false
                }),
                Statuses = statuses.Select(x => new SelectListItem {
                    Value = x.StatusId.ToString(), Text = x.Name, Selected = false
                }),
                Priorities = priorities.Select(x => new SelectListItem {
                    Value = x.PriorityId.ToString(), Text = x.Name, Selected = false
                })
            };

            if (ticket == null)
            {
                return(NotFound());
            }
            return(View(model));
        }
Пример #9
0
        public async Task <IActionResult> Create(TicketCreateEditViewModel ticket)
        {
            if (ModelState.IsValid)
            {
                var userId = _userManager.GetUserId(User);
                ticket.ApplicationUserId = userId;
                ticket.CreatedOn         = DateTime.Now;
                ticket.UpdatedOn         = DateTime.Now;

                var ticketToAdd = _mapper.Map <TicketCreateEditViewModel, Ticket>(ticket);

                _unitOfWork.Tickets.Add(ticketToAdd);
                await _unitOfWork.Complete();

                return(RedirectToAction(nameof(Index)));
            }
            else
            {
                PrepareCreateEditViewModel(ref ticket);
                return(View(ticket));
            }
        }
        public async Task <IActionResult> Edit(int id, TicketCreateEditViewModel ticketModel)
        {
            var ticket = ticketModel.Ticket;

            if (ticket.ProductId != 0)
            {
                if (id != ticket.TicketId)
                {
                    return(NotFound());
                }
                var oldTicket = await _context.Tickets.SingleOrDefaultAsync(t => t.TicketId == ticket.TicketId);

                oldTicket.Title       = ticket.Title;
                oldTicket.Description = ticket.Description;
                if ((User.IsInRole("Admin") || User.IsInRole("Employee")) && (ticket.StatusId != 0 && ticket.PriorityId != 0))
                {
                    oldTicket.PriorityId = ticket.PriorityId;
                    oldTicket.Priority   = await _context.Priorities.SingleOrDefaultAsync(p => p.PriorityId == ticket.PriorityId);

                    oldTicket.StatusId = ticket.StatusId;
                    oldTicket.Status   = await _context.Statuses.SingleOrDefaultAsync(p => p.StatusId == ticket.StatusId);
                }
                oldTicket.UpdateDate = DateTime.Now;
                oldTicket.Product    = ticket.Product;
                oldTicket.Assigned   = ticket.Assigned;
                if (User.IsInRole("Admin") && (ticket.EmployeeId != null && ticket.EmployeeId != "0"))
                {
                    oldTicket.Assigned   = true;
                    oldTicket.EmployeeId = ticket.EmployeeId;
                    oldTicket.Employee   = await _context.Users.SingleOrDefaultAsync(u => u.Id == oldTicket.EmployeeId);

                    oldTicket.Employee.EmployeeTickets.Add(oldTicket);
                    await _userManager.AddToRoleAsync(oldTicket.Employee, "Assigned");
                }
                else if (ticket.Assigned)
                {
                    oldTicket.Assigned = true;
                    var user = await GetCurrentUserAsync();

                    oldTicket.EmployeeId = user.Id;
                    oldTicket.Employee   = await _context.Users.SingleOrDefaultAsync(u => u.Id == oldTicket.EmployeeId);

                    oldTicket.Employee.EmployeeTickets.Add(oldTicket);
                    await _userManager.AddToRoleAsync(user, "Assigned");
                }
                else
                {
                    oldTicket.EmployeeId = null;
                    oldTicket.Employee   = null;
                }

                if (ModelState.IsValid)
                {
                    try
                    {
                        var user = await _context.Users.SingleOrDefaultAsync(u => u.Id == oldTicket.OwnerId);

                        var callbackUrl = Url.EmailUpdateLink(oldTicket.TicketId, Request.Scheme);
                        await _emailSender.SendEmailUpdateAsync(user.Email, callbackUrl);

                        List <FileDetail> fileDetails = await FileUploadHelperExtensions.UploadFileAsync
                                                            (_hostingEnvironment,
                                                            _context,
                                                            oldTicket.TicketId,
                                                            Request.Form.Files);

                        oldTicket.FileDetails = fileDetails;

                        _context.Update(oldTicket);
                        await _context.SaveChangesAsync();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        if (!TicketExists(oldTicket.TicketId))
                        {
                            return(NotFound());
                        }
                        else
                        {
                            throw;
                        }
                    }
                    return(RedirectToAction(nameof(Details), new { id = ticket.TicketId.ToString() }));
                }
            }
            return(View(ticketModel));
        }