public static void RegisterMonthlyGiftLesson <TEntity>(this ModelSource <TEntity> models, int?[] uid = null) where TEntity : class, new() { var price = models.GetTable <LessonPriceType>().Where(l => l.IsWelfareGiftLesson != null).FirstOrDefault(); DateTime startDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1); DateTime endDate = startDate.AddMonths(1); if (price != null) { var items = models.GetTable <EmployeeWelfare>() .Where(m => m.MonthlyGiftLessons > 0) .Where(y => !y.UserProfile.RegisterLesson.Any(r => r.ClassLevel == price.PriceID && r.RegisterDate >= startDate && r.RegisterDate < endDate)); if (uid != null && uid.Length > 0) { items = items.Where(m => uid.Contains(m.UID)); } if (items.Count() > 0) { var table = models.GetTable <RegisterLesson>(); foreach (var item in items.ToList()) { var lastLesson = table.Where(r => r.UID == item.UID && r.ClassLevel == price.PriceID && r.RegisterDate < startDate && r.Attended != (int)Naming.LessonStatus.課程結束).FirstOrDefault(); var lesson = new RegisterLesson { UID = item.UID, RegisterDate = DateTime.Now, GroupingMemberCount = 1, Lessons = item.MonthlyGiftLessons.Value, ClassLevel = price.PriceID, IntuitionCharge = new IntuitionCharge { ByInstallments = 1, Payment = "Cash", FeeShared = 0 }, Attended = (int)Naming.LessonStatus.準備上課, AdvisorID = Settings.Default.DefaultCoach, AttendedLessons = 0, GroupingLesson = new GroupingLesson { } }; table.InsertOnSubmit(lesson); if (lastLesson != null) { lastLesson.Attended = (int)Naming.LessonStatus.課程結束; //lesson.Lessons += (lastLesson.Lessons - lastLesson.GroupingLesson.LessonTime.Count); } } models.SubmitChanges(); } } }
private void matchGroup(EnterpriseCourseMember groupUser, EnterpriseCourseMember profile) { if (groupUser.ContractID != profile.ContractID) { return; } foreach (var course in groupUser.EnterpriseCourseContract.EnterpriseCourseContent.Where(c => c.EnterpriseLessonType.Status == (int)Naming.LessonPriceStatus.團體學員課程)) { RegisterLesson groupLesson = course.RegisterLessonEnterprise .Select(t => t.RegisterLesson) .Where(r => r.UID == groupUser.UID).FirstOrDefault(); if (groupLesson == null) { continue; } RegisterLesson lesson = course.RegisterLessonEnterprise .Select(t => t.RegisterLesson) .Where(r => r.UID == profile.UID).FirstOrDefault(); if (lesson == null) { continue; } if (groupLesson.RegisterGroupID != lesson.RegisterGroupID) { lesson.RegisterGroupID = groupLesson.RegisterGroupID; models.SubmitChanges(); } } }
public async Task <ActionResult> UpdateLessonFeedBackAsync(int lessonID, String feedBack) { UserProfile profile = await HttpContext.GetUserAsync(); if (profile == null) { return(Redirect($"~{Startup.Properties["LoginUrl"]}")); } LessonTime lesson = models.GetTable <LessonTime>().Where(l => l.LessonID == lessonID).FirstOrDefault(); if (lesson == null) { return(new EmptyResult()); } LessonFeedBack item = lesson.LessonFeedBack.Where(f => f.RegisterLesson.UID == profile.UID).FirstOrDefault(); if (item == null) { if (lesson.RegisterLesson.GroupingMemberCount > 1) { RegisterLesson regItem = lesson.GroupingLesson.RegisterLesson.Where(r => r.UID == profile.UID).FirstOrDefault(); if (regItem == null) { return(new EmptyResult()); } item = new LessonFeedBack { LessonID = lessonID, RegisterID = regItem.RegisterID, //Status = (int)Naming.IncommingMessageStatus.未讀 }; } else { item = new LessonFeedBack { LessonID = lessonID, RegisterID = lesson.RegisterID, //Status = (int)Naming.IncommingMessageStatus.未讀 }; } models.GetTable <LessonFeedBack>().InsertOnSubmit(item); } item.FeedBack = feedBack; item.FeedBackDate = DateTime.Now; item.Status = (int)Naming.IncommingMessageStatus.未讀; models.SubmitChanges(); return(View("LessonFeedBackItem", item)); }
private void checkMemberLesson(EnterpriseCourseMember profile) { var priceType = models.GetTable <LessonPriceType>().Where(p => p.Status == (int)Naming.LessonPriceStatus.企業合作方案).FirstOrDefault(); foreach (var course in profile.EnterpriseCourseContract.EnterpriseCourseContent) { RegisterLesson lesson = course.RegisterLessonEnterprise .Select(t => t.RegisterLesson) .Where(r => r.UID == profile.UID).FirstOrDefault(); if (lesson == null) { lesson = new RegisterLesson { RegisterDate = DateTime.Now, //Lessons = course.Lessons.Value, Attended = (int)Naming.LessonStatus.準備上課, GroupingMemberCount = course.EnterpriseLessonType.Status == (int)Naming.LessonPriceStatus.團體學員課程 ? course.EnterpriseCourseContract.GroupingMemberCount : 1, IntuitionCharge = new IntuitionCharge { Payment = "CreditCard", FeeShared = 0, ByInstallments = 1 }, LessonPriceType = priceType, AdvisorID = Settings.Default.DefaultCoach, AttendedLessons = 0, UID = profile.UID }; course.RegisterLessonEnterprise.Add(new RegisterLessonEnterprise { RegisterLesson = lesson }); } lesson.Lessons = course.Lessons.Value; if (!lesson.RegisterGroupID.HasValue) { lesson.GroupingLesson = new GroupingLesson { } } ; models.SubmitChanges(); } }
public static void RegisterSpecialGivingLesson2021 <TEntity>(this ModelSource <TEntity> models, int[] items) where TEntity : class, new() { var table = models.GetTable <RegisterLesson>(); foreach (var uid in items) { foreach (var priceID in SpecialGivingLesson2021) { var givingLesson = table .Where(r => r.ClassLevel == priceID) .Where(r => r.UID == uid) .FirstOrDefault(); if (givingLesson == null) { givingLesson = new RegisterLesson { UID = uid, RegisterDate = DateTime.Now, GroupingMemberCount = 1, Lessons = 1, ClassLevel = priceID, IntuitionCharge = new IntuitionCharge { ByInstallments = 1, Payment = "Cash", FeeShared = 0 }, Attended = (int)Naming.LessonStatus.準備上課, AdvisorID = Settings.Default.DefaultCoach, AttendedLessons = 0, GroupingLesson = new GroupingLesson { }, }; table.InsertOnSubmit(givingLesson); } models.SubmitChanges(); } } }
public static void RegisterSpecialGivingLesson2021(this GenericManager <BFDataContext> models, int[] items) { var table = models.GetTable <RegisterLesson>(); foreach (var uid in items) { foreach (var priceID in SpecialGivingLesson2021) { var givingLesson = table .Where(r => r.ClassLevel == priceID) .Where(r => r.UID == uid) .FirstOrDefault(); if (givingLesson == null) { givingLesson = new RegisterLesson { UID = uid, RegisterDate = DateTime.Now, GroupingMemberCount = 1, Lessons = 1, ClassLevel = priceID, IntuitionCharge = new IntuitionCharge { ByInstallments = 1, Payment = "Cash", FeeShared = 0 }, Attended = (int)Naming.LessonStatus.準備上課, AdvisorID = Startup.Properties.GetValue <int?>("DefaultCoach"), AttendedLessons = 0, GroupingLesson = new GroupingLesson { }, }; table.InsertOnSubmit(givingLesson); } models.SubmitChanges(); } } }
public static void RegisterRemoteFeedbackLesson <TEntity>(this ModelSource <TEntity> models, IQueryable <LessonTime> items = null) where TEntity : class, new() { var catalog = models.GetTable <ObjectiveLessonCatalog>().Where(c => c.CatalogID == (int)ObjectiveLessonCatalog.CatalogDefinition.OnLineFeedback) .FirstOrDefault(); var price = catalog?.ObjectiveLessonPrice.FirstOrDefault(); if (price == null) { return; } var exceptive = models.GetTable <UserRole>().Where(r => r.RoleID == (int)Naming.RoleID.Dietitian); var exceptivePrice = models.GetTable <ObjectiveLessonPrice>() .Where(b => b.CatalogID == (int)ObjectiveLessonCatalog.CatalogDefinition.OnLineFeedback || b.CatalogID == (int)ObjectiveLessonCatalog.CatalogDefinition.OnLine) .Select(b => b.PriceID) .ToArray(); if (items == null) { items = models.GetTable <LessonTime>(); } items = items .Where(l => !exceptive.Any(x => x.UID == l.AttendingCoach)) .Join(models.PromptVirtualClassOccurrence(), l => l.BranchID, b => b.BranchID, (l, b) => l); DateTime startDate = new DateTime(2021, 8, 9); items = items .Join(models.GetTable <V_LessonTime>() .Where(t => t.ClassTime >= startDate) .Where(t => t.CoachAttendance.HasValue) .Where(t => t.CommitAttendance.HasValue) .Where(t => !exceptivePrice.Contains(t.PriceID)) .Where(t => SessionScopeForRemoteFeedback.Contains(t.PriceStatus)), l => l.LessonID, t => t.LessonID, (l, t) => l); var calcItems = items.GroupBy(l => l.GroupID); var table = models.GetTable <RegisterLesson>(); var groupingCount = calcItems.Select(g => new { g.First().GroupingLesson, UID = g.First().GroupingLesson.RegisterLesson.Select(r => r.UID).OrderBy(u => u).ToArray(), TotalCount = g.Count() }) .ToList() .GroupBy(g => g.UID.JsonStringify()) .Select(g => new { g.First().GroupingLesson, UID = g.Key, TotalCount = g.Sum(v => v.TotalCount), }); foreach (var g in groupingCount) { var lesson = g.GroupingLesson; var item = lesson.RegisterLesson.First(); GroupingLesson groupLesson = null; foreach (var uid in JsonConvert.DeserializeObject <int[]>(g.UID)) { var currentFeedback = table .Where(r => r.RegisterDate >= startDate) .Where(r => r.ClassLevel == price.PriceID) .Where(r => r.UID == uid) .FirstOrDefault(); if (currentFeedback == null) { if (groupLesson == null) { groupLesson = new GroupingLesson { }; } currentFeedback = new RegisterLesson { UID = uid, RegisterDate = DateTime.Now, BranchID = item.BranchID, GroupingMemberCount = item.GroupingMemberCount, ClassLevel = price.PriceID, IntuitionCharge = new IntuitionCharge { ByInstallments = 1, Payment = "Cash", FeeShared = 0 }, Attended = (int)Naming.LessonStatus.準備上課, AdvisorID = item.AdvisorID, AttendedLessons = 0, GroupingLesson = groupLesson, }; table.InsertOnSubmit(currentFeedback); } int availableCount = g.TotalCount / 2; if (currentFeedback.Lessons < availableCount) { currentFeedback.Lessons = availableCount; currentFeedback.Attended = (int)Naming.LessonStatus.準備上課; } models.SubmitChanges(); } } }
public ActionResult ExchangeBonusPoint(int uid, int itemID, int?recipientID) { var profile = models.GetTable <UserProfile>().Where(u => u.UID == uid).FirstOrDefault(); if (profile == null) { return(Json(new { result = false, message = "學員資料錯誤!!" }, JsonRequestBehavior.AllowGet)); } var item = models.GetTable <BonusAwardingItem>().Where(i => i.ItemID == itemID).FirstOrDefault(); if (item == null) { return(Json(new { result = false, message = "兌換商品錯誤!!" }, JsonRequestBehavior.AllowGet)); } if (profile.BonusPoint(models) < item.PointValue) { return(Json(new { result = false, message = "累積點數不足!!" }, JsonRequestBehavior.AllowGet)); } var award = new LearnerAward { UID = profile.UID, AwardDate = DateTime.Now, ItemID = item.ItemID, ActorID = HttpContext.GetUser().UID }; models.GetTable <LearnerAward>().InsertOnSubmit(award); int usedPoints = item.PointValue; foreach (var bounsItem in profile.BonusPointList(models)) { if (usedPoints <= 0) { break; } award.BonusExchange.Add(new BonusExchange { TaskID = bounsItem.TaskID }); usedPoints -= bounsItem.PDQTask.PDQQuestion.PDQQuestionExtension.BonusPoint.Value; } ///兌換課程 /// if (item.BonusAwardingLesson != null) { var lesson = models.GetTable <RegisterLesson>().Where(r => r.UID == uid).OrderByDescending(r => r.RegisterID).First(); if (item.BonusAwardingIndication != null && item.BonusAwardingIndication.Indication == "AwardingLessonGift") { if (!recipientID.HasValue) { return(Json(new { result = false, message = "請選擇受贈學員!!" }, JsonRequestBehavior.AllowGet)); } var giftLesson = new RegisterLesson { RegisterDate = DateTime.Now, GroupingMemberCount = 1, ClassLevel = item.BonusAwardingLesson.PriceID, Lessons = 1, UID = recipientID.Value, AdvisorID = lesson.AdvisorID, Attended = (int)Naming.LessonStatus.準備上課, GroupingLesson = new GroupingLesson { } }; award.AwardingLessonGift = new AwardingLessonGift { RegisterLesson = giftLesson }; models.GetTable <RegisterLesson>().InsertOnSubmit(giftLesson); } else { var awardLesson = new RegisterLesson { RegisterDate = DateTime.Now, GroupingMemberCount = 1, ClassLevel = item.BonusAwardingLesson.PriceID, Lessons = 1, UID = profile.UID, AdvisorID = lesson.AdvisorID, Attended = (int)Naming.LessonStatus.準備上課, GroupingLesson = new GroupingLesson { } }; award.AwardingLesson = new AwardingLesson { RegisterLesson = awardLesson }; models.GetTable <RegisterLesson>().InsertOnSubmit(awardLesson); } } models.SubmitChanges(); return(Json(new { result = true }, JsonRequestBehavior.AllowGet)); }
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 = "上課時間預約完成!!" })); }
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 = "上課時間預約完成!!" })); }
public static DataTable CreateLessonAchievementDetails <TEntity>(this ModelSource <TEntity> models, IQueryable <LessonTime> items) where TEntity : class, new() { DataTable table = new DataTable(); table.Columns.Add(new DataColumn("合約編號", typeof(String))); table.Columns.Add(new DataColumn("體能顧問", typeof(String))); table.Columns.Add(new DataColumn("簽約場所", typeof(String))); table.Columns.Add(new DataColumn("學員", typeof(String))); table.Columns.Add(new DataColumn("合約名稱", typeof(String))); table.Columns.Add(new DataColumn("課程單價", typeof(int))); table.Columns.Add(new DataColumn("全價計算堂數", typeof(int))); table.Columns.Add(new DataColumn("半價計算堂數", typeof(int))); table.Columns.Add(new DataColumn("上課地點", typeof(String))); table.Columns.Add(new DataColumn("累計上課金額", typeof(int))); table.Columns.Add(new DataColumn("是否信託", typeof(String))); table.Columns.Add(new DataColumn("課程代碼", typeof(int))); table.Columns.Add(new DataColumn("體能顧問所屬分店", typeof(String))); var details = items.Where(t => t.RegisterLesson.RegisterLessonContract != null) .GroupBy(t => new { t.AttendingCoach, t.RegisterLesson.RegisterLessonContract.ContractID, t.BranchID }); foreach (var item in details) { CourseContract contract = models.GetTable <CourseContract>().Where(u => u.ContractID == item.Key.ContractID).First(); ServingCoach coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == item.Key.AttendingCoach).First(); var branch = models.GetTable <BranchStore>().Where(b => b.BranchID == item.Key.BranchID).First(); var r = table.NewRow(); r[0] = contract.ContractNo(); r[1] = coach.UserProfile.FullName(); r[2] = contract.CourseContractExtension.BranchStore.BranchName; if (contract.CourseContractType.IsGroup == true) { r[3] = String.Join("/", contract.CourseContractMember.Select(m => m.UserProfile).ToArray().Select(m => m.FullName())); } else { r[3] = contract.ContractOwner.FullName(); } r[4] = contract.CourseContractType.TypeName + " (" + contract.LessonPriceType.DurationInMinutes + " 分鐘)"; r[5] = contract.LessonPriceType.ListPrice; var count = item.Count(); var halfCount = item.Count(t => t.LessonAttendance == null || !t.LessonPlan.CommitAttendance.HasValue); r[6] = count - halfCount; r[7] = halfCount; r[8] = branch.BranchName; var discount = contract.CourseContractType.GroupingLessonDiscount; r[9] = item.Sum(l => l.RegisterLesson.LessonPriceType.ListPrice) * discount.GroupingMemberCount * discount.PercentageOfDiscount / 100; r[10] = contract.Entrusted == true ? "是" : contract.Entrusted == false ? "否" : ""; if (contract.LessonPriceType.Status.HasValue) { r[11] = contract.LessonPriceType.Status.Value; } r[12] = coach.WorkPlace(); table.Rows.Add(r); } var enterprise = items.Where(t => t.RegisterLesson.RegisterLessonEnterprise != null) .GroupBy(t => new { t.AttendingCoach, t.RegisterLesson.RegisterLessonEnterprise.ContractID, t.RegisterID, t.BranchID }); foreach (var item in enterprise) { EnterpriseCourseContract contract = models.GetTable <EnterpriseCourseContract>().Where(u => u.ContractID == item.Key.ContractID).First(); ServingCoach coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == item.Key.AttendingCoach).First(); RegisterLesson lesson = models.GetTable <RegisterLesson>().Where(g => g.RegisterID == item.Key.RegisterID).First(); var branch = models.GetTable <BranchStore>().Where(b => b.BranchID == item.Key.BranchID).First(); var r = table.NewRow(); r[0] = contract.ContractNo; r[1] = coach.UserProfile.FullName(); r[2] = contract.BranchStore.BranchName; if (lesson.GroupingMemberCount > 1) { r[3] = String.Join("/", lesson.GroupingLesson.RegisterLesson.Select(s => s.UserProfile).ToArray().Select(m => m.FullName())); } else { r[3] = lesson.UserProfile.FullName(); } r[4] = contract.Subject; r[5] = contract.EnterpriseCourseContent.OrderByDescending(c => c.ListPrice).First().ListPrice; var count = item.Count(); var halfCount = item.Count(t => t.LessonAttendance == null || !t.LessonPlan.CommitAttendance.HasValue); r[6] = count - halfCount; r[7] = halfCount; r[8] = branch.BranchName; r[9] = count * lesson.RegisterLessonEnterprise.EnterpriseCourseContent.ListPrice * lesson.GroupingLessonDiscount.PercentageOfDiscount / 100; r[11] = (int)Naming.LessonPriceStatus.企業合作方案; r[12] = coach.WorkPlace(); table.Rows.Add(r); } var others = items.Where(t => t.RegisterLesson.RegisterLessonContract == null && t.RegisterLesson.RegisterLessonEnterprise == null); foreach (var item in others) { var coach = item.AsAttendingCoach; var r = table.NewRow(); r[0] = "--"; r[1] = coach.UserProfile.FullName(); if (item.BranchID.HasValue) { r[2] = item.BranchStore.BranchName; } r[3] = item.RegisterLesson.UserProfile.FullName(); r[4] = item.RegisterLesson.LessonPriceType.Description + " (" + item.RegisterLesson.LessonPriceType.DurationInMinutes + " 分鐘)"; r[9] = r[5] = item.RegisterLesson.LessonPriceType.ListPrice; var halfCount = item.LessonAttendance == null || item.LessonPlan.CommitAttendance.HasValue ? 1 : 0; r[6] = 1 - halfCount; r[7] = halfCount; if (item.BranchID.HasValue) { r[8] = item.BranchStore.BranchName; } if (item.RegisterLesson.LessonPriceType.Status.HasValue) { r[11] = item.RegisterLesson.LessonPriceType.Status.Value; } r[12] = coach.WorkPlace(); table.Rows.Add(r); } table.TableName = "上課統計表-人員明細"; return(table); }
public static DataTable CreateLessonAchievementDetails <TEntity>(this ModelSource <TEntity> models, IQueryable <V_Tuition> items) where TEntity : class, new() { DataTable table = new DataTable(); table.Columns.Add(new DataColumn("合約編號", typeof(String))); table.Columns.Add(new DataColumn("上課體能顧問", typeof(String))); table.Columns.Add(new DataColumn("簽約場所", typeof(String))); table.Columns.Add(new DataColumn("學生", typeof(String))); table.Columns.Add(new DataColumn("合約名稱", typeof(String))); table.Columns.Add(new DataColumn("課程單價", typeof(int))); table.Columns.Add(new DataColumn("已完成上課", typeof(int))); table.Columns.Add(new DataColumn("學員打卡", typeof(int))); table.Columns.Add(new DataColumn("上課場所", typeof(String))); table.Columns.Add(new DataColumn("上課金額", typeof(int))); table.Columns.Add(new DataColumn("是否信託", typeof(String))); table.Columns.Add(new DataColumn("課程代碼", typeof(int))); table.Columns.Add(new DataColumn("體能顧問所屬分店", typeof(String))); table.Columns.Add(new DataColumn("預約上課數", typeof(int))); table.Columns.Add(new DataColumn("SettlementID", typeof(int))); table.Columns.Add(new DataColumn("簽約體能顧問", typeof(String))); var details = items.Where(t => t.ContractID.HasValue) .GroupBy(t => new { t.AttendingCoach, t.ContractID, t.BranchID, t.SettlementID, }); var branchItems = models.GetTable <BranchStore>().ToArray(); foreach (var item in details) { CourseContract contract = models.GetTable <CourseContract>().Where(u => u.ContractID == item.Key.ContractID).First(); ServingCoach coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == item.Key.AttendingCoach).First(); var branch = branchItems.Where(b => b.BranchID == item.Key.BranchID).First(); var r = table.NewRow(); r[0] = contract.ContractNo(); r[1] = coach.UserProfile.FullName(); r[2] = contract.CourseContractExtension.BranchStore.BranchName; if (contract.CourseContractType.IsGroup == true) { r[3] = String.Join("/", contract.CourseContractMember.Select(m => m.UserProfile).ToArray().Select(m => m.FullName())); } else { r[3] = contract.ContractOwner.FullName(); } r[4] = contract.CourseContractType.TypeName + " (" + contract.LessonPriceType.DurationInMinutes + " 分鐘)"; r[5] = contract.LessonPriceType.ListPrice; r[6] = item.Where(l => l.CoachAttendance.HasValue).Count(); //item.Where(l => l.AchievementIndex == 1m).Count(); r[7] = item.Join(models.GetTable <Settlement>(), l => l.SettlementID, s => s.SettlementID, (l, s) => new { l.CommitAttendance, s.SettlementDate }) .Where(l => l.CommitAttendance <= l.SettlementDate).Count(); //item.Where(l => l.AchievementIndex == 0.5m).Count(); r[8] = branch.BranchName; r[9] = item.Sum(l => l.ListPrice * l.GroupingMemberCount * l.PercentageOfDiscount / 100); r[10] = contract.Entrusted == true ? "是" : contract.Entrusted == false ? "否" : ""; if (contract.LessonPriceType.Status.HasValue) { r[11] = contract.LessonPriceType.Status.Value; } var sample = item.First(); r[12] = branchItems.Where(b => b.BranchID == sample.CoachWorkPlace) .Select(b => b.BranchName).FirstOrDefault() ?? "其他"; r[13] = item.Count(); if (item.Key.SettlementID.HasValue) { r[14] = item.Key.SettlementID; } r[15] = contract.ServingCoach.UserProfile.FullName(); table.Rows.Add(r); } var enterprise = items.Where(t => t.EnterpriseContractID.HasValue) .GroupBy(t => new { t.AttendingCoach, ContractID = t.EnterpriseContractID, t.RegisterID, t.BranchID, t.SettlementID, }); foreach (var item in enterprise) { EnterpriseCourseContract contract = models.GetTable <EnterpriseCourseContract>().Where(u => u.ContractID == item.Key.ContractID).First(); ServingCoach coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == item.Key.AttendingCoach).First(); RegisterLesson lesson = models.GetTable <RegisterLesson>().Where(g => g.RegisterID == item.Key.RegisterID).First(); var branch = models.GetTable <BranchStore>().Where(b => b.BranchID == item.Key.BranchID).First(); var r = table.NewRow(); r[0] = contract.ContractNo; r[1] = coach.UserProfile.FullName(); r[2] = contract.BranchStore.BranchName; if (lesson.GroupingMemberCount > 1) { r[3] = String.Join("/", lesson.GroupingLesson.RegisterLesson.Select(s => s.UserProfile).ToArray().Select(m => m.FullName())); } else { r[3] = lesson.UserProfile.FullName(); } r[4] = contract.Subject; r[5] = contract.EnterpriseCourseContent.OrderByDescending(c => c.ListPrice).First().ListPrice; r[6] = item.Where(l => l.CoachAttendance.HasValue).Count(); //item.Where(l => l.AchievementIndex == 1m).Count(); r[7] = item.Join(models.GetTable <Settlement>(), l => l.SettlementID, s => s.SettlementID, (l, s) => new { l.CommitAttendance, s.SettlementDate }) .Where(l => l.CommitAttendance <= l.SettlementDate).Count(); //item.Where(l => l.AchievementIndex == 0.5m).Count(); r[8] = branch.BranchName; r[9] = item.Sum(l => l.EnterpriseListPrice * l.GroupingMemberCount * l.PercentageOfDiscount / 100); r[11] = item.FirstOrDefault()?.ELStatus; //(int)Naming.LessonPriceStatus.企業合作方案; var sample = item.First(); r[12] = branchItems.Where(b => b.BranchID == sample.CoachWorkPlace) .Select(b => b.BranchName).FirstOrDefault() ?? "其他"; r[13] = item.Count(); if (item.Key.SettlementID.HasValue) { r[14] = item.Key.SettlementID; } table.Rows.Add(r); } var others = items.Where(t => !t.ContractID.HasValue && !t.EnterpriseRegisterID.HasValue); foreach (var item in others) { ServingCoach coach = models.GetTable <ServingCoach>().Where(c => c.CoachID == item.AttendingCoach).First(); var branch = models.GetTable <BranchStore>().Where(b => b.BranchID == item.BranchID).FirstOrDefault(); var lesson = models.GetTable <RegisterLesson>().Where(g => g.RegisterID == item.RegisterID).First(); var r = table.NewRow(); r[0] = "--"; r[1] = coach.UserProfile.FullName(); if (item.BranchID.HasValue) { r[2] = branch.BranchName; } r[3] = lesson.UserProfile.FullName(); r[4] = lesson.LessonPriceType.Description + " (" + lesson.LessonPriceType.DurationInMinutes + " 分鐘)"; r[9] = r[5] = item.ListPrice; r[6] = item.CoachAttendance.HasValue ? 1 : 0; //item.AchievementIndex == 1m ? 1 : 0; var settlement = models.GetTable <Settlement>().Where(s => s.SettlementID == item.SettlementID).FirstOrDefault(); r[7] = item.CommitAttendance.HasValue && item.CommitAttendance <= settlement?.SettlementDate ? 1 : 0; //item.AchievementIndex == 0.5m ? 1 : 0; if (branch != null) { r[8] = branch.BranchName; } r[11] = item.PriceStatus; r[12] = branchItems.Where(b => b.BranchID == item.CoachWorkPlace) .Select(b => b.BranchName).FirstOrDefault() ?? "其他"; r[13] = 1; if (item.SettlementID.HasValue) { r[14] = item.SettlementID; } table.Rows.Add(r); } table.TableName = "上課統計表-人員明細"; return(table); }