private void picbx_Delete_Click(object sender, EventArgs e)
 {
     if (dgv.SelectedRows.Count == 1 && dgv.Rows.Count > 0)
     {
         int selectedIdRoom = int.Parse(dgv.SelectedRows[0].Cells["BoodetIdroom"].Value.ToString());
         //      int index = subBookings.FindIndex(x => x.BoodetIdroom == selectedIdRoom);
         SubBookingDetailVM val = subBookings.Where(x => x.BoodetIdroom == selectedIdRoom).FirstOrDefault();
         if (val.IdBoodet != 0)
         {
             listDel.Add(val.IdBoodet);
         }
         subBookings.Remove(val);
         if (storeRoomDel.ContainsKey(val.RoomType))
         {
             AvailableRoomVM store = storeRoomDel[val.RoomType].Find(x => x.IdRoom == selectedIdRoom);
             listForCbb.Add(store);
             storeRoomDel[val.RoomType].Remove(store);
         }
         //         AvailableRoomVM store = storeDelRoom.Find(x =>x.IdRoom == selectedIdRoom);
         //       storeDelRoom.Remove(store);
         //       listForCbb.Add(store);
         LoadCbbRoom();
         LoadBookedRoomList();
         tb_Total.Text   = calTotalPrice().ToString();
         tb_Deposit.Text = (calTotalPrice() * 3 / 10).ToString();
     }
     else
     {
         MessageBox.Show("Bạn chưa chọn hoặc chọn nhiều hơn một phòng để xóa khỏi đơn booking", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
 private void picbx_Add_Click(object sender, EventArgs e)
 {
     //add room
     if (dtp_From.Value != null && dtp_To.Value != null && cbb_RoomType.SelectedItem != null && cbb_Room.SelectedItem != null)
     {
         AvailableRoomVM result = ((AvailableRoomVM)cbb_Room.SelectedItem);
         subBookings.Add(new SubBookingDetailVM
         {
             BoodetPrice    = Convert.ToInt32(result.RotyCurrentprice),
             BoodetIdroom   = result.IdRoom,
             BoodetRoTyCode = result.RotyCode,
             RoomName       = result.RoomName,
             RoomType       = result.RoTyName,
             Duration       = duration,
             Amount         = Convert.ToInt32(result.RotyCurrentprice) * duration
         });
         if (storeRoomDel.ContainsKey(currentRoomType))
         {
             storeRoomDel[currentRoomType].Add(result);
         }
         else
         {
             var temp = new List <AvailableRoomVM>();
             temp.Add(result);
             storeRoomDel.Add(currentRoomType, temp);
         }
         //     storeDelRoom.Add(result);
         listForCbb.Remove(result);
         LoadCbbRoom();
         LoadBookedRoomList();
         tb_Total.Text   = calTotalPrice().ToString();
         tb_Deposit.Text = (calTotalPrice() * 3 / 10).ToString();
     }
 }
예제 #3
0
        public List <AvailableRoomVM> FindAvailableRoom(int idRoomType, DateTime fromDate, DateTime toDate)
        {
            List <AvailableRoomVM> listVM = new List <AvailableRoomVM>();

            foreach (Room room in _roomDALManageFacade.FindAvailableRoom(idRoomType, fromDate, toDate))
            {
                AvailableRoomVM availableRoomVM = mapper.Map <AvailableRoomVM>(room);
                listVM.Add(availableRoomVM);
            }
            return(listVM);
        }
예제 #4
0
        public ActionResult Research()
        {
            // En premier lieu, je récupère les informations envoyées par le formulaire (sauf le nombre de personnes)
            string   location  = Request["location"].ToString();
            DateTime dateStart = Convert.ToDateTime(Request["checkIn"]);
            DateTime dateEnd   = Convert.ToDateTime(Request["checkOut"]);
            int      category  = Convert.ToInt16(Request["category"]);

            // Pour les checkboxes, j'effectue un test de ce qu'elles retournent pour leur affecter la bonne valeur
            Boolean hasWifi, hasParking, hasTV, hasHairDryer;

            if (Convert.ToString(Request["wifi"]) == "wifi")
            {
                hasWifi = true;
            }
            else
            {
                hasWifi = false;
            }

            if (Convert.ToString(Request["parking"]) == "parking")
            {
                hasParking = true;
            }
            else
            {
                hasParking = false;
            }

            if (Convert.ToString(Request["tv"]) == "tv")
            {
                hasTV = true;
            }
            else
            {
                hasTV = false;
            }

            if (Convert.ToString(Request["hairDryer"]) == "hairDryer")
            {
                hasHairDryer = true;
            }
            else
            {
                hasHairDryer = false;
            }


            // D'abord, je récupère la liste des hôtels correspondant à la recherche (test pour savoir si elle est avancée)
            List <Hotel> hotels = new List <Hotel>();

            if (category.Equals(0) && hasWifi.Equals(false) && hasParking.Equals(false))
            {
                hotels = HotelManager.GetAllHotelsSimple(location);
            }
            else
            {
                hotels = HotelManager.GetAllHotelsAdvanced(location, category, hasWifi, hasParking);
            }


            // Je récupère, pour chaque hôtel, la liste de toutes les photos qui lui correspondent
            // Puis, pour chaque hôtel, je vais rechercher la liste de toutes ses chambres
            // Je vais également rechercher la liste des chambres correspondant à la recherche (test pour savoir si elle est avancée)
            // Tout cela est effectué sur la base du ViewModel "HotelsWithRoomsVM"
            List <HotelsWithRoomsVM> list = new List <HotelsWithRoomsVM>();

            if (hotels != null)
            {
                foreach (var item in hotels)
                {
                    // Ici, je récupère toutes les photos liées à un hôtel
                    // La fonction DISTINCT est utilisée puisque beaucoup d'URL dans la BDD sont identiques
                    IEnumerable <Picture> pics = PictureManager.GetAllPictures(item.IdHotel);
                    List <string>         urls = pics.Select(pic => pic.Url).Distinct().ToList();


                    // Je récupère toutes les chambres qui sont liées à l'hôtel
                    List <Room> rooms       = RoomManager.GetAllRooms(item.IdHotel);
                    decimal     totalPrice  = 0;
                    int         numberRooms = rooms.Count();

                    foreach (var element in rooms)
                    {
                        totalPrice += element.Price;
                    }

                    // Je calcule un prix moyen pour l'hôtel, en fonction de toutes les chambres
                    int avgPrice = (int)(Math.Round((totalPrice / numberRooms), 0));


                    // Je récupère une liste de chambres occupées et une liste de chambres disponibles
                    List <Room> occupiedRooms  = RoomManager.GetOccupiedRooms(item.IdHotel, dateStart, dateEnd);
                    List <Room> availableRooms = new List <Room>();

                    // Les chambres disponibles sont recherchées en fonction de la recherche simple ou avancée
                    if (hasTV.Equals(false) && hasHairDryer.Equals(false))
                    {
                        availableRooms = RoomManager.GetSearchedRoomsSimple(item.IdHotel, dateStart, dateEnd);
                    }
                    else
                    {
                        availableRooms = RoomManager.GetSearchedRoomsAdvanced(item.IdHotel, dateStart, dateEnd, hasTV, hasHairDryer);
                    }


                    // Pour chaque chambre disponible, je vais rechercher ses photos
                    List <AvailableRoomVM> roomsList = new List <AvailableRoomVM>();

                    if (availableRooms != null)
                    {
                        foreach (var room in availableRooms)
                        {
                            IEnumerable <Picture> roomPics = PictureManager.GetRoomPictures(room.IdRoom);
                            List <string>         roomUrls = roomPics.Select(pic => pic.Url).Distinct().ToList();

                            AvailableRoomVM availableRoom = new AvailableRoomVM
                            {
                                IdRoom       = room.IdRoom,
                                Number       = room.Number,
                                Description  = room.Description,
                                Type         = room.Type,
                                Price        = room.Price,
                                HasTV        = room.HasTV,
                                HasHairDryer = room.HasHairDryer,
                                PicturesUrls = roomUrls
                            };

                            roomsList.Add(availableRoom);
                        }
                    }


                    // Je calcule ensuite le taux d'occupation de l'hôtel selon la période sélectionnée par l'utilisateur
                    var calcul = 0.0;
                    if (occupiedRooms != null)
                    {
                        calcul = (double)((occupiedRooms.Count() * 100) / rooms.Count());
                    }
                    int rate = (int)(Math.Round(calcul, 0));


                    // Je crée ensuite, selon le ViewModel HotelsWithRoomsVM, chaque hôtel et je l'ajoute à la liste
                    HotelsWithRoomsVM hotelWithRooms = new HotelsWithRoomsVM
                    {
                        IdHotel        = item.IdHotel,
                        Name           = item.Name,
                        Description    = item.Description,
                        Location       = item.Location,
                        Category       = item.Category,
                        HasWifi        = item.HasWifi,
                        HasParking     = item.HasParking,
                        Phone          = item.Phone,
                        Email          = item.Email,
                        Website        = item.Website,
                        PicturesUrls   = urls,
                        Rooms          = rooms,
                        AvailableRooms = roomsList,
                        OccupiedRooms  = occupiedRooms,
                        Occupation     = rate,
                        AveragePrice   = avgPrice
                    };

                    list.Add(hotelWithRooms);
                }
            }


            // Le dernier paramètre à tester est le nombre de personnes sélectionné
            // Si la capacité totale des chambres disponibles est inférieure au choix, la liste ne sera pas affichée
            int total = 0;

            foreach (var element in list)
            {
                if (element.AvailableRooms != null)
                {
                    foreach (var item in element.AvailableRooms)
                    {
                        total = total + item.Type;
                    }
                }
            }

            string personsString = Convert.ToString(Request["numberPersons"]);
            List <HotelsWithRoomsVM> emptyList = new List <HotelsWithRoomsVM>();

            if (personsString.Equals("10+"))
            {
                if (total < 11)
                {
                    list = emptyList;
                }
            }
            else
            {
                int persons = Convert.ToInt16(Request["numberPersons"]);
                if (total < persons)
                {
                    list = emptyList;
                }
            }


            // Passage des informations de dates dans des variables "session" pour pouvoir les passer à la confirmation de réservation
            Session["dateStart"] = dateStart;
            Session["dateEnd"]   = dateEnd;
            Session["duration"]  = (dateEnd - dateStart).Days;


            // Je retourne la liste, désormais complète, à la vue
            return(View(list));
        }