private static void SaveGroups(EditAttribute editAttribute, int attributeID)
        {
            var curList = AttributeGroups.GetByAttributeID(attributeID);

            foreach (var groupID in editAttribute.Groups)
            {
                if (!curList.Any(item => item.GroupID == groupID))
                {
                    var attributeGroup = new AttributeGroup();

                    attributeGroup.AttributeID = attributeID;
                    attributeGroup.GroupID     = groupID;

                    AttributeGroups.Insert(attributeGroup);
                }
                else
                {
                    curList.Remove(curList.Single(cls => cls.GroupID == groupID));
                }
            }

            foreach (var item in curList)
            {
                AttributeGroups.Delete(item.ID);
            }
        }
        public ActionResult Edit(int?id)
        {
            EditAttribute editAttribute;

            if (id.HasValue)
            {
                editAttribute        = Mapper.Map <EditAttribute>(Attributes.GetByID(id.Value));
                editAttribute.Groups = AttributeGroups.GetByAttributeID(editAttribute.ID).Select(item => item.GroupID).ToList();
            }
            else
            {
                editAttribute = new EditAttribute();
            }

            return(View(editAttribute));
        }
        public ActionResult Edit(EditAttribute editAttribute)
        {
            try
            {
                var attribute = Mapper.Map <Attribute>(editAttribute);

                attribute.LastUpdate = DateTime.Now;

                ViewBag.Success = true;

                int attributeID = attribute.ID;
                if (attributeID == -1)
                {
                    Attributes.Insert(attribute);
                    attributeID = attribute.ID;

                    SaveGroups(editAttribute, attribute.ID);
                    SaveOptions(editAttribute, attribute.ID);

                    UserNotifications.Send(UserID, String.Format("جدید - ویژگی '{0}'", attribute.Title), "/Admin/Attributes/Edit/" + attribute.ID, NotificationType.Success);
                    editAttribute = new EditAttribute();
                }
                else
                {
                    Attributes.Update(attribute);

                    SaveGroups(editAttribute, attribute.ID);
                    SaveOptions(editAttribute, attribute.ID);

                    editAttribute.Groups  = AttributeGroups.GetByAttributeID(editAttribute.ID).Select(item => item.GroupID).ToList();
                    editAttribute.Options = AttributeOptions.GetByAttributeID(editAttribute.ID).Select(item => new EditAttributeOption()
                    {
                        ID = item.ID, AttributeID = item.AttributeID, Title = item.Title
                    }).ToList();
                }
            }
            catch (Exception ex)
            {
                SetErrors(ex);
            }

            return(ClearView(editAttribute));
        }