Пример #1
0
        public async Task <ProductDetailViewModel> BuildModelAsync(ComponentModelBase componentModel)
        {
            var viewModel = new ProductDetailViewModel
            {
                ByLabel                  = this.globalLocalizer.GetString("By"),
                DescriptionLabel         = this.globalLocalizer.GetString("Description"),
                IsAuthenticated          = componentModel.IsAuthenticated,
                ProductInformationLabel  = this.productLocalizer.GetString("ProductInformation"),
                PricesLabel              = this.globalLocalizer.GetString("Prices"),
                SuccessfullyAddedProduct = this.globalLocalizer.GetString("SuccessfullyAddedProduct"),
                SignInToSeePricesLabel   = this.globalLocalizer.GetString("SignInToSeePrices"),
                SignInUrl                = "#",
                UpdateBasketUrl          = this.linkGenerator.GetPathByAction("Index", "BasketsApi", new { Area = "Orders", culture = CultureInfo.CurrentUICulture.Name }),
                BasketLabel              = this.globalLocalizer.GetString("BasketLabel"),
                SkuLabel                 = this.productLocalizer.GetString("Sku"),
                InStockLabel             = this.globalLocalizer.GetString("InStock"),
                BasketId                 = componentModel.BasketId,
                AddedProduct             = this.orderResources.GetString("AddedProduct"),
                Sidebar                  = await this.sidebarModelBuilder.BuildModelAsync(componentModel)
            };

            var product = await this.productsRepository.GetProductAsync(componentModel.Id, componentModel.Language, null);

            if (product != null)
            {
                viewModel.ProductId        = product.Id;
                viewModel.Title            = product.Name;
                viewModel.BrandName        = product.BrandName;
                viewModel.BrandUrl         = this.linkGenerator.GetPathByAction("Index", "Brand", new { Area = "Products", culture = CultureInfo.CurrentUICulture.Name, Id = product.SellerId });
                viewModel.Description      = product.Description;
                viewModel.Sku              = product.Sku;
                viewModel.IsProductVariant = product.PrimaryProductId.HasValue;
                viewModel.Features         = product.ProductAttributes?.Select(x => new ProductFeatureViewModel {
                    Key = x.Name, Value = string.Join(", ", x.Values.OrEmptyIfNull())
                });

                var images = new List <ImageViewModel>();

                foreach (var image in product.Images.OrEmptyIfNull())
                {
                    var imageViewModel = new ImageViewModel
                    {
                        Id        = image,
                        Original  = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, image, ProductConstants.OriginalMaxWidth, ProductConstants.OriginalMaxHeight, true)),
                        Thumbnail = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, image, ProductConstants.ThumbnailMaxWidth, ProductConstants.ThumbnailMaxHeight, true))
                    };

                    images.Add(imageViewModel);
                }

                viewModel.Images = images;

                viewModel.Files = await this.filesModelBuilder.BuildModelAsync(new FilesComponentModel { Id = componentModel.Id, IsAuthenticated = componentModel.IsAuthenticated, Language = componentModel.Language, Token = componentModel.Token, Files = product.Files });

                var inventory = await this.productsRepository.GetProductStockAsync(componentModel.Id);

                if (inventory != null && inventory.AvailableQuantity.HasValue && inventory.AvailableQuantity.Value > 0)
                {
                    viewModel.InStock                = true;
                    viewModel.AvailableQuantity      = inventory.AvailableQuantity;
                    viewModel.ExpectedDelivery       = inventory.ExpectedDelivery;
                    viewModel.ExpectedDeliveryLabel  = this.inventoryResources.GetString("ExpectedDeliveryLabel");
                    viewModel.RestockableInDays      = inventory.RestockableInDays;
                    viewModel.RestockableInDaysLabel = this.inventoryResources.GetString("RestockableInDaysLabel");
                }

                if (componentModel.IsAuthenticated && componentModel.BasketId.HasValue)
                {
                    var basketItems = await this.basketService.GetBasketAsync(componentModel.BasketId, componentModel.Token, componentModel.Language);

                    if (basketItems is not null)
                    {
                        viewModel.OrderItems = basketItems;
                    }
                }

                if (product.ProductVariants is not null)
                {
                    var productVariants = await this.productsRepository.GetProductsAsync(product.ProductVariants, null, null, componentModel.Language, null, PaginationConstants.DefaultPageIndex, PaginationConstants.DefaultPageSize, componentModel.Token, nameof(Product.CreatedDate));

                    if (productVariants != null)
                    {
                        var carouselItems = new List <CarouselGridCarouselItemViewModel>();

                        foreach (var productVariant in productVariants.Data.OrEmptyIfNull())
                        {
                            var carouselItem = new CarouselGridCarouselItemViewModel
                            {
                                Id       = productVariant.Id,
                                Title    = productVariant.Name,
                                Subtitle = productVariant.Sku,
                                ImageAlt = productVariant.Name,
                                Url      = this.linkGenerator.GetPathByAction("Index", "Product", new { Area = "Products", culture = CultureInfo.CurrentUICulture.Name, productVariant.Id })
                            };

                            if (productVariant.Images != null && productVariant.Images.Any())
                            {
                                carouselItem.ImageUrl = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, productVariant.Images.FirstOrDefault(), CarouselGridConstants.CarouselItemImageMaxWidth, CarouselGridConstants.CarouselItemImageMaxHeight, true));
                            }

                            carouselItems.Add(carouselItem);
                        }

                        viewModel.ProductVariants = new List <CarouselGridItemViewModel>
                        {
                            new CarouselGridItemViewModel
                            {
                                Id            = product.Id,
                                Title         = this.productLocalizer.GetString("ProductVariants"),
                                CarouselItems = carouselItems
                            }
                        };
                    }
                }
            }

            return(viewModel);
        }
