Exemple #1
0
        public MainCtr()
        {
            var db = new dmab0913_3DataContext();

            AirplaneCtr = new AirplaneCtr(db);
            AirportCtr  = new AirportCtr(db);
            BookingCtr  = new BookingCtr(db);
            FlightCtr   = new FlightCtr(db);
            PersonCtr   = new PersonCtr(db);
        }
        public bool CreateNewBooking(int[] flightIDs, List <Person> persons, string totalTime, double totalPrice)
        {
            bool        returnValue = true;
            AirplaneCtr airplaneCtr = new AirplaneCtr(_db);
            //Lav lister med personer og flights fra arrays med id
            var flights = flightIDs.Select(id => _db.Flights.SingleOrDefault(flight => flight.flightID == id)).ToList();
            //Opret booking. Skal submittes til db så den får ID fra IDENTITY!
            var booking = new Booking {
                totalPrice = totalPrice * persons.Count, totalTime = totalTime
            };

            using (var transScope = new TransactionScope())
            {
                try
                {
                    _db.Bookings.InsertOnSubmit(booking);
                    _db.SubmitChanges();

                    foreach (Person p in persons)
                    {
                        //Hvis personID er 0 er det en person der ikke er oprettet i db og derfor ikke har et ID endnu
                        if (p.personID == 0)
                        {
                            _db.Persons.InsertOnSubmit(p);
                            _db.SubmitChanges();
                        }

                        var bookingPassenger = new BookingPassenger
                        {
                            bookingID = booking.bookingID,
                            personID  = p.personID
                        };
                        _db.BookingPassengers.InsertOnSubmit(bookingPassenger);
                    }


                    foreach (Flight f in flights)
                    {
                        //Hvis der er plads på flyet
                        if (airplaneCtr.GetAirplaneByID(Convert.ToInt32(f.airplaneID)).seats >= f.takenSeats + persons.Count)
                        {
                            //Opret ny BookingFlight
                            var bookingFlights = new BookingFlight
                            {
                                bookingID = booking.bookingID,
                                flightID  = f.flightID
                            };
                            _db.BookingFlights.InsertOnSubmit(bookingFlights);
                            f.takenSeats += persons.Count;
                        }
                        else
                        {
                            returnValue = false;
                        }
                    }

                    if (returnValue)
                    {
                        _db.SubmitChanges();
                        transScope.Complete();
                    }
                    else
                    {
                        Transaction.Current.Rollback();
                    }
                }
                catch (SqlException)
                {
                    returnValue = false;
                }
                catch (Exception)
                {
                    returnValue = false;
                }
            }

            return(returnValue);
        }