public int SeedCompaniesFromFareHarbor()
        {
            var tmContext = new TravelMindedContext();

            if (tmContext.Companies.Any())
            {
                foreach (var exper in tmContext.Companies.ToList())
                {
                    tmContext.Companies.Remove(exper);
                }
                var recCount = tmContext.SaveChanges();

                //throw new Exception("There are already companies in the database.");
            }

            var fareHarborSvc = FareHarborService.FareHarborRestServiceFactory.CreateFareHarborRestService();

            var fareHarborCompanies = fareHarborSvc.GetCompanies();

            var fareHarborCompaniesDetails = new List <FareHarborService.Models.CompanyDetail>();

            foreach (var fhCo in fareHarborCompanies)
            {
                var companyDetail = fareHarborSvc.GetCompany(fhCo.ShortName);

                var dbCo = mapper.Map <DbModel.Company>(companyDetail);
                dbCo.IsFareHarborVendor = true;

                tmContext.Add(dbCo);
            }

            var recordsSaved = tmContext.SaveChanges();

            return(recordsSaved);
        }
        public int SeedExperiencesFromFareHarbor()
        {
            var tmContext = new TravelMindedContext();

            if (tmContext.Experiences.Any())
            {
                foreach (var exper in tmContext.Experiences.ToList())
                {
                    tmContext.Experiences.Remove(exper);
                }
                var recCount = tmContext.SaveChanges();
                //throw new Exception("There are already experiences i nthe database.");
            }

            var fareHarborSvc = FareHarborService.FareHarborRestServiceFactory.CreateFareHarborRestService();

            var companies = tmContext.Companies.Where(c => c.IsFareHarborVendor).ToList();

            var allExperiences = new List <IExperience>();

            var dbList = new List <DbModel.Experience>();


            Parallel.ForEach(companies, co =>
            {
                var fareHarborExperiences = fareHarborSvc.GetComanyItems(co.ShortName);

                Parallel.ForEach(fareHarborExperiences, fa =>
                {
                    var dbExperience     = mapper.Map <DbModel.Experience>(fa);
                    dbExperience.Company = co;

                    dbList.Add(dbExperience);
                });
            });

            tmContext.Experiences.AddRange(dbList);

            //foreach (var company in companies)
            //{
            //    var fareHarborExperiences = fareHarborSvc.GetComanyItems(company.ShortName);

            //    foreach (var companyExperience in fareHarborExperiences)
            //    {
            //        var dbExperience = mapper.Map<DbModel.Experience>(companyExperience);
            //        dbExperience.Company = company;

            //        tmContext.Experiences.Add(dbExperience);
            //    }
            //}

            var recordsSaved = tmContext.SaveChanges();

            return(recordsSaved);
        }
        public int SeedAvailabilitiesFromFareHarbor()
        {
            var tmContext = new TravelMindedContext();

            //if (tmContext.Availabilities.Any())
            //{
            //    foreach (var available in tmContext.Availabilities.ToList())
            //    {
            //        tmContext.Availabilities.Remove(available);
            //    }
            //    var recCount = tmContext.SaveChanges();
            //    //throw new Exception("There are already experiences in the database.");
            //}

            var fareHarborSvc = FareHarborService.FareHarborRestServiceFactory.CreateFareHarborRestService();

            var companies = tmContext.Companies.Where(c => c.IsFareHarborVendor).ToList();

            var allExperiences = new List <IExperience>();
            var recordsSaved   = 0;

            foreach (var company in companies)
            {
                var companyExperiences = tmContext.Experiences.Where(e => e.Company.Equals(company)).ToList();

                var dbAvailList = new List <DbModel.Availability>();

                Parallel.ForEach(companyExperiences, companyExperience =>
                {
                    var availabilities = new List <IAvailability>();

                    var items = new List <IAvailability>();

                    DateTime targetDt = DateTime.Now;

                    var datesList = new List <DateTime>
                    {
                        targetDt
                    };

                    while (targetDt < DateTime.Now.AddDays(30))
                    {
                        targetDt = targetDt.AddDays(1);
                        datesList.Add(targetDt);
                    }

                    Parallel.ForEach(datesList, target =>
                    {
                        var expAvailabilities = fareHarborSvc.GetExperienceAvailabilities(company.ShortName, companyExperience.Pk, targetDt);
                        if (expAvailabilities.Any())
                        {
                            // Check the experience duration, make sure its set
                            // use the first availablility as needed.
                            if (companyExperience.Duration == 0)
                            {
                                var firstAvail = expAvailabilities.FirstOrDefault();

                                var parsedStart = DateTime.Parse(firstAvail.StartAt);
                                var parsedEnd   = DateTime.Parse(firstAvail.EndAt);

                                var duration = parsedEnd - parsedStart;
                                companyExperience.Duration = Convert.ToInt32(duration.TotalMinutes);
                            }

                            foreach (var fhExp in expAvailabilities)
                            {
                                var dbAvailability        = mapper.Map <DbModel.Availability>(fhExp);
                                dbAvailability.Experience = companyExperience;

                                dbAvailList.Add(dbAvailability);
                            }
                        }
                    });
                });

                tmContext.Availabilities.AddRange(dbAvailList);
            }
            ;



            recordsSaved += tmContext.SaveChanges();

            return(recordsSaved);
        }