private string GetMaxPriceType(Entities.Context.Order order, List <OrderDetail> newOrderDetails) { var orderDetailIDs = newOrderDetails.Select(od => od.OrderDetailID); var trackDetails = order.OrderDetails.Where(od => orderDetailIDs.Contains(od.OrderDetailID)); var prices = new List <PriceView>(); foreach (var orderDetail in trackDetails) { orderDetail.Group_ID = newOrderDetails.FirstOrDefault( od => od.OrderDetailID == orderDetail.OrderDetailID).Group_ID; if (orderDetail.Group_ID == null) { continue; } var group = GroupService.GetPlannedAndNotBegin() .ByPrimeryKey(orderDetail.Group_ID); var priceTypeTC = OrderService.GetPriceTypeForGroup( group, false, order.CustomerType); var price = PriceService.GetAllPricesForCourse(orderDetail.Course_TC, orderDetail.Track_TC).FirstOrDefault(p => p.PriceType_TC == priceTypeTC); if (price != null) { prices.Add(price); } } return(prices.AsQueryable().SelectMax(p => p.Price).PriceType_TC); }
public void SberMerchant(Entities.Context.Order order, string operation) { var operationName = SberOperationNames.GetValueOrDefault(operation) ?? operation; var body = H.b[operationName] + Br + H.b["Email: "] + order.User.Email + Br + GetOrderDescription(order, true) + Br + GetOrderCmsAnchor(order) + Br; SendSync(info, sberbankPayment, body, "[ПАО Сбербанк] {0} {1} {2}" .FormatWith(operationName, order.User.FullName, order.CommonOrderId), ptolochko); if (!order.User.Email.IsEmpty()) { body = H.b["Описание покупки: "] + order.GetDescription(false) + Br + H.b["Стоимость покупки: "] + order.TotalPriceWithDescount.MoneyString() + " RUB" + Br + H.b["Номер заказа: "] + order.CommonOrderId + Br + H.b["Дата платежа: "] + DateTime.Now.DefaultString() + Br + H.b["Результат: "] + operationName + Br + Br + "Это письмо сгенерировано автоматически и не требует ответа."; try { Send(info, new MailAddress(order.User.Email), body, "Оплата заказа {0} на сайте www.specialist.ru".FormatWith(order.CommonOrderId)); } catch (Exception ex) { Logger.Exception(ex, "sber mail"); } } }
Entities.Context.Order ConvertToOrder(StudentInGroup sig) { if (sig == null) { return(null); } var email = sig.Student.StudentEmails.OrderByDescending(x => x.StudentEmail_ID).FirstOrDefault() .GetOrDefault(x => x.Email.Trim()); if (email.IsEmpty() || email.Contains(" ") || !email.Contains("@")) { email = null; } var orderDetails = new EntitySet <OrderDetail>(); var orderExams = new EntitySet <OrderExam>(); GroupService.LoadWith(x => x.Course); var group = GroupService.GetByPK(sig.Group_ID); if (sig.Exam_ID > 0) { orderExams.Add(new OrderExam { Exam_ID = sig.Exam_ID.Value }); } else { orderDetails.Add(new OrderDetail { Group = group, Course_TC = group.Course_TC, Course = group.Course, Track_TC = sig.Track_TC }); } var order = new Entities.Context.Order { User = new User { FirstName = sig.Student.FirstName, LastName = sig.Student.LastName, SecondName = sig.Student.MiddleName, Email = email }, IsSig = true, OrderID = sig.StudentInGroup_ID, IsSigPaid = sig.BerthType_TC == BerthTypes.Paid, TotalPriceWithDescount = sig.PartialPayment > 0 ? sig.PartialPayment.Value : sig.Charge.GetValueOrDefault(), OrderDetails = orderDetails, OrderExams = orderExams, OurOrg_TC = null, Description = "Оплата спец заказа №" + sig.StudentInGroup_ID }; var context = new PioneerDataContext(); // if (PriceService.DopUslCourses().Contains(group.Course_TC)) { // order.OurOrg_TC = OurOrgs.Bt; // } order.OurOrg_TC = context.fnGetDefaultOurOrgTC(sig.StudentInGroup_ID, null); return(order); }
public void OrderInfoForManager(Entities.Context.Order order, string confirmInfo = null, bool notComplete = false) { try { var user = order.User; var userInfo = GetUserInfo(user); var socialUrl = order.SocialUrl; var body = userInfo + (order.PromoCode.IsEmpty() ? "" : "Промокод: ".Tag("strong") + order.PromoCode + Br) + (socialUrl.IsEmpty() ? "" : "Ссылка на соц. сеть для скидки: ".Tag("strong") + socialUrl + Br) + GetOrderDescription(order, true) + Br + GetOrderCmsAnchor(order) + Br; var subject = string.Empty; if (notComplete) { subject = "[Незавершенный заказ] " + user.FullName; } else if (!confirmInfo.IsEmpty()) { subject = "[Подтверждение оплаты] " + user.FullName; body += OrderConfirmVM.ConfirmInfoName.Tag("strong") + Br + confirmInfo; } else { subject = "[{0}][{1}][Заказ] {2}".FormatWith(order.PaymentType_TC, order.OurOrgOrDefault, user.FullName); } if (!order.IsOrganization) { var managerTc = order.Manager_TC; var email = GetEmployeeMail(managerTc); if (order.PaymentTypeIsSet && order.OrderDetails.Any(x => x.IsDopUsl)) { Send(info, siteOrders, body, subject, bt1c, email); } else if (order.OrderDetails.Any(x => x.IsTestCert)) { Send(info, siteOrders, body, subject, siteCertOrders, email); } else { Send(info, siteOrders, body, subject, email); } } else { Send(info, secrko, body, subject); Send(info, corporatesiteorders, body, subject); } } catch (Exception e) { Logger.Exception(e, "orderId = " + order.OrderID); throw; } }
private void AddSource(Entities.Context.Order order, StudentInGroup studentInGroup) { if (order.User.Source_ID.HasValue) { studentInGroup.StudentInGroupSources.Add( new StudentInGroupSource { Source_ID = order.User.Source_ID.Value, InputDate = DateTime.Now, Employee_TC = Employees.Specweb, LastChangeDate = DateTime.Now, LastChanger_TC = Employees.Specweb }); } }
private string GetOrderDescription(Entities.Context.Order order, bool isFull = false) { var orderDescription = order.GetDescription(isFull) + Br; if (order.IsOrganization) { orderDescription += "Интернет счет: ".Tag("strong") + order.InvoiceNumber + Br; } orderDescription += "Итого к оплате: ".Tag("strong") + order.TotalPriceWithDescount.MoneyString() + " руб. "; return(orderDescription); }
private void UpdateTrackPrices(Entities.Context.Order order, string trackTC, string priceTypeTC, OrderDetail newDetail, string cityTC) { var trackDetails = order.OrderDetails.Where(od => od.Track_TC == trackTC); string pricePrefix = null; if (cityTC != null) { pricePrefix = PriceTypes.GetPrefix(CityService.GetCityPrefix(cityTC)); } foreach (var orderDetail in trackDetails) { if (newDetail != null) { if (order.IsOrganization && newDetail.Count > 0) { orderDetail.Count = newDetail.Count; } orderDetail.OrgStudents = newDetail.OrgStudents; } if (priceTypeTC == string.Empty) { priceTypeTC = pricePrefix + (orderDetail.Order.IsOrganization ? PriceTypes.Corporate : PriceTypes.PrivatePersonWeekend); } var allPricesForCourse = PriceService.GetAllPricesForCourse(orderDetail.Course_TC, orderDetail.Track_TC).AsQueryable(); var price = allPricesForCourse.FirstOrDefault(p => p.PriceType_TC == priceTypeTC); if (price == null) { price = allPricesForCourse.GetDefault(); } orderDetail.Group_ID = null; orderDetail.SeatNumber = null; orderDetail.PriceType_TC = priceTypeTC; orderDetail.City_TC = cityTC; orderDetail.Price = price.Price; } }
private void CleanTestCertsDopUslExamsAndSubmit(Entities.Context.Order order) { foreach (var od in order.OrderDetails.Where(x => x.IsTestCert).ToList()) { order.OrderDetails.Remove(od); } if (order.OrderDetails.Any(x => !x.IsDopUsl)) { foreach (var od in order.OrderDetails.Where(x => x.IsDopUsl).ToList()) { order.OrderDetails.Remove(od); } } foreach (var od in order.OrderExams.ToList()) { order.OrderExams.Remove(od); } OrderService.SubmitChanges(); }
public static string FromOrder(Entities.Context.Order order) { var inn = OrderCommonConst.AlphaCredit.GetValueOrDefault(order.OurOrgOrDefault); if (inn == null || order.OrderExams.Any()) { return(null); } var rows = order.OrderDetails.Select(ListRow.FromOrderDetail) .Concat(order.OrderExams.Select(ListRow.FromOrderExam)); var price = order.TotalPriceWithDescount; if (!CorrectData(order.OrderDetails.Select(x => x.Group.GetOrDefault(y => y.DateBeg)).ToList(), price).Item1) { return(null); } var id = order.CommonOrderId; return(CreateXml(inn, id, order.User.LastName, order.User.FirstName, order.User.SecondName, price, rows)); }
public void OrderComplete(Entities.Context.Order order, bool sendToUser) { var user = AuthService.CurrentUser; var isCredit = order.PaymentType_TC == PaymentTypes.AlphaCredit; var template = MailTemplateService.GetTemplate(isCredit ? MailTemplates.OrderCompleteCredit : MailTemplates.OrderComplete, user.FullName); var orderDescription = GetOrderDescription(order); orderDescription += HtmlControls.Anchor(CommonConst.SiteRoot + "/order/paymenttypechoice?orderid=" + order.OrderID) + Br; if (order.PaymentType_TC == PaymentTypes.SberBank) { orderDescription += "Квитанция:" + Br + HtmlControls.Anchor(CommonConst.SiteRoot + "/order/receipt?orderid=" + order.OrderID) + Br + "После оплаты необходимо подтвердить оплату обучения на странице:" + Br + HtmlControls.Anchor(CommonConst.SiteRoot + "/order/confirm?orderid=" + order.OrderID) + Br; } var managerTC = order.Manager_TC ?? Employees.MainManager; var manager = EmployeeService.AllEmployees()[order.Manager_TC]; var body = TemplateEngine.GetText( template.Description, new { orderDescription, Manager = H.Anchor("/manager/" + managerTC.ToLower(), manager.LastName + " " + manager.FirstName).AbsoluteHref().ToString() }); if (sendToUser) { Send(info, MailAddress(order.User), body, template.Name); } OrderInfoForManager(order); }
public CartVM GetCart(decimal?orderId = null, bool addTrackDiscounts = false) { Entities.Context.Order order = null; Entities.Context.Order planOrder; if (orderId.HasValue) { order = OrderService.GetByPK(orderId.Value); planOrder = OrderService.GetCurrentOrder(true) ?? new Entities.Context.Order(); } else { order = OrderService.GetCurrentOrder() ?? new Entities.Context.Order(); planOrder = OrderService.GetCurrentOrder(true) ?? new Entities.Context.Order(); } var trainer = EmployeeService.AllEmployees().GetValueOrDefault(order.FavoriteTeacher1); var cart = new CartVM(order) { InPlan = new OrderSeparator(planOrder), User = AuthService.CurrentUser, FavTrainer = trainer.GetOrDefault(x => x.FullName) }; if (cart.OnlyIsCompaty && order.CustomerType == OrderCustomerType.PrivatePerson) { UpdateOrder(OrderCustomerType.Organization); } cart.CourseTCHasExtrases = order.OrderDetails.Where(od => od.Track_TC == null && ExtrasService.GetFor(od).Any()).Select(od => od.Course_TC).ToList(); cart.ExtrasTexts = ExtrasService.Texts(); cart.IsNearestGroupOrderDetails = order.OrderDetails.Where(x => x.Group_ID.HasValue && GroupService.GetGroupsForCourse(x.Course_TC) .FirstOrDefault().GetOrDefault(g => g.Group_ID == x.Group_ID)) .Select(x => x.OrderDetailID).ToList(); if (addTrackDiscounts && order.CustomerType != OrderCustomerType.Organization && !cart.OnlyIsCompaty) { var trackInCart = order.OrderDetails.Where(x => x.Track_TC != null).Select(x => x.Track_TC).ToList(); var courseTCs = order.OrderDetails.Where(x => x.Track_TC.IsEmpty()).Select(x => x.Course_TC).ToList(); if (courseTCs.Any()) { var trackCourses = CourseService.GetActiveTrackCourses().Select(x => new { x.Key, CourseCount = x.Value.Intersect(courseTCs).Count() }) .Where(x => x.CourseCount > 0).ToDictionary(x => x.Key, x => x.CourseCount); var trackTCs = trackCourses.Select(x => x.Key).Where(tc => !trackInCart.Contains(tc)).ToList(); var tracks = CourseService.GetAll(x => trackTCs.Contains(x.Course_TC)).ToList(); var trackDiscounts = TrackService.GetTrackDiscounts(tracks) .OrderByDescending(x => trackCourses[x.Track.Course_TC]).ThenBy(x => x.Price); cart.TrackDiscounts = trackDiscounts.ToList(); } var allOrderCourseTCs = order.OrderDetails.Select(x => x.Course_TC).ToList(); cart.WithWebinar = allOrderCourseTCs.Where(x => PriceService.GetAllPricesForCourse(x, null).Any(y => y.IsWebinar)).ToList(); } return(cart); }
private static TagA GetOrderCmsAnchor(Entities.Context.Order order) { return(order.IsSig ? null : H.Anchor(CmsUrls.Order + order.OrderID)); }
public void OrderStarted(Entities.Context.Order order) { var orderDetail = order.OrderDetails.FirstOrDefault(x => !x.IsTestCert); if (orderDetail == null) { return; } var courseData = orderDetail.Course; var groupData = orderDetail.Group; var user = order.User; var managerData = EmployeeService.AllEmployees()[Employees.GetKarpovich()]; var manager = H.Anchor("/manager/" + managerData.Employee_TC.ToLower(), managerData.FullName).AbsoluteHref().ToString(); var managerPhoto = Images.Employee(managerData.Employee_TC).ToString(); var userName = user.FullName; var template = MailTemplateService.GetTemplate(MailTemplates.OrderStarted, userName); var orderDescription = H.Anchor("/course/" + courseData.UrlName.ToLower(), courseData.GetName()).AbsoluteHref().ToString(); var certType = string.Empty; if (courseData.AuthorizationType_TC == AuthorizationTypes.Microsoft) { certType = "Международный сертификат Microsoft"; } else { certType = courseData.CourseCertificates .FirstOrDefault().GetOrDefault(x => x.CertType.CertTypeName); } if (!certType.IsEmpty()) { certType = " и " + certType; } var complexInfo = string.Empty; var trainerInfo = string.Empty; if (groupData != null && groupData.Teacher != null) { var trainerLink = H.Anchor("/trainer/" + groupData.Teacher.Employee_TC.ToLower(), groupData.Teacher.FullName).AbsoluteHref().ToString(); var complexData = groupData.Complex; var complexLink = H.Anchor("/locations/complex/" + complexData.UrlName, complexData.Name).ToString(); trainerInfo = "Ваш курс будет вести {0}. {1} <br/> {2}".FormatWith(trainerLink, StringUtils.GetFirstParagraph(groupData.Teacher.SiteDescription), H.Anchor("/trainer/{0}/trainer-responses/1".FormatWith( groupData.Teacher.Employee_TC.ToLower()), "Отзывы по преподавателю").AbsoluteHref()); complexInfo = " или непосредственно в учебный комплекс {0} по адресу {1} {2}" .FormatWith(complexLink, complexData.Address, H.Anchor(Urls.GetComplexMap(complexData.UrlName), "[Схема проезда]")); orderDescription += (". Дата начала занятий: {0}. " + "Место проведения обучения: УК {1}. Дни и часы занятий: {2} {3}").FormatWith( groupData.DateBeg.DefaultString(), complexLink, groupData.DaySequence, groupData.TimeInterval); } var body = TemplateEngine.GetText( template.Description, new { orderDescription, manager, trainerInfo, complexInfo, managerPhoto, certType }); var title = TemplateEngine.GetText(template.Name, new{ UserName = user.FirstSecondName }); body = StringUtils.AddUtm(body, "email", "email", "unfinished_orders"); Send(new MailAddress(managerData.FirstSpecEmail), MailAddress(order.User), body, title, websiteManagers); }
public void Export(Entities.Context.Order order, bool checkIfExists) { var alreadyInGroups = new List <decimal>(); var groups = order.OrderDetails.Where(x => x.Group_ID.HasValue) .Select(x => new { Group_ID = x.Group_ID.Value, x.PriceType_TC }).ToList(); if (checkIfExists && order.User.Student_ID.HasValue && groups.Any()) { alreadyInGroups = StudentInGroupService.GetAll(x => x.Student_ID == order.User.Student_ID.Value && groups.Contains(new { x.Group_ID, x.PriceType_TC })).Select(x => x.Group_ID).ToList(); } var student = GetOrInsertStudentByUser(order.User, order.OrderID.ToString()); var berthTypeTC = BerthTypes.NotPaid; var studentInGroupRepository = new Repository <StudentInGroup>( new SpecialistContextProvider()); var nextContactDate = DateTime.Today.AddDays(1); if (order.OrderDetails.Any(x => x.Group.GetOrDefault(g => g.DateBeg) == DateTime.Today)) { nextContactDate = DateTime.Today; } var addEduDocs = false; foreach (var orderDetail in order.OrderDetails.Where(x => !alreadyInGroups.Contains(x.Group_ID.GetValueOrDefault()))) { if (!orderDetail.IsTestCert) { addEduDocs = true; } var discount = orderDetail.GetAllDiscountsInPercent(); string presenceTypeTC; if (PriceTypes.IsDistance(orderDetail.PriceType_TC)) { presenceTypeTC = PresenceTypes.Distance; } else if (PriceTypes.Webinars.Contains(orderDetail.PriceType_TC)) { presenceTypeTC = PresenceTypes.Webinar; } else { presenceTypeTC = PresenceTypes.Intramural; } var courseOrderMangerTC = orderDetail.IsTestCert ? Employees.TestCert : Employees.Site; var isFree = orderDetail.Price == 0; var reason = orderDetail.ReasonForLearning; if (orderDetail.IsTestCert) { reason = LearningReasons.Testing; } else if (!(orderDetail.IsTrack || orderDetail.Course.GetOrDefault(x => x.FullHours >= CommonConst.LongCourseHours))) { reason = LearningReasons.Comprehensive; } var studentInGroup = new StudentInGroup { Student_ID = student.Student_ID, Group_ID = orderDetail.CalcGroupId, InputSource_TC = GetInputSource(), PriceType_TC = orderDetail.PriceType_TC, Discount = Math.Round(discount), BerthType_TC = berthTypeTC, Track_TC = orderDetail.Track_TC, SeatNumber = orderDetail.SeatNumber, Employee_TC = Employees.Site, InputDate = DateTime.Now, FavoriteTeacher1 = orderDetail.IsCourseOrder ? order.FavoriteTeacher1 : null, Debt = 100, NextContactDate = nextContactDate, Consultant_TC = courseOrderMangerTC, Router_TC = courseOrderMangerTC, PresenceType_TC = presenceTypeTC, ReasonForLearning = reason, PromoCode = orderDetail.Order.PromoCode, Charge = orderDetail.PriceWithDiscount, IsHungry = PriceTypes.IsBusiness( orderDetail.PriceType_TC) }; ; if (IsPreTestPass(orderDetail)) { studentInGroup.IsEntryTestPassed = true; } if (isFree) { studentInGroup.Debt = 0; studentInGroup.BerthType_TC = BerthTypes.Kons; studentInGroup.NextContactDate = null; } AddSource(order, studentInGroup); foreach (var extras in orderDetail.OrderExtras) { studentInGroup.StudentInGroupExtras.Add( new StudentInGroupExtras { Extras_ID = extras.Extras_ID, StudentInGroup = studentInGroup }); } studentInGroupRepository.InsertAndSubmit(studentInGroup); orderDetail.StudentInGroup_ID = studentInGroup.StudentInGroup_ID; } foreach (var orderExam in order.OrderExams) { decimal groupID = Groups.NotChoiceGroupID; if (orderExam.Group_ID.HasValue) { groupID = orderExam.Group_ID.Value; } var studentInGroup = new StudentInGroup { Student_ID = student.Student_ID, Group_ID = groupID, PriceType_TC = PriceTypes.PrivatePersonWeekend, BerthType_TC = berthTypeTC, Employee_TC = Employees.Site, InputDate = DateTime.Now, InputSource_TC = GetInputSource(), Debt = 100, ReasonForLearning = LearningReasons.Exam, Exam_ID = orderExam.Exam_ID, NextContactDate = nextContactDate, Charge = orderExam.Price, PresenceType_TC = PresenceTypes.Intramural, }; AddSource(order, studentInGroup); studentInGroupRepository.InsertAndSubmit(studentInGroup); orderExam.StudentInGroup_ID = studentInGroup.StudentInGroup_ID; } if (addEduDocs) { new PioneerDataContext().uspAutoEntryPersonalRecords(student.Student_ID, order.EduDocTypeTC); } }