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(); } }
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); }
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); }
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); }
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); }
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); }
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&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(); }