public async Task <IActionResult> CreateProductVariation(int productId, string varTitle, bool hasDifPrice) { ProductVariation productVariation = new ProductVariation(); try { productVariation.ProductId = productId; productVariation.Title = varTitle; productVariation.HasDifferentPrice = hasDifPrice; await _db.ProductVariations.AddAsync(productVariation); await _db.SaveChangesAsync(); var product = await _db.Products.FindAsync(productId); product.VarNumber = await _db.ProductVariations.AsNoTracking() .Where(c => c.ProductId.Equals(productId)) .CountAsync(); _db.Products.Update(product); await _db.SaveChangesAsync(); return(ViewComponent(componentName: "ProductVariationList", arguments: new { productId = productId })); } catch (Exception) { return(Json("False")); } }
public void Can_create_market_product() { var code = Guid.NewGuid().ToString(); var product = new Product() { Id = code, Code = code, Name = "Sample Test Product", CatalogId = "Samsung" }; product.Properties = new Dictionary<string, string[]> { { "PublishStatus", new []{"Draft"} }, { "Price", new[]{121.01d.ToString()} }, { "brand", new[]{"Apple"} } }; // add variations to a product var variationCode = Guid.NewGuid().ToString(); var variation = new ProductVariation() { Id = variationCode, Code = variationCode, Name = "Sample Test Product - Variation", CatalogId = "Samsung" }; product.Variations = new[] { variation }; // add images var image = new ItemImage() { Id = "213132", Name = "main.jpeg", Attachement = Encoding.UTF8.GetBytes( "R0lGODlhbgCMAPf/APbr48VySrxTO7IgKt2qmKQdJeK8lsFjROG5p/nz7Zg3\nMNmnd7Q1MLNVS9GId71hSJMZIuzTu4UtKbeEeakhKMl8U8WYjfr18YQaIbAf\nKKwhKdKzqpQtLebFortOOejKrOjZ1Mt7aMNpVbAqLLV7bsNqR+3WwMqEWenN\nsZYxL/Ddy/Pm2e7ZxLlUQrIjNPXp3bU5MbhENbEtLtqhj5ZQTfHh0bMxL7Ip\nNsNyUYkZIrZJPcqGdYIUHb5aPKkeJnoUHd2yiJkiLKYiKLRFOsyJXKVDO8up\nosFaS+TBnK4kKti5sNaYg/z49aqYl5kqLrljUtORfMOlo/36+H4ZH8yDYq0f\nKKFYTaU9MrY8MrZBNXwXHpgaIdGVYu/byLZNP9SaZLIyOuXCtHkpJst+Wpcm\nLMyCa8BfP9GMb9KQdPDd1PPk1sd5VP79/L5dQZ0bI9+ymqssK9WcfIoXHdzG\nxdWWfteib79lSr1YP86MYurQxKdcUKdMQr5ZSfPs6YEZH8uhl4oWIenMuurQ\nttmejaqoqsqBVaAcJLlJN5kvMLlZRMNsSL5fRak0LbdQQMVvSPjw6cJnRpkf\nKtmjhvfu5cJtT7IuOMVvWLY/M/37+o0YH9ibhtSYdObErc6HarM9NnYSGNGR\navLi09unje3WyeO8rsVrT7tdRtK3uffu6NWeaL9pTJIjJrM4NPbx8cdyX7M7\nPYYVHu7j4KgoNJAYIKtkV5o9MsOcldicis+RYNutfrhFOZ0hJbqinZ8bI8h5\nUObFuOfItJsfJrJfUOfIqc+PXqQtK8RnSbA4Mcd3Tm0SGbpXQ8aqp7RLNs+s\novHfzpVhV9iggMd1TLtbRKUdKXEQFsd4XrZRPLIgMZUeJ+jKvrAlK6AhJ65A\nMpMpKuC3j5obIsRwS7hAN8l/YtvDvnYXHbAoLI47SIUsOMenorF4gO/m4+fH\npo4vLZ8oKMukqp0cJbhVSMV2UuPR0bAfMLIrLrg/OcJwT8h+Vt+wn8eurLlh\nQrIfKHQOHHQOHf///////yH5BAEAAP8ALAAAAABuAIwAAAj/AP8JHDhQXjpz\n/PopXNiPn0OHDRMmbKhQIsOJFS1SxAhxI8SHFzVeDBnx48iNBAeeOkcxokeX\nFRdOnAlSokaaLXNujJkxo8iYHRkKtWkzZSsaOXkAWsoUECynsHgoqEW1qtVa\n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\nGg4lOnRGDKRZsoS7pMPSA6YXNWLsKJLkSZOVwKhMGSTTrJf9ZNKcomXKTrQY\nevr02cSIvKJxi6aJkaVuXaZMs1ziO5UqPawnuXK9AWEW2Jhja9pMuzMd27YW\nLNga10fuZYUPkdZdqpTv575YbJQbkCHw1sEpb9wQMstwWLFkbfppjJPc/wTI\nhHhJ5r0BBGbMRzfb7ez5MwwbpTMsx5pa9eob2CBM5yETpmzGtTE8hrybN29b\nc1oBn6trc9K7nhmUy6BcOUrn0KHLcr0FQvWYMxdnb3w7t/fvwFMiFvKG0uw8\n4kRLYjkGG0RtMPlWc+GGdyCwbwtYrOsHu7K0a+K/AEO04K0CF8InBvPOg2GE\nKpZTrsHSUotwwgnnmW4LHGGBKbb9bMqhsSly082CW0QMkDLLSvQHFQFiOESX\nLGzQpkUY22swA8Lko9EFLqfBEcdvMhRrwx610OLHtJ5Rc01ahHnCzTeFkXNO\nOfWQkwQ6NNFzTz2X0GQJQAMVdJEYsBhBAyrbK/9tgBcbrCTCG7bkkstvvvwm\nzPzI7JEcNLXDCYICQhXVkAIMMdWQd0x1Y9VdiuHGA1hjhfWQQzyg9dZDYmBg\nyioSVfRKFwfYZ8ZIJ3XhGhe83OLSSwEZU78ea+pUO2wK8MFaUUMl9dReDOll\n1VXbuYIZWWOl1dZDLpGhV3YZXLTR9vZhUMJijUX2mmveYRZcQDLlsCZOp21s\nCx+uLTjbbE/11ttv3diFkSHKRReGcthtN1hgrdxH2Awk5fJefK+ZZ9lvVvXW\n2cT+ZSwHgdHCpmCYDb4WYVNL7baXbsN9FdYYbKDA4otddBdYeffZx9iPjw35\nmmlKNtnUfmXSNNqAW9b/6eWYY8YWYW0V7tYQhxWAwwege61y6OXkbdDoSUFe\nWuR3wP3akKhjUtlHlqklG+YqsjaY620VNgQDMcQQouwrX3zR6KKFZfttyKtw\n+utQnRUL2mjLYjnvtLDpu9e9/ZYZ8FK3maLwwn8OmlF3lWNc7df3gfzteaZZ\n+NTKx5y6RxJ69/333mvBwHOLQ/fhiR2SV34HS47hmnAafJ9gh3AaDMcB7LE/\nIoPY441dhOzDz94VN3DPNmoeM5drAyfK7lWH34baYetVCidBIT6C5UMhB4r2\nn3FheSANRVGCwhBmObtlbgqXyYYNyuYFAMQFCtPwQf3spxAraGBRR+Af91wX\n/zsPoCIuCCAV13yAMsWo7zIOaJHFSHEZHZABdWK4X0JoIAENLIeDCXFA2rgX\nuwG8MC6kKGGoZuaDTEhtd/vBTBoyYLYqeAEzFpihGCagEBqIQQJVGMAOEdLD\n2L0uHJdBAMIOhsTELHExwLnS/i6zAQlIQItWxKIccejGL/4wjPvw4kHSQApA\nBhKQUDCiEWE2C93dTSEW2EMjaWABhbgnA3g8SAj4cElK+kMJWoyjBK6YECtw\nUgKZ7N8ejdZHfzjgGgNY5SpnZsisJXFHikwICTLBskzUECFtxJ/FFKKETmrx\nkwixQiclYAX+mfKUCpnBEZzpzHpkS2Yxm0ViMNcjhf+QABs5uKUuD9KoTOaP\nQb80picxaExk8lCZfIxLNuBhrWnurZpjoiVCbAkBbnrTH2pbTjgZVAVyGnOY\nBylmJ9P5xXWOUS6WEB3ZqgmTazLxMk40WntQub3lbIOc7OjkQP1RUI4e9CCl\nfJ3jjCbEogDAE6KrAiKlVs+4gJF7GUDlDLLnUWCyg6Ps8GgxdyrSVK5zH/WI\noARjZjFEQhSmRCEFg9SGSqIoQadT7alOJcAOoJJUmeFA6VBIETqk+ssPKizK\nDorxwx9CdShSvapOqzpVoO7ApMocgAdcIb74HeSroEOqEn8w1mgVRR0KyEEw\nKqoctTZEquzggFsVooepskP/DwqZAAfmakpGvc4HXSXF54CWVLthALASRYhB\nFpmDd4QxsQxRQmNd61HITnWyCVHC9MTnCsY9U7dH4AM8spGQvVrsiRB4Fg/8\ncFxsJmQDHvUHLQyhWsy01rXs2MFj2ZGC6862KKRgHGY6K9zlEPdyP8AJcteo\n3ClsQCHq0AF0QdkN+HbjlxygL31hO13tMrW7lwkB0BiUoR3x4EfmrYlCNjAF\nCRAoIWmwQexQqQcyxHe+9eXAfVOQAg7k16v7jQsAHGi2Bv0gUzyQQ05Ga+Cy\n0MBEDsZgN8gQ4QnXt7oJ0QOGOZACDTeEu0aTCwC80EKhDcAHMDGHWATMsuMC\nFsVl/9GnP0Jg0kw24MUv/qUTOGDlCj8WETfGsVx2vI+UzsATIFZUaTIRk3QY\n+ZYlFq0Ce5QJHBXgdU+MRCSwEYlVBCHPQZhyn7vhhD9fWdAc2DKhKXxhRCc6\n0Yi4LOPcl6hGVUFqc4gJLGaxufKO1s2VkrOj63znOkciCKMedZ+n7ARUp1rQ\niLAyIlyNYURcONaInrWs9ci4JyJOaFYawDzP8Q+ZwAICLckbgd08i290eh9V\nCIadQw3qO5Oa1H1GNRlSjeorO2HLruZ2rLudAm+Dm9Gxcx/GXmSIMbnjH5W2\nzy2RbOzM+cENBRAWs0N9b3zXWdp8pra1r61tbXdb4N/2Nv8i5gzeIJd5Gjui\nwT+AzQ9YVGrYnNO0Agm27GBkvNnNzje+921qf/+b1QEfuMDFPe5lk/lspUG3\nWKbQCofLBBBuwNEs3C3aikcrB2TTeM81HgmOd3zf/PZ3yFPNaqSXfODF0EDK\nE9e6liZmCvJwOLD7AQhU2efSbG6zm7VgiG1ofBc+//nGgZ7vbYw67aVux4v/\nfXSSK53by/HVrzIwDZTBBANUrzpMeAAIWASeB4P/AQ9+cHjEJx7xWgDE5nLQ\neMdHXvKbg/zkMZ23H/1oFRjYPOc9v3nQ58Aw0xn9LACvO7HQAOZVf/jl0ii1\nHcXe9bPX3euftaPL5R71tIf97nsy7/o0WlP2r4/JOU7B+r5nqva7jz1EdZ97\n4qNe+bonfvCfVXvly1762beOOdLBd+Q7PCAAOw==\n") }; product.Images = new[] { image }; var categoryId = "4d7b8f2d-5a18-4ccb-8a9a-20234224eb8c"; // tvs Task.WaitAll(Task.Run(() => this.AdminClient.AddAsync(categoryId, product))); var results = Task.Run(() => this.Client.GetProductAsync(code)).Result; Assert.NotNull(results); Assert.True(results.Id == code); }
public IHttpActionResult GetVariantSkuFromSelectionRequest([FromBody] GetVariantSkuFromSelectionRequest request) { var product = CatalogLibrary.GetProduct(request.ProductSku); UCommerce.EntitiesV2.Product variant = null; if (product.Variants.Any() && request.VariantProperties.Any()) // If there are variant values we'll need to find the selected variant { variant = product.Variants.FirstOrDefault(v => v.ProductProperties.Where(pp => pp.ProductDefinitionField.DisplayOnSite && pp.ProductDefinitionField.IsVariantProperty && !pp.ProductDefinitionField.Deleted && pp.Value != null && pp.Value != String.Empty).All(p => request.VariantProperties.Any(kv => kv.Key.Equals(p.ProductDefinitionField.Name, StringComparison.InvariantCultureIgnoreCase) && kv.Value.ToString().Equals(p.Value, StringComparison.InvariantCultureIgnoreCase)))); } else if (!product.Variants.Any()) // Only use the current product where there are no variants { variant = product; } var variantModel = new ProductVariation { Sku = variant.Sku, VariantSku = variant.VariantSku, ProductName = variant.Name, Properties = variant.ProductProperties.Select(prop => new ProductProperty { Id = prop.Id, Name = prop.ProductDefinitionField.Name, Value = prop.Value }) }; return(Json(new { Variant = variantModel })); }
public GetVariantSkuFromSelectionResponse(UCommerce.EntitiesV2.Product parentProduct, IDictionary <string, string> properties) { UCommerce.EntitiesV2.Product variant = null; if (parentProduct.Variants.Any() && properties.Any()) // If there are variant values we'll need to find the selected variant { variant = parentProduct.Variants.FirstOrDefault(v => v.ProductProperties.Where(pp => pp.ProductDefinitionField.DisplayOnSite && pp.ProductDefinitionField.IsVariantProperty && !pp.ProductDefinitionField.Deleted && pp.Value != null && pp.Value != String.Empty).All(p => properties.Any(kv => kv.Key.Equals(p.ProductDefinitionField.Name, StringComparison.InvariantCultureIgnoreCase) && kv.Value.Equals(p.Value, StringComparison.InvariantCultureIgnoreCase)))); } else if (!parentProduct.Variants.Any()) // Only use the current product where there are no variants { variant = parentProduct; } if (variant == null) { return; } Variant = new ProductVariation { Sku = variant.Sku, VariantSku = variant.VariantSku, ProductName = variant.Name, Properties = variant.ProductProperties.Select(prop => new ProductProperty { Id = prop.Id, Name = prop.ProductDefinitionField.Name, Value = prop.Value }) }; }
public async Task <int> InsertProductVariationAsync(ProductVariation productVariation) { _db.Add(productVariation); await _db.SaveChangesAsync(); return(productVariation.ProductVariationId); }
public async Task DeleteProductVariationAsync(ProductVariation productVariation) { var x = await _db.ProductVariation.FindAsync(productVariation.ProductVariationId); _db.Remove(x); await _db.SaveChangesAsync(); }
public async Task <IActionResult> Create(int productVariationId, string proVarTitle) { SubProductVariation subProVar = new SubProductVariation(); ProductVariation proVar = await _db.ProductVariations .AsNoTracking() .Where(c => c.ProductVariationId.Equals(productVariationId)) .FirstOrDefaultAsync(); double price = await _db.Products.AsNoTracking() .Where(c => c.Id.Equals(proVar.ProductId)) .Select(c => c.BasePrice) .FirstOrDefaultAsync(); subProVar.Price = price; subProVar.Title = proVarTitle; subProVar.ProductVariationId = productVariationId; subProVar.productId = proVar.ProductId; subProVar.ProductVariationTitle = proVar.Title; await _db.SubProductVariations.AddAsync(subProVar); await _db.SaveChangesAsync(); return(ViewComponent(componentName: "SubProductVariationList", arguments: new { productVariationId = productVariationId })); }
public IHttpActionResult GetVariantSkuFromSelectionRequest([FromBody] GetVariantSkuFromSelectionRequest request) { var product = CatalogLibrary.GetProduct(request.ProductSku); Product variant = null; if (product.ProductType == ProductType.ProductFamily && request.VariantProperties.Any() ) // If there are variant values we'll need to find the selected variant { var query = ProductsIndex.Find().Where(p => p.Sku == request.ProductSku && p.ProductType == ProductType.Variant); request.VariantProperties.ForEach(property => { query = query.Where(p => p[property.Key] == property.Value); }); variant = query.FirstOrDefault(); } else if (!product.Variants.Any()) // Only use the current product where there are no variants { variant = product; } if (variant == null) { return(NotFound()); } var variantModel = new ProductVariation { Sku = variant.Sku, VariantSku = variant.VariantSku, ProductName = variant.Name, }; return(Json(new { Variant = variantModel })); }
private void AddVariantProperties(Product product, ProductVariation sfVariant, Product variantProduct) { // Variant names and values live in comma separated lists in the Sitefinity models var variantFieldNames = sfVariant.VariantNames.Attribute.Split(','); var variantValues = sfVariant.VariantNames.AttributeValue.Split(','); // Create the unique property values that make up the variant for (var i = 0; i < variantFieldNames.Length; i++) { var variantFieldName = variantFieldNames[i].Trim(); var variantValue = variantValues[i].Trim(); var productDefinitionField = _session.Query <ProductDefinitionField>().FirstOrDefault(x => x.Name == variantFieldName && x.ProductDefinition.ProductDefinitionId == product.ProductDefinition.Id); if (productDefinitionField == null) { Log.Error( $"Could not add product variant for sku '{product.Sku}'. Product definition field with name '{variantFieldName}' not found."); continue; } var productProperty = new ProductProperty() { ProductDefinitionField = productDefinitionField, Value = variantValue, Product = variantProduct }; variantProduct.AddProductProperty(productProperty); } }
/// <summary> /// Constructor. /// </summary> /// <param name="sfContent">The sf product variation.</param> public ProductVariationModel(ProductVariation sfContent) { if (sfContent != null) { Id = sfContent.Id; Sku = sfContent.Sku; AdditionalPrice = sfContent.AdditionalPrice; LastModified = sfContent.LastModified; Active = sfContent.IsActive; //GET ATTRIBUTE DETAILS if (!string.IsNullOrWhiteSpace(sfContent.Variant)) { // Variant is stored as an array of an object. Get array, select first (only) object, then pull property from that object. JToken variantData = JArray.Parse(sfContent.Variant).First; Guid attributeId = new Guid(variantData["AttributeValueId"].Value <string>()); //GET ATTRIBUTE VALUE FOR VARIANT var manager = CatalogManager.GetManager(); var attribute = manager.GetProductAttributeValue(attributeId); //STORE PROPERTY VALUES TO MODEL Title = attribute.Title; Description = attribute.Description; Ordinal = attribute.Ordinal; Visible = attribute.Visible; ParentId = attribute.Parent.Id; ParentTitle = attribute.Parent.Title; } // Store original content OriginalContent = sfContent; } }
public void CreateWithCode() // Maybe not the right place to put this code... { string nodeName = "myNode"; string productName = "myProduct"; string skuName = "mySku"; // Create Node ContentReference linkToParentNode = _referenceConverter.GetContentLink("Women_1"); var contentRepository = ServiceLocator.Current.GetInstance <IContentRepository>(); var newNode = contentRepository.GetDefault <FashionNode>(linkToParentNode, new CultureInfo("en")); newNode.Code = nodeName; newNode.SeoUri = nodeName; newNode.Name = nodeName; newNode.DisplayName = nodeName; ContentReference newNodeRef = contentRepository.Save (newNode, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create Product var newProduct = contentRepository.GetDefault <BlouseProduct>(newNodeRef, new CultureInfo("en")); //Set some properties. newProduct.Code = productName; newProduct.SeoUri = productName; newProduct.Name = productName; newProduct.DisplayName = productName; newProduct.SeoInformation.Title = "SEO Title"; newProduct.SeoInformation.Keywords = "Some keywords"; newProduct.SeoInformation.Description = "A nice one"; newProduct.MainBody = new XhtmlString("This new product is great"); // Persist the Product ContentReference newProductReference = contentRepository.Save (newProduct, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create SKU var newSku = contentRepository.GetDefault <ShirtVariation>(newNodeRef, new CultureInfo("en")); newSku.Code = skuName; newSku.SeoUri = skuName; newSku.Name = skuName; newSku.DisplayName = skuName; //newSku.ParentLink = newProductReference; // Can do this in 10 - will change in 11 ContentReference newSkuReference = contentRepository.Save (newSku, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); //what differs from CMS ProductVariation prodVariationLink0 = new ProductVariation() { Child = newSkuReference, Parent = newProductReference, SortOrder = 100 }; _relationRepository.UpdateRelation(prodVariationLink0); }
public IActionResult CreateTshirt(int?baseProductId = null) { var productVariation = new ProductVariation(); productVariation.BaseProduct = db.Products.FirstOrDefault(x => x.ProductId == baseProductId); db.ProductVariations.Add(productVariation); db.SaveChanges(); return(View(productVariation)); }
/// <summary> /// Product Price /// </summary> /// <param name="productVariation"></param> /// <returns>price</returns> public static decimal GetProductPrice(ProductVariation productVariation) { if (productVariation.DiscountPrice > 0 && productVariation.DiscountPrice != null) { return(Convert.ToDecimal(productVariation.DiscountPrice)); } else { return(productVariation.Price); } }
public async Task <JsonResult> SaveProductVariation([FromBody] ProductVariationViewModel model) { var response = new ResultModel(); if (!ModelState.IsValid) { response.Errors = ModelState.ToResultModelErrors().ToList(); return(Json(response)); } var prod = await Context.Products.FirstOrDefaultAsync(i => i.Id == model.ProductId); if (prod != null) { var variation = await Context.ProductVariations .FirstOrDefaultAsync(i => i.Id == model.VariationId && i.ProductId == model.ProductId); if (variation != null) { variation.Price = model.Price; Context.ProductVariations.Update(variation); var listProductVariationDetails = Context.ProductVariationDetails.Where(x => x.ProductVariationId == variation.Id); Context.ProductVariationDetails.RemoveRange(listProductVariationDetails); } else { variation = new ProductVariation { ProductId = model.ProductId, Price = model.Price, }; Context.ProductVariations.Add(variation); } var variationDetails = model.ProductVariationDetails.Select(x => new ProductVariationDetail() { ProductVariationId = variation.Id, Value = x.Value, ProductOptionId = x.ProductOptionId }); await Context.ProductVariationDetails.AddRangeAsync(variationDetails); } var dbResult = await Context.PushAsync(); return(Json(dbResult)); }
public static IEnumerable <ProductVariationOptionVm> GetVariationOption(ProductVariation variation) { if (variation == null) { return(new List <ProductVariationOptionVm>()); } return(variation.OptionCombinations.Select(x => new ProductVariationOptionVm { OptionName = x.Option.Name, Value = x.Value })); }
/**/ public void AddProductVariation(ContentReference referenceToProduct, ContentReference referenceToVariation) { var newVariation = new ProductVariation { SortOrder = 100, Parent = referenceToProduct, Child = referenceToVariation, GroupName = "Default", Quantity = 1.000M }; _relationRepository.UpdateRelation(newVariation); }
private void AddProductDescriptionsForVariants(Product product, ProductVariation sfProduct) { var productDefinitionId = product.ProductDefinition.Id; var definition = _session.Query <ProductDefinition>().FirstOrDefault(x => x.ProductDefinitionId == productDefinitionId); if (definition == null) { return; } // Create product descriptions for each variant culture foreach (var translation in sfProduct.CultureTranslations) { var attributeNames = translation.Value.VariantNames.Attribute.Split(','); var attributeValues = translation.Value.VariantNames.AttributeValue.Split(','); var productDefinitionFieldNames = sfProduct.VariantNames.Attribute.Split(','); // There are no descriptions in Sitefinity at the variant level so for uCommerce we use // the concatenated variant values for display name + long & short descriptions var displayName = translation.Value.VariantNames.AttributeValue; var shortDescription = translation.Value.VariantNames.AttributeValue; var longDescription = translation.Value.VariantNames.AttributeValue; var productDescription = new ProductDescription { CultureCode = translation.Key, DisplayName = displayName, ShortDescription = shortDescription, LongDescription = longDescription }; // Create product description properties for each variant value culture for (var i = 0; i < attributeNames.Length; i++) { var fieldName = productDefinitionFieldNames[i]; var field = definition.ProductDefinitionFields.FirstOrDefault(x => x.Name == fieldName.Trim()); var productDescriptionProperty = new ProductDescriptionProperty { ProductDefinitionField = field, ProductDescription = productDescription, Value = attributeValues[i], CultureCode = translation.Key }; productDescription.AddProductDescriptionProperty(productDescriptionProperty); } product.AddProductDescription(productDescription); } }
/// <summary> /// Add Product Variation With product Id and volume /// </summary> /// <param name="product_Id">Product Id</param> /// <param name="volume">Volume of product variation</param> public void AddProductVariation(Guid product_Id, string volume) { var item = new ProductVariation { Id = Guid.NewGuid(), Product_Id = product_Id, Volume = volume, Price = 0, SKU = "Empty", StockQuantity = 0, CreatedDate = DateTime.Now, IsActive = true }; _productVariationService.Insert(item); }
public CartItem AddToCart(long userId, long productId, string variationName, int quantity) { ProductVariation productVariation = null; var cartItemQuery = cartItemRepository .Query() .Include(x => x.Product) .Where(x => x.ProductId == productId && x.UserId == userId); if (!string.IsNullOrWhiteSpace(variationName)) { productVariation = productVariationRepository.Query() .FirstOrDefault(x => x.Name == variationName && x.ProductId == productId); cartItemQuery = cartItemQuery.Where(x => x.ProductVariationId == productVariation.Id); } var cartItem = cartItemQuery.FirstOrDefault(); if (cartItem == null) { cartItem = new CartItem { UserId = userId, ProductId = productId, Quantity = quantity, CreatedOn = DateTime.Now }; cartItemRepository.Add(cartItem); } else { cartItem.Quantity = quantity; } if (productVariation != null) { cartItem.ProductVariationId = productVariation.Id; } cartItemRepository.SaveChange(); return(cartItem); }
private ProductVaDetailViewModel GetProductVaDetailViewModel(ProductVariation productVariation) { var model = new ProductVaDetailViewModel { Id = productVariation.Id, Price = productVariation.Price, DiscountPrice = productVariation.DiscountPrice, Product = productVariation.Product, ProductImage = productVariation.ProductImage, SKU = productVariation.SKU, Volume = productVariation.Volume, StockQuantity = productVariation.StockQuantity, Product_Id = productVariation.Product_Id }; return(model); }
public void Test3() { var sizeVariation = new SizeVariation() { ListParams = new List <Size>() { new Size() { TypeSize = SizesEnum.Breast, Value = 90, MaxValue = 100 }, new Size() { TypeSize = SizesEnum.Waist, Value = 65, MaxValue = 70 }, new Size() { TypeSize = SizesEnum.Hips, Value = 95, MaxValue = 100 }, new Size() { TypeSize = SizesEnum.WidthOfTheShoulders, Value = 70, MaxValue = 75 } } }; var pv = new ProductVariation() { SizeVariation = new List <SizeVariation>() { sizeVariation } }; var customerSize = new UserSizes() { Breast = 92, Waist = 66, Thigh = 97, ShouldersWidth = 69, }; double expected = 7.28; pv = SizeResponseController.CalculateRating(pv, customerSize); var actual = pv.SizeVariation.FirstOrDefault().Rating; Assert.IsTrue(Math.Abs(expected - actual) < 0.1); }
public static ProVarationViewModel ConvertModelFromDomainToProVa(ProductVariation productVariation) { var model = new ProVarationViewModel { Id = productVariation.Id, Product_Id = productVariation.Product_Id, SKU = productVariation.SKU, Volume = productVariation.Volume, Price = productVariation.Price, DiscountPrice = productVariation.DiscountPrice, StockQuantity = productVariation.StockQuantity, CreateDate = productVariation.CreatedDate, UpdateDate = productVariation.UpdatedDate, IsActive = productVariation.IsActive }; return(model); }
public async Task <IActionResult> DeleteProductVariation(int id) { ProductVariation productVariation = await _db.ProductVariations.FindAsync(id); var product = await _db.Products.FindAsync(productVariation.ProductId); _db.ProductVariations.Remove(productVariation); await _db.SaveChangesAsync(); product.VarNumber = await _db.ProductVariations.AsNoTracking() .Where(c => c.ProductId.Equals(product.Id)) .CountAsync(); _db.Update(product); await _db.SaveChangesAsync(); HttpContext.Session.SetInt32("Message", (int)Messages.DeletedSuccessfully); return(RedirectToAction(controllerName: "Products", actionName: "EditProduct", routeValues: new { id = productVariation.ProductId })); }
private static void MapProductVariationVmToProduct(ProductForm model, Product product) { foreach (var variationVm in model.Product.Variations) { var variation = new ProductVariation { Name = variationVm.Name, PriceOffset = variationVm.PriceOffset }; foreach (var combinationVm in variationVm.OptionCombinations) { variation.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value }); } product.AddProductVariation(variation); } }
private void AddOrDeleteProductVariation(ProductForm model, Product product) { foreach (var productVariationVm in model.Product.Variations) { var variation = product.Variations.FirstOrDefault(x => x.Name == productVariationVm.Name); if (variation == null) { variation = new ProductVariation { Name = productVariationVm.Name, PriceOffset = productVariationVm.PriceOffset }; foreach (var combinationVm in productVariationVm.OptionCombinations) { variation.AddOptionCombination(new ProductOptionCombination { OptionId = combinationVm.OptionId, Value = combinationVm.Value }); } product.AddProductVariation(variation); } else { variation.PriceOffset = productVariationVm.PriceOffset; variation.IsDeleted = false; } } foreach (var variation in product.Variations) { if (model.Product.Variations.All(x => x.Name != variation.Name)) { variation.IsDeleted = true; } } }
/// <summary> /// Get subscription duration /// </summary> /// <param name="variation"></param> /// <returns></returns> public int GetSubscriptionDuration([Required] ProductVariation variation) { if (variation == null) { return(0); } var periodString = variation.ProductVariationDetails.FirstOrDefault(x => x.ProductOption.Name.Equals("Period"))?.Value; var measureUnit = variation.ProductVariationDetails.FirstOrDefault(x => x.ProductOption.Name.Equals("Unit"))?.Value; var days = 30; var period = Convert.ToInt32(periodString); var today = DateTime.Today; switch (measureUnit) { case "day": days = period; break; case "month": days = (today.AddMonths(period) - today).Days; break; case "year": days = (today.AddYears(period) - today).Days; break; } return(days); }
/// <summary> /// Map variation product /// </summary> /// <param name="product"></param> /// <param name="variation"></param> /// <param name="amount"></param> /// <returns></returns> public static Order Map(Product product, ProductVariation variation, int amount = 1) { if (product == null) { throw new NullReferenceException(); } var order = new Order { OrderState = OrderState.New, ProductOrders = new List <ProductOrder> { new ProductOrder { ProductId = product.Id, Amount = amount, PriceWithOutDiscount = variation == null ? product.PriceWithoutDiscount : variation.Price, DiscountValue = product.DiscountPrice, ProductVariationId = variation?.Id } } }; return(order); }
public void CreateWithCode() { string nodeName = "myNode"; string productName = "myProduct"; string skuName = "mySku"; // Get ReferenceConverter and LinksRepository ReferenceConverter refConv = ServiceLocator.Current.GetInstance <ReferenceConverter>(); ILinksRepository linksRep = ServiceLocator.Current.GetInstance <ILinksRepository>(); // Create Node ContentReference linkToParentNode = refConv.GetContentLink("Women_1"); var contentRepository = ServiceLocator.Current.GetInstance <IContentRepository>(); var newNode = contentRepository.GetDefault <FashionNode>(linkToParentNode, new CultureInfo("en")); newNode.Code = nodeName; newNode.SeoUri = nodeName; newNode.Name = nodeName; newNode.DisplayName = nodeName; ContentReference newNodeRef = contentRepository.Save (newNode, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create Product var newProduct = contentRepository.GetDefault <BlouseProduct>(newNodeRef, new CultureInfo("en")); //Set some properties. newProduct.Code = productName; newProduct.SeoUri = productName; newProduct.Name = productName; newProduct.DisplayName = productName; newProduct.SeoInformation.Title = "SEO Title"; newProduct.SeoInformation.Keywords = "Some keywords"; newProduct.SeoInformation.Description = "A nice one"; newProduct.MainBody = new XhtmlString("This new product is great"); ContentReference newProductRef = contentRepository.Save (newProduct, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create SKU var newSku = contentRepository.GetDefault <FashionVariation>(newNodeRef, new CultureInfo("en")); newSku.Code = skuName; newSku.SeoUri = skuName; newSku.Name = skuName; newSku.DisplayName = skuName; ContentReference newSkuRef = contentRepository.Save (newSku, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // what differs from CMS ProductVariation prodVarRel = new ProductVariation(); prodVarRel.Target = newSkuRef; prodVarRel.Source = newProductRef; prodVarRel.SortOrder = 100; linksRep.UpdateRelation(prodVarRel); // done, but... /* ...still missing Market, Inventory, Pricing and Media + a few other things */ // ToDo: ...some redirect... somewhere }
public void CreateWithCode() { // ToDo: Use with Blouses in "Fund"... string nodeName = "myNode"; string productName = "myProduct"; string skuName = "mySku"; // Get ReferenceConverter and LinksRepository ReferenceConverter refConv = ServiceLocator.Current.GetInstance <ReferenceConverter>(); //ILinksRepository linksRep = ServiceLocator.Current.GetInstance<ILinksRepository>(); Obsoleted IRelationRepository _relRep = ServiceLocator.Current.GetInstance <IRelationRepository>(); // the one to use // Create Node ContentReference linkToParentNode = refConv.GetContentLink("Women_1"); // if an int... look at the second arg. //ContentReference cref0 = _referenceConverter.GetContentLink(42, CatalogContentType.CatalogNode, 0); var contentRepository = ServiceLocator.Current.GetInstance <IContentRepository>(); var newNode = contentRepository.GetDefault <FashionNode>(linkToParentNode, new CultureInfo("en")); newNode.Code = nodeName; newNode.SeoUri = nodeName; newNode.Name = nodeName; newNode.DisplayName = nodeName; ContentReference newNodeRef = contentRepository.Save (newNode, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create Product //LanguageSelector selEN = new LanguageSelector("en"); // obsoleted var newProduct = contentRepository.GetDefault <BlouseProduct>(newNodeRef, new CultureInfo("en")); //Set some required properties. newProduct.Code = productName; newProduct.SeoUri = productName; newProduct.Name = productName; // before: InternalName //newProduct.CanBeMonogrammed = false; //newProduct.Brand = "Ford"; //newProduct.Color = "Gold"; newProduct.DisplayName = productName; // before: Name //newProduct. ClothesType = "CarClothes"; newProduct.SeoInformation.Title = "SEO Title"; newProduct.SeoInformation.Keywords = "Some keywords"; newProduct.SeoInformation.Description = "A nice one"; newProduct.MainBody = new XhtmlString("This new product is great"); ContentReference newProductRef = contentRepository.Save (newProduct, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create SKU var newSku = contentRepository.GetDefault <ShirtVariation>(newNodeRef, new CultureInfo("en")); newSku.Code = skuName; newSku.SeoUri = skuName; newSku.Name = skuName; newSku.DisplayName = skuName; ContentReference newSkuRef = contentRepository.Save (newSku, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // what differs from CMS - ILinksRep. & IRelationRep ProductVariation prodVarRel = new ProductVariation(); //prodVarRel.Target = newSkuRef; prodVarRel.Child = newSkuRef; //prodVarRel.Source = newProductRef; prodVarRel.Parent = newProductRef; prodVarRel.SortOrder = 100; // usable in 11 _relRep.UpdateRelation(prodVarRel); }
public async Task <Response> ImportFile(FileImportDto dto) { var response = new Response(); var lines = System.IO.File.ReadLines(dto.UploadedFileName); foreach (var line in lines.Skip(1)) //Skip Header { try { var splittedRow = line.Split(','); if (splittedRow.Length != 10) { response.Warnings.Add(string.Format(_errorHandler.GetMessage(ErrorMessages.InputRowColumnCountIsNotExpected), line)); } else { decimal price = 0, discount = 0; if (!decimal.TryParse(splittedRow[4], out price)) { response.Warnings.Add(string.Format(_errorHandler.GetMessage(ErrorMessages.WrongFormat), "Price", line)); } if (!decimal.TryParse(splittedRow[5], out discount)) { response.Warnings.Add(string.Format(_errorHandler.GetMessage(ErrorMessages.WrongFormat), "DiscountPrice", line)); } //Product var product = _productRepo.GetAll().FirstOrDefault(p => p.ArtikelCode == splittedRow[1] && p.ColorCode == splittedRow[2] && p.Description == splittedRow[3]); if (product == null) { product = await _productRepo.Add(new Product() { ArtikelCode = splittedRow[1], ColorCode = splittedRow[2], Description = splittedRow[3] }); } //Color var color = _colorRepo.GetAll().FirstOrDefault(p => p.Name == splittedRow[9]); if (color == null) { color = await _colorRepo.Add(new Color() { Name = splittedRow[9] }); } //Size var size = _sizeRepo.GetAll().FirstOrDefault(p => p.Name == splittedRow[8]); if (size == null) { size = await _sizeRepo.Add(new Size() { Name = splittedRow[8] }); } var productVar = new ProductVariation() { Key = splittedRow[0], Price = price, DiscountPrice = discount, DeliveredIn = splittedRow[6], Q1 = splittedRow[7], ColorId = color.Id, ProductId = product.Id, SizeId = size.Id, }; await _productVariationRepo.Add(productVar); } } catch (System.Exception ex) { response.HasError = true; response.Errors.Add(string.Format(_errorHandler.GetMessage(ErrorMessages.UnexpectedError), ex.Message, line)); } } return(response); }
//Injected<ReferenceConverter> _refConv; //Injected<ILinksRepository> _linksRep; public void CreateWithCode() // Maybe not the right place to put this code... { string nodeName = "myNode"; string productName = "myProduct"; string skuName = "mySku"; // Get ReferenceConverter and LinksRepository, but not this way... //ReferenceConverter refConv = ServiceLocator.Current.GetInstance<ReferenceConverter>(); //ILinksRepository linksRep = ServiceLocator.Current.GetInstance<ILinksRepository>(); // Create Node ContentReference linkToParentNode = _referenceConverter.GetContentLink("Women_1"); var contentRepository = ServiceLocator.Current.GetInstance <IContentRepository>(); var newNode = contentRepository.GetDefault <FashionNode>(linkToParentNode, new CultureInfo("en")); newNode.Code = nodeName; newNode.SeoUri = nodeName; newNode.Name = nodeName; newNode.DisplayName = nodeName; ContentReference newNodeRef = contentRepository.Save (newNode, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create Product var newProduct = contentRepository.GetDefault <BlouseProduct>(newNodeRef, new CultureInfo("en")); //Set some properties. newProduct.Code = productName; newProduct.SeoUri = productName; newProduct.Name = productName; newProduct.DisplayName = productName; newProduct.SeoInformation.Title = "SEO Title"; newProduct.SeoInformation.Keywords = "Some keywords"; newProduct.SeoInformation.Description = "A nice one"; newProduct.MainBody = new XhtmlString("This new product is great"); // Persist the Product ContentReference newProductReference = contentRepository.Save (newProduct, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); // Create SKU var newSku = contentRepository.GetDefault <ShirtVariation>(newNodeRef, new CultureInfo("en")); newSku.Code = skuName; newSku.SeoUri = skuName; newSku.Name = skuName; newSku.DisplayName = skuName; //newSku.ParentLink = newProductReference; // Can do this in 10 - will change in 11 ContentReference newSkuReference = contentRepository.Save (newSku, SaveAction.Publish, EPiServer.Security.AccessLevel.NoAccess); //what differs from CMS ProductVariation prodVariationLink0 = new ProductVariation() { Child = newSkuReference, Parent = newProductReference, SortOrder = 100 }; _relationRepository.UpdateRelation(prodVariationLink0); // ...old-school //IEnumerable<Relation> rels1 = _linksRepository.GetRelationsByTarget // (_referenceConverter.GetContentLink("Shirts_1")); //IEnumerable<Relation> rels2 = _linksRepository.GetRelationsBySource( // _referenceConverter.GetContentLink("Shirts_1")).OfType<NodeRelation>(); //contentRepository.GetChildren<CatalogContentBase>(_referenceConverter.GetContentLink("")); // done, but... /* ...still missing Market, Inventory, Pricing and Media + a few other things */ // ToDo: ...redirect... }