public HotelBookingProcessModel ProcessPendingBooking(long?id)
        {
            TravelPortalEntity.EntityModel _ent = new TravelPortalEntity.EntityModel();
            int    BaseCurrencyId    = 0;
            int    CurrencyCodeId    = 0;
            string BaseCurrencyCode  = System.Configuration.ConfigurationManager.AppSettings["HotelBaseCurrencyCode"];
            string CurrencyCode      = System.Configuration.ConfigurationManager.AppSettings["HotelCurrencyCode"];
            var    _BaseCurrencyCode = _ent.Currencies.Where(x => x.CurrencyCode.Trim() == BaseCurrencyCode).FirstOrDefault();

            if (_BaseCurrencyCode != null)
            {
                BaseCurrencyId = _BaseCurrencyCode.CurrencyId == null ? 0 : _BaseCurrencyCode.CurrencyId;
            }
            var _CurrencyCode = _ent.Currencies.Where(x => x.CurrencyCode.Trim() == CurrencyCode).FirstOrDefault();

            if (_CurrencyCode != null)
            {
                CurrencyCodeId = _CurrencyCode.CurrencyId == null ? 0 : _CurrencyCode.CurrencyId;
            }
            var     _ExchangeRate = _ent.Core_FXRate.Where(x => x.BaseCurrencyID == BaseCurrencyId && x.CurrencyID == CurrencyCodeId).OrderByDescending(x => x.CreatedDate).FirstOrDefault();
            decimal ExchangeRate  = 1;

            if (_ExchangeRate != null)
            {
                ExchangeRate = (decimal)(_ExchangeRate.ExchangeRate == null ? 1 : _ExchangeRate.ExchangeRate == 0 ? 1 : _ExchangeRate.ExchangeRate);
            }
            HotelItinearyModel       _itmodel = new HotelItinearyModel();
            HotelBookingProcessModel _model   = new HotelBookingProcessModel();
            HotelMessageModel        _msg     = new HotelMessageModel();

            HotelCore.GetHotelBooking.Request        _getBookingReq = new HotelCore.GetHotelBooking.Request();
            HotelCore.GetHotelBooking.Response       _getBookingRes = new HotelCore.GetHotelBooking.Response();
            HotelCore.AddHotelBookingDetail.Request  _addBookingReq = new HotelCore.AddHotelBookingDetail.Request();
            HotelCore.AddHotelBookingDetail.Response _addBookingRes = new HotelCore.AddHotelBookingDetail.Response();
            HotelCore.Book.Request _bookingReq = new HotelCore.Book.Request();
            HotelCore.API          api         = new HotelCore.API();
            if (id != null)
            {
                var obj = _ent.Htl_BookingRecord.FirstOrDefault(x => x.BookingRecordId == id && x.IsProcessed == false);
                if (obj != null)
                {
                    if (obj.BookingStatusCode.Trim() == "Pending")
                    {
                        _getBookingReq.BookingId = obj.GDSBookingId;
                        _getBookingRes           = api.GetHotelBooking(_getBookingReq);
                        if (_getBookingRes.Status.StatusNumber == 0)
                        {
                            if (_getBookingRes.BookingDetail != null)
                            {
                                var _bookRecObj = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                                _bookRecObj.BookingStatusCode     = _getBookingRes.BookingDetail[0].BookingStatus.ToString();
                                _bookRecObj.BookingReferenceNo    = _getBookingRes.BookingDetail[0].BookingRefNo;
                                _bookRecObj.BookingConformationNo = _getBookingRes.BookingDetail[0].ConfirmationNo;
                                _bookRecObj.LastCancilationDate   = _getBookingRes.BookingDetail[0].LastCancellationDate;
                                _bookRecObj.BookingStatusCode     = _getBookingRes.BookingDetail[0].BookingStatus.ToString();
                                _bookRecObj.IsGetBookingDetail    = true;
                                _ent.ApplyCurrentValues(obj.EntityKey.EntitySetName, _bookRecObj);
                                _ent.SaveChanges();
                                var _bookingRecord = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                                _bookingReq.SessionId   = _bookingRecord.SearchSessionId;
                                _bookingReq.Index       = _bookingRecord.SearchIndex;
                                _bookingReq.CountryName = _bookingRecord.CountryName;
                                HotelCore.Utility.PaymentInformation pinfo = new HotelCore.Utility.PaymentInformation();
                                pinfo.Amount            = _bookingRecord.TotalChargeableAmount;
                                _bookingReq.PaymentInfo = pinfo;
                                List <HotelCore.Utility.Guest> Guest = new List <HotelCore.Utility.Guest>();
                                var _guest = _ent.Htl_BookingGuestDetail.Where(x => x.BookingRecordId == id);
                                if (_guest != null)
                                {
                                    if (_guest.Count() > 0)
                                    {
                                        foreach (var item in _guest)
                                        {
                                            HotelCore.Utility.Guest gu = new HotelCore.Utility.Guest();
                                            gu.Age          = item.Age;
                                            gu.Addressline1 = item.Address1;
                                            gu.Addressline2 = item.Address2;
                                            gu.Areacode     = item.AreaPhCode;
                                            gu.City         = item.City;
                                            gu.Country      = item.Country;
                                            gu.Countrycode  = item.CountryPhCode;
                                            gu.Email        = item.Email;
                                            gu.FirstName    = item.FirstName;
                                            gu.GuestType    = item.GuestType.Trim() == "Child" ? HotelCore.Utility.HotelGuestType.Child : HotelCore.Utility.HotelGuestType.Adult;
                                            gu.LastName     = item.LastName;
                                            gu.LeadGuest    = item.IsLeadGuest;
                                            gu.MiddleName   = item.MiddleName;
                                            gu.Phoneno      = item.PhoneNo;
                                            gu.RoomIndex    = item.RoomIndex;
                                            gu.State        = item.GuestState;
                                            gu.Title        = item.Title;
                                            gu.Zipcode      = item.ZipCoade;
                                            Guest.Add(gu);
                                        }
                                    }
                                }
                                _bookingReq.Guest               = Guest.ToArray();
                                _bookingReq.CreatedOn           = CurrentDateTime;
                                _bookingReq.DisplayExchangeRate = ExchangeRate;
                                if (_getBookingRes.BookingDetail[0].BookingStatus.ToString() == "Confirmed")
                                {
                                    _addBookingReq = api.FillAddBookingRequest(1, _getBookingRes, _bookingReq);
                                    _addBookingRes = api.AddHotelBookingDetail(_addBookingReq);
                                    if (_addBookingRes.Status.StatusNumber == 0)
                                    {
                                        var _bookRecObj1 = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                                        _bookRecObj.AddBookingRefId = _addBookingRes.ReferenceId;
                                        _bookRecObj.IsBookingAdded  = true;
                                        _ent.ApplyCurrentValues(obj.EntityKey.EntitySetName, _bookRecObj1);
                                        _ent.SaveChanges();
                                    }
                                }
                            }
                        }
                    }
                    else if ((obj.IsProcessed == false && obj.IsGetBookingDetail == false && obj.BookingStatusCode.Trim() == "Confirmed") || (obj.IsBookingAdded == false))
                    {
                        _getBookingReq.BookingId = obj.GDSBookingId;
                        _getBookingRes           = api.GetHotelBooking(_getBookingReq);
                        if (_getBookingRes.Status.StatusNumber == 0)
                        {
                            if (_getBookingRes.BookingDetail != null)
                            {
                                var _bookRecObj = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                                _bookRecObj.BookingStatusCode     = _getBookingRes.BookingDetail[0].BookingStatus.ToString();
                                _bookRecObj.BookingReferenceNo    = _getBookingRes.BookingDetail[0].BookingRefNo;
                                _bookRecObj.BookingConformationNo = _getBookingRes.BookingDetail[0].ConfirmationNo;
                                _bookRecObj.LastCancilationDate   = _getBookingRes.BookingDetail[0].LastCancellationDate;
                                _bookRecObj.IsGetBookingDetail    = true;
                                _ent.ApplyCurrentValues(obj.EntityKey.EntitySetName, _bookRecObj);
                                _ent.SaveChanges();
                                var _bookingRecord = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                                _bookingReq.SessionId   = _bookingRecord.SearchSessionId;
                                _bookingReq.Index       = _bookingRecord.SearchIndex;
                                _bookingReq.CountryName = _bookingRecord.CountryName;
                                HotelCore.Utility.PaymentInformation pinfo = new HotelCore.Utility.PaymentInformation();
                                pinfo.Amount            = _bookingRecord.TotalChargeableAmount;
                                _bookingReq.PaymentInfo = pinfo;
                                List <HotelCore.Utility.Guest> Guest = new List <HotelCore.Utility.Guest>();
                                var _guest = _ent.Htl_BookingGuestDetail.Where(x => x.BookingRecordId == id);
                                if (_guest != null)
                                {
                                    if (_guest.Count() > 0)
                                    {
                                        foreach (var item in _guest)
                                        {
                                            HotelCore.Utility.Guest gu = new HotelCore.Utility.Guest();
                                            gu.Age          = item.Age;
                                            gu.Addressline1 = item.Address1;
                                            gu.Addressline2 = item.Address2;
                                            gu.Areacode     = item.AreaPhCode;
                                            gu.City         = item.City;
                                            gu.Country      = item.Country;
                                            gu.Countrycode  = item.CountryPhCode;
                                            gu.Email        = item.Email;
                                            gu.FirstName    = item.FirstName;
                                            gu.GuestType    = item.GuestType.Trim() == "Child" ? HotelCore.Utility.HotelGuestType.Child : HotelCore.Utility.HotelGuestType.Adult;
                                            gu.LastName     = item.LastName;
                                            gu.LeadGuest    = item.IsLeadGuest;
                                            gu.MiddleName   = item.MiddleName;
                                            gu.Phoneno      = item.PhoneNo;
                                            gu.RoomIndex    = item.RoomIndex;
                                            gu.State        = item.GuestState;
                                            gu.Title        = item.Title;
                                            gu.Zipcode      = item.ZipCoade;
                                            Guest.Add(gu);
                                        }
                                    }
                                }
                                _bookingReq.Guest               = Guest.ToArray();
                                _bookingReq.CreatedOn           = CurrentDateTime;
                                _bookingReq.DisplayExchangeRate = ExchangeRate;
                                _addBookingReq = api.FillAddBookingRequest(1, _getBookingRes, _bookingReq);
                                _addBookingRes = api.AddHotelBookingDetail(_addBookingReq);
                                if (_addBookingRes.Status.StatusNumber == 0)
                                {
                                    var _bookRecObj1 = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                                    _bookRecObj1.AddBookingRefId = _addBookingRes.ReferenceId;
                                    _bookRecObj1.IsBookingAdded  = true;
                                    _ent.ApplyCurrentValues(_bookRecObj1.EntityKey.EntitySetName, _bookRecObj1);
                                    _ent.SaveChanges();
                                }
                            }
                        }
                    }
                    else if (obj.IsVouchered == false)
                    {
                        _getBookingReq.BookingId = obj.GDSBookingId;
                        _getBookingRes           = api.GetHotelBooking(_getBookingReq);
                        var _bookRecObj1 = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                        _bookRecObj1.IsVouchered = _getBookingRes.BookingDetail[0].VoucherStatus;
                        _bookRecObj1.IsProcessed = _getBookingRes.BookingDetail[0].VoucherStatus;
                        _ent.ApplyCurrentValues(_bookRecObj1.EntityKey.EntitySetName, _bookRecObj1);
                        _ent.SaveChanges();
                    }
                }
                var _bookRecObj2 = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == id).FirstOrDefault();
                if (_bookRecObj2.IsBookingSuccess == true && _bookRecObj2.IsBookingAdded == true && _bookRecObj2.BookingStatusCode == "Confirmed")
                {
                    _bookRecObj2.IsProcessed = true;
                    _ent.ApplyCurrentValues(_bookRecObj2.EntityKey.EntitySetName, _bookRecObj2);
                    _ent.SaveChanges();
                }
                HotelItinearyModel        _itinModel     = new HotelItinearyModel();
                HotelBookRepository       _bookRep       = new HotelBookRepository();
                HotelBookDetailRepository _bookingDtlRep = new HotelBookDetailRepository();
                _model.BookingDetail = _bookingDtlRep.GetHotelBooking(id);
                _itinModel           = _bookRep.GetItineary(id);
                _model.Itineary      = _itinModel.Itineary;
                if (_itinModel.Itineary.BookingStatusDesc == "Confirmed" || _itinModel.Itineary.IsProcessed == true)
                {
                    _msg.ActionMessage = "Booking Success";
                    _msg.MsgNumber     = 1;
                    _msg.MsgStatus     = true;
                    _msg.MsgType       = 0;
                    _model.Message     = _msg;
                }
                else
                {
                    _msg.ActionMessage = "Booking can not complete try again.";
                    _msg.MsgNumber     = 1001;
                    _msg.MsgStatus     = true;
                    _msg.MsgType       = 2;
                    _model.Message     = _msg;
                }
            }
            else
            {
                _msg.ActionMessage = "Invalid Operation.";
                _msg.MsgNumber     = 1000;
                _msg.MsgStatus     = true;
                _msg.MsgType       = 2;
                _model.Message     = _msg;
            }

            return(_model);
        }
        public HotelBookingDetailModel GetHotelBooking(long?BookingRecordId)
        {
            HotelCore.GetHotelBooking.Response _res  = new HotelCore.GetHotelBooking.Response();
            HotelCore.GetHotelBooking.Request  _req  = new HotelCore.GetHotelBooking.Request();
            HotelBookingDetailModel            model = new HotelBookingDetailModel();

            TravelPortalEntity.EntityModel _ent = new TravelPortalEntity.EntityModel();
            HotelMessageModel _msg = new HotelMessageModel();

            if (BookingRecordId != null)
            {
                var obj = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == BookingRecordId).FirstOrDefault();
                if (obj != null)
                {
                    _req.BookingId = obj.GDSBookingId;
                    HotelCore.API _api = new HotelCore.API();
                    //_res = _api.GetHotelBooking(_req);
                    var _bookingDtl = _ent.Htl_BookingRecord.Where(x => x.BookingRecordId == BookingRecordId).FirstOrDefault();
                    Administrator.Models.AgentModel _agent = new Administrator.Models.AgentModel {
                        AgentName = _bookingDtl.Agents.AgentName,
                        Address   = _bookingDtl.Agents.Address,
                        PhoneNo   = _bookingDtl.Agents.Phone,
                        AgentId   = _bookingDtl.AgentId
                    };
                    model.CheckInDate          = _bookingDtl.CheckInDate;
                    model.CheckOutDate         = _bookingDtl.CheckOutDate;
                    model.CityName             = _bookingDtl.CityName;
                    model.CountryName          = _bookingDtl.CountryName;
                    model.CurrencyCode         = _bookingDtl.CurrencyCode;
                    model.Flightinfo           = _bookingDtl.FlightInfo;
                    model.HotelRating          = _bookingDtl.HotelRating;
                    model.HotelImageUrl        = _bookingDtl.HotelImageUrl;
                    model.TotalChargableAmount = _bookingDtl.TotalChargeableAmount;
                    model.BookingId            = _bookingDtl.GDSBookingId;
                    model.ConfirmationNo       = _bookingDtl.BookingConformationNo;
                    model.ReferenceNo          = _bookingDtl.BookingReferenceNo;
                    model.AgentDetail          = _agent;
                    var _guests = _ent.Htl_BookingGuestDetail.Where(x => x.BookingRecordId == BookingRecordId);
                    List <GuestDetailModel> _guestList = new List <GuestDetailModel>();
                    foreach (var item in _guests)
                    {
                        GuestDetailModel _guest = new GuestDetailModel();
                        _guest.Address1    = item.Address1;
                        _guest.Address2    = item.Address2;
                        _guest.Age         = item.Age;
                        _guest.City        = item.City;
                        _guest.Country     = item.Country;
                        _guest.Email       = item.Email;
                        _guest.Title       = item.Title;
                        _guest.FirstName   = item.FirstName;
                        _guest.GuestState  = item.GuestState;
                        _guest.GuestType   = item.GuestType;
                        _guest.IsLeadGuest = item.IsLeadGuest;
                        _guest.LastName    = item.LastName;
                        _guest.MiddleName  = item.MiddleName;
                        _guest.PhoneNo     = item.PhoneNo;
                        _guest.RoomIndex   = item.RoomIndex;
                        _guest.Title       = item.Title;
                        _guest.ZipCoade    = item.ZipCoade;
                        _guestList.Add(_guest);
                    }
                    List <HotelCore.Utility.RoomGuestData> _roomGuestList = new List <HotelCore.Utility.RoomGuestData>();

                    List <int> _childAge = new List <int>();
                    var        _roomDtl  = _ent.Htl_BookingRoomDetail.Where(x => x.BookingRecordId == BookingRecordId);
                    foreach (var item in _roomDtl)
                    {
                        HotelCore.Utility.RoomGuestData _roomGuest = new HotelCore.Utility.RoomGuestData();
                        _roomGuest.NoOfAdults   = item.NoOfAdult;
                        _roomGuest.NoOfChild    = item.NoOfChild;
                        _roomGuest.RoomTypeName = item.RoomTypeName;
                        _roomGuestList.Add(_roomGuest);
                    }
                    var _roomType = _ent.Htl_BookingRoomDetail.Where(x => x.BookingRecordId == BookingRecordId);
                    List <HotelCore.Utility.HotelRoomsDetails> RoomList = new List <HotelCore.Utility.HotelRoomsDetails>();
                    var bookingRoomCode = "";
                    foreach (var item in _roomType)
                    {
                        HotelCore.Utility.HotelRoomsDetails room = new HotelCore.Utility.HotelRoomsDetails();
                        room.RoomTypeName = item.RoomTypeName;
                        room.NoOfUnits    = 1;
                        bookingRoomCode   = item.BookingRoomCode;
                        var _nightRate = _ent.Htl_BookingNightRate.Where(x => x.BookingRoomCodeId == item.BookingRoomCodeId);
                        List <HotelCore.Utility.DayRates> _dayRates = new List <HotelCore.Utility.DayRates>();
                        foreach (var item1 in _nightRate)
                        {
                            HotelCore.Utility.DayRates _dayRate = new HotelCore.Utility.DayRates();
                            _dayRate.Days    = item1.BookingDate;
                            _dayRate.LowRate = item1.BookingRate;
                            _dayRates.Add(_dayRate);
                        }
                        room.DayRates = _dayRates.ToArray();
                        var _roomRate = _ent.Htl_BookingRoomRate.Where(x => x.BookingRoomCodeId == item.BookingRoomCodeId);
                        List <HotelCore.Utility.RoomRate> _roomRateList = new List <HotelCore.Utility.RoomRate>();
                        HotelCore.Utility.RoomRate        RoomRate      = new HotelCore.Utility.RoomRate();
                        RoomRate.TotalRoomRate     = _roomRate.Where(x => x.Particular == "Total-Rate").FirstOrDefault().Amount;
                        RoomRate.ExtraGuestCharges = _roomRate.Where(x => x.Particular == "Extra-Guest-Charge").FirstOrDefault().Amount;
                        RoomRate.TotalRoomTax      = _roomRate.Where(x => x.Particular == "Tax").FirstOrDefault().Amount;
                        RoomRate.ServiceTax        = _roomRate.Where(x => x.Particular == "Service-Tax").FirstOrDefault().Amount;
                        RoomRate.DisCount          = _roomRate.Where(x => x.Particular == "Discount").FirstOrDefault().Amount;
                        RoomRate.TotalTaxesAndFees = RoomRate.TotalRoomTax + RoomRate.ServiceTax;
                        //RoomRate.AgentServiceCharge = _roomRate.Where(x => x.Particular == "Agent-Service-Charge").FirstOrDefault().Amount;
                        RoomRate.CommissionExtraGuestCharge = _roomRate.Where(x => x.Particular == "Commission-Extra-Guest-Charge").FirstOrDefault().Amount;
                        RoomRate.CommissionRatePerRoom      = _roomRate.Where(x => x.Particular == "Commission-Rate-Per-Room").FirstOrDefault().Amount;
                        RoomRate.DiscountExtraGuestCharge   = _roomRate.Where(x => x.Particular == "Discount-Extra-Guest-Charge").FirstOrDefault().Amount;
                        RoomRate.DiscountRatePerRoom        = _roomRate.Where(x => x.Particular == "Discount-Rate-Per-Room").FirstOrDefault().Amount;
                        RoomRate.MarkupExtraGuestCharge     = _roomRate.Where(x => x.Particular == "Markup-Extra-Guest-Charge").FirstOrDefault().Amount;
                        RoomRate.MarkupRatePerRoom          = _roomRate.Where(x => x.Particular == "Markup-Rate-Per-Room").FirstOrDefault().Amount;
                        room.RoomRate = RoomRate;
                        RoomList.Add(room);
                    }

                    model.RoomDetail     = RoomList.ToArray();
                    model.RoomGuest      = _roomGuestList.ToArray();
                    model.Guests         = _guestList.ToArray();
                    model.HotelAddress   = _bookingDtl.HotelAddress;
                    model.HotelEmail     = _bookingDtl.HotelEmail;
                    model.HotelName      = _bookingDtl.HotelName;
                    model.HotelPhoneNo   = _bookingDtl.HotelPhone;
                    model.NoOfRooms      = _bookingDtl.NoOfRoom;
                    model.SpecialRequest = _bookingDtl.SpecialRequest;
                    model.BookingDetail  = _res.BookingDetail;
                    _msg.ActionMessage   = "Success.";
                    _msg.MsgNumber       = 1;
                    _msg.MsgStatus       = false;
                    _msg.MsgType         = 0;
                    model.Message        = _msg;
                }
                else
                {
                    _msg.ActionMessage = "Invalid Operation.";
                    _msg.MsgNumber     = 1000;
                    _msg.MsgStatus     = true;
                    _msg.MsgType       = 2;
                    model.Message      = _msg;
                }
            }
            else
            {
                _msg.ActionMessage = "Invalid Operation.";
                _msg.MsgNumber     = 1000;
                _msg.MsgStatus     = true;
                _msg.MsgType       = 2;
                model.Message      = _msg;
            }
            return(model);
        }