public void InitAddOnPackageSelections()
 {
     Session["AddOnPackageSelections"] = new AddOnPackageSelection[0];
     return;
 }
    private AddOnPackageSelection[] GetAddOnPackageSelections(AddOnPackageSelection[] objAddOnPackageSelections, string strRoomRefID)
    {
        List<AddOnPackageSelection> lAddOnPackageSelections = new List<AddOnPackageSelection>();

        for (int i = 0; i < objAddOnPackageSelections.Length; i++)
        {
            if (objAddOnPackageSelections[i].RoomRefID == strRoomRefID)
                lAddOnPackageSelections.Add(objAddOnPackageSelections[i]);
        }

        return lAddOnPackageSelections.ToArray();
    }
    private void NextStep()
    {
        if (Step == BookingSteps.SelectHotel)
          {
         Step = BookingSteps.SelectStayDate;
         StayCriteriaSelection.PromotionCode = string.Empty;
          }
          else if (Step == BookingSteps.SelectStayDate)
         Step = BookingSteps.SelectRoomQuantity;
          else if (Step == BookingSteps.SelectRoomQuantity)
          {
         Step = BookingSteps.SelectRoomDetail;
         CurrentRoomDetailStep = RoomDetailSelectionStep.SelectAdultQuantity;
         CurrentRoomRefID = RoomRateSelections[0].RoomRefID;
         AddOnPackageSelections = new AddOnPackageSelection[0];
          }
          else if (Step == BookingSteps.SelectRoomDetail)
         Step = BookingSteps.BookingSummary;
          else if (Step == BookingSteps.BookingSummary)
         Step = BookingSteps.GuestInfo;
          else if (Step == BookingSteps.GuestInfo)
         Step = BookingSteps.ProcessPayment;
          else if (Step == BookingSteps.ProcessPayment)
         Step = BookingSteps.Confirmed;
          else if (Step == BookingSteps.Confirmed)
         Step = BookingSteps.ViewConfirmation;
          else if (Step == BookingSteps.ViewConfirmation)
         Step = BookingSteps.SelectHotel;

          LoadControls();
    }
    private void GetAddOnPackageSelection()
    {
        List<AddOnPackageSelection> lAddOnPackageSelections = new List<AddOnPackageSelection>();

        for (int i = 0; i < lAddOnPackageSelectorItemControls.Count; i++)
        {
            if (lAddOnPackageSelectorItemControls[i].Selected)
            {
                AddOnPackageSelection objAddOnPackageSelection = new AddOnPackageSelection();
                lAddOnPackageSelections.Add(objAddOnPackageSelection);

                objAddOnPackageSelection.RoomRefID = lAddOnPackageSelectorItemControls[i].RoomRefID;
                objAddOnPackageSelection.PackageCode = lAddOnPackageSelectorItemControls[i].PackageDescription.Code;
                objAddOnPackageSelection.Quantity = lAddOnPackageSelectorItemControls[i].PackageQuantity;
            }

            _AddOnPackageSelections = lAddOnPackageSelections.ToArray();
        }

        return;
    }
    public static HotelPricing[] GetHotelPricing(StayCriteriaSelection objStayCriteriaSelection, RoomRateSelection[] objRoomRateSelections, AddOnPackageSelection[] objAllAddOnPackageSelections, HotelRoomAvailInfo[] objHotelRoomAvailInfos, string strCurrenyCode)
    {
        HotelPricing[] objHotelPricing = new HotelPricing[objStayCriteriaSelection.RoomOccupantSelections.Length];

        int intNumberStayNights = ((TimeSpan)objStayCriteriaSelection.DepartureDate.Subtract(objStayCriteriaSelection.ArrivalDate)).Days;

        for (int i = 0; i < objStayCriteriaSelection.RoomOccupantSelections.Length; i++)
        {
            RoomOccupantSelection objRoomOccupantSelection = objStayCriteriaSelection.RoomOccupantSelections[i];
            RoomRateSelection objRoomRateSelection = HotelPricingHelper.GetRoomRateSelection(objRoomOccupantSelection, objRoomRateSelections);
            HotelAvailRatePlan objHotelAvailRatePlan = HotelPricingHelper.GetHotelAvailRatePlan(objRoomRateSelection, objHotelRoomAvailInfos);
            HotelAvailRoomRate objHotelAvailRoomRate = HotelPricingHelper.GetHotelAvailRoomRate(objRoomRateSelection, objHotelRoomAvailInfos);
            AddOnPackageSelection[] objAddOnPackageSelections = HotelPricingHelper.GetAddOnPackageSelections(objRoomRateSelection, objAllAddOnPackageSelections);

            decimal decTotalRoomAmount = 0;
            decimal decTotalRoomTaxes = 0; // Exclusive taxes only
            decimal decTotalRoomFees = 0; // Exclusive fees only

            for (int j = 0; j < objHotelAvailRoomRate.Rates.Length; j++)
            {
                decTotalRoomAmount += objRoomOccupantSelection.NumberRooms * objHotelAvailRoomRate.Rates[j].Amount * objHotelAvailRoomRate.Rates[j].NumNights;

                for (int k = 0; k < objHotelAvailRoomRate.Rates[j].PerNightTaxesFees.Length; k++)
                {
                    if (objHotelAvailRoomRate.Rates[j].PerNightTaxesFees[k].CategoryType == TaxFeeCategoryType.Tax && objHotelAvailRoomRate.Rates[j].PerNightTaxesFees[k].Type == TaxFeeType.Exclusive)
                    {
                        decTotalRoomTaxes += objHotelAvailRoomRate.Rates[j].PerNightTaxesFees[k].Amount;
                    }

                    else if (objHotelAvailRoomRate.Rates[j].PerNightTaxesFees[k].CategoryType == TaxFeeCategoryType.Fee && objHotelAvailRoomRate.Rates[j].PerNightTaxesFees[k].Type == TaxFeeType.Exclusive)
                    {
                        decTotalRoomFees += objHotelAvailRoomRate.Rates[j].PerNightTaxesFees[k].Amount;
                    }

                }

            }

            decTotalRoomAmount += decTotalRoomTaxes + decTotalRoomFees;

            decimal decTotalPackageAmount = 0;
            decimal decTotalPackageDeposit = 0;
            decimal decTotalPackageTaxes = 0; // Exclusive taxes only
            decimal decTotalPackageFees = 0; // Exclusive fees only

            for (int j = 0; j < objAddOnPackageSelections.Length; j++)
            {
                HotelAvailPackage objHotelAvailPackage = HotelPricingHelper.GetHotelAvailPackage(objAddOnPackageSelections[j], objRoomRateSelection, objHotelAvailRatePlan);

                if (objHotelAvailPackage.PriceType == PackagePriceType.PerStayPerNight || objHotelAvailPackage.PriceType == PackagePriceType.PerPersonPerNight)
                {
                    decTotalPackageAmount += objAddOnPackageSelections[j].Quantity * objHotelAvailPackage.Price * intNumberStayNights;
                    decTotalPackageDeposit += objAddOnPackageSelections[j].Quantity * objHotelAvailPackage.Deposit * intNumberStayNights;
                }

                else
                {
                    decTotalPackageAmount += objAddOnPackageSelections[j].Quantity * objHotelAvailPackage.Price;
                    decTotalPackageDeposit += objAddOnPackageSelections[j].Quantity * objHotelAvailPackage.Deposit;
                }

            }

            decimal decDepositTaxFactor = 0;

            if (decTotalPackageAmount != 0)
                decDepositTaxFactor = decTotalPackageDeposit / decTotalPackageAmount;

            decTotalPackageAmount += decTotalPackageTaxes + decTotalPackageFees;
            decTotalPackageDeposit += decimal.Round(((decTotalPackageTaxes + decTotalPackageFees) * decDepositTaxFactor), 2);

            decimal decTotalAdditionalTaxes = 0; // Exclusive taxes only
            decimal decTotalAdditionalFees = 0; // Exclusive fees only

            for (int j = 0; j < objHotelAvailRoomRate.PerStayTaxesFees.Length; j++)
            {
                if (objHotelAvailRoomRate.PerStayTaxesFees[j].CategoryType == TaxFeeCategoryType.Tax && objHotelAvailRoomRate.PerStayTaxesFees[j].Type == TaxFeeType.Exclusive)
                {
                    decTotalAdditionalTaxes += objHotelAvailRoomRate.PerStayTaxesFees[j].Amount;
                }

                else if (objHotelAvailRoomRate.PerStayTaxesFees[j].CategoryType == TaxFeeCategoryType.Fee && objHotelAvailRoomRate.PerStayTaxesFees[j].Type == TaxFeeType.Exclusive)
                {
                    decTotalAdditionalFees += objHotelAvailRoomRate.PerStayTaxesFees[j].Amount;
                }

            }

            objHotelPricing[i] = new HotelPricing();
            objHotelPricing[i].SegmentRefID = objRoomOccupantSelection.RoomRefID;
            objHotelPricing[i].CurrencyCode = strCurrenyCode;

            objHotelPricing[i].TotalRoomTaxes = decTotalRoomTaxes;
            objHotelPricing[i].TotalRoomFees = decTotalRoomFees;
            objHotelPricing[i].TotalRoomAmount = decTotalRoomAmount;

            objHotelPricing[i].TotalPackageTaxes = decTotalPackageTaxes;
            objHotelPricing[i].TotalPackageFees = decTotalPackageFees;
            objHotelPricing[i].TotalPackageAmount = decTotalPackageAmount;

            objHotelPricing[i].TotalAdditionalTaxes = decTotalAdditionalTaxes;
            objHotelPricing[i].TotalAdditionalFees = decTotalAdditionalFees;

            if (ConfigurationManager.AppSettings["HotelPricing.IncludeAddOnPackageAmountsInTotal"] == "1")
                objHotelPricing[i].TotalAmount = decTotalRoomAmount + decTotalPackageAmount + decTotalAdditionalTaxes + decTotalAdditionalFees;
            else
                objHotelPricing[i].TotalAmount = decTotalRoomAmount + decTotalAdditionalTaxes + decTotalAdditionalFees;

            //objHotelPricing[i].TotalDeposit = HotelPricingHelper.GetDepositAmount(objHotelAvailRatePlan, decTotalRoomAmount + decTotalPackageDeposit + decTotalAdditionalTaxes + decTotalAdditionalFees, intNumberStayNights);
            objHotelPricing[i].TotalDeposit = HotelPricingHelper.GetDepositAmount(objHotelAvailRatePlan, objHotelPricing[i].TotalAmount, intNumberStayNights);
        }

        return objHotelPricing;
    }
    private static HotelAvailPackage GetHotelAvailPackage(AddOnPackageSelection objAddOnPackageSelection, RoomRateSelection objRoomRateSelection, HotelAvailRatePlan objHotelAvailRatePlan)
    {
        for (int i = 0; i < objHotelAvailRatePlan.Packages.Length; i++)
        {
            if (objHotelAvailRatePlan.Packages[i].Code == objAddOnPackageSelection.PackageCode)
            {
                if (objHotelAvailRatePlan.Packages[i].RoomTypeCode == "" || objHotelAvailRatePlan.Packages[i].RoomTypeCode == objRoomRateSelection.RoomTypeCode)
                {
                    return objHotelAvailRatePlan.Packages[i];
                }

            }

        }

        return null;
    }
    private static AddOnPackageSelection[] GetAddOnPackageSelections(RoomRateSelection objRoomRateSelection, AddOnPackageSelection[] objAddOnPackageSelections)
    {
        List<AddOnPackageSelection> lAddOnPackageSelections = new List<AddOnPackageSelection>();

        for (int i = 0; i < objAddOnPackageSelections.Length; i++)
        {
            if (objAddOnPackageSelections[i].RoomRefID == objRoomRateSelection.RoomRefID)
                lAddOnPackageSelections.Add(objAddOnPackageSelections[i]);
        }

        return lAddOnPackageSelections.ToArray();
    }