Skip to content

Commit 24c4b18

Browse files
committed
Send automatic notification for CFP
1 parent 0e8f032 commit 24c4b18

7 files changed

Lines changed: 102 additions & 41 deletions

File tree

apps/events/forms.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ def __init__(self, event, *args, **kwargs):
5757
"id": "cfp-title",
5858
"cols": "60",
5959
"rows": "20",
60+
"placeholder": ("El texto de tu maravillosa charla. "
61+
"¿Aceptamos markdown? ¡Por supuesto!"),
6062
"class": "textarea",
6163
}
6264
)

apps/events/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ class Proposal(models.Model):
538538
title = models.CharField(max_length=340, verbose_name="Título")
539539
description = models.TextField(
540540
verbose_name="Descripción",
541-
help_text="Cuéntamos en dos o tres párrafos tu propuesta de charla.",
541+
help_text=("Cuéntamos en dos o tres párrafos tu propuesta de charla.")
542542
)
543543
presented_at = models.DateTimeField(auto_now=True)
544544

apps/events/tasks.py

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,32 +14,32 @@
1414

1515
def create_ticket_message(ticket):
1616
event = ticket.article.event
17-
tmpl = loader.get_template('events/email/ticket_message.md')
18-
subject = 'Entrada para {}'.format(event.name)
17+
tmpl = loader.get_template("events/email/ticket_message.md")
18+
subject = "Entrada para {}".format(event.name)
1919
body = tmpl.render(
2020
{
21-
'ticket': ticket,
22-
'article': ticket.article,
23-
'category': ticket.article.category,
24-
'event': event,
21+
"ticket": ticket,
22+
"article": ticket.article,
23+
"category": ticket.article.category,
24+
"event": event,
2525
}
2626
)
2727
organization = Organization.load_main_organization()
2828
mail = Mail(
2929
from_email=Email(organization.email, organization.name),
3030
subject=subject,
3131
to_email=Email(ticket.customer_email),
32-
content=Content('text/html', as_markdown(body)),
32+
content=Content("text/html", as_markdown(body)),
3333
)
3434

3535
attachment = Attachment()
3636
pdf_filename = ticket.as_pdf()
37-
with open(pdf_filename, 'rb') as f:
37+
with open(pdf_filename, "rb") as f:
3838
data = f.read()
3939
attachment.content = base64.b64encode(data).decode()
40-
attachment.type = 'application/pdf'
41-
attachment.filename = 'ticket.pdf'
42-
attachment.disposition = 'attachment'
40+
attachment.type = "application/pdf"
41+
attachment.filename = "ticket.pdf"
42+
attachment.disposition = "attachment"
4343
mail.add_attachment(attachment)
4444
return mail
4545

@@ -52,9 +52,9 @@ def send_ticket(ticket, force=False):
5252
response = sg.client.mail.send.post(request_body=msg.get())
5353
if response.status_code >= 400:
5454
error_msg = []
55-
error_msg.append('STATUS CODE: {}'.format(response.status_code))
56-
error_msg.append('RESPONSE HEADERS: {}'.format(response.headers))
57-
error_msg.append('RESPONSE BODY: {}'.format(response.body))
55+
error_msg.append("STATUS CODE: {}".format(response.status_code))
56+
error_msg.append("RESPONSE HEADERS: {}".format(response.headers))
57+
error_msg.append("RESPONSE BODY: {}".format(response.body))
5858
raise Exception(os.linesep.join(error_msg))
5959
ticket.send_at = timezone.now()
6060
ticket.save()
@@ -65,20 +65,20 @@ def send_ticket(ticket, force=False):
6565

6666
def create_proposal_acknowledge(proposal):
6767
event = proposal.event
68-
tmpl = loader.get_template('events/email/proposal_acknowledge.md')
69-
subject = 'Acuse de recibo de su propuesta para {}'.format(event.name)
68+
tmpl = loader.get_template("events/email/proposal_acknowledge.md")
69+
subject = "Acuse de recibo de su propuesta para {}".format(event.name)
7070
body = tmpl.render(
7171
{
72-
'event': event,
73-
'proposal': proposal,
72+
"event": event,
73+
"proposal": proposal,
7474
}
7575
)
7676
organization = Organization.load_main_organization()
7777
mail = Mail(
7878
from_email=Email(organization.email, organization.name),
7979
subject=subject,
8080
to_email=Email(proposal.email),
81-
content=Content('text/html', as_markdown(body)),
81+
content=Content("text/html", as_markdown(body)),
8282
)
8383
return mail
8484

@@ -90,10 +90,44 @@ def send_proposal_acknowledge(proposal):
9090
response = sg.client.mail.send.post(request_body=msg.get())
9191
if response.status_code >= 400:
9292
error_msg = []
93-
error_msg.append('STATUS CODE: {}'.format(response.status_code))
94-
error_msg.append('RESPONSE HEADERS: {}'.format(response.headers))
95-
error_msg.append('RESPONSE BODY: {}'.format(response.body))
93+
error_msg.append("STATUS CODE: {}".format(response.status_code))
94+
error_msg.append("RESPONSE HEADERS: {}".format(response.headers))
95+
error_msg.append("RESPONSE BODY: {}".format(response.body))
9696
raise Exception(os.linesep.join(error_msg))
9797
# ticket.send_at = timezone.now()
9898
# ticket.save()
9999

