コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }