Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Define any integrations or data that must be provided to deliver the solution.

  • Faculty Information System
    • Create the following entities consistent with the data model here:
      Lref gdrive file
      urlhttps://docs.google.com/spreadsheets/d/1RwKiyVJsiExO2EB5AtwvE0I1M_-l34G6GxLRo677ys4/edit?gid=1875211680#gid=1875211680
      . The linked document contains all of the related fields for the entities below.
      • Degrees
      • Employment History
      • Licenses and Certifications
      • Grants
      • Honors and Awards
      • Institutional Committees
      • Instructional Development
      • Mentorship and Supervision
      • Non CU Courses
      • Other Institutional Service
      • Professional Development
      • Professional Memberships
      • Professional Service
      • Scholarly Contributions
      • Social Media
    • Create the relevant person-scoped fields
    for relevant fields in
    • from the above data model.

Technical Design

Purpose

Define in detail the technical work that will need to be completed to deliver the final solution.

  • Create the following two entities for managing full-time faculty members' workload and review processes
    • Faculty Review History
    • Faculty Workload
  • Hide the following built-in Slate tabs:
    • Dashboard
    • Profile
  • Create the following tabs and a corresponding person page scoped form for each (e.g. Tab: Dashboard, Form: Dashboard Person Page). Please see functional design document: https://columbiauniversity.atlassian.net/wiki/x/EYCaFg for a list of the relevant sections.  The information below outlines any technical features of the person pages:
    • Dashboard
      • Preferred name: Using Liquid Template, display the preferred name if it is different from the person's first name, otherwise, display "(not set)."
      • Biography: Using Liquid Template, if the faculty member has a biography, display it with the the updated date. If not, simply display "(not set)."
    •  Profile

Technical Design

Purpose

