outreachy / website

Code for the Outreachy website, based on Python, Django, and Bootstrap.
https://www.outreachy.org
GNU General Public License v3.0
249 stars 235 forks source link

Send interns email with midpoint and final payment info #189

Open sagesharp opened 6 years ago

sagesharp commented 6 years ago

So that they don't bug accounting about not getting paid.

sagesharp commented 6 years ago

Outreachy dashboard should display payment dates (and feedback dates) for interns or mentors in a currently running round.

sagesharp commented 5 years ago

We collect feedback on the internship at three points: initial, mid-point, and final feedback. The interns and mentors fill out a feedback form on the Outreachy website. The form includes some check-in questions. The mentors are asked whether an intern should be paid their initial/mid-point/final stipend, or whether the internship should be extended or terminated. The link to the form appears on the intern and mentor dashboard when feedback is open. (Feedback forms stay open even past when they are due, because we want mentors to fill out late feedback.)

Once mentors give their feedback, interns can see the mentors have submitted the feedback, although they can't see whether it's successful feedback. The Outreachy organizers then review the mentor feedback by following a link from our dashboard. Organizers export the feedback in a JSON format and pass it onto the Software Freedom Conservancy to authorize payment to interns.

From an interns' perspective, it would be good for them to get an email when the Outreachy organizers authorize the payments. Interns are often anxious about being paid, and they don't receive any emails from Conservancy until their payment has been issued. Giving them a record of when payment was authorized will help ease that anxiety.

As an interim solution, we manually (through the Django shell) set a flag in the BaseMentorFeedback (organizer_payment_approved) for all the interns we issue payment for. That causes the intern dashboard to display that they've been paid. Since it's a manual process, it's prone to error, and I sometimes forget to do it right away (which causes more anxiety in the interns).

The complexity in feedback export and payment authorization comes when an intern needs an extension, or a mentor wants to terminate the internship. Outreachy organizers want to facilitate a conversation with the intern and mentor to see if there is a way for the internship to go forward instead of being terminated. We don't want to pass on the mentor's feedback to the Software Freedom Conservancy until we have that conversation. That means we have to manually edit the JSON file to remove that feedback. :scream_cat: It also means we have to be careful not to set the organizer_payment_approved flag for that intern in the Django shell.

A further complexity is that sometimes the mentor wants to terminate the internship, but wants the intern to be paid. This happens in cases such as when the intern has been putting in a (mostly) full-time effort, but has a long-term illness and tells their mentor they want to terminate the internship.

One more thing to keep in mind is that mentors can resubmit feedback. Sometimes it's because a mentor didn't understand the form and filled it out wrong. The way we export feedback, mentors have to be the ones to edit the form, because we search for the last version that a mentor edited. If the form is wrong and an organizer goes into the Django dashboard to edit it, then the export code won't pick that up. (That's due to us needing to send the date the form was submitted and IP address of the mentor to Conservancy in the JSON file.)

Extensions also cause it to be filled out twice. When a mentor says that the internship needs to be extended, they submit the form saying that the internship needs to be extended and the intern shouldn't be paid. We hold off exporting that feedback until the extension is done.

If a mentor filled out the form wrong, or the intern extension is done, organizers manually set the allow_edits flag to allow the mentor to edit the feedback. (Again, this is something I forget to do, maybe we could automatically set it in the can_edit() function if the extension has passed and the feedback form is open again? Or set it if we've resent the email to mentors asking for feedback? Everything is awful about this...)

The point is, we may (in some rare cases) export internship feedback twice, I think?

What we need is a new form that allows us to manually export specific intern feedback. It should allow organizers to check a box next to interns' feedback that we need to export. When we export the feedback, if the payment_approved flag is set for that mentor feedback, then the view code should also set the organizer_payment_approved flag should get set.

The form should change order after we export some feedback. Feedback with the organizer_payment_approved flag set should be moved to the bottom of the list. Feedback where mentors indicate that the internship should be extended or terminated should appear at the top of the list. Otherwise the list should be in order by community name and then intern name, like it is on the organizer dashboard grid view of the feedback. Sorting the feedback in this way will help organizers see which intern feedback still needs to be addressed.

The models for mentor feedback forms are BaseFeedback, BaseMentorFeedback, InitialMentorFeedback, MidpointMentorFeedback, and FinalMentorFeedback

The models for intern feedback forms are BaseFeedback, BaseInternFeedback, InitialInternFeedback, MidpointInternFeedback, and FinalInternFeedback.