//Save booking data in Database
        private int SaveBookingAndGetBookingId(PropDetailsM obj)
        {
            int result = 0;

            try
            {
                Decimal?ExchangeRate     = 1;
                Decimal?OriginalTotalAmt = 0;
                int?    Days             = 0;
                etblOriginalBookingPrice                    objOrgBook          = new etblOriginalBookingPrice();
                etblBookingNegotiationTx                    objNego             = new etblBookingNegotiationTx();
                etblBookingTrakerTx                         objTrck             = new etblBookingTrakerTx();
                List <etblBookingGuestMap>                  lst                 = new List <etblBookingGuestMap>();
                List <etblBookingDetailsTx>                 lstBookDetails      = new List <etblBookingDetailsTx>();
                List <etblBookingCancellationPolicyMap>     lstCancelPolicy     = new List <etblBookingCancellationPolicyMap>();
                List <etblBookedDayWiseTaxAmountDetails>    lstDayTaxes         = new List <etblBookedDayWiseTaxAmountDetails>();
                List <etblBookedDayWiseTaxAmountDetailsAll> lstDayTaxesDateWise = new List <etblBookedDayWiseTaxAmountDetailsAll>();

                obj.objBooking.iPropId     = obj.iPropId;
                obj.objBooking.iCustomerId = obj.iUserId;
                obj.objBooking.iGuestId    = obj.iGuestId;
                if (obj.iUserId == 0)
                {
                    obj.objBooking.iCustomerId = null;
                }
                if (obj.iGuestId == 0)
                {
                    obj.objBooking.iGuestId = null;
                }
                obj.objBooking.dtCheckIn           = obj.dtCheckIn;
                obj.objBooking.dtChekOut           = obj.dtCheckOut;
                obj.objBooking.dtReservationDate   = DateTime.Now;
                obj.objBooking.sTitleOFR           = obj.sUserTitle;
                obj.objBooking.sFirstNameOFR       = obj.sUserFirstName;
                obj.objBooking.sLastNameOFR        = obj.sUserLastName;
                obj.objBooking.sEmailOFR           = obj.sUserEmail;
                obj.objBooking.sMobileOFR          = obj.sUserMobileNo;
                obj.objBooking.sCountryPhoneCode   = obj.sCountryPhoneCode;
                obj.objBooking.dtActionDate        = DateTime.Now;
                obj.objBooking.BookingStatus       = "PP";
                obj.objBooking.PaymentStatus       = "P";
                obj.objBooking.sExtra3             = "Redeem";
                obj.objBooking.sExtra4             = obj.sTotalPoints;
                obj.objBooking.sCurrencyCode       = obj.Currency;
                obj.objBooking.dServiceCharge      = obj.TaxCharges.dOFRServiceCharge;
                obj.objBooking.dGSTOnServiceCharge = obj.TaxCharges.TaxOnServiceCharge;
                obj.objBooking.dGSTValue           = obj.TaxCharges.dGstValue;
                obj.objBooking.dGSTServiceType     = obj.TaxCharges.cGstValueType;


                if (obj.objBooking.sCurrencyCode != "INR")
                {
                    etblExchangeRatesM objExchange = BL_ExchangeRate.GetSingleRecordById("INR", obj.objBooking.sCurrencyCode);
                    if (objExchange.dRate != 0)
                    {
                        ExchangeRate = 1 / objExchange.dRate;
                    }
                }

                Days = Convert.ToInt32((Convert.ToDateTime(obj.objBooking.dtChekOut) - Convert.ToDateTime(obj.objBooking.dtCheckIn)).TotalDays);

                obj.objBooking.dTotalAmount = obj.dSummaryRoomRate * ExchangeRate;


                decimal OFRServiceTax = obj.objBooking.dServiceCharge + obj.objBooking.dGSTOnServiceCharge;

                if (!String.IsNullOrEmpty(obj.objBooking.sExtra2))
                {
                    obj.objBooking.sExtra2 = (Convert.ToDecimal(obj.objBooking.sExtra2) * Convert.ToDecimal(ExchangeRate)).ToString();
                }
                obj.objBooking.dTaxes               = obj.dSummaryTaxes * ExchangeRate;
                obj.objBooking.dTaxesForHotel       = obj.dSummaryTaxes * ExchangeRate;
                obj.objBooking.dTotalExtraBedAmount = obj.dSummaryExtraBedCharges * ExchangeRate;

                obj.objBooking.dTaxesOriginal = obj.dSummaryTaxes * ExchangeRate;

                string  TimeZone = Session["TimeZone"] != null ? Session["TimeZone"].ToString() : "+5:30";
                decimal zone     = Convert.ToDecimal(TimeZone.Replace(":", ".").Replace("+", ""));
                obj.objBooking.iCountryOffset = zone;


                if (obj.objBooking.PromoCodeApplied == true)
                {
                    obj.objBooking.dDiscountedBidPrice = obj.objBooking.PromoCodeValue * ExchangeRate;
                }

                decimal Rate = obj.dCommissionRate;
                if (Rate != 0)
                {
                    decimal Comm = (obj.dSummaryRoomRate + obj.dSummaryExtraBedCharges) * Rate / 100;
                    obj.objBooking.dTotalComm         = Comm * ExchangeRate;
                    obj.objBooking.dTotalCommOriginal = Comm * ExchangeRate;
                }

                obj.objBooking.cBookingType = "R";

                objTrck.BookingStatus = "PP";
                objTrck.dtActionDate  = DateTime.Now;

                for (int i = 0; i < obj.lstetblRooms.Count; i++)
                {
                    for (int j = 0; j < obj.lstetblRooms[i].lstRatePlan.Count; j++)
                    {
                        for (int lstOcc = 0; lstOcc < obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy.Count; lstOcc++)
                        {
                            if (obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iNoOfRooms != 0)
                            {
                                for (int k = 0; k < obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iNoOfRooms; k++)
                                {
                                    int     extrabed        = obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].ExtraBeds;
                                    decimal extrabedcharges = Convert.ToDecimal(obj.lstetblRooms[i].ExtraBedCharges) * Convert.ToDecimal(ExchangeRate);
                                    decimal total           = extrabedcharges * extrabed;

                                    decimal?dPriceRP   = Convert.ToDecimal(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].dPriceRP) * Convert.ToDecimal(ExchangeRate);
                                    decimal?dBasePrice = Convert.ToDecimal(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].dBasePrice) * Convert.ToDecimal(ExchangeRate);
                                    if (dPriceRP > dBasePrice)
                                    {
                                        OriginalTotalAmt += dPriceRP * Days;
                                    }
                                    else
                                    {
                                        OriginalTotalAmt += dBasePrice * Days;
                                    }

                                    lstBookDetails.Add(new etblBookingDetailsTx()
                                    {
                                        iRoomId          = Convert.ToString(obj.lstetblRooms[i].iRoomId),
                                        iRPId            = Convert.ToString(obj.lstetblRooms[i].lstRatePlan[j].RPID),
                                        iRooms           = 1,
                                        sRoomName        = obj.lstetblRooms[i].sRoomName,
                                        sRPName          = obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].RatePlan,
                                        iOccupancy       = Convert.ToInt16(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iOccupancy),
                                        dRoomRate        = obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].dPrice * ExchangeRate,
                                        dExtraBedRate    = total,
                                        sAmenityRatePlan = obj.lstetblRooms[i].lstRatePlan[j].RateInclusion,
                                        iAdults          = Convert.ToInt16(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iAdults),
                                        iChildren        = Convert.ToInt16(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iChildrens),
                                        iExtraBeds       = Convert.ToInt16(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].ExtraBeds),
                                        sChildrenAge     = obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].ChildrenAge,
                                        dTaxes           = (obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].dTaxes * ExchangeRate) / Days,
                                        dTaxesForHotel   = ((obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].dTaxes) * ExchangeRate) / Days,
                                        dtActionDate     = DateTime.Now,
                                        iPromoType       = Convert.ToInt16(obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iPromoType)
                                    });
                                }

                                var lstTaxes = obj.lstTaxesDateWise_OfferReview.Where(u => u.RPID == obj.lstetblRooms[i].lstRatePlan[j].RPID && u.RoomID == obj.lstetblRooms[i].iRoomId && u.iOccupancy == obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iOccupancy).ToList();

                                for (int tax = 0; tax < lstTaxes.Count; tax++)
                                {
                                    lstDayTaxes.Add(new etblBookedDayWiseTaxAmountDetails()
                                    {
                                        dtStayDay  = Convert.ToDateTime(lstTaxes[tax].dtDate),
                                        dAmount    = Convert.ToDecimal(lstTaxes[tax].dBasePrice) * ExchangeRate,
                                        dTaxPerc   = Convert.ToDecimal(lstTaxes[tax].TaxPer),
                                        dTaxVal    = Convert.ToDecimal(lstTaxes[tax].TaxVal) * ExchangeRate,
                                        RoomID     = Convert.ToInt32(lstTaxes[tax].RoomID),
                                        RPID       = Convert.ToInt32(lstTaxes[tax].RPID),
                                        iOccupancy = Convert.ToInt32(lstTaxes[tax].iOccupancy),
                                        bIsPromo   = Convert.ToBoolean(lstTaxes[tax].bIsPromo)
                                    });
                                }
                                var lstTaxesDateWise = obj.lstTaxesDateWiseAll_OfferReview.Where(u => u.RPID == obj.lstetblRooms[i].lstRatePlan[j].RPID && u.iRoomId == obj.lstetblRooms[i].iRoomId && u.iOccupancy == obj.lstetblRooms[i].lstRatePlan[j].lstetblOccupancy[lstOcc].iOccupancy).ToList();

                                for (int tax = 0; tax < lstTaxesDateWise.Count; tax++)
                                {
                                    lstDayTaxesDateWise.Add(new etblBookedDayWiseTaxAmountDetailsAll()
                                    {
                                        dtStayDay  = Convert.ToDateTime(lstTaxesDateWise[tax].dtStay),
                                        dAmount    = Convert.ToDecimal(lstTaxesDateWise[tax].dPrice) * ExchangeRate,
                                        dTaxPerc   = Convert.ToDecimal(lstTaxesDateWise[tax].MaxTaxPer),
                                        dTaxVal    = Convert.ToDecimal(lstTaxesDateWise[tax].MaxTaxVal) * ExchangeRate,
                                        RoomID     = Convert.ToInt32(lstTaxesDateWise[tax].iRoomId),
                                        RPID       = Convert.ToInt32(lstTaxesDateWise[tax].RPID),
                                        iOccupancy = Convert.ToInt32(lstTaxesDateWise[tax].iOccupancy),
                                        iTaxId     = Convert.ToInt32(lstTaxesDateWise[tax].TaxId)
                                    });
                                }

                                for (int lstCancellation = 0; lstCancellation < obj.lstetblRooms[i].lstRatePlan[j].lstCancellationPolcy.Count; lstCancellation++)
                                {
                                    DateTime StarDate = obj.lstetblRooms[i].lstRatePlan[j].lstCancellationPolcy[lstCancellation].ValidFrom;
                                    DateTime EndDate  = obj.lstetblRooms[i].lstRatePlan[j].lstCancellationPolcy[lstCancellation].ValidTo;
                                    var      res      = new List <string>();
                                    for (var date = StarDate; date <= EndDate; date = date.AddDays(1))
                                    {
                                        res.Add(date.ToString());
                                    }
                                    foreach (var ddate in res)
                                    {
                                        lstCancelPolicy.Add(new etblBookingCancellationPolicyMap()
                                        {
                                            sPolicyName  = obj.lstetblRooms[i].lstRatePlan[j].lstCancellationPolcy[lstCancellation].PolicyName,
                                            dtDate       = Convert.ToDateTime(ddate),
                                            dtActionDate = DateTime.Now,
                                            iRPId        = obj.lstetblRooms[i].lstRatePlan[j].lstCancellationPolcy[lstCancellation].iRPId.ToString()
                                        });
                                    }
                                }
                            }
                        }
                    }
                }

                objOrgBook.dOriginalTotalAmount = OriginalTotalAmt;

                result = BL_Booking.AddBooking(obj, objNego, objTrck, lstBookDetails, lst, lstCancelPolicy, lstDayTaxes, objOrgBook, lstDayTaxesDateWise);
            }
            catch (Exception)
            {
                result = 0;
            }
            return(result);
        }
