def post(self): data = request.get_json() resource_data = data.get("resource", None) if resource_data: resource_uri = resource_data["uri"] resource = get_resource_for_uri(resource_uri) if not resource: abort(403, __error__=[u'Ressursen ble ikke funnet.']) else: abort(403, __error__=[u'Data om ressursen mangler.']) umbrella_organisation_data = data.get("umbrella_organisation", None) if umbrella_organisation_data: umbrella_organisation_uri = umbrella_organisation_data["uri"] umbrella_organisation = get_umbrella_organisation_for_uri(umbrella_organisation_uri) if not umbrella_organisation: abort(403, __error__=[u'Paraplyorganisasjonen ble ikke funnet.']) else: abort(403, __error__=[u'Data om paraplyorganisasjonen mangler.']) rammetid = Rammetid(umbrella_organisation, resource) rammetid_slots_data = data.get("rammetid_slots", None) if rammetid_slots_data: for rammetid_slot in rammetid_slots_data: rammetid_slot_parsed = parse_repeating_slot(rammetid_slot) if BaseApplicationResource.is_conflict_rammetid(resource, rammetid_slot_parsed.start_date, rammetid_slot_parsed.end_date, rammetid_slot_parsed.week_day, rammetid_slot_parsed.start_time, rammetid_slot_parsed.end_time): abort( 400, __error__=[u'Tiden er ikke tilgjengelig'] ) if BaseApplicationResource.is_conflict_blocked_time(resource, rammetid_slot_parsed.start_date, rammetid_slot_parsed.end_date, rammetid_slot_parsed.week_day, rammetid_slot_parsed.start_time, rammetid_slot_parsed.end_time): abort( 400, __error__=[u'Tiden er blokkert'] ) rammetid.add_rammetid_slot(rammetid_slot_parsed) current_app.db_session.add(rammetid) current_app.db_session.commit() current_app.db_session.refresh(rammetid) return marshal(rammetid, rammetid_fields), 201
def get(self, rammetid_id=None): if rammetid_id: rammetid = self.get_object_by_id(rammetid_id) return marshal(rammetid, rammetid_fields) else: resource_uri = request.args.get('resource_uri') umbrella_organisation_uri = request.args.get('umbrella_organisation_uri') if "only_periods" in request.args and resource_uri and umbrella_organisation_uri: resource = self.get_resource_with_id_or_uri(None, resource_uri) umbrella_organisation = get_umbrella_organisation_for_uri(umbrella_organisation_uri) rammetids = current_app.db_session.query(RammetidSlot.start_date.label('start_date'), RammetidSlot.end_date.label('end_date')) \ .filter(Rammetid.id == RammetidSlot.rammetid_id, Rammetid.resource_id == resource.id, Rammetid.umbrella_organisation_id == umbrella_organisation.id) \ .distinct(RammetidSlot.start_date, RammetidSlot.end_date) \ .group_by(RammetidSlot.start_date, RammetidSlot.end_date) \ .order_by(RammetidSlot.start_date, RammetidSlot.end_date) res = [dict(zip(['start_date', 'end_date'], r)) for r in rammetids.all()] return marshal(res, {'start_date': ISO8601DateTime, 'end_date': ISO8601DateTime}) else: rammetids = current_app.db_session.query(Rammetid).order_by(Rammetid.id) return marshal(rammetids.all(), rammetid_fields)
def post(self): data = request.get_json() rammetid_to_application = RammetidToApplication(data.get('umbrella_organisation').get('uri')) ensure(POST, rammetid_to_application) resource = data.get("resource", None) if not resource: abort(403, __error__=[u'Ressurs er ikke angitt.']) resource = get_resource_for_uri(resource['uri']) if not resource: abort(404, __error__=[u'Ressursen finnes ikke.']) if not resource.repeating_booking_allowed: abort(403, __error__=[u'Gjentakende lån ikke tillatt']) user = get_user(request.cookies) person_uri = '/persons/{}'.format(user['person_id']) person = get_person_for_uri(person_uri) if not person: abort(404, __error__=[u'Personen finnes ikke.']) # get umbrella member orgs from organisations backend umbrella_member_organisations = get_umbrella_organisation_from_web(data.get('umbrella_organisation').get('uri')).get('organisations', []) # get local umbrella organisation object umbrella_organisation = get_umbrella_organisation_for_uri(data.get('umbrella_organisation').get('uri')) text = "Rammetid fordeling" applications = [] organisations = data.get('organisations', None) for organisation in organisations: organisation_data = organisations[organisation] # have to be superuser if the organisation is not public and not copied to booking already organisation = get_organisation_for_uri(organisation_data['uri'], cookies=make_superuser_auth_cookie()) if not organisation: abort(404, __error__=[u'Organisasjonen finnes ikke.']) if not any(org.get('uri') == organisation_data['uri'] for org in umbrella_member_organisations): abort(403, __error__=[u'Organisasjonen hører ikke til paraplyorganisasjonen']) application = Application(person, organisation, text, None, resource) application.status = 'Granted' slots = organisation_data["slots"] for slot_data in slots: slot = self.parse_slot(slot_data, application) slot_request = self.parse_slot_request(slot_data) start_date = slot.start_date end_date = slot.end_date week_day = slot.week_day start_time = slot.start_time end_time = slot.end_time self.validate_start_and_end_times(start_date, end_date, start_time, end_time) if not self.has_matching_rammetid(umbrella_organisation.id, start_date, end_date, week_day, start_time, end_time): abort(400, __error__=[u'Ingen rammetid passer']) if self.is_conflict_slot_time(resource, start_date, end_date, week_day, start_time, end_time): abort(400, __error__=[u'Tiden du har søkt på er ikke tilgjengelig']) if self.is_conflict_blocked_time(resource, start_date, end_date, week_day, start_time, end_time): abort(400, __error__=[u'Tiden du har søkt på er blokkert']) application.request_repeating_slot(slot_request) application.add_repeating_slot(slot) applications.append(application) for application in applications: current_app.db_session.add(application) current_app.db_session.commit() current_app.db_session.refresh(application) return applications, 201