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 })); }
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)); }
public IViewComponentResult Invoke(MonthlyCoachRevenueIndicatorQueryViewModel viewModel) { models = (ModelSource <UserProfile>)HttpContext.Items["Models"]; _modelState = ViewContext.ModelState; return(InquireMonthlyCoachRevenue(viewModel)); }
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); }
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)); }
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)); }
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)); }
// 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)); }
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)); }
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)); }
public ActionResult SelectCurveCondition(MonthlyCoachRevenueIndicatorQueryViewModel viewModel) { ViewBag.ViewModel = viewModel; return(View("~/Views/AchievementConsole/Module/SelectCurveCondition.cshtml")); }
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 })); }