Notifications: an overview¶
Notifications are sent through batch channels that use various adapters for each communication channel.
Each adapter is defined in its own module via a class definition that inherits from base class
Currently the communication channels we support are email (default), Slackbot, and in-app notifications. On the admin interface, messages can be scheduled and the adapter can be reconfigured.
The types of messages are as follows:
The options for statuses for messages are as follows:
Messages are rendered using a template defined in
Notifications and reminders for invoicing and contracting¶
These notifications exist to update users on their invoice status and transitions throughout the web app, notifying them if they are required to do anything.
The default method for notifications are via the email address provided. The communication style is to provide the minimum level of detail in the email and make it required to log in to read the full message.
Invoice states and who needs to be notified: (states 1-17) 1 … 17
Translation / localization files for automated messages¶
wagtail-localize is a translation plug-in for the Wagtail CMS, allowing pages or snippets to be translated within Wagtail’s admin interface. Localization happens in
hypha/hypha/public/partner/templates/partner/table.html if a column has a
For translation, we are using
django.utils translation library. For this, it is required to set up hooks called translation strings that signify to Django that certain text snippets that are marked should be translated into the end user’s language if possible.
Messages are translated when the email is constructed in
def make_email_object(self, to: str | List[str], context, **kwargs): if not isinstance(to, (list, tuple)): to = [to] lang = context.get('lang', None) or settings.LANGUAGE_CODE with language(lang): rendered_template = self._render_template(context) body_txt = cleanup_markdown(rendered_template) body_html = markdown_to_html(rendered_template) email = EmailMultiAlternatives(**kwargs) email.body = body_txt email.attach_alternative(body_html, 'text/html') email.to = to return email