Пример #1
0
        public async Task CreateOccupancy(OccupancyDto occupancyDto)
        {
            var occupancy = _mapper.Map <Occupancy>(occupancyDto);

            occupancy.Guid         = Guid.NewGuid();
            occupancy.CreationDate = DateTime.Now;

            _occupancyRepository.Add(occupancy);
            await _occupancyRepository.SaveChangesAsync();
        }
Пример #2
0
        public async Task UpdateOccupancy(OccupancyDto occupancyDto)
        {
            var occupancy = await _occupancyRepository.GetByGuid(occupancyDto.Guid.ToString());

            if (occupancy == null)
            {
                throw new KeyNotFoundException($"Cannot update Occupancy. Occupancy with guid {occupancy.Guid} does not exist");
            }

            _mapper.Map(occupancyDto, occupancy);

            _occupancyRepository.Update(occupancy);
            await _occupancyRepository.SaveChangesAsync();
        }
Пример #3
0
        public IQueryable <OccupancyDto> ByOrg([FromBody] OccupancyRequestModel model)
        {
            var list = new List <OccupancyDto>();

            var from  = DateTime.Now;
            var until = from.AddMinutes(1);

            var org = Db.Organisers.SingleOrDefault(x => x.ShortName.Equals(model.OrgName));

            if (org == null)
            {
                return(list.AsQueryable());
            }

            //Initialisierung des RoomService von NINE
            var roomService = new RoomService();

            //Abfrage der freien Räume durch den RoomInfoService und Zwischenspeicherung desen Responeses als Liste roomList
            var roomList = roomService.GetFreeRooms(org.Id, false, from, until);


            foreach (var room in roomList)
            {
                var occDto = new OccupancyDto();
                occDto.Room.Number      = room.Number;
                occDto.Room.Description = room.Description;

                // nächste Belegung
                var nextDate = room.Dates.OrderBy(x => x.Begin).FirstOrDefault(x => x.Begin > from);
                if (nextDate != null)
                {
                    var resDto = new ReservationDto
                    {
                        Begin     = nextDate.Begin,
                        End       = nextDate.End,
                        Name      = nextDate.Activity.Name,
                        ShortName = nextDate.Activity.ShortName
                    };


                    occDto.Next.Add(resDto);
                }

                list.Add(occDto);
            }

            return(list.AsQueryable());
        }
Пример #4
0
        public IQueryable <OccupancyDto> Search([FromBody] RoomSearchRequest request)
        {
            // ohne state => alle suchen
            var  from        = DateTime.Now;
            var  until       = from.AddMinutes(30);
            bool?isAvailable = null;

            if (request.state != null)
            {
                isAvailable = request.state.isAvailable;
                if (request.state.from != null)
                {
                    from = request.state.from.Value;
                }
                if (request.state.until != null)
                {
                    until = request.state.until.Value;
                }
            }



            var rooms = Db.Rooms.Where(r => r.Number.StartsWith(request.number)).ToList();

            var result = new List <OccupancyDto>();

            foreach (var room in rooms)
            {
                var occDto = new OccupancyDto();
                occDto.Room.Number      = room.Number;
                occDto.Room.Name        = room.Name;
                occDto.Room.Description = room.Description;
                if (room.Number.StartsWith("K") || room.Number.StartsWith("L"))
                {
                    occDto.Room.Campus = "Pasing";
                }
                else if (room.Number.StartsWith("F"))
                {
                    occDto.Room.Campus = "Karlstrasse";
                }
                else
                {
                    occDto.Room.Campus = "Lothstrasse";
                }


                // aktuelle Belegung
                var currentDates = room.Dates
                                   .Where(d =>
                                          (d.End > @from && d.End <= until) ||     // Veranstaltung endet im Zeitraum
                                          (d.Begin >= @from && d.Begin < until) || // Veranstaltung beginnt im Zeitraum
                                          (d.Begin <= @from && d.End >= until)     // Veranstaltung zieht sich über gesamten Zeitraum
                                          )
                                   .OrderBy(x => x.Begin)
                                   .ToList();

                bool include = true;
                if (isAvailable.HasValue)
                {
                    if ((currentDates.Any() && isAvailable.Value) || // es werden freie gesucht, aber sind Belegungen vorhanden
                        (!currentDates.Any() && !isAvailable.Value)
                        )
                    {
                        include = false;
                    }
                }

                if (include)
                {
                    // aktuelle Belegung aufbauen
                    foreach (var currentDate in currentDates)
                    {
                        var resDto = new ReservationDto
                        {
                            Id        = currentDate.Id,
                            Begin     = currentDate.Begin,
                            End       = currentDate.End,
                            Name      = currentDate.Activity.Name,
                            ShortName = currentDate.Activity.ShortName
                        };


                        occDto.Current.Add(resDto);
                    }

                    // nächste Belegung
                    var nextDate = room.Dates.OrderBy(x => x.Begin).FirstOrDefault(x => x.Begin > from);
                    if (nextDate != null)
                    {
                        var resDto = new ReservationDto
                        {
                            Id        = nextDate.Id,
                            Begin     = nextDate.Begin,
                            End       = nextDate.End,
                            Name      = nextDate.Activity.Name,
                            ShortName = nextDate.Activity.ShortName
                        };


                        occDto.Next.Add(resDto);
                    }

                    result.Add(occDto);
                }
            }

            return(result.AsQueryable());
        }
Пример #5
0
 public async Task UpdateOccupancy(string guid, [FromBody] OccupancyDto occupancyDto)
 {
     occupancyDto.Guid = new Guid(guid);
     await _occupancyService.UpdateOccupancy(occupancyDto);
 }
Пример #6
0
 public async Task CreateOccupancy([FromBody] OccupancyDto occupancyDto)
 {
     await _occupancyService.CreateOccupancy(occupancyDto);
 }