protected Payment CreatePayment(Product product, Profile profile)
        {
            var zakup = new Payment();

            zakup.DateTime          = DateTime.UtcNow;
            product.Payment         = zakup;
            zakup.Price             = product.Price;
            product.Payment.Product = product;
            var basket = new PaymentBasket();

            basket.Customer   = product.Customer;
            basket.DateTime   = DateTime.Now;
            basket.TotalPrice = product.Price;
            basket.Profile    = profile;
            basket.Payments.Add((Payment)product.Payment);
            ((Payment)product.Payment).PaymentBasket = basket;
            insertToDatabase(basket);
            insertToDatabase(product);
            Session.Flush();
            return((Payment)product.Payment);
        }
        public override void BuildDatabase()
        {
            using (var tx = Session.BeginTransaction())
            {
                profiles.Clear();
                activities.Clear();
                entries.Clear();
                customers.Clear();
                koszyki.Clear();
                profiles.Add(CreateProfile(Session, "test1"));
                profiles.Add(CreateProfile(Session, "test2"));

                var customer = CreateCustomer("cust1", profiles[0]);
                customers.Add(customer);
                customer = CreateCustomer("cust2", profiles[0]);
                customers.Add(customer);
                customer = CreateCustomer("cust3", profiles[1]);
                customers.Add(customer);

                var activity = CreateActivity("Swimming", profiles[0], 10);
                activities.Add(activity);
                activity = CreateActivity("Strength training", profiles[0], 15);
                activities.Add(activity);

                ScheduleEntry entry = new ScheduleEntry();
                entry.Profile    = profiles[0];
                entry.MyPlace    = GetDefaultMyPlace(profiles[0]);
                entry.StartTime  = DateTime.UtcNow.AddDays(-10);
                entry.EndTime    = DateTime.UtcNow.AddDays(-10).AddHours(1);
                entry.Activity   = activities[0];
                entry.MaxPersons = 3;
                entries.Add(entry);
                ScheduleEntryReservation reservation = new ScheduleEntryReservation();
                reservation.Customer      = customers[0];
                reservation.Name          = "test";
                reservation.DateTime      = DateTime.UtcNow;
                reservation.Profile       = profiles[0];
                reservation.Price         = activities[0].Price;
                reservation.ScheduleEntry = entry;
                entry.Reservations.Add(reservation);
                insertToDatabase(entry);

                entry            = new ScheduleEntry();
                entry.Profile    = profiles[0];
                entry.Activity   = activities[1];
                entry.MyPlace    = GetDefaultMyPlace(profiles[0]);
                entry.StartTime  = DateTime.UtcNow.AddDays(-10);
                entry.EndTime    = DateTime.UtcNow.AddDays(-10).AddHours(1);
                entry.MaxPersons = 1;
                entries.Add(entry);
                reservation               = new ScheduleEntryReservation();
                reservation.Customer      = customers[0];
                reservation.Name          = "test";
                reservation.DateTime      = DateTime.UtcNow;
                reservation.Profile       = profiles[0];
                reservation.Price         = activities[1].Price;
                reservation.ScheduleEntry = entry;
                entry.Reservations.Add(reservation);
                insertToDatabase(entry);

                entry            = new ScheduleEntry();
                entry.Profile    = profiles[1];
                entry.MyPlace    = GetDefaultMyPlace(profiles[1]);
                entry.Activity   = activities[1];
                entry.StartTime  = DateTime.UtcNow.AddDays(-5);
                entry.EndTime    = DateTime.UtcNow.AddDays(-5).AddHours(1);
                entry.MaxPersons = 1;
                entry.Activity   = activities[1];
                entries.Add(entry);
                reservation               = new ScheduleEntryReservation();
                reservation.Customer      = customers[2];
                reservation.Name          = "test";
                reservation.Profile       = profiles[1];
                reservation.DateTime      = DateTime.UtcNow;
                reservation.Price         = 11;
                reservation.ScheduleEntry = entry;
                entry.Reservations.Add(reservation);
                insertToDatabase(entry);

                entry            = new ScheduleEntry();
                entry.Profile    = profiles[0];
                entry.MyPlace    = GetDefaultMyPlace(profiles[0]);
                entry.Activity   = activities[1];
                entry.StartTime  = DateTime.UtcNow.AddDays(-22);
                entry.EndTime    = DateTime.UtcNow.AddDays(-22).AddHours(1);
                entry.MaxPersons = 1;
                entries.Add(entry);
                reservation               = new ScheduleEntryReservation();
                reservation.Customer      = customers[0];
                reservation.Name          = "test";
                reservation.DateTime      = DateTime.UtcNow;
                reservation.Profile       = profiles[0];
                reservation.Price         = activities[1].Price;
                reservation.ScheduleEntry = entry;
                entry.Reservations.Add(reservation);
                insertToDatabase(entry);

                var koszyk = new PaymentBasket();
                koszyk.DateTime   = DateTime.UtcNow.AddDays(-10);
                koszyk.Profile    = profiles[0];
                koszyk.Customer   = customers[0];
                koszyk.TotalPrice = 20;
                var zakup = new Payment();
                zakup.Product = entries[0].Reservations.ElementAt(0);
                entries[0].Reservations.ElementAt(0).Payment = zakup;
                zakup.PaymentBasket = koszyk;
                koszyk.Payments.Add(zakup);
                insertToDatabase(koszyk);
                koszyki.Add(koszyk);

                koszyk            = new PaymentBasket();
                koszyk.DateTime   = DateTime.UtcNow.AddDays(-8);
                koszyk.Customer   = customers[0];
                koszyk.Profile    = profiles[0];
                koszyk.TotalPrice = 11;
                zakup             = new Payment();
                zakup.Product     = entries[1].Reservations.ElementAt(0);
                entries[1].Reservations.ElementAt(0).Payment = zakup;
                zakup.PaymentBasket = koszyk;
                koszyk.Payments.Add(zakup);
                insertToDatabase(koszyk);
                koszyki.Add(koszyk);

                koszyk            = new PaymentBasket();
                koszyk.DateTime   = DateTime.UtcNow.AddDays(-8);
                koszyk.Profile    = profiles[1];
                koszyk.Customer   = customers[2];
                koszyk.TotalPrice = 11;
                zakup             = new Payment();
                zakup.Product     = entries[2].Reservations.ElementAt(0);
                entries[2].Reservations.ElementAt(0).Payment = zakup;
                zakup.PaymentBasket = koszyk;
                koszyk.Payments.Add(zakup);
                insertToDatabase(koszyk);

                tx.Commit();
            }
        }