private AccomodationOrderModel GetKingAvailableRoom(DateTime checkin, DateTime checkout, DataTable roomStatus, AccomodationOrderModel order) { TimeSpan ts = checkout - checkin; int staydays = ts.Days; var result = from myRom in roomStatus.AsEnumerable() where myRom.Field <int>("RoomType") == 0 && myRom.Field <bool>("Available") == true group myRom by myRom.Field <System.DateTime>("StatusDate") into g select new { aa = g.Count(), g.Key }; if (result.Count() >= staydays) { // List<AvailableRoom> ars = result.ToList(); //var a = result.ToList(); //var min = result.ToList(); List <int> KingRoomCount = new List <int>(); foreach (var item in result) { KingRoomCount.Add(item.aa); } AccomodationOrderListModel orderListKing = new AccomodationOrderListModel(); orderListKing.RoomType = GlobalVariable.RoomType.King; orderListKing.AvailableRoomNumber = KingRoomCount.Min(); order.AccomodationOrderList.Add(orderListKing); } return(order); }
private AccomodationOrderListModel CalcFinalRate(AccomodationOrderListModel order, List <AccomodationPolicy> roomPolicy) { List <AccomodationPolicy> lstPolicy = roomPolicy.FindAll(m => m.RoomType == order.RoomType); foreach (AccomodationPolicy policy in lstPolicy) { order.Price += policy.Price; order.DiscountPrice += policy.DiscountPrice; order.SubTotalPrice += policy.SubTotal; } return(order); }
/// <summary> /// online /// </summary> /// <param name="model"></param> public AccomodationOrderModel GetAvailableRoom(AccomodationOrderModel model) { StringBuilder sql = new StringBuilder(); sql.AppendLine("SELECT m.RoomType, MIN(m.Availablecount) as Availablecount"); sql.AppendLine(" from ("); sql.AppendLine(" select t.StatusDate, t.RoomType, COUNT(t.Availablecount) as Availablecount"); sql.AppendLine(" from ("); sql.AppendLine(" select StatusDate, RoomType = case RoomType when 0 then 0 when 1 then 1 when 2 then 1 end, COUNT(1) as Availablecount"); sql.AppendLine(" from RoomStatus"); sql.AppendLine(" where StatusDate >= '2015-01-01' and StatusDate <= '2015-01-02' and Available=0"); sql.AppendLine(" group by StatusDate, RoomType"); sql.AppendLine(" ) as t"); sql.AppendLine(" group by t.StatusDate, t.RoomType"); sql.AppendLine(" ) m"); sql.AppendLine(" where m.Availablecount>0 "); sql.AppendLine(" group by m.RoomType"); SqlParameter[] paras = new SqlParameter[2]; paras[0] = new SqlParameter("@CheckinDate", model.CheckInDate); paras[1] = new SqlParameter("@CheckoutDate", model.CheckOutDate); SqlAccess mySqlAccess = new SqlAccess(); DataSet ds = mySqlAccess.ExecuteAdapter(sql.ToString(), paras); model.AccomodationOrderList = new List <AccomodationOrderListModel>(); if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0) { foreach (DataRow rw in ds.Tables[0].Rows) { AccomodationOrderListModel order = new AccomodationOrderListModel(); order.RoomType = Convert.ToInt32(rw["RoomType"]); order.AvailableRoomNumber = Convert.ToInt32(rw["Availablecount"]); model.AccomodationOrderList.Add(order); } } return(model); }
private AccomodationOrderModel GetQueenAvailableRoom(DateTime checkin, DateTime checkout, DataTable roomStatus, AccomodationOrderModel order) { int minRoomCount; List <int> RoomCount1 = new List <int>(); int[] RoomCount = new int[5]; int i = 0; for (DateTime dt = checkin; dt < checkout; dt = dt.AddDays(1)) { var result = from myRom in roomStatus.AsEnumerable() where (myRom.Field <int>("RoomType") == GlobalVariable.RoomType.Queen) && //|| myRom.Field<int>("RoomType") == GlobalVariable.RoomType.Princess) myRom.Field <bool>("Available") == true && myRom.Field <DateTime>("StatusDate") == dt select myRom; if (result.Count() == 0) { //there is one day without any rooms return(order); } else { //one day just left one room RoomCount1.Add(result.Count()); // RoomCount[i] = result.Count(); // i++; } } var min = RoomCount1.Min(); minRoomCount = min; AccomodationOrderListModel orderQueen = new AccomodationOrderListModel(); orderQueen.RoomType = GlobalVariable.RoomType.Queen; orderQueen.AvailableRoomNumber = minRoomCount; order.AccomodationOrderList.Add(orderQueen); return(order); }
public AccomodationOrderModel GetAvailableRoom(AccomodationOrderModel order) { StringBuilder sql = new StringBuilder(); sql.AppendLine("select StatusDate, RoomType, Available "); sql.AppendLine(" from RoomStatus"); sql.AppendLine(" where StatusDate >= @CheckinDate and StatusDate < @CheckoutDate"); SqlParameter[] paras = new SqlParameter[2]; paras[0] = new SqlParameter("@CheckinDate", order.CheckInDate); paras[1] = new SqlParameter("@CheckoutDate", order.CheckOutDate); SqlAccess mySqlAccess = new SqlAccess(); DataSet ds = mySqlAccess.ExecuteAdapter(sql.ToString(), paras); order.AccomodationOrderList = new List <AccomodationOrderListModel>(); if (ds != null && ds.Tables.Count > 0) { DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { order = this.GetKingAvailableRoom(Convert.ToDateTime(order.CheckInDate), Convert.ToDateTime(order.CheckOutDate), dt, order);// order = this.GetQueenAvailableRoom(Convert.ToDateTime(order.CheckInDate), Convert.ToDateTime(order.CheckOutDate), dt, order); } else { AccomodationOrderListModel orderListKing = new AccomodationOrderListModel(); orderListKing.RoomType = GlobalVariable.RoomType.King; orderListKing.AvailableRoomNumber = 1; order.AccomodationOrderList.Add(orderListKing); AccomodationOrderListModel orderListQueen = new AccomodationOrderListModel(); orderListQueen.RoomType = GlobalVariable.RoomType.Queen; orderListQueen.AvailableRoomNumber = 2; order.AccomodationOrderList.Add(orderListQueen); } } return(order); }