public ActionResult AddOrEditGroup(int id = 0, Group group = null)
        {
            var allParameters = DbHelper.GetAllParameters(0);

            if (group == null)
            {
                return(View(new Group {
                    AllParameters = allParameters ?? new List <Parameter>()
                }));
            }
            if (!DbHelper.UserIsAdmin(User?.Identity?.Name))
            {
                return(View("Unauthorize"));
            }

            _repository.UserName = User?.Identity?.Name;
            group.AllParameters  = allParameters ?? new List <Parameter>();

            if (!ModelState.IsValid)
            {
                return(View(group));
            }

            var res = group.Id != 0
                ? DbHelper.EditGroup(group.Id, group.Name, _repository.UserName)
                : DbHelper.AddGroup(group.Name, _repository.UserName);

            if (!res)
            {
                ModelState.AddModelError("Db", "Группа не была добавлена! Повторите попытку или свяжитесь с администратором.");
                return(View(group));
            }

            var groups = DbHelper.GetAllGroups(_repository.UserName);

            @group = id == 0 ? groups.Values.Single(g => g.Id == groups.Values.Max(gid => gid.Id)) : groups.Values.Single(g => g.Id == id);
            group.AllParameters = allParameters ?? new List <Parameter>();
            var result = false;

            if (allParameters != null && allParameters.Any())
            {
                var newChecked = Request.Form.AllKeys;
                var toDelete   = new List <ParameterGroup>();
                var toAdd      = new List <ParameterGroup>();
                foreach (var parameter in allParameters)
                {
                    var inNewChecked = newChecked.Any(k => k == $"chk_{parameter.Id}_{group.Id}" || k == $"chk_{parameter.Id}_0");
                    var inOldChecked = group.Parameters.Any(p => p.Id == parameter.Id);

                    if (inNewChecked && inOldChecked)
                    {
                        continue;
                    }
                    if (inNewChecked)
                    {
                        toAdd.Add(new ParameterGroup
                        {
                            IdParameter = parameter.Id,
                            IdGroup     = group.Id
                        });
                    }
                    else if (inOldChecked)
                    {
                        toDelete.Add(new ParameterGroup
                        {
                            IdParameter = parameter.Id,
                            IdGroup     = group.Id
                        });
                    }
                }
                if (toAdd.Any() || toDelete.Any())
                {
                    result = DbHelper.UpdateParameterGroups(toAdd, toDelete, _repository.UserName);
                }
                else
                {
                    result = true;
                }
            }
            else
            {
                return(View("Saved"));
            }

            if (result)
            {
                //user = DbHelper.GetUser(_repository.UserName);
                //roles = DbHelper.GetAllRoles(_repository.UserName);
                //if (users == null || roles == null)
                //    return View(new UserRolesViewModel());

                //var modelNew = new UserViewModel
                //{
                //    User = users.Values,
                //    Roles = roles.Values
                //};

                return(View("Saved"));
            }

            ModelState.AddModelError("Db", "Параметры группы не были изменены! Повторите попытку или свяжитесь с администратором.");
            return(View(group));
        }