ion icon indicating copy to clipboard operation
ion copied to clipboard

Allow sponsors to email students based on attendance levels or attendance for a specific block

Open theo-o opened this issue 4 years ago • 0 comments

Feature description

This FR outlines a feature iterating upon https://github.com/tjcsl/ion/issues/578 (Eighth Period Emails). We should allow sponsors to email students who have signed up for their activity based on attendance levels or attendance for a specific block. This means creating a page where an announcement can be submitted to a block of students, filtered on their attendance levels or attendance to one or more previous blocks.

Rationale for adding feature

During normal times, when clubs have elections and need to make announcements, sponsors & club officers can make announcements in person. Especially during abnormal times, activity sponsors need to communicate on a mass scale to disseminate information to those previously signed up. This need is especially acute for club elections where constitutional requirements mandate a certain number of blocks attended in order to vote or run for office. This need is also apparent when a message needs to be sent after a club's meeting to follow up.

Suggested implementation(s) (if applicable)

  • Originate at /eighth/emails/send/past
  • Link from:
    • dashboard (near sponsor widget)
    • activity page (/eighth/activity/[ID])

Design Flow

  • Page shows all 8th period clubs sponsored by teacher (Page 1)
  • Teacher selects whether they want to filter based on either:
    • # of blocks attended this school year
    • Specific blocks attended this school year
  • Next page either allows a number to be entered or for blocks (this school year) to be selected (Page 2)
  • Next page prompts teacher to type in a message with a listing of students that it will be sent to (Page 3)
  • Confirmation dialog appears showing # of students to be sent to & asks for confirmation to email
  • Ion sends emails in Celery task
  • User is redirected to /eighth/emails/send (with Messenger success message)

Models

  • EighthEmail
    • content = CharField(max_length=[SOME BIG NUMBER])
    • sponsor = ForeignKey(EighthSponsor, on_delete=models.SET_NULL)
    • author = CharField() (by default EighthSponsor's full name)
    • destinees = ManyToManyField(User, related_name="eighth_emails")
    • sent_time = DateTimeField()
    • subject = CharField()
    • send_yourself = BooleanField() (whether to send a copy to yourself)
    • other fields

Security/Privacy Implications

  • Content of emails & associated metadata must be persisted for compliance purposes
  • Sponsors can only send to those who have been signed up for their activity
  • Data already available to sponsors

theo-o avatar Apr 11 '20 15:04 theo-o