Skip to content

Commit

Permalink
[#2459] Display email state explanation, block actions in specific st…
Browse files Browse the repository at this point in the history
…ates
  • Loading branch information
pbanaszkiewicz committed Aug 5, 2023
1 parent 3658ed7 commit 8a409b2
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 8 deletions.
41 changes: 35 additions & 6 deletions amy/emails/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,41 @@ def get_absolute_url(self) -> str:


class ScheduledEmailStatus(models.TextChoices):
SCHEDULED = "scheduled"
LOCKED = "locked"
RUNNING = "running"
SUCCEEDED = "succeeded"
FAILED = "failed"
CANCELLED = "cancelled"
SCHEDULED = "scheduled" # editing, cancelling allowed
LOCKED = "locked" # nothing allowed
RUNNING = "running" # nothing allowed
SUCCEEDED = "succeeded" # editing allowed with note about re-sending
FAILED = "failed" # editing, cancelling allowed
CANCELLED = "cancelled" # allowed to re-schedule


# List of states when specific actions are allowed. This is used in per-object
# permissions to block or allow specific actions.
ScheduledEmailStatusActions = {
"edit": [
ScheduledEmailStatus.SCHEDULED,
# note: will not re-send the email or affect emails already sent)
ScheduledEmailStatus.SUCCEEDED,
ScheduledEmailStatus.FAILED,
],
"reschedule": [
ScheduledEmailStatus.SCHEDULED,
ScheduledEmailStatus.FAILED,
ScheduledEmailStatus.CANCELLED,
],
"cancel": [ScheduledEmailStatus.SCHEDULED, ScheduledEmailStatus.FAILED],
}


# Displayed in scheduled email details view.
ScheduledEmailStatusExplanation = {
ScheduledEmailStatus.SCHEDULED: "Scheduled to be sent",
ScheduledEmailStatus.LOCKED: "Locked for sending; worker is processing it",
ScheduledEmailStatus.RUNNING: "Sending in progress",
ScheduledEmailStatus.SUCCEEDED: "Sent successfully",
ScheduledEmailStatus.FAILED: "Sending failed; worker will re-try soon",
ScheduledEmailStatus.CANCELLED: "Sending cancelled",
}


class ScheduledEmail(CreatedUpdatedMixin, models.Model):
Expand Down
14 changes: 13 additions & 1 deletion amy/emails/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,14 @@
ScheduledEmailRescheduleForm,
ScheduledEmailUpdateForm,
)
from emails.models import EmailTemplate, ScheduledEmail, ScheduledEmailLog
from emails.models import (
EmailTemplate,
ScheduledEmail,
ScheduledEmailLog,
ScheduledEmailStatus,
ScheduledEmailStatusActions,
ScheduledEmailStatusExplanation,
)
from emails.signals import ALL_SIGNALS, Signal
from emails.utils import find_signal_by_name
from workshops.base_views import (
Expand Down Expand Up @@ -138,6 +145,11 @@ def get_context_data(self, **kwargs):
if signal:
context["body_context_type"] = signal.context_type
context["body_context_annotations"] = signal.context_type.__annotations__

context["status_explanation"] = ScheduledEmailStatusExplanation[
ScheduledEmailStatus(self.object.state)
]
context["ScheduledEmailStatusActions"] = ScheduledEmailStatusActions
return context


Expand Down
18 changes: 17 additions & 1 deletion amy/templates/emails/scheduled_email_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,24 @@ <h1>
{% if perms.emails.change_scheduledemail %}
<div class="edit-object">
<div class="btn-group">
{% if scheduled_email.state in ScheduledEmailStatusActions.edit %}
<a class="btn btn-primary" href="{% url 'scheduledemail_edit' scheduled_email.id %}">Edit</a>
{% else %}
<a class="btn btn-primary disabled" disabled href="#">Edit</a>
{% endif %}

{% if scheduled_email.state in ScheduledEmailStatusActions.reschedule %}
<a class="btn btn-warning" href="{% url 'scheduledemail_reschedule' scheduled_email.id %}">Reschedule</a>
{% else %}
<a class="btn btn-warning disabled" disabled href="#">Reschedule</a>
{% endif %}
</div>
<div class="float-right">
{% if scheduled_email.state in ScheduledEmailStatusActions.cancel %}
<a class="btn btn-danger" href="{% url 'scheduledemail_cancel' scheduled_email.id %}">Cancel</a>
{% else %}
<a class="btn btn-warning disabled" disabled href="#">Cancel</a>
{% endif %}
</div>
</div>
{% else %}
Expand All @@ -41,7 +54,10 @@ <h1>
</tr>
<tr>
<th>State:</th>
<td colspan="2"><strong>{{ scheduled_email.get_state_display }}</strong></td>
<td colspan="2">
<strong>{{ scheduled_email.get_state_display }}</strong>
<p>{{ status_explanation }}</p>
</td>
</tr>
<tr>
<th>Created at:</th>
Expand Down

0 comments on commit 8a409b2

Please sign in to comment.