def book_cage(account: Owner, cage: Cage, snake: Snake,
              check_in_date: datetime.datetime,
              check_out_date: datetime.datetime) -> Cage:

    # find the booking
    for b in cage.bookings:
        if b.check_in_date <= check_in_date and \
           b.check_out_date >= check_out_date and \
           b.guest_snake_id is None:
            booking = b
            break

    # create separate bookings for before/after this booking
    if booking.check_in_date < check_in_date:
        days = (check_in_date - booking.check_in_date).days
        add_available_date(cage, booking.check_in_date, days)

    if booking.check_out_date > check_out_date:
        days = (booking.check_out_date - check_out_date).days
        add_available_date(cage, check_out_date, days)

    # update this booking with the reservation details
    booking.guest_owner_id = account.id
    booking.guest_snake_id = snake.id
    booking.booked_date = datetime.datetime.now()
    booking.check_in_date = check_in_date
    booking.check_out_date = check_out_date

    cage.save()

    return
Exemple #2
0
def num_cages_with_sufficient_space(snake_len):
    min_size = snake_len / 4

    # Use __ and operator name without $ to apply for query
    cages = Cage.objects().filter(square_meters__gte=min_size)
    # Count will return the number of matches rather than the documents
    cage_count = Cage.objects(square_meters__gte=min_size).count()

    return cage_count
def add_available_date(cage: Cage, start_date: datetime.datetime,
                       days: int):  # -> Cage:
    booking = Booking()
    booking.check_in_date = start_date
    booking.check_out_date = start_date + datetime.timedelta(days=days)

    # cage = Cage.objects(id=cage.id.first())
    cage.bookings.append(booking)
    cage.save()
def add_available_date(cage: Cage,
                       start_date: datetime.datetime, days: int) -> Cage:
    booking = Booking()
    booking.check_in_date = start_date
    booking.check_out_date = start_date + datetime.timedelta(days=days)

    cage = Cage.objects(id=cage.id).first()
    cage.bookings.append(booking)
    cage.save()

    return cage
Exemple #5
0
def add_available_date(cage: Cage,
                       start_date: datetime.datetime, days: int) -> Cage:
    booking = Booking()
    booking.check_in_date = start_date
    booking.check_out_date = start_date + datetime.timedelta(days=days)

    cage = Cage.objects(id=cage.id).first() #get the cage
    cage.bookings.append(booking) #booking is added to cage as it as embedded document
    cage.save()

    return cage
def add_date(cage: Cage, start_date: datetime.datetime, days: int):
    booking = Booking()

    booking.check_in_date = start_date
    booking.check_out_date = start_date + datetime.timedelta(days=days)

    cage = Cage.objects(id=cage.id).first()
    cage.bookings.append(booking)
    cage.save()

    return cage
def book_cage(account: Owner, snake: Snake, cage: Cage,
              checkin: datetime.datetime, checkout: datetime.datetime):
    booking = None
    for b in cage.bookings:
        if b.check_in_date <= checkin and b.check_out_date >= checkout and b.guest_owner_id == None:
            booking = b

    booking.guest_owner_id = account.id
    booking.guest_snake_id = snake.id
    booking.booked_date = datetime.datetime.now()

    cage.save()
Exemple #8
0
def book_cage(account: Owner, snake: Snake, cage: Cage,
              checkin: datetime.datetime, checkout: datetime.datetime):
    booking = Booking()

    booking.guest_owner_id = account.id
    booking.guest_snake_id = snake.id
    booking.booked_date = datetime.datetime.now()
    booking.check_in_date = checkin
    booking.check_out_date = checkout

    cage = Cage.objects(id=cage.id).first()
    cage.bookings.append(booking)

    cage.save()
def register_cage(active_account: Owner, name, allow_dangerous, has_toys,
                  carpeted, metres, price) -> Cage:
    cage = Cage()

    cage.name = name
    cage.square_metres = metres
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.price = price

    cage.save()
    active_account.cage_ids.append(cage.id)
    active_account.save()
    return cage
