Badges.Controllers.BadgeController.Fulfillments C# (CSharp) Method

Fulfillments() public method

Return fulfillments for a given badge
public Fulfillments ( System.Guid id ) : System.Web.Mvc.ActionResult
id System.Guid BadgeId
return System.Web.Mvc.ActionResult
        public ActionResult Fulfillments(Guid id)
        {
            var badge = RepositoryFactory.BadgeRepository.GetNullableById(id);

            if (badge == null)
            {
                return HttpNotFound();
            }

            var badgeCriteria = badge.BadgeCriterias.ToList();

            var badgeSubmission =
                RepositoryFactory.BadgeSubmissionRepository.Queryable.SingleOrDefault(
                    x => x.Badge.Id == badge.Id && x.Creator.Identifier == CurrentUser.Identity.Name);

            if (badgeSubmission != null)
            {
                var fulfillments =
                    RepositoryFactory.BadgeFulfillmentRepository.Queryable.Where(
                        x => x.BadgeSubmission.Id == badgeSubmission.Id)
                                     .Select(
                                         x =>
                                         new BadgeFulfillmentViewModel
                                             {
                                                 CriteriaId = x.BadgeCriteria.Id,
                                                 CriteriaDetails = x.BadgeCriteria.Details,
                                                 Comment = x.Comment,
                                                 Details =
                                                     x.Experience == null
                                                         ? x.SupportingWork.Description
                                                         : x.Experience.Name,
                                                 ExperienceId =
                                                     x.Experience == null
                                                         ? x.SupportingWork.Experience.Id
                                                         : x.Experience.Id,
                                                 WorkId = x.Experience == null ? x.SupportingWork.Id : x.Experience.Id,
                                                 WorkType = x.Experience == null ? "work" : "experience",
                                                 SupportType =
                                                     x.Experience == null ? x.SupportingWork.Type : string.Empty
                                             })
                                     .ToList();

                var criteriaGroup = from c in badgeCriteria
                                     select
                                         new
                                             {
                                                 Criteria = new {c.Id, c.Details},
                                                 Fulfillments =
                                         fulfillments.Where(x => x.CriteriaId == c.Id)
                                                     .Select(x => new {x.Comment, x.Details, x.WorkId, x.ExperienceId, x.WorkType, x.SupportType})
                                             };

                return new JsonNetResult(criteriaGroup.ToList());
            }
            else
            {
                return
                    new JsonNetResult(
                        badgeCriteria.Select(x => new {Criteria = new {x.Id, x.Details}, Fulfillments = new string[0]}));
            }
        }