public static void CreateScoRecordsForCourse(Enrollment enrollment, ApplicationDbContext context)
        {
            
            var courseTemplateId = enrollment.Course.CourseTemplateId;
            var courseScos = context.CourseScos.Include(c => c.Sco).Where(cm => cm.CourseTemplateId == courseTemplateId);

            foreach (var item in courseScos)
            {
                var scoRecord = new ScoRecord
                {
                    Title = item.Title,
                    EnrollmentId = enrollment.Id,
                    CatalogueNumber = item.CatalogueNumber,
                    ScoId = item.Sco.Id,
                    ScormName = "",
                    ScormValue = "",
                    LessonStatus = "",
                    LastClosed = DateTime.Parse("1900-1-1"),
                    Stored = DateTime.Parse("1900-1-1"),
                    TimeStamp = DateTime.Parse("1900-1-1"),
                    CourseTemplateId = enrollment.Course.CourseTemplateId,
                    CourseId = enrollment.CourseId,
                    ActorId = enrollment.ApplicationUserId,
                    //IsEnabled = item.RequiredCourseScoId == 0,
                    IsFinalExam = item.IsFinalExam
                };

                //var requiredRecord = context.CourseScos.Find(item.RequiredCourseScoId);
                //if (requiredRecord != null)
                //    scoRecord.RequiredScoId = requiredRecord.ScoId;

                context.ScoRecords.Add(scoRecord);
            }

            context.SaveChanges();
        }
 private static bool HasJustBeenCompleted(ScoRecord scoRecord)
 {
     var previouslyCompletedSco = scoRecord.IsCompleted;
     var currentCompletedSco = scoRecord.LessonStatus == "passed" || scoRecord.LessonStatus == "completed" ? true : false;
     scoRecord.IsCompleted = scoRecord.IsCompleted ? scoRecord.IsCompleted : currentCompletedSco;
     var justCompletedSco = previouslyCompletedSco != currentCompletedSco;
     return justCompletedSco;
 }
        private static void ExtractFieldValuesFromRawScormValue(ref ScoRecord scoRecord)
        {

            //This could be done each time the scoRecord is updated in the default or once at the end of the session - "finish"  
            var dict = ScormServices.CreateDictionaryFromJsonScormObject(scoRecord);
            scoRecord.LessonStatus = dict["cmi.core.lesson_status"].ToString();


        }
        private void MakeNextLessonEnabled(ref ScoRecord scoRecord)
        {
            scoRecord.IsCompleted = true;


            //Enable Next Lesson in this course 
            ScoRecord record = scoRecord;
            var nextScoRecord =
                _context.ScoRecords.FirstOrDefault(
                    s =>
                        s.RequiredScoId == record.ScoId && s.CourseId == record.CourseId &&
                        s.EnrollmentId == record.EnrollmentId);
            if (nextScoRecord != null)
            {
                nextScoRecord.IsEnabled = true;
            }
            _context.SaveChanges();
        }
 private void UpdateCourseEnrollmentRecord(ScoRecord scoRecord)
 {
     try
     {
         var enrollment = _context.Enrollments.Find(scoRecord.EnrollmentId);
         if (enrollment != null)
         {
             enrollment.Score = scoRecord.Score;
             enrollment.PassedDate = scoRecord.TimeStamp;
         }
         _context.SaveChanges();
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex);
     }
 }
 private ScoRecord ProcessEndOfLesson(ScoRecord scoRecord, bool justCompletedSco)
 {
     if (scoRecord.LessonStatus == "complete" || scoRecord.LessonStatus == "passed")
     {
         MakeNextLessonEnabled(ref scoRecord);
     }
     ScormServices.AddAnswersToDataBase(scoRecord, _context);
     return scoRecord;
 }
 private void ProcessAnyFinalExam(ScoRecord scoRecord)
 {
     if (scoRecord.IsFinalExam)
     {
         if (scoRecord.IsCompleted)
         {
             UpdateCourseEnrollmentRecord(scoRecord);
         }
     }
 }