예제 #1
0
        public static void CreatePriceScripts(PriceMap Map,
                                              SenStayPropertyIndex Units,
                                              StreamlineSeasonGroup Seasons)
        {
            var UnitIDs = Map.GetUnitIDs();

            foreach (var UnitId in UnitIDs)
            {
                var status = UnitPriceStatus.Load(UnitId);
                var prices = Map.GetPricesByUnitFilteredByStatus(
                    UnitId, Units, Seasons, status);

                var scriptCreated = PriceScripting.CreateScript(status, prices, Units, Seasons);
                if (scriptCreated == PriceScripting.ScriptStatus.NOT_CREATED)
                {
                    N.Note("PriceScript for " + UnitId + " NOT created");
                    continue;
                }
                if (scriptCreated == PriceScripting.ScriptStatus.NOT_UPDATED)
                {
                    //N.Note("PriceScript for " + UnitId + " NOT updated");
                    continue;
                }
                N.Note("PriceScript for " + UnitId + " created");
                status.TimeStamp = DateTime.UtcNow;
                status.Save();
            }
        }
예제 #2
0
        public static void ProcessSourceFile(FileInfo File,
                                             SenStayPropertyIndex Units,
                                             StreamlineSeasonGroup Seasons,
                                             PriceMap map)
        {
            N.Note("Parsing " + File.FullName);
            var priceData = CSVReader.Read4columnCSV(File.FullName);

            ExtractMap(map, priceData);
            //Temp.MoveToDirectory(File, Config.I.PriceOldSourceDirectory);
            N.Note("Moving source to the archive " + File.FullName);
        }
예제 #3
0
        public static ScriptStatus CreateScript(
            UnitPriceStatus Status,
            FilteredPriceMap Prices,
            SenStayPropertyIndex Units,
            StreamlineSeasonGroup Seasons)
        {
            var script = new PriceScript()
            {
                UnitId = Status.Unit
            };
            var unitInfo = Units.GetBySenStayID(Status.Unit);

            if (unitInfo == null)
            {
                return(ScriptStatus.NOT_CREATED);
            }

            script.StreamlineEditId = unitInfo.StreamlineEditID;

            if (Status.IsNew)
            {
                script.Commands.Add(
                    new PriceScriptCommand()
                {
                    Type             = PriceScriptCommand.TYPE_SEASON_GROUP,
                    SeasonGroupID    = Seasons.ID,
                    StreamlineEditId = unitInfo.StreamlineEditID
                }
                    );
            }

            foreach (var p in Prices.Values)
            {
                script.Commands.Add(
                    new PriceScriptCommand()
                {
                    Type     = PriceScriptCommand.TYPE_PRICE,
                    Price    = p.Price,
                    SeasonId = p.SeasonId
                }
                    );
            }

            script.Generated = DateTime.UtcNow;
            if (script.Commands.Count > 0)
            {
                script.Save();
                return(ScriptStatus.CREATED);
            }
            return(ScriptStatus.NOT_UPDATED);
        }
예제 #4
0
        public FilteredPriceMap GetPricesByUnitFilteredByStatus(
            string SenStayID,
            SenStayPropertyIndex Units,
            StreamlineSeasonGroup Seasons,
            UnitPriceStatus Status)
        {
            if (!Data.ContainsKey(SenStayID))
            {
                return(null);
            }
            var prices = Data[SenStayID];

            var NewsetTimestamp = Status.LastSyncTimeStamp;
            var list            = new FilteredPriceMap();

            foreach (var p in prices)
            {
                if (p.Tiemstamp <= Status.LastSyncTimeStamp)
                {
                    continue;
                }
                var key = p.GetKey();

                if (p.Tiemstamp > NewsetTimestamp)
                {
                    NewsetTimestamp = p.Tiemstamp;
                }

                var item = PriceProcesser.Convert(p, Units, Seasons);
                if (item == null)
                {
                    continue;
                }

                if (list.ContainsKey(key))
                {
                    if (list[key].TimeStamp < p.Tiemstamp)
                    {
                        list[key] = PriceProcesser.Convert(p, Units, Seasons);
                    }
                }
                else
                {
                    list.Add(key, PriceProcesser.Convert(p, Units, Seasons));
                }
            }
            Status.LastSyncTimeStamp = NewsetTimestamp;
            return(list);
        }
예제 #5
0
        public List <AdoptedDailyPrice> GetPricesByUnit(string SenStayID, SenStayPropertyIndex Units,
                                                        StreamlineSeasonGroup Seasons)
        {
            if (!Data.ContainsKey(SenStayID))
            {
                return(null);
            }
            var prices = Data[SenStayID];

            var list = new List <AdoptedDailyPrice>();

            foreach (var p in prices)
            {
                var item = PriceProcesser.Convert(p, Units, Seasons);
                if (item != null)
                {
                    list.Add(item);
                }
            }
            return(list);
        }