def find_cages_for_user(account: Owner) -> List[Cage]:

    query = Cage.objects(
        id__in=account.cage_ids)  # find all cage ids in account.cage_ids
    cages = list(query)

    return cages
Exemple #11
0
def get_available_cages(checkin: datetime.datetime,
                        checkout: datetime.datetime,
                        snake: Snake) -> List[Cage]:
    min_size = snake.length / 4

    query = Cage.objects() \
        .filter(square_meters__gte=min_size) \
        .filter(availabilities__from_date__lte=checkin) \
        .filter(availabilities__to_date__gte=checkout)

    if snake.is_venomous:
        query = query.filter(allow_dangerous_snakes=True)

    cages = query.order_by('price', '-square_meters')

    final_cages = []
    for c in cages:
        booked = 0
        for b in c.bookings:
            if ((b.check_in_date <= checkin and b.check_out_date >= checkin)
                    or (b.check_in_date <= checkout
                        and b.check_out_date >= checkout)):
                booked += 1
                break

        if (booked == 0):
            final_cages.append(c)

    return final_cages
Exemple #12
0
def get_available_cages(
    checkin: datetime, checkout: datetime, snake: Snake
) -> List[Cage]:
    min_size = snake.length / 4
    query = (
        Cage.objects()  # pylint: disable=no-member
        .filter(square_meters__gte=min_size)
        .filter(bookings__check_in_date__lte=checkin)
        .filter(bookings__check_out_date__gte=checkin)
    )

    if snake.is_venomous:
        query = query.filter(allow_dangerous_snakes=True)

    cages = query.order_by("price", "-square_meters")

    final_cages = []
    for c in cages:
        for b in c.bookings:
            if (
                b.check_in_date <= checkin
                and b.check_out_date >= checkout
                and b.guest_snake_id is None
            ):
                final_cages.append(c)

    return final_cages
Exemple #13
0
def register_cage(active_account,name,price,allow_dangerous,has_toys,carpeted,meters) -> Cage:
    cage = Cage()
    cage.name = name
    cage.square_meters = meters
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.price = price

    cage.save()  # stores it in the database

    account = find_account_by_email(active_account.email)  # we don't have any stale data
    account.cage_ids.append(cage.id) #adding the new cage id
    account.save() #push the changes back to database

    return cage
Exemple #14
0
def register_cage(active_account: Owner, name, allow_dangerous, has_toys,
                  carpeted, meters, price) -> Cage:
    cage = Cage()
    cage.name = name
    cage.square_meters = meters
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.price = float(price)
    cage.save()  # asigna un id y guarda en la bd.

    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
Exemple #15
0
def register_cage(active_account: Owner, price, name, allow_dangerous,
                  has_toys, carpated, meters) -> Cage:
    cage = Cage()
    cage.name = name
    cage.allow_dangerous_snakes = allow_dangerous
    cage.is_carpeted = carpated
    cage.has_toys = has_toys
    cage.price = price
    cage.square_meters = meters

    cage.save()  # must save the cage data first

    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
def add_available_date(selected_cage, start_date, days):
    booking = Booking()
    booking.check_in_date = start_date
    booking.check_out_date = start_date + datetime.timedelta(days=days)

    cage = Cage.objects(id=selected_cage.id).first()
    cage.bookings.append(booking)
    cage.save()
def register_cage(active_account: Owner, name, allow_dangerous, has_toys,
                  carpeted, meters, price) -> Cage:
    cage = Cage()
    cage.name = name
    cage.allow_dangerous = allow_dangerous
    cage.has_toys = has_toys
    cage.carpeted = carpeted
    cage.meters = meters
    cage.price = price

    cage.save()

    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