Define in detail the technical work that will need to be completed to deliver the final solution.

  • Career Design Lab Integration
  • Portals:
    • CDL Scheduling - A landing page that does not require permissions to access. A button on the page will take students to the SSO required Portal Book CDL Coach Meeting
      • View Page:
        • slate_advising/portals/cdl_scheduling/portal_view_files/home_page.html
    • Book CDL Coach Meeting - the actual portal connected to coaches' Active Scheduler widgets
      • Methods
        • Coach - [Coach Name]: Each coach has a method with the following details:
          • Type: GET
          • Action: show_schedules_[coach_uni]. 
          • View: Coach - [Coach Name]
          • Output Type: AJAX Popup/No Branding
        • default
          • Details:
            • Type: GET
            • Action: (blank)
            • View: Home Screen
            • Output Type: DefaultNo Branding
          • Queries:
            • student_information
            • pending_in_person_appointments
            • pending_virtual_appointments
            • program_coaches
            • temporary_coaches
        • Show Coach
          • Details:
            • Type: GET
            • Action: show_coach
            • View: Coach Page
            • Output type: Default Branding
          • Queries:
            • coach_information
            • pending_in_person_appointments
            • pending_virtual_appointments
            • student_information
      • Queries
        • coach_information - uses the coach's UNI as a parameter. Gets the coach's name, birography, email address, programs covered, and last initials (if relevant)
        • pending in-person appointments - using the logged-in student/alum's identity, gathers any future in-person appointments with a status of "registered."
        • pending_virtual_appointments - using the logged-in student/alum's identity, gathers any future virtual appointments with a status of "registered."
        • program_coaches - gathers any permanent coaches who are active and cover the student's program of study or one of the student's graduated programs.
        • student_information - using the logged-in student/alum's identity, gathers his/her first name, last name, program of study, and graduated programs. Also performs a query to see if the student is currently enrolled in or has graduated from a valid program.
      • Views
        • Home Page - The portal landing page. Shows the available coaches and temporary coaches.
          • Files:
            • slate_advising/portals/book_cdl_coach_meting/portal_view_files/home_page/01_page_header.html
              • Has a welcome message for the student, lists his/her current program and graduated program(s).
              • Coach List
                • Uses liquid template to only display if the student is in or has graduated from a valid program.
                • Combines the student's current program and graduated programs into a single array.
                • Iterates over the list of permanent coaches:
                  • Checks to see if the coach is responsible for that student's program.
                  • If so, then checks to see if the coach only covers students whose last names start with specific letters of the alphabet for that program.
                  • If the coach covers that program AND either does not cover specific letters or covers the first letter of the student's last name, display that coach's card.
                  • Repeat this process for temporary coaches EXCEPT that their list of programs covered might be blank, in which case, they cover all programs. AND they never are responsible for students based on last initial.
                  • Each coach has a button to take the student/alum to that coach's page. BUT that button is disabled if the student already has pending appointments.
        • Coach Page - The page that appears when the student/alum selects a coach:
          • Files:
            • slate_advising/portals/book_cdl_coach_meting/portal_view_files/coach_page/01_coach_information.html. Consists of:
              • If this is a valid coach:
                • The coach's headshot
                • The coach's bio.
                • A list of programs supported by the coach.
              • If this is not a valid coach:
                • An error message with a link to the CDL Scheduling portal.
            • slate_advising/portals/book_cdl_coach_meting/portal_view_files/coach_page/02_student_ineligible_error.html
              • If the student has pending appointments, displays an error that s/he cannot schedule any additional appointments.
              • If the student does not have a valid program, displays an error that the student's program is not valid
            •  slate_advising/portals/book_cdl_coach_meting/portal_view_files/coach_page/03_available_schedules_div.html
              • Using liquid template, only displays if a) the student has a valid program and b) does not have any upcoming appointments.
              • Has a div with class 'hidden' where the coach's schedules will appear if they have any.
              • Has a hidden div with the class danger (to make it red) and hidden. It displays the
              • message that the student/alum may need to reload the page if available sessions don't appear.
            • slate_advising/portals/book_cdl_coach_meting/portal_view_files/coach_page/04_coach_schedule_api_call.html
              • If this is a valid coach, contains:
                • A div that says "Schedule loading. Please wait..." which will be replaced if the coach has schedules
                • Lazy Fetch request for the "show_schedules_[coach_uni]" method. This includes the page with the respective coach's widgets. Those widgets make an API call to obtain the HTML code for the widgets and replaces the content of the specified div (in this case, the div above) with the coach's widget(s). 
            • slate_advising/portals/book_cdl_coach_meting/portal_view_files/coach_page/05_javascript_controls.html. If the student/alum does not have any pending appointments, holds the following functions:
              • moveDivs
                • Each coach widget has a class which is the coach's UNI. If the blank div exists, we know that the coach 's scheduling page has been loaded.
                  • If the coach's scheduling page has been loaded :
                    • Hide the page loading div.  
                    • Look for widgets. 
                    • Gather the ids of the widgets into an array.
                    • iterate over the array. 
                    • For every element with an even index (0, 2, etc.) start a new row.
                    • Place a div in the current row. Add the coach schedule into that div.
                    • Unhide the page reload message.
                  • If the scheduling page has not been loaded:
                    • Call the function again until it has been called 700 times.
                    • Then display an error that "there was a problem processing your request."
        • Coach - [Coach Name]: Consists of the coach's Active Scheduler widget(s) and a Blank Div.
      • Widgets
        • Each coach/temporary coach has a CSS class name of hidden and their UNI. Hidden makes it not appear upon page load and the UNI is used to identify it to move it to the right location and to appear.
        • For virtual widgets, the URL of their personal zoom room should go into the location URL.
      • Scheduler Templates
        • CDL In Person Coach Meeting
        • CDL Virtual Coach Meeting
      • Scheduler Template Forms
        • Each form has a hidden field called "enrollment status."
        • Each form has two fields called "Are you a current student?" One defaults to "Yes." The other defaults to "No." Both are read-only. The "Yes" version has a filter to only display when the student's enrollment is "Enrolled," and the "No" version only displays when the student's enrollment is not "Enrolled." Both are read-only.
        • Each form as a select field called "Program of Study" that is connected to the Program of Study system field. It also has a textbox called Program of study that does not link to a system field and has a default value of N/A. The select version appears if the student's status is "enrolled." The textbox appears if the student's status is not "enrolled". This is helpful because alumni often still have the field they graduated from as their program of study. All of these fields are read-only.
        • Similarly, each form as a "Graduated Programs" select multiple field that is connected to the Graduated Programs system field and a textbox that is not connected to a system field and has a default value of "N/A." If the student has graduated programs, the student has an alumnus status of "Yes,"  the select multiple field appears. If the student has an alumnus status of "No," the textbox appears. All of these fields are read-only.
        • Each form has a "Years of professional experience" select field. This is connected to the newly created system field, but it is not read-only because its value does not come from SIS.
      • Scheduler Template Communications (equivalent communications are available for both types of meeting).
        • Career Coaching Appointment Scheduled - upon registration - displays to screen and is emailed to the student/alum as well as the coach.
        • Career Coaching Appointment Cancellation - upon cancelling - email sent to the student/alum as well as the coach.
        • Career Coaching Appointment Reminder - sends a reminder to the student/alum 24 hours before the appointment time.
        • Career Coaching Appointment Follow-Up - 8 hours after an appointment, sends an email to the student/alum asking them to follow a link to a survey.
        • Career Coaching Appointment No-Show - 8 hours after an appointment, sends an email to the student/alum if they were entered as a no-show.
        • Career Coaching Appointment Updated - if any element of a meeting is updated (usually just form fields) displays a screen of the meeting details and an email is sent to the student/alum as well as to the coach.
      • Deliver Communications
        • An email is regularly sent to coaches if they have not recorded a student's attendance at least one hour after their meeting has concluded.
  • Move aliases from Front to Slate
  • Created an Inbox Group called CDL.
  • Created a Role called Inbox - CDL.
  • Gave the inbox forwarding address to CUIT to forward all emails from the CDL alias to the new forwarding email address.
  • Assigned the Inbox - CDL role to relevant users.files to be used on faculty tabs:
    • slate_academics/forms/faculty_information_system_tabs/hide_unhide_sections_script.html
      • This script goes at the top of any of the person pages (below) that contains sections to collapse and expand. It consists the following:
        • A div with the id of "[pageName]PageLoadingDiv." (The "[pageName]" portion is to be replaced with the name of the given page. By default this section displays the text "Page loading..." The only purpose for this section is for administrators to see that the section exists when doing maintenance on the page.
        •  Script at the top of the file looks for that section by page loading section by id. If it exists, it assigns it the class of "hidden" so it disappears upon page load.
        • A function called "hideUnhideSection" that is called when the user clicks the +/- sign at the top of each section.
          • The function receives two parameters:
            • sectionDivId - The id of the section that needs to be expanded/collapsed on click.
            • sectionName - the name of the section being dealt with. This is used in the URL to track whether the section should be opened or closed.
          • When a "+" is clicked, the section expands. and the "+" turns into a "-". it assigns the parameter variable a value of 1 to show that it is should be expanded.
          • When a "-" is clicked, the section is collapsed, and the "-" turns into a "+". It assigns the parameter variable a value of 0 to show that it should be collapsed.
          • The script then performs gets the URL of the page.
          • Checks the URL to see if the given section name is a part of it.
            • If the section name is not in the URL, add it to the end with the appropriate parameter value.
            • If the section name is in the URL, grab the first part of the URL through the section name. Add the "=" sign and the appropriate parameter value. add the remainder of the url that followed the parameter value back to the URL. So now we have is the previous URL 
          • Replace the current URL with the modified one.
    • slate_academics/forms/faculty_information_system_tabs/generic_form_heading.html
      • This script goes at the top of each section. 
        • References to "SECTION_TEXT_DIV_ID" should be replaced with the id that wraps around all of the text of the section.
        • References to "SECTION_NAME" should be replaced by the name of the section (in camel case or with underscores instead of spaces).
        • The h2 heading should have the actual section name.
        • The file consists of the following:
          • A script that gets called when the page is loaded. It performs the following functions:
            • Checks the URL to get the list of parameters.
            • If there is no parameter for this section or it does not equal 1, it should be hidden. Therefore, it calls the hideUnhideSection function with the ID of the section and its name.
          • A div showing the section name and then (in superscript) a "-" with an Id of "[sectionName]ToggleSwitch." OnClick, it triggers a call to the hideUnhide function. The field has a "-" sign at the beginning because when the page first loads, we to collapse the section by default. So when it calls the function, the function will see that it was called by a "-" and therefore should be collapsed and the "-" changed to a "+".
    • slate_academics/forms/faculty_information_system_tabs/generic_widget_form_javascript_section.html
      • This script goes as an "instruction" component on the bottom of each widget form that is contained on a person page. It assigns an external id to the value of the entity row being submitted. It will enable the faculty members to generate a form with the entity value in the future so that they can edit their own data.
      • The script consists of the following:
        • A div with an ID of "javascript" that only exists so that users can see it when maintaining the page.
        • A script that performs the following actions.
          • Adds a class of hidden to the div on top so that it cannot be seen.
          • Checks to see if the row already contains an external id. If not, it adds one based on the name of the field and a timestamp.
        • In the script the references to "[entity]ExternalIdFormTextBoxId" should be replaced with the actual ID of the textbox on the form. To set this up:
          • Create the textbox on the form as a regular form textbox field.
          • Go to a test record. 
          • Call up the form.
          • Get the ID of the field.
          • Enter the ID into the appropriate places in the script.
          • Make the field a hidden one.
        • For the script to work properly requires getting the current date in a numerical format. Therefore, there should be a merge field called "current_date" on any widget page that captures the current date with a format mask of MMddyyyyhhmmss.
  • Create the following tabs and a corresponding person page scoped form for each (e.g. Tab: Dashboard, Form: Dashboard Person Page). Please see functional design document: https://columbiauniversity.atlassian.net/wiki/x/EYCaFg for a list of the relevant sections.  The information below outlines any technical features of the person pages:
    • Dashboard
      • Highest Degree obtained - created a library to consistently collect the highest degree obtained. Created an export of degrees filtered for a status of "conferred" sorted descending by the degree level. That way, with an offset of 1, the highest level degree obtained is selected.
      • Preferred name: Using Liquid Template, display the preferred name if it is different from the person's first name, otherwise, display "(not set)."
      • Biography: Using Liquid Template, if the faculty member has a biography, display it with the the updated date. If not, simply display "(not set)." 
      • In the form properties, most merge fields have a Null Value of "(not set)." That way we do not need to put if/then statements in page. 
    •  Profile
      • Biography: Using Liquid Template, if the faculty member has a biography, display it with the the updated date. If not, simply display "(not set)" with a link to set the bio. This link embeds the form in the portal, so upon completion, the user returns to the portal.
      • Contact Information: Using Liquid Template, if the individual has either just a building name or a building name and number display that information. If not, display "(not set)."
      • Address Information: Use Liquid Template, to allow for a blank "Address Street 2" field in the address. If no "Address Street 1" is set, display "(not set)" for the entire address.
      • Most recent term: Use a subquery to capture the faculty member's most recent teaching term (sort by teaching term descending).
      • Current Employer: Use a query to find a row in the Employment History entity in which there is a start date and then end date is either null or later than the current year. Then export the employer's name. If there is no employer, display "(not set)."
      • Professional Interests: Using Liquid Template, determine if any of the values are set. If so, provide a link to edit the values. If not, provide a link to set the values.
    • Positions
      • Contains a widget table for Columbia positions and another for Employment History (non-CU). The Columbia Positions widget is fed from PAC. Therefore, it cannot be added to/edited. To keep it from being added to, on the person page, assign the widget a maximum number of rows of 0. For the form, itself, the only field should be an instruction type stating that it cannot be edited.
    • Scholarly Contributions
    • Service
    • Other Faculty Activities
  • Create the following tabs for full-time faculty members:
    • Full-Time Faculty Review History
    • Full-Time Faculty Workload