public ProductType Update(UpdateProductTypeRequest request)
{
var type = _productTypes.Find(request.Id);
// Basic info
type.Name = request.Name;
type.SkuAlias = request.SkuAlias;
// Custom fields
if (request.CustomFields != null)
{
RefreshPredefinedFields(request.CustomFields);
type.CustomFieldDefinitions.Update(
from: request.CustomFields,
by: f => f.Id,
onUpdateItem: (oldItem, newItem) =>
{
oldItem.UpdateFrom(newItem);
},
onRemoveItem: field =>
{
if (!field.IsPredefined)
{
_customFields.Delete(field);
}
});
type.CustomFieldDefinitions.Sort(request.CustomFields.Select(f => f.Name));
}
// Variant fields
if (request.VariantFields != null)
{
RefreshPredefinedFields(request.VariantFields);
type.VariantFieldDefinitions.Update(
from: request.VariantFields,
by: f => f.Id,
onUpdateItem: (oldItem, newItem) =>
{
oldItem.UpdateFrom(newItem);
},
onRemoveItem: field =>
{
if (!field.IsPredefined)
{
_customFields.Delete(field);
}
});
type.VariantFieldDefinitions.Sort(request.VariantFields.Select(f => f.Name));
}
_productTypes.Database.SaveChanges();
Event.Raise(new ProductTypeUpdated(type), _instance);
return type;
}