Пример #2
0
        public async Task <IActionResult> GetProductVariants(Guid?id)
        {
            var language = CultureInfo.CurrentUICulture.Name;
            var product  = await this.productsRepository.GetProductAsync(id, language, null);

            if (product?.ProductVariants is not null)
            {
                var token = await HttpContext.GetTokenAsync(ApiExtensionsConstants.TokenName);

                var productVariants = await this.productsRepository.GetProductsAsync(
                    product.ProductVariants, null, null, language, null, PaginationConstants.DefaultPageIndex, PaginationConstants.DefaultPageSize, token, $"{nameof(Product.Name)} ASC");

                var availableProducts = await this.inventoryRepository.GetAvailbleProductsInventory(
                    language, PaginationConstants.DefaultPageIndex, AvailableProductsConstants.Pagination.ItemsPerPage, null);

                var carouselItems = new List <CarouselGridCarouselItemViewModel>();
                foreach (var productVariant in productVariants.Data.OrEmptyIfNull())
                {
                    var carouselItem = new CarouselGridCarouselItemViewModel
                    {
                        Id         = productVariant.Id,
                        Title      = productVariant.Name,
                        Subtitle   = productVariant.Sku,
                        ImageAlt   = productVariant.Name,
                        Url        = this.linkGenerator.GetPathByAction("Index", "Product", new { Area = "Products", culture = CultureInfo.CurrentUICulture.Name, productVariant.Id }),
                        Attributes = productVariant.ProductAttributes.Select(x => new CarouselGridProductAttributesViewModel
                        {
                            Key   = x.Key,
                            Value = string.Join(", ", x.Values.OrEmptyIfNull())
                        })
                    };

                    if (productVariant.Images != null && productVariant.Images.Any())
                    {
                        var variantImage = productVariant.Images.FirstOrDefault();
                        carouselItem.Sources = new List <SourceViewModel>
                        {
                            new SourceViewModel {
                                Media = MediaConstants.FullHdMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 1024, 1024, true, MediaConstants.WebpExtension))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.DesktopMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 352, 352, true, MediaConstants.WebpExtension))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.TabletMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 608, 608, true, MediaConstants.WebpExtension))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.MobileMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 768, 768, true, MediaConstants.WebpExtension))
                            },

                            new SourceViewModel {
                                Media = MediaConstants.FullHdMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 1024, 1024, true))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.DesktopMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 352, 352, true))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.TabletMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 608, 608, true))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.MobileMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, 768, 768, true))
                            }
                        };

                        var variantImages = new List <ImageVariantViewModel>();
                        foreach (var image in productVariant.Images)
                        {
                            var imageVariantViewModel = new ImageVariantViewModel
                            {
                                Id = image
                            };
                            variantImages.Add(imageVariantViewModel);
                        }
                        carouselItem.Images   = variantImages;
                        carouselItem.ImageUrl = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(this.options.Value.MediaUrl, variantImage, CarouselGridConstants.CarouselItemImageMaxWidth, CarouselGridConstants.CarouselItemImageMaxHeight, true));
                    }

                    var availableProduct = availableProducts.Data.FirstOrDefault(x => x.ProductSku == productVariant.Sku);
                    if (availableProduct is not null)
                    {
                        carouselItem.AvailableQuantity = availableProduct.AvailableQuantity;
                        carouselItem.ExpectedDelivery  = availableProduct.ExpectedDelivery;
                    }
                    carouselItems.Add(carouselItem);
                }

                var response = new List <CarouselGridItemViewModel>
                {
                    new CarouselGridItemViewModel
                    {
                        Id            = product.Id,
                        Title         = this.productLocalizer.GetString("ProductVariants"),
                        CarouselItems = carouselItems
                    }
                };

                return(this.StatusCode((int)HttpStatusCode.OK, response));
            }

            return(this.StatusCode((int)HttpStatusCode.OK));
        }
