merged with remote

remotes/origin/1203
Ivan Kovalkovskyi 10 years ago
commit 3556211279
  1. 12
      emencia/django/newsletter/admin_forms.py
  2. 6
      emencia/django/newsletter/admin_urls.py
  3. 7
      emencia/django/newsletter/models.py
  4. 79
      emencia/django/newsletter/views/admin_views.py
  5. 1
      static/custom_js/formset_add.js
  6. 40
      templates/admin/newsletters/newsletter_list.html
  7. 22
      templates/admin/newsletters/newsletter_object.html

@ -2,7 +2,7 @@
from django import forms
from django.utils.translation import ugettext_lazy as _
from ckeditor.widgets import CKEditorWidget
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment
from city.models import City
from country.models import Country, Area
@ -55,4 +55,12 @@ class NewsletterForm(forms.ModelForm):
class Meta:
model = Newsletter
fields = ('title', 'content', 'mailing_list', 'test_contacts', 'header_sender',
'header_reply', 'status', 'sending_date', 'slug')
'header_reply', 'status', 'sending_date', 'slug')
def clean_test_contacts(self):
return []
class AttachmentForm(forms.ModelForm):
class Meta:
model = Attachment
fields = ('title', 'file_attachment')

@ -3,12 +3,12 @@ from django.conf.urls import include
from django.conf.urls import patterns
from django.http import HttpResponse
from emencia.django.newsletter.views.admin_views import ContactList, UpdateContact, MailingListView, UpdateMailingList,\
CreateMailingList, NewsletterCreate, ExportContacts, DeleteContact
CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate
urlpatterns = patterns('',
url(r'^newsletters/all/$', MailingListView.as_view(), name='newsletters_mailinglist'),
url(r'^newsletters/(?P<pk>\d+)/edit/', UpdateMailingList.as_view(), name='newsletters_mailinglist_update'),
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/', NewsletterCreate.as_view(), name='newsletters_newsletters_create'),
url(r'^mailinglist/all/$', MailingListView.as_view(), name='newsletters_mailinglist'),

@ -307,6 +307,13 @@ class Newsletter(models.Model):
def get_statistics_url(self):
return ('newsletter_newsletter_statistics', (self.slug,))
def get_status_text(self):
for item in self.STATUS_CHOICES:
if self.status == item[0]:
return unicode(item[1])
return 'bug'
def __unicode__(self):
return self.title

@ -1,8 +1,13 @@
# -*- coding: utf-8 -*-
from django.views.generic import TemplateView, CreateView, ListView, UpdateView, DeleteView, FormView
from django.conf import settings
from django.http import HttpResponseRedirect
from django.forms.formsets import BaseFormSet, formset_factory
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import get_object_or_404
from django.core.urlresolvers import reverse
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment
from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm, AttachmentForm
from django.core.urlresolvers import reverse_lazy
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter
from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm
@ -97,6 +102,8 @@ class CreateMailingList(CreateView):
template_name = 'admin/newsletters/mailing_list_object.html'
success_url = '/admin/newsletters/mailinglist/all/'
from django.forms.models import modelformset_factory
class NewsletterCreate(CreateView):
model = Newsletter
@ -104,6 +111,76 @@ class NewsletterCreate(CreateView):
template_name = 'admin/newsletters/newsletter_object.html'
success_url = '/admin/newsletters/newsletters/all/'
def get_formset(self):
#if self.request.POST:
# AttachmentFormSet = formset_factory(Attachment)
#else:
AttachmentFormSet = formset_factory(AttachmentForm)
if self.request.POST:
return AttachmentFormSet(self.request.POST, self.request.FILES)
else:
return AttachmentFormSet()
def get_context_data(self, **kwargs):
context = super(NewsletterCreate, self).get_context_data(**kwargs)
context['attachment_formset'] = self.get_formset()
return context
def form_valid(self, form):
self.object = form.save()
formset = self.get_formset()
if formset.is_valid():
for item in formset.forms:
if item.is_valid() and item.has_changed():
instance = item.save(commit=False)
instance.newsletter = self.object
instance.save()
return HttpResponseRedirect(self.success_url)
class NewsletterUpdate(UpdateView):
model = Newsletter
form_class = NewsletterForm
template_name = 'admin/newsletters/newsletter_object.html'
success_url = '/admin/newsletters/newsletters/all/'
def get_formset(self):
if self.request.POST:
AttachmentFormSet = modelformset_factory(Attachment, form=AttachmentForm, exclude=('newsletter',))
else:
AttachmentFormSet = modelformset_factory(Attachment, form=AttachmentForm, exclude=('newsletter',))
if self.request.POST:
return AttachmentFormSet(self.request.POST, self.request.FILES, queryset=self.object.attachment_set.all())
else:
return AttachmentFormSet(queryset=self.object.attachment_set.all())
def get_context_data(self, **kwargs):
context = super(NewsletterUpdate, self).get_context_data(**kwargs)
context['attachment_formset'] = self.get_formset()
return context
def form_valid(self, form):
self.object = form.save()
formset = self.get_formset()
if formset.is_valid():
for item in formset.forms:
if item.is_valid() and item.has_changed():
instance = item.save(commit=False)
instance.newsletter = self.object
instance.save()
return HttpResponseRedirect(self.success_url)
class NewsletterListView(ListView):
paginate_by = settings.ADMIN_PAGINATION
model = Newsletter
template_name = 'admin/newsletters/newsletter_list.html' success_url = '/admin/newsletters/newsletters/all/'
from ..utils.excel import ExcelResponse
@ -118,4 +195,4 @@ class ExportContacts(FormView):
if qs.count():
columns = ('first_name', 'email')
return ExcelResponse(qs, title, columns,'contacts')
return HttpResponseRedirect(self.request.META['HTTP_REFERER'])
return HttpResponseRedirect(self.request.META['HTTP_REFERER'])

@ -1,5 +1,6 @@
function addForm(btn, prefix) {
var formCount = parseInt($('#id_' + prefix + '-TOTAL_FORMS').val());
console.log(formCount)
// You can only submit a maximum of 10 todo items
if (formCount < 30) {
// Clone a form (without event handlers) from the first form

@ -0,0 +1,40 @@
{% extends 'admin/base.html' %}
{% block body %}
<div class="box span10">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Рассылки</h2>
</div>
<div class="box-content">
<table class="table table-hover">
<thead>
<tr>
<th>Название</th>
<th>Список рассылки</th>
<th>Статус</th>
<th>Дата отправки</th>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
{% for item in object_list %}
<tr>
<td>{{ item.title }}</td>
<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_update' item.id %}">Изменить</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>
</div>
{# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div>
{% endblock %}

@ -2,6 +2,7 @@
{% load static %}
{% block scripts %}
<script src="{% static 'custom_js/formset_add.js' %}"></script>
<script src="{% static 'ckeditor/ckeditor/ckeditor.js' %}"></script>
<link href="{% static 'js/select/select2.css' %}" rel="stylesheet"/>
<script src="{% static 'js/select/select2.js' %}"></script>
@ -11,6 +12,7 @@
$('select').select2({width: "element"});
//$('#id_country').select2({width: "element"});
})
</script>
{% endblock %}
@ -42,6 +44,26 @@
<h2><i class="icon-pencil"></i>Прикрепить файлы</h2>
</div>
<div class="box-content">
{{ attachment_formset.management_form }}
<table class="table table-hover" style=" width: 100%;">
<thead>
<th>тайтл</th>
<th>файл</th>
<th>&nbsp;</th>
</thead>
<tbody>
{% for attachment_form in attachment_formset.forms %}
<tr class="item">
<td>{{ attachment_form.id }}{{ attachment_form.title }}</td>
<td>{{ attachment_form.file_attachment }}</td>
<td><a class="delete btn btn-danger" href="#"><i class="icon-trash icon-white"></i> Удалить</a></td>
</tr>
{% endfor %}
</tbody>
</table>
<p style=" padding-left: 20px"><a id="add" class="btn btn-success" href="#"><i class="icon-plus-sign icon-white"></i> Добавить файл</a></p>
</div>
</div>

Loading…
Cancel
Save