Example #1
0
        public List <CLayer.Offers> GetForAccommodation(long accommodationId, int activeStatus)
        {
            List <DataPlug.Parameter> param = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pActiveStatus", DataPlug.DataType._Int, activeStatus));
            param.Add(Connection.GetParameter("pAccommodationId", DataPlug.DataType._BigInt, accommodationId));
            DataTable            dt     = Connection.GetTable("offer_ForAccommodation", param);
            List <CLayer.Offers> result = new List <CLayer.Offers>();

            CLayer.Offers temp;
            foreach (DataRow dr in dt.Rows)
            {
                temp            = new CLayer.Offers();
                temp.OfferId    = Connection.ToLong(dr["OfferId"]);
                temp.OfferTitle = Connection.ToString(dr["OfferTitle"]);
                temp.OfferType  = Connection.ToInteger(dr["OfferType"]);
                temp.RateType   = Connection.ToInteger(dr["RateType"]);
                temp.StartDate  = Connection.ToDate(dr["StartDate"]);
                temp.EndDate    = Connection.ToDate(dr["EndDate"]);
                temp.FreeDays   = Connection.ToInteger(dr["FreeDays"]);
                temp.NoOfDays   = Connection.ToInteger(dr["NoOfDays"]);
                temp.Amount     = Connection.ToDecimal(dr["Amount"]);
                result.Add(temp);
            }
            return(result);
        }
 public ActionResult Get(long?OfferId)
 {
     Models.OfferModel Setdata = new Models.OfferModel()
     {
         OfferId = 0
     };
     if (OfferId.HasValue)
     {
         ViewBag.Saved = false;
         CLayer.Offers Getdata = BLayer.Offers.GetByOfferId(OfferId.Value, (int)CLayer.ObjectStatus.StatusType.Active);
         if (Getdata != null)
         {
             Setdata = new Models.OfferModel()
             {
                 OfferTitle      = Getdata.OfferTitle,
                 OfferId         = Getdata.OfferId,
                 NoOfDays        = Getdata.NoOfDays,
                 StartDate       = Getdata.StartDate,
                 EndDate         = Getdata.EndDate,
                 AccommodationId = Getdata.AccommodationId,
                 Amount          = Getdata.Amount,
                 OfferFor        = Getdata.OfferFor,
                 RateType        = Getdata.RateType,
                 SBCommission    = Getdata.SBCommission,
                 FreeDays        = Getdata.FreeDays,
                 PropertyId      = Getdata.PropertyId,
                 OfferType       = Getdata.OfferType,
                 StayCategoryId  = Getdata.StayCategoryId
             }
         }
         ;
     }
     return(PartialView("~/Areas/Admin/Views/Offer/_Details.cshtml", Setdata));
 }
 public string StatusEdit(int OfferId, int Status)
 {
     try
     {
         string userid = User.Identity.GetUserId();
         long   id     = 0;
         long.TryParse(userid, out id);
         if (ModelState.IsValid)
         {
             CLayer.Offers dataStatus = new CLayer.Offers()
             {
                 OfferId     = OfferId,
                 Status      = Status,
                 UpdatedBy   = id,
                 UpdatedDate = DateTime.Now
             };
             BLayer.Offers.EditStatusChange(dataStatus);
             ViewBag.Saved = true;
         }
         else
         {
             ViewBag.Saved = false;
         }
         return(OfferId.ToString());
     }
     catch (Exception ex)
     {
         Common.LogHandler.HandleError(ex);
         return("0");
     }
 }
        //[Route("/Admin/Offer/")]
        public ActionResult Index(long?OfferId)
        {
            if (OfferId.HasValue)
            {
                Models.OfferModel Setdata1 = new Models.OfferModel()
                {
                    OfferId = 0
                };
                ViewBag.Saved = false;
                CLayer.Offers Getdata1 = BLayer.Offers.GetByOfferId(OfferId.Value, (int)CLayer.ObjectStatus.StatusType.All);
                if (Getdata1 != null)
                {
                    Setdata1 = new Models.OfferModel()
                    {
                        SOfferTitle      = Getdata1.OfferTitle,
                        SNoOfDays        = Getdata1.NoOfDays,
                        SStartDate       = Getdata1.StartDate,
                        SEndDate         = Getdata1.EndDate,
                        SAccommodationId = Getdata1.AccommodationId,
                        SAmount          = Getdata1.Amount,
                        SOfferFor        = Getdata1.OfferFor,
                        SRateType        = Getdata1.RateType,
                        SSBCommission    = Getdata1.SBCommission,
                        SFreeDays        = Getdata1.FreeDays,
                        SPropertyId      = Getdata1.PropertyId,
                        SOfferType       = Getdata1.OfferType,
                        SStayCategoryId  = Getdata1.StayCategoryId,
                        SearchValue      = Getdata1.OfferType,

                        //second
                        OfferTitle      = Getdata1.OfferTitle,
                        NoOfDays        = Getdata1.NoOfDays,
                        StartDate       = Getdata1.StartDate,
                        EndDate         = Getdata1.EndDate,
                        AccommodationId = Getdata1.AccommodationId,
                        Amount          = Getdata1.Amount,
                        OfferFor        = Getdata1.OfferFor,
                        RateType        = Getdata1.RateType,
                        SBCommission    = Getdata1.SBCommission,
                        FreeDays        = Getdata1.FreeDays,
                        PropertyId      = Getdata1.PropertyId,
                        OfferType       = Getdata1.OfferType,
                        StayCategoryId  = Getdata1.StayCategoryId
                    };
                    Setdata1.OfferId  = OfferId.Value;
                    Setdata1.SOfferId = OfferId.Value;
                }
                return(View("~/Areas/Admin/Views/Offer/Index.cshtml", Setdata1));
            }
            else
            {
                Models.OfferModel search = new Models.OfferModel();
                ViewBag.Filter = search;
                return(View("~/Areas/Admin/Views/Offer/Index.cshtml", search));
            }
        }