Beispiel #2
0
        public ActionResult PayNow(eBiddingSearch obj)
        {
            try
            {
                Decimal?      ExchangeRate = 1;
                etblBookingTx bookobj      = new etblBookingTx();

                if (User.Identity.IsAuthenticated)
                {
                    var user = BL_WebsiteUser.GetSingleRecordById(User.Identity.GetUserId <long>());
                    bookobj.iCustomerId = user.Id;
                    bookobj.iGuestId    = 0;
                }
                else
                {
                    var stronglObject          = Session[obj.BidSearchData] as eBiddingSearch;
                    GuestUserDetails objDetail = new GuestUserDetails();
                    objDetail.Title       = obj.sUserTitle == "1" ? "Mr." : obj.sUserTitle == "2" ? "Ms." : "";
                    objDetail.FirstName   = obj.sUserFirstName;
                    objDetail.LastName    = obj.sUserLastName;
                    objDetail.Email       = obj.sUserEmail;
                    objDetail.PhoneNumber = obj.sUserMobileNo;
                    objDetail.iStateId    = stronglObject.iStateId;
                    int i = BL_Bidding.AddGuestDetailsRecord(objDetail);
                    if (i > 0)
                    {
                        bookobj.iGuestId = i;
                    }
                    else
                    {
                        return(View("BiddingInfo", obj));
                    }
                }

                string CurrencyCode = Session["CurrencyCode"] != null ? Session["CurrencyCode"].ToString() : "INR";

                if (CurrencyCode != "INR")
                {
                    etblExchangeRatesM objExchange = BL_ExchangeRate.GetSingleRecordById("INR", CurrencyCode);
                    if (objExchange.dRate != 0)
                    {
                        ExchangeRate = 1 / objExchange.dRate;
                    }
                }

                bookobj.dtCheckIn         = Convert.ToDateTime(obj.sCheckIn);;
                bookobj.dtChekOut         = Convert.ToDateTime(obj.sCheckOut);
                bookobj.dtReservationDate = DateTime.Now;
                bookobj.cBookingType      = "B";
                bookobj.sTitleOFR         = obj.sUserTitle;
                bookobj.sFirstNameOFR     = obj.sUserFirstName;
                bookobj.sLastNameOFR      = obj.sUserLastName;
                bookobj.sEmailOFR         = obj.sUserEmail;
                bookobj.sMobileOFR        = obj.sUserMobileNo;
                bookobj.dtActionDate      = DateTime.Now;
                bookobj.BookingStatus     = "PP";
                bookobj.PaymentStatus     = "P";
                bookobj.dBidAmount        = obj.dBidPrice * ExchangeRate;
                bookobj.dTotalAmount      = obj.dTotalPrice * ExchangeRate;
                bookobj.dTaxes            = obj.dTaxes * ExchangeRate;
                bookobj.dTaxesForHotel    = obj.dTaxes * ExchangeRate;
                bookobj.sCurrencyCode     = Session["CurrencyCode"] != null ? Session["CurrencyCode"].ToString() : "INR";
                bookobj.iBidStarCategory  = Convert.ToInt16(obj.sStarRating);
                bookobj.sBidType          = obj.sLocalityType;
                bookobj.sIDs                = obj.sLocalityData.TrimEnd(',');
                bookobj.dServiceCharge      = Convert.ToDecimal(obj.sOFRServiceCharge);
                bookobj.dGSTOnServiceCharge = Convert.ToDecimal(obj.sTaxOnServiceCharge_Val);
                bookobj.dGSTServiceType     = obj.cGstValueType;
                bookobj.dGSTValue           = Convert.ToString(obj.dGSTValue);
                string  TimeZone = Session["TimeZone"] != null ? Session["TimeZone"].ToString() : "+5:30";
                decimal zone     = Convert.ToDecimal(TimeZone.Replace(":", ".").Replace("+", ""));
                bookobj.iCountryOffset = zone;

                #region FetchRoomData and bind in datatables

                var roomDataResult = new List <RoomData>();
                if (obj.sJsonRoomData != null)
                {
                    roomDataResult = new JavaScriptSerializer().Deserialize <List <RoomData> >(obj.sJsonRoomData);
                }

                List <etblBIDRoomAdultsTx> lstBid = new List <etblBIDRoomAdultsTx>();

                foreach (var room in roomDataResult)
                {
                    etblBIDRoomAdultsTx RoomObj = new etblBIDRoomAdultsTx();
                    RoomObj.iRoomNo   = Convert.ToInt16(room.room);
                    RoomObj.iAdults   = Convert.ToInt16(room.adult);
                    RoomObj.iChildren = Convert.ToInt16(room.child);

                    System.Text.StringBuilder str = new System.Text.StringBuilder();
                    foreach (var child in room.ChildAge)
                    {
                        str.Append(child.Age);
                        str.Append(",");
                    }

                    string ChildAges = str.ToString().TrimEnd(',');
                    RoomObj.sChildAge = ChildAges;
                    lstBid.Add(RoomObj);
                }

                #endregion

                etblBookingTrakerTx trkobj = new etblBookingTrakerTx();
                trkobj.BookingStatus = "PP";
                trkobj.dtActionDate  = DateTime.Now;

                int j = BL_Booking.AddBookingForBid(bookobj, trkobj, lstBid);
                if (j > 0)
                {
                    obj.iBookingId             = j;
                    Session[obj.BidSearchData] = obj;
                    //  TempData.Keep();
                    return(RedirectToAction("PayNow", "Payment", new { bookingId = j }));
                }
                else
                {
                }
            }
            catch (Exception)
            {
            }

            Session[obj.BidSearchData] = obj;
            //  TempData.Keep();
            return(View("BiddingInfo", obj));
        }