Пример #1
0
        public TicketCreateViewModel CreateTicketViewModel(TicketCreateBindingModel ticket = null,
                                                           IEnumerable <ModelError> errors = null)
        {
            var viewModel = new TicketCreateViewModel
            {
                Errors = new List <string>()
            };

            var projectTitles = _context.Projects
                                .Select(p => p.Title)
                                .ToList();

            viewModel.Projects = new SelectList(projectTitles);

            if (ticket != null)
            {
                viewModel.Title    = ticket.Title;
                viewModel.Type     = ticket.Type;
                viewModel.Priority = ticket.Priority;
            }

            if (errors != null)
            {
                foreach (var error in errors)
                {
                    viewModel.Errors.Add(error.ErrorMessage);
                }
            }

            return(viewModel);
        }
Пример #2
0
        [Route("Ticket/Create")] //! this is needed because of the route on the index (I don't know why)
        public ActionResult Create(TicketCreateViewModel formData)
        {
            if (formData == null || !ModelState.IsValid || !formData.Type.HasValue || !formData.Priority.HasValue)
            {
                ModelState.AddModelError("", "Error - Bad data");
                formData = GenerateTicketCreateViewModelFromExisting(formData) ?? throw new Exception("bad data");

                return(View(formData));
            }

            // if user is submitter and admin or project manager, then allow him/her to give a different status on ticket creation
            if (User.IsInRole(UserRolesEnum.Admin.ToString()) || User.IsInRole(UserRolesEnum.ProjectManager.ToString()))
            {
                formData.Status = formData.Status ?? TicketStatusesEnum.Open;
            }
            else
            {
                formData.Status = TicketStatusesEnum.Open;
            }

            try
            {
                Ticket newTicket = TicketRepository.CreateNewTicket(formData, (true, true));

                return(RedirectToAction(nameof(Index)));
            }
            catch (Exception e)
            {
                ModelState.AddModelError("", "Error - Bad data");
                ModelState.AddModelError("", e.Message); // TODO: Remove after project completion (on staging phase)
                formData = GenerateTicketCreateViewModelFromExisting(formData) ?? throw new Exception("bad data");

                return(View(formData));
            }
        }
Пример #3
0
        private TicketCreateViewModel GenerateTicketCreateViewModelFromExisting(TicketCreateViewModel formData)
        {
            string userId = User.Identity.GetUserId();
            List <SelectListItem> userProjects = null;

            if (User.IsInRole(UserRolesEnum.Admin.ToString()) || User.IsInRole(UserRolesEnum.ProjectManager.ToString()))
            {
                userProjects = ProjectRepository.GetAllProjects()
                               .Select(project => new SelectListItem()
                {
                    Text  = project.Name,
                    Value = project.Id.ToString(),
                }).ToList();
            }
            else
            {
                userProjects = ProjectRepository.GetUserProjects(userId)
                               .Select(project => new SelectListItem()
                {
                    Text  = project.Name,
                    Value = project.Id.ToString(),
                }).ToList();
            }

            if (!userProjects?.Any() == null)
            {
                return(null);
            }

            formData.Projects = userProjects;

            return(formData);
        }
Пример #4
0
        public ActionResult CreateTicket(TicketCreateViewModel model)
        {
            if (!ModelState.IsValid)
                return View(model);

            Project project = db.Projects
                .Include(p => p.Authorizations)
                .First(p => p.Id == model.Project_Id);

            string submitterId = User.Identity.GetUserId();

            var auths = project.Authorizations
                .Where(auth => auth.User_ID == submitterId);
            if (!auths.Any(auth => auth.Permission == Permission.Submitter))
            {
                return new HttpStatusCodeResult(HttpStatusCode.Forbidden,
                    "You do not have sufficient permissions for that resource.");
            }

            var submitter = new ApplicationUser() { Id = submitterId };
            db.Entry(submitter).State = EntityState.Unchanged;

            Ticket ticket = new Ticket(model)
                { Submitter = submitter, Project = project };

            db.Tickets.Add(ticket);
            db.SaveChanges();
            return RedirectToAction("Details", new { id = model.Project_Id });
        }