Example #5
0
        public long SaveAccommodationProperty(CLayer.Offers data)
        {
            List <DataPlug.Parameter> param = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pOfferId", DataPlug.DataType._BigInt, data.OfferId));
            param.Add(Connection.GetParameter("pOfferType", DataPlug.DataType._Int, data.OfferType));
            param.Add(Connection.GetParameter("pIds", DataPlug.DataType._Varchar, data.Ids));
            object result = Connection.ExecuteQueryScalar("offer_AccommodationPropertySave", param);

            return(Connection.ToLong(result));
        }
Example #6
0
        //offerList Update Status
        public int EditStatusChange(CLayer.Offers data)
        {
            List <DataPlug.Parameter> param = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pOfferId", DataPlug.DataType._Int, data.OfferId));
            param.Add(Connection.GetParameter("pStatus", DataPlug.DataType._Int, data.Status));
            param.Add(Connection.GetParameter("pStatusActive", DataPlug.DataType._Int, (int)CLayer.ObjectStatus.StatusType.Active));
            param.Add(Connection.GetParameter("pStatusInactive", DataPlug.DataType._Int, (int)CLayer.ObjectStatus.StatusType.Disabled));
            param.Add(Connection.GetParameter("pUpdatedBy", DataPlug.DataType._Int, data.UpdatedBy));
            param.Add(Connection.GetParameter("pUpdatedDate", DataPlug.DataType._DateTime, data.UpdatedDate));
            object result = Connection.ExecuteQueryScalar("offer_StatusEdit", param);

            return(Connection.ToInteger(result));
        }
        public ActionResult SaveAccommodationProperty(Models.OfferModel data)
        {
            string idss = "";

            try
            {
                // if (data.SearchString == null) data.SearchString = "";
                if (data.Ids != "" && data.Ids != null)
                {
                    idss = CSVNumericValidation(data.Ids);
                }
                else
                {
                    idss = "";
                }
                CLayer.Offers of = new CLayer.Offers()
                {
                    OfferTitle      = data.SOfferTitle,
                    OfferId         = data.SOfferId,
                    NoOfDays        = data.SNoOfDays,
                    StartDate       = data.SStartDate,
                    EndDate         = data.SEndDate,
                    AccommodationId = data.SAccommodationId,
                    Amount          = data.SAmount,
                    OfferFor        = data.SOfferFor,
                    RateType        = data.SRateType,
                    SBCommission    = data.SSBCommission,
                    FreeDays        = data.SFreeDays,
                    PropertyId      = data.SPropertyId,
                    OfferType       = data.SOfferType,
                    StayCategoryId  = data.SStayCategoryId,
                    Ids             = idss
                };
                of.Status = (int)CLayer.ObjectStatus.StatusType.Active;
                long id = BLayer.Offers.Save(of);
                of.OfferId = id;
                if (data.Ids != "" && data.Ids != null)
                {
                    BLayer.Offers.SaveAccommodationProperty(of);
                }
                return(RedirectToAction("index", "OfferList"));
            }
            catch (Exception ex)
            {
                Common.LogHandler.HandleError(ex);
                return(Redirect("~/Admin/ErrorPage")); //
            }
        }
        public ActionResult OfferDetails(long OfferId)
        {
            Models.OfferModel Setdata1 = new Models.OfferModel()
            {
                OfferId = 0
            };
            ViewBag.Saved = false;
            CLayer.Offers Getdata1 = BLayer.Offers.GetByOfferId(OfferId, (int)CLayer.ObjectStatus.StatusType.All);
            if (Getdata1 != null)
            {
                Setdata1 = new Models.OfferModel()
                {
                    SOfferTitle      = Getdata1.OfferTitle,
                    SOfferId         = Getdata1.OfferId,
                    SNoOfDays        = Getdata1.NoOfDays,
                    SStartDate       = Getdata1.StartDate,
                    SEndDate         = Getdata1.EndDate,
                    SAccommodationId = Getdata1.AccommodationId,
                    SAmount          = Getdata1.Amount,
                    SOfferFor        = Getdata1.OfferFor,
                    SRateType        = Getdata1.RateType,
                    SSBCommission    = Getdata1.SBCommission,
                    SFreeDays        = Getdata1.FreeDays,
                    SPropertyId      = Getdata1.PropertyId,
                    SOfferType       = Getdata1.OfferType,
                    SStayCategoryId  = Getdata1.StayCategoryId,
                    //second

                    OfferTitle      = Getdata1.OfferTitle,
                    OfferId         = Getdata1.OfferId,
                    NoOfDays        = Getdata1.NoOfDays,
                    StartDate       = Getdata1.StartDate,
                    EndDate         = Getdata1.EndDate,
                    AccommodationId = Getdata1.AccommodationId,
                    Amount          = Getdata1.Amount,
                    OfferFor        = Getdata1.OfferFor,
                    RateType        = Getdata1.RateType,
                    SBCommission    = Getdata1.SBCommission,
                    FreeDays        = Getdata1.FreeDays,
                    PropertyId      = Getdata1.PropertyId,
                    OfferType       = Getdata1.OfferType,
                    StayCategoryId  = Getdata1.StayCategoryId
                };
            }
            return(View(
                       "Index", Setdata1));
        }
