Exemple #1
0
        public ActionResult ShowMonthlyRevenueChart(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            if (!viewModel.DateFrom.HasValue)
            {
                ModelState.AddModelError("DateFrom", "請選擇起月");
            }

            if (!viewModel.DateTo.HasValue)
            {
                ModelState.AddModelError("DateTo", "請選擇迄月");
            }

            if (ModelState.IsValid)
            {
                if (!(viewModel.DateFrom.Value.AddMonths(2) <= viewModel.DateTo.Value && viewModel.DateTo.Value <= viewModel.DateFrom.Value.AddMonths(12)))
                {
                    ModelState.AddModelError("DateFrom", "查詢月數區間錯誤");
                }
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = ModelState;
                return(View(ConsoleHomeController.InputErrorView));
            }

            return(Json(new { result = true }));
        }
Exemple #2
0
        public ActionResult EditCoachRevenueIndicator(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            if (viewModel.KeyID != null)
            {
                viewModel.PeriodID = viewModel.DecryptKeyValue();
            }

            var indicator = models.GetTable <MonthlyIndicator>().Where(c => c.PeriodID == viewModel.PeriodID).FirstOrDefault();

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

            var item = models.GetTable <MonthlyCoachRevenueIndicator>()
                       .Where(c => c.PeriodID == viewModel.PeriodID && c.CoachID == viewModel.CoachID).FirstOrDefault();

            if (item != null)
            {
                viewModel.AchievementGoal     = item.AchievementGoal;
                viewModel.CompleteLessonsGoal = item.CompleteLessonsGoal;
                viewModel.BRCount             = item.BRCount;
                viewModel.AverageLessonPrice  = item.AverageLessonPrice;
            }
            else
            {
                viewModel.AverageLessonPrice = indicator.CalculateAverageLessonPrice(models, viewModel.CoachID);
            }

            return(View("~/Views/BusinessConsole/Module/SelectCoachAchievementGoal.cshtml", indicator));
        }
Exemple #3
0
        public IViewComponentResult Invoke(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            models      = (ModelSource <UserProfile>)HttpContext.Items["Models"];
            _modelState = ViewContext.ModelState;

            return(InquireMonthlyCoachRevenue(viewModel));
        }
Exemple #4
0
        public ActionResult LoadStrategyAnalysis(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewResult result = (ViewResult)LoadMonthlyIndicator(viewModel);

            if (!(result.Model is MonthlyIndicator item))
            {
                return(result);
            }
            result.ViewName = "~/Views/BusinessConsole/Module/StrategyAnalysis.cshtml";
            return(result);
        }
Exemple #5
0
        public ActionResult ProcessCoachRevenueIndicator(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            if (viewModel.KeyID != null)
            {
                viewModel.PeriodID = viewModel.DecryptKeyValue();
            }

            var item = models.GetTable <MonthlyCoachRevenueIndicator>().Where(c => c.PeriodID == viewModel.PeriodID && c.CoachID == viewModel.CoachID).FirstOrDefault();

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

            return(View("~/Views/BusinessConsole/Module/ProcessCoachRevenueIndicator.cshtml", item));
        }
