public CheckoutLogic(IMyMentorRepository repository, ICurrencyRetriver currencyRetriver, IStatefull state, IExpressCheckoutManager payPalExpressCheckoutManager) { _repository = repository; _currencyRetriver = currencyRetriver; _state = state; _payPalExpressCheckoutManager = payPalExpressCheckoutManager; }
private async Task<string> CreateUpdateEvent(CreateCouponViewModel couponVm, string eventStatus, IMyMentorRepository repository) { var json = new JavaScriptSerializer(); CurrencyDto currentCurrency = null; var eventDto = new EventDto { ObjectId = couponVm.EventId, EventStatus = eventStatus, EventType = EventTypes.CouponPurchase, UserId = couponVm.TeacherData.TeacherId, CouponId = couponVm.CouponId, PaymentData = couponVm.PaymentData, EventData = json.Serialize(couponVm), PaymentAmount = couponVm.TeacherData.AmountForPayment, PaymentAmountNIS = ConvertToNis(couponVm.TeacherData.AmountForPayment, out currentCurrency), }; eventDto.PaymentCurrency = currentCurrency; return await repository.CreateUpdateEvent(eventDto); }
private static void UpdateCouponAccountStatementsAndEvent( CreateCouponViewModel createCouponVm, IMyMentorRepository repository, IEnumerable<AccountStatement> accountStatementsToUpdate, EventDto eventsDto) { var accountStatementsWithCreditOrDebit = accountStatementsToUpdate.Where(x => x.Credit > 0 || x.Debit > 0).ToArray(); var couponUpdate = ParseObject.CreateWithoutData<Coupon>(createCouponVm.CouponId); couponUpdate.CouponStatus = BL.Consts.CouponStatus.Active; // update account statements repository.BulkSave(accountStatementsWithCreditOrDebit.Union(new ParseObject[] { couponUpdate })); // set users balance foreach (var accountStatement in accountStatementsWithCreditOrDebit) { var user = Task.Run(() => repository.FindUsersById(new[] {accountStatement.User.ObjectId})).Result.SingleOrDefault(); if (user != null) { var userAdminData = user.GetPointerObject<UserAdminData>("adminData"); if (userAdminData != null) { userAdminData.Balance = accountStatement.Balance; userAdminData.BalanceNis = CurrencyConverter.ConvertToNis(accountStatement.Balance,accountStatement.Currency.ConvertToCurrencyDto(),repository); Task.Run(() => userAdminData.SaveAsync()).Wait(); } } } eventsDto.EventStatus = EventStatus.EventPaymentCompleted; Task.Run(() => repository.CreateUpdateEvent(eventsDto)).Wait(); }
private ParseObject ValidateContentItem(ShoppoingCartItemModel cartItemModel, IMyMentorRepository repository, StringsManager stringManager, out Purchase existingPurchase, out string previosDemoId) { ParseObject result = new ParseObject(""); previosDemoId = ""; var isAdmin = Session.GetLoggedInUser() == null || Session.GetLoggedInUserRoleName() == Roles.Administrators.ToString(); var isLesson = cartItemModel.ContentItemType.Contains("lesson"); var isDemo = cartItemModel.ContentItemType.Contains("demo"); var contentItemActive = true; var canBeOrderedByTeacher = true; var currentUserId = Session.GetLoggedInUser().ObjectId; var contentItemOwner = false; if (isLesson) { if (LessonInvalid(cartItemModel, repository, stringManager, out existingPurchase, currentUserId, ref contentItemActive, ref canBeOrderedByTeacher, ref contentItemOwner, out result)) return null; } else { if (BundleInvalid(cartItemModel, repository, stringManager, currentUserId, ref contentItemActive, ref canBeOrderedByTeacher, ref contentItemOwner,out existingPurchase, out result)) return null; } if (!isAdmin && !contentItemOwner & !contentItemActive) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.ContentItemNotActive); return null; } if (!isAdmin && !canBeOrderedByTeacher) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.OrderByTeacherNotAllowed); return null; } return result; }
private double GetPriceWithCoupon(Purchase purchase, Coupon[] userCoupons, IMyMentorRepository repository, CurrencyDto userCurrency) { Coupon couponForItem = null; var usedCoupons = userCoupons.Where(x => x.State != CouponStates.UnUsed.ToString()); if (purchase.ClipKey != null) { couponForItem = usedCoupons.FirstOrDefault(x => x.Clip != null && x.Clip.ObjectId == purchase.ClipKey.ObjectId); } else if (purchase.BundleKey != null) { couponForItem = usedCoupons.FirstOrDefault(x => x.Bundle != null && x.Bundle.ObjectId == purchase.BundleKey.ObjectId); } if (couponForItem != null) { var priceInNis = couponForItem.TeacherCouponFeeNIS + couponForItem.SiteCouponFeeNIS; return CurrencyConverter.ConvertFromNis(priceInNis, userCurrency, repository); } return -1; }
private void SetPurchases(CheckoutViewModel model, Purchase[] userPurchases, Coupon[] userCoupons, IMyMentorRepository repository, CurrencyDto currencyDto) { model.PurchasesForUser = userPurchases.Select(purchase => new CheckoutPurchaseViewModel { Id = purchase.ObjectId, ContentTitlePart1 = GetTitle1(purchase), ContentTitlePart2 = GetTitle2(purchase), ContentName_he_il = GetName_he_il(purchase), ContentName_en_us = GetName_en_us(purchase), HasUnUsedCouopn = CheckUnUsedCouponsForPurchase(purchase, userCoupons), IncludingSupport = purchase.IncludingSupport, RegularPrice = GetPrice(purchase, repository, currencyDto), RegularPriceString = GetPrice(purchase, repository, currencyDto).ToCurrency(model.UserCurrency), PriceWithCoupon = GetPriceWithCoupon(purchase, userCoupons, repository, currencyDto), PriceWithCouponString = GetPriceWithCoupon(purchase, userCoupons, repository, currencyDto).ToCurrency(model.UserCurrency), IsLesson = purchase.ClipKey != null, ContentId = purchase.ClipKey != null ? purchase.ClipKey.ObjectId : purchase.BundleKey.ObjectId, CurrencyId = purchase.UserCurrency.ObjectId, Coupon = CheckCouponForPurchase(purchase, userCoupons), TeacherInfo = new TeacherInfo { Teacher = GetTeacher(purchase), Agent = GetAgent(purchase).ConvertToParseUserDto(), TeacherAdminData = GetTeacherAdminData(purchase), AgentAdminData = GetAgetAdminData(purchase) }, }).ToArray(); }
private void SetTotals(CheckoutViewModel model, IMyMentorRepository repository, CurrencyDto currencyDto) { var loggedInUser = Session.GetLoggedInUser(); var userAdminData = Task.Run(() => loggedInUser.GetPointerObject<UserAdminData>("adminData")).Result; var currentBalance = userAdminData.Balance; var minimumTransaction = repository.FindGlobalTeacherCommission().MinimumTransaction; var basketPrice = model.PurchasesForUser.Sum(x => x.RegularPrice); var basketPriceWithCoupon = model.PurchasesForUser.Sum(x => { if (x.HasCoupon) return x.PriceWithCoupon; return x.RegularPrice; }); var paymentTransactionWithCoupon = currentBalance < 0 ? basketPriceWithCoupon - currentBalance : basketPriceWithCoupon >= currentBalance ? basketPriceWithCoupon - currentBalance : 0; var paymentTransactionNis = CurrencyConverter.ConvertToNis(paymentTransactionWithCoupon,currencyDto,repository); paymentTransactionWithCoupon = paymentTransactionNis < minimumTransaction ? 0 : paymentTransactionWithCoupon; var reduceFromBalance = basketPriceWithCoupon == 0 || paymentTransactionWithCoupon > basketPriceWithCoupon || currentBalance <= 0 ? 0 : basketPriceWithCoupon - paymentTransactionWithCoupon; model.BasketPrice = basketPrice.ToCurrency(currencyDto); model.BasketPriceWithCouopn = basketPriceWithCoupon.Equals(basketPrice) ? string.Empty : basketPriceWithCoupon.ToCurrency(currencyDto); model.BasketPriceWithCouopnForCalc = basketPriceWithCoupon; model.Balance = currentBalance.ToCurrency(currencyDto); model.BalanceForCalc = currentBalance; model.ReduceFromBalance = reduceFromBalance.ToCurrency(currencyDto); model.PaymentTransaction = paymentTransactionWithCoupon.ToCurrency(currencyDto); model.PaymentTransactionForCalc = paymentTransactionWithCoupon; model.RequiresPayment = paymentTransactionWithCoupon > 0; }
private IEnumerable<Purchase> FindPurchasesForUser(IMyMentorRepository repository) { var loggedInUser = Session.GetLoggedInUser(); string issuedFor = loggedInUser.ObjectId; return repository.FindUserPurchasesForCheckout(issuedFor).ToArray(); }
private async Task<MyAccountViewModel> GetMyAccountVm(MyAccountRequest request, IMyMentorRepository repository) { var model = new MyAccountViewModel {MyAccountRequest = request}; var isAdmin = Session.GetLoggedInUserRoleName() == RoleNames.ADMINISTRATORS || !string.IsNullOrEmpty(Session.GetImpersonatingUserName()); var currentUser = Session.GetLoggedInUser(); var isFirstTimeInPage = Request.QueryString.AllKeys.All(x => x.ToLower() != "uid" && x.ToLower() != "pn"); var userManager = new MyMentorUserManager(repository, Session, HttpContext); if (isAdmin && currentUser.Username != request.Uid && !isFirstTimeInPage) { if (!string.IsNullOrEmpty(request.Uid)) { var user = await repository.FindUserByUserName(request.Uid); if (user != null) { model.ErrorMessage = string.Empty; model.UserName = user.UserName; model.UserDispalyName =string.Concat(user.GetLocalizedField("FirstName") ," ", user.GetLocalizedField("LastName")); model.MyAccountRequest.Uid = user.ObjectId; if (Session.GetImpersonatingUserName() != model.UserName) await userManager.ImpersonateUser(user.UserName); else userManager.StopImpersonation(); } else { model.ErrorMessage = MyMentorResources.userNameDoesNotExist; } } else { userManager.StopImpersonation(); } } else { model.UserName = currentUser.Username; model.UserDispalyName = currentUser.GetFullName(Language.CurrentLanguageCode); model.MyAccountRequest.Uid = currentUser.ObjectId; } return model; }
private void AddCoupons(string eventId, IEnumerable<CouponTypeDto> couponTypes, IEnumerable<SupportTypeDto> supportTypes, IMyMentorRepository repository, EntityDto[] entities, IEnumerable<CouponStatusDto> couponStatuses, List<AccountStatementViewModel> accountStatementVm, string nisCurrencySymbol) { IEnumerable<Coupon> coupons = Task.Run(() => repository.FindCouponsInEvent(eventId)).Result; foreach (var coupon in coupons) { var asvm = new AccountStatementViewModel(); asvm.Id = coupon.ObjectId; asvm.Type = entities.FindEntityName(EntityKeys.Coupons); asvm.UserName = coupon.IssuedBy.GetFullName(Language.CurrentLanguageCode); asvm.DueDate = coupon.CreatedAt.HasValue ? coupon.CreatedAt.Value : DateTime.MinValue; asvm.TransActionDate = coupon.CreatedAt.HasValue ? coupon.CreatedAt.Value : DateTime.MinValue; asvm.Item = coupon.GetItemName(entities); asvm.Status = couponStatuses.First(x => x.CouponStatusCode.ToLower() == coupon.CouponStatus.ToLower()).GetLocalizedField("CouponStatus"); asvm.Amount = coupon.GetFormattedAmount(); asvm.AmountNis = coupon.GetFormattedAmountNis(); asvm.Balance = coupon.GetFormattedBalance(); asvm.BalanceNis = coupon.GetFormattedBalanceNis(); asvm.Remarks = coupon.CouponType; asvm.AmountClassName = "azure"; asvm.CreatedAt = coupon.CreatedAt.Value; asvm.Coupon = GetCouponView(coupon, couponTypes, supportTypes, couponStatuses, nisCurrencySymbol); accountStatementVm.Add(asvm); } }
private void GetLessons(ContentItemsRequest request, LessonsViewModel model, IMyMentorRepository repository) { model.SelectedResidenceId = request.category6; model.SelectedCityId = request.category8; var resideces = repository.FindAllResidences(); var selectedResidence = (resideces).SingleOrDefault(res => res.Id == request.category6); var selectedCity = (resideces).SingleOrDefault(res => res.Id == request.category8); model.SelectedResidenceName = selectedResidence != null ? selectedResidence.Name : string.Empty; model.SelectedCityName = selectedCity != null ? selectedCity.Name : string.Empty; model.LessonFilters[1].SelectedValue = request.category2; model.LessonFilters[4].SelectedValue =HttpUtility.UrlDecode( request.category5); model.SelecteDate = request.category7; model.SortBy = request.SortBy; model.LessonDisplayMode = LessonDisplayMode.Lessons; GetContentItems(model, request); }
private void GetBundles(ContentItemsRequest request, LessonsViewModel model, IMyMentorRepository repository) { var currencyRetriver = new CurrencyRetriver(HttpContext, Session, repository); var defaultCurrency = repository.FindDefaultCurrency(); var currentUserId = Session.GetLoggedInUser() != null ? Session.GetLoggedInUser().ObjectId : string.Empty; model.LessonDisplayMode = LessonDisplayMode.Bundles; var findBundlesResult = repository.FindBundlesByClipId(request.clipId); if (!findBundlesResult.ClipToBundle.Any()) { request.clipId = null; GetLessons(request, model, repository); return; } model.BundlesViewModel.ContentItem = findBundlesResult.SelectedClip.ToDto(); model.BundlesViewModel.Bundles = findBundlesResult.ClipToBundle.Select(o => o.Key).ToDto().ToArray(); CurrencyDto sourceCurrency = model.BundlesViewModel.ContentItem.Currency ?? defaultCurrency; CurrencyDto targetCurrency = currencyRetriver.GetCurrent(); model.BundlesViewModel.ContentItem.ConvertedPrice = CurrencyConverter.Convert(float.Parse(model.BundlesViewModel.ContentItem.Price), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent()); model.BundlesViewModel.ContentItem.ConvertedPriceWithSupport = CurrencyConverter.Convert(float.Parse(model.BundlesViewModel.ContentItem.PriceWithSupport), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent()); foreach (var bundleViewModel in model.BundlesViewModel.Bundles) { sourceCurrency = bundleViewModel.Currency.ConvertToCurrencyDto() ?? defaultCurrency; Bundle bundle = findBundlesResult.ClipToBundle.First(ctb => ctb.Key.ObjectId == bundleViewModel.ObjectId).Key; bundleViewModel.Clips = findBundlesResult.ClipToBundle[bundle].ToDto(); bundleViewModel.ConvertedPrice = CurrencyConverter.Convert(float.Parse(bundleViewModel.Price), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent()); bundleViewModel.ConvertedSupportPrice = CurrencyConverter.Convert(float.Parse(bundleViewModel.SupportPrice), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent()); bundleViewModel.IsActive = bundle.GetPointerObject<ClipStatus>("status").Status == LessonStatus.Active.ToLower(); float allClipsPrices = 0; foreach (var clip in bundleViewModel.Clips) { sourceCurrency = clip.Currency ?? defaultCurrency; var convertedClipPrice = CurrencyConverter.Convert(float.Parse(clip.Price), sourceCurrency, targetCurrency); clip.ConvertedPrice = convertedClipPrice.ToCurrency(currencyRetriver.GetCurrent()); clip.ConvertedPriceWithSupport = CurrencyConverter.Convert(float.Parse(clip.PriceWithSupport), sourceCurrency, targetCurrency).ToCurrency(currencyRetriver.GetCurrent()); allClipsPrices += convertedClipPrice; clip.ExistsInMultipleBundles = findBundlesResult.ClipToBundle.Count(x => x.Value.Select(_ => _.ObjectId).Contains(clip.ObjectId)) > 1; clip.SelectedContentItem = clip.ObjectId == model.BundlesViewModel.ContentItem.ObjectId; SetDisplayIncludeInActiveBundle(clip, currentUserId); } bundleViewModel.ConvertedPriceWithoutDiscount = allClipsPrices.ToCurrency(currencyRetriver.GetCurrent()); } }
private static void UpdatePaymentNotRecieved(EventDto eventsDto, IMyMentorRepository repository) { //payment was not recieved eventsDto.EventStatus = EventStatus.PaymentNotReceived; repository.CreateUpdateEvent(eventsDto); }
private AccountStatement AddStatementToUpdate(IMyMentorRepository repository, AccountStatementDto missingAccountStatement, AccountStatementBuilder accountStatementBuilder) { var asCurrency = repository.FindAllCurrencies(missingAccountStatement.CurrencyId); var statement = missingAccountStatement; var transactionCode = repository.FindTransactionTypesById(statement.TransactionTypeId).TransactionCode; AccountStatementDto accountStatementDto = null; var user = Task.Run(() => repository.FindUserWithAdminData(statement.UserId)).Result; accountStatementDto = Task.Run(() => accountStatementBuilder.SetAccountStatement(user, statement.Credit, statement.Debit, transactionCode, statement.DueDate, asCurrency.Single(), validationToken: statement.ValidationToken)).Result; //UserAdminData adminData; //using (var t = Task.Run(() => user.GetPointerObject<UserAdminData>("adminData"))) //{ // adminData = t.Result; //} //adminData.Balance = accountStatementDto.Balance; //adminData.SaveAsync(); return accountStatementDto.ConvertToAccountStatementDomain(); }
private AccountStatementViewModel[] GetStatementsByEventId(string eventId, IMyMentorRepository repository, EntityDto[] entities, IEnumerable<CouponStatusDto> couponStatuses, EventTypeDto[] eventTypes, IEnumerable<TransactionTypeDto> transactionTypes, IEnumerable<CouponTypeDto> couponTypes, IEnumerable<SupportTypeDto> supportTypes, string nisCurrencySymbol) { var accountStatementVm = new List<AccountStatementViewModel>(); var clipStatuses = repository.FindClipStatuses(); var purchaseStatuses = repository.FindPurchaseStatues().ToArray(); Event eventrecord = null; eventrecord = Task.Run(() => repository.FindEventById(eventId)).Result; if (eventrecord == null) { return new AccountStatementViewModel[0]; } var eventType = eventTypes.FirstOrDefault(x => x.EventTypeKey == eventrecord.EventType); var action = eventType != null ? eventType.GetLocalizedField("EventType") : string.Empty; // add event AddEvent(entities, nisCurrencySymbol, accountStatementVm, eventrecord, action); // add coupons AddCoupons(eventId, couponTypes, supportTypes, repository, entities, couponStatuses, accountStatementVm, nisCurrencySymbol); IEnumerable<Purchase> purchases = repository.FindPurchasesByEventId(eventId); // add account statements IEnumerable<AccountStatement> accountStatements = Task.Run(() => repository.FindAccountStatementsByEventId(eventId)).Result; var accountStatementViewModels = GetAccountStatements( accountStatements, entities, eventTypes, transactionTypes, couponTypes, supportTypes, couponStatuses, nisCurrencySymbol, purchases, clipStatuses, purchaseStatuses); accountStatementVm.AddRange(accountStatementViewModels); // add purchases foreach (var purchase in purchases) { accountStatementVm.Add(new AccountStatementViewModel { Id = purchase.ObjectId, Type = entities.FindEntityName(EntityKeys.Purchases), UserName = purchase.UserKey.GetFullName(Language.CurrentLanguageCode), CreatedAt = purchase.UpdatedAt.HasValue ? purchase.UpdatedAt.Value : DateTime.MinValue, DueDate = purchase.UpdatedAt.HasValue ? purchase.UpdatedAt.Value : DateTime.MinValue, Item = purchase.GetItemName(entities), Status = purchaseStatuses.Single(x=>x.StatusCode.ToLower() == purchase.PurchaseStatusCode.ToLower()).GetLocalizedField("purchaseStatus"), Amount = purchase.GetFormattedPrice(), AmountNis = purchase.GetFormattedPriceNis(), AmountClassName = "azure", Remarks = purchase.GetLocalizedField("purchaseRemarks"), Lesson = GetLessonPurchaseView(purchase.ClipKey, purchases, nisCurrencySymbol, clipStatuses, purchaseStatuses, purchase.Event.ObjectId), Bundle = GetBundlePurchaseView(purchase.BundleKey, purchases, nisCurrencySymbol, clipStatuses, purchaseStatuses,purchase.Event.ObjectId), EventData = GetEventData(purchase.Event), Action = action }); } return accountStatementVm.ToArray(); }
private CheckoutViewModel GetCheckoutViewModel(Purchase[] userPurchases, IMyMentorRepository repository) { var loggedInUser = Session.GetLoggedInUser(); var model = new CheckoutViewModel(); CurrencyDto currencyDto = Task.Run(() => loggedInUser.GetPointerObject<BL.Models.Currency>("currency")).Result.ConvertToCurrencyDto(); model.UserCurrency = currencyDto; var worldRetriver = new WorldContentTypeRetriver(HttpContext, repository); var world = worldRetriver.GetWorldContentTypeId(); string issuedFor = loggedInUser.ObjectId; var userCoupons = repository.FindCoupon(issuedFor, world).ToArray(); UpdateDuplicateRecords(ref userCoupons, ref userPurchases); SetPurchases(model, userPurchases, userCoupons, repository, currencyDto); SetCoupons(userCoupons, userPurchases, currencyDto, repository, model); SetTotals(model, repository, currencyDto); model.PurchaseFor = loggedInUser.Username; return model; }
private async Task CreatePaymentTransaction(IMyMentorRepository repository, CreateCouponViewModel createCouponVm) { var currencyRetriever = new CurrencyRetriver(HttpContext, Session, repository); var globalCommissionsTable = repository.FindGlobalTeacherCommission(); var maam = globalCommissionsTable.Maam; var paysMaam = createCouponVm.TeacherData.LivesInIsrael; var paymentTransaction = createCouponVm.TeacherData.AmountForPayment; var gapToPay = createCouponVm.TeacherData.GapToPay; var offsetFromBalance = gapToPay > paymentTransaction ? gapToPay - paymentTransaction : 0; var maamPaymentCredit = paysMaam ? (paymentTransaction * maam)/(100 + maam) : 0; var maamFromBalance = paysMaam ? offsetFromBalance * maam / (100 + maam) : 0; var maamHitkabel = maamFromBalance + maamPaymentCredit; var amountForSiteAccountCredit = createCouponVm.TeacherData.GapToPay - maamHitkabel; var transactionUsers = GetTransactionUsers(createCouponVm.TeacherData,globalCommissionsTable,repository); var teacher = transactionUsers.Single(x => x.ObjectId == createCouponVm.TeacherData.TeacherId); var siteAccount = transactionUsers.Single(x => x.ObjectId == globalCommissionsTable.SiteAccountId); var maamAccount = transactionUsers.Single(x => x.ObjectId == globalCommissionsTable.MaamAccountId); var maamBalanceAccount = transactionUsers.Single(x=>x.ObjectId == globalCommissionsTable.MaamBalanceAccountId); var agentAccount = transactionUsers.SingleOrDefault(x => x.ObjectId == createCouponVm.TeacherData.AgentId); var accountStatementBuilder = new AccountStatementBuilder(repository, currencyRetriever) { CouponId = createCouponVm.CouponId, EventId = createCouponVm.EventId }; var accountStatements = new List<AccountStatementDto>(); var teacherAccountCreditStatement = TeacherAccountCreditStatement(createCouponVm, accountStatementBuilder, paymentTransaction, accountStatements, teacher, currencyRetriever); SiteAccountCreditStatement(createCouponVm, accountStatementBuilder, amountForSiteAccountCredit, accountStatements, siteAccount, currencyRetriever); if (paysMaam) { VatCreditStatement(createCouponVm, maamPaymentCredit, accountStatementBuilder, accountStatements,teacherAccountCreditStatement, maam, maamFromBalance, maamAccount, maamBalanceAccount, currencyRetriever); } if (!string.IsNullOrEmpty(createCouponVm.TeacherData.AgentId)) { AgentCreditStatement(createCouponVm, repository, agentAccount, teacher, siteAccount, globalCommissionsTable, accountStatementBuilder, accountStatements, currencyRetriever); } for (int i = 0; i < accountStatements.Count(); i++) { accountStatements[i].Order = i; } createCouponVm.AccountStatements = accountStatements.ToArray(); await CreateUpdateEvent(createCouponVm, EventStatus.EventStarted, repository); }
private void SetBundleClips(Purchase[] userPurchases, CheckoutViewModel model, IMyMentorRepository repository) { var bundleIds = userPurchases.Where(x => x.BundleKey != null).Select(x => x.BundleKey.ObjectId).ToArray(); model.LessonsForBundles = repository.FindClipsForBundle(bundleIds); }
private void AgentCreditStatement(CreateCouponViewModel createCouponVm, IMyMentorRepository repository, ParseUser agentAccount, ParseUser teacher, ParseUser siteAccount, CommissionsDto globalCommissionsTable, AccountStatementBuilder accountStatementBuilder, List<AccountStatementDto> accountStatements, CurrencyRetriver currencyRetriever) { if (agentAccount == null) { //agent user not found ,send email //var missingAgent = teacher.GetPointerObject<UserAdminData>("adminData").GetPointerObject<ParseUser>("agent"); SendErrorEmail(createCouponVm,MyMentorResources.couponErrAgentNotFound); // Mailer.SendAgentNotFound(missingAgent.Username,teacher.Username,createCouponVm.EventId); return; } var userAdminData = agentAccount.GetPointerObject<UserAdminData>("adminData"); var acpAgentCommission = userAdminData.AcpTeacherCommission == Global.NoCommission ? globalCommissionsTable.AgentCommission : userAdminData.AcpTeacherCommission; var agentSugOsek = agentAccount.GetPointerObject<SugOsek>("sugOsek"); var agentGetVat = agentSugOsek.GetVat ? 1: 0; var agentPayVat = agentSugOsek.PayVat ? 1 :0; var teacherSugOsek = teacher.GetPointerObject<SugOsek>("sugOsek"); var teacherPayVat = teacherSugOsek.PayVat? 1: 0; var maamFlag = teacherPayVat == agentGetVat ? 0 : 1; var teachertCurrency = teacher.GetPointerObject<Currency>("currency").ConvertToCurrencyDto(); var agentCurrency = agentAccount.GetPointerObject<Currency>("currency").ConvertToCurrencyDto(); var emlatHamaraFlag = agentCurrency.ObjectId != teachertCurrency.ObjectId; var conversionCommission = globalCommissionsTable.ConversionCommission; var maam = globalCommissionsTable.Maam; var gapToPay = createCouponVm.TeacherData.GapToPay; var totalCommission = (gapToPay + (maamFlag * ((-gapToPay/(100 +maam)* maam * teacherPayVat)+(gapToPay*maam/100 *agentGetVat)))) * acpAgentCommission; var agentIncludingVat = agentSugOsek.GetVat ? maam : 0; double emlatHamara; // זיכוי סוכן var agentCreditAccountStatement = accountStatementBuilder.SetAccountStatement( agentAccount, totalCommission, 0, TransactionType.CouponAgentCommission, DateTime.Now, currencyRetriever.GetCurrent(), includingVAT: agentIncludingVat); accountStatements.Add(agentCreditAccountStatement); createCouponVm.AgentBalance = agentAccount.GetPointerObject<UserAdminData>("adminData").Balance; // חיוב סוכן בעמלת המרה if (emlatHamaraFlag) { emlatHamara = totalCommission*conversionCommission; var agentDebitAccountStatement = accountStatementBuilder.SetAccountStatement( agentAccount, 0, emlatHamara, TransactionType.CouponAgentExCommission, DateTime.Now, currencyRetriever.GetCurrent(), includingVAT: agentIncludingVat); accountStatements.Add(agentDebitAccountStatement); createCouponVm.AgentBalance = agentAccount.GetPointerObject<UserAdminData>("adminData").Balance; } //חיוב האתר בעמלת הסוכן maamFlag = 0 == teacherPayVat ? 0 : 1; totalCommission = (gapToPay + (maamFlag * ((-gapToPay / (100 + maam) * maam * teacherPayVat) + (gapToPay * maam / 100 * 0)))) * acpAgentCommission; var siteAccountDebitStatement = accountStatementBuilder.SetAccountStatement( siteAccount, 0, totalCommission, TransactionType.CouponAgentCommission, DateTime.Now, currencyRetriever.GetCurrent()); accountStatements.Add(siteAccountDebitStatement); createCouponVm.SiteAccountBalance = siteAccount.GetPointerObject<UserAdminData>("adminData").Balance; if (emlatHamaraFlag) { //זיכוי האתר בעמלת המרה של הסוכן emlatHamara = totalCommission*conversionCommission; siteAccountDebitStatement = accountStatementBuilder.SetAccountStatement( siteAccount, emlatHamara, 0, TransactionType.CouponAgentExCommission, DateTime.Now, currencyRetriever.GetCurrent()); accountStatements.Add(siteAccountDebitStatement); createCouponVm.SiteAccountBalance = siteAccount.GetPointerObject<UserAdminData>("adminData").Balance; ; } }
private void SetCoupons(Coupon[] userCoupons, Purchase[] userPurchases, CurrencyDto currencyDto, IMyMentorRepository repository, CheckoutViewModel model) { var coupnIdToContentId = userCoupons.ToDictionary(x => x.ObjectId, x => x.Bundle != null ? x.Bundle.ObjectId : x.Clip.ObjectId); var unUsedCouponids = coupnIdToContentId .Where(x => !userPurchases.Any(p => p.BundleKey != null ? p.BundleKey.ObjectId == x.Value : p.ClipKey.ObjectId == x.Value)) .Select(x => x.Key); var unUsedCoupons = userCoupons.Where(x => unUsedCouponids.Contains(x.ObjectId)).Union(userCoupons.Where(x => x.State == CouponStates.UnUsed.ToString())); var couponNameTemplate = MyMentorResources.checkoutCouponTitleTemplate; foreach (var coupon in unUsedCoupons) { var lessonOrBundle = coupon.Bundle != null ? MyMentorResources.checkoutBundle : MyMentorResources.checkoutLesson; var itemName = coupon.Bundle != null ? coupon.Bundle.GetLocalizedField("bundleName") : coupon.Clip.GetLocalizedField("name"); var originalPrice = CurrencyConverter.ConvertFromNis(coupon.OriginalPriceNIS, currencyDto, repository).ToCurrency(currencyDto); var yourPrice = CurrencyConverter.ConvertFromNis(coupon.SiteCouponFeeNIS + coupon.TeacherCouponFeeNIS, currencyDto, repository).ToCurrency(currencyDto); var expiration = coupon.IssueDate.AddDays(10).ToString("dd/MM/yyyy"); model.CouponsForUser.Add(coupon.ObjectId, string.Format(couponNameTemplate, lessonOrBundle, itemName, originalPrice, yourPrice, expiration)); } }
private ParseUser[] GetTransactionUsers(TeacherData teacherData, CommissionsDto globalCommissionsTable, IMyMentorRepository repository) { var users= repository.FindUsersById(new[] { teacherData.TeacherId, teacherData.AgentId, globalCommissionsTable.MaamAccountId, globalCommissionsTable.MaamBalanceAccountId, globalCommissionsTable.SiteAccountId, }); return users; }
private double GetPrice(Purchase purchase, IMyMentorRepository repository, CurrencyDto userCurrency) { var price = purchase.Price + purchase.SupportPrice; return CurrencyConverter.Convert(price, purchase.UserCurrency.ConvertToCurrencyDto(), userCurrency); }
private void SendEmails(CreateCouponViewModel createCouponVm,IMyMentorRepository repository) { var couponEmail = GetEmailTemplate(createCouponVm,repository); var teacherEmail = createCouponVm.TeacherData.TeacherEmailAddress; var teacherFullName = createCouponVm.TeacherData.TeacherFullName; var currentUserFullName = Session.GetLoggedInUser().GetFullName(Language.CurrentLanguageCode); var fullName = teacherFullName == currentUserFullName ? teacherFullName : currentUserFullName; var subject = string.Format(MyMentorResources.couponEmailSubject, fullName, createCouponVm.CouponId); Mailer.SendMail(createCouponVm.CouponStudentDetails.StudentEmailAddress, couponEmail, subject, teacherEmail); }
private static bool LessonInvalid(ShoppoingCartItemModel cartItemModel, IMyMentorRepository repository, StringsManager stringManager, out Purchase existingPurchase, string currentUserId, ref bool contentItemActive, ref bool canBeOrderedByTeacher, ref bool contentItemOwner, out ParseObject result) { Clip lesson = null; lesson = Task.Run(() => new ParseQuery<Clip>() .Include("status") .Include("currency") .GetAsync(cartItemModel.ContentItemId)).Result; existingPurchase = repository.FindPurchaseByContentIdAndUserId(lesson.ObjectId, currentUserId ); contentItemActive = lesson.IsActive(); canBeOrderedByTeacher = lesson.CanBeOrderedByTeacher(currentUserId); result = lesson; contentItemOwner = lesson.Teacher.ObjectId == currentUserId; if (existingPurchase == null) { return false; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.LessonPurchased || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.LessonIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Lesson) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.LessonAlreadyPurchased); } if (existingPurchase.ClipKind == ClipPurchaseTypes.Demo) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.DemoAlreadyOrdered); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoOrdered || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Demo) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.DemoAlreadyOrdered); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.LessonIsInBaskert) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.LessonAlreadyInBasket); return true; } return false; }
private string GetEmailTemplate(CreateCouponViewModel createCouponVm,IMyMentorRepository repository) { var currenctUserFullName = Session.GetLoggedInUser().GetFullName(Language.CurrentLanguageCode); var teacherFullName = createCouponVm.TeacherData.TeacherFullName; var currencyRetriever = new CurrencyRetriver(HttpContext, Session, repository); var itemType = repository.FindEntities().Single(x => x.EntityCode == EntityKeys.Coupons.ToString()); var mailTemplate = new MailTemplate(Language.CurrentCulture); var emailData = new CouponEmailData(); emailData.TeacherFullName =currenctUserFullName == teacherFullName ? createCouponVm.TeacherData.TeacherFullName:currenctUserFullName; emailData.CouponNumber = createCouponVm.CouponId; emailData.Event = createCouponVm.EventId; emailData.ItemNamePart1 = createCouponVm.ContentItemDetails.NamePart1; emailData.ItemNamePart2 = createCouponVm.ContentItemDetails.NamePart2; emailData.ItemType = itemType.GetLocalizedField("EntityName"); emailData.OriginalPriceWithCurrency = createCouponVm.ContentItemDetails.FormattedOriginalPrice; emailData.StudentPriceWithCurrency = createCouponVm.CouponDiscountPrice.ToCurrency(currencyRetriever.GetCurrent()); emailData.ValidUntil = createCouponVm.CouponValidUntil; emailData.PurchaseDate = DateTime.Now.ToString("dd/MM/yyyy"); if (!string.IsNullOrEmpty(createCouponVm.EventId)) { emailData.Event = string.Format(MyMentorResources.couponLetterEventPlaceholder, createCouponVm.EventId); } var mailForStudent = mailTemplate.GetCouponEmail(emailData); return mailForStudent; }
private static bool BundleInvalid(ShoppoingCartItemModel cartItemModel, IMyMentorRepository repository, StringsManager stringManager, string currentUserId, ref bool contentItemActive, ref bool canBeOrderedByTeacher, ref bool contentItemOwner, out Purchase existingPurchase, out ParseObject result) { Bundle bundle = Task.Run(() => repository.FindMinimalBundleById(cartItemModel.ContentItemId)).Result; existingPurchase = repository.FindPurchaseByContentIdAndUserId(cartItemModel.ContentItemId, currentUserId); contentItemActive = bundle.IsActive(); canBeOrderedByTeacher = bundle.CanBeOrderedByTeacher(currentUserId); result = bundle; contentItemOwner = currentUserId == bundle.Teacher.ObjectId; if (existingPurchase == null) { return false; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.PackagePurchased || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.PackageIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Bundle) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.BundleAlreadyPurchased); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoOrdered || existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.DemoIsActive) { if (existingPurchase.ClipKind == ClipPurchaseTypes.Demo) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.DemoAlreadyOrdered); } return true; } if (existingPurchase.PurchaseStatusCode == PurchaseStatusCodes.PackageIsInBasket) { cartItemModel.ErrorMessage = stringManager.GetLocalizedString(Strings.BundleAlreadyInBasket); return true; } return false; }
//public async Task FixRecords() //{ // var results = // (await new ParseQuery<AccountStatement>().WhereEqualTo("currency", ParseObject.CreateWithoutData<Currency>("PrOfDBWHGg")).FindAsync()).ToArray(); // foreach (var result in results) // { // result["currency"] = ParseObject.CreateWithoutData<Currency>("K67StSNEYs"); // await result.SaveAsync(); // } //} private void HandlePaymentRequiredRecovery(CreateCouponViewModel createCouponVm, EventDto eventsDto, IMyMentorRepository repository, CurrencyRetriver currencyRetriever, CurrencyDto currentCurrency) { if (createCouponVm.PaymentRequired && string.IsNullOrEmpty(createCouponVm.PaymentData)) { var coupon = ParseObject.CreateWithoutData<Coupon>(createCouponVm.CouponId); coupon.CouponStatus = BL.Consts.CouponStatus.Pending; coupon.SaveAsync(); UpdatePaymentNotRecieved(eventsDto, repository); return; } var accountStatementBuilder = new AccountStatementBuilder(repository, currencyRetriever) { CouponId = createCouponVm.CouponId, EventId = createCouponVm.EventId }; var missingAccountStatements = GetMissingAccountStatements(createCouponVm, eventsDto); var accountStatementsByUser = missingAccountStatements.GroupBy(x=>x.UserId); var accountStatementsToUpdate = new List<AccountStatement>(); foreach (var accountStatementByUser in accountStatementsByUser) { var user = Task.Run(() => { var userId = accountStatementByUser.Key; return repository.FindUserWithAdminData(userId); }).Result; foreach (var accountStatement in accountStatementByUser) { var transactionCode = repository.FindTransactionTypesById(accountStatement.TransactionTypeId).TransactionCode; var asCurrency = repository.FindAllCurrencies(accountStatement.CurrencyId); var accountStatementDto = Task.Run(() => accountStatementBuilder.SetAccountStatement(user, accountStatement.Credit, accountStatement.Debit, transactionCode, accountStatement.DueDate, asCurrency.Single(), validationToken: accountStatement.ValidationToken)).Result; accountStatementDto.Order = accountStatement.Order; accountStatementsToUpdate.Add(accountStatementDto.ConvertToAccountStatementDomain()); } } UpdateCouponAccountStatementsAndEvent(createCouponVm, repository, accountStatementsToUpdate, eventsDto); }