public string AnnualOrMonthlyReportJson(int year, int month, string taskStatusfilterKey)
        {
            Expression <Func <Demand, bool> > expression = p => p.RecordStatus == Helpdesk.Model.Enums.RecordStatus.A;

            if (year != 0 && month == 0)
            {
                expression = expression.And(p => p.CreateDate.Value.Year == year);
            }

            if (month != 0 && year != 0)
            {
                expression = p => p.CreateDate.Value.Month == month && p.CreateDate.Value.Year == year;
            }

            if (!string.IsNullOrEmpty(taskStatusfilterKey))
            {
                switch (taskStatusfilterKey)
                {
                case "dissolved":     // çözülmüş
                    expression = expression.And(p => p.IsDissolved == true);
                    break;

                case "completed":     // tamamlandı
                    expression = expression.And(p => p.IsCompleted == true);
                    break;

                case "assigned":     // atanmış
                    expression = expression.And(p => p.IsAccepted == true);
                    break;

                case "notAssigned":     // acık
                    expression = expression.And(p => p.IsAccepted != true);
                    break;

                default:
                    expression = expression.And(p => p.IsAccepted != true);
                    break;
                }
            }
            else
            {
                expression = expression.And(p => p.IsAccepted != true);
            }

            var demands = demandRepository.GetAll(expression, out int records, null);

            if (taskStatusfilterKey == "notAssigned")
            {
                var emergencys = orderOfUrgencyService.GetAll();
                var joinedData = emergencys.GroupJoin(inner: demands,
                                                      outerKeySelector: urgency => urgency.Id,
                                                      innerKeySelector: d => d.OrderOfUrgencyId,
                                                      resultSelector: (urgency, uList) => new
                {
                    Key   = urgency.Id,
                    Name  = urgency.Title,
                    Count = uList.Count()
                });
                return(JsonConvert.SerializeObject(joinedData));
            }
            else
            {
                var agents     = applicationUserRepository.GetAll(/*a => a.RecordStatus == Helpdesk.Model.Enums.RecordStatus.A*/);
                var joinedData = agents.GroupJoin(inner: demands,
                                                  outerKeySelector: agent => agent.AccountId,
                                                  innerKeySelector: d => d.ApplicationUserAccountId,
                                                  resultSelector: (agent, dList) => new
                {
                    Key   = agent.Id,
                    Name  = agent.FirstName + " " + agent.LastName,
                    Count = dList.Count()
                });

                return(JsonConvert.SerializeObject(joinedData));
            }
        }