expobanner: ordering by date(active), column 'at all'

remotes/origin/1203
Ivan Kovalkovskyi 11 years ago
parent 72014cdf02
commit 42034b8d9c
  1. 39
      expobanner/admin.py
  2. 2
      expobanner/forms.py
  3. 9
      expobanner/models.py
  4. 16
      exposition/models.py
  5. 21
      templates/admin/expobanner/main_list.html
  6. 10
      templates/admin/expobanner/main_stat.html
  7. 19
      templates/admin/expobanner/paid_list.html
  8. 7
      templates/admin/expobanner/paid_stat.html
  9. 15
      templates/admin/expobanner/top_list.html

@ -3,6 +3,7 @@ from django.views.generic import TemplateView, CreateView, ListView, UpdateView,
from django.conf import settings from django.conf import settings
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.db.models import Sum
from expobanner.models import URL, BannerGroup, Banner, Paid, MainPage, Top from expobanner.models import URL, BannerGroup, Banner, Paid, MainPage, Top
from expobanner.forms import UrlCreateForm, BannerCreateGroupForm, BannerCreateForm, BannerGroupUpdateForm,\ from expobanner.forms import UrlCreateForm, BannerCreateGroupForm, BannerCreateForm, BannerGroupUpdateForm,\
PaidCreateForm, PaidUpdateForm, TopCreateForm, BannerLinkCreateForm, MainCreateForm, MainUpdateForm, TopUpdateForm PaidCreateForm, PaidUpdateForm, TopCreateForm, BannerLinkCreateForm, MainCreateForm, MainUpdateForm, TopUpdateForm
@ -32,6 +33,7 @@ class CreateBanner(AbstractCreate):
model = Banner model = Banner
form_class = BannerCreateForm form_class = BannerCreateForm
class CreateLink(AbstractCreate): class CreateLink(AbstractCreate):
model = Banner model = Banner
form_class = BannerLinkCreateForm form_class = BannerLinkCreateForm
@ -67,6 +69,7 @@ class BannerList(AbstractList):
qs = qs.filter(group__isnull=False) qs = qs.filter(group__isnull=False)
return qs return qs
class LinkList(AbstractList): class LinkList(AbstractList):
model = Banner model = Banner
verbose = u'Список ссылок' verbose = u'Список ссылок'
@ -114,7 +117,10 @@ class PaidList(ListView):
paginate_by = settings.ADMIN_PAGINATION paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self): def get_queryset(self):
return self.model.objects.language().filter(paid_new__isnull=False) qs = self.model.objects.language().filter(paid_new__isnull=False).order_by('-paid_new__public')
if self.request.GET.get('onlypublic'):
qs = qs.filter(paid_new__public=True)
return qs
class PaidCreate(CreateView): class PaidCreate(CreateView):
@ -162,6 +168,18 @@ class PaidStat(DetailView):
model = Paid model = Paid
template_name = 'admin/expobanner/paid_stat.html' template_name = 'admin/expobanner/paid_stat.html'
def get_context_data(self, **kwargs):
context = super(PaidStat, self).get_context_data(**kwargs)
obj = self.object
context['all'] = obj.paidstat_set.aggregate(
official=Sum('official_clicks'),
ticket=Sum('tickets_clicks'),
participation=Sum('participation_clicks'),
catalog=Sum('catalog_clicks')
)
return context
# ---------------------------------- # ----------------------------------
class MainList(ListView): class MainList(ListView):
model = Exposition model = Exposition
@ -169,7 +187,10 @@ class MainList(ListView):
paginate_by = settings.ADMIN_PAGINATION paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self): def get_queryset(self):
return self.model.objects.language().filter(main__isnull=False) qs = self.model.objects.language().filter(main__isnull=False).order_by('-main__public')
if self.request.GET.get('onlypublic'):
qs = qs.filter(main__public=True)
return qs
class MainCreate(CreateView): class MainCreate(CreateView):
@ -202,6 +223,7 @@ def main_turn(request, pk, status):
return HttpResponseRedirect('/admin/expobanners/main/list/') return HttpResponseRedirect('/admin/expobanners/main/list/')
class MainStat(DetailView): class MainStat(DetailView):
model = MainPage model = MainPage
template_name = 'admin/expobanner/main_stat.html' template_name = 'admin/expobanner/main_stat.html'
@ -210,10 +232,16 @@ class MainStat(DetailView):
context = super(MainStat, self).get_context_data(**kwargs) context = super(MainStat, self).get_context_data(**kwargs)
obj = self.object obj = self.object
context['stats'] = obj.link.banner_stat.all() context['stats'] = obj.link.banner_stat.all()
context['all'] = obj.link.banner_stat.aggregate(
views=Sum('view'),
clicks=Sum('click'),
unique_clicks=Sum('unique_click'),
unique_views=Sum('unique_view')
)
return context return context
# ------------------------------------ # ------------------------------------
from datetime import date
class TopList(ListView): class TopList(ListView):
model = Exposition model = Exposition
@ -221,7 +249,10 @@ class TopList(ListView):
paginate_by = settings.ADMIN_PAGINATION paginate_by = settings.ADMIN_PAGINATION
def get_queryset(self): def get_queryset(self):
return self.model.objects.language().filter(top__isnull=False) qs = self.model.objects.language().filter(top__isnull=False).order_by('-top__fr')
if self.request.GET.get('onlypublic'):
qs = qs.filter(top__fr__lte=date.today(), top__to__gte=date.today())
return qs
class TopCreate(CreateView): class TopCreate(CreateView):

