Exemplo n.º 1
0
 /// <summary>
 /// Constructor - will generate a ResultDTO object from a database record.
 /// </summary>
 /// <param name="eSR">A database record of the e-Learning result.</param>
 public ResultDTO(ESRModules eSR)
 {
     this.Id       = eSR.ID;
     this.PersonId = eSR.Employee;
     this.UserName = eSR.UserName;
     if (eSR.StaffID != null)
     {
         this.PersonName = eSR.Staff.Fname + " " + eSR.Staff.Sname;
     }
     this.CourseId = eSR.CourseID;
     if (eSR.CourseID != null)
     {
         this.CourseDesc = eSR.Course.CourseName;
     }
     this.ModuleName     = eSR.ModuleName;
     this.CompletionDate = eSR.CompletionDate;
     this.FromADAcc      = eSR.Source;
     this.Received       = eSR.Received;
     this.Processed      = eSR.Processed;
     this.Comments       = eSR.Comments;
 }
Exemplo n.º 2
0
        public async Task <IHttpActionResult> PostELResult(NewResultDTO eLResult)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            ESRModules result = new ESRModules()
            {
                Employee       = eLResult.Employee ?? -1,
                UserName       = eLResult.UserName,
                ModuleName     = eLResult.ModuleName,
                CompletionDate = eLResult.CompletionDate,
                Source         = eLResult.Source,
                Processed      = false
            };

            if (string.IsNullOrWhiteSpace(result.Source))
            {
                result.Source = User.Identity.Name;
            }

            db.ESRs.Add(result);
            await db.SaveChangesAsync();

            await ProcessResultAsync(result);

            //Make sure Staff and Course details are in memory
            if (result.StaffID != null)
            {
                var person = await db.People.SingleOrDefaultAsync(p => p.ID == result.StaffID);
            }

            if (result.CourseID != null)
            {
                var person = await db.Courses.SingleOrDefaultAsync(c => c.ID == result.CourseID);
            }

            return(CreatedAtRoute("DefaultApi", new { id = result.ID }, new ResultDTO(result)));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Attempts to process the E-learning result and update the associated requirement if found.
        /// Updated to processed field to true if sucessful, otherwise will update the comment field
        /// to reflect the reason the processing failed.
        /// </summary>
        /// <param name="eLResult">The E-Learning Result</param>
        /// <returns>nothing</returns>
        private async Task ProcessResultAsync(ESRModules eLResult)
        {
            if (eLResult.StaffID == null)
            {
                List <string> errors = new List <string>();
                if (eLResult.Employee > 0)
                {
                    //Find Person
                    var person = await db.People.SingleOrDefaultAsync(p => p.ESRID == eLResult.Employee);

                    if (person == null)
                    {
                        errors.Add($"Unable to find staff member matching employee number {eLResult.Employee}");
                    }
                    else
                    {
                        eLResult.StaffID = person.ID;
                    }
                }

                if (!string.IsNullOrWhiteSpace(eLResult.UserName) && eLResult.StaffID == null)
                {
                    try
                    {
                        var person = await db.People.SingleOrDefaultAsync(p => p.EMail == eLResult.UserName);

                        if (person == null)
                        {
                            errors.Add($"Unable to find staff member with E-Mail: {eLResult.UserName}");
                        }
                        else
                        {
                            eLResult.StaffID = person.ID;
                        }
                    }
                    catch (InvalidOperationException)
                    {
                        errors.Add($"Multiple Staff records have E-Mail address: {eLResult.UserName}");
                    }
                }

                if (string.IsNullOrWhiteSpace(eLResult.UserName) && eLResult.Employee <= 0)
                {
                    errors.Add("No data items to identify staff member present in data!");
                }

                if (eLResult.StaffID == null)
                {
                    eLResult.Comments = string.Join(", ", errors);
                    await db.SaveChangesAsync();

                    return;
                }
            }

            if (eLResult.CourseID == null)
            {
                //Find Course
                var map = await db.CourseMaps.SingleOrDefaultAsync(c => c.ModuleName == eLResult.ModuleName);

                if (map == null)
                {
                    var course = await db.Courses.SingleOrDefaultAsync(c => c.CourseName == eLResult.ModuleName);

                    if (course == null)
                    {
                        eLResult.Comments = $"Unable to find course matching {eLResult.ModuleName}";
                        await db.SaveChangesAsync();

                        return;
                    }
                    eLResult.CourseID = course.ID;
                }
                else
                {
                    eLResult.CourseID = map.CourseID;
                }
            }


            //Find Requirement
            var req = await db.Requirements.SingleOrDefaultAsync(r => r.Staff == eLResult.StaffID && r.Course == eLResult.CourseID);

            if (req == null)
            {
                eLResult.Comments = "Staff member does not have requirement for course.";
                await db.SaveChangesAsync();

                return;
            }

            //Update Requirement
            if (eLResult.CompletionDate != null)
            {
                req.Status   = (short)5;
                req.Comments = "Course completed via e-learning.";
            }
            else
            {
                eLResult.Comments = "No Completion Date included in message";
                await db.SaveChangesAsync();

                return;
            }
            //Update Result
            eLResult.Processed = true;
            eLResult.Comments += string.Format(" Processed: {0:d}", DateTime.Now);
            await db.SaveChangesAsync();
        }