diff --git a/apps/tickets/notifications.py b/apps/tickets/notifications.py new file mode 100644 index 000000000..e39edee0f --- /dev/null +++ b/apps/tickets/notifications.py @@ -0,0 +1,87 @@ +from urllib.parse import urljoin + +from django.conf import settings +from django.utils.translation import ugettext as _ + +from . import const +from notifications.notifications import UserMessage +from common.utils import get_logger + +logger = get_logger(__file__) + +EMAIL_TEMPLATE = ''' +
+

+ {title} + + {ticket_detail_url_description} + +

+
+ {body} +
+
+''' + + +class BaseTicketMessage(UserMessage): + + @property + def subject(self): + return _(self.title).format(self.ticket.title, self.ticket.get_type_display()) + + @property + def ticket_detail_url(self): + return urljoin(settings.SITE_URL, const.TICKET_DETAIL_URL.format(id=str(self.ticket.id))) + + def get_text_msg(self) -> dict: + message = """ + {title}: {ticket_detail_url} -> {ticket_detail_url_description} + {body} + """.format( + title=self.content_title, + ticket_detail_url=self.ticket_detail_url, + ticket_detail_url_description=_('click here to review'), + body=self.ticket.body + ) + return { + 'subject': self.subject, + 'message': message + } + + def get_html_msg(self) -> dict: + message = EMAIL_TEMPLATE.format( + title=self.content_title, + ticket_detail_url=self.ticket_detail_url, + ticket_detail_url_description=_('click here to review'), + body=self.ticket.body.replace('\n', '
'), + ) + return { + 'subject': self.subject, + 'message': message + } + + +class TicketAppliedToAssignee(BaseTicketMessage): + title = 'New Ticket - {} ({})' + + def __init__(self, user, ticket): + self.ticket = ticket + super().__init__(user) + + @property + def content_title(self): + return _('Your has a new ticket, applicant - {}').format(str(self.ticket.applicant_display)) + + +class TicketProcessedToApplicant(BaseTicketMessage): + title = 'Ticket has processed - {} ({})' + + def __init__(self, user, ticket, processor): + self.ticket = ticket + self.processor = processor + super().__init__(user) + + @property + def content_title(self): + return _('Your ticket has been processed, processor - {}').format(str(self.processor)) diff --git a/apps/tickets/utils.py b/apps/tickets/utils.py index 7999a5e1d..18de23371 100644 --- a/apps/tickets/utils.py +++ b/apps/tickets/utils.py @@ -1,66 +1,32 @@ # -*- coding: utf-8 -*- # -from urllib.parse import urljoin from django.conf import settings -from django.utils.translation import ugettext as _ from common.utils import get_logger -from common.tasks import send_mail_async -from . import const +from .notifications import TicketAppliedToAssignee, TicketProcessedToApplicant logger = get_logger(__file__) -EMAIL_TEMPLATE = ''' -
-

- {title} - - {ticket_detail_url_description} - -

-
- {body} -
-
-''' - def send_ticket_applied_mail_to_assignees(ticket): assignees = ticket.current_node.first().ticket_assignees.all() if not assignees: - logger.debug("Not found assignees, ticket: {}({}), assignees: {}".format( - ticket, str(ticket.id), assignees) - ) + logger.debug("Not found assignees, ticket: {}({}), assignees: {}".format(ticket, str(ticket.id), assignees)) return - ticket_detail_url = urljoin(settings.SITE_URL, const.TICKET_DETAIL_URL.format(id=str(ticket.id))) - subject = _('New Ticket - {} ({})').format(ticket.title, ticket.get_type_display()) - message = EMAIL_TEMPLATE.format( - title=_('Your has a new ticket, applicant - {}').format(str(ticket.applicant_display)), - ticket_detail_url=ticket_detail_url, - ticket_detail_url_description=_('click here to review'), - body=ticket.body.replace('\n', '
'), - ) - if settings.DEBUG: - logger.debug(message) - recipient_list = [i.assignee.email for i in assignees] - send_mail_async.delay(subject, message, recipient_list, html_message=message) + for assignee in assignees: + instance = TicketAppliedToAssignee(assignee, ticket) + if settings.DEBUG: + logger.debug(instance) + instance.publish_async() def send_ticket_processed_mail_to_applicant(ticket, processor): if not ticket.applicant: logger.error("Not found applicant: {}({})".format(ticket.title, ticket.id)) return - processor_display = str(processor) - ticket_detail_url = urljoin(settings.SITE_URL, const.TICKET_DETAIL_URL.format(id=str(ticket.id))) - subject = _('Ticket has processed - {} ({})').format(ticket.title, processor_display) - message = EMAIL_TEMPLATE.format( - title=_('Your ticket has been processed, processor - {}').format(processor_display), - ticket_detail_url=ticket_detail_url, - ticket_detail_url_description=_('click here to review'), - body=ticket.body.replace('\n', '
'), - ) + + instance = TicketProcessedToApplicant(ticket.applicant, ticket, processor) if settings.DEBUG: - logger.debug(message) - recipient_list = [ticket.applicant.email, ] - send_mail_async.delay(subject, message, recipient_list, html_message=message) + logger.debug(instance) + instance.publish_async()