private List <AccomodationPolicy> CalcDiscountRate(List <AccomodationPolicy> roomPolicy, int totalstaydays) { foreach (AccomodationPolicy policy in roomPolicy) { int leftStayDays = policy.StayDays; double totalDiscount = 0; AccomodationDiscountPolicy discountPolicy1 = policy.DiscountPolicy[0]; AccomodationDiscountPolicy discountPolicy2 = policy.DiscountPolicy[1]; //foreach (AccomodationDiscountPolicy discountPolicy in policy.DiscountPolicy) //{ if (totalstaydays >= discountPolicy1.DiscountDays) { totalDiscount = totalDiscount + discountPolicy1.DiscountRate * policy.BasicRate * policy.StayDays; // leftStayDays = totalstaydays - policy.StayDays; } else if (totalstaydays <= discountPolicy2.DiscountDays) { totalDiscount = totalDiscount + discountPolicy2.DiscountRate * policy.BasicRate * policy.StayDays; } //} policy.DiscountPrice = totalDiscount; policy.SubTotal = policy.Price - totalDiscount; } return(roomPolicy); }
/// <summary> /// online /// </summary> /// <param name="order"></param> private List <AccomodationPolicy> GetRoomPolicy(DateTime checkin, DateTime checkout, List <AccomodationDiscountPolicy> allDiscountRate) { StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT "); sql.AppendLine(" P.RoomPolicyID, P.StartDate, P.EndDate, P.RoomType,"); sql.AppendLine(" P.WeekDays, P.BasicRate as BasicRateID, P.DiscountRate, R.BasicRate"); sql.AppendLine(" FROM RoomPolicy P WITH(NOLOCK)"); sql.AppendLine(" left join RoomRate R WITH(NOLOCK) on P.BasicRate = R.RoomRateID and R.IsDelete = 0"); sql.AppendLine(" WHERE P.IsDelete = 0"); sql.AppendLine(" and ((P.StartDate <= @CheckinDate and P.EndDate>=@CheckinDate)"); sql.AppendLine(" or (P.StartDate <= @CheckoutDate and P.EndDate>=@CheckoutDate))"); SqlParameter[] paras = new SqlParameter[2]; paras[0] = new SqlParameter("@CheckinDate", checkin); paras[1] = new SqlParameter("@CheckoutDate", checkout); SqlAccess mySqlAccess = new SqlAccess(); DataSet ds = mySqlAccess.ExecuteAdapter(sql.ToString(), paras); List <AccomodationPolicy> accomodationPolicys = new List <AccomodationPolicy>(); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow rw in ds.Tables[0].Rows) { AccomodationPolicy policy = new AccomodationPolicy(); policy.RoomType = Convert.ToInt32(rw["RoomType"]); policy.StartDate = Convert.ToDateTime(rw["StartDate"]); policy.EndDate = Convert.ToDateTime(rw["EndDate"]); policy.WeekDays = rw["WeekDays"].ToString(); policy.BasicRateID = Convert.ToInt32(rw["BasicRateID"]); policy.BasicRate = Convert.ToDouble(rw["BasicRate"]); policy.DiscountPolicy = new List <AccomodationDiscountPolicy>(); List <AccomodationDiscountPolicy> lst = new List <AccomodationDiscountPolicy>(); if (!string.IsNullOrEmpty(rw["DiscountRate"].ToString())) { string[] ratesID = rw["DiscountRate"].ToString().Split(','); foreach (string rateID in ratesID) { AccomodationDiscountPolicy discountPolicy = allDiscountRate.Find(m => m.RoomRateID.ToString() == rateID); if (discountPolicy != null) { lst.Add(discountPolicy); } } var a = from t in lst orderby t.DiscountDays descending select t; policy.DiscountPolicy = a.ToList <AccomodationDiscountPolicy>(); } accomodationPolicys.Add(policy); } } return(accomodationPolicys); }