public void Generate()
        {
            var seeder = new Seeder();
            var db = new StoreContext();
            var laptops = db.Laptops.ToList();
            var productsCount = laptops.Count;

            for (int report = 0; report < NumberOfReports; report++)
            {
                if (report % 10 == 0)
                {
                    Console.Write("...");
                }

                var date = new DateTime(this.random.Next(2002, 2016), this.random.Next(1, 13), this.random.Next(1, 29));
                var productsToBeAdded = new List<SalesInfo>();

                productsToBeAdded.AddRange(laptops.Select((x) => new SalesInfo(x.Id, x.Price, this.random.Next(1, 10))));

               seeder.Seed(this.towns[this.random.Next(0, this.towns.Length)], date, "Sales/", productsToBeAdded);
            }
        }
        public static void Main()
        {
            var seedGenerator = new SeedGenerator();
            var seeder = new Seeder();
            seedGenerator.Generate();
            var zipPath = "sales-reports.zip";
            seeder.SendToZip("Sales/", zipPath);
            seeder.Unzip(zipPath, "Export/");

            var root = new DirectoryInfo(@"Export\sales-reports");
            var db = new StoreContext();
            var towns = new Dictionary<string, Town>();

            string pattern = "yyyy MMM dd";
            foreach (var directory in root.GetDirectories())
            {
                DateTime parsedDate;
                DateTime.TryParseExact(directory.Name, pattern, null, DateTimeStyles.None, out parsedDate);

                foreach (var file in directory.GetFiles())
                {
                    var townName = Path.GetFileNameWithoutExtension(file.FullName);
                    if (!towns.ContainsKey(townName))
                    {
                        if (db.Towns.Any(x => x.Name == townName))
                        {
                            towns.Add(townName, db.Towns.First(x => x.Name == townName));
                        }
                        else
                        {
                            towns.Add(townName, new Town { Name = townName });
                        }
                    }

                    using (Spreadsheet document = new Spreadsheet())
                    {
                        var row = 1;

                        document.LoadFromFile(file.FullName);
                        Worksheet worksheet = document.Workbook.Worksheets.ByName("SalesReport");

                        while (!worksheet.Cell(row, 0).Merged)
                        {
                            db.Sales.Add(new Sales
                                             {
                                                 Date = parsedDate,
                                                 Town = towns[townName],
                                                 LaptopId = worksheet.Cell(row, 0).ValueAsInteger,
                                                 Quantity = worksheet.Cell(row, 2).ValueAsInteger
                                             });

                            ++row;
                        }
                    }
                }
            }

            db.SaveChanges();

            // document.LoadFromFile(@"Export\sales-reports\2002 Feb 27\Bourgas.xls");
            // Worksheet worksheet = document.Workbook.Worksheets.ByName("SalesReport");
            // Console.WriteLine(worksheet.Cell(4, 0).Merged);
        }