public JsonResult EditSubscription(AgencyClientModel model)
        {
            try
            {
                if (model != null && ModelState.IsValid)
                {
                    var    apiClientId       = model.ApiClientId;
                    int?[] selectedSchoolIds = null;
                    if (model.SelectedSchoolIds != null && model.SelectedSchoolIds.Count > 0)
                    {
                        selectedSchoolIds = model.SelectedSchoolIds.Select(x => (int?)int.Parse(x)).ToArray();
                    }

                    _vendorSubscriptionBusiness.Modify(WamsUser.WamsId, apiClientId,
                                                       model.ApplicationClaimSetName, selectedSchoolIds);
                    _agreementBusiness.UpsertVendorSub(
                        EducationOrganizationId,
                        WamsUser.WamsId,
                        model.ApplicationVendorVendorId);
                }
                return(Json(new { success = true }));
            }
            catch (Exception e)
            {
                return(Json(new
                {
                    success = false,
                    Errors = string.Format("Could not update subscription")
                }));
            }
        }
        public ActionResult NewSubscription(bool isSchoolLevel)
        {
            var  org      = _odsBusiness.GetEducationOrganization(EducationOrganizationId);
            bool isChoice = org.IsChoice;
            var  subscriptionSiteContent = _siteContentBusiness.GetByContentTypeId((int)SiteContentType.VendorSubscription);

            var model = new AgencyClientModel {
                Action = "NewSubscription"
            };

            model.VendorSubscriptionMessage = subscriptionSiteContent.Body;
            model.ApplicationClaimsetDetailSchoolLevelClaimset = isSchoolLevel;

            model.Vendors = _vendorBusiness.GetVendors().Where(v =>
                                                               v.Applications.Any(c => c.ClaimsetDetail.Active &&
                                                                                  c.ClaimsetDetail.SchoolLevelClaimset == isSchoolLevel &&
                                                                                  ((isChoice && c.ClaimsetDetail.ChoiceClaimset) || (!isChoice && c.ClaimsetDetail.PublicClaimset))))
                            .OrderBy(v => v.VendorName)
                            .Select(t => new SelectListItem {
                Value = t.VendorId.ToString(), Text = t.VendorName.ToString()
            }).ToList();

            model.Schools = _odsBusiness.GetLeaSchools(EducationOrganizationId)
                            .Select(t => new { t.EducationOrganizationId, t.NameOfInstitution }).ToList()
                            .Select(t => new SelectListItem()
            {
                Value = t.EducationOrganizationId.ToString(), Text = t.NameOfInstitution
            }).ToList()
            ;
            model.SelectedSchoolIds = new List <string>();
            model.Applications      = VendorApplications(model.ApplicationClaimsetDetailSchoolLevelClaimset, model.ApplicationVendorVendorId, model.ApplicationClaimSetName);

            return(PartialView("EditSubscription", model));
        }
        public ActionResult EditSubscription(int id)
        {
            var  org      = _odsBusiness.GetEducationOrganization(EducationOrganizationId);
            bool isChoice = org.IsChoice;
            var  subscriptionSiteContent = _siteContentBusiness.GetByContentTypeId((int)SiteContentType.VendorSubscription);

            var client = _apiClientBusiness.GetApiClientWithDetails(id);
            var model  = new AgencyClientModel
            {
                ApiClientId = client.ApiClientId,
                ApplicationApplicationName = client.Application.ApplicationName,
                ApplicationClaimSetName    = client.Application.ClaimSetName,
                ApplicationClaimsetDetailChoiceClaimset      = client.Application.ClaimsetDetail.ChoiceClaimset,
                ApplicationClaimsetDetailClaimsetTypeId      = client.Application.ClaimsetDetail.ClaimsetTypeId,
                ApplicationClaimsetDetailClaimsetTypeName    = client.Application.ClaimsetDetail.ClaimsetType.Name,
                ApplicationClaimsetDetailPlainEnglish        = client.Application.ClaimsetDetail.PlainEnglish,
                ApplicationClaimsetDetailPrimarySis          = client.Application.ClaimsetDetail.PrimarySis,
                ApplicationClaimsetDetailPublicClaimset      = client.Application.ClaimsetDetail.PublicClaimset,
                ApplicationClaimsetDetailReadOnlyClaimset    = client.Application.ClaimsetDetail.ReadOnlyClaimset,
                ApplicationClaimsetDetailSchoolLevelClaimset = client.Application.ClaimsetDetail.SchoolLevelClaimset,
                ApplicationVendorVendorId   = client.Application.Vendor.VendorId,
                ApplicationVendorVendorName = client.Application.Vendor.VendorName,
                Name           = client.Name,
                Key            = client.Key,
                SecretIsHashed = client.SecretIsHashed,
                Secret         = client.Secret,
                ProfileNames   = client.Application.Profiles.Select(p => p.ProfileName).ToList(),
                Organizations  = client.ApplicationEducationOrganizations.Select(e => e.EdOrg).ToList(),
            };

            model.Action = "EditSubscription";
            model.VendorSubscriptionMessage = subscriptionSiteContent.Body;

            model.Schools = _odsBusiness.GetLeaSchools(EducationOrganizationId)
                            .Select(t => new { t.EducationOrganizationId, t.NameOfInstitution }).ToList()
                            .Select(t => new SelectListItem()
            {
                Value = t.EducationOrganizationId.ToString(), Text = t.NameOfInstitution, Selected = model.Organizations.Any(o => o.EducationOrganizationId == t.EducationOrganizationId)
            }).ToList()
            ;
            model.SelectedSchoolIds = model.Organizations.Select(o => o.EducationOrganizationId.ToString()).ToList();
            model.Applications      = VendorApplications(model.ApplicationClaimsetDetailSchoolLevelClaimset, model.ApplicationVendorVendorId, model.ApplicationClaimSetName);

            return(PartialView("EditSubscription", model));
        }
        public JsonResult NewSubscription(AgencyClientModel model)
        {
            if (model != null && ModelState.IsValid)
            {
                try
                {
                    var vendor = _vendorBusiness.GetVendorById(model.ApplicationVendorVendorId);

                    int?[] selectedSchoolIds = null;
                    if (model.SelectedSchoolIds != null && model.SelectedSchoolIds.Count > 0)
                    {
                        selectedSchoolIds = model.SelectedSchoolIds.Where(x => !string.IsNullOrWhiteSpace(x)).Select(x => (int?)int.Parse(x)).ToArray();
                    }

                    //TODO- this is implementation specific and not handled here
                    var email = _vendorSubscriptionBusiness.Subscribe(WamsUser.WamsId, EducationOrganizationId, vendor.VendorName,
                                                                      model.ApplicationClaimSetName, selectedSchoolIds);
                    if (email.To.Any())
                    {
                        MailService ms = new MailService();
                        ms.SendEmail(email);
                    }

                    if (vendor != null)
                    {
                        _agreementBusiness.UpsertVendorSub(
                            EducationOrganizationId,
                            WamsUser.WamsId,
                            vendor.VendorId);
                    }
                    return(Json(new { success = true }));
                }
                catch (Exception e)
                {
                    return(Json(new
                    {
                        success = false,
                        Errors = string.Format("Could not add subscription: {0}", e.Message)
                    }));
                }
            }


            return(Json(new { success = true }));
        }