Esempio n. 1
0
def check_bookings_count(when, room_id):
    room_count = Booking.select().join(Room).where(
        (Booking.when == when) & 
        (Room.id == room_id)
    ).count()
    room_check = False
    if room_count < POP_LIMIT_ROOM:
        room_check = True

    room = Room.get(Room.id == room_id)
    floor_count = Booking.select().join(Room).where(
        (Booking.when == when) & 
        (Room.floor == room.floor) & 
        (Room.building  == room.building)
    ).count()
    floor_check = False
    if floor_count < POP_LIMIT_FLOOR:
        floor_check = True 

    building_count = Booking.select().join(Room).where( 
        (Booking.when == when) & 
        (Room.building  == room.building) 
    ).count()
    building_check = False
    if building_count < POP_LIMIT_BUILDING:
        building_check = True

    count_check = room_check*floor_check*building_check
    return count_check, [room_check, floor_check, building_check]
Esempio n. 2
0
def check_bookings_count(when, room_id, status='approved'):
    assert status in ['approved', 'pending', 'denied']
    room_count = Booking.select().join(Room).where((Booking.when == when) & (
        Room.id == room_id) & (Booking.status == status)).count()
    room_check = False
    if room_count < POP_LIMIT_ROOM:
        room_check = True

    room = Room.get(Room.id == room_id)
    floor_count = Booking.select().join(
        Room).where((Booking.when == when) & (Room.floor == room.floor)
                    & (Room.building == room.building)
                    & (Booking.status == status)).count()
    floor_check = False
    if floor_count < POP_LIMIT_FLOOR:
        floor_check = True

    building_count = Booking.select().join(
        Room).where((Booking.when == when) & (Room.building == room.building)
                    & (Booking.status == status)).count()
    building_check = False
    if building_count < POP_LIMIT_BUILDING:
        building_check = True

    count_check = room_check * floor_check * building_check
    return bool(count_check), [room_check, floor_check, building_check]
Esempio n. 3
0
def stats_occupation_around(when, room_id):
    same_building_occupation = {}
    same_building_occupation_rel = {}
    same_floor_occupation = {}
    same_floor_occupation_rel = {}
    room = Room.get(Room.id == room_id)
    same_building_occupation = Booking.select().join(Room).where(Booking.when == when, Room.building == room.building).count()
    same_building_occupation_rel = same_building_occupation/POP_LIMIT_BUILDING
    same_floor_occupation = Booking.select().join(Room).where(Booking.when == when, Room.building == room.building, Room.floor == room.floor).count()
    same_floor_occupation_rel = same_floor_occupation/POP_LIMIT_FLOOR
    return same_building_occupation, same_floor_occupation, same_building_occupation_rel, same_floor_occupation_rel
Esempio n. 4
0
def get_bookings_of_user(user_id):
    query = Booking.select().where(Booking.who == user_id)
    user_bookings = [model_to_dict(c) for c in query]
    for b in user_bookings:
        booking = Booking.get(Booking.id == b['id'])
        room = Room.get(Room.id == booking.room)
        same_floor_occupation = Booking.select().join(Room).where(
            Booking.when == booking.when, Room.building == room.building,
            Room.floor == room.floor).count()
        same_floor_occupation_rel = same_floor_occupation / POP_LIMIT_FLOOR * 100
        b['value_abs'] = same_floor_occupation
        b['value_rel'] = same_floor_occupation_rel
    return user_bookings
Esempio n. 5
0
def stats_occupation(when):
    floor_occupation = {}
    floor_occupation_rel = {}
    building_occupation = {}
    building_occupation_rel = {}
    rows = Room.select(Room.building).group_by(Room.building)
    buildings_of_the_campus = [row.building for row in rows]
    for building in buildings_of_the_campus:
        floor_occupation[building] = {}
        floor_occupation_rel[building] = {}
        rooms_of_the_building = Room.select().where(Room.building == building)
        rows = Room.select(
            Room.floor).where(Room.building == building).group_by(Room.floor)
        floors_of_the_building = [row.floor for row in rows]
        for floor in floors_of_the_building:
            floor_occupation[building][floor] = 0
            floor_occupation_rel[building][floor] = 0
    day_occupation = Booking.select().where(Booking.when == when,
                                            Booking.status == 'approved')
    for booking in day_occupation:
        room_id = booking.room
        room = Room.get(Room.id == room_id)
        floor_occupation[room.building][room.floor] += 1
        floor_occupation_rel[room.building][room.floor] = floor_occupation[
            room.building][room.floor] / POP_LIMIT_FLOOR
    for building in floor_occupation:
        building_occupation[building] = sum(
            floor_occupation[building].values())
        building_occupation_rel[
            building] = building_occupation[building] / POP_LIMIT_BUILDING
    return building_occupation, floor_occupation, building_occupation_rel, floor_occupation_rel
