Работа исполнителей

Последнее обновление: 31.10.2015

Заключительной частью создание функционала является добавление логики работы исполнителей. Предполагается, что у нас исполнитель производит какую-то работу над проблемой и в зависимости от хода работы, изменяет статус заявки. Если у заявки статус 'Распределена', то потом исполнитель, приступив к работе, изменяет ее статус на 'В процессе' и т.д. Вплоть до завершения работы.

Итак, добавим в контроллер RequestController метод ChangeStatus:

//Заявки для изменения статуса исполнителем
[HttpGet]
[Authorize(Roles = "Исполнитель")]
public ActionResult ChangeStatus()
{
    // получаем текущего пользователя
    User user = db.Users.Where(m => m.Login == HttpContext.User.Identity.Name).First();
    if(user!=null)
    {
        var requests = db.Requests.Include(r => r.User)
                            .Include(r => r.Lifecycle)
                            .Include(r => r.Executor)
                            .Where(r => r.ExecutorId == user.Id)
                            .Where(r=>r.Status!=(int)RequestStatus.Closed);
        return View(requests);
    }
    return RedirectToAction("LogOff", "Account");
}

[HttpPost]
[Authorize(Roles = "Исполнитель")]
public ActionResult ChangeStatus(int requestId, int status)
{
    User user = db.Users.Where(m => m.Login == HttpContext.User.Identity.Name).First();
    if (user == null)
    {
        return RedirectToAction("LogOff", "Account");
    }
            
    Request req = db.Requests.Find(requestId);
    if (req != null)
	{
        req.Status = status;
        Lifecycle lifecycle = db.Lifecycles.Find(req.LifecycleId);
        if (status == (int)RequestStatus.Proccesing)
        {
            lifecycle.Proccesing = DateTime.Now;
        }
        else if (status == (int)RequestStatus.Checking)
        {
            lifecycle.Checking = DateTime.Now;
        }
        else if (status == (int)RequestStatus.Closed)
        {
            lifecycle.Closed = DateTime.Now;
        }
        db.Entry(lifecycle).State = EntityState.Modified;
        db.Entry(req).State = EntityState.Modified;
        db.SaveChanges();
    }

    return RedirectToAction("ChangeStatus");
}

Здесь мы получаем текущие заявки для данного исполнителя и изменяем их статус.

@model IEnumerable<Request>
@using HelpDeskTrain.Models
@{
    ViewBag.Title = "Список заявок";
    int i = 0;
}

<h2>Изменить статус заявки</h2>
<p>Всего заявок: @(Model.Count<Request>())</p>
<table>

@foreach (var item in Model)
{
    i++;
    <tr>
        <td><b>@i</b></td>
        <td>
        @if (item.Status == (int)RequestStatus.Distributed)
        { 
             <img src="../../Content/pictures/status2.png" title="Заявка распределена" class="tdImage" />
        }
         else if (item.Status == (int)RequestStatus.Proccesing)
         {
            <img src="../../Content/pictures/status3.png" title="Заявка в процессе" class="tdImage" />
         }
         else if (item.Status == (int)RequestStatus.Checking)
         {
            <img src="../../Content/pictures/status4.png" title="Заявка на проверке" class="tdImage" />
         } 
        </td>
        <td>
            @if (item.Priority == (int)RequestPriority.Low)
            { 
             <img src="../../Content/pictures/prior1.png" title="Низкий приоритет" class="tdImage" />
            }
            else if (item.Priority == (int)RequestPriority.Medium)
            { 
             <img src="../../Content/pictures/prior2.png" title="Средний приоритет"  class="tdImage" />
            }
            else if (item.Priority == (int)RequestPriority.High)
            {
            <img src="../../Content/pictures/prior3.png" title="Высокий приоритет" class="tdImage" />
            }
            else if (item.Priority == (int)RequestPriority.Critical)
            {
            <img src="../../Content/pictures/prior4.png" title="Критичный приоритет" class="tdImage" />
            }
        </td>
        <td>
        @if (item.File != null)
        { 
            <a href="/Request/Download/@item.Id"><img src="../../Content/pictures/filey.png" 
						title='@item.File' class="tdImage" /></a>
        }
        else
        { 
            <img src="../../Content/pictures/filen.png" title="без файла изображения" class="tdImage" />
        }
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Lifecycle.Opened)
        </td>
        <td>
                @Html.DisplayFor(modelItem => item.User.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Activ.CabNumber)
            </td>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        
        <td>
            <div><a class="openDialog" data-dialog-id="infoDialog" data-dialog-title="Описание заявки" 
               href="/Request/Details/@item.Id">
               <img src="../../Content/pictures/info.png" class="tdImage" title="Описание заявки" />
         </a></div>
        </td>
        @using (Html.BeginForm())
        {
        <td>
            @Html.Hidden("requestId", item.Id)
            @if (item.Status == (int)RequestStatus.Distributed)
            {
             @Html.DropDownList("status", new[] { new SelectListItem() { Text = "В процессе", Value = "3" }, 
        new SelectListItem() { Text = "На проверке", Value = "4" }, new SelectListItem() { Text = "Закрыта", Value = "5" }})
            }
            else if (item.Status == (int)RequestStatus.Proccesing)
            {
             @Html.DropDownList("status", new[] { new SelectListItem() { Text = "На проверке", Value = "4" }, new SelectListItem() { Text = "Закрыта", Value = "5" } })
            }
            else if (item.Status == (int)RequestStatus.Checking)
            {
             @Html.DropDownList("status", new[] { new SelectListItem() { Text = "Закрыта", Value = "5" } })
            }
        </td>
          <td>
             <input type="submit" value="Изменить статус" />
          </td>
        }
    </tr>
}
</table>
@Styles.Render("~/Content/themes/base/css")
@section Scripts {
    @Scripts.Render("~/bundles/jqueryui")
}

При выводе заявок на страницу к каждой заявке прикрепляется форма, на которой выпадающий список возможных статусов, причем можно задать не любой статус, а в зависимости от текущего.


Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850