100+
101+
def create_proposal_notification(proposal):
102+
event = proposal.event
103+
tmpl = loader.get_template("events/email/proposal_notification.md")
104+
subject = "Nueva propuesta para {}".format(event.name)
105+
body = tmpl.render(
106+
{
107+
"event": event,
108+
"proposal": proposal,
109+
}
110+
)
111+
organization = Organization.load_main_organization()
112+
mail = Mail(
113+
from_email=Email(organization.email, organization.name),
114+
subject=subject,
115+
to_email=Email(organization.email),
116+
content=Content("text/html", as_markdown(body)),
117+
)
118+
return mail
119+
120+
121+
@job
122+
def send_proposal_notification(proposal):
123+
msg = create_proposal_notification(proposal)
124+
sg = sendgrid.SendGridAPIClient(apikey=settings.SENDGRID_API_KEY)
125+
response = sg.client.mail.send.post(request_body=msg.get())
126+
if response.status_code >= 400:
127+
error_msg = []
128+
error_msg.append("STATUS CODE: {}".format(response.status_code))
129+
error_msg.append("RESPONSE HEADERS: {}".format(response.headers))
130+
error_msg.append("RESPONSE BODY: {}".format(response.body))
131+
raise Exception(os.linesep.join(error_msg))
132+
# ticket.send_at = timezone.now()
133+
# ticket.save()

apps/events/templates/events/cfp-thanks.html

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,18 @@
66

77
{% block content %}
88

9-
<div class="content">
10-
<h1>Call for papers</h1>
11-
<h2>
12-
{{ event.name }}
13-
</h2>
14-
<p><strong>Gracias por enviar tu propuesta de charla.</strong></p>
9+
<div class="container content-page">
10+
<div class="content box">
11+
<h1>Call for papers <i class="fas fa-inbox"></i></h1>
12+
<h2>
13+
<a href="{% url 'events:detail_event' slug=event.slug %}">{{ event.name }}</a>
14+
</h2>
15+
{{ event.short_description|as_markdown }}
1516

16-
<p>Recuerda que toda la información relativa al evento la podrás encontrar <a href="{% url 'events:detail_event' slug=event.slug %}">en este enlace</a>.</p>
17+
<p><strong>Gracias por enviar tu propuesta de charla.</strong></p>
18+
19+
<p>En breve recibirás un correo electrónico confirmando la entrega de tu propuesta. Si no lo tuvieras, revisa primero en la bandeja de correo no deseado, y en otro caso, ponte en contacto con la organización.</p>
20+
</div>
1721
</div>
1822

19-
{% endblock content %}
23+
{% endblock %}

apps/events/templates/events/email/proposal_acknowledge.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1-
Hola, {{ proposal.name }}, este correo es un acuse de recibo de
2-
propuesta de charla para el evento {{ evento }}. ¡Muchas gracias
3-
por tu interes!
1+
Hola {{ proposal.name }},
2+
3+
Este correo es un acuse de recibo automático de
4+
tu propuesta de charla para el evento {{ event }}. ¡Muchas gracias
5+
por el interés!
6+
7+
Nos pondremos en contacto contigo, usando este mismo correo
8+
electrónico, para comunicarte tanto si la charla está incluida
9+
en el evento como si no.
410

511
Estos son los datos de tu charla:
612

7-
Titulo: {{ proposal.title }}
13+
---
814

9-
> {{ proposal.description }}
15+
**{{ proposal.title }}**
16+
17+
{{ proposal.description }}
18+
19+
---
1020

11-
Nos pondremos en contacto contigo, usando este mismo correo
12-
eléctronico, para comunicarte tanto si la charla está incluida
13-
en el evento como si no.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Se ha recibido una propuesta para el evento {{ event }} por parte de **{{ proposal.name }} {{ proposal.surname }}**.
2+
3+
Estos son los datos de la charla:
4+
5+
---
6+
7+
**{{ proposal.title }}**
8+
9+
{{ proposal.description }}
10+
11+
---
12+

apps/events/views.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from . import forms, links, stripe_utils
1414
from .models import Event, Refund, WaitingList
15-
from .tasks import send_ticket
15+
from .tasks import send_ticket, send_proposal_acknowledge, send_proposal_notification
1616
from .forms import ProposalForm
1717

1818
logger = logging.getLogger(__name__)
@@ -60,7 +60,9 @@ def call_for_papers(request, event):
6060
if request.method == "POST":
6161
form = ProposalForm(event, request.POST)
6262
if form.is_valid():
63-
form.save()
63+
proposal = form.save()
64+
send_proposal_acknowledge.delay(proposal)
65+
send_proposal_notification.delay(proposal)
6466
return redirect(reverse("events:thanks", kwargs={"event": event}))
6567
else:
6668
if request.user.is_authenticated:

0 commit comments

Comments
 (0)