Esempio n. 6
0
def processEdit(id, eventName, discountPercent, discountAmount, contact,
                rooms):
    """Save the form data into a booking"""
    b = Booking.select().where(Booking.id == id).get()
    food = {}
    for field in request.form:
        if field.startswith('dish_'):
            food[int(field.replace('dish_', ''))] = int(request.form[field])
    b.eventName = eventName
    b.discountPercent = discountPercent
    b.discountAmount = discountAmount
    b.contact_id = contact
    rooms = Room.select().where(Room.id << rooms).execute()
    if Room.areRoomsFree(rooms, b.startTime, b.endTime, id):
        BookingRoom.delete().where(BookingRoom.booking == b).execute()
        for room in rooms:
            br = BookingRoom(booking=b, room=room)
            br.save()
        Order.delete().where(Order.booking == b).execute()
        for f in food:
            if food[f] > 0:
                Order(dish=Dish.get(Dish.id == int(f)),
                      booking=b,
                      quantity=food[f]).save()
        b.calculateTotal()
        b.save()
    else:
        flash(
            'A room that you selected is no longer available.  Please select a new room.',
            'error')
        return redirect(request.referrer)
    flash('Booking Updated', 'success')
    return redirect(url_for('bookings.index'))
Esempio n. 7
0
def get_pending_bookings_new(sort_by='booking_id'):
    query = Booking.select().where(Booking.status == 'pending')
    if sort_by == 'when':
        query_sorted = query.order_by(Booking.when)
    else:
        query_sorted = query
    pending_bookings = [model_to_dict(c) for c in query_sorted]
    for b in pending_bookings:
        booking = Booking.get(Booking.id == b['id'])
        same_room_pending = Booking.select().join(Room).where(
            Booking.when == booking.when, Booking.status == 'pending',
            Room.id == booking.room).count()
        if same_room_pending == 1:
            b['unique_request'] = True
        else:
            b['unique_request'] = False
    return pending_bookings
Esempio n. 8
0
def get_pending_bookings(sort_by='booking_id'):
    query = Booking.select().where(Booking.status == 'pending')
    if sort_by == 'when':
        query_sorted = query.order_by(Booking.when)
    else:
        query_sorted = query
    pending_bookings = [model_to_dict(c) for c in query_sorted]
    return pending_bookings
Esempio n. 9
0
def get_floor_count(when, room_id, status='approved'):
    assert status in ['approved', 'pending', 'denied']
    room = Room.get(Room.id == room_id)
    floor_count = Booking.select().join(
        Room).where((Booking.when == when) & (Room.floor == room.floor)
                    & (Room.building == room.building)
                    & (Booking.status == status)).count()

    return floor_count
Esempio n. 10
0
def index(start=None, end=None):
    """Lists all bookings"""
    if start is None:
        start = date.today()
    if end is None:
        end = date.today() + timedelta(days=30)
    b = Booking.select().where((Booking.startTime > start)
                               & (Booking.startTime < end)
                               & (Booking.isCanceled == False))
    bookings = prefetch(b, BookingRoom, Room)
    return render_template('bookings/index.html',
                           bookings=bookings,
                           start=start,
                           end=end)
Esempio n. 11
0
def contactindex(cid, includeCanceled=True, start=None, end=None):
    """List all bookings for a contact"""
    contact = Contact.select().where(Contact.id == cid).get()
    if start is None:
        start = date.today()
    if end is None:
        end = date.today() + timedelta(days=30)
    b = (Booking.select(Booking).where(
        Booking.contact == contact).where((Booking.startTime > start)
                                          & (Booking.endTime < end)))
    if not includeCanceled:
        b = b.where(Booking.isCanceled == False)
    bookings = prefetch(b, BookingRoom, Room, Contact)
    return render_template('bookings/contactIndex.html',
                           bookings=bookings,
                           start=start,
                           end=end,
                           includeCanceled=includeCanceled,
                           contact=contact)
