public ActionResult AddAdvisorId(AdvisorInformationViewModel model)
        {
            model.ListAdvisorIds = model.ListAdvisorIds ?? new List <AdvisorIdClass>();
            var isValid = AdvisorViewManager.ValidateAdvisorIds(model as AdvisorInformationViewModel, ModelState);

            if (isValid)
            {
                model.ListAdvisorIds.Add(new AdvisorIdClass {
                    Status = ProfileItemStatus.Insert
                });
            }

            return(PartialView("EditorTemplates/Admin.AdvisorInformation", model));
        }
        public ActionResult AdminEventBadgeUpdate(AdvisorInformationViewModel viewModel)
        {
            if (viewModel.Badge == null || !viewModel.Badge.DirtyFlag) //if nothing has changed don't need to go any further
            {
                return(new HttpStatusCodeResult(HttpStatusCode.OK));
            }
            viewModel.LoadSecurity("advisors-admininformationupdate", viewModel);
            //ignore errors for non-badge related fields
            tcchc.ValidationHelper.IgnoreValidationExceptFor(ModelState, "Badge.Company", "Badge.Name", "Badge.NickName", "Badge.Location");

            if (ModelState.IsValid)
            {
                var success = AdvisorInfoManager.SaveEventBadgeInfo(FederatedLoginClient.User.UserMasterEntityId, viewModel.AdvisorInformation);
                return(new HttpStatusCodeResult(success ? HttpStatusCode.OK : HttpStatusCode.InternalServerError));
            }
            else
            {
                // Validation error(s) detected on the server side
                var partialView = PartialView("EditorTemplates/Admin.EventBadge", viewModel);
                Response.StatusCode = (int)HttpStatusCode.PartialContent;
                return(partialView);
            }
        }
        public static bool ValidateAdvisorIds(AdvisorInformationViewModel model, ModelStateDictionary modelState)
        {
            if (model.ListAdvisorIds.IsNullOrEmpty())
            {
                return(true);
            }

            for (var i = model.ListAdvisorIds.Count - 1; i >= 0; i--)
            {
                if (model.ListAdvisorIds[i].Id.Contains(","))
                {
                    var ids = model.ListAdvisorIds[i].Id.Split(',');
                    foreach (var id in ids)
                    {
                        var advisorId = new AdvisorIdClass();
                        advisorId.Id     = id.Trim();
                        advisorId.Status = ProfileItemStatus.Insert;
                        model.ListAdvisorIds.Add(advisorId);
                    }
                    model.ListAdvisorIds.Remove(model.ListAdvisorIds[i]);
                }
            }
            for (int i = 0; i < model.ListAdvisorIds.Count; i++)
            {
                var validateName   = string.Format("ListAdvisorIds[{0}].Id", i);
                var validateStatus = string.Format("ListAdvisorIds[{0}].Status", i);
                if (!modelState.ContainsKey(validateName))
                {
                    var state = new ModelState();
                    //state.Value = new ValueProviderResult();
                    modelState.Add(validateName, state);
                    modelState.Add(validateStatus, state);
                }
            }

            var keys = modelState.Keys.Where(k => k.StartsWith("ListAdvisorIds")).ToList();

            keys.ForEach(k => modelState[k].Value = null);

            var availableIds = model.ListAdvisorIds.Where(i => i.Status != ProfileItemStatus.Delete && i.Id.IsNotNullOrEmpty()).ToList();

            if (availableIds.Count == 0)
            {
                return(true);
            }
            var last   = availableIds.Last();
            var exists = false;

            if (availableIds.Count > 1)
            {
                var others = availableIds.Take(availableIds.Count - 1);
                exists = others.Any(i => i.Id.Equals(last.Id, StringComparison.OrdinalIgnoreCase));
            }

            if (exists)
            {
                for (var i = model.ListAdvisorIds.Count - 1; i >= 0; i--)
                {
                    if (model.ListAdvisorIds[i].Id.IsNotNullOrEmpty() && model.ListAdvisorIds[i].Id.Equals(last.Id, StringComparison.OrdinalIgnoreCase))
                    {
                        var validateName = string.Format("ListAdvisorIds[{0}].Id", i);
                        modelState[validateName].Errors.Add("ID numbers must be unique within your agency");
                        return(false);
                    }
                }
            }

            var isValid = true;

            if (!exists)
            {
                for (var i = model.ListAdvisorIds.Count - 1; i >= 0; i--)
                {
                    var id        = model.ListAdvisorIds[i].Id;
                    var advisorId = availableIds.FirstOrDefault(a => a.Id.Equals(id, StringComparison.OrdinalIgnoreCase));
                    if (advisorId != null)
                    {
                        exists = Advisor.AdvisorIdExists(model.AdvisorParentCompanyMasterEntityId, model.AdvisorMasterEntityId, id);
                        if (exists)
                        {
                            isValid = false;
                            var validateName = string.Format("ListAdvisorIds[{0}].Id", i);
                            modelState[validateName].Errors.Add("ID numbers must be unique within your agency");
                        }
                    }
                }
            }

            return(isValid);
        }
        public ActionResult AdminInformationUpdate(AdvisorInformationViewModel viewModel)
        {
            viewModel.LoadSecurity("advisors-admininformationupdate", viewModel);

            // no validation on DBA if not IC
            var editIdType = viewModel.CanView(SecurityConstants.Advisor.EditAdvisorIdType);

            if (viewModel.AdvisorType.TypeId != AdvisorInfoManager.IndependentContractorTypeId && ModelState.ContainsKey("AdvisorDoingBusinessAs"))
            {
                ModelState["AdvisorDoingBusinessAs"].Errors.Clear();
            }

            // no validate on Type for self-edit
            if (!editIdType && ModelState.ContainsKey("AdvisorType.TypeId"))
            {
                ModelState["AdvisorType.TypeId"].Errors.Clear();
            }

            // no validate AdvisorID for self-edit
            if (!editIdType && viewModel.ListAdvisorIds.IsNotNullOrEmpty())
            {
                for (int i = 0; i < viewModel.ListAdvisorIds.Count; i++)
                {
                    var name = string.Format("ListAdvisorIds[{0}].Id", i);
                    if (ModelState.ContainsKey(name))
                    {
                        ModelState[name].Errors.Clear();
                    }
                }
            }

            if (ModelState.ContainsKey("SellingTravelSince"))
            {
                ModelState["SellingTravelSince"].Errors.Clear();
            }

            if (ModelState.ContainsKey("Badge.Company"))
            {
                ModelState["Badge.Company"].Errors.Clear();
            }
            if (ModelState.ContainsKey("Badge.Name"))
            {
                ModelState["Badge.Name"].Errors.Clear();
            }
            if (ModelState.ContainsKey("Badge.NickName"))
            {
                ModelState["Badge.NickName"].Errors.Clear();
            }
            if (ModelState.ContainsKey("Badge.Location"))
            {
                ModelState["Badge.Location"].Errors.Clear();
            }

            var isValid = ModelState.IsValid && AdvisorViewManager.ValidateAdvisorIds(viewModel, ModelState);

            if (isValid)
            {
                var userMasterEntityId = FederatedLoginClient.User.UserMasterEntityId;
                var success            = AdvisorInfoManager.SaveAdminInfo(userMasterEntityId, viewModel.AdvisorInformation, editIdType);
                return(new HttpStatusCodeResult(success ? HttpStatusCode.OK : HttpStatusCode.InternalServerError));
            }
            else
            {
                // Validation error(s) detected on the server side
                var partialView = PartialView("EditorTemplates/Admin.AdvisorInformation", viewModel);
                Response.StatusCode = (int)HttpStatusCode.PartialContent;
                return(partialView);
            }
        }