def get(self, resource_id = None, uri_name = None, uri_id = None):
        resource_uri = "/%s/%s"%(uri_name, uri_id)
        resource = self.get_resource_with_id_or_uri(resource_id, resource_uri)

        if "date" in request.args:
            target_date = self.parse_date_from_args(request.args, "date")
            result = BlockedTimeUtil.get_blocked_time_for_date(current_app.db_session,
                resource, target_date)
        elif "start_date" in request.args and "end_date" in request.args:
            start_date, end_date = self.parse_date_range_from_args(request)
            result = BlockedTimeUtil.get_blocked_time_for_date_range(current_app.db_session,
                resource, start_date, end_date)
        else:
            abort(404, __error__ = [ "No date or date interval specified." ])

        return marshal(result, blocked_time_fields)
def get_resource_overview(facilities_ids, start_date, end_date):
    facilities = get_facilities_from_web(facilities_ids)
    facilities_uris = [facility.get('uri') for facility in facilities]
    statuses = ["Granted"]

    single_booking_query = current_app.db_session.query(Application) \
        .filter(Resource.id == Application.resource_id,
                Resource.uri.in_(facilities_uris),
                Slot.application_id == Application.id,
                Application.status.in_(statuses),
                cast(Slot.start_time, Date).between(start_date, end_date),
                cast(Slot.end_time, Date).between(start_date, end_date),
                )

    strotime_booking_query = current_app.db_session.query(Application) \
        .filter(Resource.id == Application.resource_id,
                Resource.uri.in_(facilities_uris),
                Slot.application_id == Application.id,
                Application.status.in_(statuses),
                cast(StrotimeSlot.start_time, Date).between(start_date, end_date),
                cast(StrotimeSlot.end_time, Date).between(start_date, end_date),
                )

    repeating_booking_query = current_app.db_session.query(Application) \
        .filter(Resource.id == Application.resource_id,
                Resource.uri.in_(facilities_uris),
                RepeatingSlot.application_id == Application.id,
                Application.status.in_(statuses),
                # Get all slots between start and end date
                cast(RepeatingSlot.start_date, Date) <= end_date,
                cast(RepeatingSlot.end_date, Date) >= start_date
                )

    resources = current_app.db_session.query(Resource).filter(Resource.uri.in_(facilities_uris))
    blocked_times = {}
    for resource in resources:
        blocked_times[resource.uri] = BlockedTimeUtil.get_blocked_time_for_date_range(current_app.db_session, resource, start_date, end_date)

    persons_ids = [app.person.uri.replace('/persons/', '') for app in single_booking_query] + \
                  [app.person.uri.replace('/persons/', '') for app in repeating_booking_query] + \
                  [app.person.uri.replace('/persons/', '') for app in strotime_booking_query]

    organisations_ids = [app.organisation.uri.replace('/organisations/', '') for app in single_booking_query if
                         app.organisation] + \
                        [app.organisation.uri.replace('/organisations/', '') for app in repeating_booking_query if
                         app.organisation] + \
                        [app.organisation.uri.replace('/organisations/', '') for app in strotime_booking_query if
                         app.organisation]

    current_user = get_user(request.cookies)

    persons = ExternalResourceHelper.get_persons_by_id(person_ids=persons_ids,
                                                       auth_token_username=current_user.get('id'))
    organisations = ExternalResourceHelper.get_organisations_by_id(organisation_ids=organisations_ids)

    result = []

    single_soknader = map_applications_from_query_to_pers_and_orgs_and_resources(single_booking_query, organisations, persons, facilities)
    add_entries_for_single_day_bookings(result=result, soknader=single_soknader)

    strotime_soknader = map_applications_from_query_to_pers_and_orgs_and_resources(strotime_booking_query, organisations, persons, facilities)
    add_entries_for_single_day_bookings(result=result, soknader=strotime_soknader)

    repeating_soknader = map_applications_from_query_to_pers_and_orgs_and_resources(repeating_booking_query, organisations, persons, facilities)
    add_entries_for_repeating_booking(result=result, repeating_bookings=repeating_soknader, start_date=start_date,
                                      end_date=end_date)

    add_entries_for_blocked_time(result, blocked_times, facilities)

    return result