public void Modify(string wamsId, int apiClientId, string claimSetName, int?[] selectedSchoolIds = null)
        {
            var client        = _apiClientBusiness.GetApiClient(apiClientId);
            int applicationId = client.ApplicationApplicationId.GetValueOrDefault();
            int vendorId      = client.Application.VendorVendorId.GetValueOrDefault();
            int profileId     = client.Application.Profiles.Select(p => p.ProfileId).FirstOrDefault();

            //claimset change will mean choosing/adding new application
            if (client.Application.ClaimSetName != claimSetName)
            {
                Application app = _applicationBusiness.GetOrCreateApplication(wamsId, vendorId,
                                                                              claimSetName, profileId, $"{client.Application.Vendor.VendorName} {claimSetName}");

                applicationId = app.ApplicationId;
                //keep applicationids aligned
                client.ApplicationApplicationId = applicationId;
                foreach (var clientApplicationEducationOrganization in client.ApplicationEducationOrganizations.Where(e => e.Application.VendorVendorId == vendorId))
                {
                    clientApplicationEducationOrganization.ApplicationApplicationId =
                        applicationId;
                }
                _apiClientBusiness.Update(wamsId, client);
                _apiClientBusiness.SaveChanges(wamsId);
            }

            //the only other update would be new or fewer schools
            if (selectedSchoolIds != null && selectedSchoolIds.Length > 0)
            {
                bool changes = false;
                //schools not in the current list of edorgs
                foreach (var schoolId in selectedSchoolIds.AsQueryable().Except(client.ApplicationEducationOrganizations.Select(a => (int?)a.EducationOrganizationId)))
                {
                    if (schoolId > 0)
                    {
                        var schoolApplicationEdOrg =
                            _applicationEducationOrganizationBusiness.GetOrCreateApplicationEducationOrganization(wamsId, schoolId.Value, vendorId, applicationId);
                        client.ApplicationEducationOrganizations.Add(schoolApplicationEdOrg);
                        changes = true;
                    }
                }
                //edorgs not in the current list of schools
                IQueryable <int?> currentOrgs = client.ApplicationEducationOrganizations.Select(a => (int?)a.EducationOrganizationId).ToArray().AsQueryable();
                foreach (var schoolId in currentOrgs.Except(selectedSchoolIds))
                {
                    var org = client.ApplicationEducationOrganizations.FirstOrDefault(e =>
                                                                                      e.EducationOrganizationId == schoolId);
                    if (org != null)
                    {
                        client.ApplicationEducationOrganizations.Remove(org);
                        changes = true;
                    }
                }
                if (changes)
                {
                    _apiClientBusiness.Update(wamsId, client);
                    _apiClientBusiness.SaveChanges(wamsId);
                }
            }
        }
        public JsonResult ApiClient_Create2(ApiClientModel model)
        {
            if (model != null && ModelState.IsValid)
            {
                try
                {
                    ValidateSaveApiClient(model);

                    if (!string.IsNullOrWhiteSpace(model.Errors))
                    {
                        return(Json(new
                        {
                            success = false,
                            Errors = string.Format("Could not create api client {0} : {1} ", model.Name, model.Errors)
                        }));
                    }

                    var client = new ApiClient
                    {
                        Key    = model.Key,
                        Secret = model.SecretDisplay,
                        Name   = model.Name,
                        ApplicationApplicationId = model.ApplicationApplicationId
                    };
                    _apiClientBusiness.Create(WamsUser.WamsId, client);
                    _apiClientBusiness.SaveChanges(WamsUser.WamsId);

                    model.ApiClientId = client.ApiClientId;
                }
                catch (Exception)
                {
                    return(Json(new
                    {
                        success = false,
                        Errors = string.Format("Could not create api client {0} ", model.Name)
                    }));
                }
            }
            else
            {
                if (model != null)
                {
                    var errorList = (from item in ModelState.Values
                                     from error in item.Errors
                                     select error.ErrorMessage).ToList();
                    model.Errors = string.Join("<br /> ", errorList);
                    return(Json(new
                    {
                        success = false,
                        Errors = string.Format("Could not create api client {0} : {1}", model.Name, model.Errors)
                    }));
                }
            }

            return(Json(new { success = true }, JsonRequestBehavior.AllowGet));
        }