public IHttpActionResult PutRoomStatus_Detail(int id, RoomStatus_Detail roomstatus_detail)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != roomstatus_detail.Id)
            {
                return BadRequest();
            }

            

            try
            {
                _RoomStatus_DetailService.Update(roomstatus_detail);
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!_RoomStatus_DetailService.Exists(id) )
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }
        public IHttpActionResult PostRoomStatus_Detail(RoomStatus_Detail roomstatus_detail)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            _RoomStatus_DetailService.Create(roomstatus_detail);
        

            return CreatedAtRoute("DefaultApi", new { id = roomstatus_detail.Id }, roomstatus_detail);
        }
        async Task Create_or_Update_RoomDetail(long? RoomReservationId, List<RoomReservation_RoomDetailsViewDetail> roomdetails, int roomreservationstatusid, DateTime FromDate, DateTime ToDate,DateTime?  RoomReservation_StatusDate)

          {
          
          //Add  all roomdetail
            
              foreach (var roomdetail in roomdetails)
              {
                  if (roomdetail.RoomReservation_RoomDetails.Id > 0)
                  { _RoomReservation_RoomDetailsRepository.Update(roomdetail.RoomReservation_RoomDetails, roomdetail.RoomReservation_RoomDetails.Id.ToString ()); }
                  else
                  {
                      roomdetail.RoomReservation_RoomDetails.RoomReservation_Id = RoomReservationId;

                      roomdetail.RoomReservation_RoomDetails = await _RoomReservation_RoomDetailsRepository.Create(roomdetail.RoomReservation_RoomDetails);


                  }


                  // Make this room reserved or checkin bases on reservation status in room allocation table and room status detail table

                  var ReservationStatusType =await _ReservationStatusTypeRepository.GetById(roomreservationstatusid);
                  if (ReservationStatusType != null)
                  {

                      var roomallocation =await _RoomAllocationRepository.GetById(roomdetail.RoomReservation_RoomDetails.RoomAllocationId.Value.ToString());
                      roomallocation.RoomStatusTypeId = ReservationStatusType.RoomStatusTypeId.Value;
                      _RoomAllocationRepository.Update(roomallocation,roomallocation.Id.ToString ());

                      //create a record of roomstatus_detail table.

                     if (ReservationStatusType.RoomStatusTypeId!= (int)RoomReservationSystem.Model.Enums.RoomStatusType.Available)
                     {
                         
                         //if no records of same reservation id and status type exist then create new record.
                         var RoomStatus_Detail=await  _RoomStatus_DetailRepository.GetByReservationId(RoomReservationId.Value,ReservationStatusType.RoomStatusTypeId.Value  );
                         if (RoomStatus_Detail==null)
                         {RoomStatus_Detail = new RoomStatus_Detail();}


                         RoomStatus_Detail.RoomAllocationId = roomdetail.RoomReservation_RoomDetails.RoomAllocationId.Value;
                         RoomStatus_Detail.RoomStatusTypeId = ReservationStatusType.RoomStatusTypeId;
                         RoomStatus_Detail.RoomReservationId = RoomReservationId;
                         RoomStatus_Detail.Reason = "New Reservation Created of Type : " + ReservationStatusType.Name;
                         

                         switch(ReservationStatusType.RoomStatusTypeId)
                         {
                             case (int)RoomReservationSystem.Model.Enums.RoomStatusType.Reserved:
                                 {
                                     RoomStatus_Detail.FromDate = FromDate;
                                     RoomStatus_Detail.ToDate = ToDate;
                                     break;
                                 }

                             case (int)RoomReservationSystem.Model.Enums.RoomStatusType.CheckIn :
                                 {
                                     RoomStatus_Detail.FromDate = RoomReservation_StatusDate;
                                     RoomStatus_Detail.ToDate = ToDate;
                                     break;
                                 }

                           
                             case (int)RoomReservationSystem.Model.Enums.RoomStatusType.House_Keeping:
                                 {
                                     RoomStatus_Detail.FromDate = RoomReservation_StatusDate;
                                     RoomStatus_Detail.ToDate = RoomReservation_StatusDate.Value.AddHours(2);
                                     break;
                                 }
                        }



                         if (RoomStatus_Detail.Id!=0)
                             _RoomStatus_DetailRepository.Update(RoomStatus_Detail, RoomStatus_Detail.Id.ToString ());
                         else
                            RoomStatus_Detail= await _RoomStatus_DetailRepository.Create(RoomStatus_Detail);
                          

                     }


                  
                  }

                        
              }


             //delete all those roomdetail which are not included in room detail list

             await _RoomReservation_RoomDetailsRepository.Delete_Removed_RoomReservations(RoomReservationId, string.Join (",", roomdetails.Select(x => x.RoomReservation_RoomDetails.Id).ToList()));


          
          }