Task #400 - Autolink user to membership if exists
When inviting an user to a project, if the user is already registered, link her directly to the membership.remotes/origin/enhancement/email-actions
parent
aa117623e8
commit
3f8af102ab
|
@ -190,6 +190,8 @@ class MembershipViewSet(ModelCrudViewSet):
|
|||
if not object.token:
|
||||
object.token = str(uuid.uuid1())
|
||||
|
||||
object.user = services.find_invited_user(object, default=object.user)
|
||||
|
||||
super().pre_save(object)
|
||||
|
||||
def post_save(self, object, created=False):
|
||||
|
|
|
@ -35,3 +35,4 @@ from .members import create_members_in_bulk
|
|||
from .members import get_members_from_bulk
|
||||
|
||||
from .invitations import send_invitation
|
||||
from .invitations import find_invited_user
|
||||
|
|
|
@ -4,5 +4,23 @@ from djmail.template_mail import MagicMailBuilder
|
|||
def send_invitation(invitation):
|
||||
"""Send an invitation email"""
|
||||
mbuilder = MagicMailBuilder()
|
||||
email = mbuilder.membership_invitation(invitation.email, {"membership": invitation})
|
||||
if invitation.user:
|
||||
template = mbuilder.membership_notification
|
||||
else:
|
||||
template = mbuilder.membership_invitation
|
||||
email = template(invitation.email, {"membership": invitation})
|
||||
email.send()
|
||||
|
||||
|
||||
def find_invited_user(invitation, default=None):
|
||||
"""Check if the invited user is already a registered.
|
||||
|
||||
:param invitation: Invitation object.
|
||||
:param default: Default object to return if user is not found.
|
||||
|
||||
:return: The user if it's found, othwerwise return `default`.
|
||||
"""
|
||||
try:
|
||||
return type(invitation).user.get_queryset().filter(email=invitation.email).all()[0]
|
||||
except IndexError:
|
||||
return default
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
{% extends "emails/base.jinja" %}
|
||||
|
||||
{% block body %}
|
||||
<table border="0" width="100%" cellpadding="0" cellspacing="0" class="table-body">
|
||||
<tr>
|
||||
<td>
|
||||
<p>Hi,</p>
|
||||
<p>you have been added to the project '{{ membership.project }}'.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{% endblock %}
|
|
@ -0,0 +1,3 @@
|
|||
Hi,
|
||||
|
||||
you have been added to the project '{{ membership.project }}'.
|
|
@ -0,0 +1 @@
|
|||
[Taiga] Added to the project '{{ membership.project|safe }}'
|
|
@ -63,3 +63,22 @@ def test_api_resend_invitation(client, outbox):
|
|||
assert response.status_code == 204
|
||||
assert len(outbox) == 1
|
||||
assert outbox[0].to == [invitation.email]
|
||||
|
||||
|
||||
def test_api_invite_existing_user(client, outbox):
|
||||
"Should create the invitation linked to that user"
|
||||
user = f.UserFactory.create()
|
||||
role = f.RoleFactory.create()
|
||||
url = reverse("memberships-list")
|
||||
data = {"role": role.pk, "project": role.project.pk, "email": user.email}
|
||||
|
||||
response = client.json.post(url, data)
|
||||
|
||||
assert response.status_code == 201, response.data
|
||||
assert len(outbox) == 1
|
||||
assert user.memberships.count() == 1
|
||||
|
||||
message = outbox[0]
|
||||
|
||||
assert message.to == [user.email]
|
||||
assert "Added to the project" in message.subject
|
||||
|
|
Loading…
Reference in New Issue