Ejemplo n.º 1
0
        public void Create_WhenCorrectData_ShouldReturnSuccessfulResponseWithBookingNumber()
        {
            // Arrange
            var flight           = PrepareFlightDetails();
            var bookingPassenger = new BookingPassenger {
                Name = "Test", DateBirth = DateTime.Now.Date, Gender = Gender.Male, Address = "TestAddress", Email = "*****@*****.**"
            };
            var createBookingRequest = new CreateBookingRequest
            {
                FlightId   = 1,
                Passengers = new List <BookingPassenger> {
                    bookingPassenger
                }
            };

            Mapper.Reset();
            Mapper.Initialize(cfg => cfg.CreateMap <Booking, BookingDto>());

            var mockPersonRepository  = new Mock <IRepository <Person> >();
            var mockBookingRepository = new Mock <IRepository <Booking> >();
            var mockFlightRepository  = new Mock <IRepository <Flight> >();

            mockFlightRepository.Setup(x => x.Get(It.Is <int>(m => m == flight.Id))).Returns(flight);
            mockBookingRepository.Setup(x => x.GetAll()).Returns(new List <Booking>());
            mockPersonRepository.Setup(x => x.GetAll()).Returns(new List <Person>());

            var bookingService = new BookingService(Mapper.Instance, mockPersonRepository.Object, mockBookingRepository.Object, mockFlightRepository.Object);

            // Act
            var expectedCreateBookingResponse = bookingService.CreateBooking(createBookingRequest);

            // Assert
            Assert.IsNotNull(expectedCreateBookingResponse.BookingNumber);
        }
Ejemplo n.º 2
0
        public void Create_WhenFlightDoesNotExsit_ShouldThrowAppropriateException()
        {
            // Arrange
            var expectedErrorMessage = "Flight with specified ID does not exist.";

            var flight           = PrepareFlightDetails();
            var bookingPassenger = new BookingPassenger {
                Name = "Test", DateBirth = DateTime.Now.Date, Gender = Gender.Male, Address = "TestAddress", Email = "*****@*****.**"
            };
            var createBookingRequest = new CreateBookingRequest
            {
                FlightId   = 1,
                Passengers = new List <BookingPassenger> {
                    bookingPassenger
                }
            };

            Mapper.Reset();
            Mapper.Initialize(cfg => cfg.CreateMap <Booking, BookingDto>());

            var mockPersonRepository  = new Mock <IRepository <Person> >();
            var mockBookingRepository = new Mock <IRepository <Booking> >();
            var mockFlightRepository  = new Mock <IRepository <Flight> >();

            mockFlightRepository.Setup(x => x.GetAll()).Returns(new List <Flight>());
            mockBookingRepository.Setup(x => x.GetAll()).Returns(new List <Booking>());
            mockPersonRepository.Setup(x => x.GetAll()).Returns(new List <Person>());

            var bookingService = new BookingService(Mapper.Instance, mockPersonRepository.Object, mockBookingRepository.Object, mockFlightRepository.Object);

            // Act & Assert
            var exception = Assert.Throws <WingsOnNotFoundException>(() => bookingService.CreateBooking(createBookingRequest));

            Assert.AreEqual(exception.Message, expectedErrorMessage);
        }
        public void EditBookingPaxes(BookingPassenger passenger)
        {
            HotelBookingDBEntities BookingDB = new HotelBookingDBEntities();
            var pax = BookingDB.HotelBookingPaxs.FirstOrDefault(p => p.Booking_No == passenger.bookingNo && p.Room_No == passenger.roomNo);

            if (pax != null)
            {
                pax.Salutations = passenger.salutation;
                pax.Last_Name   = passenger.lastName;
                pax.First_name  = passenger.firstName;
                BookingDB.SaveChanges();
            }
        }
Ejemplo n.º 4
0
        public IHttpActionResult EditPaxes([FromBody] BookingPassenger val)
        {
            try
            {
                AdminSearchBLL adminSearchBLL = new AdminSearchBLL();
                adminSearchBLL.EditBookingPaxes(val);
                return(Ok());
            }catch (Exception ex)
            {
                LoggingHelper.WriteToFile("AdminPaxController/ERROR/", "EditPax" + "INController" + val.bookingNo, "Data", "bookin is " + val.bookingNo + " and booking is" + val.bookingNo + ex.Message + ex.StackTrace);

                return(BadRequest(ex.Message));
            }
        }
