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); } } }