@ -267,4 +267,4 @@ class TopUpdateForm(forms.ModelForm):
top.save() top.save()
self.save_m2m() self.save_m2m()
return top return top

@ -113,7 +113,6 @@ class Banner(models.Model, StatMixin):
def get_admin_url(self): def get_admin_url(self):
return '/admin/expobanners/banners/banner/%d/edit/'%self.id return '/admin/expobanners/banners/banner/%d/edit/'%self.id
def key(slef): def key(slef):
if hasattr(settings, 'SECRET_KEY'): if hasattr(settings, 'SECRET_KEY'):
key = str(datetime.now()) + settings.SECRET_KEY key = str(datetime.now()) + settings.SECRET_KEY
@ -206,6 +205,9 @@ class LogStat(models.Model):
def __unicode__(self): def __unicode__(self):
return '%s - (%s)' % (self.banner, self.date) return '%s - (%s)' % (self.banner, self.date)
class Meta:
ordering = ['-date']
# ------------------ # ------------------
class Paid(models.Model, StatMixin): class Paid(models.Model, StatMixin):
@ -241,6 +243,9 @@ class PaidStat(models.Model):
participation_clicks = models.PositiveIntegerField(default=0) participation_clicks = models.PositiveIntegerField(default=0)
official_clicks = models.PositiveIntegerField(default=0) official_clicks = models.PositiveIntegerField(default=0)
class Meta:
ordering = ['-date']
class Top(models.Model, StatMixin): class Top(models.Model, StatMixin):
link = models.ForeignKey(Banner) link = models.ForeignKey(Banner)
@ -266,6 +271,7 @@ class Top(models.Model, StatMixin):
except IndexError: except IndexError:
return None return None
class TopStat(models.Model): class TopStat(models.Model):
date = models.DateField() date = models.DateField()
theme = models.ForeignKey('theme.Theme', blank=True, null=True) theme = models.ForeignKey('theme.Theme', blank=True, null=True)
@ -317,7 +323,6 @@ def generate_stat_pass(sender, **kwargs):
obj.save() obj.save()
post_save.connect(generate_stat_pass, sender=Banner) post_save.connect(generate_stat_pass, sender=Banner)
post_save.connect(generate_stat_pass, sender=Paid) post_save.connect(generate_stat_pass, sender=Paid)
post_save.connect(generate_stat_pass, sender=Top) post_save.connect(generate_stat_pass, sender=Top)

@ -160,14 +160,12 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
paid_new = models.ForeignKey('expobanner.Paid', blank=True, null=True, on_delete=models.SET_NULL) paid_new = models.ForeignKey('expobanner.Paid', blank=True, null=True, on_delete=models.SET_NULL)
top = models.ForeignKey('expobanner.Top', blank=True, null=True, on_delete=models.SET_NULL) top = models.ForeignKey('expobanner.Top', blank=True, null=True, on_delete=models.SET_NULL)
main = models.ForeignKey('expobanner.MainPage', blank=True, null=True, on_delete=models.SET_NULL)
#set manager of this model(fisrt manager is default) #set manager of this model(fisrt manager is default)
objects = ExpoManager() objects = ExpoManager()
enable = ClientManager() enable = ClientManager()
imports = ExpoImportManager() imports = ExpoImportManager()
def __unicode__(self): def __unicode__(self):
return self.lazy_translation_getter('name', unicode(self.pk)) return self.lazy_translation_getter('name', unicode(self.pk))
@ -308,6 +306,18 @@ class Exposition(TranslatableModel, EventMixin, ExpoMixin):
def theme_ids(self): def theme_ids(self):
return [item['id'] for item in self.theme.all().values('id')] return [item['id'] for item in self.theme.all().values('id')]
def get_main_link(self):
if self.main:
return self.main.link.get_click_link()
else:
return self.get_permanent_url()
def get_top_link(self):
if self.top:
return self.top.link.get_click_link()
else:
return self.get_permanent_url()
class Statistic(TranslatableModel): class Statistic(TranslatableModel):
exposition = models.ForeignKey(Exposition, related_name='statistic') exposition = models.ForeignKey(Exposition, related_name='statistic')

