Esempio n. 1
0
        public async Task <IActionResult> Create([Bind("Title,Body,Number,TicketId,StaffId,OrganizationId")] Tasks task)
        {
            if (ModelState.IsValid)
            {
                task.DateCreate = DateTime.Now;
                var Person = await CurrentPersonAsync();

                string staffName = "";
                string orgName   = "";
                if (task.OrganizationId != null)
                {
                    task.Type = 1;
                }
                if (task.OrganizationId != null)
                {
                    orgName = _context.Organizations.AsNoTracking().SingleOrDefault(n => n.Id == task.OrganizationId).Name;
                }
                if (task.StaffId != null)
                {
                    staffName = _context.Person.AsNoTracking().SingleOrDefault(n => n.Id == task.StaffId).Name;
                }
                var thread = new TicketThread()
                {
                    TicketId   = task.TicketId,
                    DateCreate = DateTime.Now,
                    Title      = $"Поставлена задача",
                    Body       = $"Поставлена задача {task.Number} на {orgName} {staffName}",
                    Poster     = Person.Name,
                    Type       = 0
                };
                var person = await CurrentPersonAsync();

                //if (!String.IsNullOrEmpty(person.ApiKey))
                //{
                //    RedmineService redmine = new RedmineService(_context, person.ApiKey);
                //    ReadmineIssue issueInfo = new ReadmineIssue();
                //    await redmine.CreateIssueAsync(task);
                //    return PartialView(issueInfo);
                //}
                _context.Add(task);
                _context.Add(thread);
                await _context.SaveChangesAsync();

                string[] ExceptCon = SignalrHub._connections.GetConnections(_userManager.GetUserId(HttpContext.User)).Cast <string>().ToArray();
                await _contextHub.Clients.AllExcept(ExceptCon).SendAsync("ReceiveMessage", thread.Poster, thread.DateCreate.ToString("g"), $"Заявка #{thread.TicketId}: {thread.Title}");

                return(RedirectToAction(nameof(Index), new { task.TicketId }));
            }
            return(PartialView(task));
        }
        // GET: TicketThreads/Create/Id
        public IActionResult Create(int Id, int Event, int Type, string table)
        {
            if (table == null)
            {
                table = "false";
            }
            ViewBag.Event = Event;
            ViewBag.table = table;
            var thread = new TicketThread()
            {
                TicketId = Id, Type = Type
            };

            return(PartialView(thread));
        }
Esempio n. 3
0
        public async Task <IActionResult> Close(int id)
        {
            if (id == 0)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                var taskToUpdate = await _context.Tasks.SingleOrDefaultAsync(t => t.Id == id);

                var Person = await CurrentPersonAsync();

                taskToUpdate.Status = 1;
                await TryUpdateModelAsync <Tasks>(taskToUpdate, "", t => t.Result, t => t.DateClose, t => t.Status);

                var thread = new TicketThread()
                {
                    TicketId   = taskToUpdate.TicketId,
                    DateCreate = DateTime.Now,
                    Title      = $"Закрыта задача",
                    Body       = $@"<p>Задача {taskToUpdate.Number}/{taskToUpdate.Id} выполнена {taskToUpdate.DateClose}</p>
                    Результат выполнения: {taskToUpdate.Result}
                    ",
                    Poster     = Person.Name,
                    Type       = 0
                };
                _context.Add(thread);
                await _context.SaveChangesAsync();

                string[] ExceptCon = SignalrHub._connections.GetConnections(_userManager.GetUserId(HttpContext.User)).Cast <string>().ToArray();
                await _contextHub.Clients.AllExcept(ExceptCon).SendAsync("ReceiveMessage", thread.Poster, thread.DateCreate.ToString("g"), $"Заявка #{thread.TicketId}: {thread.Title}");

                return(RedirectToAction(nameof(Index), new { Ticketid = taskToUpdate.TicketId }));
            }
            return(PartialView());
        }
        public async Task <IActionResult> Create([Bind("Type,Body,TicketId")] TicketThread ticketThread, int Event, bool isInform, bool table)
        {
            var  events = new Event();
            bool isUser = false;

            if (HttpContext.User.IsInRole("Пользователь"))
            {
                isUser = true;
            }
            ticketThread.Title = events.GetEvent(Event);
            if (ModelState.IsValid)
            {
                var Person = await _context.Person.AsNoTracking().Select(t => new { t.Id, t.Name, t.AccountID }).SingleOrDefaultAsync(p => p.AccountID == _userManager.GetUserId(HttpContext.User));

                var ticket = await _context.Tickets
                             .Include(t => t.TicketThreads)
                             .Include(t => t.Person)
                             .Include(t => t.CoAuthors)
                             .SingleOrDefaultAsync(t => t.Id == ticketThread.TicketId);

                if (events.IsStatus(Event))
                {
                    ticket.StatusId = Event;
                }
                if (Event != 2 && isUser == true)
                {
                    ticket.IsAnswered  = false;
                    ticket.LastMessage = DateTime.Now;
                }
                else if (isInform == true)
                {
                    ticket.IsAnswered   = true;
                    ticket.LastResponse = DateTime.Now;
                }
                ticket.DateUpdate = ticketThread.DateCreate = DateTime.Now;
                if (Event == 2)
                {
                    ticket.Closed = DateTime.Now;
                }
                ticketThread.PersonId = Person.Id;
                ticketThread.Poster   = Person.Name;
                ticketThread.IsInform = isInform;
                _context.TicketThreads.Add(ticketThread);
                await _context.SaveChangesAsync();

                string[] ExceptCon = SignalrHub._connections.GetConnections(_userManager.GetUserId(HttpContext.User)).Cast <string>().ToArray();
                //await _contextHub.Clients.AllExcept(ExceptCon).SendAsync("ReceiveMessage", ticketThread.Poster, ticketThread.DateCreate.ToString("g"), $"Заявка #{ticketThread.TicketId}: {ticketThread.Title}");
                await _contextHub.Clients.GroupExcept("Staff", ExceptCon).SendAsync("ReceiveMessage", ticketThread.Poster, ticketThread.DateCreate.ToString("g"), $"<a href=\"/Tickets/Edit/{ticketThread.TicketId}\" data-ajax=\"true\" data-ajax-method=\"GET\" data-ajax-update=\"#cell-content\" data-ajax-mode=\"update\" title=\"Перейти\"> Заявка #{ticketThread.TicketId}</a>: {ticketThread.Title}", isUser);

                if (isInform)
                {
                    ticketThread.Title = $"Изменения в заявке #{ticket.Id} {ticketThread.Title}";
                    await _emailService.SendEmailAsync(ticket.Person.Email, ticketThread.Title, ticketThread.Body, ticket.CoAuthors);
                }
                //new SignalRclient("http://"+HttpContext.Request.Host.ToUriComponent()).SendEventAsync(_userManager.GetUserId(HttpContext.User),ticketThread);

                if (table || Event == 4)
                {
                    return(Ok("OK"));
                }
                if (Event == 2)
                {
                    return(RedirectToAction("Index", "Tickets"));        //If Event = close load ticket list
                }
                return(RedirectToAction("Edit", "Tickets", new { Id = ticketThread.TicketId }));
            }
            if (table)
            {
                return(new StatusCodeResult(500));
            }
            return(PartialView(ticketThread));
        }