Exemple #1
0
            /// <summary>
            /// Gets the channel currency string template.
            /// </summary>
            /// <param name="ecommerceContext">The eCommerce context.</param>
            /// <returns>The template for channel currency string.</returns>
            public static async Task <string> GetChannelCurrencyStringTemplate(EcommerceContext ecommerceContext)
            {
                OperatingUnitConfiguration operatingUnitConfig = null;

                if (cachedOperatingUnitConfig.TryGetValue(ecommerceContext.OperatingUnitId, out operatingUnitConfig))
                {
                    if (!string.IsNullOrEmpty(operatingUnitConfig.CurrencyStringTemplate))
                    {
                        return(operatingUnitConfig.CurrencyStringTemplate);
                    }
                }

                ManagerFactory       factory              = Utilities.GetManagerFactory(ecommerceContext);
                IOrgUnitManager      orgUnitManager       = factory.GetManager <IOrgUnitManager>();
                ChannelConfiguration channelConfiguration = await orgUnitManager.GetOrgUnitConfiguration();

                string currencySymbol = Utilities.GetChannelCurrencySymbol(channelConfiguration.Currency);

                CultureInfo      cultureInfo      = Utilities.GetCultureInfo(ecommerceContext.Locale);
                NumberFormatInfo nfi              = cultureInfo.NumberFormat;
                bool             symbolToTheRight = (nfi.CurrencyPositivePattern % 2 == 0) ? false : true;

                string currencyTemplate = symbolToTheRight ? "{0}" + currencySymbol : currencySymbol + "{0}";

                // Update cache
                Utilities.cachedOperatingUnitConfig[ecommerceContext.OperatingUnitId].CurrencySymbol         = currencySymbol;
                Utilities.cachedOperatingUnitConfig[ecommerceContext.OperatingUnitId].CurrencyStringTemplate = currencyTemplate;

                return(currencyTemplate);
            }
Exemple #2
0
            /// <summary>
            /// Gets the channel configuration.
            /// </summary>
            /// <returns>The channel configuration.</returns>
            public virtual async Task <ChannelConfiguration> GetChannelConfiguration()
            {
                ManagerFactory  managerFactory = Utilities.GetManagerFactory(this.EcommerceContext);
                IOrgUnitManager orgUnitManager = managerFactory.GetManager <IOrgUnitManager>();

                ChannelConfiguration channelConfiguration = await orgUnitManager.GetOrgUnitConfiguration();

                return(channelConfiguration);
            }
