class Services(Resource): csr_schema = CSRSchema() @oidc.accept_token(require_token=True) @api_call_with_retry def put(self, id): json_data = request.get_json() if not json_data: return {'message': 'No input data received for updating CSR'}, 400 auth_csr = CSR.find_by_username(g.oidc_token_info['username']) edit_csr = CSR.query.filter_by(csr_id=id).first_or_404() if auth_csr.csr_id != edit_csr.csr_id: return { 'message': 'You do not have permission to edit this CSR' }, 403 try: edit_csr = self.csr_schema.load(json_data, instance=edit_csr, partial=True).data except ValidationError as err: return {'message': err.messages}, 422 db.session.add(edit_csr) db.session.commit() result = self.csr_schema.dump(edit_csr) return {'service_request': result.data, 'errors': result.errors}, 200
class CsrSelf(Resource): csr_schema = CSRSchema() citizen_schema = CitizenSchema(many=True) @oidc.accept_token(require_token=True) def get(self): try: csr = CSR.query.filter_by(username=g.oidc_token_info['username']. split("idir/")[-1]).first() active_sr_state = SRState.query.filter_by(sr_code='Active').first() active_citizens = Citizen.query \ .join(Citizen.service_reqs) \ .filter_by(sr_state_id=active_sr_state.sr_state_id) \ .join(ServiceReq.periods) \ .filter_by(csr_id=csr.csr_id) \ .filter(Period.time_end.is_(None)) result = self.csr_schema.dump(csr) active_citizens = self.citizen_schema.dump(active_citizens) return { 'csr': result.data, 'active_citizens': active_citizens.data, 'errors': result.errors } except exc.SQLAlchemyError as e: print(e) return {'message': 'API is down'}, 500
class CsrList(Resource): csr_schema = CSRSchema(many=True, exclude=( 'office', 'periods', )) @oidc.accept_token(require_token=True) def get(self): try: csr = CSR.find_by_username(g.oidc_token_info['username']) if csr.role.role_code != "GA": return { 'message': 'You do not have permission to view this end-point' }, 403 csrs = CSR.query.filter_by(office_id=csr.office_id) filtered_csrs = [c for c in csrs if c.deleted is None] result = self.csr_schema.dump(filtered_csrs) return {'csrs': result.data, 'errors': result.errors} except exc.SQLAlchemyError as e: print(e) return {'message': 'API is down'}, 500
class PeriodSchema(ma.ModelSchema): class Meta: model = Period jit = toastedmarshmallow.Jit period_id = fields.Int() sr_id = fields.Int() csr_id = fields.Int() reception_csr_ind = fields.Int() ps_id = fields.Int() time_start = fields.DateTime() time_end = fields.DateTime() ps = fields.Nested( PeriodStateSchema(exclude=( 'ps_id', 'ps_desc', 'ps_number', ))) sr = fields.Nested("ServiceReqSchema", exclude=('periods', )) csr = fields.Nested( CSRSchema(exclude=('csr_id', 'csr_state', 'csr_state_id', 'deleted', 'office', 'office_id', 'periods', 'qt_xn_csr_ind', 'receptionist_ind', 'role', 'role_id')))
class CsrList(Resource): csr_schema = CSRSchema(many=True) @oidc.accept_token(require_token=True) def get(self): try: csr = CSR.query.filter_by(username=g.oidc_token_info['username']. split("idir/")[-1]).first() if csr.role.role_code != "GA": return { 'message': 'You do not have permission to view this end-point' }, 403 csrs = CSR.query.filter_by(office_id=csr.office_id) result = self.csr_schema.dump(csrs) return {'csrs': result.data, 'errors': result.errors} except exc.SQLAlchemyError as e: print(e) return {'message': 'API is down'}, 500