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]}));
}
}