Example #9
0
        //   public string OrderNo { get; set; }
        public BookingModel()
        {
            Items          = new List <CLayer.BookingItem>();
            OrderedBy      = new CLayer.Address();
            Forbookings    = new BookingForUserModel();
            BookingDetails = new CLayer.Booking();
            offeritems     = new CLayer.Offers();
            Supplier       = new CLayer.User();
            ForPrint       = false;
            ForPdf         = false;

            List <CLayer.B2BUser> CorporateList = BLayer.B2BUser.GetCorporateName();

            CorporateName = new SelectList(CorporateList, "B2BId", "FirstName");
            //For getting Corporate User's Name under Corporate
            List <CLayer.B2BUser> CorporateUserList = BLayer.B2BUser.GetOnCorporateUserList((int)CorporateList[0].B2BId);

            CorporateUserName = new SelectList(CorporateUserList, "UserId", "FirstName");
        }
Example #10
0
        public long Save(CLayer.Offers data)
        {
            List <DataPlug.Parameter> param = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pOfferId", DataPlug.DataType._BigInt, data.OfferId));
            param.Add(Connection.GetParameter("pNoOfDays", DataPlug.DataType._Int, data.NoOfDays));
            param.Add(Connection.GetParameter("pStartDate", DataPlug.DataType._DateTime, data.StartDate));
            param.Add(Connection.GetParameter("pEndDate", DataPlug.DataType._DateTime, data.EndDate));
            param.Add(Connection.GetParameter("pStatus", DataPlug.DataType._Int, data.Status));
            param.Add(Connection.GetParameter("pAmount", DataPlug.DataType._Double, data.Amount));
            param.Add(Connection.GetParameter("pOfferFor", DataPlug.DataType._Int, data.OfferFor));
            param.Add(Connection.GetParameter("pRateType", DataPlug.DataType._Int, data.RateType));
            param.Add(Connection.GetParameter("pSBCommission", DataPlug.DataType._Decimal, data.SBCommission));
            param.Add(Connection.GetParameter("pOfferTitle", DataPlug.DataType._Varchar, data.OfferTitle));
            param.Add(Connection.GetParameter("pFreeDays", DataPlug.DataType._Int, data.FreeDays));
            param.Add(Connection.GetParameter("pOfferType", DataPlug.DataType._Int, data.OfferType));
            param.Add(Connection.GetParameter("pStayCategoryId", DataPlug.DataType._Int, data.StayCategoryId));
            object result = Connection.ExecuteQueryScalar("Offer_Save", param);

            return(Connection.ToLong(result));
        }