def register_cage(account: Owner, name: str, price: float, meters: float,
                  carpeted: bool, has_toys: bool,
                  allow_dangerous: bool) -> Cage:
    cage = Cage()
    cage.name = name
    cage.price = price
    cage.square_meters = meters
    cage.carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.save()

    account = find_account_by_email(account.email)  # get fresh copy
    account.cage_ids.append(cage.id)
    account.save()

    return cage
Exemple #19
0
def add_available_date(cage: Cage, start_date: datetime.datetime,
                       days: int) -> Cage:

    availability = Availability()
    availability.from_date = start_date
    availability.to_date = start_date + datetime.timedelta(
        days=days) - datetime.timedelta(seconds=1)

    cage = Cage.objects(id=cage.id).first()
    try:
        cage.availabilities[0] = availability
    except:
        cage.availabilities.append(availability)

    cage.save()

    return cage
def book_cage(account: Owner, snake: Snake, cage: Cage,
              check_in_date: datetime.datetime,
              checkout_date: datetime.datetime) -> Cage:
    booking: Booking = None

    for b in cage.bookings:
        if b.check_in_date <= check_in_date and b.check_out_date >= checkout_date \
                and not b.booked_date:
            booking = b
            break

    booking.guest_owner_id = account.id
    booking.guest_snake_id = snake.id
    booking.booked_date = datetime.datetime.now()

    cage.save()

    return cage
Exemple #21
0
def register_cage(
    active_account: Owner, name, allow_dangerous, has_toys, carpeted, meters, price
) -> Cage:
    cage = Cage()
    cage.name = name
    cage.square_meters = meters
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.price = price

    cage.save()

    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)  # pylint: disable=no-member
    account.save()

    return cage
def register_cage(active_account: Owner, name: str, cost: float,
                  square_meters: float, is_carpented: bool, has_toys: bool,
                  allow_dangerous_snakes: bool) -> Cage:

    cage = Cage()
    cage.name = name
    cage.cost = cost
    cage.square_meters = square_meters
    cage.is_carpented = is_carpented
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous_snakes

    cage.save()

    owner = find_account_by_email(active_account.email)
    owner.cage_ids.append(cage.id)
    owner.save()
    return cage
Exemple #23
0
def register_cage(active_account: Owner, name, meters, is_carpeted, has_toys,
                  allow_dangerous_snakes, price):
    cage = Cage()

    cage.name = name
    cage.price = price
    cage.square_meters = meters
    cage.is_carpeted = is_carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous_snakes

    cage.save()

    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
Exemple #24
0
def add_available_date(selected_cage: Cage, start_date: datetime, days: int) -> Cage:
    booking = Booking()
    booking.check_in_date = start_date
    booking.check_out_date = start_date + timedelta(days=days)

    cage = Cage.objects(id=selected_cage.id).first()  # pylint: disable=no-member
    cage.bookings.append(booking)
    cage.save()

    return cage
def book_cage(active_account: Owner, selected_snake: Snake, cage: Cage,
              check_in_date: datetime.datetime,
              check_out_date: datetime.datetime):
    booking: Booking = None

    for b in cage.bookings:
        if b.check_in_date <= check_in_date \
                and b.check_out_date >= check_out_date \
                and b.guest_snake_id is None:
            booking = b
            break

    booking.booked_date = datetime.datetime.now()
    booking.check_in_date = check_in_date
    booking.check_out_date = check_out_date
    booking.guest_snake_id = selected_snake.id
    booking.guest_owner_id = active_account.id

    cage.save()
Exemple #26
0
def register_cage(active_account: Owner,
                  name, allow_dangerous, has_toys, carpeted, meters, price) -> Cage:
    cage = Cage()

    cage.name = name
    cage.square_meters = meters
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.price = price

    # Must save before appending to list, otherwise blank id
    cage.save()

    # Makes sure account info is current and appends to cage_id list
    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
def add_available_date(selectedcage: Cage, start_date: datetime.datetime,
                       duration: int):
    booking = Booking()
    booking.check_in_date = start_date
    booking.check_out_date = start_date + datetime.timedelta(days=duration)

    cage = Cage.objects(id=selectedcage.id).first()
    cage.bookings.append(booking)
    cage.save()

    return cage