Esempio n. 12
0
def check_bookings_of_user_room_when(user_id,
                                     room_id,
                                     when,
                                     status='approved'):
    assert status in ['approved', 'pending', 'denied']
    # print(when)
    # print(status)
    # print('user_id', user_id)
    # print('room_id', room_id)
    query = Booking.select().join(Room).where((Booking.who == user_id)
                                              & (Room.id == room_id)
                                              & (Booking.when == when)
                                              & (Booking.status == status))
    count = query.count()
    # print(count)
    # if count > 0:
    #     print('peow')
    #     print(query[0].status)
    assert count in [0, 1]
    return bool(count)
Esempio n. 13
0
def orgindex(orgid, includeCanceled=True, start=None, end=None):
    """List all bookings for an organization"""
    if start is None:
        start = date.today()
    if end is None:
        end = date.today() + timedelta(days=30)
    b = (Booking.select(Booking).join(Contact).where(
        Contact.organization_id == orgid).where((Booking.startTime > start)
                                                & (Booking.endTime < end)))
    if not includeCanceled:
        b = b.where(Booking.isCanceled == False)
    if orgid != 0:
        org = Organization.select().where(Organization.id == orgid).get()
    else:
        org = Organization(name="No Organization")
    bookings = prefetch(b, BookingRoom, Room, Contact)
    return render_template('bookings/orgIndex.html',
                           bookings=bookings,
                           start=start,
                           end=end,
                           includeCanceled=includeCanceled,
                           org=org)
Esempio n. 14
0
def edit(id):
    """Display a form to edit a booking"""
    b = Booking.select().where(Booking.id == id)
    booking = prefetch(b, Order, Dish, Caterer, Contact, Organization,
                       BookingRoom, Room, User)[0]
    dishes = prefetch(Dish.select().where(Dish.isDeleted == False),
                      Caterer.select().where(Caterer.isDeleted == False))
    orgs = Organization.select().where((Organization.isDeleted == False) | (
        Organization.id == booking.contact.organization_id))
    cons = Contact.select().where((Contact.isDeleted == False)
                                  | (Contact.id == booking.contact_id))
    print(booking.startTime, booking.endTime, type(booking.endTime))
    rooms = Room.openRooms(booking.startTime, booking.endTime,
                           booking.id).execute()
    contactjson = {}
    for c in cons:
        oid = c.organization_id if c.organization_id is not None else 0
        if oid not in contactjson:
            contactjson[oid] = {}
        contactjson[oid][c.id] = c.name
    roomjson = {}
    for room in rooms:
        roomjson[room.id] = {
            'capacity': room.capacity,
            'rate': float(room.price),
            'adjacentRooms': room.adjacentRoomIds(),
            'name': room.name,
            'id': room.id
        }
    return render_template('bookings/edit.html',
                           booking=booking,
                           dishes=dishes,
                           orgs=orgs,
                           contacts=cons,
                           contactjson=contactjson,
                           rooms=rooms,
                           roomjson=roomjson)
Esempio n. 15
0
def canceledData(start, end):
    b = Booking.select().where((Booking.startTime > start)
                               & (Booking.startTime < end)
                               & (Booking.isCanceled == True))
    return prefetch(b, BookingRoom, Room)
Esempio n. 16
0
def view(id):
    """Display details of a single booking"""
    b = Booking.select().where(Booking.id == id)
    booking = prefetch(b, Order, Dish, Caterer, Contact, Organization,
                       BookingRoom, Room, User)[0]
    return render_template('bookings/view.html', booking=booking)
Esempio n. 17
0
def processCancel(id, reason):
    """Actually cancel (softDelete) a booking"""
    Booking.select().where(Booking.id == id).get().delete(g.User.id,
                                                          reason).save()
    flash('Booking Canceled', 'success')
    return redirect(url_for('bookings.index'))
Esempio n. 18
0
def cancel(id):
    """Dispaly a form to cancel a booking"""
    booking = Booking.select().where(Booking.id == id).get()
    return render_template('bookings/cancel.html', booking=booking)
Esempio n. 19
0
def get_bookings_of_room(room_name):
    query = Booking.select().join(Room).where(Room.name == room_name)
    room_bookings = [model_to_dict(c) for c in query]
    return room_bookings
Esempio n. 20
0
def get_bookings_of_user_old(user_id):
    query = Booking.select().where(Booking.who == user_id)
    user_bookings = [model_to_dict(c) for c in query]
    return user_bookings
Esempio n. 21
0
def print_bookings():
    ''' Prints all bookings in terminal. '''
    q = Booking.select()
    for b in q:
        print(b.id, b.who, b.when, b.room.name)