Пример #5
0
        public ActionResult Details(TicketCreateViewModel tvm)
        {
            try
            {
                Ticket        ticket         = new Ticket();
                TicketHistory ticket_history = new TicketHistory();

                ticket             = _ticketRepository.GetTicketByTicketId(tvm.ticket.TicketId);
                ticket.DateOpened  = tvm.ticket.DateOpened;
                ticket.LastUpdated = DateTime.Now;
                _ticketRepository.SaveTickets(ticket);
                ///////////////////////////////////////////////
                //Getting and Saving Ticket History
                Ticket newTicket = new Ticket();
                newTicket = _ticketRepository.Tickets.Single(row => row.TicketHistoryID == ticket.TicketHistoryID);

                ticket_history.TicketId    = newTicket.TicketHistoryID;
                ticket_history.HistoryDate = DateTime.Now;
                ticket_history.UserWorked  = ticket.CurrentOwner;
                ticket_history.Action      = ticket.Description;
                ticket_history.Comment     = ticket.Comments;
                _ticketHistoryRepository.SaveHistory(ticket_history);
                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
Пример #6
0
        public async Task <IActionResult> Create([Bind("Title,Description,SelectedProject,SelectedStatus,SelectedPriority,SelectedType")] TicketCreateViewModel ticketView)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    var ticket = new Ticket();
                    ticket.Title            = ticketView.Title;
                    ticket.Description      = ticketView.Description;
                    ticket.ProjectId        = ticketView.SelectedProject;
                    ticket.OwnerUserId      = _profileManager.CurrentUser.Id;
                    ticket.Created          = DateTimeOffset.Now;
                    ticket.TicketStatusId   = ticketView.SelectedStatus;
                    ticket.TicketPriorityId = ticketView.SelectedPriority;
                    ticket.TicketTypeId     = ticketView.SelectedType;

                    _context.Tickets.Add(ticket);

                    await _context.SaveChangesAsync().ConfigureAwait(false);

                    return(RedirectToAction(nameof(Index)));
                }
            }
            catch (DbUpdateException /* ex */)
            {
                //Log the error (uncomment ex variable name and write a log.)
                ModelState.AddModelError("", "Unable to save changes. " +
                                         "Try again, and if the problem persists, " +
                                         "see your system administrator.");
            }

            return(View(ticketView));
        }
Пример #7
0
        public virtual ActionResult Create()
        {
            Ticket ticket = new Ticket();
            var    model  = new TicketCreateViewModel(Security, Settings, ticket);

            return(View(model));
        }
Пример #8
0
        [Route("Ticket/Create")] //! this is needed because of the route on the index (I don't know why)
        public ActionResult Create(Guid?projectId)
        {
            string userId = User.Identity.GetUserId();

            if (!UserRoleRepository.IsUserInRole(userId, UserRolesEnum.Submitter))
            {
                throw new Exception("This shouldn't happen");
            }

            if (projectId.HasValue && ProjectRepository.IsUserAssignedToProject(userId, projectId.Value))
            {
                projectId = null;
            }

            List <SelectListItem> userProjects = null;

            if (User.IsInRole(UserRolesEnum.Admin.ToString()) || User.IsInRole(UserRolesEnum.ProjectManager.ToString()))
            {
                userProjects = ProjectRepository.GetAllProjects()
                               .Select(project => new SelectListItem()
                {
                    Text     = project.Name,
                    Value    = project.Id.ToString(),
                    Selected = projectId.HasValue ? project.Id == projectId.Value : false,
                }).ToList();
            }
            else
            {
                userProjects = ProjectRepository.GetUserProjects(userId)
                               .Select(project => new SelectListItem()
                {
                    Text     = project.Name,
                    Value    = project.Id.ToString(),
                    Selected = projectId.HasValue ? project.Id == projectId.Value : false,
                }).ToList();
            }


            if (userProjects == null)
            {
                return(RedirectToAction(nameof(HomeController.Index), "Home"));
            }


            TicketCreateViewModel model = new TicketCreateViewModel()
            {
                AuthorId = userId,
                Projects = userProjects,
            };

            if (!model.Projects.Any())
            {
                return(RedirectToAction(nameof(HomeController.UnauthorizedRequest), "Home", new { error = "You don't have any project to assign a ticket to.\nPLEASE CONTACT ADMIN to get assigned to a project" }));
            }

            return(View(model));
        }
