private void BindCustomerStay() { dgvCustomerStay.Rows.Clear(); int i = 0; foreach (CustomerStayModel mCs in listCustomerStay) { dgvCustomerStay.Rows.Add(); dgvCustomerStay.Rows[i].Cells["RoomNo"].Value = mCs.RoomInfo.RoomNo; if (mCs.Status == 'I') { dgvCustomerStay.Rows[i].Cells["StayStatus"].Value = "在住"; } else { dgvCustomerStay.Rows[i].Cells["StayStatus"].Value = "离店"; RoomStayType eRst = mCs.RoomStayType == 'D' ? RoomStayType.Day : RoomStayType.Hour; } dgvCustomerStay.Rows[i].Cells["UpdateUserName"].Value = mCs.CommonInfo.UpateUserName; dgvCustomerStay.Rows[i].Cells["UpdateDate"].Value = mCs.CommonInfo.UpdateDate; dgvCustomerStay.Rows[i].Cells["CustomerName"].Value = mCs.CustomerList[0].Name; dgvCustomerStay.Rows[i].Cells["StartDate"].Value = mCs.CommonInfo.StartDate; dgvCustomerStay.Rows[i].Cells["Deposit"].Value = mCs.Deposit; dgvCustomerStay.Rows[i].Cells["NeedPay"].Value = mCs.Total; dgvCustomerStay.Rows[i].Cells["Balance"].Value = mCs.Deposit - mCs.Total; dgvCustomerStay.Rows[i].Cells["PayType"].Value = GetPayDesc(mCs.PayType.ToString()); dgvCustomerStay.Rows[i].Cells["Notice"].Value = mCs.Notice; if (mCs.Deposit - mCs.Total <= 0 || ((mCs.Deposit > 0) && mCs.Total / mCs.Deposit >= double.Parse(hml.ToParameter(listSysParameter, "MAX_DEPOSIT_RATE").Value1))) { dgvCustomerStay.Rows[i].DefaultCellStyle.ForeColor = Color.Red; } i++; } }
private void BindDgv(List <CustomerStayModel> listCustomerStay) { dgvCustomerStay.Rows.Clear(); int i = 0; DateTime dtmNow = cmn.DateBaseDate; foreach (CustomerStayModel mCs in listCustomerStay) { foreach (CustomerModel mc in mCs.CustomerList) { dgvCustomerStay.Rows.Add(); dgvCustomerStay.Rows[i].Cells["StayNo"].Value = mCs.StayNo; dgvCustomerStay.Rows[i].Cells["RoomNo"].Value = mCs.RoomInfo.RoomNo; RoomStayType eRst = mCs.RoomStayType == 'D' ? RoomStayType.Day : RoomStayType.Hour; if (mc.CustomerStayHisInfo.HisStatus == 'E') { dgvCustomerStay.Rows[i].Cells["StayStatus"].Value = "在住"; //dgvCustomerStay.Rows[i].Cells["Days"].Value = hml.GetCustomerStayDays(mc.CustomerStayHisInfo.CommonInfo.StartDate, mc.CustomerStayHisInfo.CommonInfo.EndDate, dtmNow, eRst, listSysParameter); dgvCustomerStay.Rows[i].Cells["UpdateUserName"].Value = mCs.CommonInfo.UpateUserName; dgvCustomerStay.Rows[i].Cells["UpdateDate"].Value = mCs.CommonInfo.UpdateDate; dgvCustomerStay.Rows[i].Cells["Days"].Value = hml.GetCustomerStayDays(mc.CustomerStayHisInfo.CommonInfo.StartDate, dtmNow, dtmNow, eRst, listSysParameter); } else { dgvCustomerStay.Rows[i].Cells["StayStatus"].Value = "离店"; //RoomStayType eRst = mCs.RoomStayType == 'D' ? RoomStayType.Day : RoomStayType.Hour; dgvCustomerStay.Rows[i].Cells["UpdateUserName"].Value = mCs.CommonInfo.UpateUserName; dgvCustomerStay.Rows[i].Cells["UpdateDate"].Value = mCs.CommonInfo.UpdateDate; dgvCustomerStay.Rows[i].Cells["Days"].Value = hml.GetCustomerStayDays(mc.CustomerStayHisInfo.CommonInfo.StartDate, mc.CustomerStayHisInfo.CommonInfo.EndDate, dtmNow, eRst, listSysParameter); //dgvCustomerStay.Rows[i].Cells["StartDate"].Value = mc.CustomerStayHisInfo.CommonInfo.CreateDate; //dgvCustomerStay.Rows[i].Cells["EndDate"].Value = mc.CustomerStayHisInfo.CommonInfo.UpdateDate; //dgvCustomerStay.Rows[i].Cells["Days"].Value = hml.GetCustomerStayDays(mc.CustomerStayHisInfo.CommonInfo.CreateDate, mc.CustomerStayHisInfo.CommonInfo.UpdateDate, dtmNow, eRst, listSysParameter); } dgvCustomerStay.Rows[i].Cells["StartDate"].Value = mc.CustomerStayHisInfo.CommonInfo.StartDate; dgvCustomerStay.Rows[i].Cells["EndDate"].Value = mc.CustomerStayHisInfo.CommonInfo.EndDate; dgvCustomerStay.Rows[i].Cells["CustomerName"].Value = mc.Name; dgvCustomerStay.Rows[i].Cells["Sex"].Value = mc.Sex; dgvCustomerStay.Rows[i].Cells["CardID"].Value = mc.IdCardNo; dgvCustomerStay.Rows[i].Cells["Deposit"].Value = mCs.Deposit; dgvCustomerStay.Rows[i].Cells["PayType"].Value = GetPayDesc(mCs.PayType.ToString()); dgvCustomerStay.Rows[i].Cells["Notice"].Value = mCs.Notice; i++; } } }
private void BindDgv(List <CustomerStayModel> listCustomerStay) { dgvIncomeInfo.Rows.Clear(); int i = 0; double dPaidMoney = 0.0; double dTotalMoney = 0.0; foreach (CustomerStayModel mCs in listCustomerStay) { dgvIncomeInfo.Rows.Add(); dgvIncomeInfo.Rows[i].Cells["StayId"].Value = mCs.StayId; dgvIncomeInfo.Rows[i].Cells["StayNo"].Value = mCs.StayNo; dgvIncomeInfo.Rows[i].Cells["RoomNo"].Value = mCs.RoomInfo.RoomNo; string sName = ""; foreach (CustomerModel mc in mCs.CustomerList) { sName += mc.Name + ";"; } dgvIncomeInfo.Rows[i].Cells["CustomerName"].Value = sName.Remove(sName.Length - 1, 1); dgvIncomeInfo.Rows[i].Cells["StartDate"].Value = mCs.CommonInfo.StartDate; dgvIncomeInfo.Rows[i].Cells["EndDate"].Value = mCs.CommonInfo.EndDate; dgvIncomeInfo.Rows[i].Cells["PaidMoney"].Value = mCs.PaidMoney; dgvIncomeInfo.Rows[i].Cells["PayType"].Value = GetPayDesc(mCs.PayType.ToString()); dgvIncomeInfo.Rows[i].Cells["Total"].Value = mCs.Total; dgvIncomeInfo.Rows[i].Cells["Notice"].Value = mCs.Notice; RoomStayType eRst = mCs.RoomStayType == 'D' ? RoomStayType.Day : RoomStayType.Hour; dgvIncomeInfo.Rows[i].Cells["Days"].Value = hml.GetCustomerStayDays(mCs.CommonInfo.StartDate, mCs.CommonInfo.EndDate, mCs.CommonInfo.EndDate, eRst, listSysParameter); dgvIncomeInfo.Rows[i].Cells["UpdateUserName"].Value = mCs.CommonInfo.UpateUserName; dgvIncomeInfo.Rows[i].Cells["UpdateDate"].Value = mCs.CommonInfo.UpdateDate; dPaidMoney += mCs.PaidMoney; dTotalMoney += mCs.Total; i++; } tsslblTotal.Text = "合计收取现金: " + dPaidMoney + "元" + " 合计应收金额:" + dTotalMoney + "元"; }
/// <summary> /// 绑定DataGirdView /// </summary> /// <param name="listSource"></param> private void BindConsumeDetail(List <CustomerStayModel> listSource) { dgvConsumeDetail.Rows.Clear(); if (cmn.CheckEOF(listSysParameter)) { double dt = 0.0; int i = 0; if (IsCountPhone) { listJf = GetPhoneList(listSource); } foreach (CustomerStayModel mCustomerStayTmp in listSource) { dgvConsumeDetail.Rows.Add(); dgvConsumeDetail.Rows[i].Cells["RoomNo"].Value = mCustomerStayTmp.RoomInfo.RoomNo; dgvConsumeDetail.Rows[i].Cells["ConsumeName"].Value = "房间费"; dgvConsumeDetail.Rows[i].Cells["UnitPrice"].Value = mCustomerStayTmp.RoomRate; #region 结账时,统计房间使用时间需按照开房类型以及结账时间来计算. RoomStayType eRst = mCustomerStayTmp.RoomStayType.Equals('D') ? RoomStayType.Day : RoomStayType.Hour; dgvConsumeDetail.Rows[i].Cells["Number"].Value = hml.GetCustomerStayDays(mCustomerStayTmp.CommonInfo.StartDate, dtmNow, dtmNow, eRst, listSysParameter); //单项目时,只计算房价,不计算消费的商品费用. dgvConsumeDetail.Rows[i].Cells["TotalMoney"].Value = hml.GetTotalRates(mCustomerStayTmp, null, listSysParameter, dtmNow, 0.0); dt += double.Parse(dgvConsumeDetail.Rows[i].Cells["TotalMoney"].Value.ToString()); #endregion dgvConsumeDetail.Rows[i].Cells["Unit"].Value = eRst == RoomStayType.Day ? "天" : "小时"; dgvConsumeDetail.Rows[i].Cells["ConsumeDate"].Value = mCustomerStayTmp.CommonInfo.CreateDate; dgvConsumeDetail.Rows[i].Cells["CreateUserName"].Value = mCustomerStayTmp.CommonInfo.CreateUserName; #region 商品消费明细 if (cmn.CheckEOF(mCustomerStayTmp.ConSumeDetailList)) { for (int j = 0; j < mCustomerStayTmp.ConSumeDetailList.Count; j++) { dgvConsumeDetail.Rows.Add(); dgvConsumeDetail.Rows[i + 1].Cells["RoomNo"].Value = mCustomerStayTmp.RoomInfo.RoomNo; dgvConsumeDetail.Rows[i + 1].Cells["ConsumeName"].Value = mCustomerStayTmp.ConSumeDetailList[j].GoodsInfo.GoodsName; dgvConsumeDetail.Rows[i + 1].Cells["UnitPrice"].Value = mCustomerStayTmp.ConSumeDetailList[j].UnitPrice; dgvConsumeDetail.Rows[i + 1].Cells["Unit"].Value = mCustomerStayTmp.ConSumeDetailList[j].GoodsInfo.GoodsUnit; dgvConsumeDetail.Rows[i + 1].Cells["Number"].Value = mCustomerStayTmp.ConSumeDetailList[j].Number; dgvConsumeDetail.Rows[i + 1].Cells["TotalMoney"].Value = mCustomerStayTmp.ConSumeDetailList[j].Total; dgvConsumeDetail.Rows[i + 1].Cells["ConsumeDate"].Value = mCustomerStayTmp.ConSumeDetailList[j].CommonInfo.CreateDate.ToString("yyyy-MM-dd HH:mm:ss"); dgvConsumeDetail.Rows[i + 1].Cells["CreateUserName"].Value = mCustomerStayTmp.ConSumeDetailList[j].CommonInfo.CreateUserName; dt += mCustomerStayTmp.ConSumeDetailList[j].Total; i++; } } #endregion i++; if (IsCountPhone) { #region 话费明细 var query = listJf.Where(c => c.PhoneNo == mCustomerStayTmp.RoomInfo.RoomPhone); double dPhone = 0.0; if (query.Count() > 0) { dPhone = hml.GetPhoneJF(query.ToList(), listCat); } else { JFModel mEmptyJf = new JFModel(); mEmptyJf.PhoneNo = mCustomerStayTmp.RoomInfo.RoomPhone; listJf.Add(mEmptyJf); } if (dPhone > 0) { dgvConsumeDetail.Rows.Add(); dgvConsumeDetail.Rows[i].Cells["RoomNo"].Value = mCustomerStayTmp.RoomInfo.RoomNo; dgvConsumeDetail.Rows[i].Cells["ConsumeName"].Value = "电话费"; dgvConsumeDetail.Rows[i].Cells["UnitPrice"].Value = ""; dgvConsumeDetail.Rows[i].Cells["TotalMoney"].Value = dPhone; dt += dPhone; i++; } #endregion } } lblSelectedRoom.Text = listSource.Count > 1 ? "结账区内房间" : listSource[0].RoomInfo.RoomNo; lblSelectedRoomTotal.Text = dt.ToString(); } }
/// <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; } }
/// <summary> /// 计算宾客入住天数.计算费用时用到.支持浮动时间以及超时计费. /// </summary> /// <param name="dtStartDate">开始时间</param> /// <param name="dtEndDate">离店时间</param> /// <param name="listSysParameter">系统参数</param> /// <returns></returns> public double GetCustomerStayDays(DateTime dtStartDate, DateTime dtEndDate, DateTime dtNow, RoomStayType eRst, List <SysParameterModel> listSysParameter) { int nFloatTime = Convert.ToInt32(ToParameter(listSysParameter, "FLOAT_TIME").Value1); DateTime dtMinStartDate = Convert.ToDateTime(ToParameter(listSysParameter, "MIN_START_DATE").Value1); DateTime dtOffDate1 = Convert.ToDateTime(ToParameter(listSysParameter, "OFF_DATE_1").Value1); //double dAddDays = Convert.ToDouble(ToParameter(listSysParameter, "OFF_DATE_1").Value2); DateTime dtOffDate2 = Convert.ToDateTime(ToParameter(listSysParameter, "OFF_DATE_2").Value1); int nMinChargingTime = Convert.ToInt32(ToParameter(listSysParameter, "MIN_CHARGING_TIME").Value1); double dNumber = 0.0; if (dtNow.Subtract(dtStartDate).TotalMinutes <= nMinChargingTime) { return(dNumber); } if (eRst == RoomStayType.Day) { dNumber = double.Parse(dtEndDate.Date.Subtract(dtStartDate.Date).Days.ToString()); if (DateTime.Parse(dtStartDate.ToShortTimeString()).AddMinutes(nFloatTime) < dtMinStartDate) { dNumber += 1; } if (DateTime.Parse(dtEndDate.ToShortTimeString()).AddMinutes(-nFloatTime) >= dtOffDate1 && DateTime.Parse(dtEndDate.ToShortTimeString()).AddMinutes(-nFloatTime) < dtOffDate2) { dNumber += double.Parse(ToParameter(listSysParameter, "OFF_DATE_1").Value2); } else if (DateTime.Parse(dtEndDate.ToShortTimeString()).AddMinutes(-nFloatTime) >= dtOffDate2) { dNumber += double.Parse(ToParameter(listSysParameter, "OFF_DATE_1").Value2); } //如果入住时间在中午12点之前,退房时间也在当天中午12点之前,则以入住半天计算. if (dNumber == 0) { dNumber += 0.5; } } else { dNumber = GetStayHours(dtStartDate, dtEndDate, listSysParameter); } return(dNumber); }
/// <summary> /// 计算宾客入住天数.计算费用时用到.支持浮动时间以及超时计费. /// </summary> /// <param name="dtStartDate">开始时间</param> /// <param name="dtEndDate">离店时间</param> /// <param name="listSysParameter">系统参数</param> /// <returns></returns> public double GetCustomerStayDays(DateTime dtStartDate, DateTime dtEndDate,DateTime dtNow, RoomStayType eRst, List<SysParameterModel> listSysParameter) { int nFloatTime = Convert.ToInt32(ToParameter(listSysParameter, "FLOAT_TIME").Value1); DateTime dtMinStartDate = Convert.ToDateTime(ToParameter(listSysParameter, "MIN_START_DATE").Value1); DateTime dtOffDate1 = Convert.ToDateTime(ToParameter(listSysParameter, "OFF_DATE_1").Value1); //double dAddDays = Convert.ToDouble(ToParameter(listSysParameter, "OFF_DATE_1").Value2); DateTime dtOffDate2 = Convert.ToDateTime(ToParameter(listSysParameter, "OFF_DATE_2").Value1); int nMinChargingTime = Convert.ToInt32(ToParameter(listSysParameter, "MIN_CHARGING_TIME").Value1); double dNumber=0.0; if (dtNow.Subtract(dtStartDate).TotalMinutes <= nMinChargingTime) { return dNumber; } if (eRst == RoomStayType.Day) { dNumber = double.Parse(dtEndDate.Date.Subtract(dtStartDate.Date).Days.ToString()); if (DateTime.Parse(dtStartDate.ToShortTimeString()).AddMinutes(nFloatTime) < dtMinStartDate) { dNumber += 1; } if (DateTime.Parse(dtEndDate.ToShortTimeString()).AddMinutes(-nFloatTime) >= dtOffDate1 && DateTime.Parse(dtEndDate.ToShortTimeString()).AddMinutes(-nFloatTime) < dtOffDate2) { dNumber += double.Parse(ToParameter(listSysParameter, "OFF_DATE_1").Value2); } else if (DateTime.Parse(dtEndDate.ToShortTimeString()).AddMinutes(-nFloatTime) >= dtOffDate2) { dNumber += double.Parse(ToParameter(listSysParameter, "OFF_DATE_1").Value2); } //如果入住时间在中午12点之前,退房时间也在当天中午12点之前,则以入住半天计算. if (dNumber == 0) { dNumber += 0.5; } } else { dNumber = GetStayHours(dtStartDate, dtEndDate, listSysParameter); } return dNumber; }