byceps/byceps

View on GitHub
byceps/blueprints/site/ticketing/notification_service.py

Summary

Maintainability
A
0 mins
Test Coverage
F
26%
"""
byceps.blueprints.site.ticketing.notification_service
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:Copyright: 2014-2024 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

from flask import g
from flask_babel import gettext

from byceps.services.email import email_config_service, email_service
from byceps.services.ticketing.dbmodels.ticket import DbTicket
from byceps.services.user import user_service
from byceps.services.user.models.user import User
from byceps.util.l10n import force_user_locale


def notify_appointed_user(ticket: DbTicket, user: User, manager: User) -> None:
    party_title = g.party.title

    with force_user_locale(user):
        subject = gettext(
            '%(screen_name)s has assigned ticket %(ticket_code)s to you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
        )

        body = gettext(
            '%(screen_name)s has assigned ticket %(ticket_code)s to you which entitles you to attend %(party_title)s.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
            party_title=party_title,
        )

    _enqueue_email(user, subject, body)


def notify_withdrawn_user(ticket: DbTicket, user: User, manager: User) -> None:
    party_title = g.party.title

    with force_user_locale(user):
        subject = gettext(
            '%(screen_name)s has withdrawn ticket %(ticket_code)s from you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
        )

        body = gettext(
            '%(screen_name)s has withdrawn ticket %(ticket_code)s for %(party_title)s, which was previously assigned to you, from you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
            party_title=party_title,
        )

    _enqueue_email(user, subject, body)


def notify_appointed_user_manager(
    ticket: DbTicket, user: User, manager: User
) -> None:
    party_title = g.party.title

    with force_user_locale(user):
        subject = gettext(
            '%(screen_name)s has assigned user management for ticket %(ticket_code)s to you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
        )

        body = gettext(
            '%(screen_name)s has assigned user management for ticket %(ticket_code)s for %(party_title)s to you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
            party_title=party_title,
        )

    _enqueue_email(user, subject, body)


def notify_withdrawn_user_manager(
    ticket: DbTicket, user: User, manager: User
) -> None:
    party_title = g.party.title

    with force_user_locale(user):
        subject = gettext(
            '%(screen_name)s has withdrawn user management for ticket %(ticket_code)s from you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
        )

        body = gettext(
            '%(screen_name)s has withdrawn user management for ticket %(ticket_code)s for %(party_title)s, which was previously assigned to you, from you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
            party_title=party_title,
        )

    _enqueue_email(user, subject, body)


def notify_appointed_seat_manager(
    ticket: DbTicket, user: User, manager: User
) -> None:
    party_title = g.party.title

    with force_user_locale(user):
        subject = gettext(
            '%(screen_name)s has assigned seat management for ticket %(ticket_code)s to you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
        )

        body = gettext(
            '%(screen_name)s has assigned seat management for ticket %(ticket_code)s for %(party_title)s to you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
            party_title=party_title,
        )

    _enqueue_email(user, subject, body)


def notify_withdrawn_seat_manager(
    ticket: DbTicket, user: User, manager: User
) -> None:
    party_title = g.party.title

    with force_user_locale(user):
        subject = gettext(
            '%(screen_name)s has withdrawn seat management for ticket %(ticket_code)s from you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
        )

        body = gettext(
            '%(screen_name)s has withdrawn seat management for ticket %(ticket_code)s for %(party_title)s, which was previously assigned to you, from you.',
            screen_name=manager.screen_name,
            ticket_code=ticket.code,
            party_title=party_title,
        )

    _enqueue_email(user, subject, body)


def _enqueue_email(recipient: User, subject: str, body: str) -> None:
    email_config = email_config_service.get_config(g.brand_id)
    sender = email_config.sender

    recipient_address = user_service.get_email_address(recipient.id)
    recipients = [recipient_address]

    with force_user_locale(recipient):
        salutation = (
            gettext('Hello %(screen_name)s,', screen_name=recipient.screen_name)
            + '\n\n'
        )
    body = salutation + body

    email_service.enqueue_email(sender, recipients, subject, body)