mirror of
https://github.com/spiral-project/ihatemoney.git
synced 2025-04-28 17:32:38 +02:00
Send an email when the project is created via the API. (#938)
This commit is contained in:
parent
1698841f6d
commit
ef3944ccad
7 changed files with 39 additions and 21 deletions
|
@ -5,6 +5,7 @@ from flask_restful import Resource, abort
|
||||||
from werkzeug.security import check_password_hash
|
from werkzeug.security import check_password_hash
|
||||||
from wtforms.fields.core import BooleanField
|
from wtforms.fields.core import BooleanField
|
||||||
|
|
||||||
|
from ihatemoney.emails import send_creation_email
|
||||||
from ihatemoney.forms import EditProjectForm, MemberForm, ProjectForm, get_billform_for
|
from ihatemoney.forms import EditProjectForm, MemberForm, ProjectForm, get_billform_for
|
||||||
from ihatemoney.models import Bill, Person, Project, db
|
from ihatemoney.models import Bill, Person, Project, db
|
||||||
|
|
||||||
|
@ -55,6 +56,7 @@ class ProjectsHandler(Resource):
|
||||||
project = form.save()
|
project = form.save()
|
||||||
db.session.add(project)
|
db.session.add(project)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
send_creation_email(project)
|
||||||
return project.id, 201
|
return project.id, 201
|
||||||
return form.errors, 400
|
return form.errors, 400
|
||||||
|
|
||||||
|
@ -75,6 +77,7 @@ class ProjectHandler(Resource):
|
||||||
if form.validate() and current_app.config.get("ALLOW_PUBLIC_PROJECT_CREATION"):
|
if form.validate() and current_app.config.get("ALLOW_PUBLIC_PROJECT_CREATION"):
|
||||||
form.update(project)
|
form.update(project)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
send_creation_email(project)
|
||||||
return "UPDATED"
|
return "UPDATED"
|
||||||
return form.errors, 400
|
return form.errors, 400
|
||||||
|
|
||||||
|
|
18
ihatemoney/emails.py
Normal file
18
ihatemoney/emails.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from flask import g
|
||||||
|
from flask_babel import gettext as _
|
||||||
|
from flask_mail import Message
|
||||||
|
|
||||||
|
from ihatemoney.utils import render_localized_template, send_email
|
||||||
|
|
||||||
|
|
||||||
|
def send_creation_email(project):
|
||||||
|
g.project = project
|
||||||
|
message_title = _(
|
||||||
|
"You have just created '%(project)s' " "to share your expenses",
|
||||||
|
project=project.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
message_body = render_localized_template("reminder_mail", project=project)
|
||||||
|
|
||||||
|
msg = Message(message_title, body=message_body, recipients=[project.contact_email])
|
||||||
|
return send_email(msg)
|
|
@ -1,9 +1,9 @@
|
||||||
Hi,
|
Hi,
|
||||||
|
|
||||||
You have just (or someone else using your email address) created the project "{{ g.project.name }}" to share your expenses.
|
You have just (or someone else using your email address) created the project "{{ project.name }}" to share your expenses.
|
||||||
|
|
||||||
You can access it here: {{ url_for(".list_bills", _external=True) }} (the identifier is {{ g.project.id }}).
|
You can access it here: {{ url_for("main.list_bills", _external=True) }} (the identifier is {{ project.id }}).
|
||||||
If you want to share this project with your friends, you can share the identifier and the shared password with them or send them invitations with the following link:
|
If you want to share this project with your friends, you can share the identifier and the shared password with them or send them invitations with the following link:
|
||||||
{{ url_for(".invite", _external=True) }}
|
{{ url_for("main.invite", _external=True) }}
|
||||||
|
|
||||||
Enjoy,
|
Enjoy,
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
Salut,
|
Salut,
|
||||||
|
|
||||||
Vous venez de créer le projet "{{ g.project.name }}" pour partager vos dépenses.
|
Vous venez de créer le projet "{{ project.name }}" pour partager vos dépenses.
|
||||||
|
|
||||||
Vous pouvez y accéder ici : {{ url_for(".list_bills", _external=True) }} (l'identifiant est {{ g.project.id }}).
|
Vous pouvez y accéder ici : {{ url_for("main.list_bills", _external=True) }} (l'identifiant est {{ project.id }}).
|
||||||
Si vous voulez partager ce projet avec vos amis, vous pouvez soit leur transmettre l'identifiant et le code d'accès, soit leur envoyer une invitation personnelle grâce au lien suivant :
|
Si vous voulez partager ce projet avec vos amis, vous pouvez soit leur transmettre l'identifiant et le code d'accès, soit leur envoyer une invitation personnelle grâce au lien suivant :
|
||||||
{{ url_for(".invite", _external=True) }}
|
{{ url_for("main.invite", _external=True) }}
|
||||||
|
|
||||||
Faites-en bon usage !
|
Faites-en bon usage !
|
||||||
|
|
|
@ -100,8 +100,14 @@ class APITestCase(IhatemoneyTestCase):
|
||||||
)
|
)
|
||||||
|
|
||||||
# create it
|
# create it
|
||||||
resp = self.api_create("raclette")
|
with self.app.mail.record_messages() as outbox:
|
||||||
self.assertTrue(201, resp.status_code)
|
|
||||||
|
resp = self.api_create("raclette")
|
||||||
|
self.assertTrue(201, resp.status_code)
|
||||||
|
|
||||||
|
# Check that email messages have been sent.
|
||||||
|
self.assertEqual(len(outbox), 1)
|
||||||
|
self.assertEqual(outbox[0].recipients, ["raclette@notmyidea.org"])
|
||||||
|
|
||||||
# create it twice should return a 400
|
# create it twice should return a 400
|
||||||
resp = self.api_create("raclette")
|
resp = self.api_create("raclette")
|
||||||
|
|
|
@ -206,7 +206,8 @@ class BudgetTestCase(IhatemoneyTestCase):
|
||||||
},
|
},
|
||||||
follow_redirects=True,
|
follow_redirects=True,
|
||||||
)
|
)
|
||||||
# an email is sent to the owner with a reminder of the password
|
|
||||||
|
# An email is sent to the owner with a reminder of the password.
|
||||||
self.assertEqual(len(outbox), 1)
|
self.assertEqual(len(outbox), 1)
|
||||||
self.assertEqual(outbox[0].recipients, ["raclette@notmyidea.org"])
|
self.assertEqual(outbox[0].recipients, ["raclette@notmyidea.org"])
|
||||||
self.assertIn(
|
self.assertIn(
|
||||||
|
|
|
@ -37,6 +37,7 @@ from werkzeug.exceptions import NotFound
|
||||||
from werkzeug.security import check_password_hash, generate_password_hash
|
from werkzeug.security import check_password_hash, generate_password_hash
|
||||||
|
|
||||||
from ihatemoney.currency_convertor import CurrencyConverter
|
from ihatemoney.currency_convertor import CurrencyConverter
|
||||||
|
from ihatemoney.emails import send_creation_email
|
||||||
from ihatemoney.forms import (
|
from ihatemoney.forms import (
|
||||||
AdminAuthenticationForm,
|
AdminAuthenticationForm,
|
||||||
AuthenticationForm,
|
AuthenticationForm,
|
||||||
|
@ -320,18 +321,7 @@ def create_project():
|
||||||
|
|
||||||
# send reminder email
|
# send reminder email
|
||||||
g.project = project
|
g.project = project
|
||||||
|
success = send_creation_email(project)
|
||||||
message_title = _(
|
|
||||||
"You have just created '%(project)s' " "to share your expenses",
|
|
||||||
project=g.project.name,
|
|
||||||
)
|
|
||||||
|
|
||||||
message_body = render_localized_template("reminder_mail")
|
|
||||||
|
|
||||||
msg = Message(
|
|
||||||
message_title, body=message_body, recipients=[project.contact_email]
|
|
||||||
)
|
|
||||||
success = send_email(msg)
|
|
||||||
if success:
|
if success:
|
||||||
flash(
|
flash(
|
||||||
_("A reminder email has just been sent to you"), category="success"
|
_("A reminder email has just been sent to you"), category="success"
|
||||||
|
|
Loading…
Reference in a new issue