public ActionResult CommitBreakInterval(TrainingItemViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            //if (!ModelState.IsValid)
            //{
            //    ViewBag.ModelState = this.ModelState;
            //    return View(Settings.Default.ReportInputError);
            //}

            TrainingExecution execution = models.GetTable <TrainingExecution>().Where(t => t.ExecutionID == viewModel.ExecutionID).FirstOrDefault();

            if (execution == null)
            {
                return(Json(new { result = false, message = "預編課程項目不存在!!" }));
            }

            var stage = models.GetTable <TrainingStage>().Where(s => s.StageID == viewModel.StageID).FirstOrDefault();

            if (stage == null)
            {
                return(View("~/Views/Shared/JsAlert.cshtml", model: "資料錯誤!!"));
            }

            TrainingItem item = execution.TrainingItem.Where(i => i.ItemID == viewModel.ItemID).FirstOrDefault();

            if (item == null)
            {
                item = new TrainingItem
                {
                    ExecutionID = execution.ExecutionID,
                    Sequence    = execution.TrainingItem.Count,
                    TrainingID  = stage.TrainingStageItem
                                  .Select(t => t.TrainingType)
                                  .Where(t => t.BreakMark == true)
                                  .Select(t => t.TrainingID).FirstOrDefault()
                };
                execution.TrainingItem.Add(item);
            }

            item.BreakIntervalInSecond = viewModel.BreakInterval = viewModel.BreakInterval.GetEfficientString();
            item.Repeats = viewModel.Repeats = viewModel.Repeats.GetEfficientString();
            item.Remark  = viewModel.Remark;

            models.SubmitChanges();

            if (item.Repeats != null)
            {
                calculateTotalMinutes(execution, stage.StageID);
            }

            return(Json(new { result = true, message = "", stage.StageID }));
        }
        private void calculateTotalMinutes(TrainingExecution execution, int stageID)
        {
            TrainingExecutionStage stage = execution.TrainingExecutionStage.Where(t => t.StageID == stageID).FirstOrDefault();

            if (stage == null)
            {
                stage = new TrainingExecutionStage
                {
                    StageID     = stageID,
                    ExecutionID = execution.ExecutionID
                };
                execution.TrainingExecutionStage.Add(stage);
            }

            var items = models.GetTable <TrainingItem>()
                        .Where(t => t.ExecutionID == execution.ExecutionID)
                        .Where(t => t.TrainingType.TrainingStageItem.StageID == stageID)
                        .OrderBy(t => t.Sequence);

            stage.TotalMinutes = calculateDuration(items);
            models.SubmitChanges();
        }
        public ActionResult CommitEmphasis(TrainingExecutionViewModel viewModel)
        {
            ViewResult        result = (ViewResult)EditEmphasis(viewModel);
            TrainingExecution model  = result.Model as TrainingExecution;

            if (model == null)
            {
                return(result);
            }

            viewModel.Emphasis = viewModel.Emphasis.GetEfficientString();
            if (viewModel.Emphasis == null)
            {
                return(Json(new { result = false, message = "Unfinished?!" }));
            }
            else if (viewModel.Emphasis.Length > 20)
            {
                return(Json(new { result = false, message = "太長了!超過20個中英文字" }));
            }
            model.Emphasis = viewModel.Emphasis;
            models.SubmitChanges();

            return(Json(new { result = true }));
        }
        public ActionResult CommitTrainingItem(TrainingItemViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            viewModel.Description = viewModel.Description.GetEfficientString();
            if (viewModel.Description == null)
            {
                ModelState.AddModelError("Description", "請輸入動作");
            }

            //viewModel.ActualStrength = viewModel.ActualStrength.GetEfficientString();
            //if(viewModel.ActualStrength == null)
            //{
            //    ModelState.AddModelError("ActualStrength", "請輸入強度");
            //}

            //viewModel.ActualTurns = viewModel.ActualTurns.GetEfficientString();
            //if (viewModel.ActualTurns == null)
            //{
            //    ModelState.AddModelError("ActualTurns", "請輸入次數");
            //}

            if (!viewModel.DurationInSeconds.HasValue)
            {
                ModelState.AddModelError("DurationInSeconds", "請輸入時間");
            }

            if (!viewModel.TrainingID.HasValue)
            {
                ModelState.AddModelError("TrainingID", "請選擇類別");
            }

            viewModel.Remark = viewModel.Remark.GetEfficientString();
            if (viewModel.PurposeID.HasValue && viewModel.Remark == null)
            {
                ModelState.AddModelError("Remark", "請輸入里程碑內容");
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = this.ModelState;
                return(View(Settings.Default.ReportInputError));
            }

            TrainingExecution execution = models.GetTable <TrainingExecution>().Where(t => t.ExecutionID == viewModel.ExecutionID).FirstOrDefault();

            if (execution == null)
            {
                return(Json(new { result = false, message = "預編課程項目不存在!!" }));
            }

            TrainingItem item = execution.TrainingItem.Where(i => i.ItemID == viewModel.ItemID).FirstOrDefault();

            if (item == null)
            {
                item = new TrainingItem
                {
                    ExecutionID = execution.ExecutionID,
                    Sequence    = execution.TrainingItem.Count
                };
                execution.TrainingItem.Add(item);
            }

            item.GoalStrength      = viewModel.GoalStrength;
            item.GoalTurns         = viewModel.GoalTurns;
            item.Description       = viewModel.Description;
            item.TrainingID        = viewModel.TrainingID;
            item.Remark            = viewModel.Remark;
            item.DurationInMinutes = viewModel.DurationInMinutes;

            models.SubmitChanges();

            models.ExecuteCommand("delete TrainingItemAids where ItemID = {0}", item.ItemID);
            if (viewModel.AidID != null && viewModel.AidID.Length > 0)
            {
                foreach (var aid in viewModel.AidID)
                {
                    item.TrainingItemAids.Add(new TrainingItemAids {
                        AidID = aid
                    });
                }
                models.SubmitChanges();
            }

            calculateTotalMinutes(execution, viewModel.StageID.Value);
            bool UpdatePurpose = false;

            if (item.PurposeID.HasValue)
            {
                if (viewModel.PurposeID.HasValue)
                {
                    models.ExecuteCommand("Update PersonalExercisePurposeItem set PurposeItem = {0} where ItemID = {1}", viewModel.Remark, item.PurposeID);
                }
                else
                {
                    models.ExecuteCommand("delete PersonalExercisePurposeItem where ItemID = {0}", item.PurposeID);
                }
                UpdatePurpose = true;
            }
            else if (viewModel.PurposeID == -1 && item.Remark != null)
            {
                var purpose = item.TrainingExecution.TrainingPlan.LessonTime.RegisterLesson.UserProfile.AssertPurposeItem(models, item.Remark);
                purpose.CompleteDate = item.TrainingExecution.TrainingPlan.LessonTime.ClassTime;    //DateTime.Now;
                item.PurposeID       = purpose.ItemID;
                models.SubmitChanges();
                UpdatePurpose = true;
            }

            return(Json(new { result = true, message = "", viewModel.StageID, UpdatePurpose }));
        }