diff --git a/emencia/django/newsletter/admin_urls.py b/emencia/django/newsletter/admin_urls.py index 7a1b0aa9..eeaa6f2b 100644 --- a/emencia/django/newsletter/admin_urls.py +++ b/emencia/django/newsletter/admin_urls.py @@ -1,7 +1,8 @@ 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 + CreateMailingList, NewsletterListView, NewsletterCreate, ExportContacts, DeleteContact, NewsletterUpdate, \ + DeleteMailingList, ImportContacts urlpatterns = patterns('', @@ -22,4 +23,5 @@ urlpatterns = patterns('', url(r'^contact/(?P\d+)/delete/', DeleteContact.as_view(), name='newsletters_contact_delete'), url(r'^contact/all/$', ContactList.as_view(), name='newsletters_contact_list'), url(r'^contact/export/$', ExportContacts.as_view(), name='export_contacts'), + url(r'^contact/import/$', ImportContacts.as_view(), name='import_newsletters_contacts'), ) \ No newline at end of file diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index 610fdd70..6b179779 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -145,3 +145,33 @@ class ContactFilterForm(forms.Form): qs = qs.filter(valid=True) return qs, title + + +import xlrd +COUNTRY_CHOICES = [(c.id, c.name) for c in list(set(Country.objects.language('ru').all()))] +COUNTRY_CHOICES.insert(0, ('', 'Страна')) + + +class ContactImportForm(forms.Form): + excel_file = forms.FileField(label='Выберите файл') + activated = forms.BooleanField(label="Активные", required=False) + is_tester = forms.BooleanField(label="Тестовые", required=False) + country = forms.ChoiceField(label="Страна", choices=COUNTRY_CHOICES, required=False) + + def save(self): + data = self.cleaned_data + country_id = self.cleaned_data.get('country') + country = None + if country_id: + country = Country.objects.get(id=country_id) + activated = data['activated'] + is_tester = data['is_tester'] + 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 = [] + 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) diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index b29828d4..acec8ba3 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -10,7 +10,7 @@ from HTMLParser import HTMLParseError from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm, AttachmentForm from emencia.django.newsletter.mailer import Mailer -from ..forms import ContactFilterForm +from ..forms import ContactFilterForm, ContactImportForm from ..utils.excel import ExcelResponse from functions.admin_views import paginate_results @@ -223,3 +223,13 @@ class ExportContacts(FormView): columns = ('first_name', 'email') return ExcelResponse(qs, title, columns,'contacts') return HttpResponseRedirect(self.request.META['HTTP_REFERER']) + + +class ImportContacts(FormView): + form_class = ContactImportForm + success_url = reverse_lazy("newsletters_contact_list") + template_name = 'admin/import templates/import_contacts.html' + + def form_valid(self, form): + form.save() + return HttpResponseRedirect(self.get_success_url()) \ No newline at end of file diff --git a/import_xls/admin.py b/import_xls/admin.py index 0ceee351..e1cff126 100644 --- a/import_xls/admin.py +++ b/import_xls/admin.py @@ -41,7 +41,6 @@ class ImportView(FormView): return render_to_response(self.template_name, context) - class ExportView(FormView): """ abstract class diff --git a/import_xls/import_forms.py b/import_xls/import_forms.py index 8554605c..e6172900 100644 --- a/import_xls/import_forms.py +++ b/import_xls/import_forms.py @@ -21,6 +21,7 @@ class ImportForm(forms.Form): model = None excel_file = forms.FileField(label='Выберите файл') language = forms.ChoiceField(label='Выберите язык', choices=languages) + def save_file(self): data = self.cleaned_data lang = data['language'] @@ -31,13 +32,12 @@ class ImportForm(forms.Form): # all field names in excel file (must be in second row) field_names = [name for name in row_list[1]] - for row_number, row in enumerate(row_list): - # go through all rows in file + # go through all rows in file if row_number > 1: - # first two fields are verbose name and name + # first two fields are verbose name and name if row[0] != '': - # in first column ids + # in first column ids try: object = self.model.objects.language(lang).get(id=int(row[0])) diff --git a/templates/admin/import templates/import_contacts.html b/templates/admin/import templates/import_contacts.html new file mode 100644 index 00000000..c652785a --- /dev/null +++ b/templates/admin/import templates/import_contacts.html @@ -0,0 +1,60 @@ +{% extends 'admin/base.html' %} +{% load static %} + + +{% block body %} +
{% csrf_token %} + + {# excel_file #} +
+ +
+ {{ form.excel_file }} + {{ form.excel_file.errors }} +
+
+ {# country #} +
+ +
+ {{ form.country }} + {{ form.country.errors }} +
+
+ {# activated #} +
+ +
+ {{ form.activated }} + {{ form.activated.errors }} +
+
+ {# is_tester #} +
+ +
+ {{ form.is_tester }} + {{ form.is_tester.errors }} +
+
+ +
+ + +
+ +
+ + + +{% endblock %} +{% block scripts %} + + + + +{% endblock %} diff --git a/templates/admin/newsletters/contact_list.html b/templates/admin/newsletters/contact_list.html index a0f2ee40..155360b4 100644 --- a/templates/admin/newsletters/contact_list.html +++ b/templates/admin/newsletters/contact_list.html @@ -4,7 +4,7 @@
-

Список контактов

+

Список контактов Импорт