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