/// <summary> /// 检测房间在这段时间内被预定或者处于不可预定状态.不可预定状态一般为RoomStatus为D /// </summary> /// <param name="listOrderedInfo">已预定的信息</param> /// <param name="mRoom">预定的房间</param> /// <param name="dtStartTime">预抵时间</param> /// <param name="dtEndTime">预离时间</param> /// <returns>如果验证通过返回True,反之返回False</returns> public bool CheckRoomOrdered(List <OrderInfoModel> listOrderedInfo, BasRoomModel mRoom, DateTime dtStartTime, DateTime dtEndTime) { if (Cmn.CheckEOF(listOrderedInfo)) { var qOrder = listOrderedInfo.Where(c => c.RoomInfo.RoomId == mRoom.RoomId); if (qOrder.Count() > 0 && (qOrder.First().RoomInfo.Status != 'E' || (qOrder.First().CommonInfo.StartDate < dtStartTime && qOrder.First().CommonInfo.EndDate > dtStartTime) || (qOrder.First().CommonInfo.StartDate < dtEndTime && qOrder.First().CommonInfo.EndDate > dtEndTime) )) { if (!Cmn.Confirm("该房间目前处于非可用状态或者已经被预定,是否继续?")) { return(false); } } } else if (mRoom.Status != 'E') { if (!Cmn.Confirm("该房间目前处于非可用状态,是否继续?")) { return(false); } } return(true); }
/// <summary> /// 更新团体房间的MainId,用于将团体房变为散客房 /// </summary> /// <param name="mCustomerStay"></param> /// <returns></returns> public bool UpdateCustomerStayMainRoomId(CustomerStayModel mCustomerStay) { try { ObjectControls oCtrl = new ObjectControls(); oCtrl.Add(MCtrl.ByStayStatus); oCtrl.Add(MCtrl.ByMainRoomId); //获取该房所在的团体所有房间 List <BasRoomModel> listTeamRoom = bRoom.GetTeamRoomList(mCustomerStay, oCtrl); //是否有其他房间可以作为主房间 var query = listTeamRoom.Where(c => c.RoomId != mCustomerStay.RoomId); if (query.Count() > 0) { if (Cmn.Confirm(string.Format("房间{0}是主房间,变为散客房之后,团队的主房间将变为{1},继续?", mCustomerStay.RoomInfo.RoomNo, query.First().RoomNo))) { List <CustomerStayModel> listTeamCustomer = new List <CustomerStayModel>(); listTeamCustomer = GetStayInRoomInfo(listTeamRoom, 'I', "M", false); int nMainRoomId = query.First().RoomId; foreach (CustomerStayModel mcs in listTeamCustomer) { if (mcs.RoomId == mCustomerStay.RoomId) { mcs.MainRoomId = -1;; } else { mcs.MainRoomId = nMainRoomId; } bCustomerStay.UpdateCustomerStay(mcs, new ObjectControls(MCtrl.SetMainRoomId)); } return(true); } } else { throw new Exception("无主房间可供接替,无法变更为散客房!"); } return(false); } catch (Exception err) { throw err; } }
/// <summary> /// 开房前检测房间是否可用 /// </summary> /// <param name="mRoom"></param> /// <returns></returns> public bool OpenRoomCheck(BasRoomModel mRoom) { if (mRoom.RoomId > 0) { if (mRoom.Status == 'I' || mRoom.Status == 'T') { Cmn.Show("房间已被占用,无法开单."); return(false); } else if (mRoom.Status == 'C' || mRoom.Status == 'D') { string sRoomStatus = mRoom.Status == 'C' ? "清理" : "停用"; if (!Cmn.Confirm(string.Format("房间{0}处于{1}状态,继续开单?", mRoom.RoomNo, sRoomStatus))) { return(false); } } return(true); } return(false); }
/// <summary> /// 换房逻辑,换房只能从一个已入住房间换到状态为可用的房间. /// </summary> /// <param name="mCustomerStay">入住信息</param> /// <param name="mNewRoomInfo">新房信息</param> /// <param name="dNewRoomRate">新房费用</param> /// <param name="mUserInfo">系统用户信息</param> /// <param name="listSysParameter">系统参数</param> public void ChangeRoom(CustomerStayModel mCustomerStay, BasRoomModel mNewRoomInfo, double dNewRoomRate, SysUserInfoModel mUserInfo, List <SysParameterModel> listSysParameter) { try { #region 将之前房间费用(光房间费用)加入到消费清单中. ConsumeDetailModel mConsume = new ConsumeDetailModel(); BasGoodsModel mGoods = new BasGoodsModel(); mGoods.Type = 'R'; List <BasGoodsModel> listGoods = bGoods.GetGoodsInfo(mGoods, new ObjectControls(MCtrl.ByGoodsType)); if (Cmn.CheckEOF(listGoods)) { mConsume.GoodsId = listGoods[0].GoodsId; } else { throw new Exception("未定义类型的R的商品,该类型为房间费."); } mConsume.StayId = mCustomerStay.StayId; mConsume.UnitPrice = mCustomerStay.RoomRate; RoomStayType eRst = mCustomerStay.RoomStayType == 'D' ? RoomStayType.Day : RoomStayType.Hour; DateTime dtNow = Cmn.DateBaseDate; mConsume.Number = GetCustomerStayDays(mCustomerStay.CommonInfo.StartDate, dtNow, dtNow, eRst, listSysParameter); mConsume.Total = GetTotalRates(mCustomerStay, null, listSysParameter, dtNow, 0.0); mConsume.CommonInfo = new CommonModel(); mConsume.CommonInfo.CreateDate = mCustomerStay.CommonInfo.StartDate; mConsume.CommonInfo.CreateUserId = mUserInfo.UserId; mConsume.CommonInfo.UpdateUserId = mUserInfo.UserId; bConsume.InsertConsumeDetail(mConsume); #endregion #region 是否团队房间 if (mCustomerStay.MainRoomId == mCustomerStay.RoomId) { if (Cmn.Confirm(string.Format("{0}为主房间,变更后{1}将成为主房间,是否继续?", mCustomerStay.RoomInfo.RoomNo, mNewRoomInfo.RoomNo))) { #region 将团队房间的MainRoomId变为新ID List <BasRoomModel> listTeamRoom = GetTeamRoomListByRoomId(mCustomerStay.RoomInfo, 'I'); if (Cmn.CheckEOF(listTeamRoom)) { ObjectControls oCtrl = new ObjectControls(); oCtrl.Add(MCtrl.SetMainRoomId); foreach (BasRoomModel mRoom in listTeamRoom) { CustomerStayModel mCs = new CustomerStayModel(); mCs.RoomId = mRoom.RoomId; mCs.Status = 'I'; ObjectControls oc = new ObjectControls(); oc.Add(MCtrl.ByStayStatus); oc.Add(MCtrl.ByRoomId); mCs = bCustomerStay.GetCustomerStayInfo(mCs, oc); if (mCs != null) { mCs.MainRoomId = mNewRoomInfo.RoomId; bCustomerStay.UpdateCustomerStay(mCs, oCtrl); } } } #endregion } } #endregion #region 将原来房间置为清理,将新房间设置为入住 ObjectControls oCtrlMain = new ObjectControls(); oCtrlMain.Add(MCtrl.SetRoomId); oCtrlMain.Add(MCtrl.SetStartDate); oCtrlMain.Add(MCtrl.SetHours); oCtrlMain.Add(MCtrl.SetRoomRate); mCustomerStay.RoomId = mNewRoomInfo.RoomId; mCustomerStay.CommonInfo.StartDate = Cmn.DateBaseDate; double dDays = GetCustomerStayDays(mCustomerStay.CommonInfo.StartDate, mCustomerStay.CommonInfo.EndDate, mCustomerStay.CommonInfo.StartDate, eRst, listSysParameter); mCustomerStay.Hours = eRst == RoomStayType.Day ? Convert.ToInt32(dDays * 24) : Convert.ToInt32(dDays); mCustomerStay.RoomRate = dNewRoomRate; bCustomerStay.UpdateCustomerStay(mCustomerStay, oCtrlMain); mNewRoomInfo.Status = mCustomerStay.RoomInfo.Status; UpdateRoomStatusByRoomId(mNewRoomInfo, mUserInfo); mCustomerStay.RoomInfo.Status = 'C'; UpdateRoomStatusByRoomId(mCustomerStay.RoomInfo, mUserInfo); #endregion } catch (Exception err) { throw err; } }