Esempio n. 1
0
        public static ProductIdentityQueryDTO From(Product product)
        {
            var specs = product.OwnProductSpecs.Select(x => ProductSpecificationDTO.From(x)).ToList();

            return(new ProductIdentityQueryDTO
            {
                Id = product.Id,
                Name = product.Name,
                Icon = product.Icon,
                CategoryId = product.CategoryId,
                Description = product.Description,
                Creator = product.Creator,
                Modifier = product.Modifier,
                CreatedTime = product.CreatedTime,
                ModifiedTime = product.ModifiedTime,
                OrganizationId = product.OrganizationId,
                Brand = product.Brand,
                Unit = product.Unit,
                Specifications = specs,
                MinPrice = product.MinPrice,
                MaxPrice = product.MaxPrice,
                MinPartnerPrice = product.MinPartnerPrice,
                MaxPartnerPrice = product.MaxPartnerPrice,
                MinPurchasePrice = product.MinPurchasePrice,
                MaxPurchasePrice = product.MaxPurchasePrice
            });
        }
        public IEnumerable <string> Resolve(Usr_Pratri source, ProductSpecificationDTO destination, IEnumerable <string> member, ResolutionContext context)
        {
            if (source.Usr_Pratri_Valor.IndexOf(";") == -1)
            {
                return(new List <string> {
                    source.Usr_Pratri_Valor
                });
            }

            return(source.Usr_Pratri_Valor.Split(';').Select(p => p.Trim()).ToList());
        }
Esempio n. 3
0
        public async Task <VTEXNewIDResponse> PostSKUSpecificationWithNewIDAsync(TResource data, int Id, CancellationToken cancellationToken)
        {
            var contentString = JsonSerializer.Serialize(data);

            var request = new HttpRequestMessage(HttpMethod.Post, $"{_path}/{Id}/specification")
            {
                Content = new StringContent(contentString, Encoding.UTF8, "application/json")
            };

            request.Headers.Add("X-VTEX-API-AppKey", _appKey);
            request.Headers.Add("X-VTEX-API-AppToken", _appToken);
            request.Headers.Add("Accept", "application/json");

            var response = await _httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);

            if (!response.IsSuccessStatusCode)
            {
                try
                {
                    var content = await JsonSerializer.DeserializeAsync <VTEXErrorResponse>(await response.Content.ReadAsStreamAsync());

                    _logger.Error($"No se pudo dar de alta el recurso {contentString} en la ruta `{_path}`, el statuscode fue `{response.StatusCode}` y el mensaje de VTEX:`{content.Message}`");
                }
                catch
                {
                    _logger.Error($"No se pudo dar de alta el recurso {contentString} en la ruta `{_path}`, el statuscode fue `{response.StatusCode}`");
                }
            }
            else
            {
                ProductSpecificationDTO responseContent = await JsonSerializer.DeserializeAsync <ProductSpecificationDTO>(await response.Content.ReadAsStreamAsync());

                _logger.Information($"Recurso {contentString} dado de alta en la ruta {_path} exitosamente y se le dió el id {responseContent.Id}");
                return(new VTEXNewIDResponse()
                {
                    Success = response.IsSuccessStatusCode,
                    NewId = responseContent.Id
                });
            }

            return(new VTEXNewIDResponse()
            {
                Success = response.IsSuccessStatusCode,
                NewId = 0
            });
        }
Esempio n. 4
0
        public void Save(ProductDTO productDTO, ProductSpecificationDTO productSpecificationDTO)
        {
            if (string.IsNullOrWhiteSpace(productDTO.Id))
            {
                productDTO.Id = NewId.Next().ToString();
                var productImages = new List <Image>();

                if (productDTO.Images != null && productDTO.Images.Count > 0)
                {
                    foreach (var image in productDTO.Images)
                    {
                        productImages.Add(new Image
                        {
                            ProductId = productDTO.Id,
                            Path      = image
                        });
                    }
                }

                var metaTitle = productDTO.Name.GenerateSlug();
                if (_context.Products.Any(p => p.MetaTitle == metaTitle))
                {
                    metaTitle += "-" + NewId.Next().ToString().Split('-').Last();
                }

                productDTO.MetaTitle = metaTitle;
                productDTO.DateAdded = DateTime.Now;

                var product = _mapper.Map <ProductDTO, Product>(productDTO);

                productSpecificationDTO.ProductId = productDTO.Id;
                var productSepcification = _mapper.Map <ProductSpecificationDTO, ProductSpecification>(productSpecificationDTO);

                _context.Products.Add(product);
                _context.Images.AddRange(productImages);
                _context.ProductSpecifications.Add(productSepcification);
            }
            else
            {
                var product = _context.Products.First(p => p.Id == productDTO.Id);

                var dbEntryImages = GetImages(productDTO.Id);
                var newImages     = productDTO.Images.ToList();

                // Update metatitle
                if (product.Name != productDTO.Name)
                {
                    var metaTitle = productDTO.Name.GenerateSlug();
                    if (_context.Products.Any(p => (p.MetaTitle != product.MetaTitle) && (p.MetaTitle == metaTitle)))
                    {
                        metaTitle += "-" + NewId.Next().ToString().Split('-').Last();
                    }

                    productDTO.MetaTitle = metaTitle;
                }

                // Remove image
                foreach (var path in dbEntryImages)
                {
                    if (!newImages.Any(i => i == path))
                    {
                        var image = _context.Images.First(i => i.ProductId == productDTO.Id && i.Path == path);
                        _context.Images.Remove(image);
                        continue;
                    }
                }

                // Add image
                foreach (var newImg in newImages)
                {
                    if (!dbEntryImages.Any(path => path == newImg))
                    {
                        var image = new Image {
                            ProductId = product.Id, Path = newImg
                        };
                        _context.Images.Add(image);
                    }
                }

                // Update specification
                var productSpecification = _context.ProductSpecifications.First(ps => ps.ProductId == product.Id);

                productSpecification = _mapper.Map(productSpecificationDTO, productSpecification);
                product = _mapper.Map(productDTO, product);
                product.DateModified = DateTime.Now;
            }
            _context.SaveChanges();
        }