Example #11
0
//#Private Region
        public long savedata(Models.OfferModel Getdata)
        {
            CLayer.Offers OfferData = new CLayer.Offers()
            {
                OfferTitle      = Getdata.OfferTitle,
                OfferId         = Getdata.OfferId,
                NoOfDays        = Getdata.NoOfDays,
                StartDate       = Getdata.StartDate,
                EndDate         = Getdata.EndDate,
                Status          = (int)CLayer.ObjectStatus.StatusType.Active,
                AccommodationId = Getdata.AccommodationId,
                Amount          = Getdata.Amount,
                OfferFor        = Getdata.OfferFor,
                RateType        = Getdata.RateType,
                SBCommission    = Getdata.SBCommission,
                FreeDays        = Getdata.FreeDays,
                OfferType       = Getdata.OfferType,
                StayCategoryId  = Getdata.StayCategoryId
            };
            long id = BLayer.Offers.Save(OfferData);

            return(id);
        }
Example #12
0
        public CLayer.Offers   GetByOfferId(long OfferId, int Status)
        {
            CLayer.Offers             Offerob = null;
            List <DataPlug.Parameter> param   = new List <DataPlug.Parameter>();

            param.Add(Connection.GetParameter("pOfferId", DataPlug.DataType._BigInt, OfferId));
            param.Add(Connection.GetParameter("pStatus", DataPlug.DataType._BigInt, Status));
            DataTable dt = Connection.GetTable("Offer_GetById", param);

            if (dt.Rows.Count > 0)
            {
                Offerob            = new CLayer.Offers();
                Offerob.OfferId    = OfferId;
                Offerob.OfferTitle = Connection.ToString(dt.Rows[0]["OfferTitle"]);
                Offerob.OfferId    = Connection.ToLong(dt.Rows[0]["OfferId"]);
                Offerob.NoOfDays   = Connection.ToInteger(dt.Rows[0]["NoOfDays"]);
                Offerob.StartDate  = Connection.ToDate(dt.Rows[0]["StartDate"]);
                Offerob.EndDate    = Connection.ToDate(dt.Rows[0]["EndDate"]);
                Offerob.Status     = Connection.ToInteger(dt.Rows[0]["Status"]);
                //AccommodationId = Connection.ToLong(dt.Rows[0]["AccommodationId"]);
                Offerob.Amount       = Connection.ToDecimal(dt.Rows[0]["Amount"]);
                Offerob.OfferFor     = Connection.ToInteger(dt.Rows[0]["OfferFor"]);
                Offerob.RateType     = Connection.ToInteger(dt.Rows[0]["RateType"]);
                Offerob.SBCommission = Connection.ToDecimal(dt.Rows[0]["SBCommission"]);
                Offerob.OfferTitle   = Connection.ToString(dt.Rows[0]["OfferTitle"]);
                Offerob.FreeDays     = Connection.ToInteger(dt.Rows[0]["FreeDays"]);
                //PropertyId = Connection.ToLong(dt.Rows[0]["PropertyId"]);
                Offerob.OfferType      = Connection.ToInteger(dt.Rows[0]["OfferType"]);
                Offerob.StayCategoryId = Connection.ToInteger(dt.Rows[0]["StayCategoryId"]);
                //Display
                Offerob.Title    = Connection.ToString(dt.Rows[0]["Title"]);
                Offerob.Location = Connection.ToString(dt.Rows[0]["Location"]);
                Offerob.Address  = Connection.ToString(dt.Rows[0]["Address"]);
            }
            return(Offerob);
        }
Example #13
0
 public static long Save(CLayer.Offers data)
 {
     DataLayer.Offers Offer = new DataLayer.Offers();
     return(Offer.Save(data));
 }
Example #14
0
 public static long SaveAccommodationProperty(CLayer.Offers data)
 {
     DataLayer.Offers Offer = new DataLayer.Offers();
     return(Offer.SaveAccommodationProperty(data));
 }
Example #15
0
 public static int EditStatusChange(CLayer.Offers data)
 {
     DataLayer.Offers task = new DataLayer.Offers();
     return(task.EditStatusChange(data));
 }