예제 #6
0
        public static void ParseFolder(string Path)
        {
            var seasons = StreamlineSeasonGroup.Load();
            var streamlineCollection = StreamlinePropertyCollection.Load();
            var units = streamlineCollection.CreateIndex();
            var map   = new PriceMap();
            var files = Temp.GetFileList(@"*.csv", Path);

            foreach (var file in files)
            {
                ProcessSourceFile(file, units, seasons, map);
            }

            CreatePriceScripts(map, units, seasons);


            var airbnbRooms = AirBnbRoomMap.Load();

            PropertyMap.SetMap(airbnbRooms, streamlineCollection);
            CreateAirbnbNY022(map, airbnbRooms);
        }
예제 #7
0
        public static AdoptedDailyPrice Convert(DailyPrice p, SenStayPropertyIndex Units, StreamlineSeasonGroup Seasons)
        {
            var season = Seasons.GetSeasonByDay(p.Month, p.Day);
            var unit   = Units.GetBySenStayID(p.UnitSenStayID);

            if (unit == null || season == null)
            {
                return(null);
            }
            return(new AdoptedDailyPrice
            {
                UnitStrreamlineEditId = unit.StreamlineEditID,
                Price = p.Price,
                SeasonId = season.ID,
                TimeStamp = p.Tiemstamp
            });
        }
        public static void ScrapeSeasons(IWebDriver driver, string groupId)
        {
            var URL = @"https://www.resortpro.net/new/admin/index.html";

            driver.GoTo(URL);

            var wait = driver.CreateWaitDriver();

            //<div id="dock-container"
            var dockContainerElement = driver.FindElement(By.Id("dock-container"));

            //<a href="javascript:YAHOO.frontdesk.UpdateContentCached('menu_configuration.html', 'dedicated=1')"
            var configurationLinkElement =
                dockContainerElement.FindAByHrefStartsWith(
                    "javascript:YAHOO.frontdesk.UpdateContentCached('menu_configuration.html',");

            configurationLinkElement.Click();

            driver.JustWait(1);

            //<div id="menuExpandedContainer">
            var menuExpandedContainerElement = driver.FindElement(By.Id("menuExpandedContainer"));

            //<a href="javascript:YAHOO.frontdesk.UpdateContent('general_homes.html', 'lodging_type_id=3&amp;status_id=2');">Vacation Rentals (170)</a>
            var vacationRentalsElement =
                menuExpandedContainerElement.FindAByHrefStartsWith(
                    "javascript:YAHOO.frontdesk.UpdateContent('general_homes.html',");

            vacationRentalsElement.Click();

            driver.JustWait(1);

            var seasonsButton = driver.FindElementByCssSelector("[value=\"SEASONS\"]");

            seasonsButton.Click();
            wait.CssSelector("[name=\"pages_groups_button\"]");
            driver.JustWait(1);

            var groupsButton = driver.FindElementByCssSelector("[name=\"pages_groups_button\"]");

            groupsButton.Click();
            wait.CssSelector("[value=\"Add Season Group\"]");
            driver.JustWait(1);
            //name="pages_groups_button"


            var Sucess           = false;
            var seasonGroupAList =
                driver.FindElements(
                    By.CssSelector(
                        "a[onclick^=\"javascript:YAHOO.frontdesk.UpdateContent('general_companies_seasons.html',\"]"));

            foreach (var seasonGroupA in seasonGroupAList)
            {
                var onClickAttr = seasonGroupA.GetAttribute("onclick");
                if (onClickAttr.Contains(groupId))
                {
                    seasonGroupA.Click();
                    Sucess = true;
                    break;
                }
            }
            if (!Sucess)
            {
                return;
            }

            driver.JustWait(10);
            wait.CssSelector("[name=\"button_view_all\"]");
            driver.JustWait(1);

            var ViewAllButton = driver.FindElementByCssSelector("[name=\"button_view_all\"]");

            ViewAllButton.Click();
            wait.CssSelector("[name=\"pages_groups_button\"]");

            driver.JustWait(10);

            var basetableElement = driver.FindElement(By.CssSelector(".basetable.fixedHeader"));
            var trs = basetableElement.FindElements(By.TagName("tr"));

            var i           = 0;
            var SeasonGroup = new StreamlineSeasonGroup();

            SeasonGroup.ID = groupId.ExtractNumber();

            foreach (var tr in trs)
            {
                //var editLinkElement = tr.FindElement(By.CssSelector("a[onclick^=\"javascript:EditCompanySeason(\"]"));
                var editLinkElement = tr.FindTagByAttributeStartsWith("a", "onclick", "javascript:EditCompanySeason(");
                if (editLinkElement == null)
                {
                    //Console.WriteLine("ERROR");
                    continue;
                }
                i++;

                var tds    = tr.FindElements(By.CssSelector("td[align=\"left\"]"));
                var nameTd = tds[0];

                var hrefAttr = editLinkElement.GetAttribute("onclick");

                var SeasonID   = hrefAttr.ExtractNumber();
                var SeasonName = nameTd.Text;

                SeasonGroup.Add(SeasonID, SeasonName);

                Console.WriteLine("Season " + SeasonName + " processed");

                //if (i > 5) break;
            }

            SeasonGroup.Save();
        }