private static void AddPreSale(Model.ManheimEntities manheimModel, Model.Auction auctionEntity, DateTime saleDate, WC.TableCellCollection tds, string vin, WC.IE vehicleInfoIE) { var rightContent = vehicleInfoIE.Div("rightContent"); #region Vehicle #region Grade var grade = 0.0; var lastColumn = rightContent.Div(WC.Find.ByClass("lastColumn")); if (lastColumn.Exists) { var gradeLink = lastColumn.Link(WC.Find.ByText(new Regex("Grade"))); if (gradeLink.Exists) { double.TryParse(Regex.Replace(gradeLink.Text, @"[^\d.]", ""), out grade); } } #endregion var mmrElement = vehicleInfoIE.Link("mmrHover"); int mmrPrice = 0; if (mmrElement.Exists) { int.TryParse(mmrElement.Text, NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol, NumberFormatInfo.CurrentInfo, out mmrPrice); } var div = vehicleInfoIE.Div(new Regex("vdpTab_detail-1")); var table = div.Tables.First(); if (table != null) { var vehicleEntity = manheimModel.Vehicles.SingleOrDefault(v => v.VIN == vin); if (vehicleEntity == null) { vehicleEntity = SetVehicle(table); vehicleEntity.Grade = grade; manheimModel.Vehicles.Add(vehicleEntity); } else { UpdateVehicle(vehicleEntity, table); } vehicleEntity.MMR = mmrPrice; manheimModel.SaveChanges(); #endregion #region Seller var sellerElement = rightContent.Div(WC.Find.ByClass("firstColumn")).ElementWithTag("li", WC.Find.First()); var sellerName = sellerElement.Exists ? sellerElement.Text : ""; var sellerEntity = manheimModel.Sellers.SingleOrDefault(s => s.Name == sellerName); if (sellerEntity == null) { sellerEntity = new Model.Seller() { Name = sellerName }; manheimModel.Sellers.Add(sellerEntity); manheimModel.SaveChanges(); } #endregion #region PreSale var preSale = new Model.PreSale() { Ln = int.Parse(tds[0].Text.Split('-')[0]), Run = int.Parse(tds[0].Text.Split('-')[1]), SaleDate = saleDate }; lock (auctionEntity) { preSale.Vehicle = vehicleEntity; preSale.Auction = auctionEntity; preSale.Seller = sellerEntity; manheimModel.PreSales.Add(preSale); } #endregion manheimModel.SaveChanges(); } }
private void GetAllVehiclesForTheDay(string state, string auctionName, string listAllLink) { var there = false; while (!there) { try { Browser.GoTo(listAllLink.Replace("standard", "enhanced")); there = true; } catch (WC.Exceptions.TimeoutException) { } } var dataTable = Browser.ElementOfType <WC.Table>(WC.Find.ByClass("dataTable")); if (!dataTable.Exists) { return; } var dataHeader = dataTable.ChildWithTag("thead", WC.Find.Any).AsElementContainer(); var trHeader = dataHeader.ElementsOfType <WC.TableRow>().First(); foreach (var cell in trHeader.ChildrenWithTag("th")) { Debug.WriteLine(Regex.Replace(cell.Text, @"[\W]", "")); } var dataBody = dataTable.TableBody(WC.Find.Any); var manheimModel = new Manheim.Model.ManheimEntities(dbPath); var stateEntity = manheimModel.States.Where(s => s.Name == state).SingleOrDefault(); if (stateEntity == null) { Log = new Exception("State " + state + " is not found."); return; } var mainColumn = Browser.Divs.Filter(WC.Find.ById("mainColumn")).Single(); #region Get Manager Model.Manager managerEntity = null; var para = mainColumn.Para(p => p.Children().Select(c => c.TagName).DefaultIfEmpty("").First() == "B"); if (para != null) { var b = para.Children().First(); var managerName = b.Exists && b.TextAfter.Contains("-") ? b.Text.Trim() : ""; managerEntity = manheimModel.Managers.SingleOrDefault(m => m.Name == managerName); if (managerEntity == null && !string.IsNullOrEmpty(managerName)) { var managerTitle = b.Exists ? b.TextAfter.Split('-')[1].Trim() : ""; b = b.Exists ? b.NextSibling : b; var phoneFaxMail = b.Exists ? b.TextAfter.Split(';') : new string[0]; var phone = phoneFaxMail.Length > 0 ? phoneFaxMail[0].Split(':')[1].Trim() : ""; var fax = phoneFaxMail.Length > 1 ? phoneFaxMail[1].Split(':')[1].Trim() : ""; var email = b.Exists ? b.NextSibling.Text.Trim() : ""; managerEntity = new Model.Manager() { Name = managerName, Title = managerTitle, Phone = phone, Fax = fax, Email = email }; manheimModel.Managers.Add(managerEntity); manheimModel.SaveChanges(); } } else { managerEntity = manheimModel.Managers.SingleOrDefault(m => m.Name == ""); if (managerEntity == null) { managerEntity = new Model.Manager() { Email = "", Fax = "", Phone = "", Title = "", Name = "" }; manheimModel.Managers.Add(managerEntity); manheimModel.SaveChanges(); } } #endregion #region Get Auction var auctionEntity = manheimModel.Auctions.SingleOrDefault(a => a.Name == auctionName); if (auctionEntity == null) { auctionEntity = new Model.Auction() { Name = auctionName, State = stateEntity, PreSaleManager = managerEntity }; manheimModel.Auctions.Add(auctionEntity); manheimModel.SaveChanges(); } #endregion var saleDateText = mainColumn.ElementWithTag("h4", WC.Find.ByText(new Regex(@"\d{2}/\d{2}/\d{4}"))).Text.Split('-')[0].Trim(); DateTime saleDate; if (!DateTime.TryParse(saleDateText, out saleDate)) { Log = new Exception("Sale date not found for " + auctionName + " in " + state); return; } #region if(false)Delete by SaleDate var md = ((IObjectContextAdapter)manheimModel).ObjectContext.MetadataWorkspace; var item = md.GetItems(DataSpace.CSpace); item = md.GetItems(DataSpace.CSSpace); item = md.GetItems(DataSpace.OCSpace); item = md.GetItems(DataSpace.OSpace); item = md.GetItems(DataSpace.SSpace); if (false) { var preSaleTable = typeof(Model.PreSale).GetCustomAttributes(typeof(EdmEntityTypeAttribute), true).Cast <EdmEntityTypeAttribute>().First(); var auctionIdField = ExpressionExtentions.GetLambda(() => new Model.PreSale().AuctionId); manheimModel.Database.ExecuteSqlCommand("DELETE " + preSaleTable.Name + " WHERE " + auctionIdField + " = {0}", auctionEntity.AuctionId); } #endregion //dataBody.OwnTableRows.ToList().ForEach(tr => foreach (var tr in dataBody.OwnTableRows) { var tds = tr.OwnTableCells; if (tds.Count == 0) { continue; } var vin = tds[6].Text + ""; var addPresSale = false; lock (auctionEntity) { addPresSale = !manheimModel.PreSales.Any(ps => ps.SaleDate == saleDate && ps.VIN == vin); } if (addPresSale) { try { WC.IE vehicleInfoIE = OpenVehicleInfoWindow(tds); if (vehicleInfoIE != null) { AddPreSale(manheimModel, auctionEntity, saleDate, tds, vin, vehicleInfoIE); } } catch (System.Data.Entity.Validation.DbEntityValidationException exc) { var ev = exc.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage; Log = new Exception(ev); } } } }