@ -1,4 +1,4 @@
{% extends 'base.html' %} {% extends 'admin/base.html' %}
{% block body %} {% block body %}
@ -8,7 +8,14 @@
</div> </div>
<div class="box-content"> <div class="box-content">
{% block list_table %} {% block list_table %}
<a class="btn btn-success" href="{% url 'expobanner-create_main' %}"><i class="icon-plus-sign icon-white"></i> Добавить выставку</a> <div style="float:left;">
<a class="btn btn-success" href="{% url 'expobanner-create_main' %}"><i class="icon-plus-sign icon-white"></i> Добавить выставку</a>
</div>
<div style="float:right;">
<form method="get" id="form">
Только опубликование<input id="public" type="checkbox" name="onlypublic" value="true">
</form>
</div>
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
@ -36,5 +43,13 @@
{# pagination #} {# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div> </div>
<script>
var cbox = $("#public");
var form = $("#form");
if(location.search != "")
cbox.attr('checked', true);
cbox.click(function(){
form.submit()
});
</script>
{% endblock %} {% endblock %}

@ -1,4 +1,4 @@
{% extends 'base.html' %} {% extends 'admin/base.html' %}
{% load static %} {% load static %}
{% block scripts %} {% block scripts %}
<script src="{% static 'js/jquery.dataTables.min.js' %}"></script> <script src="{% static 'js/jquery.dataTables.min.js' %}"></script>
@ -27,6 +27,14 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td><b>Всего</b></td>
<td>{{ all.views }}</td>
<td>{{ all.clicks }}</td>
<td>{{ all.unique_views}}</td>
<td>{{ all.unique_clicks }}</td>
</tr>
{% with stats=stats %} {% with stats=stats %}
{% for stat in stats %} {% for stat in stats %}
<tr> <tr>

@ -8,8 +8,13 @@
</div> </div>
<div class="box-content"> <div class="box-content">
{% block list_table %} {% block list_table %}
<a class="btn btn-success" href="{% url 'expobanner-create_paid' %}"><i class="icon-plus-sign icon-white"></i> Добавить выставку</a> <a class="btn btn-success" href="{% url 'expobanner-create_paid' %}"><i class="icon-plus-sign icon-white"></i> Добавить выставку</a>
<table class="table table-hover"> <div style="float:right;">
<form method="get" id="form">
Только опубликование<input id="public" type="checkbox" name="onlypublic" value="true">
</form>
</div>
<table class="table table-hover">
<thead> <thead>
<tr> <tr>
<th>Выставка</th> <th>Выставка</th>
@ -34,5 +39,13 @@
{# pagination #} {# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div> </div>
<script>
var cbox = $("#public");
var form = $("#form");
if(location.search != "")
cbox.attr('checked', true);
cbox.click(function(){
form.submit()
});
</script>
{% endblock %} {% endblock %}

@ -27,6 +27,13 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td><b>За весь период</b></td>
<td>{{ all.official }}</td>
<td>{{ all.ticket }}</td>
<td>{{ all.participation}}</td>
<td>{{ all.catalog }}</td>
</tr>
{% with stats=object.paidstat_set.all %} {% with stats=object.paidstat_set.all %}
{% for stat in stats %} {% for stat in stats %}
<tr> <tr>

@ -9,6 +9,11 @@
<div class="box-content"> <div class="box-content">
{% block list_table %} {% block list_table %}
<a class="btn btn-success" href="{% url 'expobanner-create_top' %}"><i class="icon-plus-sign icon-white"></i> Добавить выставку</a> <a class="btn btn-success" href="{% url 'expobanner-create_top' %}"><i class="icon-plus-sign icon-white"></i> Добавить выставку</a>
<div style="float:right;">
<form method="get" id="form">
Только активние <input id="public" type="checkbox" name="onlypublic" value="true">
</form>
</div>
<table class="table table-hover"> <table class="table table-hover">
<thead> <thead>
<tr> <tr>
@ -32,5 +37,13 @@
{# pagination #} {# pagination #}
{% include 'admin/includes/admin_pagination.html' with page_obj=object_list %} {% include 'admin/includes/admin_pagination.html' with page_obj=object_list %}
</div> </div>
<script>
var cbox = $("#public");
var form = $("#form");
if(location.search != "")
cbox.attr('checked', true);
cbox.click(function(){
form.submit()
});
</script>
{% endblock %} {% endblock %}
Loading…
Cancel
Save