private TERMS.Business.Centers.SalesCenter.Hotel ConvertRooms(TERMS.Business.Centers.SalesCenter.Hotel hotel, Terms.Sales.Business.HotelSearchCondition searchCondtion)
    {
        List<MVRoom> rooms = new List<MVRoom>();

        for (int index = 0; index < searchCondtion.RoomSearchConditions.Count; index++)
        {
            //������
            int iAdult = searchCondtion.RoomSearchConditions[index].Passengers[TERMS.Common.PassengerType.Adult];
            //����
            int iChild = searchCondtion.RoomSearchConditions[index].Passengers[TERMS.Common.PassengerType.Child];

            int MaxNumber = 0;

            MVRoom mvroom = new MVRoom((TERMS.Business.Centers.SalesCenter.HotelProfile)((TERMS.Business.Centers.SalesCenter.HotelProfile)hotel.Profile).Clone());
            mvroom.Profile.AdultNumber = iAdult;
            mvroom.Profile.ChildNumber = iChild;

            for (int j = 0; j < hotel.Items.Count; j++)
            {
                //�жϷ��������Ƿ����
                HotelMaterial room = (HotelMaterial)hotel.Items[j];

                if (string.IsNullOrEmpty(room.Room.Name))
                    room.Room.Name = room.Room.Description;

                MaxNumber = room.Room.Capacity + room.Room.MaxExtraBed + room.Room.MaxShareBed;

                if ((iAdult + iChild) > MaxNumber)
                {
                    continue;
                }
                else
                {
                    if (iChild > 0)
                    {
                        if ((iAdult + iChild) == room.Room.Capacity)
                        {
                            if (iAdult == 2 && iChild == 1)
                            {
                                if (room.Room.Code == "TR")
                                {
                                    continue;
                                }
                            }

                            AddRoomSort(mvroom, room);
                            continue;
                        }

                        if ((room.Room.MaxExtraBed + room.Room.MaxShareBed) >= iChild && iAdult == room.Room.Capacity)
                        {
                            if (iAdult == 2 && iChild == 1)
                            {
                                if (room.Room.Code == "TR")
                                {
                                    continue;
                                }
                            }

                            AddRoomSort(mvroom, room);
                            continue;
                        }

                        if (iAdult == 1 && iChild == 2)
                        {
                            if (room.Room.Code == "DB" || room.Room.Code == "TB")
                            {
                                if (room.Room.MaxExtraBed == 1)
                                {
                                    AddRoomSort(mvroom, room);
                                    continue;
                                }
                            }
                        }
                    }
                    else
                    {
                        if (iAdult == room.Room.Capacity && (room.Room.MaxExtraBed + room.Room.MaxShareBed) == iChild)
                        {
                            if (iAdult == 2 && iChild == 1)
                            {
                                if (room.Room.Code == "TR")
                                {
                                    continue;
                                }
                            }

                            AddRoomSort(mvroom, room);
                            continue;
                        }
                    }

                    //mvroom.Items.Add(room);

                }
            }

            if (mvroom.Items.Count > 0)
                rooms.Add(mvroom);
        }

        if (rooms.Count == searchCondtion.RoomSearchConditions.Count)
        {
            hotel.Items.Clear();

            for (int j = 0; j < rooms.Count; j++)
            {
                hotel.Items.Add(rooms[j]);
            }

            return hotel;
        }
        else
        {
            return null;
        }
    }
    private void AddRoomSort(MVRoom mvroom, HotelMaterial room)
    {
        if (mvroom != null)
        {
            if (mvroom.Items.Count == 0)
            {
                //���mvroom��û�з��� ֱ�Ӱѷ��ۼӵ� mvroom��
                mvroom.Items.Add(room);
            }
            else
            {
                for (int i = 0; i < mvroom.Items.Count; i++)
                {
                    //���� �¼���ķ��۵ļ۸�
                    decimal roomExtraBedPrice = decimal.Zero;

                    TERMS.Common.Price price = null;

                    if (room.IsNeedExtraBed(mvroom.Aduit, mvroom.Child))
                    {
                        price = room.GetAvgPerNightExtraBedPrice(mvroom.Profile.CheckInDate, mvroom.Profile.CheckOutDate);

                        if (price == null)
                        {
                            roomExtraBedPrice = decimal.Zero;
                        }
                        else
                        {
                            roomExtraBedPrice = price.GetAmount(TERMS.Common.PassengerType.Adult);
                        }
                    }
                    else
                    {
                        roomExtraBedPrice = decimal.Zero;
                    }

                    decimal roomSubtotalPerNightPrice = decimal.Zero;

                    price = room.GetAvgPerNightPrice(mvroom.Profile.CheckInDate, mvroom.Profile.CheckOutDate);

                    roomSubtotalPerNightPrice = price.GetAmount(TERMS.Common.PassengerType.Adult) + price.GetMarkup(TERMS.Common.PassengerType.Adult);

                    //������Ҫ�Աȵķ��۵ļ۸�
                    decimal mvroomExtraBedPrice = decimal.Zero;

                    if (mvroom.Items[i].IsNeedExtraBed(mvroom.Aduit, mvroom.Child))
                    {
                        price = mvroom.Items[i].GetAvgPerNightExtraBedPrice(mvroom.Profile.CheckInDate, mvroom.Profile.CheckOutDate);

                        if (price == null)
                        {
                            mvroomExtraBedPrice = decimal.Zero;
                        }
                        else
                        {
                            mvroomExtraBedPrice = price.GetAmount(TERMS.Common.PassengerType.Adult);
                        }
                    }
                    else
                    {
                        mvroomExtraBedPrice = decimal.Zero;
                    }

                    decimal mvroomSubtotalPerNightPrice = decimal.Zero;

                    price = mvroom.Items[i].GetAvgPerNightPrice(mvroom.Profile.CheckInDate, mvroom.Profile.CheckOutDate);

                    mvroomSubtotalPerNightPrice = price.GetAmount(TERMS.Common.PassengerType.Adult) + price.GetMarkup(TERMS.Common.PassengerType.Adult);

                    //��� �¼���ķ���ļ۸� �� ��ǰ���ڱȽϵķ���ļ۸� �٣� ��ô ���¼���ķ��� ��ӵ����ϵĵ�ǰ�����ǰ��
                    if (roomExtraBedPrice + roomSubtotalPerNightPrice < mvroomExtraBedPrice + mvroomSubtotalPerNightPrice)
                    {
                        mvroom.Items.Insert(i, room);

                        return;
                    }
                }

                //��� �¼���ķ���ļ۸���� ��ô�ӵ����ϵ�ĩβ
                mvroom.Items.Add(room);
            }
        }
    }