Example #1
0
        void CreateFakeQuotes(DevAVDb context, string connectionString, /*List<OrderItem> orderItems, */ List <Order> allOrders)
        {
            var newQuotes = new List <Quote>();

            Random seed        = new Random(13);
            var    percentages = Enum.GetValues(typeof(StateEnum)).Cast <StateEnum>().ToDictionary(s => s, s => seed.NextDouble() / 1.4 + 0.2); // 0.2 .. 0.9
            int    number      = 3000;
            int    curState    = 0;
            var    stateGroups = allOrders.GroupBy(o => o.Store.State).ToList();

            foreach (var stateGroup in stateGroups)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                StateEnum    state  = stateGroup.Key;
                List <Order> orders = stateGroup.ToList();
                var          quotes = orders.Select(o =>
                {
                    var quote = OrderToQuote(o, ref number /*, orderItems, items*/);
                    return(quote);
                }).ToList();
                while (percentages[state] < (double)orders.Count / quotes.Count)
                {
                    quotes.Add(OrderToQuote(orders[seed.Next() % orders.Count], ref number /*, orderItems, items*/));
                }
                RaiseProgress(string.Format("Creating quotes for state {0}/{1} ({2})", ++curState, stateGroups.Count, sw.Elapsed));
                UpdateOpportunity(quotes, percentages[state]);
                newQuotes.AddRange(quotes);
            }

            context.Quotes.AddRange(newQuotes);
            context.SaveChanges();
            context.SaveChanges();
        }
Example #2
0
        void DuplicateOrders(DevAVDb context,
                             Dictionary <int, Customer> customers,
                             Dictionary <int, CustomerStore> customerStores,
                             List <Order> protoOrders,
                             string connectionString,
                             List <Order> newOrders)
        {
            RaiseProgress("duplicating orders (years)");
            Customer firstCustomer = customers[1];

            PreCorrectOrders(context, protoOrders);
            protoOrders.ForEach(o =>
            {
                o.OrderDate += TimeSpan.FromDays(730);
                o.ShipDate  += TimeSpan.FromDays(730);
            });
            DuplicateOrdersToDate(protoOrders.AsReadOnly(),
                                  newOrders
                                  );

            protoOrders.AddRange(newOrders);

            int curInvoiceNumber = protoOrders.Max(o => (int)o.InvoiceNumber) + 3;
            int curPONumber      = protoOrders.Max(o => int.Parse(o.PONumber)) + 3;

            RaiseProgress("duplicating orders (customers)");
            int customersDone = 0;
            List <CustomerStore> firstCustomerStores = customerStores.Values.Where(s => s.Customer.Id == firstCustomer.Id).ToList();

            foreach (Customer customer in customers.Values.Except(new[] { firstCustomer }))
            {
                List <CustomerStore> stores = customerStores.Values.Where(s => s.Customer.Id == customer.Id).ToList();
                Debug.Assert(stores.Count == firstCustomerStores.Count);
                var storeMap = new Dictionary <CustomerStore, CustomerStore>();
                for (int i = 0;
                     i < stores.Count;
                     ++i)
                {
                    storeMap[firstCustomerStores[i]] = stores[i];
                }
                foreach (Order order in protoOrders)
                {
                    Order dupOrder = Duplicate(order);
                    dupOrder.Customer      = customer;
                    dupOrder.Store         = storeMap[order.Store];
                    dupOrder.InvoiceNumber = curInvoiceNumber;
                    dupOrder.PONumber      = curPONumber.ToString();
                    newOrders.Add(dupOrder);
                    curInvoiceNumber += 3;
                    curPONumber      += 3;
                }
                RaiseProgress(string.Format("done {0}/{1}", ++customersDone, customers.Values.Count() - 1));
            }

            context.Orders.AddRange(newOrders);
            context.SaveChanges();
            context.SaveChanges();
            PostCorrectOrders(context);
        }
Example #3
0
 void DropMigrationHistory(DevAVDb context)
 {
     using (var command = context.Database.Connection.CreateCommand()) {
         context.Database.Connection.Open();
         command.CommandText = "drop table __MigrationHistory";
         command.ExecuteNonQuery();
     }
 }
Example #4
0
        void PostCorrectOrders(DevAVDb context)
        {
            RaiseProgress("PostCorrectOrders");
            var random = new Random();
            Dictionary <Customer, Tuple <int, bool> > correction = CalculateCorrectionsForOrdersAndOrderItems(context, random);

            foreach (var order in context.Orders)
            {
                CorrectDates(random, order);
                CorrectOrdersAndOrderItems(context, random, correction, order);
            }
            context.SaveChanges();
        }
