internal bool UpdateIllustrationStatus(UpdateStatusViewModel model)
        {
            IllustrationDetail illustration = _context.IllustrationDetails.First(x => x.IllustrationUniqueReference == model.UniqueReferenceId);

            if (illustration.Status.ToLower() == "chased" & (model.Status == "Accepted" || model.Status == "Deleted"))
            {
                illustration.Status = model.Status;
            }

            if (illustration.Status.ToLower() == "created" & (model.Status == "Deleted" || model.Status == "Chased" || model.Status == "Accepted"))
            {
                illustration.Status = model.Status;
            }
            if (illustration.Status.ToLower() == "accepted" & model.Status == "Deleted")
            {
                illustration.Status = model.Status;
            }

            illustration.Comment    = model.Comment;
            illustration.ReferredBy = model.ReferredBy;
            bool isSaved = false;

            try {
                _context.SaveChanges();
                isSaved = true;
            }
            catch
            {
            }
            return(isSaved);
        }
        internal IllustrationDetailViewModel GetIllustrationByUniqueReferenceId(string uniqueReferenceID)
        {
            /*
             * Get illustration from unique reference id from db
             * Arguments:-
             *  Unique Reference ID
             * Return:-
             *  Illustration DetailViewModel
             */
            IllustrationDetail dbIllustration = _context.IllustrationDetails.Include(x => x.IllustrationProposedPortfolio).FirstOrDefault(x => x.IllustrationUniqueReference == uniqueReferenceID);
            //map db entity to view model ProposedPortfolio. Investment count is 0 after Mapping
            IllustrationDetailViewModel result = _mapper.Map <IllustrationDetailViewModel>(dbIllustration);

            result.ProposedPortfolio = new Insignis.Asset.Management.Tools.Sales.SCurveOutput();



            foreach (var item in dbIllustration.IllustrationProposedPortfolio)
            {
                Insignis.Asset.Management.Tools.Sales.SCurveOutputRow   row  = new Insignis.Asset.Management.Tools.Sales.SCurveOutputRow();
                Insignis.Asset.Management.Clients.Helper.InvestmentTerm term = new Insignis.Asset.Management.Clients.Helper.InvestmentTerm();
                row.AnnualInterest          = item.AnnualInterest;
                row.DepositSize             = item.DepositSize;
                row.InstitutionName         = item.InstitutionName;
                row.Rate                    = item.Rate;
                row.InvestmentTerm          = term;
                row.InvestmentTerm.TermText = item.InvestmentTerm;
                row.InstitutionShortName    = item.InstitutionShortName;

                result.ProposedPortfolio.ProposedInvestments.Add(row);
            }


            CalculateInterest(result);

            return(result);
        }
        internal bool SaveIllustraionAsync(IllustrationDetailViewModel model)
        {
            //check for existence
            bool exits = _context.IllustrationDetails.Any(x => x.IllustrationUniqueReference == model.IllustrationUniqueReference);
            var  illustrationDetail = new IllustrationDetail();

            if (exits)
            {
                illustrationDetail = _context.IllustrationDetails.FirstOrDefault(x => x.IllustrationUniqueReference == model.IllustrationUniqueReference);

                //illustrationDetail.AdviserName = model.AdviserName;
                illustrationDetail.ClientName = model.ClientName;
                illustrationDetail.ClientType = model.ClientType;

                illustrationDetail.Currency     = model.Currency;
                illustrationDetail.EasyAccess   = Convert.ToDouble(model.EasyAccess);
                illustrationDetail.GenerateDate = model.GenerateDate;



                illustrationDetail.NineMonths          = Convert.ToDouble(model.NineMonths);
                illustrationDetail.OneMonth            = Convert.ToDouble(model.OneMonth);
                illustrationDetail.OneYear             = Convert.ToDouble(model.OneYear);
                illustrationDetail.PartnerEmail        = model.PartnerEmail;
                illustrationDetail.PartnerName         = model.PartnerName;
                illustrationDetail.PartnerOrganisation = model.PartnerOrganisation;
                illustrationDetail.ReferredBy          = model.ReferredBy;
                illustrationDetail.SixMonths           = Convert.ToDouble(model.SixMonths);
                illustrationDetail.Status         = model.Status;
                illustrationDetail.ThreeMonths    = Convert.ToDouble(model.ThreeMonths);
                illustrationDetail.ThreeYearsPlus = Convert.ToDouble(model.ThreeYearsPlus);
                illustrationDetail.TotalDeposit   = Convert.ToDouble(model.TotalDeposit);
                illustrationDetail.TwoYears       = Convert.ToDouble(model.TwoYears);



                illustrationDetail.Status = "Created";
                //Save interests
                illustrationDetail.AnnualGrossInterestEarned     = model.ProposedPortfolio.AnnualGrossInterestEarned;
                illustrationDetail.AnnualNetInterestEarned       = model.ProposedPortfolio.AnnualNetInterestEarned;
                illustrationDetail.GrossAverageYield             = model.ProposedPortfolio.GrossAverageYield;
                illustrationDetail.NetAverageYield               = model.ProposedPortfolio.GrossAverageYield;
                illustrationDetail.IllustrationProposedPortfolio = new List <ProposedPortfolio>();
                foreach (var item in model.ProposedPortfolio.ProposedInvestments)
                {
                    ProposedPortfolio folio = new ProposedPortfolio();
                    folio.InvestmentTerm       = item.InvestmentTerm.TermText;
                    folio.AnnualInterest       = item.AnnualInterest;
                    folio.DepositSize          = item.DepositSize;
                    folio.IllustrationID       = model.Id;
                    folio.InstitutionID        = item.InstitutionID;
                    folio.InstitutionName      = item.InstitutionName;
                    folio.InstitutionShortName = item.InstitutionShortName;
                    folio.Rate = item.Rate;
                    illustrationDetail.IllustrationProposedPortfolio.Add(folio);
                }
            }
            else
            {
                illustrationDetail        = _mapper.Map <IllustrationDetailViewModel, IllustrationDetail>(model);
                illustrationDetail.Status = "Created";
                //Save interests
                illustrationDetail.AnnualGrossInterestEarned     = model.ProposedPortfolio.AnnualGrossInterestEarned;
                illustrationDetail.AnnualNetInterestEarned       = model.ProposedPortfolio.AnnualNetInterestEarned;
                illustrationDetail.GrossAverageYield             = model.ProposedPortfolio.GrossAverageYield;
                illustrationDetail.NetAverageYield               = model.ProposedPortfolio.GrossAverageYield;
                illustrationDetail.IllustrationProposedPortfolio = new List <ProposedPortfolio>();
                foreach (var item in model.ProposedPortfolio.ProposedInvestments)
                {
                    ProposedPortfolio folio = new ProposedPortfolio();
                    folio.InvestmentTerm       = item.InvestmentTerm.TermText;
                    folio.AnnualInterest       = item.AnnualInterest;
                    folio.DepositSize          = item.DepositSize;
                    folio.IllustrationID       = model.Id;
                    folio.InstitutionID        = item.InstitutionID;
                    folio.InstitutionName      = item.InstitutionName;
                    folio.InstitutionShortName = item.InstitutionShortName;
                    folio.Rate = item.Rate;
                    illustrationDetail.IllustrationProposedPortfolio.Add(folio);
                }
                _context.IllustrationDetails.Add(illustrationDetail);
            }

            _context.SaveChanges();
            var IsSave = true;

            return(IsSave);
        }