Exemple #3
0
            public virtual async Task <PagedResult <OrgUnitLocation> > GetNearbyStores(decimal latitude, decimal longitude, int distance, QueryResultSettings queryResultSettings)
            {
                SearchArea searchArea = new SearchArea();

                searchArea.Latitude  = latitude;
                searchArea.Longitude = longitude;
                searchArea.Radius    = (distance == 0) ? 200 : distance; /* If the client does not specify the radius for search it is defaulted to 200 miles */

                ManagerFactory  managerFactory = Utilities.GetManagerFactory(this.EcommerceContext);
                IOrgUnitManager orgUnitManager = managerFactory.GetManager <IOrgUnitManager>();

                PagedResult <OrgUnitLocation> orgUnitLocations =
                    await orgUnitManager.GetOrgUnitLocationsByArea(searchArea, queryResultSettings);

                return(orgUnitLocations);
            }
            public virtual async Task <PagedResult <Product> > SearchProducts(ProductSearchCriteria productSearchCriteria, IEnumerable <long> catalogIds, QueryResultSettings queryResultSettings)
            {
                if (productSearchCriteria == null)
                {
                    throw new ArgumentNullException(nameof(productSearchCriteria));
                }

                if (catalogIds == null || !catalogIds.Any())
                {
                    throw new ArgumentNullException(nameof(catalogIds));
                }

                if (Utilities.AreNonCataloguedProductsIncludedByDefault() || catalogIds.Contains(0))
                {
                    // Override the list of catalog Ids to zero, because query for zero will automatically included products from all catalogs.
                    catalogIds = new long[] { 0 };
                }

                ManagerFactory  managerFactory = Utilities.GetManagerFactory(this.EcommerceContext);
                IOrgUnitManager orgUnitManager = managerFactory.GetManager <IOrgUnitManager>();
                long            channelId      = await Utilities.GetChannelId(this.EcommerceContext);

                List <Product> productsFromAllCatalogs = new List <Product>();

                IProductManager productManager = managerFactory.GetManager <IProductManager>();

                foreach (long catalogId in catalogIds.Distinct())
                {
                    productSearchCriteria.Context = new ProjectionDomain()
                    {
                        ChannelId = channelId,
                        CatalogId = catalogId
                    };

                    PagedResult <Product> products = await productManager.Search(productSearchCriteria, queryResultSettings);

                    productsFromAllCatalogs.AddRange(products.Results);
                }

                PagedResult <Product> allProducts = new PagedResult <Product>(productsFromAllCatalogs);

                return(allProducts);
            }
            /// <summary>
            /// Creates the specified customer.
            /// </summary>
            /// <param name="customer">The customer.</param>
            /// <returns>The created customer.</returns>
            public virtual async Task <Customer> Create(Customer customer)
            {
                // An empty ecommerce context is explicitly passed in because this needs to be an anonymous call.
                IOrgUnitManager      orgUnitManager       = Utilities.GetManagerFactory(this.EcommerceContext.GetAnonymousContext()).GetManager <IOrgUnitManager>();
                ChannelConfiguration channelConfiguration = await orgUnitManager.GetOrgUnitConfiguration();

                customer.Language          = channelConfiguration.DefaultLanguageId;
                customer.CustomerTypeValue = 1; // To denote this is a CustomerType.Person.

                ManagerFactory   factory         = Utilities.GetManagerFactory(this.EcommerceContext);
                ICustomerManager customerManager = factory.GetManager <ICustomerManager>();

                Customer createdCustomer = null;

                try
                {
                    createdCustomer = await customerManager.Create(customer);
                }
                catch (UserAuthorizationException ex)
                {
                    if (ex.ErrorResourceId == AuthenticationErrors.UserNotActivated)
                    {
                        var message = "There is already an inactive account associated with the current external id. Need to unlink first.";
                        RetailLogger.Log.OnlineStoreCreatingNewCustomerForExternalIdWithInactiveLinkToExistingCustomer(
                            Utilities.GetMaskedEmailAddress(customer.Email),
                            this.EcommerceContext.IdentityProviderType.ToString(),
                            message);

                        IStoreOperationsManager storeOperationsManager = factory.GetManager <IStoreOperationsManager>();
                        await storeOperationsManager.UnlinkFromExistingCustomer();

                        createdCustomer = await customerManager.Create(customer);
                    }
                    else
                    {
                        throw ex;
                    }
                }

                return(createdCustomer);
            }
Exemple #6
0
            /// <summary>
            /// Gets the channel identifier.
            /// </summary>
            /// <param name="ecommerceContext">The ecommerce context.</param>
            /// <returns>The channel identifier.</returns>
            public static async Task <long> GetChannelId(EcommerceContext ecommerceContext)
            {
                OperatingUnitConfiguration operatingUnitConfig = null;

                if (cachedOperatingUnitConfig.TryGetValue(ecommerceContext.OperatingUnitId, out operatingUnitConfig))
                {
                    if (operatingUnitConfig.ChannelId != 0)
                    {
                        return(operatingUnitConfig.ChannelId);
                    }
                }

                ManagerFactory       factory              = Utilities.GetManagerFactory(ecommerceContext);
                IOrgUnitManager      orgUnitManager       = factory.GetManager <IOrgUnitManager>();
                ChannelConfiguration channelConfiguration = await orgUnitManager.GetOrgUnitConfiguration();

                // Update cache
                Utilities.cachedOperatingUnitConfig[ecommerceContext.OperatingUnitId].ChannelId = channelConfiguration.RecordId;

                return(channelConfiguration.RecordId);
            }
Exemple #7
0
            public virtual async Task <PagedResult <OrgUnitAvailability> > GetNearbyStoresWithAvailability(decimal latitude, decimal longitude, double searchRadius, IEnumerable <ItemUnit> itemUnits, QueryResultSettings queryResultSettings)
            {
                if (itemUnits == null)
                {
                    throw new ArgumentNullException(nameof(itemUnits));
                }

                SearchArea searchArea = new SearchArea();

                searchArea.Latitude  = latitude;
                searchArea.Longitude = longitude;
                searchArea.Radius    = (searchRadius > 0) ? searchRadius : 200;

                ManagerFactory  managerFactory = Utilities.GetManagerFactory(this.EcommerceContext);
                IOrgUnitManager orgUnitManager = managerFactory.GetManager <IOrgUnitManager>();

                PagedResult <OrgUnitAvailability> orgUnitAvailabilities =
                    await orgUnitManager.GetAvailableInventoryNearby(itemUnits, searchArea, queryResultSettings);

                return(orgUnitAvailabilities);
            }