Guide to setting up appointments
Data for Google Appointment Sheet
the table shown at https://www.bio.fsu.edu/gradbeta/support/assignments.html can be used to instantiate the google sheet, (but needs to be pre-populated with annual review support info if known)
services_config
file: _data/services_config.json edit on server via Jedi
Make sure config is set to new semester, in particular: - close_date - form_deadline - form_term - form_year - letter_date - open_date
"appointments": {
"archive_name_abbr": "Appt",
"availability": true,
"bcc_notifications": [
"graddatabase@bio.fsu.edu"
],
"cc_notifications": [
"graddatabase@bio.fsu.edu"
],
"close_date": "2019-2-1",
"firebase_directory": "appointments",
"form_deadline": "January 4, 2018",
"form_page_name": "appointments",
"form_term": "spring",
"form_year": "2019",
"key": "appointments",
"letter_date": "December 14, 2018",
"name": "Appointment Letters",
"open_date": "2018-12-14",
"qr_letter": "a",
"term_data_file_name": "appointments"
},
fsu-terms.yaml
check https://fda.fsu.edu/faculty-employment/appointments for correct appointment dates in /_data/univ/fsu-terms.yaml
department.yaml
file: _data/dept/department.yaml : make sure stipends, tuition, and fees are up to date edit on server via Jedi
#person listed as supervisor on appointment letters
appt_supervisor: "Jessica Webber"
appt_supervisor_fsuid: jwebber
appt_hours: 20
appt_fte: 0.5
ta_code: W9185
ra_code: M9182
# biweekly stipend amount
ms_stipend: 878.75
phd_stipend: 915.29
ms_stipend_annual: 22935.38
phd_stipend_annual: 23888.98
summer_pay_periods: 6.5
fall_pay_periods: 9.7
spring_pay_periods: 9.8
stipends_last_updated: 2017-10-6
#tuition waivers
in_state_waivers_per_semester: 12
out_of_state_waivers_per_semester: 9
intl_waivers_per_semester: 9
lacs_waivers_per_semester: 9
#tuition cost per credit hour
matriculation_waiver: 403.51
out_of_state_waiver: 601.34
waivers_last_updated: 7/26/2018
#fees per credit hour
in_state_fees: 75.81
out_of_state_fees: 105.87
intl_fees: 105.87
lacs_fees: 105.87
# flat fees charged each term: Facilities use ($20/term) & fsu card fee ($10/year)
flat_fees_per_term: 25.00
fees_last_updated: 12/4/2017
#cost of health insurance
health_insurance: 2344.00
health_insurance_subsidy: 1744.00
health_insurace_last_updated: 12/4/2017
TODO: add fields in department.yaml or appointments_info.yaml for setting up links at bottom of assignments page:
Domestic Student Fact Sheet https://www.bio.fsu.edu/grad/info/FSU_Grad_Domestic_Factsheet.pdf International Student Fact Sheet https://www.bio.fsu.edu/grad/info/FSU_Grad_Intl_Factsheet.pdf Council of Graduate Schools Resolution http://www.gradstudies.fsu.edu/content/download/14409/90032/CGSResolutionMay2009.pdf 2015-2018 Graduate Assistant Collective Bargaining Agreement http://www.gradstudies.fsu.edu/content/download/299150/2094937/2015-2018FSU-BOT_GAU_CBA.pdf
assignments.csv
The assignments for the current term are kept in the file _data/term_data/<year_term>/assignments.csv
.
This data is used in _build_appointments.liquid
to instantiate the online form for each student.
Google Sheet
The assigements.csv file is downloaded from a cognate Google sheet. Get the Google sheetid from the share link on Google Sheets, for both assignments and courses for the
curl "https://docs.google.com/spreadsheets/d/<sheet_id>/export?exportFormat=csv" >assignments.csv
Add to the /source_data/config/google_data.yaml (for both assignments and courses):
term_data:
assignments:
filename: assignments.csv
terms:
2018_fall: 1ORh70yS59o9UWhI3jsUOrUfL_xKbowcag8t_yYrOcGA
2019_spring: 1pkn9UEihnQ3wZR9z9qjr8vr0T2fQ1KgaluJze3IhNZ0
It should be downloaded automatically by the periodic call to
node collect-google-data.js
Required fields :
-
fsuid
-
first_name
-
last_name
-
appointment = TA or RA or NFR (no funds requested) or FS(fellowship) or PRO (professional internship)
-
if TA, then "course" should also be filled in with course id from courses.csv
-
if RA and a regular PI funded RA, ra_type can be left blank
- if FS and a fellowship, then set ra_type (e.g. "fellowship" )and source (e.g "NSF GRP").
-
Students on fellowship (FS) or not receiving funds (NFR) are not sent an appointment letter, as they don't get appointments
-
appt_code (RA = M9182, TA = W9185; leave blank if it's a fellowship or NFR);
-
degree (MS or PhD)
-
supervisor (name)(if not TA, otherwise grad coordinator/chair is set to supervisor)
-
incoming = "yes" or blank; if yes then this is the students first semester; no reminder email is sent, because they are covered by their offer letter
If student is in gradbeta, then email and residency fields are pulled from gradbeta allstudents.json
. However, for students not in gradbeta (ie hires from other departments), make sure that these fields are entered into assignments.csv (or the Google sheet):
-
email address
-
residency is filled in: "lacs", "in-state", "out-of-state", "intl"
appointments.json
Make sure ./jekyll/_data/term_data/<term_key>/appointments.json
is current. This is downloaded from Firebase, and contains those appointment letters which have already been filled out.
start-process-appt-letter Node Microservice
After setting up assignments.csv and services_config.json, then you should toggle on Jedi the node microservice start-process-appt-letter.js
and the launchdemon that controls it. The microservice monitors the firebase data for appointments. When a student signs and submits the appointment letter, then the microservice sees the new data in firebase, and sends a confirmation email via transactq, and prints a pdf to the students archive directory.
Toggle the microservice by unloading and reloading the launchdemon:
launchctl unload com.bcybernetics.gradphile.start-process-appt-letter.plist
launchctl load com.bcybernetics.gradphile.start-process-appt-letter.plist
Testing
The form is instantiated at /appointments/
. If not specificed, the form will use id of current login, year and term default to current services_config term.
To test, admininstrators can use biostudent, who is always built into list of students:
/appointments/?id=biostudent
should default to current services_config term.
You can explicitly specify the year and term: /appointments/?id=biostudent&year=2018&term=fall
If term not specified, or the current term is specified, then the first time a student connects to the form, the form data is instantiated from the client javascript app using data compiled at time of padawan build; when the form is saved & submitted, then the data is transferred to firebase. Subsequent connections will then pull data from firebase. If the source data in assignments.csv
, is changed, then the new data will be reflected in the form after the next padawan build and deploy. (But if the file has already been signed and submitted, then the saved form wouldn't be changes: you would need to delete the form from firebase to get a new form.)
If a term other than current term is specified, then data is pulled from firebase (so might not be there).
Luke Skywalker (fsuid: biostudent) is always set up as an out-of-state RA, so the stup for the current services_config term can be examined at /appointments/?id=biostudent.
Setting up email reminders via transactq
-
make sure
./jekyll/_data/term_data/<term_key>/appointments.json
is current ( so that students who have already signed aren't sent a reminder) -
On Jedi, take the appt_letter launchdemon off line so that nothing gets processed while we are updating.
launchctl unload com.bcybernetics.gradphile.start-process-appt-letter.plist
-
Run the
send_initial_appt_email.js
node script to send the initial emails. This will email all the students in assignments.csv who have RA or TA appointments. The emails are sent via transactq.js, which sets a reminder on firebase appointments/reminders, so that the student will be sent reminders every few days until they sign. -
First run the script in debug mode (default setting) to see that emails are properly sent to tom+
@huoptlab.org. -
If they look okay, then send for real by adding "SEND" to end of command line (which overides debug mode).
-
is of the form "2020_spring", "2020_summer" or "2020_fall"
node send_initial_appt_email.js appointments <term_key ... eg 2019_spring>
-
the send_initial_appt_email program should terminate about 5 minutes after it sends the last email. The emails are queued up and sent every 5 seconds so as not to overwhelm the server, so it can take a while to send them all.
-
once the initial emails are sent, reload the appt_letter launchdemon so that signed letters are processed (and transactq reminders are canceled)
launchctl load com.bcybernetics.gradphile.start-process-appt-letter.plist