1460: Этап №5: Дополнительно - доработка А-Б тестов

Добавил возможность изменить статус рассылки на "отменена" прямо со страницы "рассылки". Очень актуально для анонсов.
Отменю генерацию анонсов на деве.
remotes/origin/stage5
Alexander Burdeiny 10 years ago
parent e07f5194f4
commit d751f0179b
  1. 31
      emencia/django/newsletter/admin_urls.py
  2. 3
      emencia/django/newsletter/models.py
  3. 11
      emencia/django/newsletter/views/admin_views.py
  4. 2
      support/dev/settings.py
  5. 29
      templates/admin/newsletters/newsletter_list.html

@ -1,16 +1,33 @@
from django.conf.urls import url
from django.conf.urls import patterns
from emencia.django.newsletter.views.admin_views import ContactList, UpdateContact, MailingListView, UpdateMailingList,\
CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate, \
DeleteMailingList, ImportContacts, NewsletterHistory, NewsletterStatistics, NewsletterCloneView,ContactQueryDelete,\
NewsletterDelete, PopupStatisticsView, theme_for_filter_ajax
from django.conf.urls import patterns, url
from emencia.django.newsletter.views.admin_views import (
ContactList,
ContactQueryDelete,
CreateMailingList,
DeleteContact,
DeleteMailingList,
ExportContacts,
ImportContacts,
MailingListView,
NewsletterCloneView,
NewsletterCreate,
NewsletterDelete,
NewsletterHistory,
NewsletterListView,
NewsletterStatistics,
NewsletterUpdate,
PopupStatisticsView,
UpdateContact,
UpdateMailingList,
NewsletterCancelView,
theme_for_filter_ajax
)
urlpatterns = patterns('',
url(r'^newsletters/all/$', NewsletterListView.as_view(), name='newsletters_newsletters_list'),
url(r'^newsletters/(?P<pk>\d+)/edit/$', NewsletterUpdate.as_view(), name='newsletters_newsletters_update'),
url(r'^newsletters/(?P<pk>\d+)/delete/$', NewsletterDelete.as_view(), name='newsletters_newsletters_delete'),
url(r'^newsletters/(?P<pk>\d+)/clone/$', NewsletterCloneView.as_view(), name='newsletters_newsletters_clone'),
url(r'^newsletters/(?P<pk>\d+)/cancel/$', NewsletterCancelView.as_view(), name='newsletters_newsletters_cancel'),
url(r'^newsletters/(?P<pk>\d+)/history/', NewsletterHistory.as_view(), name='newsletters_newsletters_history'),
url(r'^newsletters/(?P<pk>\d+)/statistics/', NewsletterStatistics.as_view(), name='newsletters_newsletters_stat'),
url(r'^newsletters/(?P<pk>\d+)/test/$',

@ -413,6 +413,9 @@ class Newsletter(models.Model):
status__in=[ContactMailingStatus.SENT, ContactMailingStatus.AB_WAITING],
).count()
def can_cancel(self):
return self.status in [self.WAITING, self.SENDING]
@models.permalink
def get_absolute_url(self):
return ('newsletter_newsletter_preview', (self.slug,))

@ -354,6 +354,17 @@ class NewsletterCloneView(RedirectView):
return self.get(request, *args, **kwargs)
class NewsletterCancelView(NewsletterCloneView):
url = reverse_lazy("newsletters_newsletters_list")
def get(self, request, *args, **kwargs):
newsletter = get_object_or_404(Newsletter, id=kwargs['pk'])
if newsletter.can_cancel:
newsletter.status = Newsletter.CANCELED
newsletter.save()
return HttpResponseRedirect(self.url)
class NewsletterHistory(ListView):
model = ContactMailingStatus
template_name = 'admin/newsletters/newsletter_history.html'

@ -389,7 +389,7 @@ CRONJOBS = [
('*/5 * * * *', 'django.core.management.call_command', ['update_views_cache']),
('40 6 * * * ', 'django.core.management.call_command', ['newsletter_contacts_remove_notactivated']),
('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']),
# ('41 5 * * *', 'django.core.management.call_command', ['newsletter_create_announce']),
('12 4 * * *', 'django.core.management.call_command', ['stats_daily']),
]

@ -1,10 +1,11 @@
{% extends 'admin/base.html' %}
{% load i18n %}
{% block body %}
<div class="box span10">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Рассылки</h2>
<h2><i class="icon-arrow-down"></i>{% trans "Рассылки" %}</h2>
</div>
<div class="box-content">
@ -12,10 +13,10 @@
<thead>
<tr>
<th>Название</th>
<th>Список рассылки</th>
<th>Статус</th>
<th>Дата отправки</th>
<th>{% trans "Название" %}</th>
<th>{% trans "Список рассылки" %}</th>
<th>{% trans "Статус" %}</th>
<th>{% trans "Дата отправки" %}</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th>&nbsp;</th>
@ -31,21 +32,25 @@
<td>{{ item.mailing_list }}</td>
<td>{{ item.get_status_text }}</td>
<td>{{ item.sending_date|date:"Y-m-d H:i" }}</td>
<td><a href="{% url 'newsletters_newsletters_send_test' item.id %}">Тест</a> </td>
<td><a href="{% url 'newsletters_newsletters_clone' item.id %}">Clone</a> </td>
<td><a href="{% url 'newsletters_newsletters_update' item.id %}">Изменить</a> </td>
<td><a href="{% url 'newsletters_newsletters_send_test' item.id %}">{% trans "Тест" %}</a></td>
<td><a href="{% url 'newsletters_newsletters_clone' item.id %}">{% trans "Clone" %}</a></td>
<td>
<a href="{% url 'newsletters_newsletters_update' item.id %}">{% trans "Изменить" %}</a>
{% if item.can_cancel %}
<br><a href="{% url 'newsletters_newsletters_cancel' item.id %}">{% trans "Отменить" %}</a></td>
{% endif %}
<td><a href="{% url 'newsletters_newsletters_history' item.id %}">История</a> </td>
<td><a href="{% url 'newsletters_newsletters_stat' item.id %}">Статистика</a></td>
<td><a href="{% url 'newsletters_newsletters_history' item.id %}">{% trans "История" %}</a></td>
<td><a href="{% url 'newsletters_newsletters_stat' item.id %}">{% trans "Статистика" %}</a></td>
<td><a class="btn btn-close btn-round btn-danger" href="{% url 'newsletters_newsletters_delete' item.id %}"><i class="icon-remove"></i></a> </td>
</tr>
{% endfor %}
</tbody>
</table>
<a class="btn btn-success" href="{% url 'newsletters_newsletters_create' %}"><i class="icon-plus-sign icon-white"></i> Добавить новый список</a>
<a class="btn btn-success" href="{% url 'newsletters_newsletters_create' %}"><i class="icon-plus-sign icon-white"></i> {% trans "Добавить новый список" %}</a>
</div>
{# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=page_obj %}
</div>
{% endblock %}
{% endblock %}

Loading…
Cancel
Save