public async Task <JsonResult> GetTasks(AgentTaskFilterViewModel taskFilter)
 {
     return(await RunWithResult(async() =>
     {
         var model = await GetTasksInternal(taskFilter, true);
         return new
         {
             tasksHtml = model.Tasks.Count == 0 && taskFilter.Offset > 0 ? "" : RenderViewToString("_TaskList", model.Tasks),
             inWorkCount = model.InWorkCount,
             doneCount = model.DoneCount
         };
     }, "При получении заданий произошла ошибка"));
 }
        public async Task <ActionResult> Tasks(AgentTaskFilterViewModel taskFilter)
        {
            if (taskFilter == null)
            {
                taskFilter = new AgentTaskFilterViewModel();
            }

            if (taskFilter.Offset == 0 && taskFilter.Limit == 0)
            {
                taskFilter.Limit = _pageSize;
            }

            var model = await GetTasksInternal(taskFilter, false);

            model.PageSize = _pageSize;

            return(View(model));
        }
        private async Task <AgentTasksViewModel> GetTasksInternal(AgentTaskFilterViewModel filter, bool throwOnError)
        {
            var fullFilter = TinyMapper.Map <AgentTaskFilter>(filter);

            fullFilter.AgentId = await _agentRepository.GetIdByCodeAync(User.Identity.Name);

            try
            {
                var tasks = await _taskRepository.GetListForAgentAsync(fullFilter);

                var inWorkCount = await _taskRepository.GetTaskCountByAgentAsync(fullFilter.AgentId, false);

                var doneCount = await _taskRepository.GetTaskCountByAgentAsync(fullFilter.AgentId, true);

                return(new AgentTasksViewModel
                {
                    Tasks = tasks,
                    InWorkCount = inWorkCount,
                    DoneCount = doneCount,
                    IsDone = filter.IsDone,
                    ResolutionError = filter.ResolutionError
                });
            }
            catch (PublicException ex)
            {
                if (throwOnError)
                {
                    throw;
                }
                else
                {
                    _logger.Error("При получении списка заданий для агента произошла ошибка", ex);
                    return(new AgentTasksViewModel
                    {
                        Tasks = new List <AgentTask>(),
                        InWorkCount = 0,
                        DoneCount = 0,
                        IsDone = filter.IsDone,
                        ResolutionError = filter.ResolutionError,
                        TasksError = ex.Message
                    });
                }
            }
            catch (Exception ex)
            {
                if (throwOnError)
                {
                    throw;
                }
                else
                {
                    _logger.Error($"При получении списка заданий для агента {fullFilter.AgentId} произошла ошибка", ex);
                    return(new AgentTasksViewModel
                    {
                        Tasks = new List <AgentTask>(),
                        InWorkCount = 0,
                        DoneCount = 0,
                        IsDone = filter.IsDone,
                        ResolutionError = filter.ResolutionError,
                        TasksError = "При получении списка заданий для произошла ошибка"
                    });
                }
            }
        }