diff --git a/atst/models/application_role.py b/atst/models/application_role.py index b98f57a7..7b343cd8 100644 --- a/atst/models/application_role.py +++ b/atst/models/application_role.py @@ -53,7 +53,10 @@ class ApplicationRole( @property def user_name(self): - return self.user.full_name + if self.user: + return self.user.full_name + else: + return None def __repr__(self): return "".format( @@ -79,6 +82,16 @@ class ApplicationRole( def portfolio_id(self): return self.application.portfolio_id + @property + def event_details(self): + return { + "updated_user_name": self.user_name, + "updated_user_id": str(self.user_id), + "application": self.application.name, + "portfolio": self.application.portfolio.name, + } + + Index( "application_role_user_application", ApplicationRole.user_id, diff --git a/atst/models/mixins/invites.py b/atst/models/mixins/invites.py index 39bedc08..f7212850 100644 --- a/atst/models/mixins/invites.py +++ b/atst/models/mixins/invites.py @@ -105,3 +105,23 @@ class InvitesMixin(object): @property def user_dod_id(self): return self.user.dod_id if self.user is not None else None + + @property + def event_details(self): + """Overrides the same property in AuditableMixin. + Provides the event details for an invite that are required for the audit log + """ + return {"email": self.email, "dod_id": self.user_dod_id} + + @property + def history(self): + """Overrides the same property in AuditableMixin + Determines whether or not invite status has been updated + """ + changes = self.get_changes() + change_set = {} + + if "status" in changes: + change_set["status"] = [s.name for s in changes["status"]] + + return change_set diff --git a/atst/models/portfolio_invitation.py b/atst/models/portfolio_invitation.py index 1c1e43dd..33aaadb6 100644 --- a/atst/models/portfolio_invitation.py +++ b/atst/models/portfolio_invitation.py @@ -6,7 +6,7 @@ from atst.models import Base from atst.models.mixins import TimestampsMixin, AuditableMixin, InvitesMixin -class PortfolioInvitation(Base, TimestampsMixin, AuditableMixin, InvitesMixin): +class PortfolioInvitation(Base, TimestampsMixin, InvitesMixin, AuditableMixin): __tablename__ = "portfolio_invitations" portfolio_role_id = Column( @@ -25,17 +25,3 @@ class PortfolioInvitation(Base, TimestampsMixin, AuditableMixin, InvitesMixin): @property def portfolio_id(self): return self.role.portfolio_id - - @property - def event_details(self): - return {"email": self.email, "dod_id": self.user_dod_id} - - @property - def history(self): - changes = self.get_changes() - change_set = {} - - if "status" in changes: - change_set["status"] = [s.name for s in changes["status"]] - - return change_set diff --git a/templates/audit_log/events/application_invitation.html b/templates/audit_log/events/application_invitation.html new file mode 100644 index 00000000..a68e3d03 --- /dev/null +++ b/templates/audit_log/events/application_invitation.html @@ -0,0 +1,16 @@ +{% extends 'audit_log/events/_base.html' %} + +{% block content %} + {% set accepted = event.changed_state.status and event.changed_state.status.1 == "ACCEPTED" %} + {% if accepted %} + accepted by {{ event.event_details.email }} (DOD {{ event.event_details.dod_id }}) +
+ {% endif %} + {% if event.action == "create" %} + invited {{ event.event_details.email }} (DOD {{ event.event_details.dod_id }}) +
+ {% endif %} + in Application {{ event.application_id }} ({{ event.application.name }}) +
+ in Portfolio {{ event.portfolio_id }} ({{ event.portfolio.name }}) +{% endblock %} diff --git a/templates/audit_log/events/application_role.html b/templates/audit_log/events/application_role.html new file mode 100644 index 00000000..ff1ee6f9 --- /dev/null +++ b/templates/audit_log/events/application_role.html @@ -0,0 +1,9 @@ +{% extends 'audit_log/events/_base.html' %} + +{% block content %} + for User {{ event.event_details.updated_user_id }} ({{ event.event_details.updated_user_name }}) +
+ in Application {{ event.application_id}} ({{ event.event_details.application }}) +
+ in Portfolio {{ event.portfolio_id }} ({{ event.event_details.portfolio }}) +{% endblock %}