Exemple #6
0
        public ActionResult DeleteCoachRevenueIndicator(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            if (viewModel.KeyID != null)
            {
                viewModel.PeriodID = viewModel.DecryptKeyValue();
            }

            var count = models.ExecuteCommand("delete [KPI].MonthlyCoachRevenueIndicator where PeriodID={0} and CoachID={1}", viewModel.PeriodID, viewModel.CoachID);

            if (count > 0)
            {
                return(Json(new { result = true }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new { result = false, message = "刪除失敗!!" }, JsonRequestBehavior.AllowGet));
        }
Exemple #7
0
        public ActionResult ApplyCoachAchievement(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            if (viewModel.KeyID != null)
            {
                viewModel.PeriodID = viewModel.DecryptKeyValue();
            }

            if (!viewModel.Year.HasValue || !viewModel.Month.HasValue)
            {
                viewModel.Year  = DateTime.Today.Year;
                viewModel.Month = DateTime.Today.Month;
            }

            var item = viewModel.AssertMonthlyIndicator(models);

            return(View("~/Views/BusinessConsole/Module/SelectCoachAchievementGoal.cshtml", item));
        }
Exemple #8
0
        // GET: AchievementConsole
        public ActionResult InquireMonthlyCoachRevenue(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            int?coachID = viewModel.CoachID;

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

            IQueryable <MonthlyIndicator> indicatorItems = viewModel.InquireMonthlyIndicator(models);

            IQueryable <MonthlyCoachRevenueIndicator> items = models.GetTable <MonthlyCoachRevenueIndicator>()
                                                              .Where(c => c.CoachID == viewModel.CoachID)
                                                              .Join(indicatorItems, c => c.PeriodID, m => m.PeriodID, (c, m) => c);

            return(View("~/Views/AchievementConsole/Module/InquireMonthlyCoachRevenue.cshtml", items));
        }
Exemple #9
0
        public ActionResult MakeStrategyAnalysis(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            if (viewModel.KeyID != null)
            {
                viewModel.PeriodID = viewModel.DecryptKeyValue();
            }

            var item = models.GetTable <MonthlyBranchIndicator>().Where(c => c.PeriodID == viewModel.PeriodID && c.BranchID == viewModel.BranchID).FirstOrDefault();

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

            viewModel.RiskPrediction = item.RiskPrediction;
            viewModel.Strategy       = item.Strategy;
            viewModel.Comment        = item.Comment;

            return(View("~/Views/BusinessConsole/Module/MakeStrategyAnalysis.cshtml", item));
        }
Exemple #10
0
        public ActionResult CommitStrategyAnalysis(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;
            if (viewModel.KeyID != null)
            {
                viewModel.PeriodID = viewModel.DecryptKeyValue();
            }

            var item = models.GetTable <MonthlyBranchIndicator>().Where(c => c.PeriodID == viewModel.PeriodID && c.BranchID == viewModel.BranchID).FirstOrDefault();

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

            item.RiskPrediction = viewModel.RiskPrediction;
            item.Strategy       = viewModel.Strategy;
            //item.Comment = viewModel.Comment;

            models.SubmitChanges();

            return(Json(new { result = true }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult ShowMonthlyRevenueCurve(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewBag.ViewModel = viewModel;

            if (!viewModel.DateFrom.HasValue)
            {
                ModelState.AddModelError("DateFrom", "請選擇起月");
            }

            if (!viewModel.DateTo.HasValue)
            {
                ModelState.AddModelError("DateTo", "請選擇迄月");
            }

            if (ModelState.IsValid)
            {
                if (!(viewModel.DateFrom.Value.AddMonths(2) <= viewModel.DateTo.Value && viewModel.DateTo.Value <= viewModel.DateFrom.Value.AddMonths(12)))
                {
                    ModelState.AddModelError("DateFrom", "查詢月數區間錯誤");
                }
            }

            if (viewModel.SessionType == null || viewModel.SessionType.Length == 0)
            {
                ModelState.AddModelError("SessionType", "請勾選顯示設定");
            }


            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = ModelState;
                return(View(ConsoleHomeController.InputErrorView));
            }

            return(Json(new { result = true }, JsonRequestBehavior.AllowGet));
        }
Exemple #12
0
 public ActionResult SelectCurveCondition(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
 {
     ViewBag.ViewModel = viewModel;
     return(View("~/Views/AchievementConsole/Module/SelectCurveCondition.cshtml"));
 }
Exemple #13
0
        public ActionResult CommitCoachRevenueIndicator(MonthlyCoachRevenueIndicatorQueryViewModel viewModel)
        {
            ViewResult       result    = (ViewResult)LoadMonthlyIndicator(viewModel);
            MonthlyIndicator indicator = result.Model as MonthlyIndicator;

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

            var coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == viewModel.CoachID).FirstOrDefault();

            if (coach == null)
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "請選擇教練!!"));
            }

            if (!viewModel.BranchID.HasValue)
            {
                return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "請選擇分店!!"));
            }

            if (!viewModel.AchievementGoal.HasValue)
            {
                ModelState.AddModelError("AchievementGoal", "請輸收款業績");
            }

            if (viewModel.DataOperation != Naming.DataOperationMode.Create)
            {
                if (!viewModel.AverageLessonPrice.HasValue)
                {
                    ModelState.AddModelError("AverageLessonPrice", "請輸平均單價");
                }
            }

            if (!viewModel.CompleteLessonsGoal.HasValue)
            {
                ModelState.AddModelError("CompleteLessonsGoal", "請輸入課數");
            }

            if (!viewModel.BRCount.HasValue)
            {
                ModelState.AddModelError("BRCount", "請輸BR堂數");
            }

            if (!ModelState.IsValid)
            {
                ViewBag.ModelState = ModelState;
                return(View(ConsoleHomeController.InputErrorView));
            }

            var item = models.GetTable <MonthlyCoachRevenueIndicator>()
                       .Where(c => c.PeriodID == viewModel.PeriodID && c.CoachID == viewModel.CoachID).FirstOrDefault();

            if (item == null)
            {
                item = new MonthlyCoachRevenueIndicator
                {
                    PeriodID = indicator.PeriodID,
                    CoachID  = viewModel.CoachID.Value,
                    BranchID = viewModel.BranchID,
                    LevelID  = coach.LevelID,
                };
                models.GetTable <MonthlyCoachRevenueIndicator>().InsertOnSubmit(item);
            }

            item.AchievementGoal     = viewModel.AchievementGoal;
            item.CompleteLessonsGoal = viewModel.CompleteLessonsGoal;
            if (viewModel.DataOperation == Naming.DataOperationMode.Create)
            {
                item.AverageLessonPrice = indicator.CalculateAverageLessonPrice(models, viewModel.CoachID);;
            }
            else
            {
                item.AverageLessonPrice = viewModel.AverageLessonPrice;
            }
            item.BRCount           = viewModel.BRCount;
            item.LessonTuitionGoal = item.AverageLessonPrice * item.CompleteLessonsGoal;

            models.SubmitChanges();

            indicator.UpdateMonthlyAchievementGoal(models);

            return(Json(new { result = true }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult RestoreCoachRevenueIndicator(MonthlyCoachRevenueIndicatorQueryViewModel viewModel, int[] exclusiveCoach = null)
        {
            ViewBag.ViewModel = viewModel;

            IQueryable <MonthlyIndicator> indicatorItems = models.GetTable <MonthlyIndicator>();

            if (viewModel.DateFrom.HasValue)
            {
                viewModel.DateFrom = viewModel.DateFrom.Value.FirstDayOfMonth();
                indicatorItems.Where(i => i.StartDate >= viewModel.DateFrom);
            }
            if (viewModel.DateTo.HasValue)
            {
                viewModel.DateTo = viewModel.DateTo.Value.FirstDayOfMonth().AddMonths(1);
                indicatorItems.Where(i => i.StartDate < viewModel.DateTo);
            }

            IQueryable <ServingCoach> coachItems = models.GetTable <ServingCoach>();

            if (viewModel.CoachID.HasValue)
            {
                coachItems = coachItems.Where(c => c.CoachID == viewModel.CoachID);
            }

            if (exclusiveCoach != null && exclusiveCoach.Length > 0)
            {
                coachItems = coachItems
                             .Where(c => !exclusiveCoach.Contains(c.CoachID))
                             .Where(c => c.CoachWorkplace.Any());
            }

            var forCoaches = coachItems.ToArray();

            foreach (MonthlyIndicator indicator in indicatorItems)
            {
                AchievementQueryViewModel queryModel = new AchievementQueryViewModel
                {
                    AchievementDateFrom = indicator.StartDate,
                    BypassCondition     = true,
                };

                IQueryable <V_Tuition> lessonItems = queryModel.InquireAchievement(models);
                lessonItems = lessonItems.Where(l => l.SettlementID.HasValue);
                IQueryable <V_Tuition> tuitionItems = lessonItems;

                PaymentQueryViewModel paymentQuery = new PaymentQueryViewModel
                {
                    PayoffDateFrom  = indicator.StartDate,
                    PayoffDateTo    = indicator.EndExclusiveDate.AddDays(-1),
                    BypassCondition = true,
                };

                IQueryable <Payment>            paymentItems     = paymentQuery.InquirePayment(models);
                IQueryable <TuitionAchievement> achievementItems = paymentItems.GetPaymentAchievement(models);

                CourseContractQueryViewModel contractQuery = new CourseContractQueryViewModel
                {
                    ContractQueryMode = Naming.ContractServiceMode.ContractOnly,
                    Status            = (int)Naming.CourseContractStatus.已生效,
                    EffectiveDateFrom = indicator.StartDate,
                    EffectiveDateTo   = indicator.EndExclusiveDate,
                };
                IQueryable <CourseContract> contractItems = contractQuery.InquireContract(models);

                void calcCoachAchievement(MonthlyCoachRevenueIndicator coachIndicator)
                {
                    int lessonAchievement, tuitionAchievement;

                    var coachTuitionItems     = tuitionItems.Where(t => t.AttendingCoach == coachIndicator.CoachID);
                    var coachAchievementItems = achievementItems.Where(t => t.CoachID == coachIndicator.CoachID);
                    var coachContractItems    = contractItems.Where(c => c.FitnessConsultant == coachIndicator.CoachID);

                    lessonAchievement  = coachTuitionItems.Where(t => BusinessConsoleExtensions.SessionScopeForAchievement.Contains(t.PriceStatus)).Sum(t => t.ListPrice * t.GroupingMemberCount * t.PercentageOfDiscount / 100) ?? 0;
                    lessonAchievement += (coachTuitionItems.Where(t => BusinessConsoleExtensions.SessionScopeForAchievement.Contains(t.ELStatus)).Sum(l => l.EnterpriseListPrice * l.GroupingMemberCount * l.PercentageOfDiscount / 100) ?? 0);
                    tuitionAchievement = coachAchievementItems.Sum(a => a.ShareAmount) ?? 0;

                    coachIndicator.ActualCompleteLessonCount = coachTuitionItems.Where(t => BusinessConsoleExtensions.SessionScopeForComleteLessonCount.Contains(t.PriceStatus)).Count()
                                                               + coachTuitionItems.Where(t => BusinessConsoleExtensions.SessionScopeForComleteLessonCount.Contains(t.ELStatus)).Count();
                    coachIndicator.ActualLessonAchievement        = lessonAchievement;
                    coachIndicator.ActualRenewContractAchievement = coachContractItems.Where(c => c.Renewal == true).Count();
                    coachIndicator.ActualNewContractAchievement   = coachContractItems.Count() - coachIndicator.ActualRenewContractAchievement;
                    coachIndicator.ActualCompleteTSCount          = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.體驗課程).Count()
                                                                    + coachTuitionItems.Where(t => t.ELStatus == (int)Naming.LessonPriceStatus.體驗課程).Count();
                    coachIndicator.ActualCompletePICount = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.自主訓練).Count()
                                                           + coachTuitionItems.Where(t => t.ELStatus == (int)Naming.LessonPriceStatus.自主訓練).Count();
                    coachIndicator.ATCount       = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.運動防護課程).Count();
                    coachIndicator.ATAchievement = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.運動防護課程).Sum(t => t.ListPrice) ?? 0;
                    coachIndicator.SRCount       = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.運動恢復課程).Count();
                    coachIndicator.SRAchievement = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.運動恢復課程).Sum(t => t.ListPrice) ?? 0;
                    coachIndicator.SDCount       = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.營養課程).Count();
                    coachIndicator.SDAchievement = coachTuitionItems.Where(t => t.PriceStatus == (int)Naming.LessonPriceStatus.營養課程).Sum(t => t.ListPrice) ?? 0;

                    models.SubmitChanges();
                }

                foreach (var coach in forCoaches)
                {
                    var item = models.GetTable <MonthlyCoachRevenueIndicator>()
                               .Where(c => c.PeriodID == indicator.PeriodID && c.CoachID == coach.CoachID).FirstOrDefault();

                    if (item == null)
                    {
                        var attendingLessons = models.GetTable <LessonTime>()
                                               .Where(l => l.AttendingCoach == coach.CoachID)
                                               .Where(l => l.ClassTime >= indicator.StartDate)
                                               .Where(l => l.ClassTime < indicator.EndExclusiveDate);

                        if (attendingLessons.Any())
                        {
                            item = new MonthlyCoachRevenueIndicator
                            {
                                PeriodID = indicator.PeriodID,
                                CoachID  = coach.CoachID,
                                BranchID = coach.CoachWorkplace.First().BranchID,
                                LevelID  = coach.LevelID,
                            };
                            models.GetTable <MonthlyCoachRevenueIndicator>().InsertOnSubmit(item);

                            item.AchievementGoal     = 0;
                            item.CompleteLessonsGoal = 0;
                            item.AverageLessonPrice  = indicator.CalculateAverageLessonPrice(models, coach.CoachID);
                            item.BRCount             = 0;
                            item.LessonTuitionGoal   = 0;

                            models.SubmitChanges();

                            calcCoachAchievement(item);
                        }
                    }
                }
            }

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