Example #5
0
        static void CorrectOrdersAndOrderItems(DevAVDb context, Random random, Dictionary <Customer, Tuple <int, bool> > correction, Order order)
        {
            if (order.OrderDate.Year != correction[order.Customer].Item1)
            {
                return;
            }
            bool isNegativeFactor = correction[order.Customer].Item2;
            int  factor           = random.Next(1, 4);

            if (isNegativeFactor)
            {
                factor *= -1;
            }
            order.SaleAmount  = 1000; //orderItems.Sum(oi => oi.Total);
            order.TotalAmount = order.SaleAmount + order.ShippingAmount;
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            //var deleteContext = new DevAVDb();
            //if(deleteContext.Database.Exists())
            //    deleteContext.Database.Delete();

            var context = new DevAVDb();

            if (!context.Database.Exists())
            {
                DXSplashScreen.Show <GenerateDBSplashScreen>();
                DXSplashScreen.SetState("Generating database...");
                try {
                    Database.SetInitializer <DevAVDb>(new DatabaseInitializer());
                    context.Customers.Count();
                } finally {
                    DXSplashScreen.Close();
                }
            }
        }
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            ApplicationThemeHelper.UpdateApplicationThemeName();
            DbEngineDetector.PatchConnectionStringsAndConfigureEntityFrameworkDefaultConnectionFactory();

            //var deleteContext = new DevAVDb();
            //if(deleteContext.Database.Exists())
            //    deleteContext.Database.Delete();

            var context = new DevAVDb();

            if (!context.Database.Exists())
            {
                DXSplashScreen.Show <GenerateDBSplashScreen>();
                DXSplashScreen.SetState("Generating database...");
                try {
                    Database.SetInitializer <DevAVDb>(new DatabaseInitializer());
                    context.Customers.Count();
                } finally {
                    DXSplashScreen.Close();
                }
            }
        }
Example #8
0
        public void Seed(DevAVDb context)
        {
            Init();

            string connectionString = context.Database.Connection.ConnectionString;

            var allResources = typeof(DatabaseGenerator).Assembly.GetManifestResourceNames();

            malePictures = allResources.Where(r => r.Contains("MalePhotos")).Select(name => new Picture {
                Data = ReadEmbeddedResource(name)
            }).ToList();
            femalePictures = allResources.Where(r => r.Contains("FemalePhotos")).Select(name => new Picture {
                Data = ReadEmbeddedResource(name)
            }).ToList();
            ResetPictures();

            context.SaveChanges();

            context.SaveChanges();
            var crests = CreateCrests();

            context.SaveChanges();
            var stateEnums = CreateStateEnums();

            context.SaveChanges();
            var employees = CreateEmployees(stateEnums);

            context.Employees.AddRange(employees.Values);
            FixEmployeeStatus(employees.Values.ToList());
            context.SaveChanges();
            var products = CreateProducts(employees);

            context.Products.AddRange(products.Values);
            context.SaveChanges();
            var customers = CreateCustomers(stateEnums);

            PatchCustomers(customers.Values.ToList());
            context.Customers.AddRange(customers.Values);
            context.SaveChanges();
            var customerStores = CreateCustomerStores(stateEnums, crests, customers);

            context.CustomerStores.AddRange(customerStores.Values);
            context.SaveChanges();
            currentMalePictures   = malePictures.ToList();
            currentFemalePictures = femalePictures.ToList();
            var tasks = CreateTasks(employees /*, customerEmployees*/);

            context.Tasks.AddRange(tasks.Values);
            context.SaveChanges();
            context.SaveChanges();
            var orders = CreateOrders(employees, customers, customerStores);

            context.Orders.AddRange(orders.Values);
            context.SaveChanges();
            context.SaveChanges();
            context.SaveChanges();
            context.SaveChanges();
            context.SaveChanges();
            context.SaveChanges();
            RaiseProgress("Updating locations...");
            context.SaveChanges();
            var newOrders = new List <Order>();

            DuplicateOrders(context, customers, customerStores, orders.Values.ToList(), connectionString, newOrders);
            CreateFakeQuotes(context, connectionString, newOrders);
            DropMigrationHistory(context);
        }
Example #9
0
 void PreCorrectOrders(DevAVDb context, List <Order> orders)
 {
     CorrectSpacesInOrders(orders);
 }
Example #10
0
        static Dictionary <Customer, Tuple <int, bool> > CalculateCorrectionsForOrdersAndOrderItems(DevAVDb context, Random random)
        {
            Dictionary <Customer, Tuple <int, bool> > correction = new Dictionary <Customer, Tuple <int, bool> >();
            int minYear   = context.Orders.Min(o => o.OrderDate.Year);
            int maxYear   = context.Orders.Max(o => o.OrderDate.Year);
            var customers = context.Customers.ToList();

            for (int i = 0;
                 i < customers.Count;
                 i++)
            {
                int year = random.Next(minYear, maxYear + 1);
                correction[customers[i]] = new Tuple <int, bool>(year, random.Next(2) == 0);
            }
            return(correction);
        }