def appointment_to_compatible_json(appointment, topics=(), attachments=None, event=None): # We have legacy appointments and appointments created via BOA. The following sets a standard for the front-end. advisor_sid = appointment.get('advisor_sid') advisor_uid = appointment.get('advisor_uid') appointment_id = appointment.get('id') appointment_type = appointment.get('appointment_type') cancelled = appointment.get('cancelled') departments = [] dept_codes = appointment.get('advisor_dept_codes') or [] created_by = appointment.get('created_by') or 'YCBM' for dept_code in dept_codes: departments.append({ 'code': dept_code, 'name': BERKELEY_DEPT_CODE_TO_NAME.get(dept_code, dept_code), }) api_json = { 'id': appointment_id, 'advisor': { 'id': AuthorizedUser.get_id_per_uid(advisor_uid) if advisor_uid else None, 'name': appointment.get('advisor_name') or join_if_present( ' ', [appointment.get('advisor_first_name'), appointment.get('advisor_last_name')], ), 'sid': advisor_sid, 'title': appointment.get('advisor_role'), 'uid': advisor_uid, 'departments': departments, }, 'appointmentTitle': appointment.get('title'), 'appointmentType': appointment_type, 'attachments': attachments, 'createdAt': resolve_sis_created_at(appointment) or appointment.get('starts_at').isoformat(), 'createdBy': created_by, 'deptCode': appointment.get('dept_code'), 'details': appointment.get('details'), 'endsAt': appointment.get('ends_at').isoformat() if created_by == 'YCBM' and appointment.get('ends_at') else None, 'student': { 'sid': appointment.get('student_sid'), }, 'topics': topics, 'updatedAt': resolve_sis_updated_at(appointment), 'updatedBy': appointment.get('updated_by'), 'cancelReason': appointment.get('cancellation_reason') if created_by == 'YCBM' else None, 'status': 'cancelled' if cancelled else None, } if appointment_type and appointment_type == 'Scheduled': api_json.update({ 'scheduledTime': _isoformat(appointment, 'scheduled_time'), 'studentContactInfo': appointment.get('student_contact_info'), 'studentContactType': appointment.get('student_contact_type'), }) if event: api_json.update(event) return api_json
def _get_loch_notes_search_results(loch_results, search_terms): results = [] if not loch_results: return results sids = list( set([ row.get('advisor_sid') for row in loch_results if row.get('advisor_sid') is not None ])) calnet_advisor_feeds = get_calnet_users_for_csids(app, sids) for note in loch_results: advisor_feed = calnet_advisor_feeds.get(note.get('advisor_sid')) if advisor_feed: advisor_name = advisor_feed.get('name') or join_if_present( ' ', [ advisor_feed.get('first_name'), advisor_feed.get('last_name') ]) else: advisor_name = None note_body = (note.get('note_body') or '').strip() or join_if_present( ', ', [note.get('note_category'), note.get('note_subcategory')]) results.append({ 'id': note.get('id'), 'studentSid': note.get('sid'), 'studentUid': note.get('uid'), 'studentName': join_if_present(' ', [note.get('first_name'), note.get('last_name')]), 'advisorSid': note.get('advisor_sid'), 'advisorName': advisor_name or join_if_present(' ', [ note.get('advisor_first_name'), note.get('advisor_last_name') ]), 'noteSnippet': search_result_text_snippet(note_body, search_terms, TEXT_SEARCH_PATTERN), 'createdAt': resolve_sis_created_at(note), 'updatedAt': resolve_sis_updated_at(note), }) return results
def note_to_compatible_json(note, topics=(), attachments=None, note_read=False): # We have legacy notes and notes created via BOAC. The following sets a standard for the front-end. departments = [] dept_codes = note.get('dept_code') if 'dept_code' in note else note.get( 'author_dept_codes') or [] for dept_code in dept_codes: departments.append({ 'code': dept_code, 'name': BERKELEY_DEPT_CODE_TO_NAME.get(dept_code, dept_code), }) return { 'id': note.get('id'), 'sid': note.get('sid'), 'author': { 'id': note.get('author_id'), 'uid': note.get('author_uid'), 'sid': note.get('advisor_sid'), 'name': note.get('author_name'), 'role': note.get('author_role'), 'departments': departments, 'email': note.get('advisor_email'), }, 'subject': note.get('subject'), 'body': note.get('body') or note.get('note_body'), 'category': note.get('note_category'), 'subcategory': note.get('note_subcategory'), 'appointmentId': note.get('appointmentId'), 'createdBy': note.get('created_by'), 'createdAt': resolve_sis_created_at(note), 'updatedBy': note.get('updated_by'), 'updatedAt': resolve_sis_updated_at(note), 'read': True if note_read else False, 'topics': topics, 'attachments': attachments, 'eForm': _eform_to_json(note), }
def _get_loch_appointments_search_results(loch_results, search_terms): results = [] if not loch_results: return results sids = list(set([row.get('advisor_sid') for row in loch_results if row.get('advisor_sid') is not None])) calnet_advisor_feeds = get_calnet_users_for_csids(app, sids) for appointment in loch_results: advisor_feed = calnet_advisor_feeds.get(appointment.get('advisor_sid')) if advisor_feed: advisor_name = advisor_feed.get('name') or join_if_present(' ', [advisor_feed.get('firstName'), advisor_feed.get('lastName')]) else: advisor_name = None details = (appointment.get('note_body') or '').strip() or join_if_present( ', ', [appointment.get('note_category'), appointment.get('note_subcategory')], ) student_sid = appointment.get('sid') results.append({ 'id': appointment.get('id'), 'advisorName': advisor_name or join_if_present(' ', [appointment.get('advisor_first_name'), appointment.get('advisor_last_name')]), 'advisorRole': advisor_feed.get('title'), 'advisorUid': advisor_feed.get('uid'), 'advisorDeptCodes': [dept['code'] for dept in advisor_feed.get('departments')], 'createdAt': resolve_sis_created_at(appointment), 'details': details, 'detailsSnippet': search_result_text_snippet(details, search_terms, TEXT_SEARCH_PATTERN), 'studentSid': student_sid, 'updatedAt': resolve_sis_updated_at(appointment), 'student': { 'uid': appointment.get('uid'), 'firstName': appointment.get('first_name'), 'lastName': appointment.get('last_name'), 'sid': student_sid, }, }) return results