Ejemplo n.º 5
0
        public void EditBookingPaxes(BookingPassenger passenger)
        {
            AdminSearchData adminSearch = new AdminSearchData();

            adminSearch.EditBookingPaxes(passenger);
        }
Ejemplo n.º 6
0
        public async Task<IHttpActionResult> InsertBooking(BookingDTO booking)
        {
            using (var db = new ApplicationDbContext())
            {


                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }


                Booking _booking = new Booking();
                if (booking != null)
                {

                    _booking.BookingId = Guid.NewGuid();
                    _booking.BookingOn = DateTime.Now;
                    _booking.BookingRefId = _booking.BookingRefId.GetRandomString(6); //Generate Booking Ref ID
                    _booking.BookingStatus = booking.BookingStatus;
                    _booking.ContactNo = booking.ContactNo;
                    _booking.Cupon = booking.Cupon;
                    _booking.Discount = booking.Discount;
                    _booking.Email = booking.Email;
                    _booking.MainContact = booking.MainContact;
                    _booking.UserId = booking.UserId;

                    db.Bookings.Add(_booking);
                }
                
                BookingDetail bd = new BookingDetail();
                if (booking.DepartBookingDetail != null) { 
                    bd = new BookingDetail();
                    bd.BookingDetailId = Guid.NewGuid();
                    bd.BookingId = _booking.BookingId;
                    bd.RouteFare = booking.DepartBookingDetail.RouteFare;
                    bd.RouteId = booking.DepartBookingDetail.RouteId;
                    db.BookingDetails.Add(bd);

                    foreach (BookingPassengerDTO p in booking.DepartBookingDetail.bookingPassengers)
                    {
                        BookingPassenger passenger = new BookingPassenger();
                        passenger.Age = p.Age;
                        passenger.BookingDetailId = bd.BookingDetailId;
                        passenger.BookingPassengerId = Guid.NewGuid();
                        passenger.Gender = p.Gender;
                        passenger.IDNumber = p.IDNumber;
                        passenger.IDType = p.IDType;
                        passenger.PassengerName = p.PassengerName;
                        passenger.RouteSeatId = p.RouteSeatId;

                        db.BookingPassengers.Add(passenger);
                    }
                }

                BookingDetail bd1 = new BookingDetail();
                if (booking.ReturnBookingDetail != null)
                {

                    bd1.BookingDetailId = Guid.NewGuid();
                    bd1.BookingId = booking.BookingId;
                    bd1.RouteFare = booking.ReturnBookingDetail.RouteFare;
                    bd1.RouteId = booking.ReturnBookingDetail.RouteId;
                    db.BookingDetails.Add(bd1);

                    foreach (BookingPassengerDTO p in booking.ReturnBookingDetail.bookingPassengers)
                    {
                        BookingPassenger passenger = new BookingPassenger();
                        passenger.Age = p.Age;
                        passenger.BookingDetailId = bd1.BookingDetailId;
                        passenger.BookingPassengerId = Guid.NewGuid();
                        passenger.Gender = p.Gender;
                        passenger.IDNumber = p.IDNumber;
                        passenger.IDType = p.IDType;
                        passenger.PassengerName = p.PassengerName;
                        passenger.RouteSeatId = p.RouteSeatId;

                        db.BookingPassengers.Add(passenger);
                    }
                }

        
                try
                {
                    await db.SaveChangesAsync();
                    
                    short seatstate = 0;
                    if (booking.BookingStatus == (short)OBTSEnum.BookState.Confirmed)
                        seatstate = (short)OBTSEnum.SeatState.Confirmed;
                    if (booking.BookingStatus == (short)OBTSEnum.BookState.UnConfirm)
                        seatstate = (short)OBTSEnum.SeatState.UnConfirm;
                    if (booking.BookingStatus == (short)OBTSEnum.BookState.Cancelled)
                        seatstate = (short)OBTSEnum.SeatState.Available;

                    //booking status to seat status =>booking confirmed,unconfirm,cancelled
                    foreach (BookingPassengerDTO p in booking.DepartBookingDetail.bookingPassengers)
                    {
                        using (var context = new ApplicationDbContext())
                        {
                            context.Database.ExecuteSqlCommand("UPDATE RouteSeats SET State={0}  WHERE RouteSeatId = {1}", seatstate, p.RouteSeatId);
                        }
                    }
                    if(booking.ReturnBookingDetail!=null)
                    {
                        foreach (BookingPassengerDTO p in booking.ReturnBookingDetail.bookingPassengers)
                        {
                            using (var context = new ApplicationDbContext())
                            {
                                context.Database.ExecuteSqlCommand("UPDATE RouteSeats SET State={0}  WHERE RouteSeatId = {1}", seatstate, p.RouteSeatId);
                            }
                        }
                    }
                   
                }

                catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)
                {
                    Exception raise = dbEx;
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            string message = string.Format("{0}:{1}",
                                validationErrors.Entry.Entity.ToString(),
                                validationError.ErrorMessage);
                            // raise a new exception nesting
                            // the current instance as InnerException
                            raise = new InvalidOperationException(message, raise);
                        }
                    }
                    throw raise;
                }


                return Ok(booking);
            }
        }
        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);
        }
        public AdminBookingDetails GetBookingDetails(string BN)
        {
            try
            {
                HotelBookingDBEntities  BookingDB    = new HotelBookingDBEntities();
                SearchDBEntities        searchDB     = new SearchDBEntities();
                AdminBookingDetails     requiredData = new AdminBookingDetails();
                hotelsDBEntities        db           = new hotelsDBEntities();
                CurrencyRepo            repo         = new CurrencyRepo();
                BusinessRulesDBEntities dbp          = new BusinessRulesDBEntities();

                double CancelRate = 0;
                var    BaseCur    = ConfigurationSettings.AppSettings["BaseCur"];

                var BookinData = BookingDB.HotelsBookings.FirstOrDefault(a => a.Booking_No.ToLower() == BN.ToLower());
                var searchData = searchDB.SearchCriterias.FirstOrDefault(a => a.sID == BookinData.SessionId);
                requiredData.bookingNo                  = BN;
                requiredData.bookingPhoneCode           = BookinData.Booking_Phone_Code;
                requiredData.bookingTime                = BookinData.Booking_Time.Value;
                requiredData.CBNumberData.LanguagesList = BookingDB.Languages.ToList();
                var lang = requiredData.CBNumberData.LanguagesList.FirstOrDefault(a => a.LanguageCode.ToLower() == searchData.language.ToLower());
                if (lang != null)
                {
                    requiredData.CBNumberData.Language = lang.LanguageID;
                }
                requiredData.CBNumberData.PointsOfSaleList = BookingDB.PointsOfSales.ToList();
                var pointofsale = requiredData.CBNumberData.PointsOfSaleList.FirstOrDefault(a => a.NameCode.ToLower() == searchData.pos.ToLower());
                if (pointofsale != null)
                {
                    requiredData.CBNumberData.PointOfSale = int.Parse(pointofsale.Code);
                }

                requiredData.CBNumberData.SourceList = BookingDB.SourceTraffics.ToList();
                var src = requiredData.CBNumberData.SourceList.FirstOrDefault(a => a.Source.ToLower() == searchData.source.ToLower());
                if (src != null)
                {
                    requiredData.CBNumberData.Source = src.Code;
                }
                requiredData.checkIN  = searchData.dateFrom.Value;
                requiredData.checkOut = searchData.dateTo.Value;
                requiredData.city     = searchData.cityName;
                var cityData = db.Cities.FirstOrDefault(c => c.ID.ToString() == searchData.cityName);
                requiredData.cityName = cityData.City1;
                var conversionRate = repo.GetEveryDayCurrenciesConversion(BookinData.Sell_Currency, BaseCur, searchData.sID, DateTime.Now).Result.Customer_Sell_Rate;
                requiredData.costAmount    = BookinData.Sell_Price.Value * conversionRate;
                requiredData.costCurrency  = BaseCur;
                requiredData.country       = cityData.countryName;
                requiredData.customerEmail = BookinData.Booking_Email;
                var name = BookinData.Pax_Name.Split(' ');
                requiredData.customerFirstName   = name[0];
                requiredData.customerID          = BookinData.Customer_ID;
                requiredData.customerLastName    = name[1];
                requiredData.customerPhone       = BookinData.Booking_phone;
                requiredData.customerPhoneCode   = BookinData.Booking_Phone_Code;
                requiredData.ForeignAmount       = BookinData.Sell_Price.Value; //**//
                requiredData.hotel               = BookinData.Hotel_ID;
                requiredData.hotelConfirmationNo = "";
                var hoteldata = db.hotels.FirstOrDefault(a => a.hotelID == BookinData.Hotel_ID);
                requiredData.hotelName         = hoteldata.hotelName;
                requiredData.lastBookingStatus = BookinData.Booking_Status;
                requiredData.paxName           = BookinData.Pax_Name;
                requiredData.paxQty            = BookinData.Pax_Qty.Value;
                // get provider
                var prov = dbp.HotelProviders.FirstOrDefault(a => a.Provider_ID.ToString() == BookinData.Provider_ID);
                if (prov != null)
                {
                    requiredData.provider = prov.Provider_Name;
                }
                requiredData.roomsQty     = BookinData.Rooms_Qty.Value;
                requiredData.salesChannel = searchData.source;
                requiredData.sellCurrency = BookinData.Sell_Currency;//*///
                var ExchangeRate = repo.GetEveryDayCurrenciesConversion(BaseCur, BookinData.Sell_Currency, searchData.sID, DateTime.Now).Result.Customer_Sell_Rate;

                requiredData.sellCurrencyExchRate = ExchangeRate;                                 //**///from base to user//
                requiredData.sellPrice            = BookinData.Sell_Price.Value * conversionRate; //**// base curr//
                var CostData = BookingDB.AvailabilityRes.FirstOrDefault(a => a.BookingNum == BookinData.Booking_No && a.Sid == BookinData.SessionId);
                requiredData.SupplierCost    = CostData.NewTotalcost.Value;                       /////////////////****************** //
                requiredData.TotalCostDinars = BookinData.Sell_Price.Value * conversionRate;      //**//***with base curr//
                var dataHotelStautsList = BookingDB.HotelBookingStatus.Where(a => a.Booking_No == BN).ToList();
                foreach (var item in dataHotelStautsList)
                {
                    BookingStatusList bookingStatus = new BookingStatusList();
                    bookingStatus.Booking_No     = BookinData.Booking_No;
                    bookingStatus.Booking_Status = item.Booking_Status;
                    bookingStatus.Status_Time    = item.Status_Time.Value;
                    requiredData.BookingStatusList.Add(bookingStatus);
                }

                var BookingRooms = BookingDB.HotelBookingRooms.Where(x => x.Booking_No == BookinData.Booking_No && x.SID == BookinData.SessionId).ToList();
                for (int i = 0; i < BookingRooms.Count; i++)
                {
                    BookingRoom bookingRoom = new BookingRoom();
                    bookingRoom.bookingNo    = BookingRooms[i].Booking_No;
                    bookingRoom.meal         = BookingRooms[i].Meal;
                    bookingRoom.paxQty       = BookingRooms[i].Paxs_Qty.Value;
                    bookingRoom.roomCategory = BookingRooms[i].Room_Category;
                    bookingRoom.roomNo       = i + 1;//**// incremented//
                    var roomnum    = BookingRooms[i].Room_No.ToString();
                    var RoomsStats = BookingDB.HotelBookingRoomsStatus.Where(a => a.Booking_No == BN && a.Room_No.ToString() == roomnum).OrderByDescending(a => a.Id).FirstOrDefault();
                    if (RoomsStats != null)
                    {
                        bookingRoom.RoomStatus = RoomsStats.Room_Status.ToString();//status add culomn//
                    }
                    bookingRoom.roomType = BookingRooms[i].Room_Category;
                    var availabilityHBroom = BookingDB.availabilityRoomRes.Where(x => x.BookingNum == BN && x.roomId.ToString() == roomnum).OrderByDescending(a => a.id).FirstOrDefault();
                    if (availabilityHBroom != null)
                    {
                        bookingRoom.TotalCostPerRoom = availabilityHBroom.Cost.Value;///********************************* provider cost//
                    }
                    else
                    {
                        var availabilityroom = searchDB.SearchRoomResults.FirstOrDefault(x => x.sID == BookinData.SessionId && x.HotelCode == BookinData.Hotel_ID && x.RoomCode == BookingRooms[i].Room_No.ToString());
                        if (availabilityroom != null)
                        {
                            bookingRoom.TotalCostPerRoom = availabilityroom.costPrice.Value;
                        }
                    }
                    var roomNum     = BookingRooms[i].Room_No.Value;
                    var RoomCancels = BookingDB.CancelPolicies.Where(x => x.RoomCode == roomNum && x.Sid == BookinData.SessionId && x.HotelCode == BookinData.Hotel_ID).ToList();

                    if (RoomCancels.Count > 0)
                    {
                        CancelRate = repo.GetEveryDayCurrenciesConversion(RoomCancels[0].Currency, BaseCur, searchData.sID, DateTime.Now).Result.Customer_Sell_Rate;
                    }
                    foreach (var item in RoomCancels)
                    {
                        SupplierCancellation supplierCancellation = new SupplierCancellation();
                        CustomerCancellation cancellation         = new CustomerCancellation();
                        cancellation.Booking_No             = BookinData.Booking_No;
                        cancellation.Date_From              = item.FromDate.Value;
                        cancellation.Date_To                = item.ToDate;
                        cancellation.ID                     = item.Id;
                        cancellation.No_Show_Amount         = (double)Math.Round(item.SellPrice.Value, 3) * CancelRate;
                        cancellation.Room_No                = BookingRooms[i].Room_No.Value;
                        cancellation.Rule_Text              = cancellation.No_Show_Amount.ToString() + " From " + item.FromDate.Value;
                        supplierCancellation.Booking_No     = BookinData.Booking_No;
                        supplierCancellation.Date_From      = item.FromDate.Value;
                        supplierCancellation.Date_To        = item.ToDate;
                        supplierCancellation.ID             = item.Id;
                        supplierCancellation.No_Show_Amount = (double)Math.Round(item.SellPrice.Value, 3) * CancelRate;
                        supplierCancellation.Room_No        = BookingRooms[i].Room_No.Value;
                        bookingRoom.SupplierCancellations.Add(supplierCancellation);
                        bookingRoom.CustomerCancellations.Add(cancellation);
                    }
                    var BookingNights = BookingDB.HotelBookingNights.Where(a => a.Booking_No == BookinData.Booking_No && a.Room_No == roomNum).ToList();
                    foreach (var item in BookingNights)
                    {
                        BookingNight night = new BookingNight();
                        night.bookingNo    = item.Booking_No;
                        night.currency     = BaseCur;
                        night.exchangeRate = 1;
                        night.nightDate    = item.NightDate.Value;
                        night.rate         = item.Rate.Value * conversionRate;
                        night.roomNo       = item.Room_No.Value;
                        bookingRoom.bookingNights.Add(night);
                    }
                    var BookingPaxes = BookingDB.HotelBookingPaxs.Where(a => a.SID == BookinData.SessionId && a.Booking_No == BookinData.Booking_No && a.Room_No == roomNum && a.PaxNo == 1).ToList();
                    foreach (var item in BookingPaxes)
                    {
                        BookingPassenger passenger = new BookingPassenger();
                        passenger.bookingNo   = item.Booking_No;
                        passenger.DateOfBirth = Convert.ToDateTime("0001- 01-01T00:00:00");//********* BD and Just lead(okay)
                        passenger.firstName   = item.First_name;
                        passenger.lastName    = item.Last_Name;
                        passenger.nationality = searchData.passengerNationality;
                        passenger.paxType     = item.Pax_Type;
                        passenger.phone       = item.Phone;
                        passenger.phoneCode   = item.Phone_Code;
                        passenger.roomNo      = item.Room_No.Value;
                        passenger.salutation  = item.Salutations;
                        bookingRoom.bookingPassengers.Add(passenger);
                    }
                    var dataRoomStautsList = BookingDB.HotelBookingRoomStatusValues.ToList();
                    foreach (var item in dataRoomStautsList)
                    {
                        RoomStatusList roomStatus = new RoomStatusList();
                        roomStatus.ID     = item.ID;
                        roomStatus.Status = item.Status;
                        bookingRoom.RoomStatusList.Add(roomStatus);
                    }


                    requiredData.bookingRooms.Add(bookingRoom);
                }



                return(requiredData);
            }
            catch (Exception ex)
            {
                LoggingHelper.WriteToFile("AdminPannelController/ERROR/", "GetBookingDetails" + "INDAL" + BN, "Data", "bookin is " + BN + " and booking is" + BN + ex.Message + ex.StackTrace);

                return(new AdminBookingDetails());
            }
        }