public IHttpActionResult GetClientFunding(int id, int fundingId)
        {
            //if user is not admin return..
            var    identity = User.Identity as ClaimsIdentity;
            string userRole = identity.FindFirst(ClaimTypes.Role).Value;
            int    userId   = int.Parse(identity.FindFirst(ClaimTypes.SerialNumber).Value);

            if (userRole != "admin" && userId != id)
            {
                //ModelState.AddModelError("InvalidAccess", "You are not authorized !");
                return(BadRequest("UnauthorizedAccess"));
            }

            ClientFundingDetails clientFundingDetails = new ClientFundingDetails();

            ClientFunding clientFunding = new ClientFunding();

            foreach (AssetAllocationMaster assetMaster in db.AssetAllocationMasters.ToList <AssetAllocationMaster>())
            {
                clientFundingDetails.riskProfiles.Add(new RiskProfileTypes
                {
                    RiskProfileType = assetMaster.RiskProfileType,
                    DisplayField    = assetMaster.DisplayField
                });
            }

            AppUser user = AppUser.GetById(id);

            clientFundingDetails.user = new AppUserBasicData();

            clientFundingDetails.user.UserEmail       = user.UserEmail;
            clientFundingDetails.user.FirstName       = user.FirstName;
            clientFundingDetails.user.LastName        = user.LastName;
            clientFundingDetails.user.DOB             = user.DOB;
            clientFundingDetails.user.SpouseFirstName = user.SpouseFirstName;
            clientFundingDetails.user.SpouseLastName  = user.SpouseLastName;
            clientFundingDetails.user.SpouseDOB       = user.SpouseDOB;

            if (fundingId == 0)
            {
                clientFundingDetails.funding = clientFunding.GetLatestClientFunding(clientFundingDetails.user.UserEmail);
            }
            else
            {
                clientFundingDetails.funding = clientFunding.GetByFundingId(fundingId);

                AssetAllocationMaster assetAllocationMaster = db.AssetAllocationMasters.Find(clientFundingDetails.funding.RiskProfile);

                clientFundingDetails.funding.ExpectedAttractiveAssets = assetAllocationMaster.AttractiveAssets;
                clientFundingDetails.funding.ExpectedAusFixedInterest = assetAllocationMaster.AusFixedInterest;
                clientFundingDetails.funding.ExpectedAusShares        = assetAllocationMaster.AusShares;
                clientFundingDetails.funding.ExpectedCash             = assetAllocationMaster.Cash;
                clientFundingDetails.funding.ExpectedIntFixedInterest = assetAllocationMaster.IntFixedInterest;
                clientFundingDetails.funding.ExpectedIntShares        = assetAllocationMaster.IntShares;
                clientFundingDetails.funding.ExpectedProperty         = assetAllocationMaster.Property;

                ProjectedData projections = new ProjectedData();
                clientFundingDetails.listProjectedData = projections.GetProjectedDataByClientId(id);
                ProjectedData clientExpectedProjectData = clientFundingDetails.listProjectedData.Find(i => i.Year == clientFundingDetails.funding.FundingYear);

                if (clientExpectedProjectData != null)
                {
                    clientFundingDetails.ExpectedTotalFund = clientExpectedProjectData.Value;
                }
                else
                {
                    clientFundingDetails.ExpectedTotalFund = 0;
                }
            }
            if (clientFundingDetails.funding == null)
            {
                return(NotFound());
            }

            return(Ok(clientFundingDetails));
        }