public ActionResult BookingCoachPI(LessonTimeViewModel viewModel) { ViewBag.ViewModel = viewModel; if (viewModel.KeyID != null) { viewModel.LessonID = viewModel.DecryptKeyValue(); } var item = models.GetTable <LessonTime>().Where(l => l.LessonID == viewModel.LessonID).FirstOrDefault(); if (item != null) { viewModel.AttendeeID = item.GroupingLesson.RegisterLesson.Select(r => r.UID).ToArray(); viewModel.BranchID = item.BranchID; viewModel.ClassDate = item.ClassTime; if (item.ClassTime.HasValue && item.DurationInMinutes.HasValue) { viewModel.ClassEndTime = item.ClassTime.Value.AddMinutes(item.DurationInMinutes.Value); } viewModel.CoachID = item.AttendingCoach; viewModel.RegisterID = item.RegisterID; } if (!viewModel.ClassEndTime.HasValue) { viewModel.ClassEndTime = viewModel.ClassDate; } return(View("~/Views/ConsoleEvent/EventModal/BookingCoachPI.cshtml", item)); }
public ActionResult CommitPlace(LessonTimeViewModel viewModel) { ViewBag.ViewModel = viewModel; if (viewModel.KeyID != null) { viewModel.LessonID = viewModel.DecryptKeyValue(); } var item = models.GetTable <LessonTime>().Where(l => l.LessonID == viewModel.LessonID).FirstOrDefault(); if (item == null) { return(View("~/Views/ConsoleHome/Shared/AlertMessage.cshtml", model: "課程資料錯誤!!")); } viewModel.Place = viewModel.Place.GetEfficientString(); if (viewModel.Place == null) { return(Json(new { result = false, message = "Unfinished?!" })); } if (!viewModel.Place.ValidateMeetingRoom(item.BranchStore, models)) { return(Json(new { result = false, message = "請輸入正確會議室連結!!" })); } item.Place = viewModel.Place; models.SubmitChanges(); return(Json(new { result = true })); }
public override void Execute(object parameter) { var lessonTime = parameter as LessonTimeViewModel; if (lessonTime == null) //Add new lLessonTime if null lessonTime = new LessonTimeViewModel(App.Timetable.AddLessonTime()); NavigationFrame.Navigate(typeof(EditLessonTimePage), lessonTime.Number); }
protected void ValidateCommonBooking(LessonTimeViewModel viewModel, out ServingCoach coach, out BranchStore branch) { if (!viewModel.ClassDate.HasValue) { ModelState.AddModelError("ClassDate", "請選擇上課日期!!"); } else if (viewModel.ClassDate < DateTime.Today) { ModelState.AddModelError("ClassDate", "預約時間不可早於今天!!"); } branch = null; if (!viewModel.BranchID.HasValue) { ModelState.AddModelError("BranchID", "請選擇上課地點!!"); } else { branch = models.GetTable <BranchStore>().Where(b => b.BranchID == viewModel.BranchID).FirstOrDefault(); } coach = models.GetTable <ServingCoach>().Where(s => s.CoachID == viewModel.CoachID).FirstOrDefault(); if (coach == null) { ModelState.AddModelError("CoachID", "未指定體能顧問!!"); } viewModel.Place = viewModel.Place.GetEfficientString(); if (branch?.IsVirtualClassroom() == true) { if (!viewModel.Place.ValidateMeetingRoom(branch, models)) { ModelState.AddModelError("Place", "請輸入正確會議室連結!!"); } } }
public async Task <ActionResult> UpdateBookingByCoach(LessonTimeViewModel viewModel) { ViewBag.ViewModel = viewModel; var profile = await HttpContext.GetUserAsync(); if (viewModel.KeyID != null) { viewModel.LessonID = viewModel.DecryptKeyValue(); } LessonTime item = models.GetTable <LessonTime>().Where(l => l.LessonID == viewModel.LessonID).FirstOrDefault(); if (item == null) { return(View("~/Views/Shared/JsAlert.cshtml", model: "修改上課時間資料不存在!!")); } if (item.LessonAttendance != null) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "已完成上課,不可修改!!")); } if (item.ContractTrustTrack.Any(t => t.SettlementID.HasValue)) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "課程資料已信託,不可修改!!")); } 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.ClassDate.HasValue) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "請選擇上課日期間!!")); } if (!item.BranchStore.IsVirtualClassroom() && !item.IsSTSession() && !models.GetTable <CoachWorkplace>() .Any(c => c.BranchID == item.BranchID && c.CoachID == item.AttendingCoach) && viewModel.ClassDate.Value < DateTime.Today.AddDays(1)) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "此時段不允許跨店預約!!")); } LessonTime timeItem = new LessonTime { InvitedCoach = item.InvitedCoach, AttendingCoach = item.AttendingCoach, ClassTime = viewModel.ClassDate, DurationInMinutes = item.DurationInMinutes }; if (item.IsPTSession()) { if (models.GetTable <Settlement>().Any(s => s.StartDate <= viewModel.ClassDate && s.EndExclusiveDate > viewModel.ClassDate)) { ViewBag.Message = "修改上課時間(" + String.Format("{0:yyyy/MM/dd}", viewModel.ClassDate) + "已信託結算!!"; return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml")); } } if (!item.IsCoachPISession() && !item.IsSTSession()) { var users = models.CheckOverlappingBooking(timeItem, item); if (users.Count() > 0) { ViewBag.Message = "上課成員(" + String.Join("、", users.Select(u => u.RealName)) + ")上課時間重複!!"; return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml")); } } else { if (viewModel.ClassEndTime.HasValue) { timeItem.DurationInMinutes = (int)(viewModel.ClassEndTime.Value - viewModel.ClassDate.Value).TotalMinutes; } } if (!ModelState.IsValid) { ViewBag.ModelState = this.ModelState; return(View(Startup.Properties["ReportInputError"])); } var changeCoach = item.AttendingCoach != viewModel.CoachID; if (item.IsCoachPISession()) { if (viewModel.AttendeeID == null || viewModel.AttendeeID.Length == 0) { models.DeleteAll <LessonTime>(r => r.LessonID != item.LessonID && r.GroupID == item.GroupID); models.DeleteAll <RegisterLesson>(r => r.RegisterID != item.RegisterID && r.RegisterGroupID == item.GroupID); } else { models.DeleteAll <LessonTime>(r => r.LessonID != item.LessonID && r.GroupID == item.GroupID && !viewModel.AttendeeID.Contains(r.AttendingCoach.Value)); models.DeleteAll <RegisterLesson>(r => r.RegisterID != item.RegisterID && r.RegisterGroupID == item.GroupID && !viewModel.AttendeeID.Contains(r.UID)); foreach (var uid in viewModel.AttendeeID.Distinct()) { if (!models.GetTable <RegisterLesson>().Any(r => r.UID == uid && r.RegisterGroupID == item.GroupID)) { var coachPI = models.GetTable <ServingCoach>().Any(s => s.CoachID == uid) ? LessonsController.SpawnCoachPI(item, uid, uid) : LessonsController.SpawnCoachPI(item, uid, coach.CoachID); models.GetTable <LessonTime>().InsertOnSubmit(coachPI); } } } models.SubmitChanges(); foreach (var s in models.GetTable <LessonTime>().Where(l => l.GroupID == item.GroupID)) { s.ClassTime = viewModel.ClassDate; if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour)) { s.HourOfClassTime = viewModel.ClassDate.Value.Hour; } s.DurationInMinutes = timeItem.DurationInMinutes; s.BranchID = viewModel.BranchID; //item.TrainingBySelf = viewModel.TrainingBySelf; } } else { item.InvitedCoach = viewModel.CoachID; item.AssignLessonAttendingCoach(coach); item.ClassTime = viewModel.ClassDate; if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour)) { item.HourOfClassTime = viewModel.ClassDate.Value.Hour; } item.DurationInMinutes = timeItem.DurationInMinutes; item.BranchID = viewModel.BranchID; foreach (var t in item.ContractTrustTrack) { t.EventDate = viewModel.ClassDate.Value; } //item.TrainingBySelf = viewModel.TrainingBySelf; } models.SubmitChanges(); if (item.IsPISession()) { models.ExecuteCommand("update TuitionInstallment set PayoffDate = {0} where RegisterID = {1} ", item.ClassTime, item.RegisterID); } if (!item.IsSTSession()) { item.BookingLessonTimeExpansion(models, item.ClassTime.Value, item.DurationInMinutes.Value); models.ExecuteCommand("delete PreferredLessonTime where LessonID = {0}", item.LessonID); item.ProcessBookingWhenCrossBranch(models); } return(Json(new { result = true, message = "上課時間修改完成!!", changeCoach = changeCoach, classTime = String.Format("{0:yyyy/MM/dd H:mm}", item.ClassTime) + "-" + String.Format("{0:H:mm}", item.ClassTime.Value.AddMinutes(item.DurationInMinutes.Value)) })); }
public ActionResult CommitEnterpriseBookingByCoach(LessonTimeViewModel viewModel) { ViewBag.ViewModel = viewModel; ValidateCommonBooking(viewModel, out ServingCoach coach, out BranchStore branch); RegisterLesson lesson = models.GetTable <RegisterLesson>().Where(r => r.RegisterID == viewModel.RegisterID).FirstOrDefault(); if (lesson == null) { ModelState.AddModelError("RegisterID", "學員未購買課程!!"); } if (lesson.Attended == (int)Naming.LessonStatus.課程結束) { ModelState.AddModelError("RegisterID", "學員課程已結束!!"); } var lessonCount = lesson.GroupingLesson.LessonTime.Count; if (lessonCount + (lesson.AttendedLessons ?? 0) >= lesson.Lessons) { ModelState.AddModelError("RegisterID", "學員上課堂數已滿!!"); } var contract = lesson.RegisterLessonEnterprise.EnterpriseCourseContract; if (contract.Expiration.Value < DateTime.Today) { ModelState.AddModelError("RegisterID", "企業方案合約已過期!!"); } if (!this.ModelState.IsValid) { ViewBag.ModelState = this.ModelState; return(View(Properties.Settings.Default.ReportInputError)); } if (branch?.IsVirtualClassroom() != true && !models.GetTable <CoachWorkplace>() .Any(c => c.BranchID == viewModel.BranchID && c.CoachID == viewModel.CoachID) && viewModel.ClassDate.Value < DateTime.Today.AddDays(1)) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "此時段不允許跨店預約!!")); } LessonTime timeItem = new LessonTime { InvitedCoach = viewModel.CoachID, AttendingCoach = viewModel.CoachID, //ClassTime = viewModel.ClassDate.Add(viewModel.ClassTime), ClassTime = viewModel.ClassDate, DurationInMinutes = lesson.RegisterLessonEnterprise.EnterpriseCourseContent.DurationInMinutes, RegisterID = lesson.RegisterID, LessonPlan = new LessonPlan { }, BranchID = viewModel.BranchID, LessonTimeSettlement = new LessonTimeSettlement { ProfessionalLevelID = coach.LevelID.Value, MarkedGradeIndex = coach.ProfessionalLevel.GradeIndex, CoachWorkPlace = coach.WorkBranchID(), }, Place = viewModel.Place, }; if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour)) { timeItem.HourOfClassTime = viewModel.ClassDate.Value.Hour; } if (lesson.RegisterLessonEnterprise.EnterpriseCourseContent.EnterpriseLessonType.Status == (int)Naming.LessonPriceStatus.自主訓練) { timeItem.TrainingBySelf = 1; } var users = models.CheckOverlapedBooking(timeItem, lesson); if (users.Count() > 0) { ModelState.AddModelError("UID", "學員(" + String.Join("、", users.Select(u => u.RealName)) + ")上課時間重複!!"); ViewBag.ModelState = this.ModelState; return(View("~/Views/Shared/ReportInputError.ascx")); } if (lesson.GroupingMemberCount > 1) { timeItem.GroupID = lesson.RegisterGroupID; timeItem.LessonFitnessAssessment.AddRange( lesson.GroupingLesson.RegisterLesson.Select( r => new LessonFitnessAssessment { UID = r.UID })); } else { timeItem.LessonFitnessAssessment.Add(new LessonFitnessAssessment { UID = lesson.UID }); if (!lesson.RegisterGroupID.HasValue) { timeItem.GroupingLesson = lesson.GroupingLesson = new GroupingLesson { }; } else { timeItem.GroupID = lesson.RegisterGroupID; } } models.GetTable <LessonTime>().InsertOnSubmit(timeItem); try { models.SubmitChanges(); timeItem.BookingLessonTimeExpansion(models, timeItem.ClassTime.Value, timeItem.DurationInMinutes.Value); timeItem.ProcessBookingWhenCrossBranch(models); } catch (Exception ex) { Logger.Error(ex); return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "預約未完成,請重新預約!!")); } return(Json(new { result = true, message = "上課時間預約完成!!" })); }
public ActionResult CommitBookingByCoach(LessonTimeViewModel viewModel) { return(CommitEnterpriseBookingByCoach(viewModel)); }
private ActionResult CommitRemoteTrialLesson(LessonTimeViewModel viewModel, BranchStore branch, ServingCoach coach) { RegisterLesson lesson; UserProfile profileItem = models.GetTable <UserProfile>().Where(u => u.UID == viewModel.UID).FirstOrDefault(); if (profileItem == null) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "體驗學員資料錯誤!!")); } var priceType = models.CurrentTrialLessonPrice(true, viewModel.PriceID); if (priceType == null) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "體驗課程類型錯誤!!")); } lesson = new RegisterLesson { UID = viewModel.UID.Value, RegisterDate = DateTime.Now, GroupingMemberCount = 1, Lessons = 1, ClassLevel = priceType.PriceID, IntuitionCharge = new IntuitionCharge { ByInstallments = 1, Payment = "Cash", FeeShared = 0 }, AdvisorID = viewModel.CoachID, BranchID = branch.BranchID, GroupingLesson = new GroupingLesson { } }; //var installment = new TuitionInstallment //{ // PayoffDate = viewModel.ClassDate, // PayoffAmount = priceType.ListPrice, // Payment = new Payment // { // PayoffAmount = priceType.ListPrice, // PayoffDate = viewModel.ClassDate // } //}; //installment.Payment.TuitionAchievement.Add(new TuitionAchievement //{ // CoachID = lesson.AdvisorID.Value, // ShareAmount = installment.PayoffAmount //}); //lesson.IntuitionCharge.TuitionInstallment.Add(installment); models.GetTable <RegisterLesson>().InsertOnSubmit(lesson); models.SubmitChanges(); LessonTime timeItem = new LessonTime { InvitedCoach = viewModel.CoachID, AttendingCoach = viewModel.CoachID, ClassTime = viewModel.ClassDate, DurationInMinutes = priceType.DurationInMinutes, TrainingBySelf = (int)Naming.LessonSelfTraining.體驗課程, RegisterID = lesson.RegisterID, LessonPlan = new LessonPlan { }, BranchID = branch.BranchID, LessonTimeSettlement = new LessonTimeSettlement { ProfessionalLevelID = coach.LevelID.Value, MarkedGradeIndex = coach.LevelID.HasValue ? coach.ProfessionalLevel.GradeIndex : null, CoachWorkPlace = coach.WorkBranchID(), } }; if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour)) { timeItem.HourOfClassTime = viewModel.ClassDate.Value.Hour; } timeItem.GroupID = lesson.RegisterGroupID; timeItem.LessonFitnessAssessment.Add(new LessonFitnessAssessment { UID = lesson.UID }); models.GetTable <LessonTime>().InsertOnSubmit(timeItem); try { models.SubmitChanges(); timeItem.BookingLessonTimeExpansion(models, timeItem.ClassTime.Value, timeItem.DurationInMinutes.Value); } catch (Exception ex) { models.ExecuteCommand("delete RegisterLesson where RegisterID = {0}", lesson.RegisterID); Logger.Error(ex); ViewBag.Message = "預約未完成,請重新預約!!"; return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml")); } return(Json(new { result = true, message = "上課時間預約完成!!" })); }
public ActionResult CommitTrialLesson(LessonTimeViewModel viewModel, TrialLearnerViewModel newTrialLearner) { var profile = HttpContext.GetUser(); ViewBag.ViewModel = viewModel; if (!viewModel.ClassDate.HasValue) { ModelState.AddModelError("ClassDate", "請選擇上課日期!!"); } else if (viewModel.ClassDate < DateTime.Today) { ModelState.AddModelError("ClassDate", "預約時間不可早於今天!!"); } var branch = models.GetTable <BranchStore>().Where(b => b.BranchID == viewModel.BranchID).FirstOrDefault(); if (branch == null) { ModelState.AddModelError("BranchID", "請選擇上課地點!!"); } if (!this.ModelState.IsValid) { ViewBag.ModelState = this.ModelState; return(View(Settings.Default.ReportInputError)); } var coach = models.GetTable <ServingCoach>().Where(s => s.CoachID == viewModel.CoachID).FirstOrDefault(); if (coach == null) { ViewBag.Message = "未指定體能顧問!!"; return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml")); } if (branch.IsVirtualClassroom()) { return(CommitRemoteTrialLesson(viewModel, branch, coach)); } else if (!models.GetTable <CoachWorkplace>() .Any(c => c.BranchID == viewModel.BranchID && c.CoachID == viewModel.CoachID) && viewModel.ClassDate.Value < DateTime.Today.AddDays(1)) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "此時段不允許跨店預約!!")); } RegisterLesson lesson; if (!viewModel.UID.HasValue) { newTrialLearner.RealName = newTrialLearner.RealName.GetEfficientString(); if (newTrialLearner.RealName == null) { this.ModelState.AddModelError("realName", "請輸入學員姓名!!"); ViewBag.ModelState = this.ModelState; return(View(Settings.Default.ReportInputError)); } else { var profileItem = models.CreateLearner(new LearnerViewModel { RealName = newTrialLearner.RealName, Phone = newTrialLearner.Phone.GetEfficientString(), Gender = newTrialLearner.Gender, CurrentTrial = 1, RoleID = Naming.RoleID.Preliminary }); if (profileItem == null) { return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml", model: "無法新增體驗學員!!")); } viewModel.UID = profile.UID; } } var priceType = models.CurrentTrialLessonPrice(); lesson = new RegisterLesson { UID = viewModel.UID.Value, RegisterDate = DateTime.Now, GroupingMemberCount = 1, Lessons = 1, ClassLevel = priceType != null ? priceType.PriceID : (int?)null, IntuitionCharge = new IntuitionCharge { ByInstallments = 1, Payment = "Cash", FeeShared = 0 }, AdvisorID = viewModel.CoachID, GroupingLesson = new GroupingLesson { } }; //var installment = new TuitionInstallment //{ // PayoffDate = viewModel.ClassDate, // PayoffAmount = priceType.ListPrice, // Payment = new Payment // { // PayoffAmount = priceType.ListPrice, // PayoffDate = viewModel.ClassDate // } //}; //installment.Payment.TuitionAchievement.Add(new TuitionAchievement //{ // CoachID = lesson.AdvisorID.Value, // ShareAmount = installment.PayoffAmount //}); //lesson.IntuitionCharge.TuitionInstallment.Add(installment); models.GetTable <RegisterLesson>().InsertOnSubmit(lesson); models.SubmitChanges(); LessonTime timeItem = new LessonTime { InvitedCoach = viewModel.CoachID, AttendingCoach = viewModel.CoachID, //ClassTime = viewModel.ClassDate.Add(viewModel.ClassTime), ClassTime = viewModel.ClassDate, DurationInMinutes = priceType.DurationInMinutes, TrainingBySelf = (int)Naming.LessonSelfTraining.體驗課程, RegisterID = lesson.RegisterID, LessonPlan = new LessonPlan { }, BranchID = viewModel.BranchID, LessonTimeSettlement = new LessonTimeSettlement { ProfessionalLevelID = coach.LevelID.Value, MarkedGradeIndex = coach.LevelID.HasValue ? coach.ProfessionalLevel.GradeIndex : null, CoachWorkPlace = coach.WorkBranchID(), } }; if (models.GetTable <DailyWorkingHour>().Any(d => d.Hour == viewModel.ClassDate.Value.Hour)) { timeItem.HourOfClassTime = viewModel.ClassDate.Value.Hour; } timeItem.GroupID = lesson.RegisterGroupID; timeItem.LessonFitnessAssessment.Add(new LessonFitnessAssessment { UID = lesson.UID }); models.GetTable <LessonTime>().InsertOnSubmit(timeItem); try { models.SubmitChanges(); timeItem.BookingLessonTimeExpansion(models, timeItem.ClassTime.Value, timeItem.DurationInMinutes.Value); timeItem.ProcessBookingWhenCrossBranch(models); } catch (Exception ex) { Logger.Error(ex); ViewBag.Message = "預約未完成,請重新預約!!"; return(View("~/Views/ConsoleHome/Shared/JsAlert.cshtml")); } return(Json(new { result = true, message = "上課時間預約完成!!" })); }