public ActionResult Index(OfflineBookInputModel input)
        {
            OfflineBookViewModel model = new OfflineBookViewModel();

            model.OfflineBookTicketList = bookProvider.ListOfflineBook(input.FromDate, input.ToDate);
            return(View(model));
        }
        public List <OfflineBookViewModel> ListOfflineBook(DateTime?fromdate, DateTime?todate)
        {
            var data = _entity.Air_GetOfflineBookingRequest(fromdate, todate).Where(x => (x.ServiceProviderId == 5 && x.TicketStatusId != 33 && x.TicketStatusId != 34));

            List <OfflineBookViewModel> model = new List <OfflineBookViewModel>();

            foreach (var item in data.Select(x => x))
            {
                OfflineBookViewModel OfflineBookViewModel = new OfflineBookViewModel();

                OfflineBookViewModel.UserDetail.AgentName = item.AgentName;
                OfflineBookViewModel.ServiceProviderId    = item.ServiceProviderId;
                OfflineBookViewModel.ServiceProviderName  = item.ServiceProviderName;
                OfflineBookViewModel.PassengerName        = item.PassengerName;
                OfflineBookViewModel.Sector         = item.Sector;
                OfflineBookViewModel.BookedDate     = item.BookedOn.Value;
                OfflineBookViewModel.BookedBy       = item.BookedBy;
                OfflineBookViewModel.MPNRId         = item.MPNRId;
                OfflineBookViewModel.BookingRefNo   = item.BookingReference;
                OfflineBookViewModel.TicketStatusId = item.TicketStatusId;


                model.Add(OfflineBookViewModel);
            }
            return(model.ToList());
        }
        public ActionResult Index()
        {
            OfflineBookViewModel model = new OfflineBookViewModel();

            model.OfflineBookTicketList = bookProvider.ListOfflineBook(null, null);
            return(View(model));
        }
        public ActionResult Delete(OfflineBookViewModel model)
        {
            var  sessionDetail = (TravelSession)Session["TravelPortalSessionInfo"];
            bool checkId       = bookProvider.CheckMPNRIdExist(model.PNRBookedList[0].MPNRId);

            if (checkId == true)
            {
                bookProvider.Delete(model.PNRBookedList[0].MPNRId, sessionDetail.AppUserId);
            }
            return(RedirectToAction("Index"));
        }
        public ActionResult Create()
        {
            OfflineBookViewModel model = new OfflineBookViewModel();



            // model.SelectListCollection.CityList = bookProvider.GetCitiesByCityTypeId(1);
            model.SelectListCollection.CityList = bookProvider.GetCitiesByCityTypeId();
            model.PNRDetails.Add(new OfflineBookPNRDetailsModel());
            model.PNRDetails[0] = new OfflineBookPNRDetailsModel();
            model.PNRDetails[0].SegmentDetail.Add(new OfflineBookSegmentModel());
            model.PNRDetails[0].PassengerDetail.Add(new OfflineBookPassengerModel());

            //  model.PNRDetails[0].FareDetail.Add(new OfflineBookFareDetailModel());

            ViewData["PassengerTypes"] = new SelectList(bookProvider.GetPassengerList(), "PassengerTypeId", "PassengerTypeName");
            return(View(model));
        }
        public ActionResult BookOption(OfflineBookInputModel input)
        {
            OfflineBookViewModel model = new OfflineBookViewModel();

            model.input = input;
            //model.BookingBourceList = new SelectList(EnumHelper.GetEnumDescription(typeof(IndianLccBookingSourceEnum)), "Name", "Description");
            model.BookingBourceList = new SelectList(bookProvider.GetOfflineBookingServiceSource(), "OfflineBookingServiceProviderId", "ServiceProvider");

            if (model.input.BookingType == "International")
            {
                model.SelectListCollection.CityList = bookProvider.GetCitiesByCityTypeId(1);
                model.PNRDetails.Add(new OfflineBookPNRDetailsModel());
                model.PNRDetails[0] = new OfflineBookPNRDetailsModel();
                model.PNRDetails[0].SegmentDetail.Add(new OfflineBookSegmentModel());
                model.PNRDetails[0].PassengerDetail.Add(new OfflineBookPassengerModel());
            }

            if (model.input.BookingType == "Domestic")
            {
                model.SelectListCollection.CityList = bookProvider.GetCitiesByCityTypeId(3);
                if (model.input.JourneyType == "OneWay")
                {
                    model.PNRDetails.Add(new OfflineBookPNRDetailsModel());
                    model.PNRDetails[0] = new OfflineBookPNRDetailsModel();
                    model.PNRDetails[0].SegmentDetail.Add(new OfflineBookSegmentModel());
                    model.PNRDetails[0].PassengerDetail.Add(new OfflineBookPassengerModel());
                }
                else
                {
                    model.PNRDetails.Add(new OfflineBookPNRDetailsModel());
                    model.PNRDetails.Add(new OfflineBookPNRDetailsModel());

                    model.PNRDetails[0] = new OfflineBookPNRDetailsModel();
                    model.PNRDetails[0].SegmentDetail.Add(new OfflineBookSegmentModel());
                    model.PNRDetails[0].PassengerDetail.Add(new OfflineBookPassengerModel());

                    model.PNRDetails[1] = new OfflineBookPNRDetailsModel();
                    model.PNRDetails[1].SegmentDetail.Add(new OfflineBookSegmentModel());
                    model.PNRDetails[1].PassengerDetail.Add(new OfflineBookPassengerModel());
                }
            }
            return(View("VUC_Create", model));
        }
        public ActionResult Create(OfflineBookViewModel model, string a)
        {
            var sessionDetail = (TravelSession)Session["TravelPortalSessionInfo"];

            try
            {
                model.UserDetail.AppUserId = sessionDetail.AppUserId;
                model.UserDetail.SessionId = sessionDetail.Id;

                var response = bookProvider.ActionSaveUpdate(model, "N");

                var message = new List <string>
                {
                    response.ResponseMessage
                };
                return(PartialView("~/Views/Shared/Menu/PVC_ResponseMessage.ascx", message));
            }
            catch (Exception e)
            {
                throw new Exception("Sorry, Error Occurred While Booking!", e);
            }
        }
        public ActionResult Edit(OfflineBookViewModel model)
        {
            //model.BookingBourceList = new SelectList(EnumHelper.GetEnumDescription(typeof(IndianLccBookingSourceEnum)), "Name", "Description");
            model.BookingBourceList = new SelectList(bookProvider.GetOfflineBookingServiceSource(), "OfflineBookingServiceProviderId", "ServiceProvider");
            model.TicketStatusId    = bookProvider.GetTicketStatusId(model.PNRBookedList.FirstOrDefault().MPNRId);

            try
            {
                var ts     = (TravelSession)Session["TravelPortalSessionInfo"];
                var result = bookProvider.Edit(model);

                bookProvider.IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                EntityModel ent = new EntityModel();
                ent.Air_UpdateTicketStatusId(model.PNRBookedList[0].MPNRId, "ISSUEPNR", false, ts.AppUserId);
                return(RedirectToAction("Index"));
            }
            catch (Exception ex)
            {
                TempData["ActionResponse"] = ex.Message;
                return(View(model));
            }
        }
 public ServiceResponse ActionSaveUpdate(OfflineBookViewModel model, string tranMode)
 {
     try
     {
         if (tranMode == "N")
         {
             return(Save(model));
         }
         else if (tranMode == "U")
         {
             return(Edit(model));
         }
     }
     catch (SqlException ex)
     {
         _response = new ServiceResponse(ServiceResponsesProvider.SqlExceptionMessage(ex), MessageType.SqlException, false);
     }
     catch (Exception ex)
     {
         _response = new ServiceResponse(ex.Message, MessageType.Exception, false);
     }
     return(_response);
 }
        public ServiceResponse Save(OfflineBookViewModel models)
        {
            try
            {
                int    confirmTicketstatus = 24;
                var    model     = models;
                long   masterpnr = 0;
                string bookingref;
                using (var ts = new TransactionScope(TransactionScopeOption.Required))
                {
                    ATLTravelPortal.Areas.Airline.Repository.GeneralProvider generalProvider = new GeneralProvider();
                    var  agent = generalProvider.GetAgents(model.UserDetail.AgentId);
                    bool isByPassDealByBranch      = generalProvider.GetBranchSettings(agent.BranchOfficeId, 12);
                    bool isByPassDealByDistrubutor = generalProvider.GetDistributorSettings(agent.DistributorId, 13);

                    System.Data.Objects.ObjectParameter BranchaDeal     = new System.Data.Objects.ObjectParameter("Amount", 0);
                    System.Data.Objects.ObjectParameter DistributorDeal = new System.Data.Objects.ObjectParameter("Amount", 0);

                    var    currency        = generalProvider.GetCurrencyByCode("NPR");
                    double totalFareAmount = models.PNRDetails[0].PassengerDetail[0].FareDetail.SellingBaseFare + models.PNRDetails[0].PassengerDetail[0].FareDetail.SellingFSC - models.PNRDetails[0].PassengerDetail[0].FareDetail.DiscountAmount;

                    var branchDealAmount = _entity.Air_GetBranchDeal
                                               (agent.DistributorId,
                                               model.PNRDetails[0].SegmentDetail.FirstOrDefault().AirlineId, model.PNRDetails[0].SegmentDetail.FirstOrDefault().DepartCityId,
                                               model.PNRDetails[0].SegmentDetail.FirstOrDefault().ArrivalCityId, false, totalFareAmount, currency.CurrencyId, model.PNRDetails[0].SegmentDetail.FirstOrDefault().BIC, BranchaDeal);


                    var distributorDealAmount = _entity.Air_GetBranchDeal
                                                    (agent.AgentId,
                                                    model.PNRDetails[0].SegmentDetail.FirstOrDefault().AirlineId, model.PNRDetails[0].SegmentDetail.FirstOrDefault().DepartCityId,
                                                    model.PNRDetails[0].SegmentDetail.FirstOrDefault().ArrivalCityId, false, totalFareAmount + (double)BranchaDeal.Value + branchDealAmount, currency.CurrencyId, model.PNRDetails[0].SegmentDetail.FirstOrDefault().BIC, DistributorDeal);



                    var mpnrDetail = new TBO_MasterPNRs
                    {
                        SessionId         = model.UserDetail.SessionId.ToString(),
                        AgentId           = model.UserDetail.AgentId,
                        ServiceProviderId = 5,
                        Prefix            = model.PNRDetails[0].PassengerDetail[0].Prefix.ToString(),
                        FirstName         = model.PNRDetails[0].PassengerDetail[0].FirstName.ToUpper(),
                        MiddleName        = model.PNRDetails[0].PassengerDetail[0].MiddleName,
                        LastName          = model.PNRDetails[0].PassengerDetail[0].LastName.ToUpper(),
                        TicketStatusId    = confirmTicketstatus,
                        Email             = "*****@*****.**",
                        Phone             = model.PNRDetails[0].PassengerDetail[0].Phone,
                        Address           = "104 Level 1 The Chamber, Mumbai",
                        CreatedBy         = model.UserDetail.AppUserId,
                        CreatedDate       = DateTime.UtcNow,
                        IssuedDate        = DateTime.UtcNow,
                        DispatchedDate    = null,
                        //  BookingReference = "AH" + RandomGenerator.GenerateRandomAlphanumeric()
                        isBranchByPassDeal      = isByPassDealByBranch,
                        isDistributorByPassDeal = isByPassDealByDistrubutor
                    };

                    _entity.AddToTBO_MasterPNRs(mpnrDetail);
                    _entity.SaveChanges();

                    mpnrDetail.BookingReference = "AH" + RandomGenerator.GenerateRandomAlphanumeric() + mpnrDetail.MPNRId;
                    _entity.ApplyCurrentValues(mpnrDetail.EntityKey.EntitySetName, mpnrDetail);
                    _entity.SaveChanges();


                    masterpnr  = mpnrDetail.MPNRId;
                    bookingref = mpnrDetail.BookingReference;

                    foreach (var pnrData in model.PNRDetails)
                    {
                        var pnrDetail = new TBO_PNRs
                        {
                            MPNRId         = mpnrDetail.MPNRId,
                            BookingId      = 0,
                            TicketStatusId = confirmTicketstatus,
                            RecLoc         = pnrData.PNR.ToUpper(),
                            // BookingSource = pnrData.BookingSource,
                        };

                        _entity.AddToTBO_PNRs(pnrDetail);
                        _entity.SaveChanges();

                        var sectorDetail = new TBO_PNRsectors
                        {
                            MPNRId            = mpnrDetail.MPNRId,
                            PNRId             = pnrDetail.PNRId,
                            PlatingCarrierId  = pnrData.SegmentDetail.FirstOrDefault().AirlineId,
                            DepartCityId      = pnrData.SegmentDetail.FirstOrDefault().DepartCityId,
                            DepartDate        = pnrData.SegmentDetail.FirstOrDefault().DepartDate.Value,
                            DepartTime        = pnrData.SegmentDetail.FirstOrDefault().DepartTime.Value,
                            DestinationCityId = pnrData.SegmentDetail.Last().ArrivalCityId,
                            ArriveDate        = pnrData.SegmentDetail.LastOrDefault().ArrivalDate.Value,
                            ArriveTime        = pnrData.SegmentDetail.FirstOrDefault().ArrivalTime.Value,
                            StartTerminal     = pnrData.SegmentDetail.FirstOrDefault().StartTerminal,
                            EndTerminal       = pnrData.SegmentDetail.LastOrDefault().EndTerminal,
                        };
                        _entity.AddToTBO_PNRsectors(sectorDetail);
                        _entity.SaveChanges();

                        foreach (var seg in pnrData.SegmentDetail)
                        {
                            var segmentDetail = new TBO_PNRsegments
                            {
                                MPNRId           = mpnrDetail.MPNRId,
                                PNRId            = pnrDetail.PNRId,
                                SectorId         = sectorDetail.SectorId,
                                AirlineId        = seg.AirlineId,
                                FlightNumber     = seg.FlightNumber,
                                DepartCityId     = seg.DepartCityId,
                                DepartDate       = seg.DepartDate.Value,
                                DepartTime       = seg.DepartTime.Value,
                                ArrivalCityId    = seg.ArrivalCityId,
                                ArrivalDate      = seg.ArrivalDate.Value,
                                ArrivalTime      = seg.ArrivalTime.Value,
                                BIC              = seg.BIC,
                                StartTerminal    = seg.StartTerminal,
                                EndTerminal      = seg.EndTerminal,
                                AirlineRefNumber = seg.AirlineRefNumber.ToUpper(),
                                VndRemarks       = seg.VndRemarks,
                                FlightDuration   =
                                    String.IsNullOrEmpty(seg.Duration)
                                        ? (seg.FlightDuration.Hours.ToString() + ":" +
                                           seg.FlightDuration.Minutes.ToString())
                                        : seg.Duration,
                                Baggage   = Baggage.No.ToString(),
                                FareBasis = null,
                                FlightKey = null,
                                NVB       = null,
                                NVA       = null
                            };

                            _entity.AddToTBO_PNRsegments(segmentDetail);
                            _entity.SaveChanges();
                        }

                        foreach (var paxData in pnrData.PassengerDetail)
                        {
                            var paxDetail = new TBO_Passengers();
                            paxDetail.PNRId      = pnrDetail.PNRId;
                            paxDetail.MPNRId     = mpnrDetail.MPNRId;
                            paxDetail.Prefix     = paxData.Prefix.ToString();
                            paxDetail.FirstName  = paxData.FirstName.ToUpper();
                            paxDetail.MiddleName = paxData.MiddleName;
                            paxDetail.LastName   = paxData.LastName.ToUpper();
                            paxDetail.Gender     = "N/A";
                            if (!string.IsNullOrEmpty(paxData.DOB.Trim()))
                            {
                                paxDetail.DOB = Convert.ToDateTime(paxData.DOB);
                            }
                            paxDetail.Nationality     = paxData.NationalityId;
                            paxDetail.Country         = paxData.PassportIssuedCountryId;
                            paxDetail.PassportNumber  = paxData.PassportNumber;
                            paxDetail.PassportExpDate = paxData.PassportExpDate;

                            paxDetail.Phone           = paxData.Phone;
                            paxDetail.Email           = "*****@*****.**";
                            paxDetail.PassengerTypeId = (int)paxData.PaxType;
                            paxDetail.FFAirline       = paxData.FrequentFlyerAirlineCode != null ? (int?)_entity.Airlines.Where(
                                x => x.AirlineCode == paxData.FrequentFlyerAirlineCode).
                                                        Select(y => y.AirlineId).FirstOrDefault()
                                    : null;
                            paxDetail.FFNumber       = paxData.FrequentFlyerNo != "" ? paxData.FrequentFlyerNo : null;
                            paxDetail.DOCA           = "2nd Floor, Buddha Complex, Swayambhu, Kathmandu, Nepal";
                            paxDetail.SSR            = paxData.Meal != null ? paxData.Meal.Code : null;
                            paxDetail.SSRDescription =
                                paxData.Meal != null
                                    ? paxData.Meal.Description = paxData.Meal.Code
                                    : null;
                            paxDetail.SeatName        = paxData.Seat != null ? paxData.Seat.Code : null;
                            paxDetail.SeatDescription =
                                paxData.Seat != null ? paxData.Seat.Description : null;
                            paxDetail.UpdatedBy   = 1;
                            paxDetail.UpdatedDate = DateTime.UtcNow;

                            _entity.AddToTBO_Passengers(paxDetail);
                            _entity.SaveChanges();

                            var fareDetail = new TBO_PNRTickets
                            {
                                PNRId            = pnrDetail.PNRId,
                                MPNRId           = mpnrDetail.MPNRId,
                                PassengerId      = paxDetail.PassengerId,
                                TicketNumber     = paxData.FareDetail.TicketNumber.ToUpper(),
                                AdditionalTxnFee = paxData.FareDetail.SellingAdditionalTxnFee,
                                AirlineTransFee  = paxData.FareDetail.AirlineTransFee,
                                BaseFare         = paxData.FareDetail.SellingBaseFare,
                                Tax               = paxData.FareDetail.SellingTax,
                                OtherCharges      = paxData.FareDetail.SellingOtherCharges,
                                ServiceTax        = paxData.FareDetail.SellingServiceTax,
                                MarkupAmount      = paxData.FareDetail.MarkupAmount,
                                CommissionAmount  = 0,
                                DiscountAmount    = paxData.FareDetail.CommissionAmount,
                                Currency          = "NPR",
                                FSC               = paxData.FareDetail.SellingFSC,
                                TicketStatusId    = confirmTicketstatus,
                                TktId             = paxData.FareDetail.TicketId,
                                TourCode          = paxData.FareDetail.TourCode,
                                ValidatingAirline = paxData.FareDetail.ValidatingAirline,
                                Remarks           = paxData.FareDetail.Remarks,
                                CorporateCode     = paxData.FareDetail.CorporateCode,
                                EndorseMent       = paxData.FareDetail.Endorsement,
                                //value with Rounding
                                SellingAdditionalTxnFee =
                                    Math.Ceiling(paxData.FareDetail.SellingAdditionalTxnFee),
                                SellingAirlineTransFee =
                                    Math.Ceiling(paxData.FareDetail.SellingAirlineTransFee),
                                SellingBaseFare     = Math.Ceiling(paxData.FareDetail.SellingBaseFare),
                                SellingTax          = Math.Ceiling(paxData.FareDetail.SellingTax),
                                SellingOtherCharges =
                                    Math.Ceiling(paxData.FareDetail.SellingOtherCharges),
                                SellingServiceTax =
                                    Math.Ceiling(paxData.FareDetail.SellingServiceTax),
                                SellingFSC            = Math.Ceiling(paxData.FareDetail.SellingFSC),
                                BranchDealAmount      = (double)BranchaDeal.Value,
                                DistrubutorDealAmount = (double)DistributorDeal.Value
                            };

                            _entity.AddToTBO_PNRTickets(fareDetail);
                            _entity.SaveChanges();
                        }
                    }

                    ts.Complete();
                }
                IssueTicket(masterpnr, model.UserDetail.AppUserId);

                _entity.SaveChanges();
                _entity.Air_UpdateTicketStatusId(masterpnr, "ISSUEPNR", false, model.UserDetail.AppUserId);

                _response = new ServiceResponse("Record successfully created!! \n Your Booking Reference No is :" + bookingref, MessageType.Success, true, "Save");


                return(_response);
            }
            catch (Exception ex)
            {
                _response = new ServiceResponse(ex.Message, MessageType.Exception, false, "Save");
                return(_response);
            }
        }
        public OfflineBookViewModel GetBookedPNRList(long?mpnrid, DateTime?fromdate, DateTime?todate)
        {
            List <TBO_MasterPNRs> masterpnrList = null;

            if (mpnrid != null)
            {
                masterpnrList = _entity.TBO_MasterPNRs.Where(x => x.MPNRId == mpnrid).ToList();
            }
            else
            {
                masterpnrList = _entity.TBO_MasterPNRs.Where(x => ((x.TicketStatusId == 2) && (x.IssuedDate >= fromdate && x.IssuedDate <= todate))).ToList();
            }
            var sortedMpnrList = masterpnrList.OrderByDescending(x => x.CreatedDate);
            var pnrList        = new OfflineBookViewModel();

            pnrList.PNRBookedList = new List <OfflineBookViewModel>();


            foreach (var masterpnr in sortedMpnrList)
            {
                var agentDetail = _entity.Agents.Where(x => x.AgentId == masterpnr.AgentId);

                var offlinebooked = new OfflineBookViewModel();
                offlinebooked.MPNRId                = masterpnr.MPNRId;
                offlinebooked.BookingRefNo          = masterpnr.BookingReference;
                offlinebooked.UserDetail.AgentId    = masterpnr.AgentId;
                offlinebooked.UserDetail.AgentName  = agentDetail.FirstOrDefault().AgentName + "(" + agentDetail.FirstOrDefault().AgentCode + ")";
                offlinebooked.UserDetail.AgentPhone = agentDetail.FirstOrDefault().Phone;
                string districtName = agentDetail.FirstOrDefault().Districts != null?agentDetail.FirstOrDefault().Districts.DistrictName : string.Empty;

                string zoneName = agentDetail.FirstOrDefault().Zones != null?agentDetail.FirstOrDefault().Zones.ZoneName : string.Empty;

                offlinebooked.UserDetail.AgencyDescription =
                    @"<br/>Email: " +
                    agentDetail.FirstOrDefault().Email +
                    @"<br/>Contact No: " +
                    agentDetail.FirstOrDefault().Phone +
                    @"<br/>Contact Person: " +
                    @"<br>Address: " + districtName + ", " +
                    zoneName;
                offlinebooked.TicketStatusId = masterpnr.TicketStatusId;
                offlinebooked.TicketStatus   = GetTicketStatusName(offlinebooked.TicketStatusId);

                offlinebooked.PNRDetails = new List <OfflineBookPNRDetailsModel>();
                var pnr = _entity.TBO_PNRs.Where(x => x.MPNRId == masterpnr.MPNRId);

                foreach (var item in pnr)
                {
                    var pnrdetail = new OfflineBookPNRDetailsModel();
                    //  pnrdetail.BookedDate = new ATLTravelPortal.Repository.GeneralRepository().LocalDateTime(masterpnr.CreatedDate);
                    //  pnrdetail.IssueDate = new ATLTravelPortal.Repository.GeneralRepository().LocalDateTime((DateTime)masterpnr.IssuedDate);
                    pnrdetail.PNRId = item.PNRId;
                    pnrdetail.PNR   = item.RecLoc;
                    //pnrdetail.BookingSource = item.BookingSource;

                    pnrdetail.TicketStatus = _entity.TicketStatus.Where(x => x.ticketStatusId == item.TicketStatusId).FirstOrDefault().ticketStatusName;

                    pnrdetail.SegmentDetail = new List <OfflineBookSegmentModel>();

                    var segmentDetail = _entity.TBO_PNRsegments.Where(x => x.PNRId == item.PNRId);
                    foreach (var seg in segmentDetail)
                    {
                        var segment    = new OfflineBookSegmentModel();
                        var segAirline = GetAirlineById(seg.AirlineId);

                        segment.SegmentId      = seg.SegmentId;
                        segment.DepartCityId   = seg.DepartCityId;
                        segment.DepartDate     = seg.DepartDate;
                        segment.DepartTime     = seg.DepartTime;
                        segment.DepartCityCode = _entity.AirlineCities.Where(x => x.CityID == seg.DepartCityId).FirstOrDefault().CityCode;

                        segment.ArrivalCityId    = seg.ArrivalCityId;
                        segment.ArrivalDate      = seg.ArrivalDate;
                        segment.ArrivalTime      = seg.ArrivalTime;
                        segment.ArrivalCityCode  = _entity.AirlineCities.Where(x => x.CityID == seg.ArrivalCityId).FirstOrDefault().CityCode;
                        segment.BIC              = seg.BIC;
                        segment.AirlineRefNumber = seg.AirlineRefNumber;
                        segment.AirlineCode      = segAirline.AirlineCode;
                        segment.AirlineName      = segAirline.AirlineName;
                        segment.FlightNumber     = seg.FlightNumber;


                        pnrdetail.SegmentDetail.Add(segment);
                    }

                    pnrdetail.PassengerDetail = new List <OfflineBookPassengerModel>();

                    var paxDetail = _entity.TBO_Passengers.Where(x => x.PNRId == item.PNRId);
                    foreach (var paxItem in paxDetail)
                    {
                        var pax = new OfflineBookPassengerModel();

                        if (paxItem.Nationality != null)
                        {
                            pax.Nationality = GetCountriesById((int)paxItem.Nationality).CountryName;
                        }

                        if (paxItem.FFAirline != null)
                        {
                            pax.FrequentFlyerAirline = paxItem.FFAirline > 0 ? GetAirlineById((int)paxItem.FFAirline).AirlineName : string.Empty;
                        }

                        pax.FrequentFlyerNo = pax.FrequentFlyerNo;

                        if (pax.Meal != null)
                        {
                            pax.Meal.Code = paxItem.SSR;
                        }

                        if (pax.Seat != null)
                        {
                            pax.Seat.Code = paxItem.SeatName;
                        }

                        pax.FirstName       = paxItem.FirstName;
                        pax.LastName        = paxItem.LastName;
                        pax.DOB             = paxItem.DOB.ToString();
                        pax.Phone           = paxItem.Phone;
                        pax.PassengerPrefix = paxItem.Prefix;

                        pax.PaxType = (PassengerType)Enum.Parse(typeof(PassengerType), paxItem.PassengerTypeId.ToString());
                        pnrdetail.PassengerDetail.Add(pax);


                        pax.PassportNumber  = paxItem.PassportNumber;
                        pax.PassportExpDate = paxItem.PassportExpDate;


                        var fareDetail = _entity.TBO_PNRTickets.Where(x => x.PassengerId == paxItem.PassengerId).FirstOrDefault();
                        if (fareDetail != null)
                        {
                            pax.FareDetail.BaseFare        = fareDetail.SellingBaseFare;
                            pax.FareDetail.SellingBaseFare = fareDetail.SellingBaseFare;

                            pax.FareDetail.MarkupAmount = fareDetail.MarkupAmount;

                            pax.FareDetail.Tax        = fareDetail.Tax;
                            pax.FareDetail.SellingTax = fareDetail.SellingTax;

                            pax.FareDetail.OtherCharges        = fareDetail.OtherCharges;
                            pax.FareDetail.SellingOtherCharges = fareDetail.SellingOtherCharges;

                            pax.FareDetail.SellingServiceTax = fareDetail.SellingServiceTax;

                            pax.FareDetail.FSC        = fareDetail.SellingFSC;
                            pax.FareDetail.SellingFSC = fareDetail.SellingFSC;

                            pax.FareDetail.TicketNumber = fareDetail.TicketNumber;

                            // pax.FareDetail.AgentAirlineMarkup = fareDetail.AgentAirlineMarkup;

                            pax.FareDetail.SellingAirlineTransFee  = fareDetail.SellingAirlineTransFee;
                            pax.FareDetail.AdditionalTxnFee        = fareDetail.AdditionalTxnFee;
                            pax.FareDetail.SellingAdditionalTxnFee = fareDetail.SellingAdditionalTxnFee;

                            pax.FareDetail.DiscountAmount = fareDetail.DiscountAmount;

                            pax.FareDetail.TktId = fareDetail.TicketId;

                            pax.FareDetail.ValidatingAirline = fareDetail.ValidatingAirline;

                            pax.FareDetail.TicketStatus = _entity.TicketStatus.Where(x => x.ticketStatusId == fareDetail.TicketStatusId).FirstOrDefault().ticketStatusName;
                        }
                    }
                    offlinebooked.PNRDetails.Add(pnrdetail);

                    pnrList.BookingBourceList = new SelectList(EnumHelper.GetEnumDescription(typeof(BookingSourceEnum)), "Name", "Description", pnrdetail.BookingSource);
                }
                pnrList.PNRBookedList.Add(offlinebooked);
            }

            return(pnrList);
        }
        public ServiceResponse Edit(OfflineBookViewModel models)
        {
            try
            {
                //int confirmTicketstatus = 24;

                int confirmTicketstatus = models.TicketStatusId;
                //if (confirmTicketstatus != 28)
                //{
                //    confirmTicketstatus = 24;
                //}

                var  model  = models.PNRBookedList.FirstOrDefault();
                long mpnrId = model.MPNRId;
                using (var ts = new TransactionScope(TransactionScopeOption.Required))
                {
                    var mpnrResult = _entity.TBO_MasterPNRs.Where(x => x.MPNRId == mpnrId).FirstOrDefault();
                    mpnrResult.TicketStatusId = confirmTicketstatus;
                    mpnrResult.IssuedDate     = DateTime.UtcNow;

                    _entity.ApplyCurrentValues(mpnrResult.EntityKey.EntitySetName, mpnrResult);
                    _entity.SaveChanges();

                    var pnrResult = _entity.TBO_PNRs.Where(x => x.MPNRId == mpnrId).ToList();
                    int pnrcount  = pnrResult.Count;
                    for (int i = 0; i < pnrcount; i++)
                    {
                        pnrResult[i].RecLoc = model.PNRDetails[i].PNR;

                        //  pnrResult[i].BookingSource = model.PNRDetails[i].BookingSource;

                        pnrResult[i].TicketStatusId = confirmTicketstatus;
                        _entity.ApplyCurrentValues(pnrResult[i].EntityKey.EntitySetName, pnrResult[i]);
                        _entity.SaveChanges();

                        long currentPNRId = pnrResult[i].PNRId;

                        var ticketResult = _entity.TBO_PNRTickets.Where(x => x.PNRId == currentPNRId).ToList();
                        int ticketCount  = ticketResult.Count;

                        for (int j = 0; j < ticketCount; j++)
                        {
                            ticketResult[j].TicketNumber =
                                model.PNRDetails[i].PassengerDetail[j].FareDetail.TicketNumber;


                            ticketResult[j].TicketStatusId = confirmTicketstatus;


                            _entity.ApplyCurrentValues(ticketResult[j].EntityKey.EntitySetName, ticketResult[j]);
                            _entity.SaveChanges();
                        }

                        var airlinePnrResult = _entity.TBO_PNRsegments.Where(x => x.PNRId == currentPNRId).ToList();
                        int airlinePNRCount  = airlinePnrResult.Count;

                        for (int k = 0; k < airlinePNRCount; k++)
                        {
                            airlinePnrResult[k].AirlineRefNumber = model.PNRDetails[i].SegmentDetail[k].AirlineRefNumber.ToUpper();
                            _entity.ApplyCurrentValues(airlinePnrResult[k].EntityKey.EntitySetName, airlinePnrResult[k]);
                            _entity.SaveChanges();
                        }
                    }
                    ts.Complete();
                }

                _response = new ServiceResponse("Record successfully created!!", MessageType.Success, true, "Save");
                return(_response);
            }
            catch (Exception ex)
            {
                _response = new ServiceResponse(ex.Message, MessageType.Exception, false, "Save");
                return(_response);
            }
        }
        public ActionResult Details(OfflineBookViewModel model, FormCollection fs)
        {
            if (model.PNRBookedList[0].ServiceProviderId != Convert.ToInt32(fs["PreviousServiceProviderId"]))
            {
                //var mpnrResult = _entity.TBO_MasterPNRs.Where(x => x.MPNRId == mpnrId).FirstOrDefault();
                //if (model.PNRBookedList[0].TicketStatusId == 33 && model.PNRBookedList[0].ServiceProviderId == 5)
                //{
                //    mpnrResult.TicketStatusId = 24;
                //}

                //if (model.PNRBookedList[0].TicketStatusId == 34 && model.PNRBookedList[0].ServiceProviderId == 5)
                //{
                //    mpnrResult.TicketStatusId = 28;
                //}

                //_entity.ApplyCurrentValues(mpnrResult.EntityKey.EntitySetName, mpnrResult);
                //_entity.SaveChanges();

                bookProvider.UpdateMasterPnrTicketStatusID(model);

                bookProvider.UpdateMasterPnrServiceProviderId(model.PNRBookedList[0].ServiceProviderId, model.PNRBookedList[0].MPNRId);
            }

            GeneralProvider generalProvider = new GeneralProvider();
            decimal         totalFare       = 0;

            //foreach (var fare in model.PNRBookedList[0].PNRDetails[0].PassengerDetail[0].FareDetails)
            //{
            //    totalFare = Convert.ToDecimal(fare.BaseFare + fare.SellingTax - fare.DiscountAmount);
            //}

            totalFare = bookProvider.GetTotalFareByMPNRID(model.PNRBookedList[0].MPNRId);

            string currency = bookProvider.GetCurrencyByMPNRID(model.PNRBookedList[0].MPNRId);

            model.AvailableBalance = generalProvider.GetAccountInfoByAgentId(model.PNRBookedList[0].UserDetail.AgentId);


            bool IsSufficientBalance = (bool)generalProvider.Air_isSufficientBalance
                                       (
                totalFare,
                model.PNRBookedList[0].UserDetail.AgentId,
                (int)Enum.Parse(typeof(Galileo.FareService.CurrencyType), currency),
                model.PNRBookedList[0].ServiceProviderId
                                       );


            try
            {
                if (fs.AllKeys.Contains("Issue"))
                {
                    var ts = (TravelSession)Session["TravelPortalSessionInfo"];
                    if (model.PNRBookedList[0].ServiceProviderId == 3)
                    {
                        if (!IsSufficientBalance)
                        {
                            TempData["ActionResponse"] = "Insufficient Balance";
                            return(RedirectToAction("Details", new { id = model.PNRBookedList[0].MPNRId }));
                        }

                        string recloc = bookProvider.GetRecLoc(model.PNRBookedList[0].MPNRId);
                        if (string.IsNullOrEmpty(recloc))
                        {
                            var result = bookProvider.Edit(model);
                            bookProvider.IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                            bookProvider.Air_UpdateTicketStatusId(model.PNRBookedList[0].MPNRId, "ISSUEPNR", false, ts.AppUserId);
                        }
                        else
                        {
                            bookProvider.Abacus_IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                        }
                        TempData["SuccessMessage"] = "PNR is successfully issued.";
                    }
                    else if (model.PNRBookedList[0].ServiceProviderId == 4)
                    {
                        if (!IsSufficientBalance)
                        {
                            TempData["ActionResponse"] = "Insufficient Balance";
                            return(RedirectToAction("Details", new { id = model.PNRBookedList[0].MPNRId }));
                        }

                        string recloc = bookProvider.GetRecLoc(model.PNRBookedList[0].MPNRId);
                        if (string.IsNullOrEmpty(recloc))
                        {
                            var result = bookProvider.Edit(model);
                            bookProvider.IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                            bookProvider.Air_UpdateTicketStatusId(model.PNRBookedList[0].MPNRId, "ISSUEPNR", false, ts.AppUserId);
                        }
                        else
                        {
                            bookProvider.Buddha_IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                        }
                        TempData["SuccessMessage"] = "PNR is successfully issued.";
                    }
                    else if (model.PNRBookedList[0].TicketStatusId == 28)
                    {
                        try
                        {
                            var result = bookProvider.Edit(model);

                            bookProvider.IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                            bookProvider.Air_UpdateTicketStatusId(model.PNRBookedList[0].MPNRId, "ISSUEPNR", false, ts.AppUserId);
                            TempData["SuccessMessage"] = "PNR is successfully issued.";
                        }
                        catch
                        {
                            TempData["ActionResponse"] = "Ticket already issued.";
                        }
                    }
                    else if (model.PNRBookedList[0].ServiceProviderId == 1)
                    {
                        if (!IsSufficientBalance)
                        {
                            TempData["ActionResponse"] = "Insufficient Balance";
                            return(RedirectToAction("Details", new { id = model.PNRBookedList[0].MPNRId }));
                        }

                        string recloc = bookProvider.GetRecLoc(model.PNRBookedList[0].MPNRId);
                        if (string.IsNullOrEmpty(recloc))
                        {
                            var result = bookProvider.Edit(model);
                            bookProvider.IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                            bookProvider.Air_UpdateTicketStatusId(model.PNRBookedList[0].MPNRId, "ISSUEPNR", false, ts.AppUserId);
                        }
                        else
                        {
                            bookProvider.Galileo_IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                        }
                        TempData["SuccessMessage"] = "PNR is successfully issued.";
                    }
                    else
                    {
                        try
                        {
                            if (!IsSufficientBalance)
                            {
                                TempData["ActionResponse"] = "Insufficient Balance";
                                return(RedirectToAction("Details", new { id = model.PNRBookedList[0].MPNRId }));
                            }
                            var result = bookProvider.Edit(model);
                            bookProvider.IssueTicket(model.PNRBookedList[0].MPNRId, ts.AppUserId);
                            bookProvider.Air_UpdateTicketStatusId(model.PNRBookedList[0].MPNRId, "ISSUEPNR", false, ts.AppUserId);
                            TempData["SuccessMessage"] = "PNR is successfully issued.";
                        }
                        catch
                        {
                            TempData["ActionResponse"] = "Ticket already issued.";
                        }
                    }
                }
                else if (fs.AllKeys.Contains("Save"))
                {
                    var ts = (TravelSession)Session["TravelPortalSessionInfo"];
                    model.UpdatedBy = ts.AppUserId;
                    model.MPNRId    = model.PNRBookedList[0].MPNRId;

                    HttpPostedFileBase eTicketFile = model.ticket;
                    if (model.ticket != null)
                    {
                        if (eTicketFile.ContentType == "application/zip" || eTicketFile.ContentType == "application/x-zip-compressed")
                        {
                            var result = bookProvider.Edit(model);
                            TempData["SuccessMessage"] = "PNR is successfully saved.";
                        }
                    }
                    else if (model.ticket == null)
                    {
                        var result = bookProvider.Edit(model);
                        TempData["SuccessMessage"] = "PNR is successfully saved.";
                    }
                }
                else if (model.isDeleted)
                {
                    var sessionDetail = (TravelSession)Session["TravelPortalSessionInfo"];
                    var models        = bookProvider.GetBookedPNRList(model.PNRBookedList[0].MPNRId);
                    model.ServiceProviderId = models.PNRBookedList[0].ServiceProviderId;
                    bool checkId = bookProvider.CheckMPNRIdExist(model.PNRBookedList[0].MPNRId);

                    if (checkId == true)
                    {
                        bookProvider.Delete(model.PNRBookedList[0].MPNRId, sessionDetail.AppUserId, model.ServiceProviderId);
                    }

                    TempData["SuccessMessage"] = "PNR is successfully cancelled.";
                }
            }
            catch (GDS.GDSException ex)
            {
                System.Text.StringBuilder errorBuilder = new System.Text.StringBuilder();
                foreach (GDS.GdsErrorData errors in ex.GDSErrors)
                {
                    errorBuilder.Append(errors.ErrorMessage);
                    errorBuilder.Append(errors.ErrText);
                }
                TempData["ActionResponse"] = errorBuilder;
                ATLTravelPortal.Utility.ErrorLogging.BookingLogException(ex, model.PNRBookedList[0].MPNRId);
            }
            catch (Exception ex)
            {
                if (ex.InnerException != null)
                {
                    TempData["ActionResponse"] = ex.InnerException.Message;
                }
                ATLTravelPortal.Utility.ErrorLogging.BookingLogException(ex, model.PNRBookedList[0].MPNRId);
            }
            return(RedirectToAction("Details", new { id = model.PNRBookedList[0].MPNRId }));
        }
        public ActionResult Create(OfflineBookViewModel model, FormCollection coll)
        {
            var     sessionDetail = (TravelSession)Session["TravelPortalSessionInfo"];
            decimal totalFare     = 0;
            List <OfflineBookFareDetailModel> fareDetailsList = new List <OfflineBookFareDetailModel>();

            foreach (var fare in model.PNRDetails[0].PassengerDetail)
            {
                totalFare += Convert.ToDecimal(fare.FareDetail.SellingBaseFare); //+ fare.FareDetail.SellingTax - fare.FareDetail.DiscountAmount
            }


            GeneralProvider generalProvider = new GeneralProvider();

            bool IsSufficientBalance = (bool)generalProvider.Air_isSufficientBalance
                                       (
                totalFare,
                int.Parse(coll["UserDetail.AgentId"]),
                (int)Enum.Parse(typeof(Galileo.FareService.CurrencyType), model.PNRDetails[0].PassengerDetail[0].FareDetail.Currency),
                int.Parse(model.PNRDetails[0].BookingSource)
                                       );

            bool chkGDSPNR = bookProvider.CheckDuplicateGDSPNR(model.PNRDetails[0].PNR.ToUpper());

            try
            {
                model.UserDetail.AppUserId = sessionDetail.AppUserId;
                model.UserDetail.SessionId = sessionDetail.Id;

                HttpPostedFileBase eTicketFile = model.ticket;
                if (model.ticket != null && chkGDSPNR == true)
                {
                    if (eTicketFile.ContentType == "application/zip" || eTicketFile.ContentType == "application/x-zip-compressed")
                    {
                        if (!IsSufficientBalance)
                        {
                            TempData["ActionResponse"] = "Insufficient Balance";
                            return(View(model));
                        }

                        var response = bookProvider.Save(model, (double)totalFare);
                        return(RedirectToAction("Index"));
                    }
                }
                else if (model.ticket == null && chkGDSPNR == true)
                {
                    if (!IsSufficientBalance)
                    {
                        TempData["ActionResponse"] = "Insufficient Balance";
                        return(View(model));
                    }
                    var response = bookProvider.Save(model, (double)totalFare);
                    if (response == true)
                    {
                        return(RedirectToAction("Index"));
                    }
                    else
                    {
                        return(View("Create", model));
                    }
                }
                else
                {
                    TempData["ActionResponse"] = "Uploaded file should have .zip extension";
                }
                return(RedirectToAction("Index"));
            }
            catch (Exception e)
            {
                throw new Exception("Sorry, Error Occurred While Booking!", e);
            }
        }