Пример #1
0
def test_is_active_at(create_blocking, check_date, expected):
    start_date = date(2014, 12, 5)
    end_date = date(2014, 12, 7)
    check_date = datetime.strptime(check_date, '%Y-%m-%d').date()
    blocking = create_blocking(start_date=start_date, end_date=end_date)
    assert blocking.is_active_at(check_date) == expected
    assert Blocking.find_first(Blocking.is_active_at(check_date)) == (blocking if expected else None)
Пример #2
0
 def get_blocked_rooms(self, *dates, **kwargs):
     states = kwargs.get('states', (BlockedRoom.State.accepted,))
     return (self.blocked_rooms
             .join(BlockedRoom.blocking)
             .options(contains_eager(BlockedRoom.blocking))
             .filter(or_(Blocking.is_active_at(d) for d in dates),
                     BlockedRoom.state.in_(states))
             .all())
Пример #3
0
def get_room_blockings(start_dt=None,
                       end_dt=None,
                       created_by=None,
                       in_rooms_owned_by=None):
    query = Blocking.query
    if start_dt and not end_dt:
        query = query.filter(Blocking.is_active_at(start_dt))
    elif start_dt and end_dt:
        query = query.filter(
            db_dates_overlap(Blocking, 'start_date', start_dt, 'end_date',
                             end_dt))

    criteria = []
    if created_by:
        criteria.append(Blocking.created_by_user == created_by)
    if in_rooms_owned_by:
        criteria.append(Room.owner == in_rooms_owned_by)
        query = (query.join(Blocking.blocked_rooms).join(BlockedRoom.room))

    query = query.filter(db.or_(*criteria))
    return query.all()