Ejemplo n.º 1
0
        public async Task <IActionResult> Edit(ModuleActivityPostViewModel viewModel)
        {
            var module = db.Modules.Find(viewModel.Module.ModuleId);

            // Validate start and end time
            var errorMessage = "";

            if (!IsModuleTimeCorrect(ref errorMessage, module.CourseId, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, viewModel.Module.ModuleId))
            {
                TempData["ValidationError"] = errorMessage;
                return(Json(new { redirectToUrl = Url.Action("Edit", "Modules", new { id = module.Id }) }));
            }

            if (ModelState.IsValid)
            {
                try
                {
                    module.Name        = viewModel.Module.ModuleName;
                    module.Description = viewModel.Module.ModuleDescription;
                    module.StartTime   = viewModel.Module.ModuleStartTime;
                    module.EndTime     = viewModel.Module.ModuleEndTime;

                    db.Update(module);
                    await db.SaveChangesAsync();

                    if (viewModel.Data != null)
                    {
                        if (IsActivityOverlap(viewModel.Data))
                        {
                            TempData["ValidationError"] = "Activity start and end times overlap";
                            return(Json(new { redirectToUrl = Url.Action("Edit", "Modules", new { id = module.Id }) }));
                        }
                        foreach (var item in viewModel.Data)
                        {
                            if (!IsActivityTimeCorrect(ref errorMessage, viewModel.Module.ModuleId, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, item.ActivityStartTime, item.ActivityEndTime))
                            {
                                TempData["ValidationError"] = errorMessage;
                                return(Json(new { redirectToUrl = Url.Action("Edit", "Modules", new { id = module.Id }) }));
                            }
                            var activity = new Activity
                            {
                                Name           = item.ActivityName,
                                Description    = item.ActivityDescription,
                                StartTime      = item.ActivityStartTime,
                                EndTime        = item.ActivityEndTime,
                                ActivityTypeId = item.ActivityTypeId,
                                Module         = module
                            };
                            db.Add(activity);
                        }

                        await db.SaveChangesAsync();
                    }
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ModuleExists(module.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(Json(new { redirectToUrl = Url.Action("Teacher", "AppUsers", new { id = module.CourseId }) }));
            }
            ViewData["CourseId"] = new SelectList(db.Courses, "Id", "Id", module.CourseId);
            return(View(module));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Create(ModuleActivityPostViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                // TODO: perform id control comparison
                // TODO: Check if redirect problem stems from ajax

                // Check module not is in same timespan as existing module for this course. Also validate other things for start and end time

                var errorMessage = "";
                if (!IsModuleTimeCorrect(ref errorMessage, viewModel.Module.CourseId, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, null))
                {
                    TempData["ValidationError"] = errorMessage;
                    return(Json(new { redirectToUrl = Url.Action("Create", "Modules", new { id = viewModel.Module.CourseId }) }));
                    // TODO: Create view is reset with default values. Can that be fixed?
                }

                var module = new Module
                {
                    CourseId    = viewModel.Module.CourseId,
                    Name        = viewModel.Module.ModuleName,
                    Description = viewModel.Module.ModuleDescription,
                    StartTime   = viewModel.Module.ModuleStartTime,
                    EndTime     = viewModel.Module.ModuleEndTime
                };

                db.Add(module);

                if (viewModel.Data != null)
                {
                    if (IsActivityOverlap(viewModel.Data))
                    {
                        TempData["ValidationError"] = "Activity start and end times overlap";
                        return(Json(new { redirectToUrl = Url.Action("Create", "Modules", new { id = viewModel.Module.CourseId }) }));
                    }
                    foreach (var item in viewModel.Data)
                    {
                        if (!IsActivityTimeCorrect(ref errorMessage, null, viewModel.Module.ModuleStartTime, viewModel.Module.ModuleEndTime, item.ActivityStartTime, item.ActivityEndTime))
                        {
                            TempData["ValidationError"] = errorMessage;
                            return(Json(new { redirectToUrl = Url.Action("Create", "Modules", new { id = viewModel.Module.CourseId }) }));
                        }
                        var activity = new Activity
                        {
                            Name           = item.ActivityName,
                            Description    = item.ActivityDescription,
                            StartTime      = item.ActivityStartTime,
                            EndTime        = item.ActivityEndTime,
                            ActivityTypeId = item.ActivityTypeId,
                            Module         = module
                        };
                        db.Add(activity);
                    }
                }

                await db.SaveChangesAsync();

                return(Json(new { redirectToUrl = Url.Action("Teacher", "AppUsers", new { id = viewModel.Module.CourseId }) }));
            }
            //ViewData["CourseId"] = new SelectList(db.Courses, "Id", "Id", module.CourseId); // What does this show? Which course it belongs to?
            return(View(viewModel));
        }