public ActionResult DiagnoseByLearner(FitnessDiagnosisViewModel viewModel)
        {
            BodyDiagnosis item;
            BodyDiagnosis first = models.GetTable <BodyDiagnosis>()
                                  .Where(d => d.LearnerID == viewModel.UID)
                                  .OrderBy(d => d.DiagnosisID).First();

            if (viewModel.DiagnosisID.HasValue)
            {
                item = models.GetTable <BodyDiagnosis>()
                       .Where(d => d.LearnerID == viewModel.UID)
                       .Where(d => d.DiagnosisID == viewModel.DiagnosisID).First();
            }
            else
            {
                item = models.GetTable <BodyDiagnosis>()
                       .Where(d => d.LearnerID == viewModel.UID)
                       .OrderBy(d => d.DiagnosisID).First();
            }

            ViewBag.DataItem = item;
            ViewBag.IsFirst  = first == item;


            ViewBag.ViewModel = viewModel;
            return(View("~/Views/FitnessDiagnosis/Module/DiagnoseByLearner.ascx", item.UserProfile));
        }
        public async Task <ActionResult> CreateDiagnosisAsync(FitnessDiagnosisViewModel viewModel)
        {
            var model = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault();

            if (model == null)
            {
                return(Json(new { result = false, message = "學員資料錯誤!!" }));
            }

            var item = model.BodyDiagnosis.OrderByDescending(d => d.DiagnosisID).FirstOrDefault();

            if (item != null)
            {
                if (item.LevelID == (int)Naming.DocumentLevelDefinition.暫存)
                {
                    return(Json(new { result = false, message = "診斷未完成之前不可以新增!!" }));
                }
            }

            var profile = await HttpContext.GetUserAsync();

            item = new BodyDiagnosis
            {
                CoachID       = profile.UID,
                DiagnosisDate = DateTime.Now,
                LearnerID     = model.UID,
                LevelID       = (int)Naming.DocumentLevelDefinition.暫存
            };
            model.BodyDiagnosis.Add(item);
            models.SubmitChanges();

            ViewBag.DataItem  = item;
            ViewBag.ViewModel = viewModel;
            return(Json(new { result = true, message = item.DiagnosisID }));
        }
        public ActionResult EnableBodySuffering(FitnessDiagnosisViewModel viewModel, String part)
        {
            var item = models.GetTable <BodyParts>().Where(p => p.Part == part).FirstOrDefault();

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

            var diagnosis = models.GetTable <BodyDiagnosis>().Where(d => d.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

            if (diagnosis == null)
            {
                return(Json(new { result = false, message = "診斷資料錯誤!!" }));
            }

            if (!diagnosis.BodySuffering.Any(s => s.PartID == item.PartID))
            {
                diagnosis.BodySuffering.Add(new BodySuffering
                {
                    PartID = item.PartID
                });
                models.SubmitChanges();
            }

            return(Json(new { result = true }));
        }
        // GET: FitnessDiagnosis
        public ActionResult Diagnose(FitnessDiagnosisViewModel viewModel)
        {
            var model = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault();

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

            BodyDiagnosis item;
            BodyDiagnosis first = model.BodyDiagnosis.OrderBy(d => d.DiagnosisID).FirstOrDefault();

            if (viewModel.DiagnosisID.HasValue)
            {
                item = model.BodyDiagnosis.Where(d => d.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();
            }
            else
            {
                item = model.BodyDiagnosis.OrderBy(d => d.DiagnosisID).FirstOrDefault();
            }
            ViewBag.DataItem = item;
            ViewBag.IsFirst  = first != null && first == item;

            if (item != null)
            {
                viewModel.DiagnosisID = item.DiagnosisID;
            }

            ViewBag.ViewModel = viewModel;
            return(View("~/Views/FitnessDiagnosis/Module/Diagnose.ascx", model));
        }
        public ActionResult CommitDiagnosisAssessment(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(u => u.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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


            var assessmentItem = models.GetTable <FitnessAssessmentItem>().Where(i => i.ItemID == viewModel.ItemID && i.GroupID == 8).FirstOrDefault();

            if (assessmentItem == null)
            {
                return(Json(new { result = false, message = "診斷項目錯誤!!" }));
            }

            switch (assessmentItem.ItemID)
            {
            case 53:
            case 54:
            case 55:
                if (!viewModel.Assessment.HasValue)
                {
                    return(Json(new { result = false, message = "輸入資料錯誤!!" }));
                }
                break;

            case 57:
                if (!viewModel.Assessment.HasValue || !viewModel.AdditionalAssessment.HasValue)
                {
                    return(Json(new { result = false, message = "輸入資料錯誤!!" }));
                }
                break;
            }

            var diagAssessment = item.DiagnosisAssessment.Where(d => d.ItemID == assessmentItem.ItemID).FirstOrDefault();

            if (diagAssessment == null)
            {
                diagAssessment = new DiagnosisAssessment
                {
                    DiagnosisID = item.DiagnosisID,
                    ItemID      = assessmentItem.ItemID
                };
                item.DiagnosisAssessment.Add(diagAssessment);
            }

            diagAssessment.DiagnosisAction      = viewModel.DiagnosisAction;
            diagAssessment.AdditionalAssessment = viewModel.AdditionalAssessment;
            diagAssessment.Assessment           = viewModel.Assessment;
            diagAssessment.Description          = viewModel.Description;
            diagAssessment.Judgement            = viewModel.Judgement;

            models.SubmitChanges();

            return(View("~/Views/FitnessDiagnosis/Module/DiagnosisAssessment.ascx", item));
        }
        public ActionResult DeleteDiagnosis(FitnessDiagnosisViewModel viewModel, String part)
        {
            var item = models.DeleteAny <BodyDiagnosis>(d => d.DiagnosisID == viewModel.DiagnosisID);

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

            return(Json(new { result = true }));
        }
        public ActionResult DeleteDiagnosisAssessment(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.DeleteAny <DiagnosisAssessment>(d => d.DiagnosisID == viewModel.DiagnosisID &&
                                                              d.ItemID == viewModel.ItemID);

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

            return(Json(new { result = true }));
        }
        public ActionResult EditDiagnosisGoal(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(u => u.LearnerID == viewModel.UID &&
                                                               u.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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

            ViewBag.ViewModel = viewModel;
            return(View("~/Views/FitnessDiagnosis/Module/EditDiagnosisGoal.ascx", item));
        }
        public ActionResult ConfirmDiagnosis(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(d => d.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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

            item.LevelID = (int)Naming.DocumentLevelDefinition.正常;
            models.SubmitChanges();

            return(Json(new { result = true }));
        }
        public ActionResult DiagnosisRule(FitnessDiagnosisViewModel viewModel)
        {
            switch (viewModel.ItemID)
            {
            case 53:
                return(View("~/Views/FitnessDiagnosis/Module/PushupStandardDialog.ascx"));

            case 54:
            case 55:
                return(View("~/Views/FitnessDiagnosis/Module/SquatStandard.ascx"));

            case 57:
                return(View("~/Views/FitnessDiagnosis/Module/CardioStandard.ascx"));
            }
            return(new EmptyResult());
        }
        public ActionResult CommitDiagnosisGoal(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(u => u.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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

            item.Goal        = viewModel.Goal;
            item.Description = viewModel.Description;

            models.SubmitChanges();

            return(View("~/Views/FitnessDiagnosis/Module/DiagnosisGoal.ascx", item));
        }
        public ActionResult DisableBodySuffering(FitnessDiagnosisViewModel viewModel, String part)
        {
            var item = models.GetTable <BodyParts>().Where(p => p.Part == part).FirstOrDefault();

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

            var suffering = models.DeleteAny <BodySuffering>(d => d.DiagnosisID == viewModel.DiagnosisID &&
                                                             d.PartID == item.PartID);

            if (suffering == null)
            {
                return(Json(new { result = false, message = "診斷資料錯誤!!" }));
            }

            return(Json(new { result = true }));
        }
        public ActionResult DiagnosisContent(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(u => u.LearnerID == viewModel.UID &&
                                                               u.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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

            BodyDiagnosis first = models.GetTable <BodyDiagnosis>().Where(u => u.LearnerID == viewModel.UID)
                                  .OrderBy(d => d.DiagnosisID).FirstOrDefault();

            ViewBag.IsFirst = first == item;


            ViewBag.ViewModel = viewModel;
            return(View("~/Views/FitnessDiagnosis/Module/DiagnosisContent.ascx", item));
        }
        public ActionResult EditDiagnosisAssessment(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(u => u.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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

            var assessment = item.DiagnosisAssessment.Where(d => d.ItemID == viewModel.ItemID).FirstOrDefault();

            if (assessment != null)
            {
                viewModel.Assessment           = assessment.Assessment;
                viewModel.AdditionalAssessment = assessment.AdditionalAssessment;
                viewModel.Description          = assessment.Description;
                viewModel.Judgement            = assessment.Judgement;
                viewModel.DiagnosisAction      = assessment.DiagnosisAction;
            }

            ViewBag.ViewModel = viewModel;
            return(View("~/Views/FitnessDiagnosis/Module/EditDiagnosisAssessment.ascx", item));
        }
        public ActionResult MakeJudgement(FitnessDiagnosisViewModel viewModel)
        {
            var item = models.GetTable <BodyDiagnosis>().Where(u => u.DiagnosisID == viewModel.DiagnosisID).FirstOrDefault();

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

            if (!viewModel.Assessment.HasValue)
            {
                return(Json(new { result = false, message = "輸入資料錯誤!!" }));
            }

            var assessmentItem = models.GetTable <FitnessAssessmentItem>().Where(i => i.ItemID == viewModel.ItemID && i.GroupID == 8).FirstOrDefault();

            if (assessmentItem == null)
            {
                return(Json(new { result = false, message = "診斷項目錯誤!!" }));
            }



            if (!item.UserProfile.Birthday.HasValue || String.IsNullOrEmpty(item.UserProfile.UserProfileExtension.Gender))
            {
                return(Json(new { result = false, message = "因個人資訊不足系統當下無法判斷!!" }));
            }
            var yearsOld = DateTime.Today.Year - item.UserProfile.Birthday.Value.Year;

            if (assessmentItem.ItemID == 57)
            {
                if (!viewModel.AdditionalAssessment.HasValue)
                {
                    return(Json(new { result = false, message = "輸入資料錯誤!!" }));
                }

                var effectiveRate = (220 - yearsOld - (int)viewModel.Assessment) * 70 / 100 + (int)viewModel.Assessment;
                if (viewModel.AdditionalAssessment < (effectiveRate - 10))
                {
                    return(Json(new { result = true, message = "良好", effectiveRate }));
                }
                else if (viewModel.AdditionalAssessment > (effectiveRate + 10))
                {
                    return(Json(new { result = true, message = "稍差", effectiveRate }));
                }
                else
                {
                    return(Json(new { result = true, message = "一般", effectiveRate }));
                }
            }

            var judgement = models.GetTable <FitnessDiagnosis>()
                            .Where(f => f.ItemID == assessmentItem.ItemID)
                            .Where(f => f.Gender == item.UserProfile.UserProfileExtension.Gender)
                            .Where(f => yearsOld >= f.YearsOldStart && (!f.YearsOldEnd.HasValue || yearsOld <= f.YearsOldEnd))
                            .Join(models.GetTable <DiagnosisJudgement>()
                                  .Where(d => !d.RangeStart.HasValue || viewModel.Assessment >= d.RangeStart)
                                  .Where(d => !d.RangeEnd.HasValue || viewModel.Assessment < d.RangeEnd),
                                  f => f.FitnessID, d => d.FitnessID, (f, d) => d).FirstOrDefault();


            if (judgement == null)
            {
                return(Json(new { result = false, message = "因個人資訊不足系統當下無法判斷!!" }));
            }

            return(Json(new { result = true, message = judgement.Judgement }));
        }