Ejemplo n.º 1
0
        public async Task <IActionResult> Index(EditCourseRunSaveViewModel model)
        {
            if (!model.CourseId.HasValue)
            {
                return(BadRequest());
            }

            var courseId = model.CourseId.Value;

            var allRegions = await _regionCache.GetAllRegions();

            var allSubRegionIds = allRegions.SelectMany(r => r.SubRegions).Select(sr => sr.Id).ToHashSet();

            bool     flexibleStartDate  = true;
            DateTime?specifiedStartDate = null;

            if (model.StartDateType.Equals("SpecifiedStartDate",
                                           StringComparison.InvariantCultureIgnoreCase))
            {
                string day       = model.Day.Length == 1 ? string.Concat("0", model.Day) : model.Day;
                string month     = model.Month.Length == 1 ? string.Concat("0", model.Month) : model.Month;
                string startDate = string.Format("{0}-{1}-{2}", day, month, model.Year);
                specifiedStartDate = DateTime.ParseExact(startDate, "dd-MM-yyyy",
                                                         System.Globalization.CultureInfo.InvariantCulture);

                model.StartDate = specifiedStartDate.Value;

                flexibleStartDate = false;
            }

            if (model.National == true)
            {
                model.SelectedRegions = null;
            }

            model.FlexibleStartDate = flexibleStartDate;

            var validationResult = new EditCourseRunSaveViewModelValidator(allRegions, _clock).Validate(model);

            if (!validationResult.IsValid)
            {
                return(BadRequest());
            }

            var updateCommand = new UpdateCourseRun()
            {
                CourseRunId       = model.CourseRunId,
                DurationUnit      = model.DurationUnit,
                DeliveryMode      = model.DeliveryMode,
                Cost              = !string.IsNullOrEmpty(model.Cost) ? Convert.ToDecimal(model.Cost) : (decimal?)null,
                CostDescription   = model.CostDescription ?? "",
                CourseName        = model.CourseName,
                CourseUrl         = model.Url,
                DurationValue     = Convert.ToInt32(model.DurationLength),
                ProviderCourseId  = model.CourseProviderReference ?? "",
                FlexibleStartDate = flexibleStartDate,
                StartDate         = specifiedStartDate,
                UpdatedBy         = _currentUserProvider.GetCurrentUser(),
                UpdatedOn         = _clock.UtcNow
            };

            updateCommand.National = null;
            switch (model.DeliveryMode)
            {
            case CourseDeliveryMode.ClassroomBased:
                updateCommand.National     = null;
                updateCommand.SubRegionIds = null;
                updateCommand.VenueId      = model.VenueId;

                updateCommand.AttendancePattern = model.AttendanceMode;
                updateCommand.StudyMode         = model.StudyMode;

                break;

            case CourseDeliveryMode.WorkBased:
                updateCommand.VenueId = null;
                var availableRegions = new SelectRegionModel();
                if (model.National.Value)
                {
                    updateCommand.National     = true;
                    updateCommand.SubRegionIds = null;
                }
                else
                {
                    updateCommand.National          = false;
                    updateCommand.SubRegionIds      = model.SelectedRegions.Where(id => allSubRegionIds.Contains(id));
                    updateCommand.AttendancePattern = null;
                    updateCommand.StudyMode         = null;
                }
                break;

            case CourseDeliveryMode.Online:

                updateCommand.SubRegionIds      = null;
                updateCommand.VenueId           = null;
                updateCommand.National          = null;
                updateCommand.AttendancePattern = null;
                updateCommand.StudyMode         = null;

                break;
            }

            var updateResult = await _sqlQueryDispatcher.ExecuteQuery(updateCommand);

            if (!(updateResult.Value is Success))
            {
                return(BadRequest());
            }

            Session.Remove("NewAddedVenue");
            Session.Remove("Option");

            switch (model.Mode)
            {
            case PublishMode.DataQualityIndicator:
                TempData[TempDataKeys.ExpiredCoursesNotification] = model.CourseName + " has been updated";
                return(RedirectToAction("Index", "ExpiredCourseRuns")
                       .WithProviderContext(_providerContextProvider.GetProviderContext(withLegacyFallback: true)));

            default:
                TempData[TempDataKeys.ShowCourseUpdatedNotification] = true;
                return(RedirectToAction("Index", "CourseSummary",
                                        new
                {
                    courseId = model.CourseId,
                    courseRunId = model.CourseRunId
                }));
            }
        }
Ejemplo n.º 2
0
        public async Task <OneOf <NotFound, Success> > Execute(SqlTransaction transaction, UpdateCourseRun query)
        {
            var sql = $@"
UPDATE Pttcd.CourseRuns SET
    CourseName = @CourseName,
    DeliveryMode = @DeliveryMode,
    FlexibleStartDate = @FlexibleStartDate,
    StartDate = @StartDate,
    CourseWebsite = @CourseUrl,
    Cost = @Cost,
    CostDescription = @CostDescription,
    DurationUnit = @DurationUnit,
    DurationValue = @DurationValue,
    ProviderCourseId = @ProviderCourseId,
    [National] = @National,
    VenueId = @VenueId,
    AttendancePattern = @AttendancePattern,
    StudyMode = @StudyMode,
    UpdatedBy = @UpdatedByUserId,
    UpdatedOn = @UpdatedOn,
    DataIsHtmlEncoded = 0
WHERE CourseRunId = @CourseRunId
AND CourseRunStatus = {(int)CourseStatus.Live}

IF @@ROWCOUNT = 0
BEGIN
    SELECT 1 AS Result
    RETURN
END

MERGE Pttcd.CourseRunSubRegions AS target
USING (SELECT Value FROM @SubRegionIds) AS source
ON target.CourseRunId = @CourseRunId AND target.RegionId = source.Value
WHEN NOT MATCHED THEN INSERT (CourseRunId, RegionId) VALUES (@CourseRunId, source.Value)
WHEN NOT MATCHED BY SOURCE AND target.CourseRunId = @CourseRunId THEN DELETE;

DECLARE @CourseRunIds Pttcd.GuidIdTable

INSERT INTO @CourseRunIds VALUES (@CourseRunId)

EXEC Pttcd.RefreshFindACourseIndex @CourseRunIds = @CourseRunIds, @Now = @UpdatedOn

SELECT 0 AS Result";

            var paramz = new
            {
                query.CourseRunId,
                query.CourseName,
                query.DeliveryMode,
                query.FlexibleStartDate,
                query.StartDate,
                query.CourseUrl,
                query.Cost,
                query.CostDescription,
                query.DurationUnit,
                query.DurationValue,
                query.ProviderCourseId,
                query.National,
                SubRegionIds = TvpHelper.CreateStringTable(query.SubRegionIds ?? Array.Empty <string>()),
                query.VenueId,
                query.AttendancePattern,
                query.StudyMode,
                UpdatedByUserId = query.UpdatedBy.UserId,
                query.UpdatedOn
            };

            var result = await transaction.Connection.QuerySingleAsync <Result>(sql, paramz, transaction);

            if (result == Result.Success)
            {
                return(new Success());
            }
            else
            {
                return(new NotFound());
            }
        }