public virtual async Task <IEnumerable <string> > GetCustomerOrderCoupons() { var criteria = new PromotionUsageSearchCriteria { ObjectId = Order.Id, ObjectType = nameof(CustomerOrder) }; var result = await _promotionUsageSearchService.SearchUsagesAsync(criteria); return(result.Results.Select(x => x.CouponCode)); }
private async Task RecordUsages(string objectId, IEnumerable <PromotionUsage> oldUsages, IEnumerable <PromotionUsage> newUsages) { var toAddUsages = newUsages.Except(oldUsages, EqualityComparer); var toRemoveUsages = oldUsages.Except(newUsages, EqualityComparer); if (!toAddUsages.IsNullOrEmpty()) { await _usageService.SaveUsagesAsync(toAddUsages.ToArray()); } if (!toRemoveUsages.IsNullOrEmpty()) { var alreadyExistUsages = (await _promotionUsageSearchService.SearchUsagesAsync(new PromotionUsageSearchCriteria { ObjectId = objectId })).Results; await _usageService.DeleteUsagesAsync(alreadyExistUsages.Intersect(toRemoveUsages, EqualityComparer).Select(x => x.Id).ToArray()); } }
public virtual async Task DoExportAsync(Stream outStream, ExportImportOptions options, Action <ExportImportProgressInfo> progressCallback, ICancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var progressInfo = new ExportImportProgressInfo { Description = "loading data..." }; progressCallback(progressInfo); using (var sw = new StreamWriter(outStream)) using (var writer = new JsonTextWriter(sw)) { await writer.WriteStartObjectAsync(); progressInfo.Description = "Promotions exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Promotions"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <Promotion>) await LoadPromotionsPageAsync(skip, take, options, progressCallback) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } promotions have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content folders exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentFolders"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => { var searchResult = AbstractTypeFactory <DynamicContentFolderSearchResult> .TryCreateInstance(); var result = await LoadFoldersRecursiveAsync(null); searchResult.Results = result; searchResult.TotalCount = result.Count; return((GenericSearchResult <DynamicContentFolder>)searchResult); }, (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content folders have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content items exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentItems"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <DynamicContentItem>) await _contentItemsSearchService.SearchContentItemsAsync(new DynamicContentItemSearchCriteria { Skip = skip, Take = take }) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content items have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content places exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentPlaces"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <DynamicContentPlace>) await _contentPlacesSearchService.SearchContentPlacesAsync(new DynamicContentPlaceSearchCriteria { Skip = skip, Take = take }) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content places have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Dynamic content publications exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("DynamicContentPublications"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => { var searchResult = await _contentPublicationsSearchService.SearchContentPublicationsAsync(new DynamicContentPublicationSearchCriteria { Skip = skip, Take = take }); return((GenericSearchResult <DynamicContentPublication>)searchResult); }, (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } dynamic content publications have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Coupons exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Coupons"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <Coupon>) await _couponSearchService.SearchCouponsAsync(new CouponSearchCriteria { Skip = skip, Take = take }), (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } coupons have been exported"; progressCallback(progressInfo); }, cancellationToken); progressInfo.Description = "Usages exporting..."; progressCallback(progressInfo); await writer.WritePropertyNameAsync("Usages"); await writer.SerializeJsonArrayWithPagingAsync(_jsonSerializer, _batchSize, async (skip, take) => (GenericSearchResult <PromotionUsage>) await _promotionUsageSearchService.SearchUsagesAsync(new PromotionUsageSearchCriteria { Skip = skip, Take = take }) , (processedCount, totalCount) => { progressInfo.Description = $"{ processedCount } of { totalCount } usages have been exported"; progressCallback(progressInfo); }, cancellationToken); await writer.WriteEndObjectAsync(); await writer.FlushAsync(); } }