public JsonResult Incluir(ClienteModel model)
        {
            BoCliente      bo             = new BoCliente();
            BoValidarCPF   boValidarCPF   = new BoValidarCPF();
            BoBeneficiario boBeneficiario = new BoBeneficiario();

            if (!this.ModelState.IsValid)
            {
                List <string> erros = (from item in ModelState.Values
                                       from error in item.Errors
                                       select error.ErrorMessage).ToList();

                Response.StatusCode = 400;
                return(Json(string.Join(Environment.NewLine, erros)));
            }
            else
            {
                if (!boValidarCPF.ValidaCPF(model.CPF))
                {
                    Response.StatusCode = 400;
                    return(Json(string.Join(Environment.NewLine, "Este não é um CPF valido!")));
                }

                if (bo.VerificarExistencia(model.CPF))
                {
                    Response.StatusCode = 400;
                    return(Json(string.Join(Environment.NewLine, "Este CPF ja esta em uso!")));
                }

                model.Id = bo.Incluir(new Cliente()
                {
                    CEP           = model.CEP,
                    CPF           = model.CPF,
                    Cidade        = model.Cidade,
                    Email         = model.Email,
                    Estado        = model.Estado,
                    Logradouro    = model.Logradouro,
                    Nacionalidade = model.Nacionalidade,
                    Nome          = model.Nome,
                    Sobrenome     = model.Sobrenome,
                    Telefone      = model.Telefone
                });

                if (!string.IsNullOrEmpty(model.Beneficiarios))
                {
                    List <BeneficiarioModel> beneficiarios = JsonConvert.DeserializeObject <List <BeneficiarioModel> >(model.Beneficiarios);

                    var result = ManipulaBeneficiarios(beneficiarios, model.Id);

                    if (!string.IsNullOrEmpty(result))
                    {
                        Response.StatusCode = 400;
                        return(Json(string.Join(Environment.NewLine, result)));
                    }
                }

                return(Json("Cadastro efetuado com sucesso"));
            }
        }
        public string ManipulaBeneficiarios(List <BeneficiarioModel> beneficiarios, long clienteId)
        {
            BoBeneficiario           boBeneficiario       = new BoBeneficiario();
            BoValidarCPF             boValidarCPF         = new BoValidarCPF();
            List <BeneficiarioModel> beneficiarioAlterado = new List <BeneficiarioModel>();
            List <long> beneficiariosModelIds             = new List <long>();
            List <long> beneficiariosDelIds = new List <long>();
            List <long> beneficiariosIds    = new List <long>();

            List <Beneficiario> listBeneficiarios = new BoBeneficiario().Pesquisar(clienteId);

            beneficiarios.ForEach(item => beneficiariosModelIds.Add(item.Id));
            beneficiarioAlterado = beneficiarios.Where(w => w.Alterado).ToList();

            if (listBeneficiarios.Count > 0)
            {
                beneficiariosDelIds = listBeneficiarios.Where(w => !beneficiariosModelIds.Contains(w.Id)).Select(x => x.Id).ToList();
                beneficiariosIds    = listBeneficiarios.Where(w => beneficiariosModelIds.Contains(w.Id)).Select(x => x.Id).ToList();
            }

            if (beneficiariosDelIds.Count > 0)
            {
                beneficiariosDelIds.ForEach(id => boBeneficiario.Excluir(id));
            }
            if (beneficiarios.Count > 0)
            {
                beneficiarioAlterado.ForEach(
                    beneficiario => boBeneficiario.Alterar(
                        new Beneficiario()
                {
                    Id        = beneficiario.Id,
                    IdCliente = beneficiario.IdCliente,
                    Nome      = beneficiario.Nome,
                    CPF       = beneficiario.CPF
                }
                        )
                    );
            }

            foreach (var beneficiario in beneficiarios)
            {
                if (!beneficiariosIds.Contains(beneficiario.Id))
                {
                    if (!boValidarCPF.ValidaCPF(beneficiario.CPF))
                    {
                        return($"Este não é um CPF valido: {beneficiario.CPF}");
                    }

                    if (boBeneficiario.VerificarExistencia(beneficiario.CPF))
                    {
                        return($"Este CPF ja esta em uso: {beneficiario.CPF}");
                    }

                    beneficiario.Id = boBeneficiario.Incluir(new Beneficiario()
                    {
                        IdCliente = clienteId,
                        Nome      = beneficiario.Nome,
                        CPF       = beneficiario.CPF
                    });
                }
            }

            return("");
        }