def register_cage(active_account: Owner, name: str, allow_angry: bool,
                  has_toys: bool, carpeted: bool, meters: float,
                  price: float) -> Cage:
    cage = Cage()

    cage.name = name
    cage.square_meters = meters
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_angry_cats = allow_angry
    cage.price = price

    cage.save()

    account, msg = find_account_by_email(active_account.email,
                                         active_account.password)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
def register_cage(active_account: Owner,
                  name, allow_dangerous, has_toys,
                  carpeted, meters, price) -> Cage:
    cage = Cage()

    cage.name = name
    cage.square_meters = meters
    cage.is_carpeted = carpeted
    cage.has_toys = has_toys
    cage.allow_dangerous_snakes = allow_dangerous
    cage.price = price

    cage.save()

    account = find_account_by_email(active_account.email)
    account.cage_ids.append(cage.id)
    account.save()

    return cage
def get_bookings_for_user(user_id: bson.ObjectId) -> List[Booking]:
    account = Owner.objects(id=user_id).first()
    booked_cages = Cage.objects() \
        .filter(bookings__guest_owner_id=account.id) \
        .only('bookings', 'name')

    def map_cage_to_booking(cage: Cage, booking: Booking) -> Booking:
        booking.cage = cage
        return booking

    bookings = [
        map_cage_to_booking(c, booking) for c in booked_cages
        for booking in c.bookings if booking.guest_owner_id == account.id
    ]

    return bookings
def find_bookings_for_user(account: Owner) -> List[Booking]:
    account = find_account_by_email(account.email)  # get fresh copy
    booked_cages = Cage.objects() \
        .filter(bookings__guest_owner_id=account.id) \
        .only('bookings', 'name')

    def map_cage_to_booking(booking, cage):
        booking.cage = cage
        return booking

    bookings = [
        map_cage_to_booking(booking, cage) for cage in booked_cages
        for booking in cage.bookings if booking.guest_owner_id == account.id
    ]

    return bookings
Exemple #32
0
def get_bookings_for_user(account: Owner) -> List[Booking]:

    booked_cages = Cage.objects() \
        .filter(bookings__guest_owner_id=account.id) \
        .only('bookings', 'name')

    def map_cage_to_booking(cage, booking):
        booking.cage = cage
        return booking

    bookings = [
        map_cage_to_booking(cage, booking) for cage in booked_cages
        for booking in cage.bookings if booking.guest_owner_id == account.id
    ]

    return bookings
def get_bookings_for_user(email: str) -> List[Booking]:
    account = find_account_by_email(email)

    booked_cages = Cage.objects() \
        .filter(bookings__guest_owner_id=account.id) \
        .only('bookings', 'name')

    def map_cage_to_booking(cage, booking):
        booking.cage = cage
        return booking

    bookings = [
        map_cage_to_booking(cage, booking)
        for cage in booked_cages
        for booking in cage.bookings
        if booking.guest_owner_id == account.id
    ]

    return bookings
def get_available_cages(checkin: datetime.datetime,
                        checkout: datetime.datetime, snake: Snake) -> List[Cage]:
    min_size = snake.length / 4

    query = Cage.objects() \
        .filter(square_meters__gte=min_size) \
        .filter(bookings__check_in_date__lte=checkin) \
        .filter(bookings__check_out_date__gte=checkout)

    if snake.is_venomous:
        query = query.filter(allow_dangerous_snakes=True)

    cages = query.order_by('price', '-square_meters')

    final_cages = []
    for c in cages:
        for b in c.bookings:
            if b.check_in_date <= checkin and b.check_out_date >= checkout and b.guest_snake_id is None:
                final_cages.append(c)

    return final_cages
def find_cages_for_user(account: Owner) -> List[Cage]:
    query = Cage.objects(id__in=account.cage_ids)
    cages = list(query)

    return cages