remotes/origin/1203
Nazar Kotjuk 10 years ago
parent adf41b6e2b
commit 81a006ed6c
  1. 32
      emencia/django/newsletter/forms.py
  2. 4
      emencia/django/newsletter/models.py
  3. 24
      emencia/django/newsletter/views/admin_views.py
  4. 21
      static/custom_js/main.js
  5. 14
      templates/admin/newsletters/popup_count.html

@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
"""Forms for emencia.django.newsletter"""
from datetime import datetime, date, timedelta
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.http import Http404
@ -8,8 +9,7 @@ from django.core.exceptions import ValidationError
from django.utils import translation
from haystack.query import SearchQuerySet
from functions.search_forms import get_by_lang
from emencia.django.newsletter.models import Contact, ContactSettings
from emencia.django.newsletter.models import MailingList
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, PopupCount
from functions.form_check import translit_with_separator as tr
from theme.models import Theme
from country.models import Country, Area
@ -19,7 +19,7 @@ from city.models import City
class MailingListSubscriptionForm(forms.ModelForm):
"""Form for subscribing to a mailing list"""
# Notes : This form will not check the uniquess of
# the 'email' field, by defining it explictly and setting
# the 'email' field, by defining it explictly and setting6
# it the Meta.exclude list, for allowing registration
# to a mailing list even if the contact already exists.
# Then the contact is always added to the subscribers field
@ -94,7 +94,7 @@ class ContactSettingsForm(forms.ModelForm):
return Theme.objects.none()
from datetime import datetime
class ContactFilterForm(forms.Form):
email = forms.EmailField(
@ -335,3 +335,27 @@ class SubscribeSettingsForm(AbstractSubscribeForm):
def clean_email(self):
return self.cleaned_data['email']
from django.db.models import Sum
class PopupCountFilter(forms.Form):
fr = forms.DateField(required=False)
to = forms.DateField(required=False)
def filter(self):
fr = self.cleaned_data.get('fr')
to = self.cleaned_data.get('to')
if not fr and not to:
fr = date.today()
qs = PopupCount.objects.filter(date__gte=fr)
contacts = Contact.objects.filter(creation_date__gte=fr)
if to:
contacts = contacts.filter(creation_date__lte=to+timedelta(days=1))
qs = qs.filter(date__lte=to)
subscribed = contacts.count()
activated = contacts.filter(activated=True).count()
popups = qs.aggregate(count=Sum('cnt'))['count']
return {'subscribed': subscribed, 'activated': activated, 'popups': popups}

@ -564,9 +564,9 @@ class PopupCount(models.Model):
ordering = ['-date']
def get_subscr(self):
qs = Contact.objects.filter(creation_date=self.date)
qs = Contact.objects.filter(creation_date__startswith=self.date)
return qs.count()
def get_active(self):
qs = Contact.objects.filter(creation_date=self.date, activated=True)
qs = Contact.objects.filter(creation_date__startswith=self.date, activated=True)
return qs.count()

@ -11,6 +11,7 @@ from HTMLParser import HTMLParseError
from emencia.django.newsletter.models import Contact, ContactSettings, MailingList, Newsletter, Attachment, ContactMailingStatus
from emencia.django.newsletter.admin_forms import ContactSettingsForm, MailingListForm, NewsletterForm, AttachmentForm
from emencia.django.newsletter.mailer import Mailer
from emencia.django.newsletter.forms import PopupCountFilter
from ..forms import ContactFilterForm, ContactImportForm
from ..utils.excel import ExcelResponse
from functions.admin_views import paginate_results
@ -347,9 +348,29 @@ def count_popups(request):
obj.save()
return HttpResponse(obj.cnt, content_type='application/json')
from django.db.models import Sum
class PopupStatisticsView(FormView):
form_class = PopupCountFilter
template_name = 'admin/newsletters/popup_count.html'
def get(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = form_class(request.GET)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
data = form.filter()
data['form'] = form
return self.render_to_response(data)
"""
class PopupStatisticsView(TemplateView):
model = PopupCount
template_name = 'admin/newsletters/popup_count.html'
@ -369,3 +390,4 @@ class PopupStatisticsView(TemplateView):
res = {'cnt':0, 'subscr':0, 'active':0}
return self.render_to_response({'object':res})
"""

@ -236,11 +236,7 @@ $(document).ready(function(){
return false;
});
// end on-of events
if( $("#id_city" ).length ) {
$('#id_city').select2({
placeholder: "Город",
width: 'element',
@ -276,7 +272,9 @@ $(document).ready(function(){
}
});
}
if( $("#id_main_page_news" ).length ) {
$('#id_main_page_news').select2({
placeholder: "Новости",
multiple: true,
@ -324,7 +322,9 @@ $(document).ready(function(){
});
// selects
}
if( $("#id_main_page_news" ).length ) {
$('#id_tag').select2({
placeholder: "Теги",
width: '550px',
@ -368,6 +368,9 @@ $(document).ready(function(){
}
});
}
// end selects
/*
*/
@ -486,12 +489,14 @@ $(document).ready(function(){
}
});
});
if($('select').length){
$('select').select2({
width: 'element',
allowClear: true
});//end select
});
}
});

@ -17,8 +17,8 @@
<div class="box-content">
<form id="id_form" class="form-inline">
<div class="control-group">
<label for="from">С: </label><input type="text" name="from" class="filter-date margin-sides-15px">
<label for="to">По: </label><input type="text" name="to" class="filter-date margin-sides-15px">
<label for="from">С: </label><!--<input type="text" name="fr" class="filter-date margin-sides-15px"> -->{{ form.fr }}
<label for="to">По: </label>{{ form.to }}
<button id="submit" class="btn btn-primary margin-sides-15px">Фильтровать</button>
</div>
</form>
@ -32,15 +32,15 @@
<tbody>
<tr>
<td>Показов</td>
<td>{{ object.cnt }}</td>
<td>{{ popups }}</td>
</tr>
<tr>
<td>Подписалось</td>
<td>{{ object.subscr }}</td>
<td>{{ subscribed }}</td>
</tr>
<tr>
<td>Подтверждено</td>
<td>{{ object.active }}</td>
<td>{{ activated }}</td>
</tr>
</tbody>
@ -52,9 +52,9 @@
</div>
<script>
$(document).ready(function(){
$(".filter-date").datetimepicker({
$("#id_fr, #id_to").datetimepicker({
todayHighlight: true,
format: 'dd.mm.yyyy',
format: 'yyyy-mm-dd',
minView: 2
});
});

Loading…
Cancel
Save