public ActionResult CloneLearnerTrainingPlan(LessonTimeBookingViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            if (viewModel.KeyID != null)
            {
                viewModel.LessonID = viewModel.DecryptKeyValue();
            }

            LessonTime item = models.GetTable <LessonTime>()
                              .Where(l => l.LessonID == viewModel.LessonID).FirstOrDefault();

            if (item == null)
            {
                return(Json(new { result = false, message = "課程資料錯誤!!" }));
            }

            IEnumerable <RegisterLesson> lessonItems = item.GroupingLesson.RegisterLesson;

            if (lessonItems.Count() < 2)
            {
                return(Json(new { result = false, message = "課程非一對多!!" }));
            }

            if (viewModel.CopyFrom.HasValue)
            {
                if (!viewModel.UID.HasValue)
                {
                    return(Json(new { result = false, message = "未指定同步目標之學員!!" }));
                }

                var source = item.AssertLearnerTrainingPlan(models, viewModel.CopyFrom.Value);
                var target = item.AssertLearnerTrainingPlan(models, viewModel.UID.Value);
                models.CloneTrainingPlan(source, target);
            }
            else
            {
                if (!viewModel.UID.HasValue)
                {
                    return(Json(new { result = false, message = "未指定同步來源之學員!!" }));
                }

                var source = item.AssertLearnerTrainingPlan(models, viewModel.UID.Value);
                foreach (var lesson in lessonItems.Where(r => r.UID != viewModel.UID.Value))
                {
                    var target = item.AssertLearnerTrainingPlan(models, lesson.UID);
                    models.CloneTrainingPlan(source, target);
                }
            }
            return(Json(new { result = true }));
        }
        public ActionResult CopyTrainingPlan(LessonTimeBookingViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            if (viewModel.KeyID != null)
            {
                viewModel.LessonID = viewModel.DecryptKeyValue();
            }

            LessonTime copyTo = models.GetTable <LessonTime>()
                                .Where(l => l.LessonID == viewModel.LessonID).FirstOrDefault();

            if (copyTo == null)
            {
                return(Json(new { result = false, message = "課程資料錯誤!!" }));
            }

            LessonTime copyFrom = models.GetTable <LessonTime>()
                                  .Where(l => l.LessonID == viewModel.CopyFrom).FirstOrDefault();

            if (copyTo == null)
            {
                return(Json(new { result = false, message = "複製來源課程資料錯誤!!" }));
            }

            var source = copyFrom.AssertLearnerTrainingPlan(models, viewModel.UID.Value);
            var target = copyTo.AssertLearnerTrainingPlan(models, viewModel.UID.Value);

            models.CloneTrainingPlan(source, target, false);

            return(Json(new { result = true }));
        }