/// <summary>
        /// Get statements from data provider and insert it to database.
        /// </summary>
        /// <param name="simId">The sim identifier.</param>
        /// <returns></returns>
        public async Task <bool> UpdateStatements(string simId)
        {
            if (simId.IsNullOrWhiteSpace())
            {
                return(false);
            }

            var cd = _hcl.GetCompanyDetails(simId);

            if (cd.LastUpdate != null && ((TimeSpan)(DateTime.Now - cd.LastUpdate)).Days < 30)
            {
                return(true);
            }

            var companyFinancials = await ObtainCompanyFinancilasAsync(simId);

            if (companyFinancials == null || companyFinancials.Count == 0)
            {
                return(false);
            }
            var cfMdl   = new List <CompanyFinancialsMd>();
            var oldcfML = _dbconCompany.Get(o => o.SimId.Equals(simId)).ToList();

            foreach (var(companyFinancial, oldcf) in from companyFinancial in companyFinancials
                     let oldcf = oldcfML.Where(o => o.SimId.Equals(companyFinancial.SimId) &&
                                               o.FYear == companyFinancial.FYear &&
                                               o.Statement == companyFinancial.Statement).FirstOrDefault()
                                 select(companyFinancial, oldcf))
            {
                cfMdl.Add(new CompanyFinancialsMd(companyFinancial));
                if (oldcf != null)
                {
                    cfMdl.Last().Id = oldcf.Id;
                }
            }

            try
            {
                var returnValue = await _dbconCompany.UpdateMultiple(cfMdl);

                if (returnValue == false)
                {
                    return(false);
                }
                await RemoveUnwantedRecords(cfMdl, oldcfML);

                returnValue = await _hcl.UpdateCompanyDetailAsync(simId, cfMdl.First().IndustryTemplate);

                return(returnValue);
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error in method HandleFinacials:UpdateStatments\n{ex.Message}");
                return(false);
            }
        }
        public async Task <List <CompanyDetail> > GetAllCompaniesAsync()
        {
            var tmpList = await _dlf.GetCompanyList();

            allCompanies = new List <CompanyDetailMd>();
            var dbCompanies = _dbconCompany.Get().ToList();

            if (dbCompanies.Count() < 100 || dbCompanies.Where(x => x.IndustryTemplate.IsNullOrWhiteSpace()).Count() < 20)
            {
                var deleteStatus = await _dbconCompany.RemoveAll();

                if (deleteStatus == false)
                {
                    return(null);
                }
            }
            dbCompanies = _dbconCompany.Get().ToList();
            if (tmpList == null)
            {
                return(Mapper.Map <List <CompanyDetailMd>, List <CompanyDetail> >(dbCompanies));
            }
            foreach (var company in tmpList)
            {
                var dbCompany = dbCompanies.Where(x => x.SimId == company.SimId).FirstOrDefault();
                if (dbCompany != null)
                {
                    dbCompany.Name   = company.Name;
                    dbCompany.Ticker = company.Ticker;
                    allCompanies.Add(dbCompany);
                }
                else
                {
                    allCompanies.Add(new CompanyDetailMd(company));
                }
            }
            var insertStatus = await _dbconCompany.UpdateMultiple(allCompanies);

            if (insertStatus)
            {
                var listOfAllCompanies = Mapper.Map <List <CompanyDetailMd>, List <CompanyDetail> >(allCompanies);
                return(listOfAllCompanies);
            }
            return(null);
        }