diff --git a/emencia/django/newsletter/admin_forms.py b/emencia/django/newsletter/admin_forms.py index a15c1667..703b6730 100644 --- a/emencia/django/newsletter/admin_forms.py +++ b/emencia/django/newsletter/admin_forms.py @@ -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, diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index 6b179779..83243ef5 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -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) \ No newline at end of file diff --git a/emencia/django/newsletter/views/admin_views.py b/emencia/django/newsletter/views/admin_views.py index acec8ba3..9990820d 100644 --- a/emencia/django/newsletter/views/admin_views.py +++ b/emencia/django/newsletter/views/admin_views.py @@ -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()) \ No newline at end of file + return HttpResponseRedirect(self.get_success_url()) + diff --git a/static/admin/img/loader.GIF b/static/admin/img/loader.GIF new file mode 100644 index 00000000..9c7b179f Binary files /dev/null and b/static/admin/img/loader.GIF differ diff --git a/templates/admin/import templates/import_contacts.html b/templates/admin/import templates/import_contacts.html index c652785a..62819a43 100644 --- a/templates/admin/import templates/import_contacts.html +++ b/templates/admin/import templates/import_contacts.html @@ -39,22 +39,35 @@