public ActionResult Create(String id)
        {
            Provider provider = db.Providers.Find(userContext.ItemId);

            if (provider == null)
            {
                return(HttpNotFound());
            }

            AddEditCourseModel model = new AddEditCourseModel
            {
                LearningAimId = id
            };

            if (id != null)
            {
                LearningAim learningAim = db.LearningAims.Find(id);
                if (learningAim == null)
                {
                    return(HttpNotFound());
                }
                model.Qualification                  = learningAim.LearningAimTitle;
                model.QualificationTypeId            = learningAim.QualificationTypeId;
                model.LearningAimQualificationTypeId = learningAim.QualificationTypeId;
                model.AwardingOrganisation           = learningAim.LearningAimAwardOrg.AwardOrgName;
                model.QualificationLevelId           = learningAim.QualificationLevelId;
            }

            // Populate drop downs
            GetLookups(model);

            return(View(model));
        }
 private void GetLookups(AddEditCourseModel model)
 {
     ViewBag.QualificationLevels = new SelectList(
         db.QualificationLevels.OrderBy(x => x.DisplayOrder),
         "QualificationLevelId",
         "QualificationLevelName",
         model.QualificationLevelId);
     ViewBag.QualificationTypes = new SelectList(
         db.QualificationTypes.Where(x => x.IsHidden == false || x.QualificationTypeId == model.QualificationTypeId).OrderBy(x => x.DisplayOrder),
         "QualificationTypeId",
         "QualificationTypeName",
         model.QualificationTypeId);
 }
        public IActionResult Create([FromBody] AddEditCourseModel model)
        {
            // map model to entity
            var course = _mapper.Map <Course>(model);

            try
            {
                // create user
                _courseService.Create(course);
                return(Ok());
            }
            catch (AppException ex)
            {
                // return error message if there was an exception
                return(BadRequest(new { message = ex.Message }));
            }
        }
        public IActionResult Update(int id, [FromBody] AddEditCourseModel model)
        {
            // map model to entity and set id
            var course = _mapper.Map <Course>(model);

            course.Id = id;

            try
            {
                // update course
                _courseService.Update(course);
                return(Ok());
            }
            catch (AppException ex)
            {
                // return error message if there was an exception
                return(BadRequest(new { message = ex.Message }));
            }
        }
        public ActionResult Edit(Int32?id)
        {
            Provider provider = db.Providers.Find(userContext.ItemId);

            if (provider == null)
            {
                return(HttpNotFound());
            }

            Course course = db.Courses.Include("LearningAim").FirstOrDefault(x => x.CourseId == id);

            if (course == null || course.ProviderId != userContext.ItemId)
            {
                return(HttpNotFound());
            }

            AddEditCourseModel model = new AddEditCourseModel(course);

            // Populate drop downs
            GetLookups(model);

            return(View(model));
        }
        private void CheckModel(AddEditCourseModel model)
        {
            LearningAim la = null;

            if (!String.IsNullOrWhiteSpace(model.LearningAimId))
            {
                la = db.LearningAims.Find(model.LearningAimId);
            }
            if (la == null || la.QualificationTypeId == null)
            {
                if (!model.QualificationTypeId.HasValue)
                {
                    ModelState.AddModelError("QualificationTypeId", AppGlobal.Language.GetText(this, "QualificationTypeMandatory", "The Qualification Type field is required"));
                }
            }

            List <String> LearnDirectClassifications = new List <String>();

            if (!String.IsNullOrEmpty(model.LearnDirectClassificationId1))
            {
                LearnDirectClassifications.Add(model.LearnDirectClassificationId1);
            }
            if (!String.IsNullOrEmpty(model.LearnDirectClassificationId2))
            {
                if (LearnDirectClassifications.Contains(model.LearnDirectClassificationId2))
                {
                    ModelState.AddModelError("LearnDirectClassificationId2", AppGlobal.Language.GetText(this, "LearnDirectClassificationInUse", "This Learn Direct Classification has already been specified for this course"));
                }
                else
                {
                    LearnDirectClassifications.Add(model.LearnDirectClassificationId2);
                }
            }
            if (!String.IsNullOrEmpty(model.LearnDirectClassificationId3))
            {
                if (LearnDirectClassifications.Contains(model.LearnDirectClassificationId3))
                {
                    ModelState.AddModelError("LearnDirectClassificationId3", AppGlobal.Language.GetText(this, "LearnDirectClassificationInUse", "This Learn Direct Classification has already been specified for this course"));
                }
                else
                {
                    LearnDirectClassifications.Add(model.LearnDirectClassificationId3);
                }
            }
            if (!String.IsNullOrEmpty(model.LearnDirectClassificationId4))
            {
                if (LearnDirectClassifications.Contains(model.LearnDirectClassificationId4))
                {
                    ModelState.AddModelError("LearnDirectClassificationId4", AppGlobal.Language.GetText(this, "LearnDirectClassificationInUse", "This Learn Direct Classification has already been specified for this course"));
                }
                else
                {
                    LearnDirectClassifications.Add(model.LearnDirectClassificationId4);
                }
            }
            if (!String.IsNullOrEmpty(model.LearnDirectClassificationId5))
            {
                if (LearnDirectClassifications.Contains(model.LearnDirectClassificationId5))
                {
                    ModelState.AddModelError("LearnDirectClassificationId5", AppGlobal.Language.GetText(this, "LearnDirectClassificationInUse", "This Learn Direct Classification has already been specified for this course"));
                }
                else
                {
                    LearnDirectClassifications.Add(model.LearnDirectClassificationId5);
                }
            }
        }
        public async Task <ActionResult> Create(AddEditCourseModel model)
        {
            Provider provider = db.Providers.Find(userContext.ItemId);

            if (provider == null)
            {
                return(HttpNotFound());
            }

            CheckModel(model);

            if (ModelState.IsValid)
            {
                if (!String.IsNullOrEmpty(model.LearningAimId))
                {
                    LearningAim learningAim = db.LearningAims.Find(model.LearningAimId);
                    if (learningAim == null)
                    {
                        return(HttpNotFound());
                    }
                }
                Course course = model.ToEntity(db);
                course.ProviderId           = provider.ProviderId;
                course.RecordStatusId       = (Int32)Constants.RecordStatus.Pending;
                course.AddedByApplicationId = (Int32)Constants.Application.Portal;

                if (String.IsNullOrEmpty(model.LearningAimId))
                {
                    List <String> LearnDirectClassificationCodes = new List <String>();
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId1))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId1);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId2))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId2);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId3))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId3);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId4))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId4);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId5))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId5);
                    }
                    Int32 i = 1;
                    foreach (LearnDirectClassification classification in LearnDirectClassificationCodes.Select(ld => db.LearnDirectClassifications.Find(ld)))
                    {
                        CourseLearnDirectClassification cld = new CourseLearnDirectClassification
                        {
                            LearnDirectClassification = classification,
                            ClassificationOrder       = i
                        };
                        course.CourseLearnDirectClassifications.Add(cld);
                        i++;
                    }
                }

                db.Courses.Add(course);
                await db.SaveChangesAsync();

                List <String> messages = model.GetWarningMessages();
                if (messages.Count == 0)
                {
                    ShowGenericSavedMessage();
                }
                else
                {
                    // Add a blank entry at the beginning so the String.Join starts with <br /><br />
                    messages.Insert(0, "");
                    SessionMessage.SetMessage(AppGlobal.Language.GetText(this, "SaveSuccessfulWithWarnings", "Your changes were saved successfully with the following warnings:") + String.Join("<br /><br />", messages), SessionMessageType.Success);
                }

                // If user clicked "Create" then take them to Course List
                if (Request.Form["Create"] != null)
                {
                    return(RedirectToAction("List"));
                }

                // User clicked "Create and Add Opportunity" - Take them to Create Opportunity page
                return(RedirectToAction("Create", "Opportunity", new { id = course.CourseId }));
            }

            // Populate drop downs
            GetLookups(model);

            return(View(model));
        }
        public async Task <ActionResult> Edit(Int32 id, AddEditCourseModel model)
        {
            Provider provider = db.Providers.Find(userContext.ItemId);

            if (provider == null)
            {
                return(HttpNotFound());
            }

            if (model.CourseId != id)
            {
                return(HttpNotFound());
            }

            Course course = db.Courses.Find(id);

            if (course == null)
            {
                return(HttpNotFound());
            }

            CheckModel(model);

            if (ModelState.IsValid)
            {
                course = model.ToEntity(db);
                if (course.ProviderId != userContext.ItemId)
                {
                    // User is trying to change the VenueId (or the context has changed)
                    return(HttpNotFound());
                }

                // Delete Existing CourseLearnDirectClassifications
                // Normally I would work out which already exist and just write the changes but because of the ordering it's easier just to delete them all and re-write them all
                foreach (CourseLearnDirectClassification ld in course.CourseLearnDirectClassifications.ToList())
                {
                    course.CourseLearnDirectClassifications.Remove(ld);
                }

                // Add any new Learn Direct classifications
                if (String.IsNullOrEmpty(model.LearningAimId))
                {
                    List <String> LearnDirectClassificationCodes = new List <String>();
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId1))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId1);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId2))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId2);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId3))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId3);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId4))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId4);
                    }
                    if (!String.IsNullOrEmpty(model.LearnDirectClassificationId5))
                    {
                        LearnDirectClassificationCodes.Add(model.LearnDirectClassificationId5);
                    }
                    Int32 i = 1;
                    foreach (LearnDirectClassification classification in LearnDirectClassificationCodes.Select(ld => db.LearnDirectClassifications.Find(ld)))
                    {
                        CourseLearnDirectClassification cld = new CourseLearnDirectClassification
                        {
                            LearnDirectClassification = classification,
                            ClassificationOrder       = i
                        };
                        course.CourseLearnDirectClassifications.Add(cld);
                        i++;
                    }
                }

                course.ModifiedByUserId     = Permission.GetCurrentUserId();
                course.ModifiedDateTimeUtc  = DateTime.UtcNow;
                course.AddedByApplicationId = (Int32)Constants.Application.Portal;

                db.Entry(course).State = EntityState.Modified;
                await db.SaveChangesAsync();

                List <String> messages = model.GetWarningMessages();
                if (messages.Count == 0)
                {
                    ShowGenericSavedMessage();
                }
                else
                {
                    // Add a blank entry at the beginning so the String.Join starts with <br /><br />
                    messages.Insert(0, "");
                    SessionMessage.SetMessage(AppGlobal.Language.GetText(this, "SaveSuccessfulWithWarnings", "Your changes were saved successfully with the following warnings:") + String.Join("<br /><br />", messages), SessionMessageType.Success);
                }

                return(RedirectToAction("List"));
            }

            // Populate drop downs
            GetLookups(model);

            return(View(model));
        }