Example #16
0
        public static List <CLayer.Rates> GetTotalRates(List <long> accIds, DateTime checkIn, DateTime checkOut, CLayer.Role.Roles rateType, long loggedInUserId, long InventoryAPIID)
        {
            List <CLayer.Rates> arates;
            StringBuilder       ids = new StringBuilder();
            bool isCorporate        = false;
            long TAMInventoryAPIID  = InventoryAPIID;
            long corpId             = 0;

            if (rateType == CLayer.Role.Roles.Corporate)
            {
                CLayer.Role.Roles rle = BLayer.User.GetRole(loggedInUserId);
                if (rle == CLayer.Role.Roles.CorporateUser)
                {
                    corpId = BLayer.B2B.GetCorporateIdOfUser(loggedInUserId);
                }
                else
                {
                    corpId = loggedInUserId;
                }
                isCorporate = true;
            }


            foreach (long id in accIds)
            {
                ids.Append(",");
                ids.Append(id);
            }
            ids.Remove(0, 1);

            List <CLayer.Rates> result = new List <CLayer.Rates>();

            if (TAMInventoryAPIID == 4 || TAMInventoryAPIID == 5)
            {
                arates = GetAccommodationRatesForAPI(ids.ToString(), checkIn, checkOut, rateType);
            }
            else
            {
                arates = GetAccommodationRates(ids.ToString(), checkIn, checkOut, rateType);
            }

            DateTime currentDate;
            decimal  total, currate, curguest_rate, guest, PurchaseRateaAfterTaxs, totalPurchaseRateAfterTaxs, PurchaseRateBeforeTax, SellRateAfterTax, SellRateBeforeTax, Prch_Rate_AT, Prch_Rate_ATX, PurchaseRateAfterTax;

            int  cnt, idx;
            int  days       = (checkOut - checkIn).Days;
            long propertyId = BLayer.Accommodation.GetPropertyId(accIds[0]);
            int  inventory  = 0;

            CLayer.Discount dicnt = null;

            if (isCorporate)
            {
                dicnt = BLayer.Discount.GetDiscount(corpId, propertyId);
            }

            CLayer.RateCommission rc = BLayer.Property.GetCommission(propertyId);


            List <CLayer.Offers> propertyOffers = BLayer.Offers.GetForPropertyCalc(propertyId, checkIn, checkOut);
            bool hasPrOffers = (propertyOffers.Count > 0);
            List <CLayer.Offers> accOffers;

            CLayer.Offers propOffer = null;
            if (hasPrOffers)
            {
                propOffer = propertyOffers[0];
            }
            CLayer.Offers curOffer = null;
            DateTime      offEndDate, offStartDate;

            offStartDate = offEndDate = DateTime.Today;

            List <CLayer.BookingItemOffer> appliedOffers;
            List <CLayer.Rates.RateValues> bookingRates;

            int noOfDays     = (checkOut - checkIn).Days;
            int reduceDateBy = 0;
            int calcDays     = 0;

            long            curOfferId    = 0;
            decimal         curOldRate    = 0;
            List <DateTime> freeDays      = new List <DateTime>();
            bool            freeDaysExist = false;

            foreach (long id in accIds)
            {
                List <CLayer.Rates> accrates = arates.Where(m => m.AccommodationId == id).OrderBy(x => x.StartDate).ToList();
                cnt = accrates.Count();
                if (cnt > 0)
                {
                    inventory = accrates[0].NoofAcc;
                }
                else
                {
                    inventory = 0;
                    result.Add(new CLayer.Rates()
                    {
                        Amount          = 0,
                        GuestRate       = 0,
                        AccommodationId = id,
                        NoofAcc         = 0,
                        RateChanges     = new List <CLayer.Rates.RateValues>(), //FirstDayCharge = fctotal,
                        SBMarkup        = 0,
                        CorpDiscount    = 0,
                        AppliedOffers   = new List <CLayer.BookingItemOffer>()
                    });
                    continue;
                }
                accOffers     = BLayer.Offers.GetForAccommodationCalc(id, checkIn, checkOut);
                appliedOffers = new List <CLayer.BookingItemOffer>();
                curOffer      = null;
                bookingRates  = new List <CLayer.Rates.RateValues>();
                if (accOffers.Count > 0)
                {
                    curOffer = accOffers[0];
                }
                else
                {
                    curOffer = null;
                    if (hasPrOffers)
                    {
                        curOffer = propOffer;
                    }
                }
                curOfferId                 = 0;
                currentDate                = checkIn;
                total                      = 0;
                guest                      = 0;
                PurchaseRateaAfterTaxs     = 0;
                totalPurchaseRateAfterTaxs = 0;
                currate                    = 0;
                curOldRate                 = 0;
                curguest_rate              = 0;
                SellRateBeforeTax          = 0;
                PurchaseRateBeforeTax      = 0;
                Prch_Rate_AT               = 0;
                Prch_Rate_ATX              = 0;
                PurchaseRateAfterTax       = 0;
                SellRateAfterTax           = 0;
                freeDays.Clear();
                //calculate if free nights offer is available..
                reduceDateBy = 0;

                if (curOffer != null && (!isCorporate)) //offer is not available for corporate
                {
                    //find offer applicable date
                    if (checkIn > curOffer.StartDate)
                    {
                        offStartDate = checkIn;
                    }
                    else
                    {
                        offStartDate = curOffer.StartDate;
                    }
                    if (checkOut < curOffer.EndDate)
                    {
                        offEndDate = checkOut;
                    }
                    else
                    {
                        offEndDate = curOffer.EndDate;
                    }


                    if (curOffer.RateType == (int)CLayer.ObjectStatus.OfferRateType.OfferFreeRate)
                    {
                        int tot    = curOffer.FreeDays + curOffer.NoOfDays; //total days -Example:  for 4 days booking 2 days free.. So total - minimum- 6days booking should be there
                        int hwmany = 0;
                        calcDays = (offEndDate - offStartDate).Days;
                        if (calcDays >= tot)
                        {
                            hwmany       = calcDays / tot;
                            reduceDateBy = hwmany * curOffer.FreeDays;
                            //  currentDate = currentDate.AddDays(reduceDateBy); //reduce freedays from calculation

                            if (reduceDateBy == 1)
                            {
                                if (offEndDate == checkOut)
                                {
                                    offEndDate = offEndDate.AddDays(-1);
                                }
                                if (offEndDate >= checkIn)
                                {
                                    freeDays.Add(offEndDate);
                                }
                            }
                            else if (reduceDateBy > 1)
                            {
                                if (offEndDate == checkOut)
                                {
                                    offEndDate = offEndDate.AddDays(-1);
                                }
                                while (reduceDateBy > 0)
                                {
                                    if (offEndDate >= checkIn)
                                    {
                                        freeDays.Add(offEndDate);
                                    }
                                    offEndDate.AddDays(-1 * reduceDateBy);
                                    reduceDateBy--;
                                }
                            }
                            //to do offer applied markit
                            curOfferId = curOffer.OfferId;
                            appliedOffers.Add(new CLayer.BookingItemOffer()
                            {
                                OfferId = curOffer.OfferId, OfferTitle = curOffer.Title, AccommodationId = id
                            });
                        }
                        curOffer = null; //avoid checking other offer types
                    }
                }
                freeDaysExist = (freeDays.Count > 0);

                // find tax here

                decimal tax = BLayer.PropertyTax.GetTotalTax(propertyId);

                while (currentDate < checkOut)
                {
                    //never reset currate or curguest_rate here, if a rate is not found for the date then old rate is used
                    for (idx = 0; idx < cnt; idx++)
                    {
                        if (currentDate >= accrates[idx].StartDate && currentDate <= accrates[idx].EndDate)
                        {
                            currate                = accrates[idx].Amount;
                            curguest_rate          = accrates[idx].GuestRate;
                            PurchaseRateaAfterTaxs = accrates[idx].PurchaseRateAfterTax;
                            Prch_Rate_AT           = accrates[idx].PurchaseRateAfterTax;
                            break;
                        }
                    }
                    if (curOldRate != currate)
                    {
                        bookingRates.Add(new CLayer.Rates.RateValues()
                        {
                            StartDate = currentDate.ToShortDateString(), DayCharge = (double)currate, DayGuestCharge = (double)curguest_rate, DayTotalCharge = 0, DayTotalGuestCharge = 0
                        });
                        curOldRate = currate;
                    }
                    if (curOffer != null && (!isCorporate))
                    {
                        if (currentDate >= offStartDate && currentDate <= offEndDate)
                        {
                            if (curOfferId != curOffer.OfferId && curOfferId != 0)
                            {
                                curOfferId = curOffer.OfferId;
                                appliedOffers.Add(new CLayer.BookingItemOffer()
                                {
                                    OfferId = curOffer.OfferId, OfferTitle = curOffer.Title, AccommodationId = id
                                });
                            }

                            switch ((CLayer.ObjectStatus.OfferRateType)curOffer.RateType)
                            {
                            case CLayer.ObjectStatus.OfferRateType.OfferFlatRate:
                                total = total + curOffer.Amount;
                                guest = guest + curguest_rate;
                                break;

                            case CLayer.ObjectStatus.OfferRateType.OfferPercentageRate:
                                total = Math.Round(total + (currate - (currate * curOffer.Amount / 100)));
                                guest = Math.Round(guest + (curguest_rate - (curguest_rate * curOffer.Amount / 100)));
                                break;
                            }
                        }
                        else
                        {
                            total = total + currate;
                            totalPurchaseRateAfterTaxs = totalPurchaseRateAfterTaxs + PurchaseRateaAfterTaxs;
                            guest         = guest + curguest_rate;
                            Prch_Rate_ATX = Prch_Rate_ATX + Prch_Rate_AT;
                        }
                    }
                    else
                    {
                        //perform calculations here
                        if (freeDaysExist)
                        {
                            if (!freeDays.Contains(currentDate))
                            {
                                total = total + currate;
                                totalPurchaseRateAfterTaxs = totalPurchaseRateAfterTaxs + PurchaseRateaAfterTaxs;
                                guest         = guest + curguest_rate;
                                Prch_Rate_ATX = Prch_Rate_ATX + Prch_Rate_AT;
                            }
                        }
                        else
                        {
                            total = total + currate;
                            totalPurchaseRateAfterTaxs = totalPurchaseRateAfterTaxs + PurchaseRateaAfterTaxs;
                            guest         = guest + curguest_rate;
                            Prch_Rate_ATX = Prch_Rate_ATX + Prch_Rate_AT;
                        }
                    }
                    currentDate = currentDate.AddDays(1);
                }

                decimal CalcTotalTax = Math.Round((total * tax) / 100);
                decimal CalcGuestTax = Math.Round((guest * tax) / 100);

                //reduce tax from supplier rate
                SellRateAfterTax           = total;
                total                      = Math.Round(total / (1 + (tax / 100)));
                guest                      = Math.Round(guest / (1 + (tax / 100)));
                totalPurchaseRateAfterTaxs = Math.Round(totalPurchaseRateAfterTaxs / (1 + (tax / 100)));
                SellRateBeforeTax          = totalPurchaseRateAfterTaxs;
                PurchaseRateBeforeTax      = total;
                PurchaseRateAfterTax       = Prch_Rate_ATX;

                //calculate corp discount and SB Markup here..


                //SB Markup
                decimal SBMarkup_rate  = 0;
                decimal SBMarkup_guest = 0;

                if (days < CLayer.Rates.LONG_TERM_DAYS)
                {
                    if (isCorporate)
                    {
                        SBMarkup_rate  = Math.Round(total * ((decimal)rc.B2BShortTerm) / 100);
                        SBMarkup_guest = Math.Round(guest * ((decimal)rc.B2BShortTerm) / 100);
                        //first day charge
                        //diff rates calculation
                        for (int ai = 0; ai < bookingRates.Count; ai++)
                        {
                            bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayCharge + Math.Round(bookingRates[ai].DayCharge * rc.B2BShortTerm / 100);
                            bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayGuestCharge + Math.Round(bookingRates[ai].DayGuestCharge * rc.B2BShortTerm / 100);
                        }
                    }
                    else
                    {
                        if (TAMInventoryAPIID == 4 || TAMInventoryAPIID == 5)
                        {
                            SBMarkup_rate  = Math.Round(total - totalPurchaseRateAfterTaxs);
                            SBMarkup_guest = Math.Round(guest * ((decimal)rc.B2CShortTerm) / 100);
                        }
                        else
                        {
                            SBMarkup_rate  = Math.Round(total * ((decimal)rc.B2CShortTerm) / 100);
                            SBMarkup_guest = Math.Round(guest * ((decimal)rc.B2CShortTerm) / 100);
                        }
                        ////first day charge
                        for (int ai = 0; ai < bookingRates.Count; ai++)
                        {
                            bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayCharge + Math.Round(bookingRates[ai].DayCharge * rc.B2CShortTerm / 100);
                            bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayGuestCharge + Math.Round(bookingRates[ai].DayGuestCharge * rc.B2CShortTerm / 100);
                        }
                    }
                }
                else
                {
                    if (isCorporate)
                    {
                        SBMarkup_rate  = Math.Round(total * ((decimal)rc.B2BLongTerm) / 100);
                        SBMarkup_guest = Math.Round(guest * ((decimal)rc.B2BLongTerm) / 100);
                        //first day charge
                        //diff rates calc
                        for (int ai = 0; ai < bookingRates.Count; ai++)
                        {
                            bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayTotalCharge + Math.Round(bookingRates[ai].DayCharge * rc.B2BLongTerm / 100);
                            bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayTotalGuestCharge + Math.Round(bookingRates[ai].DayGuestCharge * rc.B2BLongTerm / 100);
                        }
                    }
                    else
                    {
                        if (TAMInventoryAPIID == 4 || TAMInventoryAPIID == 5)
                        {
                            SBMarkup_rate  = Math.Round(total - totalPurchaseRateAfterTaxs);
                            SBMarkup_guest = Math.Round(guest * ((decimal)rc.B2CLongTerm) / 100);
                        }
                        else
                        {
                            SBMarkup_rate  = Math.Round(total * ((decimal)rc.B2CLongTerm) / 100);
                            SBMarkup_guest = Math.Round(guest * ((decimal)rc.B2CLongTerm) / 100);
                        }

                        //diff rates calc
                        for (int ai = 0; ai < bookingRates.Count; ai++)
                        {
                            bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayTotalCharge + Math.Round(bookingRates[ai].DayCharge * rc.B2CLongTerm / 100);
                            bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayTotalGuestCharge + Math.Round(bookingRates[ai].DayGuestCharge * rc.B2CLongTerm / 100);
                        }
                    }
                }
                //Corporate Discount
                decimal add_discount  = 0;
                decimal base_discount = 0;

                decimal guest_add_discount  = 0;
                decimal guest_base_discount = 0;

                if (isCorporate)
                {
                    if (days < CLayer.Rates.LONG_TERM_DAYS)
                    {
                        if (dicnt.ShortTermRate > 0)
                        {
                            add_discount       = Math.Round(total * (decimal)dicnt.ShortTermRate / 100);
                            guest_add_discount = Math.Round(guest * (decimal)dicnt.ShortTermRate / 100);
                            //first day charge
                            //individual rates
                            for (int ai = 0; ai < bookingRates.Count; ai++)
                            {
                                bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayTotalCharge - Math.Round(bookingRates[ai].DayCharge * dicnt.ShortTermRate / 100);
                                bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayTotalGuestCharge - Math.Round(bookingRates[ai].DayGuestCharge * dicnt.ShortTermRate / 100);
                            }
                        }

                        if (dicnt.BaseShortTerm > 0)
                        {
                            base_discount       = Math.Round(total * (decimal)dicnt.BaseShortTerm / 100);
                            guest_base_discount = Math.Round(guest * (decimal)dicnt.BaseShortTerm / 100);
                            //first day charge
                            for (int ai = 0; ai < bookingRates.Count; ai++)
                            {
                                bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayTotalCharge - Math.Round(bookingRates[ai].DayCharge * dicnt.BaseShortTerm / 100, 2);
                                bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayTotalGuestCharge - Math.Round(bookingRates[ai].DayGuestCharge * dicnt.BaseShortTerm / 100, 2);
                            }
                        }
                    }
                    else
                    {
                        if (dicnt.LongTermRate > 0)
                        {
                            add_discount       = Math.Round(total * (decimal)dicnt.LongTermRate / 100);
                            guest_add_discount = Math.Round(guest * (decimal)dicnt.LongTermRate / 100);
                            //first day charge
                            //diff rates calc
                            for (int ai = 0; ai < bookingRates.Count; ai++)
                            {
                                bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayTotalCharge - Math.Round(bookingRates[ai].DayCharge * dicnt.LongTermRate / 100);
                                bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayTotalGuestCharge - Math.Round(bookingRates[ai].DayGuestCharge * dicnt.LongTermRate / 100);
                            }
                        }
                        if (dicnt.BaseLongTerm > 0)
                        {
                            base_discount      = Math.Round(total * (decimal)dicnt.BaseLongTerm / 100);
                            guest_add_discount = Math.Round(guest * (decimal)dicnt.BaseLongTerm / 100);
                            //first day charge
                            //diff rates calc
                            for (int ai = 0; ai < bookingRates.Count; ai++)
                            {
                                bookingRates[ai].DayTotalCharge      = bookingRates[ai].DayTotalCharge - Math.Round(bookingRates[ai].DayCharge * dicnt.BaseLongTerm / 100);
                                bookingRates[ai].DayTotalGuestCharge = bookingRates[ai].DayTotalGuestCharge - Math.Round(bookingRates[ai].DayGuestCharge * dicnt.BaseLongTerm / 100);
                            }
                        }
                    }
                }
                decimal suppRate      = total;
                decimal suppGuestRate = guest;


                if (TAMInventoryAPIID == 4 || TAMInventoryAPIID == 5)
                {
                    total = Math.Round(total);
                    guest = Math.Round(guest + SBMarkup_guest - guest_add_discount - guest_base_discount);
                }
                else
                {
                    total = Math.Round(total + SBMarkup_rate - add_discount - base_discount);
                    guest = Math.Round(guest + SBMarkup_guest - guest_add_discount - guest_base_discount);
                }


                //find tax on total amount and guest rate

                decimal totaltax = (total * tax) / 100;
                decimal guesttax = (guest * tax) / 100;

                result.Add(new CLayer.Rates()
                {
                    SupplierRate          = suppRate + CalcTotalTax,
                    SupplierGuestRate     = guest + CalcGuestTax,
                    Amount                = total,
                    GuestRate             = guest,
                    AccommodationId       = id,
                    NoofAcc               = inventory,
                    RateChanges           = bookingRates,  //FirstDayCharge = fctotal,
                    SBMarkup              = SBMarkup_rate, //(SBMarkup_rate + SBMarkup_guest),
                    SBGuestMarkup         = SBMarkup_guest,
                    CorpDiscount          = (add_discount + base_discount),
                    CorpGuestDiscount     = (guest_add_discount + guest_base_discount),
                    AppliedOffers         = appliedOffers,
                    TotalRateTax          = totaltax,
                    TotalGuestTax         = guesttax,
                    PurchaseRateAfterTax  = PurchaseRateAfterTax,
                    SellRateBeforeTax     = PurchaseRateBeforeTax,
                    PurchaseRateBeforeTax = SellRateBeforeTax,
                    SellRateAfterTax      = SellRateAfterTax
                });
            }
            return(result);
        }