import contacts

remotes/origin/1203
Ivan Kovalkovskyi 10 years ago
parent f668a6eaea
commit 06c480ce80
  1. 4
      emencia/django/newsletter/admin_urls.py
  2. 30
      emencia/django/newsletter/forms.py
  3. 12
      emencia/django/newsletter/views/admin_views.py
  4. 1
      import_xls/admin.py
  5. 8
      import_xls/import_forms.py
  6. 60
      templates/admin/import templates/import_contacts.html
  7. 2
      templates/admin/newsletters/contact_list.html

@ -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<pk>\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'),
)

@ -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)

@ -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())

@ -41,7 +41,6 @@ class ImportView(FormView):
return render_to_response(self.template_name, context)
class ExportView(FormView):
"""
abstract class

@ -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]))

@ -0,0 +1,60 @@
{% extends 'admin/base.html' %}
{% load static %}
{% block body %}
<form method="post" class="form-horizontal" enctype="multipart/form-data"> {% csrf_token %}
{# excel_file #}
<div class="control-group {% if form.excel_file.errors %}error{% endif %}">
<label class="control-label">{{ form.excel_file.label }}:</label>
<div class="controls">
{{ form.excel_file }}
<span class="help-inline">{{ form.excel_file.errors }}</span>
</div>
</div>
{# country #}
<div class="control-group {% if form.country.errors %}error{% endif %}">
<label class="control-label">{{ form.country.label }}:</label>
<div class="controls">
{{ form.country }}
<span class="help-inline">{{ form.country.errors }}</span>
</div>
</div>
{# activated #}
<div class="control-group {% if form.activated.errors %}error{% endif %}">
<label class="control-label">{{ form.activated.label }}:</label>
<div class="controls">
{{ form.activated }}
<span class="help-inline">{{ form.activated.errors }}</span>
</div>
</div>
{# is_tester #}
<div class="control-group {% if form.is_tester.errors %}error{% endif %}">
<label class="control-label">{{ form.is_tester.label }}:</label>
<div class="controls">
{{ form.is_tester }}
<span class="help-inline">{{ form.is_tester.errors }}</span>
</div>
</div>
<div class="controls">
<input 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:"Страна"});
});
</script>
{% endblock %}

@ -4,7 +4,7 @@
<div class="box span10">
<div class="box-header well">
<h2><i class="icon-arrow-down"></i>Список контактов</h2>
<h2><i class="icon-arrow-down"></i>Список контактов <a class="btn" href="{% url 'import_newsletters_contacts' %}">Импорт</a></h2>
</div>
<div class="box-content">
<form class="form-horizontal" method="get">

Loading…
Cancel
Save