StevenTsvetkov
2/1/2018 - 10:07 AM

Generate Youth Exam Results CSV

using System;
using System.Collections.Generic;
using System.Linq;
using Telerik.ILS.Data.Common.Repositories;
using Telerik.ILS.Data.Models;
using Telerik.ILS.Services.Common.CodeExecutor;

public class RunThisCode
{
    public void Execute(IRepository<KidsSchoolSeason> seasons, IWriter writer)
    {
        var seasonId = 143;

        var season = seasons.All().FirstOrDefault(x => x.KidsSchoolSeasonId == seasonId);
        var examParticipants = season.KidsCandidateExams.SelectMany(x => x.TestSchedule.TestParticipations);

        writer.WriteLine("Username,Application Points,Exam Date Points,Different?,Higher Score,Student Email,Parent Email");

        foreach (var candidate in season.KidsCandidates)
        {
            var user = candidate.User;
            var participant = examParticipants.FirstOrDefault(x => x.User.UserId == user.UserId);

            short? applicationPoints = candidate.CandidateExamPoints ?? 0;
            short? examPoints = 0;

            if (participant != null)
            {
                examPoints = participant.Result ?? 0;
            }

            var toPrint = new List<string>()
            {
                user.Username,
                applicationPoints.ToString(),
                examPoints.ToString(),
                (applicationPoints != examPoints).ToString(),
                Math.Max(applicationPoints.Value, examPoints.Value).ToString(),
                user.Email,
                user.ParentEmail
            };

            writer.WriteLine(string.Join(",", toPrint));
        }
    }
}