private static CourseEnrollment ConstructCourseEnrollmentEmployee(Enrollments selectedEnrollments) { try { var Course = new CourseEnrollment() { Id = selectedEnrollments.Id, CourseId = selectedEnrollments.CourseId, Progress = selectedEnrollments.Progress, Score = selectedEnrollments.Score, Status = Status.Complete, DateCompleted = String.Format("{0:s}", selectedEnrollments.DateCompleted), DateExpires = String.Format("{0:s}", selectedEnrollments.DateExpires), TimeSpent = selectedEnrollments.TimeSpent, DateStarted = selectedEnrollments.DateStarted, Credits = selectedEnrollments.Credits }; return(Course); } catch { throw; } }
public static void Process(string Vendor) { var startDate = DateTime.Now; var processDate = DateTime.Now; int numberOfCoursesReviewed = 0; int numberOfCourseShell = 0; int numberOfEnrollments = 0; var vendorName = Vendor.Replace(" LMS", ""); try { var absorbCourses = new List <Courses>(); var LogActivity = Carollo.GetApplicationActions(Vendor); if (Carollo.IsLogSetUpForApp(LogActivity)) { // Absorb var LMSEmployees = new List <LMSEmployees>(); string token = AbsorbAPI.GetToken(); if (IsToken(token)) { LMSEmployees = AbsorbAPI.GetUsers(token); } else { Carollo.WriteToLog("CEEC token not valid.", MessageType.Text, Vendor, ActionType.SetUpLog.ToString(), true, processDate, vendorName); return; } var Completions = Carollo.GetCourseCompletions(vendorName); if (Completions.Count == 0) { Carollo.WriteToLog("No completion data.", MessageType.Text, Vendor, ActionType.SetUpLog.ToString(), true, processDate, vendorName); return; } // Group users together for user lookups Completions.Sort((x, y) => x.UserName_Email.CompareTo(y.UserName_Email)); var currentUserName = ""; var currentUserHasHCMData = false; var currentUserId = ""; var HCMEmployees = new List <HCMEmployees>(); HCMEmployees = Carollo.GetEmployees(); var userEnrollments = new List <Enrollments>(); var AbsorbUser = new LMSEmployees(); var currentHCMEmployee = new HCMEmployees(); foreach (var completion in Completions) { numberOfCoursesReviewed++; if (completion.UserName_Email != currentUserName) { currentUserHasHCMData = false; currentHCMEmployee = HCMEmployees.Find(item => item.UserName.ToLower() == completion.UserName_Email.ToLower()); if (currentHCMEmployee != null) { AbsorbUser = LMSEmployees.Find(item => item.UserName.ToLower() == completion.UserName_Email.ToLower()); if (AbsorbUser == null) { continue; } userEnrollments = AbsorbAPI.GetUserEnrollments(token, AbsorbUser.Id.Value); currentUserHasHCMData = true; currentUserId = AbsorbUser.Id.ToString(); } else { Carollo.SetCourseCompletionProcessedDate((int)completion.Id); Carollo.WriteToLog("No employee exist in HCM that matches the completion data for user " + completion.UserName_Email + ".", MessageType.Text, Vendor, ActionType.SetUpLog.ToString(), true, processDate, vendorName); continue; } currentUserName = completion.UserName_Email; } if (currentUserHasHCMData) { // fetch data only if needed and only once if (absorbCourses.Count == 0) { absorbCourses = AbsorbAPI.GetCourses(token); } var activityCourse = new Courses(); if (absorbCourses.Exists(item => item.ExternalId.ToUpper() == completion.CourseName.ToUpper())) { activityCourse = absorbCourses.Find(item => item.ExternalId.ToUpper() == completion.CourseName.ToUpper()); } if (activityCourse.ExternalId != null) { var needsUpdate = false; var userEnrollment = new Enrollments(); if (!userEnrollments.Exists(item => item.CourseId == activityCourse.Id && item.DateCompleted == completion.CompletionDate)) { var enrollment = AbsorbAPI.CreateEnrollment(token, currentUserId, activityCourse.Id.ToString()); if (enrollment == "") { continue; } Guid enrollmentGuid; if (Guid.TryParse(enrollment, out enrollmentGuid)) { numberOfEnrollments++; needsUpdate = true; userEnrollment = new Enrollments { Id = enrollmentGuid, CourseId = activityCourse.Id, UserId = (Guid)AbsorbUser.Id, IsActive = true, Progress = 1, Score = completion.Score, DateStarted = DateTime.Now, DateCompleted = completion.CompletionDate, TimeSpentTicks = 0, AcceptedTermsAndConditions = false }; Carollo.WriteToLog("Enrollment succeeded: " + enrollment, MessageType.Text, Carollo.DetermineAction(LogActivity[0], ActionType.UpdateEnrollment.ToString()), true, currentUserId, completion.CourseName, completion.CourseTitle, completion.UserName_Email, vendorName, ""); } else { Carollo.WriteToLog("Enrollment failed.", MessageType.Text, Carollo.DetermineAction(LogActivity[0], ActionType.WriteToLogError.ToString()), true, currentUserId, completion.CourseName, completion.CourseTitle, completion.UserName_Email, vendorName, ""); } } else { userEnrollment = userEnrollments.Find(item => item.CourseId == activityCourse.Id && item.DateCompleted == completion.CompletionDate); if (userEnrollment.Status != Status.Complete) { needsUpdate = true; } } if (needsUpdate) { var CourseEnrollment = ConstructCourseEnrollmentEmployee(userEnrollment); var UpdateResult = AbsorbAPI.UpdateEnrollmentCourse(token, (Guid)AbsorbUser.Id, CourseEnrollment); Carollo.WriteToLog(currentHCMEmployee.NickName + " " + currentHCMEmployee.LastName + " completed " + userEnrollment.CourseName + " results:" + UpdateResult, MessageType.Text, Carollo.DetermineAction(LogActivity[0], ActionType.UpdateEnrollment.ToString()), false, currentHCMEmployee.UserName, userEnrollment.CourseId.ToString(), userEnrollment.CourseName, currentHCMEmployee.EmployeeID, vendorName, ""); } Carollo.SetCourseCompletionProcessedDate((int)completion.Id); } else { numberOfCourseShell++; Carollo.WriteToLog("No course shell exist in CEEC that matches the completion data", MessageType.Text, Carollo.DetermineAction(LogActivity[0], ActionType.CourseShell.ToString()), true, currentUserId, completion.CourseName, completion.CourseTitle, completion.UserName_Email, vendorName, ""); } } else { Carollo.WriteToLog("No employee exist in HCM that matches the completion data for user " + completion.UserName_Email + ".", MessageType.Text, Vendor, ActionType.SetUpLog.ToString(), true, processDate, vendorName); } } Carollo.WriteToLog("External completion Courses to CEEC results: Courses Reviewed = " + numberOfCoursesReviewed + " - Courses Enrolled = " + numberOfEnrollments + " - Course Shells missing = " + numberOfCourseShell, MessageType.Text, Vendor, ActionType.ExecuteCompleted.ToString(), true, startDate, vendorName); } else { Carollo.WriteToLog("The Log Activity is not setup for this application", MessageType.Text, Vendor, ActionType.SetUpLog.ToString(), true, startDate, vendorName); } } catch (Exception ex) { Carollo.WriteToLog(ex.StackTrace, MessageType.Text, Vendor, ActionType.WriteToLogError.ToString(), true, startDate, vendorName); } }