Example #1
0
        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();
            }
        }
Example #2
0
        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);
                    }
                }
            }
        }