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);
                }
            }
        }
Esempio n. 2
0
        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);
        }