예제 #1
0
        public virtual quoteDto.QuoteRequestSearchCriteria ToQuoteSearchCriteriaDto(QuoteSearchCriteria criteria)
        {
            var result = new quoteDto.QuoteRequestSearchCriteria
            {
                CustomerId = criteria.CustomerId,
                Skip       = criteria.Start,
                Take       = criteria.PageSize,
                Sort       = criteria.Sort
            };

            return(result);
        }
        public async Task <IQuoteRequestBuilder> GetOrCreateNewTransientQuoteRequestAsync(Store store, CustomerInfo customer, Language language, Currency currency)
        {
            var cacheKey = GetQuoteRequestCacheKey(store.Id, customer.Id);

            _quoteRequest = await _cacheManager.GetAsync(cacheKey, _quoteRequestCacheRegion, async() =>
            {
                var activeQuoteSearchCriteria = new quoteModel.QuoteRequestSearchCriteria
                {
                    Tag        = "actual",
                    CustomerId = customer.Id,
                    StoreId    = store.Id
                };

                var searchResult = await _quoteApi.QuoteModule.SearchAsync(activeQuoteSearchCriteria);

                var quoteRequest = searchResult.QuoteRequests.Select(x => x.ToQuoteRequest(store.Currencies, language)).FirstOrDefault();
                if (quoteRequest == null)
                {
                    quoteRequest = new QuoteRequest(currency, language)
                    {
                        Currency   = currency,
                        CustomerId = customer.Id,
                        Language   = language,
                        Status     = "New",
                        StoreId    = store.Id,
                        Tag        = "actual"
                    };

                    quoteRequest.CustomerName = customer.IsRegisteredUser
                    ? string.Join(" ", customer.FirstName, customer.LastName)
                    : StorefrontConstants.AnonymousUsername;
                }
                else
                {
                    quoteRequest = (await _quoteApi.QuoteModule.GetByIdAsync(quoteRequest.Id)).ToQuoteRequest(store.Currencies, language);
                }

                quoteRequest.Customer = customer;

                return(quoteRequest);
            });

            return(this);
        }
        public async Task <IQuoteRequestBuilder> GetOrCreateNewTransientQuoteRequestAsync(Store store, User user, Language language, Currency currency)
        {
            var cacheKey = CacheKey.With(GetType(), store.Id, user.Id);

            _quoteRequest = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var activeQuoteSearchCriteria = new quoteModel.QuoteRequestSearchCriteria
                {
                    Tag        = "actual",
                    CustomerId = user.Id,
                    StoreId    = store.Id
                };

                var searchResult = await _quoteApi.SearchAsync(activeQuoteSearchCriteria);

                var quoteRequest = searchResult.QuoteRequests.Select(x => x.ToQuoteRequest(currency, language)).FirstOrDefault();
                if (quoteRequest == null)
                {
                    quoteRequest = new QuoteRequest(currency, language)
                    {
                        Currency   = currency,
                        CustomerId = user.Id,
                        Language   = language,
                        Status     = "New",
                        StoreId    = store.Id,
                        Tag        = "actual"
                    };

                    quoteRequest.CustomerName = user.UserName;
                }
                else
                {
                    quoteRequest = (await _quoteApi.GetByIdAsync(quoteRequest.Id)).ToQuoteRequest(currency, language);
                }
                //Add expiration token for concrete quote instance
                cacheEntry.AddExpirationToken(QuoteCacheRegion.CreateChangeToken(quoteRequest));
                quoteRequest.Customer = user;

                return(quoteRequest);
            });

            return(this);
        }
예제 #4
0
        protected virtual IMutablePagedList <QuoteRequest> GetCustomerQuotes(CustomerInfo customer)
        {
            var workContext = _workContextFactory();
            Func <int, int, IEnumerable <SortInfo>, IPagedList <QuoteRequest> > quotesGetter = (pageNumber, pageSize, sortInfos) =>
            {
                var quoteSearchCriteria = new quoteDto.QuoteRequestSearchCriteria
                {
                    Take       = pageSize,
                    CustomerId = customer.Id,
                    Skip       = (pageNumber - 1) * pageSize,
                    StoreId    = workContext.CurrentStore.Id
                };
                var cacheKey = "GetCustomerQuotes-" + quoteSearchCriteria.GetHashCode();
                var quoteRequestsResponse = _cacheManager.Get(cacheKey, string.Format(_customerQuotesCacheRegionFormat, customer.Id), () => _quoteApi.QuoteModule.Search(quoteSearchCriteria));
                return(new StaticPagedList <QuoteRequest>(quoteRequestsResponse.QuoteRequests.Select(x => x.ToQuoteRequest(workContext.AllCurrencies, workContext.CurrentLanguage)),
                                                          pageNumber, pageSize, quoteRequestsResponse.TotalCount.Value));
            };

            return(new MutablePagedList <QuoteRequest>(quotesGetter, 1, QuoteSearchCriteria.DefaultPageSize));
        }