Пример #9
0
        public ActionResult Create()
        {
            var ticketView = new TicketCreateViewModel();

            ticketView.Projects         = new SelectList(db.Projects, "Id", "Name");
            ticketView.TicketTypes      = new SelectList(db.TicketTypes, "Id", "Name");
            ticketView.TicketPriorities = new SelectList(db.TicketPriorities, "Id", "Name");
            //ticketView.TicketStatuses = new SelectList(db.TicketStatuses, "Id", "Name");
            return(View(ticketView));
        }
Пример #10
0
 public IActionResult CreateTicket(TicketCreateViewModel model)
 {
     if (ModelState.IsValid)
     {
         ///
         ///
         return(RedirectToAction("Index"));
     }
     return(RedirectToAction("Index"));
 }
Пример #11
0
        public ActionResult CreateNew(TicketCreateViewModel tvm)
        {
            try
            {
                var username   = HttpContext.User.Identity.Name;
                var userworked = _UserRepository.GetUserByUsername(username);

                Ticket        ticket         = new Ticket();
                TicketHistory ticket_history = new TicketHistory();

                // Getting and Saving Ticket Information
                ticket           = tvm.ticket;
                ticket.AccountId = 0;

                ticket.DateOpened  = DateTime.Now;
                ticket.LastUpdated = DateTime.Now;

                if (tvm.ticket.ReceivedFrom != null)
                {
                    ticket.CustomerName = tvm.ticket.ReceivedFrom;
                }
                if (tvm.ticket.AccountName == null)
                {
                    ticket.AccountName = "No associated Account";
                }
                //ticket.CurrentOwner = _UserRepository.GetUserById(tvm.user.UserId).UserId;
                ticket.CurrentOwner = 0;
                ticket.Creator      = userworked.UserId;
                int numOfTicketsForAccount = _ticketRepository.GetTicketsByAccountID(ticket.AccountId).Count();
                numOfTicketsForAccount++;
                string newTicketHistoryID = numOfTicketsForAccount.ToString();
                string newAccountID       = ticket.AccountId.ToString();
                ticket.TicketHistoryID = newAccountID + newTicketHistoryID;
                _ticketRepository.SaveTickets(ticket);
                ///////////////////////////////////////////////
                //Getting and Saving Ticket History
                Ticket newTicket = new Ticket();
                newTicket = _ticketRepository.Tickets.Single(row => row.TicketHistoryID == newAccountID + newTicketHistoryID);

                ticket_history.TicketId    = newTicket.TicketHistoryID;
                ticket_history.HistoryDate = DateTime.Now;
                ticket_history.UserWorked  = ticket.CurrentOwner;
                ticket_history.Action      = ticket.Description;
                ticket_history.Comment     = ticket.Comments;
                _ticketHistoryRepository.SaveHistory(ticket_history);
                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
Пример #12
0
        // GET: Tickets/Create
        public ActionResult Create()
        {
            var viewModel = new TicketCreateViewModel();

            viewModel.ImpactedSystems = new List <SelectListItem>
            {
                new SelectListItem {
                    Value = "1", Text = "Accounting"
                },
                new SelectListItem {
                    Value = "2", Text = "Booking"
                },
                new SelectListItem {
                    Value = "3", Text = "Sales"
                }
            };
            return(View(viewModel));
        }
Пример #13
0
        public async Task <IActionResult> CreateTicket(TicketCreateViewModel model)
        {
            if (ModelState.IsValid)
            {
                var ticket = new Ticket
                {
                    EventId  = model.EventId,
                    Price    = model.Price,
                    SellerId = (await userManager.FindByNameAsync(User.Identity.Name)).Id
                };

                ticket.Status = TicketSaleStatus.Sale;
                await ticketService.Save(ticket);

                return(RedirectToAction("Index", "Event"));
            }

            return(RedirectToAction("CreateTicket", model));
        }
        public ActionResult Create([Bind(Include = "Title,Description,Priority")] TicketCreateViewModel incomingTicket)
        {
            // check that the incoming model is in a valid state
            if (ModelState.IsValid)
            {
                // attempt conversion into Ticket
                Ticket       ticketToAdd  = Mapper.Map <Ticket>(incomingTicket);
                TicketHelper ticketHelper = null;
                Ticket       addedTicket  = null;

                // get the user name of the logged in user and assign as the Ticket owner
                ticketToAdd.Owner = User.Identity.Name;

                // instantiate the ticket helper
                ticketHelper = new TicketHelper(c_repository);

                // call method to add new ticket and assign created ticket to variable
                addedTicket = ticketHelper.AddTicket(ticketToAdd);

                if (addedTicket != null)
                {
                    // ticket added succesfully - insert info message into TempData so that message can be shown on tickets list view
                    this.TempData["Success"] = "Ticket created succesfully.";

                    // return user to the tickets list view
                    return(RedirectToAction("Index"));
                }
                else
                {
                    // ticket was not created because Ticket object returned by helper method was empty
                    // issue an error to the model state to reflect this
                    ModelState.AddModelError("", "Unable to create the ticket at this time. Please try again.");

                    // return view
                    return(View(incomingTicket));
                }
            }
            else
            {
                // return back to the page
                return(View(incomingTicket));
            }
        }
Пример #15
0
        public ActionResult Create(TicketCreateViewModel ticket)
        {
            ViewBag.PriorityId = new SelectList(EnumsController.EnumToDropDownList(typeof(Priority)), "Value", "Text");
            ViewBag.CategoryId = new SelectList(this.Data.Categories.All(), "Id", "Name");

            if (User.Identity.IsAuthenticated && ModelState.IsValid)
            {
                using (TransactionScope tsTransScope = new TransactionScope())
                {
                    Ticket parentTicket  = null;
                    var    currentUserId = User.Identity.GetUserId();

                    var currentUser = this.Data.ApplicationUsers.All().FirstOrDefault(u => u.Id == currentUserId);
                    currentUser.Points = currentUser.Points + 1;
                    if (ticket.Ticket_Id != 0)
                    {
                        parentTicket = this.Data.Tickets.GetById(ticket.Ticket_Id);
                        // parentTicket.Add(parentTicketObjet);
                    }

                    var newTicket = new Ticket()
                    {
                        AuthorId      = currentUserId,
                        CategoryId    = ticket.CategoryId,
                        Description   = HttpUtility.HtmlEncode(ticket.Description),
                        Priority      = (Priority)ticket.PriorityId,
                        ScreenshotUrl = ticket.ScreenshotUrl,
                        Title         = ticket.Title,
                        Tickets       = parentTicket,
                        CreateDate    = DateTime.UtcNow
                    };

                    this.Data.Tickets.Add(newTicket);
                    this.Data.SaveChanges();
                    tsTransScope.Complete();
                }

                return(RedirectToAction("TicketsList"));
            }

            return(View());
        }
Пример #16
0
        public IActionResult CreateTicket([FromRoute] int?id)
        {
            if (id != null)
            {
                var @event = eventService.GetEventById(id);

                if (@event == null)
                {
                    return(BadRequest());
                }

                var model = new TicketCreateViewModel
                {
                    EventId   = @event.Id,
                    EventName = @event.Name
                };
                return(PartialView("CreateTicket", model));
            }
            return(NotFound());
        }
Пример #17
0
        // GET: Projects/CreateTicket/{id}
        public ActionResult CreateTicket(int? id)
        {
            if (id == null)
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            Project project = db.Projects
                    .Include(p => p.Authorizations)
                    .First(p => p.Id == id);

            var auths = project.Authorizations
                .Where(auth => auth.User_ID == User.Identity.GetUserId());
            if (!auths.Any(auth => auth.Permission == Permission.Submitter))
            {
                return new HttpStatusCodeResult(HttpStatusCode.Forbidden,
                    "You do not have sufficient permissions for that resource.");
            }

            TicketCreateViewModel model = new TicketCreateViewModel
                { Project_Id = project.Id.Value, Project_Name = project.Name };
            return View(model);
        }
Пример #18
0
 public ActionResult Create([Bind(Include = "Title,Description,SelectedProject,SelectedType,SelectedPriority")] TicketCreateViewModel tvm)
 {
     if (ModelState.IsValid)
     {
         var ticket = new Ticket();
         ticket.Title            = tvm.Title;
         ticket.Description      = tvm.Description;
         ticket.Created          = DateTimeOffset.Now;
         ticket.ProjectId        = tvm.SelectedProject;
         ticket.TicketTypeId     = tvm.SelectedType;
         ticket.TicketPriorityId = tvm.SelectedPriority;
         var query = from p in db.TicketStatuses
                     where p.Name == "New"
                     select p.Id;
         ticket.TicketStatusId = query.First();
         ticket.OwnerUserId    = User.Identity.GetUserId();
         db.Tickets.Add(ticket);
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(tvm));
 }
Пример #19
0
        // GET: Tickets/Create
        public ActionResult Create()
        {
            var ticketView = new TicketCreateViewModel();
            var userId     = _profileManager.CurrentUser.Id;
            //var projectList = new List<Project>();
            var ticketStatus = _context.TicketStatuses.ToList();

            var ticketPriority = _context.TicketPriorities.ToList();

            var ticketType = _context.TicketTypes.ToList();

            var projectList = _context.Projects.Where(x => x.ProjectUsers.Any(y => y.UserId == userId)).ToList();

            //var projectList = projects.ToList();


            ticketView.Projects         = new SelectList(projectList, "Id", "Title");
            ticketView.TicketStatus     = new SelectList(ticketStatus, "Id", "Name");
            ticketView.TicketTypes      = new SelectList(ticketType, "Id", "Name");
            ticketView.TicketPriorities = new SelectList(ticketPriority, "Id", "Name");

            return(View(ticketView));
        }
Пример #20
0
        public IActionResult CreateTicket()
        {
            _clientMapper = _entityMapperContextBase.Set <Point, ClientDto>(cfg =>
            {
                cfg.CreateMap <Point, ClientDto>()
                .ForMember(dest => dest.ClientId, opt => opt.MapFrom(src => src.PointNumber))
                .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.NamePoint));
            });
            var clients = _context.Set <Point>()
                          ?.FindBy(p => p.CliGroupNumber == 7 || p.CliGroupNumber == 2)
                          ?.Include(c => c.CliGroup)
                          ?.OrderBy(c => c.NamePoint)
                          ?.Select(enity => _clientMapper.Map(enity));

            if (clients != null)
            {
                TicketCreateViewModel model = new TicketCreateViewModel();
                // Clients
                model.Clients = clients.ToList();
                // Communication types
                var communicationTypes = _context.Set <PointCommunicationType>()
                                         ?.GetAll()
                                         ?.Select(pct => new PointCommunicationTypeDto
                {
                    PointCommunicationTypeId = pct.PointCommunicationTypeId,
                    Name = pct.Name
                });
                model.PointCommunicationTypes = communicationTypes?.ToList() ?? model.PointCommunicationTypes;
                //додавання типу заявок (категорія)
                IQueryable <TicketSubjectDto> subjectsParents = _context.Set <TicketSubject>()
                                                                ?.GetAll()
                                                                ?.Where(t => t.ParentId == null)
                                                                ?.Select(t => new TicketSubjectDto
                {
                    Name            = t.TicketSubjectName,
                    TicketSubjectId = t.TicketSubjectId
                });
                //підкатегорія (тема)
                //IQueryable<TicketSubjectDto> subjectFirstChildren = _context.Set<TicketSubject>()
                //    ?.GetAll()
                //    ?.Where(t => t.ParentId != null)
                //    ?.Select(t => new TicketSubjectDto
                //    {
                //        Name = t.TicketSubjectName,
                //        TicketSubjectId = t.TicketSubjectId
                //    });

                //model.TicketSubjectFirstChildren = subjectFirstChildren?.ToList() ?? model.TicketSubjectFirstChildren;
                model.TicketSubjectParents = subjectsParents?.ToList() ?? model.TicketSubjectParents;


                //TMP!
                model.TicketSubjectLastChildren = _context.Set <TicketSubject>()
                                                  ?.GetAll()
                                                  ?.Where(i => i.ParentId == 16)
                                                  ?.Select(s => new TicketSubjectOptionDto
                {
                    Active          = false,
                    Name            = s.TicketSubjectName,
                    TicketSubjectId = s.TicketSubjectId
                }).ToList();
                //END TMP

                return(View(model));
            }
            return(NotFound("Ticket Subjects are not found!"));
        }