Beispiel #1
0
 /// <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);
 }
Beispiel #2
0
        /// <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;
            }
        }
Beispiel #3
0
 /// <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);
 }
Beispiel #4
0
        /// <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;
            }
        }