SIMS 7 - Sample Code - Post 16 Programmes of Study
            Overview of Example
This extracts a list which includes a semi-colon separated list of courses.  A list of courses is also provided.
Example Call
            List<POS> Post16POS = SIMSInterface.CourseManager.Getp16CourseList();
            json = Newtonsoft.Json.JsonConvert.SerializeObject(Post16POS, Formatting.Indented);
            System.IO.File.WriteAllText(Path.Combine(OutputFolder, "Post16POS.json"), json);
            // Use the lookup to find the QN.
            List<CourseLookup> courseLookups = SIMSInterface.CourseManager.GetQNLookup();
            json = Newtonsoft.Json.JsonConvert.SerializeObject(courseLookups, Formatting.Indented);
            System.IO.File.WriteAllText(Path.Combine(OutputFolder, "courseLookups.json"), json);
Output Class - Course Lookups
    public class CourseLookup
    {
        public string courseBrowseShortName { get; set; }
        public string courseBrowseLaOrQan { get; set; }
        public string courseBrowseSubject { get; set; }
    }
 Output Class - POS
 public class POS
    {
        public string OtherCourses { get; set; }
        public int PersonId { get; set; }
        public int Id { get; set; }
        public DateTime Start { get; set; }
        public DateTime ExpectedEnd { get; set; }
        public DateTime ProgrammeEnd { get; set; }
        public string CoreAim { get; set; }
        public string CompletionStatus { get; set; }
        public string Programme { get; set; }
        public string WithdrawalReason { get; set; }
        public string Traineeship { get; set; }
        public int TTHours { get; set; }
        public int TotalHours { get; set; }
        public int QualHours { get; set; }
        public int NQHours { get; set; }
    }
 Code Sample - Course Lookup
 public static List<CourseLookup> GetQNLookup()
        {
            // reference CourseManagerProcess & Entities
            // load the relevant cache and get the previous/current academic year attributes, if relevant. 
            List<CourseLookup> courses = new List<CourseLookup>();
            SIMS.Processes.CurrCache.Populate();
            // get all the active courses that have a QN for the current acad year.
            SIMS.Processes.MaintainCourseBrowse courseBrowseProcess = new SIMS.Processes.MaintainCourseBrowse();
            courseBrowseProcess.PopulateCoursesforSIMSforNewCM("", "", "<Any>", "", "", "ENG", "", "withQAN", SIMS.Entities.CurrCache.AcadYear.StartAttribute.Value, SIMS.Entities.CurrCache.AcadYear.EndAttribute.Value);
            // for the previous acad year
            //courseBrowseProcess.PopulateCoursesforSIMSforNewCM("", "", "<Any>", "", "", "ENG", "", "withQAN", SIMS.Entities.CurrCache.PrevAcadYear.StartAttribute.Value, SIMS.Entities.CurrCache.PrevAcadYear.EndAttribute.Value);
            //// iterate through the course collection
            foreach (SIMS.Entities.MaintainCourseBrowse maintCourseBrowse in courseBrowseProcess.MaintainCourseBrowses.Value)
            {
                if (maintCourseBrowse.ActiveStateAttribute.Value.Description.ToString() == "Active")
                {
                    CourseLookup c = new CourseLookup();
                    // store this ShortName to use with the Post 16 Programme records mapping
                    c.courseBrowseShortName = maintCourseBrowse.ShortNameAttribute.Value.ToString();
                    c.courseBrowseLaOrQan = maintCourseBrowse.La_OR_Qan;
                    c.courseBrowseSubject = maintCourseBrowse.SubjectAttribute.Value.ToString();
                    courses.Add(c);
                    // other possible useful attributes...
                    //string courseBrowseID = maintCourseBrowse.ID.ToString();
                    //string courseBrowseLevel = maintCourseBrowse.LeveltAttribute.Value.ToString();
                    //string courseBrowseCode = maintCourseBrowse.CodeAttribute.Value.ToString();
                    //string courseBrowseDescription = maintCourseBrowse.DescriptionAttribute.Value.ToString();
                }
            }
            return courses;
        }
 
Code Sample -POS
 public static List<POS> Getp16CourseList()
        {
            // reference CourseManagerProcess & Entities
            // load up the Post 16 Programme for an academic year
            SIMS.Processes.MaintainProgrammeOfStudy maintainProgrammeOfStudy = new MaintainProgrammeOfStudy();
            maintainProgrammeOfStudy.Load("2022"); // 2022 is the start of the 2 year course ending in Summer 2024.
            List<POS> POSs = new List<POS>();
            foreach (SIMS.Entities.StudentProgramme studProgramme in maintainProgrammeOfStudy.StudentProgrammes.Value)
            {
                POS p = new POS();
                // this one gets the Courses ShortName...
                // this will have to be used to map to the Course ShortName for the QN and Subject, if relevant. 
                p.OtherCourses = studProgramme.OtherCoursesAttribute.Value;
                p.PersonId = studProgramme.PersonIdAttribute.Value;
                p.Id = studProgramme.StudentProgrammeIdAttribute.Value;
                p.Start = studProgramme.ProgrammeStartAttribute.Value;
                p.ExpectedEnd = studProgramme.ProgrammeExpectedEndAttribute.Value;
                p.ProgrammeEnd = studProgramme.ProgrammeEndAttribute.Value;
                p.CoreAim = studProgramme.CoreAimAttribute.Value; //bool?
                if (studProgramme.ProgrammeCompletionStatusAttribute != null)
                {
                    p.CompletionStatus = studProgramme.ProgrammeCompletionStatusAttribute.Value.Description;
                }
                p.Programme = studProgramme.ProgrammeAttribute.ToString();
                p.WithdrawalReason = studProgramme.WithdrawalReasonAttribute.ToString();
                p.Traineeship = studProgramme.TraineeshipAttribute.ToString();
                p.TTHours = studProgramme.TTHoursAttribute.Value;
                p.TotalHours = studProgramme.TotalHoursAttribute.Value;
                p.NQHours = studProgramme.NonQualHoursAttribute.Value;
                p.QualHours = studProgramme.QualHoursAttribute.Value;
                POSs.Add(p);
            }
            return POSs;
        }
Example Output - Course Lookup
[
  {
    "courseBrowseShortName": "Ar/GCE2Y",
    "courseBrowseLaOrQan": "60144567/3510",
    "courseBrowseSubject": "Art"
  },
  {
    "courseBrowseShortName": "Bi/GCE2Y",
    "courseBrowseLaOrQan": "60142601/1010",
    "courseBrowseSubject": "Biology"
  },
 Example Output - POS
[
  {
    "OtherCourses": "Do/TLevC; Ds/TLevS; Wp/TLev3;",
    "PersonId": 12108,
    "Id": 1732,
    "Start": "2022-09-05T00:00:00",
    "ExpectedEnd": "2024-07-31T00:00:00",
    "ProgrammeEnd": "0001-01-01T00:00:00",
    "CoreAim": "",
    "CompletionStatus": "Continuing",
    "Programme": "Study Programme",
    "WithdrawalReason": "",
    "Traineeship": "False",
    "TTHours": 21,
    "TotalHours": 600,
    "QualHours": 600,
    "NQHours": 0
  },