Import contacts for mailing list

remotes/origin/1203
Ivan Kovalkovskyi 10 years ago
parent 06c480ce80
commit 70af5a29cc
  1. 22
      emencia/django/newsletter/admin_forms.py
  2. 27
      emencia/django/newsletter/forms.py
  3. 15
      emencia/django/newsletter/views/admin_views.py
  4. BIN
      static/admin/img/loader.GIF
  5. 19
      templates/admin/import templates/import_contacts.html

@ -42,11 +42,33 @@ class ContactSettingsForm(forms.ModelForm):
return City.objects.none()
import xlrd
class MailingListForm(forms.ModelForm):
excel_file = forms.FileField(label='Импортировать подписчиков', required=False)
class Meta:
model = MailingList
fields = ('name', 'description')
def save(self, commit=True):
ml = super(MailingListForm, self).save(commit=True)
data = self.cleaned_data
f = data['excel_file']
if f:
contact_list = list(Contact.objects.all())
book = xlrd.open_workbook(file_contents=f.read())
sheet = book.sheet_by_index(0)
excel_emails = [sheet.row_values(row_number)[0] for row_number in range(1, sheet.nrows)]
valid_contacts = []
for contact in contact_list:
if contact.email in excel_emails:
valid_contacts.append(contact)
ml.subscribers = valid_contacts
ml.save()
return ml
class NewsletterForm(forms.ModelForm):
test_contacts = forms.ModelMultipleChoiceField(label=u'Тестовые контакты', required=False,

@ -2,6 +2,7 @@
"""Forms for emencia.django.newsletter"""
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.http import Http404
from emencia.django.newsletter.models import Contact, ContactSettings
from emencia.django.newsletter.models import MailingList
@ -169,9 +170,25 @@ class ContactImportForm(forms.Form):
f = data['excel_file']
book = xlrd.open_workbook(file_contents=f.read())
sheet = book.sheet_by_index(0)
row_list = [sheet.row_values(row_number) for row_number in range(1,sheet.nrows)]
contact_list = []
row_list = [sheet.row_values(row_number) for row_number in range(1, sheet.nrows)]
for row in row_list:
contact_list.append(Contact(first_name=row[0], email=row[1], activated=activated, tester=is_tester))
Contact.objects.bulk_create(contact_list)
Contact.objects.filter(first_name__in=[c[0] for c in contact_list]).update(contactsettings__country=country)
c = Contact(email = row[0], first_name=row[1].split()[0], last_name=row[1].split()[-1], tester=is_tester,
activated=activated, valid=True, subscriber=True)
try:
c.save()
except:
continue
cs = ContactSettings()
cs.contact = c
cs.save()
if country:
cs.country.add(country)
cs.save()
# do not watch
# cursor = db.cursor()
# sql = u"""
# INSERT IGNORE
# INTO newsletter_contact(first_name, email, activated, tester, creation_date, last_name)
# VALUES %s;""" % u','.join([u"('%s', '%s', '%s', '%s', NOW(), '')" % (row[1], row[0], str(activated).upper(), str(is_tester).upper()) for row in row_list])
# cursor.execute(sql)

@ -59,6 +59,7 @@ class DeleteContact(DeleteView):
success_url = reverse_lazy('newsletters_contact_list')
template_name = 'admin/newsletters/confirm_delete.html'
class UpdateContact(UpdateView):
model = ContactSettings
form_class = ContactSettingsForm
@ -99,6 +100,9 @@ class UpdateMailingList(UpdateView):
template_name = 'admin/newsletters/mailing_list_object.html'
success_url = '/admin/newsletters/mailinglist/all/'
def get_success_url(self):
return self.success_url
class CreateMailingList(CreateView):
model = MailingList
@ -108,9 +112,9 @@ class CreateMailingList(CreateView):
def form_valid(self, form):
obj = form.save()
form = ContactFilterForm(self.request.GET)
if form.is_valid():
contacts, _ = form.filter()
filter_form = ContactFilterForm(self.request.GET)
if filter_form.is_valid():
contacts, _ = filter_form.filter()
obj.subscribers = contacts
obj.save()
return HttpResponseRedirect(self.success_url)
@ -220,7 +224,7 @@ class ExportContacts(FormView):
if form.is_valid():
qs, title = form.filter()
if qs.count():
columns = ('first_name', 'email')
columns = ('email', 'first_name')
return ExcelResponse(qs, title, columns,'contacts')
return HttpResponseRedirect(self.request.META['HTTP_REFERER'])
@ -232,4 +236,5 @@ class ImportContacts(FormView):
def form_valid(self, form):
form.save()
return HttpResponseRedirect(self.get_success_url())
return HttpResponseRedirect(self.get_success_url())

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

@ -39,22 +39,35 @@
</div>
<div class="controls">
<input class="btn btn-large btn-primary" type="submit" value="Импорт">
<input id="import" class="btn btn-large btn-primary" type="submit" value="Импорт">
<input class="btn btn-large" type="reset" value="Отмена">
</div>
</form>
{% endblock %}
{% block scripts %}
<link rel="stylesheet" href="{% static 'js/select/select2.css' %}">
<script src="{% static 'js/select2.min.js' %}"></script>
<script>
$(document).ready(function(){
$("#id_country").select2({width:"element", placeholder:"Страна"});
$("#import").on("click", function(event){
this.addClass('loader');
})
});
</script>
{% endblock %}
{% block styles %}
.loader {
position: fixed;
left: 0px;
top: 0px;
width: 100%;
height: 100%;
z-index: 9999;
background: url('{% static "admin/img/loader.GIF" %}') 50% 50% no-repeat rgb(249,249,249);
}
{% endblock %}
Loading…
Cancel
Save