Пример #3
0
        public async Task <HomePageCarouselGridViewModel> BuildModelAsync(ComponentModelBase componentModel)
        {
            var items = new List <CarouselGridItemViewModel>();

            var newProducts = await this.catalogService.GetCatalogProductsAsync(
                componentModel.Token,
                componentModel.Language,
                null,
                false,
                true,
                null,
                Foundation.GenericRepository.Definitions.Constants.DefaultPageIndex,
                Foundation.GenericRepository.Definitions.Constants.DefaultItemsPerPage);

            if (newProducts != null && newProducts.Total > 0)
            {
                var contentGridCarouselItems = new List <CarouselGridCarouselItemViewModel>();

                foreach (var newProduct in newProducts.Data)
                {
                    var carouselItem = new CarouselGridCarouselItemViewModel
                    {
                        Id       = newProduct.Id,
                        Title    = newProduct.Title,
                        Subtitle = newProduct.Sku,
                        ImageAlt = newProduct.ImageAlt,
                        ImageUrl = this.cdnService.GetCdnUrl(newProduct.ImageUrl),
                        Url      = this.linkGenerator.GetPathByAction("Index", "Product", new { Area = "Products", culture = CultureInfo.CurrentUICulture.Name, newProduct.Id }),
                        Sources  = new List <SourceViewModel>
                        {
                            new SourceViewModel {
                                Media = MediaConstants.FullHdMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 1024, 1024, true, MediaConstants.WebpExtension))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.DesktopMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 352, 352, true, MediaConstants.WebpExtension))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.TabletMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 608, 608, true, MediaConstants.WebpExtension))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.MobileMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 768, 768, true, MediaConstants.WebpExtension))
                            },

                            new SourceViewModel {
                                Media = MediaConstants.FullHdMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 1024, 1024, true))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.DesktopMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 352, 352, true))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.TabletMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 608, 608, true))
                            },
                            new SourceViewModel {
                                Media = MediaConstants.MobileMediaQuery, Srcset = this.cdnService.GetCdnUrl(this.mediaService.GetFileUrl(newProduct.ImageUrl, 768, 768, true))
                            }
                        }
                    };

                    contentGridCarouselItems.Add(carouselItem);
                }

                items.Add(new CarouselGridItemViewModel {
                    Id = CarouselGridConstants.Novelties.NoveltiesId, Title = this.globalLocalizer.GetString("Novelties"), CarouselItems = contentGridCarouselItems
                });
            }

            var viewModel = new HomePageCarouselGridViewModel
            {
                Items = items
            };

            return(viewModel);
        }