public void UpdateTo(ProductType type) { type.Id = this.Id; type.Name = (this.Name ?? string.Empty).Trim(); type.SkuAlias = (this.SkuAlias ?? string.Empty).Trim(); // if (this.CustomFields != null) { type.CustomFields = new List<ProductTypeCustomField>(); foreach (var item in this.CustomFields) { var field = new ProductTypeCustomField(); field.ProductTypeId = type.Id; field.CustomFieldId = item.Id; field.CustomField = new CustomField(); item.UpdateTo(field.CustomField); type.CustomFields.Add(field); } } // if (this.VariationFields != null) { type.VariationFields = new List<ProductTypeVariantField>(); foreach (var item in this.VariationFields) { var field = new ProductTypeVariantField(); field.ProductTypeId = type.Id; field.CustomFieldId = item.Id; field.CustomField = new CustomField(); item.UpdateTo(field.CustomField); type.VariationFields.Add(field); } } }
public ActionResult Save(ProductTypeEditorModel model, string @return) { // Create new fields ProductType productType = null; if (model.Id > 0) { productType = _productTypeService.GetById(model.Id); } else { productType = new ProductType(model.Name, model.SkuAlias); } productType.Name = model.Name; productType.SkuAlias = model.SkuAlias; // Custom Fields foreach (var field in productType.CustomFields.ToList()) { if (!model.CustomFields.Any(f => f.Id == field.CustomFieldId)) { productType.RemoveCustomField(field.CustomFieldId); } } foreach (var field in model.CustomFields) { var customField = CreateOrUpdateField(field); var current = productType.FindCustomField(customField.Id); if (current == null) { current = new ProductTypeCustomField(productType, customField); productType.CustomFields.Add(current); } else { // Update sequence } } // Variant Fields foreach (var field in productType.VariationFields.ToList()) { if (!model.VariationFields.Any(f => f.Id == field.CustomFieldId)) { productType.RemoveVariantField(field.CustomFieldId); } } foreach (var field in model.VariationFields) { var customField = CreateOrUpdateField(field); var current = productType.FindVariantField(customField.Id); if (current == null) { current = new ProductTypeVariantField(productType, customField); productType.VariationFields.Add(current); } else { // Update sequence } } if (productType.Id == 0) { _productTypeService.Create(productType); } CommerceContext.CurrentInstance.Database.SaveChanges(); productType.NotifyUpdated(); if (model.IsEnabled) { _productTypeService.Enable(productType); } else { _productTypeService.Disable(productType); } return AjaxForm().RedirectTo(@return); }