def find_matching_organisations_and_append_new_values(cls, facet_value): new_values = [] organisations = ExternalResourceHelper.get_organisation_by_name(facet_value.value) if len(organisations) > 0: for org in organisations: new_value = copy.copy(facet_value) new_value.value = org['id'] new_values.append(new_value) return new_values
def fetch_soknader(self, facets): url = ExternalResourceHelper.sak_root_uri + '/queries/' # "søker" facet can require extra processing if its type is 'free' soker_facet = SoknaderResource.find_facet(facets, u'Søker') if soker_facet and SoknaderResource.facet_type_equals(soker_facet, 'free'): new_values = self.create_correct_query_values(soker_facet) if new_values is not None and len(new_values) > 0: soker_facet.values = new_values else: # no organisations have been found if new_values is empty, # then the search is not supposed to return anything return [] response = ExternalResourceHelper.post_to_ext(url, {"type": "soknad", "filters": [facet.to_json() for facet in facets]}) soknader = json.loads(response.content) ExternalResourceHelper.load_organisations(soknader) ExternalResourceHelper.load_persons(soknader) return soknader
def get(self, soknad_id=None): if soknad_id: soknad = self.soknad_resource.get(soknad_id) ExternalResourceHelper.load_organisation(soknad) ExternalResourceHelper.load_persons([soknad]) ExternalResourceHelper.load_users([soknad]) return output_pdf(soknad, 200, template=u"pdf/soknad.html") # return output_csv(soknad, 200, fieldname_mapping=get_fieldname_mapping(), fields_to_ignore=get_fields_to_ignore()) else: parser = RequestParser() parser.add_argument("id", type=int, action="append", required=True) args = parser.parse_args() soknader = self.soknad_resource.get() soknader = [s for s in soknader if s["id"] in args["id"]] ExternalResourceHelper.load_organisations(soknader) ExternalResourceHelper.load_persons(soknader) ExternalResourceHelper.load_users(soknader) return output_csv( soknader, 200, fieldname_mapping=get_fieldname_mapping(), fields_to_ignore=get_fields_to_ignore() )
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